ZGlmZiAtLWdpdCBhL2puaS9wanByb2plY3QtYW5kcm9pZC9wam5hdGgvZG9jcy9kb2NfbmF0LmggYi9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvcGpuYXRoL2RvY3MvZG9jX25hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZGRhN2EKLS0tIC9kZXYvbnVsbAorKysgYi9qbmkvcGpwcm9qZWN0LWFuZHJvaWQvcGpuYXRoL2RvY3MvZG9jX25hdC5oCkBAIC0wLDAgKzEsNDE1IEBACisvKiAkSWQ6IGRvY19uYXQuaCAzNTUzIDIwMTEtMDUtMDUgMDY6MTQ6MTlaIG5hbmFuZyAkICovCisvKiAKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFRlbHV1IEluYy4gKGh0dHA6Ly93d3cudGVsdXUuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EgCisgKi8KKworCisvKioKKworQGRlZmdyb3VwIG5hdF9pbnRybyBJbnRyb2R1Y3Rpb24gdG8gTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIChOQVQpIGFuZCBOQVQgVHJhdmVyc2FsCitAYnJpZWYgVGhpcyBwYWdlIGRlc2NyaWJlcyBOQVQgYW5kIHRoZSBwcm9ibGVtcyBjYXVzZWQgYnkgaXQgYW5kIHRoZSBzb2x1dGlvbnMKKworCisKK1xzZWN0aW9uIGludG8gSW50cm9kdWN0aW9uIHRvIE5BVAorCisKK05BVCAoTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uKSBpcyBhIG1lY2hhbmlzbSB3aGVyZSBhIGRldmljZSBwZXJmb3JtcyAKK21vZGlmaWNhdGlvbnMgdG8gdGhlIFRDUC9JUCBhZGRyZXNzL3BvcnQgbnVtYmVyIG9mIGEgcGFja2V0IGFuZCBtYXBzIHRoZSAKK0lQIGFkZHJlc3MgZnJvbSBvbmUgcmVhbG0gdG8gYW5vdGhlciAodXN1YWxseSBmcm9tIHByaXZhdGUgSVAgYWRkcmVzcyB0byAKK3B1YmxpYyBJUCBhZGRyZXNzIGFuZCB2aWNlIHZlcnNhKS4gVGhpcyB3b3JrcyBieSB0aGUgTkFUIGRldmljZSBhbGxvY2F0aW5nCithIHRlbXBvcmFyeSBwb3J0IG51bWJlciBvbiB0aGUgcHVibGljIHNpZGUgb2YgdGhlIE5BVCB1cG9uIGZvcndhcmRpbmcgCitvdXRib3VuZCBwYWNrZXQgZnJvbSB0aGUgaW50ZXJuYWwgaG9zdCB0b3dhcmRzIHRoZSBJbnRlcm5ldCwgbWFpbnRhaW5pbmcKK3RoaXMgbWFwcGluZyBmb3Igc29tZSBwcmVkZWZpbmVkIHRpbWUsIGFuZCBmb3J3YXJkaW5nIHRoZSBpbmJvdW5kIHBhY2tldHMKK3JlY2VpdmVkIGZyb20gdGhlIEludGVybmV0IG9uIHRoaXMgcHVibGljIHBvcnQgYmFjayB0byB0aGUgaW50ZXJuYWwgaG9zdC4KKworCitOQVQgZGV2aWNlcyBhcmUgaW5zdGFsbGVkIHByaW1hcmlseSB0byBhbGxldmlhdGUgdGhlIGV4aGF1c3Rpb24gb2YgSVB2NCAKK2FkZHJlc3Mgc3BhY2UgYnkgYWxsb3dpbmcgbXVsdGlwbGUgaG9zdHMgdG8gc2hhcmUgYSBwdWJsaWMvSW50ZXJuZXQgYWRkcmVzcy4KK0Fsc28gZHVlIHRvIGl0cyBtYXBwaW5nIG5hdHVyZSAoaS5lLiBhIG1hcHBpbmcgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSAKK2EgdHJhbnNtaXNzaW9uIGZyb20gYW4gaW50ZXJuYWwgaG9zdCksIE5BVCBkZXZpY2UgaXMgcHJlZmVycmVkIHRvIGJlIAoraW5zdGFsbGVkIGV2ZW4gd2hlbiBJUHY0IGFkZHJlc3MgZXhoYXVzdGlvbiBpcyBub3QgYSBwcm9ibGVtIChmb3IgZXhhbXBsZQord2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBob3N0IGF0IGhvbWUpLCB0byBwcm92aWRlIHNvbWUgc29ydCBvZiBzZWN1cml0eS9zaGllbGQKK2ZvciB0aGUgaW50ZXJuYWwgaG9zdHMgYWdhaW5zdCB0aHJlYXRzIGZyb20gdGhlIEludGVybmV0LgorCisKK0Rlc3BpdGUgdGhlIGZhY3QgdGhhdCBOQVQgcHJvdmlkZXMgc29tZSBzaGllbGRzIGZvciB0aGUgaW50ZXJuYWwgbmV0d29yaywKK29uZSBtdXN0IGRpc3Rpbmd1aXNoIE5BVCBzb2x1dGlvbiBmcm9tIGZpcmV3YWxsIHNvbHV0aW9uLiBOQVQgaXMgbm90IAorYSBmaXJld2FsbCBzb2x1dGlvbi4gQSBmaXJld2FsbCBpcyBhIHNlY3VyaXR5IHNvbHV0aW9uIGRlc2lnbmVkIHRvIGVuZm9yY2UKK3RoZSBzZWN1cml0eSBwb2xpY3kgb2YgYW4gb3JnYW5pemF0aW9uLCB3aGlsZSBOQVQgaXMgYSBjb25uZWN0aXZpdHkgc29sdXRpb24KK3RvIGFsbG93IG11bHRpcGxlIGhvc3RzIHRvIHVzZSBhIHNpbmdsZSBwdWJsaWMgSVAgYWRkcmVzcy4gVW5kZXJzdGFuZGFibHkKK2JvdGggZnVuY3Rpb25hbGl0aWVzIGFyZSBkaWZmaWN1bHQgdG8gc2VwYXJhdGUgYXQgdGltZXMsIHNpbmNlIG1hbnkgCisodHlwaWNhbGx5IGNvbnN1bWVyKSBwcm9kdWN0cyBjbGFpbXMgdG8gZG8gYm90aCB3aXRoIHRoZSBzYW1lIGRldmljZSBhbmQKK3NpbXBseSBsYWJlbCB0aGUgZGV2aWNlIGEgk05BVCBib3iULiBCdXQgd2UgZG8gd2FudCB0byBtYWtlIHRoaXMgZGlzdGluY3Rpb24KK3JhdGhlciBjbGVhciwgYXMgUEpOQVRIIGlzIGEgTkFUIHRyYXZlcnNhbCBoZWxwZXIgYW5kIG5vdCBhIGZpcmV3YWxsIGJ5cGFzcworc29sdXRpb24gKHlldCkuCisKKworCitcc2VjdGlvbiBwcm9ibGVtcyBUaGUgTkFUIHRyYXZlcnNhbCBwcm9ibGVtcworCisKK1doaWxlIE5BVCB3b3VsZCB3b3JrIHdlbGwgZm9yIHR5cGljYWwgY2xpZW50IHNlcnZlciBjb21tdW5pY2F0aW9ucyAoc3VjaCBhcword2ViIGFuZCBlbWFpbCksIHNpbmNlIGl0J3MgYWx3YXlzIHRoZSBjbGllbnQgdGhhdCBpbml0aWF0ZXMgdGhlIGNvbnZlcnNhdGlvbgorYW5kIG5vcm1hbGx5IGNsaWVudCBkb2Vzbid0IG5lZWQgdG8gbWFpbnRhaW4gdGhlIGNvbm5lY3Rpb24gZm9yIGEgbG9uZyB0aW1lLAoraW5zdGFsbGF0aW9uIG9mIE5BVCB3b3VsZCBjYXVzZSBtYWpvciBwcm9ibGVtIGZvciBwZWVyLXRvLXBlZXIgY29tbXVuaWNhdGlvbiwKK3N1Y2ggYXMgKGFuZCBlc3BlY2lhbGx5KSBWb0lQLiBUaGVzZSBwcm9ibGVtcyB3aWxsIGJlIGV4cGxhaW5lZCBpbiBtb3JlIGRldGFpbAorYmVsb3cuCisKKworXHN1YnNlY3Rpb24gcGVlcl9hZGRyIFBlZXIgYWRkcmVzcyBwcm9ibGVtCisKKworSW4gVm9JUCwgbm9ybWFsbHkgd2Ugd2FudCB0aGUgbWVkaWEgKGF1ZGlvLCBhbmQgdmlkZW8pIHRvIGZsb3cgZGlyZWN0bHkKK2JldHdlZW4gdGhlIGNsaWVudHMsIHNpbmNlIHJlbGF5aW5nIGlzIGNvc3RseSAoYm90aCBpbiB0ZXJtcyBvZiBiYW5kd2lkdGgKK2Nvc3QgZm9yIHNlcnZpY2UgcHJvdmlkZXIsIGFuZCBhZGRpdGlvbmFsIGxhdGVuY3kgaW50cm9kdWNlZCBieSByZWxheWluZykuCitUbyBkbyB0aGlzLCBlYWNoIGNsaWVudCBpbmZvcm1zIGl0cyBtZWRpYSB0cmFuc3BvcnQgYWRkcmVzcyB0byB0aGUgb3RoZXIKK2NsaWVudCAsIGJ5IHNlbmRpbmcgaXQgdmlhIHRoZSBWb0lQIHNpZ25hbGluZyBwYXRoLCBhbmQgdGhlIG90aGVyIHNpZGUgd291bGQKK3NlbmQgaXRzIG1lZGlhIHRvIHRoaXMgdHJhbnNwb3J0IGFkZHJlc3MuCisKKworQW5kIHRoZXJlIGxpZXMgdGhlIHByb2JsZW0uIElmIHRoZSBjbGllbnQgc29mdHdhcmUgaXMgbm90IE5BVCBhd2FyZSwgdGhlbgoraXQgd291bGQgc2VuZCBpdHMgcHJpdmF0ZSBJUCBhZGRyZXNzIHRvIHRoZSBvdGhlciBjbGllbnQsIGFuZCB0aGUgb3RoZXIKK2NsaWVudCB3b3VsZCBub3QgYmUgYWJsZSB0byBzZW5kIG1lZGlhIHRvIHRoaXMgYWRkcmVzcy4KKworCitUcmFkaXRpb25hbGx5IHRoaXMgd2FzIHNvbHZlZCBieSB1c2luZyBTVFVOLiBXaXRoIHRoaXMgbWVjaGFuaXNtLCB0aGUgY2xpZW50CitmaXJzdCBmaW5kcyBvdXQgaXRzIHB1YmxpYyBJUCBhZGRyZXNzL3BvcnQgYnkgcXVlcnlpbmcgYSBTVFVOIHNlcnZlciwgdGhlbgorc2VuZCBzdGhpcyBwdWJsaWMgYWRkcmVzcyBpbnN0ZWFkIG9mIGl0cyBwcml2YXRlIGFkZHJlc3MgdG8gdGhlIG90aGVyIAorY2xpZW50LiBXaGVuIGJvdGggc2lkZXMgYXJlIHVzaW5nIHRoaXMgbWVjaGFuaXNtLCB0aGV5IGNhbiB0aGVuIHNlbmQgbWVkaWEgCitwYWNrZXRzIHRvIHRoZXNlIGFkZHJlc3NlcywgdGhlcmVieSBjcmVhdGluZyBhIG1hcHBpbmcgaW4gdGhlIE5BVCAoYWxzbyAKK2NhbGxlZCBvcGVuaW5nIGEgImhvbGUiLCBoZW5jZSB0aGlzIG1lY2hhbmlzbSBpcyBhbHNvIHBvcHVsYXJseSBjYWxsZWQgCisiaG9sZSBwdW5jaGluZyIpIGFuZCBib3RoIGNhbiB0aGVuIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlci4KKworCitCdXQgdGhpcyBtZWNoYW5pc20gZG9lcyBub3Qgd29yayBpbiBhbGwgY2FzZXMsIGFzIHdpbGwgYmUgZXhwbGFpbmVkIGJlbG93LgorCisKKworXHN1YnNlY3Rpb24gaGFpcnBpbiBIYWlycGlubmluZyBiZWhhdmlvcgorCisKK0hhaXJwaW4gaXMgYSBiZWhhdmlvciB3aGVyZSBhIE5BVCBkZXZpY2UgZm9yd2FyZHMgcGFja2V0cyBmcm9tIGEgaG9zdCBpbgoraW50ZXJuYWwgbmV0d29yayAobGV0cyBjYWxsIGl0IGhvc3QgQSkgYmFjayB0byBzb21lIG90aGVyIGhvc3QgKGhvc3QgQikgaW4KK3RoZSBzYW1lIGludGVybmFsIG5ldHdvcmssIHdoZW4gaXQgZGV0ZWN0cyB0aGF0IHRoZSAocHVibGljIElQIGFkZHJlc3MpCitkZXN0aW5hdGlvbiBvZiB0aGUgcGFja2V0IGlzIGFjdHVhbGx5IGEgbWFwcGVkIElQIGFkZHJlc3MgdGhhdCB3YXMgY3JlYXRlZAorZm9yIHRoZSBpbnRlcm5hbCBob3N0IChob3N0IEIpLiBUaGlzIGlzIGEgZGVzaXJhYmxlIGJlaGF2aW9yIG9mIGEgTkFULCAKK2J1dCB1bmZvcnR1bmF0ZWx5IG5vdCBhbGwgTkFUIGRldmljZXMgc3VwcG9ydCB0aGlzLgorCisKK0xhY2tpbmcgdGhpcyBiZWhhdmlvciwgdHdvIChpbnRlcm5hbCkgaG9zdHMgYmVoaW5kIHRoZSBzYW1lIE5BVCB3aWxsIG5vdAorYmUgYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIgaWYgdGhleSBleGNoYW5nZSB0aGVpciBwdWJsaWMKK2FkZHJlc3NlcyAocmVzb2x2ZWQgYnkgU1RVTiBhYm92ZSkgdG8gZWFjaCBvdGhlci4KKworCisKK1xzdWJzZWN0aW9uIHN5bW1ldHJpYyBTeW1tZXRyaWMgYmVoYXZpb3IKKworCitOQVQgZGV2aWNlcyBkb24ndCBiZWhhdmUgdW5pZm9ybWx5IGFuZCBwZW9wbGUgaGF2ZSBiZWVuIHRyeWluZyB0byBjbGFzc2lmeQordGhlaXIgYmVoYXZpb3IgaW50byBkaWZmZXJlbnQgY2xhc3Nlcy4gVHJhZGl0aW9uYWxseSBOQVQgZGV2aWNlcyBhcmUKK2NsYXNzaWZpZWQgaW50byBGdWxsIENvbmUsIFJlc3RyaWN0ZWQgQ29uZSwgUG9ydCBSZXN0cmljdGVkIENvbmUsIGFuZCAKK1N5bW1ldHJpYyB0eXBlcywgYWNjb3JkaW5nIHRvIDxBIEhSRUY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM0ODkudHh0Ij5SRkMgMzQ4OTwvQT4KK3NlY3Rpb24gNS4gQSBtb3JlIHJlY2VudCBtZXRob2Qgb2YgY2xhc3NpZmljYXRpb24sIGFzIGV4cGxhaW5lZCBieSAKKzxBIEhSRUY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQ3ODcudHh0Ij5SRkMgNDc4NzwvQT4sIGRpdmlkZXMgCit0aGUgTkFUIGJlaGF2aW9yYWwgdHlwZXMgaW50byB0d28gYXR0cmlidXRlczogdGhlIG1hcHBpbmcgYmVoYXZpb3IgCithdHRyaWJ1dGUgYW5kIHRoZSBmaWx0ZXJpbmcgYmVoYXZpb3IgYXR0cmlidXRlLiBFYWNoIGF0dHJpYnV0ZSBjYW4gYmUgCitvbmUgb2YgdGhyZWUgdHlwZXM6IDxpPkVuZHBvaW50LUluZGVwZW5kZW50PC9pPiwgPGk+QWRkcmVzcy1EZXBlbmRlbnQ8L2k+LAorb3IgPGk+QWRkcmVzcyBhbmQgUG9ydC1EZXBlbmRlbnQ8L2k+LiBXaXRoIHRoaXMgbmV3IGNsYXNzaWZpY2F0aW9uIG1ldGhvZCwKK2EgU3ltbWV0cmljIE5BVCBhY3R1YWxseSBpcyBhbiBBZGRyZXNzIGFuZCBQb3J0LURlcGVuZGVudCBtYXBwaW5nIE5BVC4KKworCitBbW9uZyB0aGVzZSB0eXBlcywgdGhlIFN5bW1ldHJpYyB0eXBlIGlzIHRoZSBoYXJkZXN0IG9uZSB0byB3b3JrIHdpdGguIAorVGhlIHByb2JsZW0gaXMgYmVjYXVzZSB0aGUgTkFUIGFsbG9jYXRlcyBkaWZmZXJlbnQgbWFwcGluZyAob2YgdGhlIHNhbWUKK2ludGVybmFsIGhvc3QpIGZvciB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgU1RVTiBzZXJ2ZXIgYW5kIHRoZSAKK2NvbW11bmljYXRpb24gdG8gdGhlIG90aGVyIChleHRlcm5hbCkgaG9zdHMsIHNvIHRoZSBJUCBhZGRyZXNzL3BvcnQgdGhhdAoraXMgaW5mb3JtZWQgYnkgb25lIGhvc3QgdG8gdGhlIG90aGVyIGlzIG1lYW5pbmdsZXNzIGZvciB0aGUgcmVjaXBpZW50IAorc2luY2UgdGhpcyBpcyBub3QgdGhlIGFjdHVhbCBJUCBhZGRyZXNzL3BvcnQgbWFwcGluZyB0aGF0IHRoZSBOQVQgZGV2aWNlIAorY3JlYXRlcy4gVGhlIHJlc3VsdCBpcyB3aGVuIHRoZSByZWNpcGllbnQgaG9zdCB0cmllcyB0byBzZW5kIGEgcGFja2V0IHRvIAordGhpcyBhZGRyZXNzLCB0aGUgTkFUIGRldmljZSB3b3VsZCBkcm9wIHRoZSBwYWNrZXQgc2luY2UgaXQgZG9lcyBub3QgCityZWNvZ25pemUgdGhlIHNlbmRlciBvZiB0aGUgcGFja2V0IGFzIHRoZSAiYXV0aG9yaXplZCIgaG9zdHMgdG8gc2VuZCAKK3RvIHRoaXMgYWRkcmVzcy4KKworCitUaGVyZSBhcmUgdHdvIHNvbHV0aW9ucyBmb3IgdGhpcy4gVGhlIGZpcnN0LCB3ZSBjb3VsZCBtYWtlIHRoZSBjbGllbnQgCitzbWFydGVyIGJ5IHN3aXRjaGluZyB0cmFuc21pc3Npb24gb2YgdGhlIG1lZGlhIHRvIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiAKK3RoZSBtZWRpYSBwYWNrZXRzLiBUaGlzIHdvdWxkIHdvcmsgc2luY2Ugbm9ybWFsbHkgY2xpZW50cyB1c2VzIGEgd2VsbCAKK2tub3duIHRyaWNrIGNhbGxlZCBzeW1tZXRyaWMgUlRQLCB3aGVyZSB0aGV5IHVzZSBvbmUgc29ja2V0IGZvciBib3RoIAordHJhbnNtaXR0aW5nIGFuZCByZWNlaXZpbmcgUlRQL21lZGlhIHBhY2tldHMuIFdlIGFsc28gdXNlIHRoaXMgCittZWNoYW5pc20gaW4gUEpNRURJQSBtZWRpYSB0cmFuc3BvcnQuIEJ1dCB0aGlzIHNvbHV0aW9uIG9ubHkgd29ya3MgCitpZiBhIGNsaWVudCBiZWhpbmQgYSBzeW1tZXRyaWMgTkFUIGlzIG5vdCBjb21tdW5pY2F0aW5nIHdpdGggb3RoZXIgCitjbGllbnQgYmVoaW5kIGVpdGhlciBzeW1tZXRyaWMgTkFUIG9yIHBvcnQtcmVzdHJpY3RlZCBOQVQuCisKKworVGhlIHNlY29uZCBzb2x1dGlvbiBpcyB0byB1c2UgbWVkaWEgcmVsYXksIGJ1dCBhcyBoYXZlIGJlZW4gbWVudGlvbmVkIAorYWJvdmUsIHJlbGF5aW5nIGlzIGNvc3RseSwgYm90aCBpbiB0ZXJtcyBvZiBiYW5kd2lkdGggY29zdCBmb3Igc2VydmljZQorcHJvdmlkZXIgYW5kIGFkZGl0aW9uYWwgbGF0ZW5jeSBpbnRyb2R1Y2VkIGJ5IHJlbGF5aW5nLgorCisKKworXHN1YnNlY3Rpb24gYmluZGluZ190aW1lb3V0IEJpbmRpbmcgdGltZW91dAorCitXaGVuIGEgTkFUIGRldmljZSBjcmVhdGVzIGEgYmluZGluZyAoYSBwdWJsaWMtcHJpdmF0ZSBJUCBhZGRyZXNzIAorbWFwcGluZyksIGl0IHdpbGwgYXNzb2NpYXRlIGEgdGltZXIgd2l0aCBpdC4gVGhlIHRpbWVyIGlzIHVzZWQgdG8gCitkZXN0cm95IHRoZSBiaW5kaW5nIG9uY2UgdGhlcmUgaXMgbm8gYWN0aXZpdHkvdHJhZmZpYyBhc3NvY2lhdGVkIHdpdGggCit0aGUgYmluZGluZy4gQmVjYXVzZSBvZiB0aGlzLCBhIE5BVCBhd2FyZSBhcHBsaWNhdGlvbiB0aGF0IHdpc2hlcyB0byAKK2tlZXAgdGhlIGJpbmRpbmcgb3BlbiBtdXN0IHBlcmlvZGljYWxseSBzZW5kIG91dGJvdW5kIHBhY2tldHMsIAorYSBtZWNoYW5pc20ga25vd24gYXMga2VlcC1hbGl2ZSwgb3Igb3RoZXJ3aXNlIGl0IHdpbGwgdWx0aW1hdGVseSAKK2xvb3NlIHRoZSBiaW5kaW5nIGFuZCB1bmFibGUgdG8gcmVjZWl2ZSBpbmNvbWluZyBwYWNrZXRzIGZyb20gSW50ZXJuZXQuCisKKworXHNlY3Rpb24gc29sdXRpb25zIFRoZSBOQVQgdHJhdmVyc2FsIHNvbHV0aW9ucworCisKK1xzdWJzZWN0aW9uIHN0dW4gT2xkIFNUVU4gKFJGQyAzNDg5KQorCitUaGUgb3JpZ2luYWwgU1RVTiAoU2ltcGxlIFRyYXZlcnNhbCBvZiBVc2VyIERhdGFncmFtIFByb3RvY29sIChVRFApIAorVGhyb3VnaCBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRvcnMgKE5BVHMpKSBhcyBkZWZpbmVkIGJ5IAorPEEgSFJFRj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzQ4OS50eHQiPlJGQyAzNDg5PC9BPgorKHB1Ymxpc2hlZCBpbiAyMDAzLCBidXQgdGhlIHdvcmsgd2FzIHN0YXJ0ZWQgYXMgZWFybHkgYXMgMjAwMSkgd2FzIAorbWVhbnQgdG8gYmUgYSBzdGFuZGFsb25lLCBzdGFuZGFyZC1iYXNlZCBzb2x1dGlvbiBmb3IgdGhlIE5BVCAKK2Nvbm5lY3Rpdml0eSBwcm9ibGVtcyBhYm92ZS4gSXQgaXMgZXF1aXBwZWQgd2l0aCBOQVQgdHlwZSBkZXRlY3Rpb24gCithbGdvcml0bSBhbmQgbWV0aG9kcyB0byBob2xlLXB1bmNoIHRoZSBOQVQgaW4gb3JkZXIgdG8gbGV0IHRyYWZmaWMgCit0byBnZXQgdGhyb3VnaCBhbmQgaGFzIGJlZW4gcHJvdmVuIHRvIGJlIHF1aXRlIHN1Y2Nlc3NmdWwgaW4gCit0cmF2ZXJzaW5nIG1hbnkgdHlwZXMgb2YgTkFUcywgaGVuY2UgaXQgaGFzIGdhaW5lZCBhIGxvdCBvZiBwb3B1bGFyaXR5CisgYXMgYSBzaW1wbGUgYW5kIGVmZmVjdGl2ZSBOQVQgdHJhdmVyc2FsIHNvbHV0aW9uLgorCitCdXQgc2luY2UgdGhlbiB0aGUgc21hcnQgcGVvcGxlIGF0IElFVEYgaGFzIHJlYWxpemVkIHRoYXQgU1RVTiBhbG9uZSAKK2lzIG5vdCBnb2luZyB0byBiZSBlbm91Z2guIEJlc2lkZXMgaXRzIG5hdHVyZSB0aGF0IFNUVU4gc29sdXRpb24gY2Fubm90IAorc29sdmUgdGhlIHN5bW1ldHJpYy10by1zeW1tZXRyaWMgb3IgcG9ydC1yZXN0cmljdGVkIGNvbm5lY3Rpb24sIAorcGVvcGxlIGhhdmUgYWxzbyBkaXNjb3ZlcmVkIHRoYXQgTkFUIGJlaGF2aW9yIGNhbiBjaGFuZ2UgZm9yIGRpZmZlcmVudCAKK3RyYWZmaWMgKG9yIGZvciB0aGUgc2FtZSB0cmFmZmljIG92ZXJ0aW1lKSBoZW5jZSBpdCB3YXMgY29uY2x1ZGVkIHRoYXQgCitOQVQgdHlwZSBkZXRlY3Rpb24gY291bGQgcHJvZHVjZSB1bnJlbGlhYmxlIHJlc3VsdHMgaGVuY2Ugb25lIHNob3VsZCBub3QgCityZWx5IHRvbyBtdWNoIG9uIGl0LgorCitCZWNhdXNlIG9mIHRoaXMsIFNUVU4gaGFzIHNpbmNlIG1vdmVkIGl0cyBlZmZvcnRzIHRvIGRpZmZlcmVudCBzdHJhdGVneS4gCitJbnN0ZWFkIG9mIGF0dGVtcHRpbmcgdG8gcHJvdmlkZSBhIHN0YW5kYWxvbmUgc29sdXRpb24sIGl0J3Mgbm93IHByb3ZpZGluZyAKK2EgcGFydCBzb2x1dGlvbiBhbmQgZnJhbWV3b3JrIHRvIGJ1aWxkIG90aGVyIChTVFVOIGJhc2VkKSBwcm90b2NvbHMgCitvbiB0b3Agb2YgaXQsIHN1Y2ggYXMgVFVSTiBhbmQgSUNFLgorCisKK1xzdWJzZWN0aW9uIHN0dW5iaXMgU1RVTi9TVFVOYmlzIChSRkMgNTM4OSkKKworVGhlIFNlc3Npb24gVHJhdmVyc2FsIFV0aWxpdGllcyBmb3IgTkFUIChTVFVOKSBpcyB0aGUgZnVydGhlciBkZXZlbG9wbWVudCAKK29mIHRoZSBvbGQgU1RVTi4gV2hpbGUgaXQgc3RpbGwgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGEgY2xpZW50IHRvIAorcXVlcnkgaXRzIHB1YmxpYy9tYXBwZWQgYWRkcmVzcyB0byBhIFNUVU4gc2VydmVyLCBpdCBoYXMgZGVwcmVjYXRlZCAKK3RoZSB1c2Ugb2YgTkFUIHR5cGUgZGV0ZWN0aW9uLCBhbmQgbm93IGl0IHNlcnZlcyBhcyBhIGZyYW1ld29yayB0byBidWlsZCAKK290aGVyIHByb3RvY29scyBvbiB0b3Agb2YgaXQgKHN1Y2ggYXMgVFVSTiBhbmQgSUNFKS4KKworCitcc3Vic2VjdGlvbiBtaWRjb21fdHVybiBPbGQgVFVSTiAoZHJhZnQtcm9zZW5iZXJnLW1pZGNvbS10dXJuKQorCitUcmF2ZXJzYWwgVXNpbmcgUmVsYXkgTkFUIChUVVJOKSwgYSBzdGFuZGFyZC1iYXNlZCBlZmZvcnQgc3RhcnRlZCBhcyBlYXJseQorYXMgaW4gTm92ZW1iZXIgMjAwMSwgd2FzIG1lYW50IHRvIGJlIHRoZSBjb21wbGVtZW50YXJ5IG1ldGhvZCBmb3IgdGhlIAorKG9sZCkgU1RVTiB0byBjb21wbGV0ZSB0aGUgc29sdXRpb24uIFRoZSBvcmlnaW5hbCBpZGVhIHdhcyB0aGUgaG9zdCB0byB1c2UgCitTVFVOIHRvIGRldGVjdCB0aGUgTkFUIHR5cGUsIGFuZCB3aGVuIGl0IGhhcyBmb3VuZCB0aGF0IHRoZSBOQVQgdHlwZSBpcyAKK3N5bW1ldHJpYyBpdCB3b3VsZCB1c2UgVFVSTiB0byByZWxheSB0aGUgdHJhZmZpYy4gQnV0IGFzIHN0YXRlZCBhYm92ZSwgCit0aGlzIGFwcHJvYWNoIHdhcyBkZWVtZWQgdG8gYmUgdW5yZWxpYWJsZSwgYW5kIG5vdyB0aGUgcHJlZmVyZWQgd2F5IHRvIHVzZQorVFVSTiAoYW5kIGl0J3MgYSBuZXcgVFVSTiBzcGVjaWZpY2F0aW9uIGFzIHdlbGwpIGlzIHRvIGNvbWJpbmUgaXQgd2l0aCBJQ0UuCisKKworXHN1YnNlY3Rpb24gdHVybiBUVVJOIChkcmFmdC1pZXRmLWJlaGF2ZS10dXJuKQorCitUcmF2ZXJzYWwgVXNpbmcgUmVsYXlzIGFyb3VuZCBOQVQgKFRVUk4pIGlzIHRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQgb2YgVFVSTi4gCitXaGlsZSB0aGUgcHJvdG9jb2wgZGV0YWlscyBoYXZlIGNoYW5nZWQgYSBsb3QsIHRoZSBvYmplY3RpdmUgaXMgc3RpbGwgCit0aGUgc2FtZSwgdGhhdCBpcyB0byBwcm92aWRlIHJlbGF5aW5nIGNvbnRyb2wgZm9yIHRoZSBhcHBsaWNhdGlvbi4gCitBcyBtZW50aW9uZWQgYWJvdmUsIHByZWZlcmFibHkgVFVSTiBzaG91bGQgYmUgdXNlZCB3aXRoIElDRSBzaW5jZSByZWxheWluZyAKK2lzIGNvc3RseSBpbiB0ZXJtcyBvZiBib3RoIGJhbmR3aWR0aCBhbmQgbGF0ZW5jeSwgaGVuY2UgaXQgc2hvdWxkIGJlIHVzZWQgCithcyB0aGUgbGFzdCByZXNvcnQuCisKKworXHN1YnNlY3Rpb24gYjJidWEgQjJCVUEgYXBwcm9hY2gKKworQSBTSVAgQmFjayB0byBCYWNrIFVzZXIgQWdlbnRzIChCMkJVQSkgaXMgYSBTSVAgZW50aXR5IHRoYXQgc2l0cyBpbiB0aGUgCittaWRkbGUgb2YgU0lQIHRyYWZmaWMgYW5kIGFjdHMgYXMgU0lQIHVzZXIgYWdlbnRzIG9uIGJvdGggY2FsbCBsZWdzLiAKK1RoZSBwcmltYXJ5IG1vdGl2YXRpb25zIHRvIGhhdmUgYSBCMkJVQSBhcmUgdG8gYmUgYWJsZSB0byBwcm92aXNpb24gCit0aGUgY2FsbCAoZS5nLiBiaWxsaW5nLCBlbmZvcmNpbmcgcG9saWN5KSBhbmQgdG8gaGVscCB3aXRoIE5BVCB0cmF2ZXJzYWwgCitmb3IgdGhlIGNsaWVudHMuIE5vcm1hbGx5IGEgQjJCVUEgd291bGQgYmUgZXF1aXBwZWQgd2l0aCBtZWRpYSByZWxheWluZyAKK29yIG90aGVyd2lzZSBpdCB3b3VsZG4ndCBiZSB2ZXJ5IHVzZWZ1bC4KKworUHJvZHVjdHMgdGhhdCBmYWxsIGludG8gdGhpcyBjYXRlZ29yeSBpbmNsdWRlIFNJUCBTZXNzaW9uIEJvcmRlciAKK0NvbnRyb2xsZXJzIChTQkMpLCBhbmQgUEJYcyBzdWNoIGFzIEFzdGVyaXNrIGFyZSB0ZWNobmljYWxseSBhIEIyQlVBIAorYXMgd2VsbC4KKworVGhlIGJlbmVmaXQgb2YgQjJCVUEgd2l0aCByZWdhcmQgdG8gaGVscGluZyBOQVQgdHJhdmVyc2FsIGlzIGl0IGRvZXMgbm90IAorcmVxdWlyZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgY2xpZW50IHRvIG1ha2UgaXQgZ28gdGhyb3VnaCBOQVRzLiAKK0FuZCBzaW5jZSBiYXNpY2FsbHkgaXQgaXMgYSByZWxheSwgaXQgc2hvdWxkIGJlIGFibGUgdG8gdHJhdmVyc2UgCitzeW1tZXRyaWMgTkFUIHN1Y2Nlc3NmdWxseS4KKworSG93ZXZlciwgc2luY2UgaXQgaXMgYSByZWxheSwgdGhlIHVzdWFsIHJlbGF5aW5nIGRyYXdiYWNrcyBhcHBseSwgCituYW1lbHkgdGhlIGJhbmR3aWR0aCBhbmQgbGF0ZW5jeSBpc3N1ZS4gTW9yZSBvdmVyLCBzaW5jZSBhIEIyQlVBIGFjdHMgCithcyB1c2VyIGFnZW50IGluIGVpdGhlciBjYWxsLWxlZ3MgKGkuZS4gaXQgdGVybWluYXRlcyB0aGUgU0lQIAorc2lnbmFsaW5nL2NhbGwgb24gb25lIGxlZywgYWxiZWl0IGl0IGNyZWF0ZXMgYW5vdGhlciBjYWxsIG9uIHRoZSBvdGhlciAKK2xlZyksIGl0IG1heSBhbHNvIGludHJvZHVjZSBzZXJpb3VzIGlzc3VlcyB3aXRoIGVuZC10by1lbmQgU0lQIHNpZ25hbGluZy4KKworCitcc3Vic2VjdGlvbiBhbGcgQUxHIGFwcHJvYWNoCisKK05vd2RheXMgbWFueSBOQVQgZGV2aWNlcyAoc3VjaCBhcyBjb25zdW1lciBBRFNMIHJvdXRlcnMpIGFyZSBlcXVpcHBlZCAKK3dpdGggaW50ZWxsaWdlbmNlIHRvIGluc3BlY3QgYW5kIGZpeCBWb0lQIHRyYWZmaWMgaW4gaXRzIGVmZm9ydCB0byBoZWxwIAoraXQgd2l0aCB0aGUgTkFUIHRyYXZlcnNhbC4gVGhpcyBmZWF0dXJlIGlzIGNhbGxlZCBBcHBsaWNhdGlvbiBMYXllciAKK0dhdGV3YXkgKEFMRykgaW50ZWxsaWdlbmNlLiBUaGUgaWRlYSBpcyBzaW5jZSB0aGUgTkFUIGRldmljZSBrbm93cyBhYm91dCAKK3RoZSBtYXBwaW5nLCBpdCBtaWdodCBhcyB3ZWxsIHRyeSB0byBmaXggdGhlIGFwcGxpY2F0aW9uIHRyYWZmaWMgc28gdGhhdCAKK3RoZSB0cmFmZmljIGNvdWxkIGJldHRlciB0cmF2ZXJzZSB0aGUgTkFULiBTb21lIHRyaWNrcyB0aGF0IGFyZSAKK3BlcmZvcm1lZCBpbmNsdWRlIGZvciBleGFtcGxlIHJlcGxhY2luZyB0aGUgcHJpdmF0ZSBJUCBhZGRyZXNzZXMvcG9ydHMgCitpbiB0aGUgU0lQL1NEUCBwYWNrZXQgd2l0aCB0aGUgbWFwcGVkIHB1YmxpYyBhZGRyZXNzL3BvcnQgb2YgdGhlIGhvc3QgCit0aGF0IHNlbmRzIHRoZSBwYWNrZXQuCisKK0Rlc3BpdGUgbWFueSBjbGFpbXMgYWJvdXQgaXRzIHVzZWZ1bGxuZXNzLCBpbiByZWFsaXR5IHRoaXMgaGFzIGdpdmVuIHVzIAorbW9yZSBwcm9ibGVtcyB0aGFuIHRoZSBmaXguIFRvbyBtYW55IGRldmljZXMgc3VjaCBhcyB0aGVzZSBicmVhayB0aGUgCitTSVAgc2lnbmFsaW5nLCBhbmQgaW4gbW9yZSBhZHZhbmNlZCBjYXNlLCBJQ0UgbmVnb3RpYXRpb24uIFNvbWUgCitleGFtcGxlcyBvZiBiYWQgc2l0dWF0aW9ucyB0aGF0IHdlIGhhdmUgZW5jb3VudGVyZWQgaW4gdGhlIHBhc3Q6CisKKyAtIE5BVCBkZXZpY2UgYWx0ZXJzIHRoZSBWaWEgYWRkcmVzcy9wb3J0IGZpZWxkcyBpbiB0aGUgU0lQIHJlc3BvbnNlIAorICAgbWVzc2FnZSwgbWFraW5nIHRoZSByZXNwb25zZSBmYWlsIHRvIHBhc3MgU0lQIHJlc3BvbnNlIHZlcmlmaWNhdGlvbiAKKyAgIGFzIGRlZmluZWQgYnkgU0lQIFJGQy4KKyAtIEluIG90aGVyIGNhc2UsIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBWaWEgaGVhZGVycyBvZiB0aGUgU0lQIAorICAgcmVzcG9uc2UgaGlkZXMgdGhlIGltcG9ydGFudCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBTSVAgc2VydmVyLCAKKyAgIG5hbWVueSB0aGUgYWN0dWFsIElQIGFkZHJlc3MvcG9ydCBvZiB0aGUgY2xpZW50IGFzIHNlZW4gYnkgdGhlIFNJUCAKKyAgIHNlcnZlci4KKyAtIE1vZGlmaWNhdGlvbnMgaW4gdGhlIENvbnRhY3QgVVJJIG9mIFJFR0lTVEVSIHJlcXVlc3QvcmVzcG9uc2UgbWFrZXMgCisgICB0aGUgY2xpZW50IHVuYWJsZSB0byBkZXRlY3QgaXQncyByZWdpc3RlcmVkIGJpbmRpbmcuCisgLSBNb2RpZmljYXRpb25zIGluIHRoZSBJUCBhZGRyZXNzZXMvcG9ydHMgaW4gU0RQIGNhdXNlcyBJQ0UgCisgICBuZWdvdGlhdGlvbiB0byBmYWlsIHdpdGggaWNlLW1pc21hdGNoIHN0YXR1cy4KKyAtIFRoZSBjb21wbGV4aXR5IG9mIHRoZSBBTEcgcHJvY2Vzc2luZyBpbiBpdHNlbGYgc2VlbXMgdG8gaGF2ZSBjYXVzZWQgCisgICB0aGUgZGV2aWNlIHRvIGJlaGF2ZSBlcnJhdGljbHkgd2l0aCBtYW5hZ2luZyB0aGUgYWRkcmVzcyBiaW5kaW5ncyAKKyAgIChlLmcuIGl0IGNyZWF0ZXMgYSBuZXcgYmluZGluZyBmb3IgdGhlIHNlY29uZCBwYWNrZXQgc2VudCBieSB0aGUgCisgICBjbGllbnQsIGV2ZW4gd2hlbiB0aGUgcHJldmlvdXMgcGFja2V0IHdhcyBzZW50IGp1c3Qgc2Vjb25kIGFnbywgb3IKKyAgIGl0IGp1c3Qgc2VuZHMgaW5ib3VuZCBwYWNrZXQgdG8gdGhlIHdyb25nIGhvc3QpLgorCisKK01hbnkgbWFuLW1vbnRocyBlZmZvcnRzIGhhdmUgYmVlbiBzcGVudCBqdXN0IHRvIHRyb3VibGVzaG9vdCBpc3N1ZXMgCitjYXVzZWQgYnkgdGhlc2UgQUxHIChtYWwpZnVuY3Rpb25pbmcsIGFuZCBhcyBpdCBhZGRzIGNvbXBsZXhpdHkgdG8gCit0aGUgcHJvYmxlbSByYXRoZXIgdGhhbiBzb2x2aW5nIGl0LCBpbiBnZW5lcmFsIHdlIGRvIG5vdCBsaWtlIHRoaXMgCithcHByb2FjaCBhdCBhbGwgYW5kIHdvdWxkIHByZWZlciBpdCB0byBnbyBhd2F5LgorCisKK1xzdWJzZWN0aW9uIHVwbnAgVVBuUAorCitUaGUgVW5pdmVyc2FsIFBsdWcgYW5kIFBsYXkgKFVQblApIGlzIGEgc2V0IG9mIHByb3RvY29sIHNwZWNpZmljYXRpb25zIAordG8gY29udHJvbCBuZXR3b3JrIGFwcGxpYW5jZXMgYW5kIG9uZSBvZiBpdHMgc3BlY2lmaWNhdGlvbiBpcyB0byAKK2NvbnRyb2wgTkFUIGRldmljZS4gV2l0aCB0aGlzIHByb3RvY29sLCBhIGNsaWVudCBjYW4gaW5zdHJ1Y3QgdGhlIAorTkFUIGRldmljZSB0byBvcGVuIGEgcG9ydCBpbiB0aGUgTkFUJ3MgcHVibGljIHNpZGUgYW5kIHVzZSB0aGlzIHBvcnQgCitmb3IgaXRzIGNvbW11bmljYXRpb24uIFVQblAgaGFzIGdhaW5lZCBwb3B1bGFyaXR5IGR1ZSB0byBpdHMgCitzaW1wbGljaXR5LCBhbmQgb25lIGNhbiBleHBlY3QgaXQgdG8gYmUgYXZhaWxhYmxlIG9uIG1ham9yaXR5IG9mIAorTkFUIGRldmljZXMuCisKK1RoZSBkcmF3YmFjayBvZiBVUG5QIGlzIHNpbmNlIGl0IHVzZXMgbXVsdGljYXN0IGluIGl0cyBjb21tdW5pY2F0aW9uLAoraXQgd2lsbCBvbmx5IGFsbG93IGNsaWVudCB0byBjb250cm9sIG9uZSBOQVQgZGV2aWNlIHRoYXQgaXMgaW4gdGhlIAorc2FtZSBtdWx0aWNhc3QgZG9tYWluLiBXaGlsZSB0aGlzIG5vcm1hbGx5IGlzIG5vdCBhIHByb2JsZW0gaW4gCitob3VzZWhvbGQgaW5zdGFsbGF0aW9ucyAod2hlcmUgcGVvcGxlIG5vcm1hbGx5IG9ubHkgaGF2ZSBvbmUgTkFUIAorcm91dGVyKSwgaXQgd2lsbCBub3Qgd29yayBpZiB0aGUgY2xpZW50IGlzIGJlaGluZCBjYXNjYWRlZCByb3V0ZXJzIAoraW5zdGFsbGF0aW9uLiBNb3JlIG92ZXIgdVBuUCBoYXMgc2VyaW91cyBpc3N1ZXMgd2l0aCBzZWN1cml0eSBkdWUgdG8gCitpdHMgbGFjayBvZiBhdXRoZW50aWNhdGlvbiwgaXQncyBwcm9iYWJseSBub3QgdGhlIHByZWZlcmVkIHNvbHV0aW9uIAorZm9yIG9yZ2FuaXphdGlvbnMuCisKK1xzdWJzZWN0aW9uIG90aGVyIE90aGVyIHNvbHV0aW9ucworCitPdGhlciBzb2x1dGlvbnMgdG8gTkFUIHRyYXZlcnNhbCBpbmNsdWRlczoKKworIC0gU09DS1MsIHdoaWNoIHN1cHBvcnRzIFVEUCBwcm90b2NvbCBzaW5jZSBTT0NLUzUuCisKKworCitcc2VjdGlvbiBpY2UgSUNFIFNvbHV0aW9uIC0gVGhlIFByb3RvY29sIHRoYXQgV29ya3MgSGFyZGVyCisKK0EgbmV3IHByb3RvY29sIGlzIGJlaW5nIHN0YW5kYXJkaXplZCAoaXQncyBpbiBXb3JrIEdyb3VwIExhc3QgQ2FsbC9XR0xDIAorc3RhZ2UgYXQgdGhlIHRpbWUgdGhpcyBhcnRpY2xlIHdhcyB3cml0dGVuKSBieSB0aGUgSUVURiwgY2FsbGVkIAorSW50ZXJhY3RpdmUgQ29ubmVjdGl2aXR5IEVzdGFibGlzaG1lbnQgKElDRSkuIElDRSBpcyB0aGUgdWx0aW1hdGUgCit3ZWFwb24gYSBjbGllbnQgY2FuIGhhdmUgaW4gaXRzIE5BVCB0cmF2ZXJzYWwgc29sdXRpb24gYXJzZW5hbHMsIAorYXMgaXQgcHJvbWlzZXMgdGhhdCBpZiB0aGVyZSBpcyBpbmRlZWQgb25lIHBhdGggZm9yIHR3byBjbGllbnRzIAordG8gY29tbXVuaWNhdGUsIHRoZW4gSUNFIHdpbGwgZmluZCB0aGlzIHBhdGguIEFuZCBpZiB0aGVyZSBhcmUgCittb3JlIHRoYW4gb25lIHBhdGhzIHdoaWNoIHRoZSBjbGllbnRzIGNhbiBjb21tdW5pY2F0ZSwgSUNFIHdpbGwgCit1c2UgdGhlIGJlc3QvbW9zdCBlZmZpY2llbnQgb25lLgorCitJQ0Ugd29ya3MgYnkgY29tYmluaW5nIHNldmVyYWwgcHJvdG9jb2xzIChzdWNoIGFzIFNUVU4gYW5kIFRVUk4pIAorYWx0b2dldGhlciBhbmQgb2ZmZXJpbmcgc2V2ZXJhbCBjYW5kaWRhdGUgcGF0aHMgZm9yIHRoZSBjb21tdW5pY2F0aW9uLCAKK3RoZXJlYnkgbWF4aW1pc2luZyB0aGUgY2hhbmNlIG9mIHN1Y2Nlc3MsIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGFsc28gCitoYXMgdGhlIGNhcGFiaWxpdHkgdG8gcHJpb3JpdGl6ZSB0aGUgY2FuZGlkYXRlcywgc28gdGhhdCB0aGUgbW9yZSAKK2V4cGVuc2l2ZSBhbHRlcm5hdGl2ZSAobmFtZWx5IHJlbGF5KSB3aWxsIG9ubHkgYmUgdXNlZCBhcyB0aGUgbGFzdAorcmVzb3J0IHdoZW4gZWxzZSBmYWlscy4gSUNFIG5lZ290aWF0aW9uIHByb2Nlc3MgaW52b2x2ZXMgc2V2ZXJhbCAKK3N0YWdlczoKKworIC0gY2FuZGlkYXRlIGdhdGhlcmluZywgd2hlcmUgdGhlIGNsaWVudCBmaW5kcyBvdXQgYWxsIHRoZSBwb3NzaWJsZSAKKyAgIGFkZHJlc3NlcyB0aGF0IGl0IGNhbiB1c2UgZm9yIHRoZSBjb21tdW5pY2F0aW9uLiBJdCBtYXkgZmluZCAKKyAgIHRocmVlIHR5cGVzIG9mIGNhbmRpZGF0ZXM6IGhvc3QgY2FuZGlkYXRlIHRvIHJlcHJlc2VudCBpdHMgCisgICBwaHlzaWNhbCBOSUNzLCBzZXJ2ZXIgcmVmbGV4aXZlIGNhbmRpZGF0ZSBmb3IgdGhlIGFkZHJlc3MgdGhhdCAKKyAgIGhhcyBiZWVuIHJlc29sdmVkIGZyb20gU1RVTiwgYW5kIHJlbGF5IGNhbmRpZGF0ZSBmb3IgdGhlIGFkZHJlc3MgCisgICB0aGF0IHRoZSBjbGllbnQgaGFzIGFsbG9jYXRlZCBmcm9tIGEgVFVSTiByZWxheS4KKyAtIHByaW9yaXRpemluZyB0aGVzZSBjYW5kaWRhdGVzLiBUeXBpY2FsbHkgdGhlIHJlbGF5IGNhbmRpZGF0ZSB3aWxsCisgICBoYXZlIHRoZSBsb3dlc3QgcHJpb3JpdHkgdG8gdXNlIHNpbmNlIGl0J3MgdGhlIG1vc3QgZXhwZW5zaXZlLgorIC0gZW5jb2RpbmcgdGhlc2UgY2FuZGlkYXRlcywgc2VuZGluZyBpdCB0byByZW1vdGUgcGVlciwgYW5kIAorICAgbmVnb3RpYXRpbmcgaXQgd2l0aCBvZmZlci1hbnN3ZXIuCisgLSBwYWlyaW5nIHRoZSBjYW5kaWRhdGVzLCB3aGVyZSBpdCBwYWlycyBldmVyeSBsb2NhbCBjYW5kaWRhdGVzIAorICAgd2l0aCBldmVyeSByZW1vdGUgY2FuZGlkYXRlcyB0aGF0IGl0IHJlY2VpdmVzIGZyb20gdGhlIHJlbW90ZSBwZWVyLgorIC0gY2hlY2tpbmcgdGhlIGNvbm5lY3Rpdml0eSBmb3IgZWFjaCBjYW5kaWRhdGUgcGFpcnMuCisgLSBjb25jbHVkaW5nIHRoZSByZXN1bHQuIFNpbmNlIGV2ZXJ5IHBvc3NpYmxlIHBhdGggY29tYmluYXRpb25zIGFyZSAKKyAgIGNoZWNrZWQsIGlmIHRoZXJlIGlzIGEgcGF0aCB0byBjb21tdW5pY2F0ZSBJQ0Ugd2lsbCBmaW5kIGl0LgorCisKK1RoZXJlIGFyZSBtYW55IGJlbmV0aWZzIG9mIElDRToKKworIC0gaXQncyBzdGFuZGFyZCBiYXNlZC4KKyAtIGl0IHdvcmtzIHdoZXJlIFNUVU4gd29ya3MgKGFuZCBtb3JlKQorIC0gdW5saWtlIHN0YW5kYWxvbmUgU1RVTiBzb2x1dGlvbiwgaXQgc29sdmVzIHRoZSBoYWlycGlubmluZyBpc3N1ZSwgCisgICBzaW5jZSBpdCBhbHNvIG9mZmVycyBob3N0IGNhbmRpZGF0ZXMuCisgLSBqdXN0IGFzIHJlbGF5aW5nIHNvbHV0aW9ucywgaXQgd29ya3Mgd2l0aCBzeW1tZXRyaWMgTkFUcy4gQnV0IHVubGlrZSAKKyAgIHBsYWluIHJlbGF5aW5nLCByZWxheSBpcyBvbmx5IHVzZWQgYXMgdGhlIGxhc3QgcmVzb3J0LCB0aGVyZWJ5IAorICAgbWluaW1pemluZyB0aGUgYmFuZHdpZHRoIGFuZCBsYXRlbmN5IGlzc3VlIG9mIHJlbGF5aW5nLgorIC0gaXQgb2ZmZXJzIGEgZ2VuZXJpYyBmcmFtZXdvcmsgZm9yIG9mZmVyaW5nIGFuZCBjaGVja2luZyBhZGRyZXNzIAorICAgY2FuZGlkYXRlcy4gV2hpbGUgdGhlIElDRSBjb3JlIHN0YW5kYXJkIG9ubHkgdGFsa3MgYWJvdXQgdXNpbmcgU1RVTiAKKyAgIGFuZCBUVVJOLCBpbXBsZW1lbnRvcnMgY2FuIGFkZCBtb3JlIHR5cGVzIG9mIGNhbmRpZGF0ZXMgaW4gdGhlIElDRSAKKyAgIG9mZmVyLCBmb3IgZXhhbXBsZSBVRFAgb3ZlciBUQ1Agb3IgSFRUUCByZWxheXMsIG9yIGV2ZW4gdVBuUCAKKyAgIGNhbmRpZGF0ZXMsIGFuZCB0aGlzIGNvdWxkIGJlIGRvbmUgdHJhbnNwYXJlbnRseSBmb3IgdGhlIHJlbW90ZSAKKyAgIHBlZXIgaGVuY2UgaXQncyBjb21wYXRpYmxlIGFuZCB1c2FibGUgZXZlbiB3aGVuIHRoZSByZW1vdGUgcGVlciAKKyAgIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UuCisgLSBpdCBhbHNvIGFkZHMgc29tZSBraW5kIG9mIHNlY3VyaXR5IHBhcnRpY3VsYXJseSBhZ2FpbnN0IERvUyBhdHRhY2tzLCAKKyAgIHNpbmNlIG1lZGlhIGFkZHJlc3MgbXVzdCBiZSBhY2tub3dsZWRnZWQgYmVmb3JlIGl0IGNhbiBiZSB1c2VkLgorCisKK0hhdmluZyBzYWlkIHRoYXQsIElDRSBpcyBhIGNvbXBsZXggcHJvdG9jb2wgdG8gaW1wbGVtZW50LCBtYWtpbmcgCitpbnRlcm9wZXJhYmlsaXR5IGFuIGlzc3VlLCBhbmQgYXQgdGhpcyB0aW1lIG9mIHdyaXRpbmcgd2UgZG9uJ3Qgc2VlIAorbWFueSBpbXBsZW1lbnRhdGlvbnMgb2YgaXQgeWV0LiBGb3J0dW5hdGVseSwgUEpOQVRIIGhhcyBiZWVuIG9uZSBvZiAKK3RoZSBmaXJzdCBoZW5jZSBtb3JlIG1hdHVyZSBJQ0UgaW1wbGVtZW50YXRpb24sIGJlaW5nIGZpcnN0IHJlbGVhc2VkCitvbiBtaWQtMjAwNywgYW5kIHdlIGhhdmUgYmVlbiB0ZXN0aW5nIG91ciBpbXBsZW1lbnRhdGlvbiBhdCAKKzxBIEhSRUY9Imh0dHA6Ly93d3cuc2lwaXQubmV0Ij5TSVAgSW50ZXJvcGVyYWJpbGl0eSBUZXN0IChTSVBpdCk8L0E+CitldmVudHMgcmVndWxhcmx5LCBzbyBob3BlZnVsbHkgd2UgYXJlIG9uZSBvZiB0aGUgbW9zdCBzdGFibGUgYXMgd2VsbC4KKworCitcc2VjdGlvbiBwam5hdGggUEpOQVRIIC0gVGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgZWZmZWN0aXZlIE5BVCB0cmF2ZXJzYWwgc29sdXRpb24KKworUEpTSVAgTkFUIEhlbHBlciAoUEpOQVRIKSBpcyBhIGxpYnJhcnkgd2hpY2ggY29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9uIAorb2Ygc3RhbmRhcmQgYmFzZWQgTkFUIHRyYXZlcnNhbCBzb2x1dGlvbnMuIFBKTkFUSCBjYW4gYmUgdXNlZCBhcyBhIAorc3RhbmQtYWxvbmUgbGlicmFyeSBmb3IgeW91ciBzb2Z0d2FyZSwgb3IgeW91IG1heSB1c2UgUEpTVUEtTElCIGxpYnJhcnksIAorYSB2ZXJ5IGhpZ2ggbGV2ZWwgbGlicmFyeSBpbnRlZ3JhdGluZyBQSlNJUCwgUEpNRURJQSwgYW5kIFBKTkFUSCBpbnRvIAorc2ltcGxlIHRvIHVzZSBBUElzLgorCitQSk5BVEggaGFzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CisKKyAtIFNUVU5iaXMgaW1wbGVtZW50YXRpb24sIHByb3ZpZGluZyBib3RoIHJlYWR5IHRvIHVzZSBTVFVOLWF3YXJlIHNvY2tldCAKKyAgIGFuZCBmcmFtZXdvcmsgdG8gaW1wbGVtZW50IGhpZ2hlciBsZXZlbCBTVFVOIGJhc2VkIHByb3RvY29scyBzdWNoIGFzIAorICAgVFVSTiBhbmQgSUNFLgorIC0gTkFUIHR5cGUgZGV0ZWN0aW9uLCB1c2VmdWwgZm9yIHRyb3VibGVzaG9vdGluZyBwdXJwb3Nlcy4KKyAtIFRVUk4gaW1wbGVtZW50YXRpb24uCisgLSBJQ0UgaW1wbGVtZW50YXRpb24uCisKKworTW9yZSBwcm90b2NvbHMgd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgZnV0dXJlLgorCitHbyBiYWNrIHRvIFxyZWYgaW5kZXguCisKKyAqLwo=