IwojICAgUGFydHMgb2YgdGhlIGRldmVsb3BtZW50IGVmZm9ydCBmb3IgdGhpcyBwcm9qZWN0IGhhdmUgYmVlbgojICAgc3BvbnNvcmVkIGJ5IFNJRU1FTlMgQUcsIEF1c3RyaWEuIFRoYW5rcyB0byBTSUVNRU5TIGZvcgojICAgc3VwcG9ydGluZyBhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IQojCiMKIyAgIFRoaXMgaXMgYXQgbGVhc3QgYSBwYXJ0aWFsIGNyZWRpdHMtZmlsZSBvZiBpbmRpdmlkdWFsIHBlb3BsZSB0aGF0CiMgICBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoZSBVLUJvb3QgcHJvamVjdC4gSXQgaXMgc29ydGVkIGJ5IG5hbWUgYW5kCiMgICBmb3JtYXR0ZWQgdG8gYWxsb3cgZWFzeSBncmVwcGluZyBhbmQgYmVhdXRpZmljYXRpb24gYnkgc2NyaXB0cy4KIyAgIFRoZSBmaWVsZHMgYXJlOiBuYW1lIChOKSwgZW1haWwgKEUpLCB3ZWItYWRkcmVzcyAoVyksIFBHUCBrZXkgSUQKIyAgIGFuZCBmaW5nZXJwcmludCAoUCksIGRlc2NyaXB0aW9uIChEKSwgYW5kIHNuYWlsLW1haWwgYWRkcmVzcyAoUykuCiMgICBUaGFua3MsCiMKIyAgICAgICAgICAgICAgICAgICAgICAgV29sZmdhbmcgRGVuawojLS0tLS0tLS0tLQoKTjogRHIuIEJydW5vIEFjaGF1ZXIKRTogYnJ1bm9AZXhldC1hZy5kZQpEOiBTdXBwb3J0IGZvciBOZXRCU0QgKGJvdGggYXMgaG9zdCBhbmQgdGFyZ2V0IHN5c3RlbSkKCk46IFN3ZW4gQW5kZXJzb24KRTogc2FuZEBwZXBwZXJjb24uZGUKRDogRVJJQyBTdXBwb3J0CgpOOiBHdWlsbGF1bWUgQWxleGFuZHJlCkU6IGd1aWxsYXVtZS5hbGV4YW5kcmVAZ2VzcGFjLmNoCkQ6IEFkZCBQQ0lQUEM2IGNvbmZpZ3VyYXRpb24KCk46IFBpZXJyZSBBdWJlcnQKRTogPHAuYXViZXJ0QHN0YXVibGkuY29tPgpEOiBTdXBwb3J0IGZvciBSUFhDbGFzc2ljIGJvYXJkCgpOOiBKZXJyeSB2YW4gQmFyZW4KRTogPHZhbmJhcmVuQGNpZGVhcy5jb20+CkQ6IEJlZEJ1ZyBwb3J0IHRvIDYwM2UgY29yZSAoTVBDODJ4eCkuIENvZGUgZm9yIGVuaGFuY2VkIG1lbW9yeSB0ZXN0LgoKTjogQW5kcmUgQmVhdWRpbgpFOiA8YW5kcmUuYmVhdWRpbkBjb2x1YnJpcy5jb20+CkQ6IFBDTUNJQSwgRXRoZXJuZXQsIFRGVFAKCk46IEpvbiBCZW5lZGlrdHNzb24KRTogam9uYkBtYXJlbC5pcwpEOiBTdXBwb3J0IGZvciBNYXJlbCBWMzcgYm9hcmQKCk46IFJhcGhhZWwgQm9zc2VrCkU6IHJhcGhhZWwuYm9zc2VrQHNvbHV0aW9uczRsaW51eC5kZQpEOiA4eHhyb20tMC4zLjAKCk46IFJpY2sgQnJvbnNvbgpFOiByaWNrQGVmbi5vcmcKRDogQXRtZWwgQVQ5MVJNOTIwMERLIGFuZCBOQU5EIHN1cHBvcnQKCk46IERhdmlkIEJyb3duCkU6IERCcm93bjAzQGhhcnJpcy5jb20KRDogRXh0ZW5zaW9ucyB0byA4eHhyb20tMC4zLjAKCk46IE9saXZlciBCcm93bgpFOiBvYnJvd25AYWR2ZW50bmV0d29ya3MuY29tCkQ6IFBvcnQgdG8gdGhlIGd3ODI2MCBib2FyZAoKTjogSm9uYXRoYW4gRGUgQnJ1eW5lCkU6IGpvbmF0aGFuLmRlYnJ1eW5lQHNpZW1lbnMuYXRlYS5iZQpEOiBQb3J0IHRvIFNpZW1lbnMgSUFEMjEwIGJvYXJkCgpOOiBDb25uIENsYXJrCkU6IGNsYXJrQGVzdGVlbS5jb20KRDogRVNURUVNMTkyRSBzdXBwb3J0CgpOOiBNYWdudXMgRGFtbQpFOiBlcmFtZGFtQGtpZXJheTEucC55LmtpLmVyYS5lcmljc3Nvbi5zZQpEOiA4eHhyb20KCk46IEvhcmkgRGF27fBzc29uCkU6IGtkQGZsYWdhLmlzCkQ6IEZMQUdBIERNIFN1cHBvcnQKCk46IFdvbGZnYW5nIERlbmsKRTogd2RAZGVueC5kZQpEOiBVLUJvb3QgaW5pdGlhbCB2ZXJzaW9uLCBjb250aW51aW5nIG1haW50ZW5hbmNlLCBBUk1Cb290IG1lcmdlClc6IGh0dHA6Ly93d3cuZGVueC5kZQoKTjogRGFuIEEuIERpY2tleQpFOiBkZGlja2V5QGNoYXJ0ZXIubmV0CkQ6IEZBRFMgU3VwcG9ydAoKTjogSmFtZXMgRi4gRG91Z2hlcnR5CkU6IGpmZEBHaWdhYml0TmV0d29ya3MuQ09NCkQ6IFBvcnQgdG8gdGhlIE1PVVNTRSBib2FyZAoKTjogRGF2ZSBFbGxpcwpFOiBER0VAc2l4bmV0aW8uY29tCkQ6IEVFUFJPTSBTcGVlZHVwLCBTWE5JODU1VCBwb3J0CgpOOiBEYW5pZWwgRW5nc3Ry9m0KRTogZGFuaWVsQG9taWNyb24uc2UKRDogeDg2IHBvcnQsIFN1cHBvcnQgZm9yIHNjNTIwX2NkcCBib2FyZAoKTjogRHIuIFdvbGZnYW5nIEdyYW5kZWdnZXIKRTogd2dAZGVueC5kZQpEOiBTdXBwb3J0IGZvciBJbnRlcnBoYXNlIDQ1MzkgVDEvRTEvSjEgUE1DLCBQTjYyLCBDQ00sIFNDTSBib2FyZHMKVzogd3d3LmRlbnguZGUKCk46IFRob21hcyBGcmllZGVuCkU6IFRob21hc0ZAaHlwZXJpb24tZW50ZXJ0YWlubWVudC5jb20KRDogU3VwcG9ydCBmb3IgQW1pZ2FPbmUKCk46IEZyYW5rIEdvdHRzY2hsaW5nCkU6IGZnb3R0c2NobGluZ0BlbHRlYy5kZQpEOiBTdXBwb3J0IGZvciBFTFRFQyBNSFBDL0JBQjd4eC9FTFBQQyBib2FyZHMsIGNmYi1jb25zb2xlLCBpODA0MiwgU01JIEx5bnhFTQpXOiB3d3cuZWx0ZWMuZGUKCk46IE1hcml1cyBHcm9lZ2VyCkU6IG1ncm9lZ2VyQHN5c2dvLmRlCkQ6IE1CWCBTdXBwb3J0LCBib2FyZCBzcGVjaWZpYyBmdW5jdGlvbiBpbnRlcmZhY2UsIEVTVCBTQkM4MjYwIHN1cHBvcnQ7IGluaXRpYWwgc3VwcG9ydCBmb3IgU3Ryb25nQVJNIChMQVJUKSwgQVJNNzIwVERNSSAoaW1wbGVtZW50YSBBNykKVzogd3d3LmVsaW5vcy5jb20KCk46IEtpcmsgSGFkZXJsaWUKRToga2hhZGVybGllQHZpdmlkaW1hZ2UuY29tCkQ6IEFkZGVkIFRGVFAgdG8gOHh4cm9tICgtPiAwLjMuMSkKCk46IENocmlzIEhhbGxpbmFuCkU6IGNsaEBuZXQxcGx1cy5jb20KRDogREhDUCBTdXBwb3J0CgpOOiBBbm5lLVNvcGhpZSBIYXJub2lzCkU6IEFubmUtU29waGllLkhhcm5vaXNAbmV4dHJlYW0uZnIKRDogUG9ydCB0byBXYWxudXQ0MDUgYm9hcmQKCk46IEFuZHJlYXMgSGVwcGVsCkU6IGFoZXBwZWxAc3lzZ28uZGUKRDogQ1BVIFN1cHBvcnQgZm9yIE1QQyA3NXg7IGJvYXJkIHN1cHBvcnQgZm9yIEVsdGVjIEJBQjc1MCBbb2Jzb2xldGUhXQoKTjogSm9zaCBIdWJlcgpFOiBodWJlckBhbHVtLndwaS5lZHUKRDogUG9ydCB0byB0aGUgR2FsaWxlbyBFdmFsdWF0aW9uIEJvYXJkLCBhbmQgdGhlIE1QQzc0eHggY3B1IHNlcmllcy4KVzogaHR0cDovL3d3dy5tY2x4LmNvbS8KCkg6IFN0dWFydCBIdWdoZXMKRTogc3R1YXJ0aEBsaW5lby5jb20KRDogUG9ydCB0byBNUEM4MjYwQURTIGJvYXJkCgpIOiBSaWNoIElyZWxhbmQKRTogci5pcmVsYW5kQGNvbXB1dGVyLm9yZwpEOiBGUEdBIGRldmljZSBjb25maWd1cmF0aW9uIGRyaXZlcgoKTjogR2FyeSBKZW5uZWpvaG4KRTogZ2FyeWpAamVubmVqb2huLm9yZywgZ2pAZGVueC5kZQpEOiBTdXBwb3J0IGZvciBTYW1zdW5nIEFSTTkyMFQgUzNDMjQwMFgsIEFSTTkyMFQgIlRSQUIiClc6IHd3dy5kZW54LmRlCgpOOiBNdXJyYXkgSmVuc2VuCkU6IE11cnJheS5KZW5zZW5AY21zdC5jc2lyby5hdQpEOiBJbml0aWFsIDgyNjAgc3VwcG9ydDsgR0RCIHN1cHBvcnQKRDogUG9ydCB0byBDb2dlbnQrSHltb2QgYm9hcmRzOyBIeW1vZCBCb2FyZCBEYXRhYmFzZQpXOiBodHRwOi8vd3d3Lm1zYS5jbXN0LmNzaXJvLmF1L291cnN0YWZmL011cnJheUplbnNlbi9tamouaHRtbAoKTjogWW9vLiBKb25naG9vbgpFOiB5b290aEBpcG9uZS5jby5rcgpEOiBBZGRlZCBwb3J0IHRvIHRoZSBSUFhsaXRlIGJvYXJkCgpOOiBCcmFkIEtlbXAKRTogQnJhZC5LZW1wQHNlcmFub2EuY29tCkQ6IFBvcnQgdG8gV2luZHJpdmVyIHBwbWM4MjYwIGJvYXJkCgpOOiBUaG9tYXMgS29lbGxlcgpFOiB0a29lbGxlckBnbXgubmV0CkQ6IFBvcnQgdG8gTW90b3JvbGEgU2FuZHBvaW50IDMgKE1QQzgyNDApCgpOOiBUaG9tYXMgTGFuZ2UKRTogdGhvbWFzQGNvcmVsYXR1cy5jb20KRDogU3VwcG9ydCBmb3IgR1RIIGJvYXJkOyBsb3RzIG9mIFBDTUNJQSBmaXhlcwoKTjogVGhlIExFT1ggdGVhbQpFOiB0ZWFtQGxlb3gub3JnCkQ6IFN1cHBvcnQgZm9yIExFT1ggYm9hcmRzLCBEUzE2NHggUlRDClc6IGh0dHA6Ly93d3cubGVveC5vcmcKCk46IFJheW1vbmQgTG8KRTogbG9Acm91dGVmcmVlLmNvbQpEOiBTdXBwb3J0IGZvciBET1MgcGFydGl0aW9ucwoKTjogRGFuIE1hbGVrCkU6IGRhbkBuZXR4NC5jb20KRDogRkFEU1JPTSwgdGhlIGdyYW5kZmF0aGVyIG9mIGFsbCBvZiB0aGlzCgpOOiBSZWluaGFyZCBNZXllcgpFOiByLm1leWVyQGVtay1lbGVrdHJvbmlrLmRlCkQ6IFBvcnQgdG8gRU1LIFRPUDg2MCBNb2R1bGUKCk46IEpheSBNb25rbWFuCkU6IGp0bUBzbW9vdGhzbW9vdGhpZS5jb20KRDogRVNUIFNCQzgyNjAgc3VwcG9ydAoKTjogRnJhbmsgTW9yYXVmCkU6IGZyYW5rLm1vcmF1ZkBzYWx6YnJlbm5lci5jb20KRDogU3VwcG9ydCBmb3IgRW1iZWRkZWQgUGxhbmV0IFJQWCBTdXBlciBCb2FyZAoKTjogRGF2aWQgTfxsbGVyCkU6IGQubXVlbGxlckBlbHNvZnQuY2gKRDogU3VwcG9ydCBmb3IgU2Ftc3VuZyBBUk05MjBUIFNNREsyNDEwIGV2YWwgYm9hcmQKCk46IFJvbGYgT2ZmZXJtYW5ucwpFOiByb2ZAc3lzZ28uZGUKRDogSW5pdGlhbCBzdXBwb3J0IGZvciBTU1YtRE5QMTExMCwgU01DOTExMTEgZHJpdmVyClc6IHd3dy5lbGlub3MuY29tCgpOOiBLZWl0aCBPdXR3YXRlcgpFOiBLZWl0aF9PdXR3YXRlckBtdmlzLmNvbQpEOiBTdXBwb3J0IGZvciBHRU44NjBUIGJvYXJkCgpOOiBLZWl0aCBPdXR3YXRlcgpFOiBrZWl0aF9vdXR3YXRlckBtdmlzLmNvbQpEOiBTdXBwb3J0IGZvciBnZW5lcmljL2N1c3RvbSBNUEM4NjBUIGJvYXJkIChHRU44NjBUKQoKTjogRnJhbmsgUGFubm8KRTogZnBhbm5vQGRlbHBoaW50ZWNoLmNvbQpEOiBTdXBwb3J0IGZvciBFbWJlZGRlZCBQbGFuZXQgRVA4MjYwIEJvYXJkCgpOOiBEZW5pcyBQZXRlcgpFOiBkLnBldGVyQG1wbC5jaApEOiBTdXBwb3J0IGZvciA0eHggU0NTSSwgZmxvcHB5LCBDRFJPTSwgQ1Q2OTAwMCB2aWRlbywgLi4uCkQ6IFN1cHBvcnQgZm9yIFBJUDQwNSBib2FyZApEOiBTdXBwb3J0IGZvciBNSVA0MDUgYm9hcmQKCk46IEJpbGwgUGl0dHMKRTogd2xwQG1pbmRzcHJpbmcuY29tCkQ6IEJlZEJ1ZyBlbWJlZGRlZCBkZWJ1Z2dlciBjb2RlCgpOOiBTdGVmYW4gUm9lc2UKRTogc3RlZmFuLnJvZXNlQGVzZC1lbGVjdHJvbmljcy5jb20KRDogSUJNIFBQQzQwMS80MDMvNDA1R1AgU3VwcG9ydDsgV2luZG93cyBlbnZpcm9ubWVudCBzdXBwb3J0CgpOOiBOZWlsIFJ1c3NlbGwKRTogY2FyZXRAYy1zaWRlLmNvbQpEOiBBdXRob3Igb2YgTGlNb24tMS40LjIsIHdoaWNoIGNvbnRyaWJ1dGVkIHNvbWUgaWRlYXMKCk46IFBhb2xvIFNjYWZmYXJkaQpFOiBhcnNlbmlvQHRpbi5pdApEOiBGQURTODIzIGNvbmZpZ3VyYXRpb24sIE1QQzgyMyB2aWRlbyBzdXBwb3J0LCBJMkMsIHdpcmVsZXNzIGtleWJvYXJkLCBsb3RzIG1vcmUKCk46IFJvYmVydCBTY2h3ZWJlbApFOiByLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlCkQ6IFN1cHBvcnQgZm9yIGNzYjIyNiBhbmQgaW5ub2tvbSBib2FyZHMgKHhzY2FsZSkKCk46IFJvYiBUYXlsb3IKRTogcm9idEBmbHlpbmdwaWcuY29tCkQ6IFBvcnQgdG8gTUJYODYwVCBhbmQgU2FuZHBvaW50ODI0MAoKTjogRXJpayBUaGVpc2VuCkU6IGV0aGVpc2VuQG1pbmRzcHJpbmcuY29tCkQ6IE1CWDh4eCBhbmQgbWFueSBvdGhlciBwYXRjaGVzCgpOOiBKaW0gVGhvbXBzb24KRTogamltQG11c2Vua2kuY29tCkQ6IFN1cHBvcnQgZm9yIE1VU0VOS0kgYm9hcmQKCk46IFJ1bmUgVG9yZ2Vyc2VuCkU6IDxydW5ldEBpbm5vdnN5cy5jb20+CkQ6IFN1cHBvcnQgZm9yIE1vdG9yb2xhIE1QQzgyNjZBRFMgYm9hcmQKCk46IERhdmlkIFVwZGVncmFmZgpFOiBkYXZlQGNyYXkuY29tCkQ6IFBvcnQgdG8gQ3JheSBMMSBib2FyZDsgREhDUCB2ZW5kb3IgZXh0ZW5zaW9ucwoKTjogQ2hyaXN0aWFuIFZlamxibwpFOiBjaHJpc3RpYW4udmVqbGJvQHRlbGxhYnMuY29tCkQ6IEZBRFM4NjBUIGV0aGVybmV0IHN1cHBvcnQKCk46IEpvaG4gWmhhbgpFOiB6aGFuekBzaW5vdmVlLmNvbQpEOiBTdXBwb3J0IGZvciBTaW5vVmVlIE1pY3Jvc3lzdGVtcyBTQzh4eCBTQkMKCk46IEFsZXggWnVlcGtlCkU6IGF6dUBzeXNnby5kZQpEOiBPdmVyYWxsIGltcHJvdmVtZW50cyBvbiBTdHJvbmdBUk0sIEFSTTcyMFRETUk7IFN1cHBvcnQgZm9yIFR1eHNjcmVlbjsgaW5pdGlhbCBQQ01DSUEgc3VwcG9ydCBmb3IgQVJNClc6IHd3dy5lbGlub3MuY29tCg==