Skip to content

Latest commit

 

History

History
1 lines (1 loc) · 26 KB

cl5nfln1e036xminveo3i9f6o.md

File metadata and controls

1 lines (1 loc) · 26 KB

IyMgRXZlcnkgdGhpbmcgYWJvdXQgTWFjaGluZSBMZWFybmluZ/CfpJYKCiMjICAxLiBXaGF0IGlzIG1hY2hpbmUgbGVhcm5pbmcgPyDwn5mE8J+ZhAoKPGlmcmFtZSBzcmM9Imh0dHBzOi8vZ2lwaHkuY29tL2VtYmVkL2d1dFo1UG02WGw2MmVJZjVSWiIgd2lkdGg9IjQ4MCIgaGVpZ2h0PSIyNTIiIGZyYW1lQm9yZGVyPSIwIiBjbGFzcz0iZ2lwaHktZW1iZWQiIGFsbG93RnVsbFNjcmVlbj48L2lmcmFtZT48cD48YSBocmVmPSJodHRwczovL2dpcGh5LmNvbS9naWZzL0RhdGFDYW1wLW1hY2hpbmUtbGVhcm5pbmctbWwtZGF0YWNhbXAtZ3V0WjVQbTZYbDYyZUlmNVJaIj48L2E+PC9wPgoKSW4gc2ltcGxlIHdvcmRzLCBNYWNoaW5lIGxlYXJuaW5nIGlzIGEgc3Vic2V0IG9mIEFydGlmaWNpYWwgSW50ZWxsaWdlbmNlIChBSSkgd2hpY2ggcHJvdmlkZXMgbWFjaGluZXMgdGhlIGFiaWxpdHkgdG8gbGVhcm4gYXV0b21hdGljYWxseSAmIGltcHJvdmUgZnJvbSBwcmV2aW91cyBleHBlcmllbmNlIHdpdGhvdXQgYmVpbmcgZXhwbGljaXRseSBwcm9ncmFtbWVkLiBJbiB0aGUgc2Vuc2UsIGl0IGlzIHRoZSBwcmFjdGljZSBvZiBnZXR0aW5nIE1hY2hpbmVzIHRvIHNvbHZlIHByb2JsZW1zIGJ5IGdhaW5pbmcgdGhlIGFiaWxpdHkgdG8gdGhpbmsuCgojIyAyLiBNYWNoaW5lIExlYXJuaW5nIERlZmluaXRpb25zCgohW1doYXQtSXMtTWFjaGluZS1MZWFybmluZy1JbnRyb2R1Y3Rpb24tVG8tTWFjaGluZS1MZWFybmluZy1FZHVyZWthLnBuZ10oaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NTY5Mjk0NTA2MzgvbDJZQUVLRnZ3LnBuZyBhbGlnbj0ibGVmdCIpCgoKLSAqKkFsZ29yaXRobTogKiogQSBNYWNoaW5lIExlYXJuaW5nIGFsZ29yaXRobSBpcyBhIHNldCBvZiBydWxlcyBhbmQgc3RhdGlzdGljYWwgdGVjaG5pcXVlcyB1c2VkIHRvIGxlYXJuIHBhdHRlcm5zIGZyb20gZGF0YSBhbmQgZHJhdyBzaWduaWZpY2FudCBpbmZvcm1hdGlvbiBmcm9tIGl0LiBJdCBpcyB0aGUgbG9naWMgYmVoaW5kIGEgTWFjaGluZSBMZWFybmluZyBtb2RlbC4gQW4gZXhhbXBsZSBvZiBhIE1hY2hpbmUgTGVhcm5pbmcgYWxnb3JpdGhtIGlzIHRoZSBMaW5lYXIgUmVncmVzc2lvbiBhbGdvcml0aG0uCgotICoqTW9kZWw6ICoqIEEgbW9kZWwgaXMgdGhlIG1haW4gY29tcG9uZW50IG9mIE1hY2hpbmUgTGVhcm5pbmcuIEEgbW9kZWwgaXMgdHJhaW5lZCBieSB1c2luZyBhIE1hY2hpbmUgTGVhcm5pbmcgQWxnb3JpdGhtLiBBbiBhbGdvcml0aG0gbWFwcyBhbGwgdGhlIGRlY2lzaW9ucyB0aGF0IGEgbW9kZWwgaXMgc3VwcG9zZWQgdG8gdGFrZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gaW5wdXQsIGluIG9yZGVyIHRvIGdldCB0aGUgY29ycmVjdCBvdXRwdXQuCgotICoqUHJlZGljdG9yIFZhcmlhYmxlOioqIEl0IGlzIGEgZmVhdHVyZShzKSBvZiB0aGUgZGF0YSB0aGF0IGNhbiBiZSB1c2VkIHRvIHByZWRpY3QgdGhlIG91dHB1dC4KCi0gKipSZXNwb25zZSBWYXJpYWJsZToqKiBJdCBpcyB0aGUgZmVhdHVyZSBvciB0aGUgb3V0cHV0IHZhcmlhYmxlIHRoYXQgbmVlZHMgdG8gYmUgcHJlZGljdGVkIGJ5IHVzaW5nIHRoZSBwcmVkaWN0b3IgdmFyaWFibGUocykuCgotICoqVHJhaW5pbmcgRGF0YToqKiBUaGUgTWFjaGluZSBMZWFybmluZyBtb2RlbCBpcyBidWlsdCB1c2luZyB0aGUgdHJhaW5pbmcgZGF0YS4gVGhlIHRyYWluaW5nIGRhdGEgaGVscHMgdGhlIG1vZGVsIHRvIGlkZW50aWZ5IGtleSB0cmVuZHMgYW5kIHBhdHRlcm5zIGVzc2VudGlhbCB0byBwcmVkaWN0IHRoZSBvdXRwdXQuCgotICoqVGVzdGluZyBEYXRhOioqIEFmdGVyIHRoZSBtb2RlbCBpcyB0cmFpbmVkLCBpdCBtdXN0IGJlIHRlc3RlZCB0byBldmFsdWF0ZSBob3cgYWNjdXJhdGVseSBpdCBjYW4gcHJlZGljdCBhbiBvdXRjb21lLiBUaGlzIGlzIGRvbmUgYnkgdGhlIHRlc3RpbmcgZGF0YSBzZXQuCgoKIyMgMy4gSG93IG1hY2hpbmUgbGVhcm5pbmcgZGlmZmVyIGZyb20gQUksIERlZXAgbGVhcm5pbmcoREwpCjxpZnJhbWUgc3JjPSJodHRwczovL2dpcGh5LmNvbS9lbWJlZC9IMjhjMW5TeFpjUkRDR0swYjciIHdpZHRoPSI0ODAiIGhlaWdodD0iNDgwIiBmcmFtZUJvcmRlcj0iMCIgY2xhc3M9ImdpcGh5LWVtYmVkIiBhbGxvd0Z1bGxTY3JlZW4+PC9pZnJhbWU+PHA+PGEgaHJlZj0iaHR0cHM6Ly9naXBoeS5jb20vZ2lmcy9zZW5uaGVpc2VyLW11c2ljLXNvdW5kLWF1ZGlvLUgyOGMxblN4WmNSRENHSzBiNyI+PC9hPjwvcD4KCkFydGlmaWNpYWwgSW50ZWxsaWdlbmNlIGlzIHRoZSBtYWluIHJvb3QgdW5kZXIgd2hpY2ggTWFjaGluZSBMZWFybmluZyBhbmQgRGVlcCBMZWFybmluZyBjb21lLiBBbmQgeW91IGNhbiBhbHNvIHNlZSBpbiB0aGUgZGlhZ3JhbSB0aGF0IGV2ZW4gZGVlcCBsZWFybmluZyBpcyBhIHN1YnNldCBvZiBNYWNoaW5lIExlYXJuaW5nLiBTbyBhbGwgdGhyZWUgb2YgdGhlbSBBSSwgbWFjaGluZSBsZWFybmluZyBhbmQgZGVlcCBsZWFybmluZyBhcmUganVzdCB0aGUgc3Vic2V0cyBvZiBlYWNoIG90aGVyLgoKCiFbMTU4LTE1ODUyNDBfYWktbWwtYW5kLWRhdGEtc2NpZW5jZS1yZWxhdGVkLWhkLXBuZy5wbmddKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjU2OTkzOTMyMzkyL1NjeHpVV1IxNy5wbmcgYWxpZ249ImxlZnQiKQoKCiMjIDQuIE1hY2hpbmUgTGVhcm5pbmcgVHlwZXMKCkEgbWFjaGluZSBjYW4gbGVhcm4gdG8gc29sdmUgYSBwcm9ibGVtIGJ5IGZvbGxvd2luZyBhbnkgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgYXBwcm9hY2hlcy4gVGhlc2UgYXJlIHRoZSB3YXlzIGluIHdoaWNoIGEgbWFjaGluZSBjYW4gbGVhcm46CgotIFN1cGVydmlzZWQgTGVhcm5pbmcKLSBVbnN1cGVydmlzZWQgTGVhcm5pbmcKLSBSZWluZm9yY2VtZW50IExlYXJuaW5nIAoKIVtUeXBlcy1vZi1NYWNoaW5lLUxlYXJuaW5nLVdhaHQtaXMtTWFjaGluZS1MZWFybmluZy1FZHVyZWthLTIucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY1NjkzMTAwODEyOS9oX1VxX0haM0gucG5nIGFsaWduPSJsZWZ0IikKCgogIyMjICoqNC4xIFN1cGVydmlzZWQgTGVhcm5pbmcqKgoKU3VwZXJ2aXNlZCBsZWFybmluZyBpcyBhIHRlY2huaXF1ZSBpbiB3aGljaCB3ZSB0ZWFjaCBvciB0cmFpbiB0aGUgbWFjaGluZSB1c2luZyBkYXRhIHdoaWNoIGlzIHdlbGwgbGFiZWxlZC4gCgpDb25zaWRlciB0aGUgZmlndXJlLiBIZXJlIHdl4oCZcmUgZmVlZGluZyB0aGUgbWFjaGluZSBpbWFnZXMgb2YgVG9tIGFuZCBKZXJyeSBhbmQgdGhlIGdvYWwgaXMgZm9yIHRoZSBtYWNoaW5lIHRvIGlkZW50aWZ5IGFuZCBjbGFzc2lmeSB0aGUgaW1hZ2VzIGludG8gdHdvIGdyb3VwcyAoVG9tIGltYWdlcyBhbmQgSmVycnkgaW1hZ2VzKS4gVGhlIHRyYWluaW5nIGRhdGEgc2V0IHRoYXQgaXMgZmVlZCB0byB0aGUgbW9kZWwgaXMgbGFiZWxlZCwgYXMgaW4sIHdl4oCZcmUgdGVsbGluZyB0aGUgbWFjaGluZSwg4oCYdGhpcyBpcyBob3cgVG9tIGxvb2tzIGFuZCB0aGlzIGlzIEplcnJ54oCZLiBCeSBkb2luZyBzbyB5b3XigJlyZSB0cmFpbmluZyB0aGUgbWFjaGluZSBieSB1c2luZyBsYWJlbGVkIGRhdGEuIEluIFN1cGVydmlzZWQgTGVhcm5pbmcsIHRoZXJlIGlzIGEgd2VsbC1kZWZpbmVkIHRyYWluaW5nIHBoYXNlIGRvbmUgd2l0aCB0aGUgaGVscCBvZiBsYWJlbGVkIGRhdGEuCgohW1N1cGVydmlzZWQtTGVhcm5pbmctSW50cm9kdWN0aW9uLVRvLU1hY2hpbmUtTGVhcm5pbmctRWR1cmVrYS5wbmddKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjU2OTI5NjAwODE2L1RKT1F4SjdvYS5wbmcgYWxpZ249ImxlZnQiKQoKCiMjIyAqKjQuMiBXaHkgdGhpcyBjYXRlZ29yeSBvZiBtYWNoaW5lIGxlYXJuaW5nIGlzIHRlcm1lZCBhcyBzdXBlcnZpc2VkIGxlYXJuaW5nPyoqCgpUaGlzIGNhdGVnb3J5IGlzIHRlcm1lZCBhcyBzdXBlcnZpc2VkIGxlYXJuaW5nIGJlY2F1c2UgdGhlIHByb2Nlc3Mgb2YgYW4gYWxnb3JpdGhtIGxlYXJuaW5nIGZyb20gdGhlIHRyYWluaW5nIGRhdGFzZXQgY2FuIGJlIGFzIGEgdGVhY2hlciB0ZWFjaGluZyBoaXMgc3R1ZGVudHMuIFRoZSBhbGdvcml0aG0gY29udGludW91c2x5IHByZWRpY3RzIHRoZSByZXN1bHQgb24gdGhlIGJhc2lzIG9mIHRyYWluaW5nIGRhdGEgYW5kIGlzIGNvbnRpbnVvdXNseSBjb3JyZWN0ZWQgYnkgdGhlIHRlYWNoZXIuIFRoZSBsZWFybmluZyBjb250aW51ZXMgdW50aWwgdGhlIGFsZ29yaXRobSBhY2hpZXZlcyBhbiBhY2NlcHRhYmxlIGxldmVsIG9mIHBlcmZvcm1hbmNlIGFuZCBhIHdlbGwgZGVmaW5lIGFjY3VyYWN5LgoKLSAqKlN1cGVydmlzZWQgTGVhcm5pbmcgVXNlY2FzZXMqKgoKCiFbTWFjaGluZS1MZWFybmluZy1Vc2UtQ2FzZS1XaGF0LWlzLU1hY2hpbmUtTGVhcm5pbmctRWR1cmVrYS01Mjh4MTkyLnBuZ10oaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NTY5MzEyMzc2NDIvNUZhU0trTy1SLnBuZyBhbGlnbj0ibGVmdCIpCgpDb3J0YW5hIG9yIGFueSBzcGVlY2ggYXV0b21hdGVkIHN5c3RlbSBpbiB5b3VyIG1vYmlsZSBwaG9uZSB0cmFpbnMgeW91ciB2b2ljZSBhbmQgdGhlbiBzdGFydHMgd29ya2luZyBiYXNlZCBvbiB0aGlzIHRyYWluaW5nLiBUaGlzIGlzIGFuIGFwcGxpY2F0aW9uIG9mIFN1cGVydmlzZWQgTGVhcm5pbmcuCgohW0FuZHJvaWQtd2VhdGhlci13aWRnZXQucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY1NjkzMTI2NDU4OS9KMFg5SG4wbGgucG5nIGFsaWduPSJsZWZ0IikKClByZWRpY3RzIHRoZSB1cGNvbWluZyB3ZWF0aGVyIGJ5IGFuYWx5emluZyB0aGUgcGFyYW1ldGVycyBmb3IgYSBnaXZlbiB0aW1lIG9uIHNvbWUgcHJpb3Iga25vd2xlZGdlICh3aGVuIGl0cyBzdW5ueSwgdGVtcGVyYXR1cmUgaXMgaGlnaGVyOyB3aGVuIGl0cyBjbG91ZHksIGh1bWlkaXR5IGlzIGhpZ2hlciwgZXRjLikuCgoKCiMjIyAqKjQuMyBVbnN1cGVydmlzZWQgTGVhcm5pbmcqKgoKVW5zdXBlcnZpc2VkIGxlYXJuaW5nIGludm9sdmVzIHRyYWluaW5nIGJ5IHVzaW5nIHVubGFiZWxlZCBkYXRhIGFuZCBhbGxvd2luZyB0aGUgbW9kZWwgdG8gYWN0IG9uIHRoYXQgaW5mb3JtYXRpb24gd2l0aG91dCBndWlkYW5jZS4gCgoKIVtVbnN1cGVydmlzZWQtTGVhcm5pbmctSW50cm9kdWN0aW9uLVRvLU1hY2hpbmUtTGVhcm5pbmctRWR1cmVrYS5wbmddKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjU2OTI5NjYwNTkzLzlYYl94ZUFhSC5wbmcgYWxpZ249ImxlZnQiKQoKRm9yIGV4YW1wbGUsIGl0IGlkZW50aWZpZXMgcHJvbWluZW50IGZlYXR1cmVzIG9mIFRvbSBzdWNoIGFzIGVhcnMsIGJpZ2dlciBzaXplLCBjb2xvciBldGMsIHRvIHVuZGVyc3RhbmQgdGhhdCB0aGlzIGltYWdlIGlzIG9mIHR5cGUgMS4gU2ltaWxhcmx5LCBpdCBmaW5kcyBzdWNoIGZlYXR1cmVzIGluIEplcnJ5IGFuZCBrbm93cyB0aGF0IHRoaXMgaW1hZ2UgaXMgb2YgdHlwZSAyLiBUaGVyZWZvcmUsIGl0IGNsYXNzaWZpZXMgdGhlIGltYWdlcyBpbnRvIHR3byBkaWZmZXJlbnQgY2xhc3NlcyB3aXRob3V0IGtub3dpbmcgd2hvIGlzIFRvbSBvciBKZXJyeS4KCiMjIyAqKjQuNCBXaHkgdGhpcyBjYXRlZ29yeSBvZiBtYWNoaW5lIGxlYXJuaW5nIGlzIGtub3duIGFzIHVuc3VwZXJ2aXNlZCBsZWFybmluZz8qKgoKVGhpcyBjYXRlZ29yeSBvZiBtYWNoaW5lIGxlYXJuaW5nIGlzIGtub3duIGFzIHVuc3VwZXJ2aXNlZCBiZWNhdXNlIHVubGlrZSBzdXBlcnZpc2VkIGxlYXJuaW5nIHRoZXJlIGlzIG5vIHRlYWNoZXIuIEFsZ29yaXRobXMgYXJlIGxlZnQgb24gdGhlaXIgb3duIHRvIGRpc2NvdmVyIGFuZCByZXR1cm4gdGhlIGludGVyZXN0aW5nIHN0cnVjdHVyZSBpbiB0aGUgZGF0YS4KCi0gKipVbnN1cGVydmlzZWQgTGVhcm5pbmcgVXNlY2FzZXMqKgoKCgohW2ZzZXJzLlBOR10oaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NTc3ODQ4OTMxNzgvMFJObm10VTZnLlBORyBhbGlnbj0ibGVmdCIpCgpBIGZyaWVuZCBpbnZpdGVzIHlvdSB0byBoaXMgcGFydHkgd2hlcmUgeW91IG1lZXQgdG90YWxseSBzdHJhbmdlcnMuIE5vdyB5b3Ugd2lsbCBjbGFzc2lmeSB0aGVtIHVzaW5nIHVuc3VwZXJ2aXNlZCBsZWFybmluZyAobm8gcHJpb3Iga25vd2xlZGdlKSBhbmQgdGhpcyBjbGFzc2lmaWNhdGlvbiBjYW4gYmUgb24gdGhlIGJhc2lzIG9mIGdlbmRlciwgYWdlIGdyb3VwLCBkcmVzc2luZywgZWR1Y2F0aW9uYWwgcXVhbGlmaWNhdGlvbiBvciB3aGF0ZXZlciB3YXkgeW91IHdvdWxkIGxpa2UuIFNpbmNlIHlvdSBkaWRu4oCZdCBoYXZlIGFueSBwcmlvciBrbm93bGVkZ2UgYWJvdXQgcGVvcGxlIGFuZCBzbyB5b3UganVzdCBjbGFzc2lmaWVkIHRoZW0gb24gcmVhbCB0aW1lIHNpdHVhdGlvbi4KCgohW3NodXR0ZXJzdG9ja181ODE2NDc3NTYtNTI4eDI5Ny5wbmddKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjU2OTMyMDAzMzE0L0dpNlNwdFB3RC5wbmcgYWxpZ249ImxlZnQiKQoKCkxldOKAmXMgc3VwcG9zZSB5b3UgaGF2ZSBuZXZlciBzZWVuIGEgRm9vdGJhbGwgbWF0Y2ggYmVmb3JlIGFuZCBieSBjaGFuY2Ugd2F0Y2ggYSB2aWRlbyBvbiBpbnRlcm5ldCwgbm93IHlvdSBjYW4gY2xhc3NpZnkgcGxheWVycyBvbiB0aGUgYmFzaXMgb2YgZGlmZmVyZW50IGNyaXRlcmlvbiBsaWtlIFBsYXllcnMgd2VhcmluZyB0aGUgc2FtZSBzb3J0IG9mIGtpdHMgYXJlIGluIG9uZSBjbGFzcywgUGxheWVycyBvZiBvbmUgc3R5bGUgYXJlIGluIG9uZSBjbGFzcyAocGxheWVycywgZ29hbGtlZXBlciwgcmVmZXJlZSksIG9yIG9uIHRoZSBiYXNpcyBvZiBwbGF5aW5nIHN0eWxlKGF0dGFja2VyIG9yIGRlZmVuZGVyKSBvciB3aGF0ZXZlciB3YXkgeW91IHdvdWxkIG9ic2VydmUsIHlvdSBjYW4gY2xhc3NpZnkgaXQuCgojIyMgKio0LjUgUmVpbmZvcmNlbWVudCBMZWFybmluZyoqCgpSZWluZm9yY2VtZW50IExlYXJuaW5nIGlzIGEgcGFydCBvZiBNYWNoaW5lIGxlYXJuaW5nIHdoZXJlIGFuIGFnZW50IGlzIHB1dCBpbiBhbiBlbnZpcm9ubWVudCBhbmQgaGUgbGVhcm5zIHRvIGJlaGF2ZSBpbiB0aGlzIGVudmlyb25tZW50IGJ5IHBlcmZvcm1pbmcgY2VydGFpbiBhY3Rpb25zIGFuZCBvYnNlcnZpbmcgdGhlIHJld2FyZHMgd2hpY2ggaXQgZ2V0cyBmcm9tIHRob3NlIGFjdGlvbnMuIAoKCiFbUmVpbmZvcmNlbWVudC1UcmFpbmluZy1NYWNoaW5lLUxlYXJuaW5nLVR1dG9yaWFsLUVkdXJla2EucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY1NjkzMDQ2NjE5My94OVpDbktqTi0ucG5nIGFsaWduPSJsZWZ0IikKClRoaXMgdHlwZSBvZiBNYWNoaW5lIExlYXJuaW5nIGlzIGNvbXBhcmF0aXZlbHkgZGlmZmVyZW50LiBJbWFnaW5lIHRoYXQgdG9kYXkgcmFpbiBmYWxsIGluIHlvdXIgY2l0eSBvciBub3Q/CgpUaGUgcmVpbmZvcmNlbWVudCBsZWFybmluZyBhbGdvcml0aG0gaXMgYWxsIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBlbnZpcm9ubWVudCBhbmQgdGhlIGxlYXJuaW5nIGFnZW50LiBUaGUgbGVhcm5pbmcgYWdlbnQgaXMgYmFzZWQgb24gZXhwbG9yYXRpb24gYW5kIGV4cGxvaXRhdGlvbi4KCkV4cGxvcmF0aW9uIGlzIHdoZW4gdGhlIGxlYXJuaW5nIGFnZW50IGFjdHMgb24gdHJpYWwgYW5kIGVycm9yIGFuZCBFeHBsb2l0YXRpb24gaXMgd2hlbiBpdCBwZXJmb3JtcyBhbiBhY3Rpb24gYmFzZWQgb24gdGhlIGtub3dsZWRnZSBnYWluZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQuIFRoZSBlbnZpcm9ubWVudCByZXdhcmRzIHRoZSBhZ2VudCBmb3IgZXZlcnkgY29ycmVjdCBhY3Rpb24sIHdoaWNoIGlzIHRoZSByZWluZm9yY2VtZW50IHNpZ25hbC4gV2l0aCB0aGUgYWltIG9mIGNvbGxlY3RpbmcgbW9yZSByZXdhcmRzIG9idGFpbmVkLCB0aGUgYWdlbnQgaW1wcm92ZXMgaXRzIGVudmlyb25tZW50IGtub3dsZWRnZSB0byBjaG9vc2Ugb3IgcGVyZm9ybSB0aGUgbmV4dCBhY3Rpb24uCgoKCiMjIyA0LjYgQ29uY2VwdCBvZiBsYWJlbGxlZCBkYXRhICYgdW5sYWJlbGxlZCBkYXRhCgoKLSBMYWJlbGVkIGRhdGEgaXMgZGF0YSB0aGF04oCZcyBzdWJqZWN0IHRvIGEgcHJpb3IgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSB3b3JsZCBvcGVyYXRlcy4gQSBodW1hbiBvciBhdXRvbWF0aWMgdGFnZ2VyIG11c3QgdXNlIHRoZWlyIHByaW9yIGtub3dsZWRnZSB0byBpbXBvc2UgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgZGF0YS4gVGhpcyBrbm93bGVkZ2UgaXMgaG93ZXZlciBub3QgcHJlc2VudCBpbiB0aGUgbWVhc3VyZW1lbnRzIHdlIHBlcmZvcm0uCgoKLSBVbmxhYmVsZWQgZGF0YSBpcywgaW4gdGhlIHNlbnNlIGluZGljYXRlZCBhYm92ZSwgdGhlIG9ubHkgcHVyZSBkYXRhIHRoYXQgZXhpc3RzLiBJZiB3ZSBzd2l0Y2ggb24gYSBzZW5zb3IsIG9yIGlmIHdlIG9wZW4gb3VyIGV5ZXMsIGFuZCBrbm93IG5vdGhpbmcgb2YgdGhlIGVudmlyb25tZW50IG9yIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHdvcmxkIG9wZXJhdGVzLCB3ZSB0aGVuIGNvbGxlY3QgdW5sYWJlbGVkIGRhdGEuCgoKCiMjIDUuIERpZmZlcmVudCBiZXR3ZWVuIFJlZ3Jlc3Npb24gdnMgQ2xhc3NpZmljYXRpb24gdnMgQ2x1c3RlcmluZwoKCiFbUmVncmVzc2lvbi12cy1DbGFzc2lmaWNhdGlvbi12cy1DbHVzdGVyaW5nLUludHJvZHVjdGlvbi1Uby1NYWNoaW5lLUxlYXJuaW5nLUVkdXJla2EucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY1NjkzMDEyODQxMy9xdHA4cWQxcjAucG5nIGFsaWduPSJsZWZ0IikKCi0gKipSZWdyZXNzaW9uOioqCgpJbiB0aGlzIHR5cGUgb2YgcHJvYmxlbSB0aGUgb3V0cHV0IGlzIGEgY29udGludW91cyBxdWFudGl0eS4gU28sIGZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBwcmVkaWN0IHRoZSBzcGVlZCBvZiBhIGNhciBnaXZlbiB0aGUgZGlzdGFuY2UsIGl0IGlzIGEgUmVncmVzc2lvbiBwcm9ibGVtLiBSZWdyZXNzaW9uIHByb2JsZW1zIGNhbiBiZSBzb2x2ZWQgYnkgdXNpbmcgU3VwZXJ2aXNlZCBMZWFybmluZyBhbGdvcml0aG1zIGxpa2UgTGluZWFyIFJlZ3Jlc3Npb24uCgoKLSAqKkNsYXNzaWZpY2F0aW9uOiAqKgoKSW4gdGhpcyB0eXBlLCB0aGUgb3V0cHV0IGlzIGEgY2F0ZWdvcmljYWwgdmFsdWUuIENsYXNzaWZ5aW5nIGVtYWlscyBpbnRvIHR3byBjbGFzc2VzLCBzcGFtIGFuZCBub24tc3BhbSBpcyBhIGNsYXNzaWZpY2F0aW9uIHByb2JsZW0gdGhhdCBjYW4gYmUgc29sdmVkIGJ5IHVzaW5nIFN1cGVydmlzZWQgTGVhcm5pbmcgY2xhc3NpZmljYXRpb24gYWxnb3JpdGhtcyBzdWNoIGFzIFN1cHBvcnQgVmVjdG9yIE1hY2hpbmVzLCBOYWl2ZSBCYXllcywgTG9naXN0aWMgUmVncmVzc2lvbiwgSyBOZWFyZXN0IE5laWdoYm9yLCBldGMuCgoKLSAqKkNsdXN0ZXJpbmc6KiogCgpUaGlzIHR5cGUgb2YgcHJvYmxlbSBpbnZvbHZlcyBhc3NpZ25pbmcgdGhlIGlucHV0IGludG8gdHdvIG9yIG1vcmUgY2x1c3RlcnMgYmFzZWQgb24gZmVhdHVyZSBzaW1pbGFyaXR5LiBGb3IgZXhhbXBsZSwgY2x1c3RlcmluZyB2aWV3ZXJzIGludG8gc2ltaWxhciBncm91cHMgYmFzZWQgb24gdGhlaXIgaW50ZXJlc3RzLCBhZ2UsIGdlb2dyYXBoeSwgZXRjIGNhbiBiZSBkb25lIGJ5IHVzaW5nIFVuc3VwZXJ2aXNlZCBMZWFybmluZyBhbGdvcml0aG1zIGxpa2UgSy1NZWFucyBDbHVzdGVyaW5nLgoKCiMjIDYuIFNvbWUgYXBwbGljYXRpb25zIG9mIE1hY2hpbmUgbGVhcm5pbmcgCgoKIC0gKipUcmFmZmljIEFsZXJ0cyAoTWFwcykqKgoKCiFbZ29vZ2xlLW1hcHMtMTgweDE4MC5wbmddKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjU3MDIwNTAzMjIxL09YMHRrSm5mUC5wbmcgYWxpZ249ImxlZnQiKQoKIE5vdywgR29vZ2xlIE1hcHMgaXMgcHJvYmFibHkgdGhlIGFwcCB3ZSB1c2Ugd2hlbmV2ZXIgd2UgZ28gb3V0IGFuZCByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZGlyZWN0aW9ucyBhbmQgdHJhZmZpYy4gIFRoZSBvdGhlciBkYXkgSSB3YXMgdHJhdmVsaW5nIHRvIGFub3RoZXIgY2l0eSBhbmQgdG9vayB0aGUgZXhwcmVzc3dheSBhbmQgTWFwcyBzdWdnZXN0ZWQ6IOKAnERlc3BpdGUgdGhlIEhlYXZ5IFRyYWZmaWMsIHlvdSBhcmUgb24gdGhlIGZhc3Rlc3Qgcm91dGXigJwuIAogSXTigJlzIGEgY29tYmluYXRpb24gb2YgUGVvcGxlIGN1cnJlbnRseSB1c2luZyB0aGUgc2VydmljZSwgSGlzdG9yaWMgRGF0YSBvZiB0aGF0IHJvdXRlIGNvbGxlY3RlZCBvdmVyIHRpbWUgYW5kIGZldyB0cmlja3MgYWNxdWlyZWQgZnJvbSBvdGhlciBjb21wYW5pZXMuIEV2ZXJ5b25lIHVzaW5nIG1hcHMgaXMgcHJvdmlkaW5nIHRoZWlyIGxvY2F0aW9uLCBhdmVyYWdlIHNwZWVkLCB0aGUgcm91dGUgaW4gd2hpY2ggdGhleSBhcmUgdHJhdmVsaW5nIHdoaWNoIGluIHR1cm4gaGVscHMgR29vZ2xlIGNvbGxlY3QgbWFzc2l2ZSBEYXRhIGFib3V0IHRoZSB0cmFmZmljLCB3aGljaCBtYWtlcyB0aGVtIHByZWRpY3QgdGhlIHVwY29taW5nIHRyYWZmaWMgYW5kIGFkanVzdCB5b3VyIHJvdXRlIGFjY29yZGluZyB0byBpdC4KCgoKIC0gKipWaXJ0dWFsIFBlcnNvbmFsIEFzc2lzdGFudHMqKgoKCiBBcyB0aGUgbmFtZSBzdWdnZXN0cywgVmlydHVhbCBQZXJzb25hbCBBc3Npc3RhbnRzIGFzc2lzdCBpbiBmaW5kaW5nIHVzZWZ1bCBpbmZvcm1hdGlvbiwgd2hlbiBhc2tlZCB2aWEgdGV4dCBvciB2b2ljZS4gIEZldyBvZiB0aGUgbWFqb3IgYXBwbGljYXRpb25zIG9mIE1hY2hpbmUgTGVhcm5pbmcgaGVyZSBhcmU6CiAKLSBTcGVlY2ggUmVjb2duaXRpb24KLSBTcGVlY2ggdG8gVGV4dCBDb252ZXJzaW9uCi0gTmF0dXJhbCBMYW5ndWFnZSBQcm9jZXNzaW5nCi0gVGV4dCB0byBTcGVlY2ggQ29udmVyc2lvbgogCgogCiFbYXNzaXN0YW50LTUyOHgxODEucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY1NzAyMDc5Mjg4Ni80UDhmZVhjUVMucG5nIGFsaWduPSJsZWZ0IikKCiBBbGwgeW91IG5lZWQgdG8gZG8gaXMgYXNrIGEgc2ltcGxlIHF1ZXN0aW9uIGxpa2Ug4oCcV2hhdCBpcyBteSBzY2hlZHVsZSBmb3IgdG9tb3Jyb3c/4oCdIG9yIOKAnFNob3cgbXkgdXBjb21pbmcgRmxpZ2h0c+KAnC4gRm9yIGFuc3dlcmluZywgeW91ciBwZXJzb25hbCBhc3Npc3RhbnQgc2VhcmNoZXMgZm9yIGluZm9ybWF0aW9uIG9yIHJlY2FsbHMgeW91ciByZWxhdGVkIHF1ZXJpZXMgdG8gY29sbGVjdCBpbmZvLiBSZWNlbnRseSBwZXJzb25hbCBhc3Npc3RhbnRzIGFyZSBiZWluZyB1c2VkIGluIENoYXRib3RzIHdoaWNoIGFyZSBiZWluZyBpbXBsZW1lbnRlZCBpbiB2YXJpb3VzIGZvb2Qgb3JkZXJpbmcgYXBwcywgb25saW5lIHRyYWluaW5nIHdlYnNpdGVzIGFuZCBhbHNvIGluIENvbW11dGluZyBhcHBzLCB3ZWJzaXRlcy4KCgoKLSAqKlNlbGYgRHJpdmluZyBDYXJzKioKCgohW1Rlc2xhLWxvZ28tMjAwMy0yNTAweDI1MDAtMTgweDE4MC5wbmddKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjU3MDIwODk1OTQxL09udnFvM0xSTy5wbmcgYWxpZ249ImxlZnQiKQoKIEhlcmUgaXMgb25lIG9mIHRoZSBjb29sZXN0IGFwcGxpY2F0aW9uIG9mIE1hY2hpbmUgTGVhcm5pbmcuIEl04oCZcyBoZXJlIGFuZCBwZW9wbGUgYXJlIGFscmVhZHkgdXNpbmcgaXQuIE1hY2hpbmUgTGVhcm5pbmcgcGxheXMgYSB2ZXJ5IGltcG9ydGFudCByb2xlIGluIFNlbGYgRHJpdmluZyBDYXJzIGFuZCBJ4oCZbSBzdXJlIHlvdSBtaWdodCBoYXZlIGhlYXJkIGFib3V0IFRlc2xhLiBUaGUgbGVhZGVyIGluIHRoaXMgYnVzaW5lc3MgYW5kIHRoZWlyIGN1cnJlbnQgQXJ0aWZpY2lhbCBJbnRlbGxpZ2VuY2UgaXMgZHJpdmVuIGJ5IGhhcmR3YXJlIG1hbnVmYWN0dXJlciBOVklESUEsIHdoaWNoIGlzIGJhc2VkIG9uIFVuc3VwZXJ2aXNlZCBMZWFybmluZyBBbGdvcml0aG0uCgoKCi0gKipPbmxpbmUgVmlkZW8gU3RyZWFtaW5nIChOZXRmbGl4KSoqCgoKVGhlIE5ldGZsaXggYWxnb3JpdGhtIGNvbnN0YW50bHkgZ2F0aGVycyBtYXNzaXZlIGFtb3VudHMgb2YgZGF0YSBhYm91dCB1c2Vyc+KAmSBhY3Rpdml0aWVzIGxpa2U6CgoKCiFbR2V0LUZyZWUtTmV0ZmxpeC1BY2NvdW50LTIwMjEucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY1NzAyMTA2NTU4NS9wV3NUSzNmaDAucG5nIGFsaWduPSJsZWZ0IikKCi0gV2hlbiB5b3UgcGF1c2UsIHJld2luZCwgb3IgZmFzdCBmb3J3YXJkCi0gV2hhdCBkYXkgeW91IHdhdGNoIGNvbnRlbnQgKFRWIFNob3dzIG9uIFdlZWtkYXlzIGFuZCBNb3ZpZXMgb24gV2Vla2VuZHMpCi0gVGhlIERhdGUgYW5kIFRpbWUgeW91IHdhdGNoCi0gV2hlbiB5b3UgcGF1c2UgYW5kIGxlYXZlIGNvbnRlbnQgKGFuZCBpZiB5b3UgZXZlciBjb21lIGJhY2spCi0gVGhlIHJhdGluZ3MgR2l2ZW4gKGFib3V0IDQgbWlsbGlvbiBwZXIgZGF5KSwgU2VhcmNoZXMgKGFib3V0IDMgbWlsbGlvbiBwZXIgZGF5KQotIEJyb3dzaW5nIGFuZCBTY3JvbGxpbmcgQmVoYXZpb3IKCkFuZCBhIGxvdCBtb3JlLiBUaGV5IGNvbGxlY3QgdGhpcyBkYXRhIGZvciBlYWNoIHN1YnNjcmliZXIgdGhleSBoYXZlIGFuZCB1c2UgdGhlaXIgcmVjb21tZW5kZXIgU3lzdGVtIGFuZCBhIGxvdCBvZiBNYWNoaW5lIExlYXJuaW5nIEFwcGxpY2F0aW9ucy4gVGhhdOKAmXMgd2h5IHRoZXkgaGF2ZSBzdWNoIGEgaHVnZSBjdXN0b21lciByZXRlbnRpb24gcmF0ZS4KCgojIyA3LiBQYXZsb3YgdHJhaW5lZCBleHBlcmltZW50IGhpcyBkb2cgdXNpbmcgcmVpbmZvcmNlbWVudCB0cmFpbmluZyAKCgohW1Bhdmxvdi1UcmFpbmluZy1NYWNoaW5lLUxlYXJuaW5nLVR1dG9yaWFsLUVkdXJla2EucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY1NjkzMjQwNDA3OS8tYWIzOU9NTEIucG5nIGFsaWduPSJsZWZ0IikKClBhdmxvdiBkaXZpZGVkIHRoZSB0cmFpbmluZyBvZiBoaXMgZG9nIGludG8gZm91ciBzdGFnZXMuCgpJbiB0aGUgZmlyc3QgcGFydCwgUGF2bG92IGdhdmUgbWVhdCB0byB0aGUgZG9nLCBhbmQgaW4gcmVzcG9uc2UgdG8gdGhlIG1lYXQsIHRoZSBkb2cgc3RhcnRlZCBzYWxpdmF0aW5nLgoKSW4gdGhlIG5leHQgc3RhZ2UgaGUgY3JlYXRlZCBhIHNvdW5kIHdpdGggYSBiZWxsLCBidXQgdGhpcyB0aW1lIHRoZSBkb2dzIGRpZCBub3QgcmVzcG9uZCBhbnl0aGluZy4KCkluIHRoZSB0aGlyZCBzdGFnZSwgaGUgdHJpZWQgdG8gdHJhaW4gaGlzIGRvZyBieSB1c2luZyB0aGUgYmVsbCBhbmQgdGhlbiBnaXZpbmcgdGhlbSBmb29kLiBTZWVpbmcgdGhlIGZvb2QgdGhlIGRvZyBzdGFydGVkIHNhbGl2YXRpbmcuCgo8aWZyYW1lIHNyYz0iaHR0cHM6Ly9naXBoeS5jb20vZW1iZWQvM283YWJBSGRZdlpkQk5uR1pxIiB3aWR0aD0iNDgwIiBoZWlnaHQ9IjQ4MCIgZnJhbWVCb3JkZXI9IjAiIGNsYXNzPSJnaXBoeS1lbWJlZCIgYWxsb3dGdWxsU2NyZWVuPjwvaWZyYW1lPjxwPjxhIGhyZWY9Imh0dHBzOi8vZ2lwaHkuY29tL2dpZnMvZG9nLXB1cHB5LWRvdHRpZS0zbzdhYkFIZFl2WmRCTm5HWnEiPgoKRXZlbnR1YWxseSwgdGhlIGRvZ3Mgc3RhcnRlZCBzYWxpdmF0aW5nIGp1c3QgYWZ0ZXIgaGVhcmluZyB0aGUgYmVsbCwgZXZlbiBpZiB0aGUgZm9vZCB3YXMgbm90IGdpdmVuIGFzIHRoZSBkb2cgd2FzIHJlaW5mb3JjZWQgdGhhdCB3aGVuZXZlciB0aGUgbWFzdGVyIHdpbGwgcmluZyB0aGUgYmVsbCwgaGUgd2lsbCBnZXQgdGhlIGZvb2QuCgoKCiMjIDguIE1hdGhzIGZvciBNYWNoaW5lIExlYXJuaW5nCgpBYnNvbHV0ZWx5IHRoZSBtYWNoaW5lIGxlYXJuaW5nIGlzIGJhc2VkIG9uIHNvbWUgbWF0aGVtYXRpY3MgYXBwcm9hY2hlcy4KCjxpZnJhbWUgc3JjPSJodHRwczovL2dpcGh5LmNvbS9lbWJlZC9BUHFFYnhCc1Zsa1dTdUZwdGgiIHdpZHRoPSI0MzQiIGhlaWdodD0iNDgwIiBmcmFtZUJvcmRlcj0iMCIgY2xhc3M9ImdpcGh5LWVtYmVkIiBhbGxvd0Z1bGxTY3JlZW4+PC9pZnJhbWU+PHA+PGEgaHJlZj0iaHR0cHM6Ly9naXBoeS5jb20vZ2lmcy9tYXRoLXRoaW5raW5nLUFQcUVieEJzVmxrV1N1RnB0aCI+PC9hPjwvcD4KCk91ciBjb21wdXRlcnMgaGF2ZSBiZWNvbWUgY2FwYWJsZSBlbm91Z2ggdG8gZG8gdGhlIG1hdGggaW4gc3BsaXQgc2Vjb25kcyB3aGVyZSB3ZSB3b3VsZCB0YWtlIG1pbnV0ZXMgb3IgaG91cnMgdG8gcGVyZm9ybSB0aGUgY2FsY3VsYXRpb25zLiBCdXQgaW4gcmVhbGl0eSwgaXTigJlzIG5vdCB0aGUgYWJpbGl0eSB0byBzb2x2ZSB0aGUgbWF0aC4gUmF0aGVyLCBpdCBpcyB0aGUgZXllIG9mIGhvdyB0aGUgbWF0aCBuZWVkcyB0byBiZSBhcHBsaWVkLllvdSBuZWVkIHRvIGFuYWx5emUgdGhlIGRhdGEgYW5kIGluZmVyIGluZm9ybWF0aW9uIHNvIHRoYXQgeW91IGNhbiBjcmVhdGUgYSBtb2RlbCB0aGF0IGxlYXJucyBmcm9tIHRoZSBkYXRhLgoKIyMjIDguMSAqKkFwcGxpY2F0aW9uIG9mIExpbmVhciBBbGdlYnJhIGluIE1hY2hpbmUgTGVhcm5pbmcqKgoKLSBXaGVuIHlvdSB3b3JrIHdpdGggaW1hZ2VzLCB5b3UgY2FuIHVzZSB0aGUgY29uY2VwdHMgb2YgTGluZWFyIEFsZ2VicmEgdG8gc2NhbGUsIHNtb290aGVuLCBjcm9wIGFuZCBtdWNoIG1vcmUuIFlvdSBoYXZlIHByZWRlZmluZWQgb3BlcmF0aW9ucyBvciB5b3UgY2FuIGNyZWF0ZSBzdWNoIG9wZXJhdGlvbnMgdGhhdCBjYW4gdGFrZSBjYXJlIG9mIGFsbCB0aGlzLiBZb3UgY2FuIG1ha2UgdXNlIG9mIE51bVB5IGFycmF5cyBhbmQgbG9hZCBpbWFnZSBkYXRhLCBsYXRlciBtYWtlIHVzZSBvZiB0aGUgb3BlcmF0aW9ucyB0byBkbyB5b3VyIHdvcmsuCgoKIVtTY3JlZS1QbG90LVByaW5jaXBhbC1Db21wb25lbnQtQW5hbHlzaXMtRWR1cmVrYS0zOTd4MzAwLnBuZ10oaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NTcxMTUyODY3MzQvbDhJSlBRVEhQLnBuZyBhbGlnbj0ibGVmdCIpCgotIEVuY29kaW5nIERhdGFzZXRzIGlzIGFub3RoZXIgYXBwbGljYXRpb24gd2hlcmUgTGluZWFyIEFsZ2VicmEgaXMgdXNlZC4gWW91IGhhdmUgaW4tYnVpbHQgZnVuY3Rpb25zIGluIG1hbnkgbGFuZ3VhZ2VzIHRoYXQgaGVscCB5b3UgZW5jb2RlIHN0cmluZ3MgdG8gY2hhcmFjdGVycyBvciBzb21ldGhpbmcgZWxzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBtYWRlIHVzaW5nIExpbmVhciBBbGdlYnJhLgoKLSBZb3UgbWF5IGtub3cgYWJvdXQgb3B0aW1pemluZyB0aGUgb3V0cHV0cyBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIG1vc3Qgb3B0aW11bSB2YWx1ZXMgbmVlZGVkIGJ5IG91ciBtb2RlbC4gVGhlcmUgaXMgbW9zdGx5IHRoZSB1c2Ugb2YgTXVsdGl2YXJpYXRlIENhbGN1bHVzIGJ1dCB0aGVyZSBhcmUgY2VydGFpbiB0aW1lcyB3aGVuIGV2ZW4gTGluZWFyIEFsZ2VicmEgZXF1YXRpb25zIGFuZCBtb3JlIGNhbiBiZSB1c2VkIHRvIG9wdGltaXplIG91ciBtb2RlbCBhbmQgdGhlaXIgd2VpZ2h0cyB0aGF0IHlpZWxkIG91dHB1dHMuCgotIFNpbmd1bGFyIFZhbHVlIERlY29tcG9zaXRpb24gKFNWRCkgaXMgYW5vdGhlciBhcHBsaWNhdGlvbiB3aGljaCBpcyBvZiB0aGUgc2FtZSBraW5kIG9mIFBDQSBidXQgZm9yIHNpbmdsZSBkaW1lbnNpb25zLiBUaGlzIGhlbHBzIGluIHRoZSByZWR1Y3Rpb24gb2Ygbm9pc2UsIGhlbHBzIGltcHJvdmUgdGhlIHF1YWxpdHkgb2YgdGhlIGluZm9ybWF0aW9uIHRoYXQgaXMgb2J0YWluZWQgZnJvbSB0aGUgZGltZW5zaW9uIGFuZCBzbyBvbi4gSXQgdXNlcyBFaWdlblZlY3RvcnMgYW5kIE1hdHJpeCBGYWN0b3JpemF0aW9ucyAoTWF0cml4IE9wZXJhdGlvbnMpIGZvciB0aGUgd29ya2luZy4KCgotIGltYWdlcyBjYW4gYmUgYWx0ZXJlZCBhbmQgbmV3IGltYWdlcyBjYW4gYmUgbWFkZSBmcm9tIHRoZW0uIFdlIHVzZSB0aGUgYWR2YW5jZWQgY29uY2VwdHMgb2YgU2hhZG93LCBQcm9qZWN0aW9uIGV0Yy4gaW4gYSBOZXVyYWwgTmV0d29yayB0aGF0IHRyYW5zZm9ybXMgdGhlIHBpeGVscyB0byBvYnRhaW4gYWx0ZXJuYXRlIGltYWdlcyBvZiB0aGF0IGltYWdlLiBJdCBpcyBjYXBhYmxlIG9mIHRyYW5zZm9ybWluZyAyRCBvYmplY3RzIHRvIDNEIHdoaWNoIHJlcXVpcmVzIExpbmVhciBBbGdlYnJhLgoKCi0gTGF0ZW50IFNlbWFudGljIEFuYWx5c2lzIHVzZXMgU3BhcnNlIE1hdHJpY2VzIEZhY3Rvcml6YXRpb24gd2l0aCB0aGUgU1ZEIHRvIGdpdmUgeW91IHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0cyBvZiB0aGUgdGV4dCBkb2N1bWVudC4gVGhlc2UgY2FuIGJlIHVzZWQgZm9yIE5hdHVyYWwgTGFuZ3VhZ2UgUHJvY2Vzc2luZy4KCi0gRGVlcCBMZWFybmluZyBuZWVkcyBMaW5lYXIgQWxnZWJyYSBiZWNhdXNlIGl0IHdvcmtzIG9uIG9wdGltaXphdGlvbnMgYW5kIG1vcmUgdG8gZ2l2ZSB0aGUgYmVzdCBwb3NzaWJsZSBvdXRwdXQuCgoKCiMjIyA4LjIgKipBcHBsaWNhdGlvbiBvZiBQcm9iYWJpbGl0eSBpbiBNYWNoaW5lIExlYXJuaW5nKioKCkhvcGUgYWxsIHlvdSBoYXZlIGEgY2xlYXIgaWRlYSBvZiB0aGUgaW1wYWN0IFByb2JhYmlsaXR5IGhhcyBvbiBNYWNoaW5lIExlYXJuaW5nIGJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBhcyBhbHdheXMgcmVtYWlucy4gSG93IGRvIHdlIHVzZSB0aGlzIGluIHJlYWwgbGlmZSB0aGF0IG1lbnRpb24gYmVsb3cuCgotIFByb2JhYmlsaXR5IGhlbHBzIHVzIG9wdGltaXplIG91ciBtb2RlbC4KLSBDbGFzc2lmaWNhdGlvbiBieSBvdXIgYWxnb3JpdGhtcyByZXF1aXJlcyBQcm9iYWJpbGl0eS4KLSBMb3NzIGNhbiBhbHNvIGJlIGNhbGN1bGF0ZWQgdXNpbmcgUHJvYmFiaWxpdHkuCi0gTW9kZWxzIGFyZSBidWlsdCBvbiBQcm9iYWJpbGl0eS4KCkhlcmUgaXMgYSBwcmFjdGljYWwgYXBwbGljYXRpb24gb2YgTmFpdmUgQmF5ZXMgQ2xhc3NpZmllciB0aGF0IHJlcXVpcmVzIFByb2JhYmlsaXR5IGFuZCBob3cgaXQgaGVscHMgdXMgaW4gbWFraW5nIGEgZ29vZCBtb2RlbC4gVGhlIGdyYXBoaWMgaW1hZ2UgYmVsb3cgaXMgYW5vdGhlciBleGFtcGxlIG9mIGhvdyB0aGUgTmFpdmUgQmF5ZXMgQ2xhc3NpZmllciB3b3Jrcy4KCgohWzFfRUlWdExBZTA1TDRodGxaZU1jOE9GQS5qcGVnXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY1Nzg3MDIzNTc3OC9sa3g5QmRZMHcuanBlZyBhbGlnbj0ibGVmdCIpCgohW0ZhY2UtS2luZy5wbmddKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjU3MTE1MzQ1NjM4L3FpQXd3bmtJTC5wbmcgYWxpZ249ImxlZnQiKQoKCiMjIyA4LjMgKipXaGF0IGlzIFN0YXRpc3RpY3M/KioKCi0gU3RhdGlzdGljcyBpcyBhbiBhcmVhIG9mIGFwcGxpZWQgbWF0aGVtYXRpY3MgY29uY2VybmVkIHdpdGggZGF0YSBjb2xsZWN0aW9uLCBhbmFseXNpcywgdmlzdWFsaXppbmcgZGF0YSwgaW50ZXJwcmV0YXRpb24sIGFuZCBwcmVzZW50YXRpb24uIEl0IGhlbHBzIHlvdSBpbiB0ZXN0aW5nIHRoZSBlZmZlY3RpdmVuZXNzIG9mIHlvdXIgSHlwb3RoZXNpcyBvbiB0aGUgZGF0YXNldCB0aGF0IHlvdSBoYXZlIGdhdGhlcmVkLiBUaGF0IG1ha2VzIGl0IHN1Y2ggYW4gaW1wb3J0YW50IGZhY3RvciBpbiBNYWNoaW5lIExlYXJuaW5nLgoKCiFbU3RhdGlzdGljc1VzZXMucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY1Nzk0NDQ4Mzk0NS9yNGRzT3pCVE0ucG5nIGFsaWduPSJsZWZ0IikKCiMjIyA4LjQgKipXaHkgU3RhdGlzdGljcyBpcyBuZWNlc3NhcnkgZm9yIE1hY2hpbmUgbGVhcm5pbmcgKE1MKSoqCgotIFN0YXRpc3RpY3MgaXMgYW4gaW1wb3J0YW50IGZhY3RvciB3aGVuIGl0IGNvbWVzIHRvIE1hY2hpbmUgTGVhcm5pbmcuIEl0IGlzIGEgYXBwcm9hY2ggdGhhdCBoZWxwcyB5b3UgdG8gc3R1ZHksIGFuYWx5emUgYW5kIG1ha2Ugd29yayBvdXQgb2YgdGhlIEh5cG90aGVzaXMgeW91IG1ha2UgdGhhdCB3aWxsIGJlIGFibGUgdG8gcHJlZGljdC4gQnkgdXNpbmcgc3RhdGlzdGljcyB3ZSBjYW4gZWFzaWx5IGNhbGN1bGF0ZSB0aGUgbWVhbiwgbWVkaWFuLCBtb2RlICwgVmFyaWFuY2UgYW5kIFN0YW5kYXJkIERldmlhdGlvbiBvZiBhIHBhcnRpY3VsYXIgZGF0YXNldC4gVGhpcyBvcGVyYXRpb25zIGFyZSBpbXBvcnRhbnQgdG8gbWFrZSBhIGRhdGFzZXQgbWVhbmluZ2Z1bCBhbmQgZWFzaWx5IHVuZGVyc3RhbmRhYmxlIGZvciBub24gY29kZSBkZXZlbG9wZXJzLiBOb3Qgb25seSB0aGF0IHdlIGNhbiBlYXNpbHkgZXh0cmFjdCB0aGUgaW1wb3J0YW50IGRhdGEgZnJvbSBhIHBhcnRpY3VsYXIgZGF0YXNldCB0aGF0IGluY3JlYXNlIHRoZSBwcmVkaWN0aW5nIGFjY3VyYWN5IG9mIGEgbWFjaGluZSBsZWFybmluZyBtb2RlbC4KCgojIyA5LiBJcyBpdCBuZWNlc3NhcnkgcHl0aG9uIGFzIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZm9yIG1hY2hpbmUgbGVhcm5pbmcgPwoKCjxpZnJhbWUgc3JjPSJodHRwczovL2dpcGh5LmNvbS9lbWJlZC8zb3JpZVZ4bDQyTjJEWTFmWkMiIHdpZHRoPSI0ODAiIGhlaWdodD0iMzY2IiBmcmFtZUJvcmRlcj0iMCIgY2xhc3M9ImdpcGh5LWVtYmVkIiBhbGxvd0Z1bGxTY3JlZW4+PC9pZnJhbWU+PHA+PGEgaHJlZj0iaHR0cHM6Ly9naXBoeS5jb20vZ2lmcy9zZWFzb24tOC10aGUtc2ltcHNvbnMtOHgxMi0zb3JpZVZ4bDQyTjJEWTFmWkMiPjwvYT48L3A+CgoKWWVzIGl0J3MgbmVjZXNzYXJ5LiBZb3Ugd2FudCB0byBsZWFybiBtYWNoaW5lIGxlYXJuaW5nIG1lYW5zIHlvdSB3YW50IHRvIHBsYXkgd2l0aCBkaWZmZXJlbnQgdHlwZXMgb2YgZGF0YSwgbW9kZWxzLCB2YWxpZGF0aW9ucywgb3B0aW1pc2luZyBoeXBlci1wYXJhbWV0ZXJzLCB2aXN1YWxpemUgd2hhdCdzIGhhcHBlbmluZyBpbnNpZGUgdGhlIGFsZ29yaXRobXMsIHZlY3RvcmlzZSB5b3VyIHZhcmlhYmxlcyBldGMuIFRoZXJlIGFyZSBkZWRpY2F0ZWQgbGlicmFyaWVzIGZvciBlYWNoIG9mIHRoZXNlIHRhc2tzIGluIFB5dGhvbi4KCgoKIyMgMTAuIENvbmNsdXNpb24gJiBSZWZlcmFuY2VzIPCfmqkKCgoKLSBodHRwczovL2FkaXR5YW1jYTEyMy5oYXNobm9kZS5kZXYvbWF0aGVtYXRpY3MtZm9yLW1hY2hpbmUtbGVhcm5pbmctYWxsLXlvdS1uZWVkLXRvLWtub3cKCi0gaHR0cHM6Ly95b3V0dS5iZS9OV09OZUpLbjZrYwoKVGhhdCBpdCBmb3IgdGhpcyBibG9nLiBJIGhvcGUgeW91IGxlYXJuIHNvbWV0aGluZyBuZXcuIEFsc28gaW4gY2FzZSBpIGhhdmUgbWlzc2VkIHNvbWV0aGluZyBmZWVsIGZyZWUgdG8gc2hhcmUgeW91ciB0aG91Z2h0IGFuZCBmZWVkYmFjay4KCkZlZWwgZnJlZSB0byByZWFjaCBvdXQgbWUg8J+RgAoK8J+UlyBbTGluZGVkaW5dKGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9pbi9hZGl0eWEtZGFzLTdiMjI3NjIwMikg8J+WsQoK8J+UlyBbVHdpdHRlcl0oaHR0cHM6Ly90d2l0dGVyLmNvbS9BRElUWUE5MDU0NjE3MCkg8J+WsQoK8J+UlyBbR2l0SHViXShodHRwczovL2dpdGh1Yi5jb20vQURJVFlBREFTMTk5OSkg8J+WsQ==