From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhishek Lekshmanan Subject: v12.1.1 Luminous RC released Date: Tue, 18 Jul 2017 15:28:30 +0200 Message-ID: <87h8y9kh6p.fsf@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ceph-users-bounces-idqoXFIVOFJgJs9I8MT0rw@public.gmane.org Sender: "ceph-users" To: ceph-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, ceph-users-Qp0mS5GaXlQ@public.gmane.org, ceph-maintainers-Qp0mS5GaXlQ@public.gmane.org, ceph-announce-Qp0mS5GaXlQ@public.gmane.org List-Id: ceph-devel.vger.kernel.org ClRoaXMgaXMgdGhlIHNlY29uZCByZWxlYXNlIGNhbmRpZGF0ZSBmb3IgTHVtaW5vdXMsIHRoZSBu ZXh0IGxvbmcgdGVybSBzdGFibGUKcmVsZWFzZS4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIHN0 aWxsIGEgKnJlbGVhc2UgY2FuZGlkYXRlKiBhbmQgbm90CnRoZSBmaW5hbCByZWxlYXNlLCBhbmQg aGVuY2Ugbm90IHlldCByZWNvbW1lbmRlZCBvbiBwcm9kdWN0aW9uIGNsdXN0ZXJzLAp0ZXN0aW5n IGlzIHdlbGNvbWUgJiB3ZSB3b3VsZCBsb3ZlIGZlZWRiYWNrIGFuZCBidWcgcmVwb3J0cy4KCkNl cGggTHVtaW5vdXMgKHYxMi4yLjApIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBuZXh0 IGxvbmctdGVybQpzdGFibGUgcmVsZWFzZSBzZXJpZXMuICBUaGVyZSBoYXZlIGJlZW4gbWFqb3Ig Y2hhbmdlcyBzaW5jZSBLcmFrZW4KKHYxMS4yLnopIGFuZCBKZXdlbCAodjEwLjIueiksIGFuZCB0 aGUgdXBncmFkZSBwcm9jZXNzIGlzIG5vbi10cml2aWFsLgpQbGVhc2UgcmVhZCB0aGVzZSByZWxl YXNlIG5vdGVzIGNhcmVmdWxseS4gCgpNYWpvciBDaGFuZ2VzIGZyb20gS3Jha2VuCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KCi0gKkdlbmVyYWwqOgoKICAqIENlcGggbm93IGhhcyBhIHNpbXBs ZSwgYnVpbHQtaW4gd2ViLWJhc2VkIGRhc2hib2FyZCBmb3IgbW9uaXRvcmluZwogICAgY2x1c3Rl ciBzdGF0dXMuIAoKLSAqUkFET1MqOgoKICAqICpCbHVlU3RvcmUqOgoKICAgIC0gVGhlIG5ldyAq Qmx1ZVN0b3JlKiBiYWNrZW5kIGZvciAqY2VwaC1vc2QqIGlzIG5vdyBzdGFibGUgYW5kIHRoZSBu ZXcKICAgICAgZGVmYXVsdCBmb3IgbmV3bHkgY3JlYXRlZCBPU0RzLiAgQmx1ZVN0b3JlIG1hbmFn ZXMgZGF0YSBzdG9yZWQgYnkgZWFjaCBPU0QKICAgICAgYnkgZGlyZWN0bHkgbWFuYWdpbmcgdGhl IHBoeXNpY2FsIEhERHMgb3IgU1NEcyB3aXRob3V0IHRoZSB1c2Ugb2YgYW4KICAgICAgaW50ZXJ2 ZW5pbmcgZmlsZSBzeXN0ZW0gbGlrZSBYRlMuICBUaGlzIHByb3ZpZGVzIGdyZWF0ZXIgcGVyZm9y bWFuY2UKICAgICAgYW5kIGZlYXR1cmVzLiAKICAgIC0gQmx1ZVN0b3JlIHN1cHBvcnRzICpmdWxs IGRhdGEgYW5kIG1ldGFkYXRhIGNoZWNrc3Vtcyogb2YgYWxsCiAgICAgIGRhdGEgc3RvcmVkIGJ5 IENlcGguCiAgICAtIEJsdWVTdG9yZSBzdXBwb3J0cyBpbmxpbmUgY29tcHJlc3Npb24gdXNpbmcg emxpYiwgc25hcHB5LCBvciBMWjQuICAoQ2VwaAogICAgICBhbHNvIHN1cHBvcnRzIHpzdGQgZm9y IFJHVyBjb21wcmVzc2lvbiBidXQgenN0ZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yCiAgICAgIEJs dWVTdG9yZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4pIAoKICAqICpFcmFzdXJlIGNvZGVkKiBw b29scyBub3cgaGF2ZSBmdWxsIHN1cHBvcnQgZm9yICpvdmVyd3JpdGVzKiwKICAgIGFsbG93aW5n IHRoZW0gdG8gYmUgdXNlZCB3aXRoIFJCRCBhbmQgQ2VwaEZTLiAKCiAgKiBUaGUgY29uZmlndXJh dGlvbiBvcHRpb24gIm9zZCBwb29sIGVyYXN1cmUgY29kZSBzdHJpcGUgd2lkdGgiIGhhcwogICAg YmVlbiByZXBsYWNlZCBieSAib3NkIHBvb2wgZXJhc3VyZSBjb2RlIHN0cmlwZSB1bml0IiwgYW5k IGdpdmVuIHRoZQogICAgYWJpbGl0eSB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZSBlcmFzdXJlIGNv ZGUgcHJvZmlsZSBzZXR0aW5nCiAgICAic3RyaXBlX3VuaXQiLiBGb3IgbW9yZSBkZXRhaWxzIHNl ZSAiRXJhc3VyZSBDb2RlIFByb2ZpbGVzIiBpbiB0aGUKICAgIGRvY3VtZW50YXRpb24uCgogICog cmJkIGFuZCBjZXBoZnMgY2FuIHVzZSBlcmFzdXJlIGNvZGluZyB3aXRoIGJsdWVzdG9yZS4gVGhp cyBtYXkgYmUKICAgIGVuYWJsZWQgYnkgc2V0dGluZyAnYWxsb3dfZWNfb3ZlcndyaXRlcycgdG8g J3RydWUnIGZvciBhIHBvb2wuIFNpbmNlCiAgICB0aGlzIHJlbGllcyBvbiBibHVlc3RvcmUncyBj aGVja3N1bW1pbmcgdG8gZG8gZGVlcCBzY3J1YmJpbmcsCiAgICBlbmFibGluZyB0aGlzIG9uIGEg cG9vbCBzdG9yZWQgb24gZmlsZXN0b3JlIGlzIG5vdCBhbGxvd2VkLgoKICAqIFRoZSAncmFkb3Mg ZGYnIEpTT04gb3V0cHV0IG5vdyBwcmludHMgbnVtZXJpYyB2YWx1ZXMgYXMgbnVtYmVycyBpbnN0 ZWFkIG9mCiAgICBzdHJpbmdzLgoKICAqIFRoZSBgbW9uX29zZF9tYXhfb3BfYWdlYCBvcHRpb24g aGFzIGJlZW4gcmVuYW1lZCB0bwogICAgYG1vbl9vc2Rfd2Fybl9vcF9hZ2VgIChkZWZhdWx0OiAz MiBzZWNvbmRzKSwgdG8gaW5kaWNhdGUgd2UKICAgIGdlbmVyYXRlIGEgd2FybmluZyBhdCB0aGlz IGFnZS4gIFRoZXJlIGlzIGFsc28gYSBuZXcKICAgIGBtb25fb3NkX2Vycl9vcF9hZ2VfcmF0aW9g IHRoYXQgaXMgYSBleHByZXNzZWQgYXMgYSBtdWx0aXRwbGUgb2YKICAgIGBtb25fb3NkX3dhcm5f b3BfYWdlYCAoZGVmYXVsdDogMTI4LCBmb3Igcm91Z2hseSA2MCBtaW51dGVzKSB0bwogICAgY29u dHJvbCB3aGVuIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4KCiAgKiBUaGUgZGVmYXVsdCBtYXhpbXVt IHNpemUgZm9yIGEgc2luZ2xlIFJBRE9TIG9iamVjdCBoYXMgYmVlbiByZWR1Y2VkIGZyb20KICAg IDEwMEdCIHRvIDEyOE1CLiAgVGhlIDEwMEdCIGxpbWl0IHdhcyBjb21wbGV0ZWx5IGltcHJhY3Rp Y2FsIGluIHByYWN0aWNlCiAgICB3aGlsZSB0aGUgMTI4TUIgbGltaXQgaXMgYSBiaXQgaGlnaCBi dXQgbm90IHVucmVhc29uYWJsZS4gIElmIHlvdSBoYXZlIGFuCiAgICBhcHBsaWNhdGlvbiB3cml0 dGVuIGRpcmVjdGx5IHRvIGxpYnJhZG9zIHRoYXQgaXMgdXNpbmcgb2JqZWN0cyBsYXJnZXIgdGhh bgogICAgMTI4TUIgeW91IG1heSBuZWVkIHRvIGFkanVzdCBgb3NkX21heF9vYmplY3Rfc2l6ZWAu CgogICogVGhlIHNlbWFudGljcyBvZiB0aGUgJ3JhZG9zIGxzJyBhbmQgbGlicmFkb3Mgb2JqZWN0 IGxpc3RpbmcKICAgIG9wZXJhdGlvbnMgaGF2ZSBhbHdheXMgYmVlbiBhIGJpdCBjb25mdXNpbmcg aW4gdGhhdCAid2hpdGVvdXQiCiAgICBvYmplY3RzICh3aGljaCBsb2dpY2FsbHkgZG9uJ3QgZXhp c3QgYW5kIHdpbGwgcmV0dXJuIEVOT0VOVCBpZiB5b3UKICAgIHRyeSB0byBhY2Nlc3MgdGhlbSkg YXJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHRzLiAgUHJldmlvdXNseQogICAgd2hpdGVvdXRzIG9u bHkgb2NjdXJyZWQgaW4gY2FjaGUgdGllciBwb29scy4gIEluIGx1bWlub3VzLCBsb2dpY2FsbHkK ICAgIGRlbGV0ZWQgYnV0IHNuYXBzaG90dGVkIG9iamVjdHMgbm93IHJlc3VsdCBpbiBhIHdoaXRl b3V0IG9iamVjdCwgYW5kCiAgICBhcyBhIHJlc3VsdCB0aGV5IHdpbGwgYXBwZWFyIGluICdyYWRv cyBscycgcmVzdWx0cywgZXZlbiB0aG91Z2gKICAgIHRyeWluZyB0byByZWFkIHN1Y2ggYW4gb2Jq ZWN0IHdpbGwgcmVzdWx0IGluIEVOT0VOVC4gIFRoZSAncmFkb3MKICAgIGxpc3RzbmFwcycgb3Bl cmF0aW9uIGNhbiBiZSB1c2VkIGluIHN1Y2ggYSBjYXNlIHRvIGVudW1lcmF0ZSB3aGljaAogICAg c25hcHNob3RzIGFyZSBwcmVzZW50LgoKICAgIFRoaXMgbWF5IHNlZW0gYSBiaXQgc3RyYW5nZSwg YnV0IGlzIGxlc3Mgc3RyYW5nZSB0aGFuIGhhdmluZyBhCiAgICBkZWxldGVkLWJ1dC1zbmFwc2hv dHRlZCBvYmplY3Qgbm90IGFwcGVhciBhdCBhbGwgYW5kIGJlIGNvbXBsZXRlbHkKICAgIGhpZGRl biBmcm9tIGxpYnJhZG9zJ3MgYWJpbGl0eSB0byBlbnVtZXJhdGUgb2JqZWN0cy4gIEZ1dHVyZQog ICAgdmVyc2lvbnMgb2YgQ2VwaCB3aWxsIGxpa2VseSBpbmNsdWRlIGFuIGFsdGVybmF0aXZlIG9i amVjdAogICAgZW51bWVyYXRpb24gaW50ZXJmYWNlIHRoYXQgbWFrZXMgaXQgbW9yZSBuYXR1cmFs IGFuZCBlZmZpY2llbnQgdG8KICAgIGVudW1lcmF0ZSBhbGwgb2JqZWN0cyBhbG9uZyB3aXRoIHRo ZWlyIHNuYXBzaG90IGFuZCBjbG9uZSBtZXRhZGF0YS4KCgogICogKmNlcGgtbWdyKjoKCiAgICAt IFRoZXJlIGlzIGEgbmV3IGRhZW1vbiwgKmNlcGgtbWdyKiwgd2hpY2ggaXMgYSByZXF1aXJlZCBw YXJ0IG9mIGFueQogICAgICBDZXBoIGRlcGxveW1lbnQuICBBbHRob3VnaCBJTyBjYW4gY29udGlu dWUgd2hlbiAqY2VwaC1tZ3IqIGlzCiAgICAgIGRvd24sIG1ldHJpY3Mgd2lsbCBub3QgcmVmcmVz aCBhbmQgc29tZSBtZXRyaWNzLXJlbGF0ZWQgY2FsbHMKICAgICAgKGUuZy4sIGBjZXBoIGRmYCkg bWF5IGJsb2NrLiAgV2UgcmVjb21tZW5kIGRlcGxveWluZyBzZXZlcmFsIGluc3RhbmNlcyBvZgog ICAgICAqY2VwaC1tZ3IqIGZvciByZWxpYWJpbGl0eS4gIFNlZSB0aGUgbm90ZXMgb24gYFVwZ3Jh ZGluZ2BfIGJlbG93LgogICAgLSBUaGUgKmNlcGgtbWdyKiBkYWVtb24gaW5jbHVkZXMgYSBSRVNU LWJhc2VkIG1hbmFnZW1lbnQgQVBJLiAgVGhlCiAgICAgIEFQSSBpcyBzdGlsbCBleHBlcmltZW50 YWwgYW5kIHNvbWV3aGF0IGxpbWl0ZWQgYnV0IHdpbGwgZm9ybSB0aGUgYmFzaXMKICAgICAgZm9y IEFQSS1iYXNlZCBtYW5hZ2VtZW50IG9mIENlcGggZ29pbmcgZm9yd2FyZC4gIAoKICAgIC0gVGhl IGBzdGF0dXNgIGNlcGgtbWdyIG1vZHVsZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBpbml0 aWFsbHkgcHJvdmlkZXMgdHdvCiAgICAgIGNvbW1hbmRzOiBgY2VwaCB0ZWxsIG1nciBvc2Qgc3Rh dHVzYCBhbmQgYGNlcGggdGVsbCBtZ3IgZnMgc3RhdHVzYC4gIFRoZXNlCiAgICAgIGFyZSBoaWdo IGxldmVsIGNvbG9yaXplZCB2aWV3cyB0byBjb21wbGVtZW50IHRoZSBleGlzdGluZyBDTEkuCgoK ICAqIFRoZSBvdmVyYWxsICpzY2FsYWJpbGl0eSogb2YgdGhlIGNsdXN0ZXIgaGFzIGltcHJvdmVk LiBXZSBoYXZlCiAgICBzdWNjZXNzZnVsbHkgdGVzdGVkIGNsdXN0ZXJzIHdpdGggdXAgdG8gMTAs MDAwIE9TRHMuCiAgKiBFYWNoIE9TRCBjYW4gbm93IGhhdmUgYSAqZGV2aWNlIGNsYXNzKiBhc3Nv Y2lhdGVkIHdpdGggaXQgKGUuZy4sIGBoZGRgIG9yCiAgICBgc3NkYCksIGFsbG93aW5nIENSVVNI IHJ1bGVzIHRvIHRyaXZpYWxseSBtYXAgZGF0YSB0byBhIHN1YnNldCBvZiBkZXZpY2VzCiAgICBp biB0aGUgc3lzdGVtLiAgTWFudWFsbHkgd3JpdGluZyBDUlVTSCBydWxlcyBvciBtYW51YWwgZWRp dGluZyBvZiB0aGUgQ1JVU0gKICAgIGlzIG5vcm1hbGx5IG5vdCByZXF1aXJlZC4gCiAgKiBZb3Ug Y2FuIG5vdyAqb3B0aW1pemUgQ1JVU0ggd2VpZ2h0cyogY2FuIG5vdyBiZSBvcHRpbWl6ZWQgdG8K ICAgIG1haW50YWluIGEgKm5lYXItcGVyZmVjdCBkaXN0cmlidXRpb24gb2YgZGF0YSogYWNyb3Nz IE9TRHMuICAKICAqIFRoZXJlIGlzIGFsc28gYSBuZXcgYHVwbWFwYCBleGNlcHRpb24gbWVjaGFu aXNtIHRoYXQgYWxsb3dzCiAgICBpbmRpdmlkdWFsIFBHcyB0byBiZSBtb3ZlZCBhcm91bmQgdG8g YWNoaWV2ZSBhICpwZXJmZWN0CiAgICBkaXN0cmlidXRpb24qICh0aGlzIHJlcXVpcmVzIGx1bWlu b3VzIGNsaWVudHMpLiAKICAqIEVhY2ggT1NEIG5vdyBhZGp1c3RzIGl0cyBkZWZhdWx0IGNvbmZp Z3VyYXRpb24gYmFzZWQgb24gd2hldGhlciB0aGUKICAgIGJhY2tpbmcgZGV2aWNlIGlzIGFuIEhE RCBvciBTU0QuICBNYW51YWwgdHVuaW5nIGdlbmVyYWxseSBub3QgcmVxdWlyZWQuCiAgKiBUaGUg cHJvdG90eXBlICptY2xvY2sgUW9TIHF1ZXVlaW5nIGFsZ29yaXRobSogaXMgbm93IGF2YWlsYWJs ZS4gIAogICogVGhlcmUgaXMgbm93IGEgKmJhY2tvZmYqIG1lY2hhbmlzbSB0aGF0IHByZXZlbnRz IE9TRHMgZnJvbSBiZWluZwogICAgb3ZlcmxvYWRlZCBieSByZXF1ZXN0cyB0byBvYmplY3RzIG9y IFBHcyB0aGF0IGFyZSBub3QgY3VycmVudGx5IGFibGUgdG8KICAgIHByb2Nlc3MgSU8uCiAgKiBU aGVyZSBpcyBhICpzaW1wbGlmaWVkIE9TRCByZXBsYWNlbWVudCBwcm9jZXNzKiB0aGF0IGlzIG1v cmUgcm9idXN0LiAgCiAgKiBZb3UgY2FuIHF1ZXJ5IHRoZSBzdXBwb3J0ZWQgZmVhdHVyZXMgYW5k IChhcHBhcmVudCkgcmVsZWFzZXMgb2YKICAgIGFsbCBjb25uZWN0ZWQgZGFlbW9ucyBhbmQgY2xp ZW50cyB3aXRoIGBjZXBoIGZlYXR1cmVzYC4gCiAgKiBZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgb2xk ZXN0IENlcGggY2xpZW50IHZlcnNpb24geW91IHdpc2ggdG8gYWxsb3cgdG8KICAgIGNvbm5lY3Qg dG8gdGhlIGNsdXN0ZXIgdmlhIGBjZXBoIG9zZCBzZXQtcmVxdWlyZS1taW4tY29tcGF0LWNsaWVu dGAgYW5kCiAgICBDZXBoIHdpbGwgcHJldmVudCB5b3UgZnJvbSBlbmFibGluZyBmZWF0dXJlcyB0 aGF0IHdpbGwgYnJlYWsgY29tcGF0aWJpbGl0eQogICAgd2l0aCB0aG9zZSBjbGllbnRzLiAgCiAg KiBTZXZlcmFsIGBzbGVlcGAgc2V0dGluZ3MsIGluY2x1ZGUgYG9zZF9yZWNvdmVyeV9zbGVlcGAs CiAgICBgb3NkX3NuYXBfdHJpbV9zbGVlcGAsIGFuZCBgb3NkX3NjcnViX3NsZWVwYCBoYXZlIGJl ZW4KICAgIHJlaW1wbGVtZW50ZWQgdG8gd29yayBlZmZpY2llbnRseS4gIChUaGVzZSBhcmUgdXNl ZCBpbiBzb21lIGNhc2VzCiAgICB0byB3b3JrIGFyb3VuZCBpc3N1ZXMgdGhyb3R0bGluZyBiYWNr Z3JvdW5kIHdvcmsuKQoKICAqIFRoZSBkZXByZWNhdGVkICdjcnVzaF9ydWxlc2V0JyBwcm9wZXJ0 eSBoYXMgZmluYWxseSBiZWVuIHJlbW92ZWQ7IHBsZWFzZSB1c2UKICAgICdjcnVzaF9ydWxlJyBp bnN0ZWFkIGZvciB0aGUgJ29zZCBwb29sIGdldCAuLi4nIGFuZCAnb3NkIHBvb2wgc2V0IC4uJyBj b21tYW5kcy4KCiAgICogVGhlICdvc2QgcG9vbCBkZWZhdWx0IGNydXNoIHJlcGxpY2F0ZWQgcnVs ZXNldCcgb3B0aW9uIGhhcyBiZWVuCiAgICAgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgYnkgdGhlICdv c2QgcG9vbCBkZWZhdWx0IGNydXNoIHJ1bGUnIG9wdGlvbi4KICAgICBCeSBkZWZhdWx0IGl0IGlz IC0xLCB3aGljaCBtZWFucyB0aGUgbW9uIHdpbGwgcGljayB0aGUgZmlyc3QgdHlwZQogICAgIHJl cGxpY2F0ZWQgcnVsZSBpbiB0aGUgQ1JVU0ggbWFwIGZvciByZXBsaWNhdGVkIHBvb2xzLiAgRXJh c3VyZQogICAgIGNvZGVkIHBvb2xzIGhhdmUgcnVsZXMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBj cmVhdGVkIGZvciB0aGVtIGlmIHRoZXkgYXJlCiAgICAgbm90IHNwZWNpZmllZCBhdCBwb29sIGNy ZWF0aW9uIHRpbWUuCgotICpSR1cqOgoKICAqIFJHVyAqbWV0YWRhdGEgc2VhcmNoKiBiYWNrZWQg YnkgRWxhc3RpY1NlYXJjaCBub3cgc3VwcG9ydHMgZW5kCiAgICB1c2VyIHJlcXVlc3RzIHNlcnZp Y2UgdmlhIFJHVyBpdHNlbGYsIGFuZCBhbHNvIHN1cHBvcnRzIGN1c3RvbQogICAgbWV0YWRhdGEg ZmllbGRzLiBBIHF1ZXJ5IGxhbmd1YWdlIGEgc2V0IG9mIFJFU1RmdWwgQVBJcyB3ZXJlCiAgICBj cmVhdGVkIGZvciB1c2VycyB0byBiZSBhYmxlIHRvIHNlYXJjaCBvYmplY3RzIGJ5IHRoZWlyCiAg ICBtZXRhZGF0YS4gTmV3IEFQSXMgdGhhdCBhbGxvdyBjb250cm9sIG9mIGN1c3RvbSBtZXRhZGF0 YSBmaWVsZHMKICAgIHdlcmUgYWxzbyBhZGRlZC4KICAqIFJHVyBub3cgc3VwcG9ydHMgKmR5bmFt aWMgYnVja2V0IGluZGV4IHNoYXJkaW5nKi4gIEFzIHRoZSBudW1iZXIKICAgIG9mIG9iamVjdHMg aW4gYSBidWNrZXQgZ3Jvd3MsIFJHVyB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzaGFyZCB0aGUKICAg IGJ1Y2tldCBpbmRleCBpbiByZXNwb25zZS4gIE5vIHVzZXIgaW50ZXJ2ZW50aW9uIG9yIGJ1Y2tl dCBzaXplCiAgICBjYXBhY2l0eSBwbGFubmluZyBpcyByZXF1aXJlZC4KICAqIFJHVyBpbnRyb2R1 Y2VzICpzZXJ2ZXIgc2lkZSBlbmNyeXB0aW9uKiBvZiB1cGxvYWRlZCBvYmplY3RzIHdpdGgKICAg IHRocmVlIG9wdGlvbnMgZm9yIHRoZSBtYW5hZ2VtZW50IG9mIGVuY3J5cHRpb24ga2V5czogYXV0 b21hdGljCiAgICBlbmNyeXB0aW9uIChvbmx5IHJlY29tbWVuZGVkIGZvciB0ZXN0IHNldHVwcyks IGN1c3RvbWVyIHByb3ZpZGVkCiAgICBrZXlzIHNpbWlsYXIgdG8gQW1hem9uIFNTRS1DIHNwZWNp ZmljYXRpb24sIGFuZCB0aHJvdWdoIHRoZSB1c2Ugb2YKICAgIGFuIGV4dGVybmFsIGtleSBtYW5h Z2VtZW50IHNlcnZpY2UgKE9wZW5zdGFjayBCYXJiaWNhbikgc2ltaWxhcgogICAgdG8gQW1hem9u IFNTRS1LTVMgc3BlY2lmaWNhdGlvbi4KICAqIFJHVyBub3cgaGFzIHByZWxpbWluYXJ5IEFXUy1s aWtlIGJ1Y2tldCBwb2xpY3kgQVBJIHN1cHBvcnQuICBGb3IKICAgIG5vdywgcG9saWN5IGlzIGEg bWVhbnMgdG8gZXhwcmVzcyBhIHJhbmdlIG9mIG5ldyBhdXRob3JpemF0aW9uCiAgICBjb25jZXB0 cy4gIEluIHRoZSBmdXR1cmUgaXQgd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgYWRkaXRpb25h bAogICAgYXV0aCBjYXBhYmlsaXRpZXMgc3VjaCBhcyBTVFMgYW5kIGdyb3VwIHBvbGljeS4KICAq IFJHVyBoYXMgY29uc29saWRhdGVkIHRoZSBzZXZlcmFsIG1ldGFkYXRhIGluZGV4IHBvb2xzIHZp YSB0aGUgdXNlIG9mIHJhZG9zCiAgICBuYW1lc3BhY2VzLgoKLSAqUkJEKjoKCiAgKiBSQkQgbm93 IGhhcyBmdWxsLCBzdGFibGUgc3VwcG9ydCBmb3IgKmVyYXN1cmUgY29kZWQgcG9vbHMqIHZpYSB0 aGUgbmV3CiAgICBgLS1kYXRhLXBvb2xgIG9wdGlvbiB0byBgcmJkIGNyZWF0ZWAuCiAgKiBSQkQg bWlycm9yaW5nJ3MgcmJkLW1pcnJvciBkYWVtb24gaXMgbm93IGhpZ2hseSBhdmFpbGFibGUuIFdl CiAgICByZWNvbW1lbmQgZGVwbG95aW5nIHNldmVyYWwgaW5zdGFuY2VzIG9mIHJiZC1taXJyb3Ig Zm9yCiAgICByZWxpYWJpbGl0eS4KICAqIFRoZSBkZWZhdWx0ICdyYmQnIHBvb2wgaXMgbm8gbG9u Z2VyIGNyZWF0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcKICAgIGNsdXN0ZXIgY3JlYXRpb24uIEFk ZGl0aW9uYWxseSwgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgcG9vbCB1c2VkCiAgICBieSB0aGUg cmJkIENMSSB3aGVuIG5vIHBvb2wgaXMgc3BlY2lmaWVkIGNhbiBiZSBvdmVycmlkZGVuIHZpYSBh CiAgICBuZXcgYHJiZCBkZWZhdWx0IHBvb2wgPSA8cG9vbCBuYW1lPmAgY29uZmlndXJhdGlvbiBv cHRpb24uCiAgKiBJbml0aWFsIHN1cHBvcnQgZm9yIGRlZmVycmVkIGltYWdlIGRlbGV0aW9uIHZp YSBuZXcgYHJiZAogICAgdHJhc2hgIENMSSBjb21tYW5kcy4gSW1hZ2VzLCBldmVuIG9uZXMgYWN0 aXZlbHkgaW4tdXNlIGJ5CiAgICBjbG9uZXMsIGNhbiBiZSBtb3ZlZCB0byB0aGUgdHJhc2ggYW5k IGRlbGV0ZWQgYXQgYSBsYXRlciB0aW1lLgogICogTmV3IHBvb2wtbGV2ZWwgYHJiZCBtaXJyb3Ig cG9vbCBwcm9tb3RlYCBhbmQgYHJiZCBtaXJyb3IgcG9vbAogICAgZGVtb3RlYCBjb21tYW5kcyB0 byBiYXRjaCBwcm9tb3RlL2RlbW90ZSBhbGwgbWlycm9yZWQgaW1hZ2VzCiAgICB3aXRoaW4gYSBw b29sLgogICogTWlycm9yaW5nIG5vdyBvcHRpb25hbGx5IHN1cHBvcnRzIGEgY29uZmlndXJhYmxl IHJlcGxpY2F0aW9uIGRlbGF5CiAgICB2aWEgdGhlIGByYmQgbWlycm9yaW5nIHJlcGxheSBkZWxh eSA9IDxzZWNvbmRzPmAgY29uZmlndXJhdGlvbgogICAgb3B0aW9uLgogICogSW1wcm92ZWQgZGlz Y2FyZCBoYW5kbGluZyB3aGVuIHRoZSBvYmplY3QgbWFwIGZlYXR1cmUgaXMgZW5hYmxlZC4KICAq IHJiZCBDTEkgYGltcG9ydGAgYW5kIGBjb3B5YCBjb21tYW5kcyBub3cgZGV0ZWN0IHNwYXJzZSBh bmQKICAgIHByZXNlcnZlIHNwYXJzZSByZWdpb25zLgogICogSW1hZ2VzIGFuZCBTbmFwc2hvdHMg d2lsbCBub3cgaW5jbHVkZSBhIGNyZWF0aW9uIHRpbWVzdGFtcAoKLSAqQ2VwaEZTKjoKCiAgKiAq TXVsdGlwbGUgYWN0aXZlIE1EUyBkYWVtb25zKiBpcyBub3cgY29uc2lkZXJlZCBzdGFibGUuICBU aGUgbnVtYmVyCiAgICBvZiBhY3RpdmUgTURTIHNlcnZlcnMgbWF5IGJlIGFkanVzdGVkIHVwIG9y IGRvd24gb24gYW4gYWN0aXZlIENlcGhGUyBmaWxlCiAgICBzeXN0ZW0uCiAgKiBDZXBoRlMgKmRp cmVjdG9yeSBmcmFnbWVudGF0aW9uKiBpcyBub3cgc3RhYmxlIGFuZCBlbmFibGVkIGJ5CiAgICBk ZWZhdWx0IG9uIG5ldyBmaWxlc3lzdGVtcy4gIFRvIGVuYWJsZSBpdCBvbiBleGlzdGluZyBmaWxl c3lzdGVtcwogICAgdXNlICJjZXBoIGZzIHNldCA8ZnNfbmFtZT4gYWxsb3dfZGlyZnJhZ3MiLiAg TGFyZ2Ugb3IgdmVyeSBidXN5CiAgICBkaXJlY3RvcmllcyBhcmUgc2hhcmRlZCBhbmQgKHBvdGVu dGlhbGx5KSBkaXN0cmlidXRlZCBhY3Jvc3MKICAgIG11bHRpcGxlIE1EUyBkYWVtb25zIGF1dG9t YXRpY2FsbHkuCiAgKiBEaXJlY3Rvcnkgc3VidHJlZXMgY2FuIGJlIGV4cGxpY2l0bHkgcGlubmVk IHRvIHNwZWNpZmljIE1EUyBkYWVtb25zIGluCiAgICBjYXNlcyB3aGVyZSB0aGUgYXV0b21hdGlj IGxvYWQgYmFsYW5jaW5nIGlzIG5vdCBkZXNpcmVkIG9yIGVmZmVjdGl2ZS4KCi0gKk1pc2NlbGxh bmVvdXMqOgoKICAqIFJlbGVhc2UgcGFja2FnZXMgYXJlIG5vdyBiZWluZyBidWlsdCBmb3IgKkRl YmlhbiBTdHJldGNoKi4gIFRoZQogICAgZGlzdHJpYnV0aW9ucyB3ZSBidWlsZCBmb3Igbm93IGlu Y2x1ZGVzOgoKICAgIC0gQ2VudE9TIDcgKHg4Nl82NCBhbmQgYWFyY2g2NCkKICAgIC0gRGViaWFu IDggSmVzc2llICh4ODZfNjQpCiAgICAtIERlYmlhbiA5IFN0cmV0Y2ggKHg4Nl82NCkKICAgIC0g VWJ1bnR1IDE2LjA0IFhlbmlhbCAoeDg2XzY0IGFuZCBhYXJjaDY0KQogICAgLSBVYnVudHUgMTQu MDQgVHJ1c3R5ICh4ODZfNjQpCgogICAgTm90ZSB0aGF0IFFBIGlzIGxpbWl0ZWQgdG8gQ2VudE9T IGFuZCBVYnVudHUgKHhlbmlhbCBhbmQgdHJ1c3R5KS4KCiAgKiAqQ0xJIGNoYW5nZXMqOgoKICAg IC0gVGhlIGBjZXBoIC1zYCBvciBgY2VwaCBzdGF0dXNgIGNvbW1hbmQgaGFzIGEgZnJlc2ggbG9v ay4KICAgIC0gYGNlcGgge29zZCxtZHMsbW9ufSB2ZXJzaW9uc2Agc3VtbWFyaXplcyB2ZXJzaW9u cyBvZiBydW5uaW5nIGRhZW1vbnMuCiAgICAtIGBjZXBoIHtvc2QsbWRzLG1vbn0gY291bnQtbWV0 YWRhdGEgPHByb3BlcnR5PmAgc2ltaWxhcmx5CiAgICAgIHRhYnVsYXRlcyBhbnkgb3RoZXIgZGFl bW9uIG1ldGFkYXRhIHZpc2libGUgdmlhIHRoZSBgY2VwaAogICAgICB7b3NkLG1kcyxtb259IG1l dGFkYXRhYCBjb21tYW5kcy4KICAgIC0gYGNlcGggZmVhdHVyZXNgIHN1bW1hcml6ZXMgZmVhdHVy ZXMgYW5kIHJlbGVhc2VzIG9mIGNvbm5lY3RlZAogICAgICBjbGllbnRzIGFuZCBkYWVtb25zLgog ICAgLSBgY2VwaCBvc2QgcmVxdWlyZS1vc2QtcmVsZWFzZSA8cmVsZWFzZT5gIHJlcGxhY2VzIHRo ZSBvbGQKICAgICAgYHJlcXVpcmVfUkVMRUFTRV9vc2RzYCBmbGFncy4KICAgIC0gYGNlcGggb3Nk IHBnLXVwbWFwYCwgYGNlcGggb3NkIHJtLXBnLXVwbWFwYCwgYGNlcGggb3NkCiAgICAgIHBnLXVw bWFwLWl0ZW1zYCwgYGNlcGggb3NkIHJtLXBnLXVwbWFwLWl0ZW1zYCBjYW4gZXhwbGljaXRseQog ICAgICBtYW5hZ2UgYHVwbWFwYCBpdGVtcy4KICAgIC0gYGNlcGggb3NkIGdldGNydXNobWFwYCBy ZXR1cm5zIGEgY3J1c2ggbWFwIHZlcnNpb24gbnVtYmVyIG9uCiAgICAgIHN0ZGVyciwgYW5kIGBj ZXBoIG9zZCBzZXRjcnVzaG1hcCBbdmVyc2lvbl1gIHdpbGwgb25seSBpbmplY3QKICAgICAgYW4g dXBkYXRlZCBjcnVzaCBtYXAgaWYgdGhlIHZlcnNpb24gbWF0Y2hlcy4gIFRoaXMgYWxsb3dzIGNy dXNoCiAgICAgIG1hcHMgdG8gYmUgdXBkYXRlZCBvZmZsaW5lIGFuZCB0aGVuIHJlaW5qZWN0ZWQg aW50byB0aGUgY2x1c3RlcgogICAgICB3aXRob3V0IGZlYXIgb2YgY2xvYmJlcmluZyByYWNpbmcg Y2hhbmdlcyAoZS5nLiwgYnkgbmV3bHkgYWRkZWQKICAgICAgb3NkcyBvciBjaGFuZ2VzIGJ5IG90 aGVyIGFkbWluaXN0cmF0b3JzKS4KICAgIC0gYGNlcGggb3NkIGNyZWF0ZWAgaGFzIGJlZW4gcmVw bGFjZWQgYnkgYGNlcGggb3NkIG5ld2AuICBUaGlzCiAgICAgIHNob3VsZCBiZSBoaWRkZW4gZnJv bSBtb3N0IHVzZXJzIGJ5IHVzZXItZmFjaW5nIHRvb2xzIGxpa2UKICAgICAgYGNlcGgtZGlza2Au CiAgICAtIGBjZXBoIG9zZCBkZXN0cm95YCB3aWxsIG1hcmsgYW4gT1NEIGRlc3Ryb3llZCBhbmQg cmVtb3ZlIGl0cwogICAgICBjZXBoeCBhbmQgbG9ja2JveCBrZXlzLiAgSG93ZXZlciwgdGhlIE9T RCBpZCBhbmQgQ1JVU0ggbWFwIGVudHJ5CiAgICAgIHdpbGwgcmVtYWluIGluIHBsYWNlLCBhbGxv d2luZyB0aGUgaWQgdG8gYmUgcmV1c2VkIGJ5IGEKICAgICAgcmVwbGFjZW1lbnQgZGV2aWNlIHdp dGggbWluaW1hbCBkYXRhIHJlYmFsYW5jaW5nLgogICAgLSBgY2VwaCBvc2QgcHVyZ2VgIHdpbGwg cmVtb3ZlIGFsbCB0cmFjZXMgb2YgYW4gT1NEIGZyb20gdGhlCiAgICAgIGNsdXN0ZXIsIGluY2x1 ZGluZyBpdHMgY2VwaHggZW5jcnlwdGlvbiBrZXlzLCBkbS1jcnlwdCBsb2NrYm94CiAgICAgIGtl eXMsIE9TRCBpZCwgYW5kIGNydXNoIG1hcCBlbnRyeS4KICAgIC0gYGNlcGggb3NkIGxzLXRyZWUg PG5hbWU+YCB3aWxsIG91dHB1dCBhIGxpc3Qgb2YgT1NEIGlkcyB1bmRlcgogICAgICB0aGUgZ2l2 ZW4gQ1JVU0ggbmFtZSAobGlrZSBhIGhvc3Qgb3IgcmFjayBuYW1lKS4gIFRoaXMgaXMgdXNlZnVs CiAgICAgIGZvciBhcHBseWluZyBjaGFuZ2VzIHRvIGVudGlyZSBzdWJ0cmVlcy4gIEZvciBleGFt cGxlLCBgY2VwaAogICAgICBvc2QgZG93biBgY2VwaCBvc2QgbHMtdHJlZSByYWNrMWBgLgogICAg LSBgY2VwaCBvc2Qge2FkZCxybX0te25vb3V0LG5vaW4sbm9kb3duLG5vdXB9YCBhbGxvdyB0aGUK ICAgICAgYG5vb3V0YCwgYG5vZG93bmAsIGBub2luYCwgYW5kIGBub3VwYCBmbGFncyB0byBiZSBh cHBsaWVkIHRvCiAgICAgIHNwZWNpZmljIE9TRHMuCiAgICAtIGBjZXBoIGxvZyBsYXN0IFtuXWAg d2lsbCBvdXRwdXQgdGhlIGxhc3QgKm4qIGxpbmVzIG9mIHRoZSBjbHVzdGVyCiAgICAgIGxvZy4K ICAgIC0gYGNlcGggbWdyIGR1bXBgIHdpbGwgZHVtcCB0aGUgTWdyTWFwLCBpbmNsdWRpbmcgdGhl IGN1cnJlbnRseSBhY3RpdmUKICAgICAgY2VwaC1tZ3IgZGFlbW9uIGFuZCBhbnkgc3RhbmRieXMu CiAgICAtIGBjZXBoIG1nciBtb2R1bGUgbHNgIHdpbGwgbGlzdCBhY3RpdmUgY2VwaC1tZ3IgbW9k dWxlcy4KICAgIC0gYGNlcGggbWdyIG1vZHVsZSB7ZW5hYmxlLGRpc2FibGV9IDxuYW1lPmAgd2ls bCBlbmFibGUgb3IKICAgICAgZGlzYWJsZSB0aGUgbmFtZWQgbWdyIG1vZHVsZS4gIFRoZSBtb2R1 bGUgbXVzdCBiZSBwcmVzZW50IGluIHRoZQogICAgICBjb25maWd1cmVkIGBtZ3JfbW9kdWxlX3Bh dGhgIG9uIHRoZSBob3N0KHMpIHdoZXJlIGBjZXBoLW1ncmAgaXMKICAgICAgcnVubmluZy4KICAg IC0gYGNlcGggb3NkIGNydXNoIHN3YXAtYnVja2V0IDxzcmM+IDxkZXN0PmAgd2lsbCBzd2FwIHRo ZQogICAgICBjb250ZW50cyBvZiB0d28gQ1JVU0ggYnVja2V0cyBpbiB0aGUgaGllcmFyY2h5IHdo aWxlIHByZXNlcnZpbmcKICAgICAgdGhlIGJ1Y2tldHMnIGlkcy4gIFRoaXMgYWxsb3dzIGFuIGVu dGlyZSBzdWJ0cmVlIG9mIGRldmljZXMgdG8KICAgICAgYmUgcmVwbGFjZWQgKGUuZy4sIHRvIHJl cGxhY2UgYW4gZW50aXJlIGhvc3Qgb2YgRmlsZVN0b3JlIE9TRHMKICAgICAgd2l0aCBuZXdseS1p bWFnZWQgQmx1ZVN0b3JlIE9TRHMpIHdpdGhvdXQgZGlzcnVwdGluZyB0aGUKICAgICAgZGlzdHJp YnV0aW9uIG9mIGRhdGEgYWNyb3NzIG5laWdoYm9yaW5nIGRldmljZXMuCiAgICAtIGBjZXBoIG9z ZCBzZXQtcmVxdWlyZS1taW4tY29tcGF0LWNsaWVudCA8cmVsZWFzZT5gIGNvbmZpZ3VyZXMKICAg ICAgdGhlIG9sZGVzdCBjbGllbnQgcmVsZWFzZSB0aGUgY2x1c3RlciBpcyByZXF1aXJlZCB0byBz dXBwb3J0LgogICAgICBPdGhlciBjaGFuZ2VzLCBsaWtlIENSVVNIIHR1bmFibGVzLCB3aWxsIGZh aWwgd2l0aCBhbiBlcnJvciBpZgogICAgICB0aGV5IHdvdWxkIHZpb2xhdGUgdGhpcyBzZXR0aW5n LiAgQ2hhbmdpbmcgdGhpcyBzZXR0aW5nIGFsc28KICAgICAgZmFpbHMgaWYgY2xpZW50cyBvbGRl ciB0aGFuIHRoZSBzcGVjaWZpZWQgcmVsZWFzZSBhcmUgY3VycmVudGx5CiAgICAgIGNvbm5lY3Rl ZCB0byB0aGUgY2x1c3Rlci4KICAgIC0gYGNlcGggY29uZmlnLWtleSBkdW1wYCBkdW1wcyBjb25m aWcta2V5IGVudHJpZXMgYW5kIHRoZWlyCiAgICAgIGNvbnRlbnRzLiAgKFRoZSBleGlzdGluZyBg Y2VwaCBjb25maWcta2V5IGxpc3RgIG9ubHkgZHVtcHMgdGhlIGtleQogICAgICBuYW1lcywgbm90 IHRoZSB2YWx1ZXMuKQogICAgLSBgY2VwaCBvc2Qgc2V0LXtmdWxsLG5lYXJmdWxsLGJhY2tmaWxs ZnVsbH0tcmF0aW9gIHNldHMgdGhlCiAgICAgIGNsdXN0ZXItd2lkZSByYXRpbyBmb3IgdmFyaW91 cyBmdWxsIHRocmVzaG9sZHMgKHdoZW4gdGhlIGNsdXN0ZXIKICAgICAgcmVmdXNlcyBJTywgd2hl biB0aGUgY2x1c3RlciB3YXJucyBhYm91dCBiZWluZyBjbG9zZSB0byBmdWxsLAogICAgICB3aGVu IGFuIE9TRCB3aWxsIGRlZmVyIHJlYmFsYW5jaW5nIGEgUEcgdG8gaXRzZWxmLAogICAgICByZXNw ZWN0aXZlbHkpLgogICAgLSBgY2VwaCBvc2QgcmV3ZWlnaHRuYCB3aWxsIHNwZWNpZnkgdGhlIGBy ZXdlaWdodGAgdmFsdWVzIGZvcgogICAgICBtdWx0aXBsZSBPU0RzIGluIGEgc2luZ2xlIGNvbW1h bmQuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBzZXJpZXMgb2YKICAgICAgYGNlcGggb3NkIHJl d2VpZ2h0YCBjb21tYW5kcy4KICAgIC0gYGNlcGggb3NkIGNydXNoIGNsYXNzIHtjcmVhdGUscm0s bHMscmVuYW1lfWAgbWFuYWdlIHRoZSBuZXcKICAgICAgQ1JVU0ggKmRldmljZSBjbGFzcyogZmVh dHVyZS4gIGBjZXBoIGNydXNoIHNldC1kZXZpY2UtY2xhc3MKICAgICAgPGNsYXNzPiA8b3NkPiBb PG9zZD4uLi5dYCB3aWxsIHNldCB0aGUgY2xhc3MgZm9yIHBhcnRpY3VsYXIgZGV2aWNlcy4KICAg IC0gYGNlcGggb3NkIGNydXNoIHJ1bGUgY3JlYXRlLXJlcGxpY2F0ZWRgIHJlcGxhY2VzIHRoZSBv bGQKICAgICAgYGNlcGggb3NkIGNydXNoIHJ1bGUgY3JlYXRlLXNpbXBsZWAgY29tbWFuZCB0byBj cmVhdGUgYSBDUlVTSAogICAgICBydWxlIGZvciBhIHJlcGxpY2F0ZWQgcG9vbC4gIE5vdGFibHkg aXQgdGFrZXMgYSBgY2xhc3NgIGFyZ3VtZW50CiAgICAgIGZvciB0aGUgKmRldmljZSBjbGFzcyog dGhlIHJ1bGUgc2hvdWxkIHRhcmdldCAoZS5nLiwgYHNzZGAgb3IKICAgICAgYGhkZGApLgogICAg LSBgY2VwaCBtb24gZmVhdHVyZSBsc2Agd2lsbCBsaXN0IG1vbml0b3IgZmVhdHVyZXMgcmVjb3Jk ZWQgaW4gdGhlCiAgICAgIE1vbk1hcC4gIGBjZXBoIG1vbiBmZWF0dXJlIHNldGAgd2lsbCBzZXQg YW4gb3B0aW9uYWwgZmVhdHVyZSAobm9uZSBvZgogICAgICB0aGVzZSBleGlzdCB5ZXQpLgogICAg LSBgY2VwaCB0ZWxsIDxkYWVtb24+IGhlbHBgIHdpbGwgbm93IHJldHVybiBhIHVzYWdlIHN1bW1h cnkuCgpNYWpvciBDaGFuZ2VzIGZyb20gSmV3ZWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgot ICpSQURPUyo6CgogICogV2Ugbm93IGRlZmF1bHQgdG8gdGhlIEFzeW5jTWVzc2VuZ2VyIChgbXMg dHlwZSA9IGFzeW5jYCkgaW5zdGVhZAogICAgb2YgdGhlIGxlZ2FjeSBTaW1wbGVNZXNzZW5nZXIu wqAgVGhlIG1vc3Qgbm90aWNlYWJsZSBkaWZmZXJlbmNlIGlzCiAgICB0aGF0IHdlIG5vdyB1c2Ug YSBmaXhlZCBzaXplZCB0aHJlYWQgcG9vbCBmb3IgbmV0d29yayBjb25uZWN0aW9ucwogICAgKGlu c3RlYWQgb2YgdHdvIHRocmVhZHMgcGVyIHNvY2tldCB3aXRoIFNpbXBsZU1lc3NlbmdlcikuCiAg KiBTb21lIE9TRCBmYWlsdXJlcyBhcmUgbm93IGRldGVjdGVkIGFsbW9zdCBpbW1lZGlhdGVseSwg d2hlcmVhcwogICAgcHJldmlvdXNseSB0aGUgaGVhcnRiZWF0IHRpbWVvdXQgKHdoaWNoIGRlZmF1 bHRzIHRvIDIwIHNlY29uZHMpCiAgICBoYWQgdG8gZXhwaXJlLsKgIFRoaXMgcHJldmVudHMgSU8g ZnJvbSBibG9ja2luZyBmb3IgYW4gZXh0ZW5kZWQKICAgIHBlcmlvZCBmb3IgZmFpbHVyZXMgd2hl cmUgdGhlIGhvc3QgcmVtYWlucyB1cCBidXQgdGhlIGNlcGgtb3NkCiAgICBwcm9jZXNzIGlzIG5v IGxvbmdlciBydW5uaW5nLgogICogVGhlIHNpemUgb2YgZW5jb2RlZCBPU0RNYXBzIGhhcyBiZWVu IHJlZHVjZWQuCiAgKiBUaGUgT1NEcyBub3cgcXVpZXNjZSBzY3J1YmJpbmcgd2hlbiByZWNvdmVy eSBvciByZWJhbGFuY2luZyBpcyBpbiBwcm9ncmVzcy4KCi0gKlJHVyo6CgogICogUkdXIG5vdyBz dXBwb3J0cyB0aGUgUzMgbXVsdGlwYXJ0IG9iamVjdCBjb3B5LXBhcnQgQVBJLgogICogSXQgaXMg cG9zc2libGUgbm93IHRvIHJlc2hhcmQgYW4gZXhpc3RpbmcgYnVja2V0IG9mZmxpbmUuIE9mZmxp bmUKICAgIGJ1Y2tldCByZXNoYXJkaW5nIGN1cnJlbnRseSByZXF1aXJlcyB0aGF0IGFsbCBJTyAo ZXNwZWNpYWxseQogICAgd3JpdGVzKSB0byB0aGUgc3BlY2lmaWMgYnVja2V0IGlzIHF1aWVzY2Vk LiAgKEZvciBhdXRvbWF0aWMgb25saW5lCiAgICByZXNoYXJkaW5nLCBzZWUgdGhlIG5ldyBmZWF0 dXJlIGluIEx1bWlub3VzIGFib3ZlLikKICAqIFJHVyBub3cgc3VwcG9ydHMgZGF0YSBjb21wcmVz c2lvbiBmb3Igb2JqZWN0cy4KICAqIENpdmV0d2ViIHZlcnNpb24gaGFzIGJlZW4gdXBncmFkZWQg dG8gMS44CiAgKiBUaGUgU3dpZnQgc3RhdGljIHdlYnNpdGUgQVBJIGlzIG5vdyBzdXBwb3J0ZWQg KFMzIHN1cHBvcnQgaGFzIGJlZW4gYWRkZWQKICAgIHByZXZpb3VzbHkpLgogICogUzMgYnVja2V0 IGxpZmVjeWNsZSBBUEkgaGFzIGJlZW4gYWRkZWQuIE5vdGUgdGhhdCBjdXJyZW50bHkgaXQgb25s eSBzdXBwb3J0cwogICAgb2JqZWN0IGV4cGlyYXRpb24uCiAgKiBTdXBwb3J0IGZvciBjdXN0b20g c2VhcmNoIGZpbHRlcnMgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIExEQVAgYXV0aAogICAgaW1wbGVt ZW50YXRpb24uCiAgKiBTdXBwb3J0IGZvciBORlMgdmVyc2lvbiAzIGhhcyBiZWVuIGFkZGVkIHRv IHRoZSBSR1cgTkZTIGdhdGV3YXkuCiAgKiBBIFB5dGhvbiBiaW5kaW5nIGhhcyBiZWVuIGNyZWF0 ZWQgZm9yIGxpYnJndy4KCi0gKlJCRCo6CgogICogVGhlIHJiZC1taXJyb3IgZGFlbW9uIG5vdyBz dXBwb3J0cyByZXBsaWNhdGluZyBkeW5hbWljIGltYWdlCiAgICBmZWF0dXJlIHVwZGF0ZXMgYW5k IGltYWdlIG1ldGFkYXRhIGtleS92YWx1ZSBwYWlycyBmcm9tIHRoZQogICAgcHJpbWFyeSBpbWFn ZSB0byB0aGUgbm9uLXByaW1hcnkgaW1hZ2UuCiAgKiBUaGUgbnVtYmVyIG9mIGltYWdlIHNuYXBz aG90cyBjYW4gYmUgb3B0aW9uYWxseSByZXN0cmljdGVkIHRvIGEKICAgIGNvbmZpZ3VyYWJsZSBt YXhpbXVtLgogICogVGhlIHJiZCBQeXRob24gQVBJIG5vdyBzdXBwb3J0cyBhc3luY2hyb25vdXMg SU8gb3BlcmF0aW9ucy4KCi0gKkNlcGhGUyo6CgogICogbGliY2VwaGZzIGZ1bmN0aW9uIGRlZmlu aXRpb25zIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIGVuYWJsZSBwcm9wZXIKICAgIHVpZC9naWQgY29u dHJvbC4gIFRoZSBsaWJyYXJ5IHZlcnNpb24gaGFzIGJlZW4gaW5jcmVhc2VkIHRvIHJlZmxlY3Qg dGhlCiAgICBpbnRlcmZhY2UgY2hhbmdlLgogICogU3RhbmRieSByZXBsYXkgTURTIGRhZW1vbnMg bm93IGNvbnN1bWUgbGVzcyBtZW1vcnkgb24gd29ya2xvYWRzCiAgICBkb2luZyBkZWxldGlvbnMu CiAgKiBTY3J1YiBub3cgcmVwYWlycyBiYWNrdHJhY2UsIGFuZCBwb3B1bGF0ZXMgYGRhbWFnZSBs c2Agd2l0aAogICAgZGlzY292ZXJlZCBlcnJvcnMuCiAgKiBBIG5ldyBgcGdfZmlsZXNgIHN1YmNv bW1hbmQgdG8gYGNlcGhmcy1kYXRhLXNjYW5gIGNhbiBpZGVudGlmeQogICAgZmlsZXMgYWZmZWN0 ZWQgYnkgYSBkYW1hZ2VkIG9yIGxvc3QgUkFET1MgUEcuCiAgKiBUaGUgZmFsc2UtcG9zaXRpdmUg ImZhaWxpbmcgdG8gcmVzcG9uZCB0byBjYWNoZSBwcmVzc3VyZSIgd2FybmluZ3MgaGF2ZQogICAg YmVlbiBmaXhlZC4KCgpVcGdyYWRlIGZyb20gSmV3ZWwgb3IgS3Jha2VuCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLi4gX1VwZ3JhZGluZzoKCiMuIEVuc3VyZSB0aGF0IHRoZSBgc29ydGJp dHdpc2VgIGZsYWcgaXMgZW5hYmxlZDo6CgogICAgICMgY2VwaCBvc2Qgc2V0IHNvcnRiaXR3aXNl CgojLiBNYWtlIHN1cmUgeW91ciBjbHVzdGVyIGlzIHN0YWJsZSBhbmQgaGVhbHRoeSAobm8gZG93 biBvcgogICByZWNvdmVyeWluZyBPU0RzKS4gIChPcHRpb25hbCwgYnV0IHJlY29tbWVuZGVkLikK CiMuIERvIG5vdCBjcmVhdGUgYW55IG5ldyBlcmFzdXJlLWNvZGUgcG9vbHMgd2hpbGUgdXBncmFk aW5nIHRoZSBtb25pdG9ycy4KCiMuIFNldCB0aGUgYG5vb3V0YCBmbGFnIGZvciB0aGUgZHVyYXRp b24gb2YgdGhlIHVwZ3JhZGUuIChPcHRpb25hbAogICBidXQgcmVjb21tZW5kZWQuKTo6CgogICAg ICMgY2VwaCBvc2Qgc2V0IG5vb3V0CgojLiBVcGdyYWRlIG1vbml0b3JzIGJ5IGluc3RhbGxpbmcg dGhlIG5ldyBwYWNrYWdlcyBhbmQgcmVzdGFydGluZyB0aGUKICAgbW9uaXRvciBkYWVtb25zLiAg Tm90ZSB0aGF0LCB1bmxpa2UgcHJpb3IgcmVsZWFzZXMsIHRoZSBjZXBoLW1vbgogICBkYWVtb25z ICptdXN0KiBiZSB1cGdyYWRlZCBmaXJzdC46OgoKICAgICAjIHN5c3RlbWN0bCByZXN0YXJ0IGNl cGgtbW9uLnRhcmdldAoKICAgVmVyaWZ5IHRoZSBtb25pdG9yIHVwZ3JhZGUgaXMgY29tcGxldGUg b25jZSBhbGwgbW9uaXRvcnMgYXJlIHVwIGJ5CiAgIGxvb2tpbmcgZm9yIHRoZSBgbHVtaW5vdXNg IGZlYXR1cmUgc3RyaW5nIGluIHRoZSBtb24gbWFwLiAgRm9yCiAgIGV4YW1wbGU6OgoKICAgICAj IGNlcGggbW9uIGZlYXR1cmUgbHMKCiAgIHNob3VsZCBpbmNsdWRlIGBsdW1pbm91c2AgdW5kZXIg cGVyc2lzdGVudCBmZWF0dXJlczo6CgogICAgIG9uIGN1cnJlbnQgbW9ubWFwIChlcG9jaCBOTk4p CiAgICAgICAgcGVyc2lzdGVudDogW2tyYWtlbixsdW1pbm91c10KICAgICAgICByZXF1aXJlZDog W2tyYWtlbixsdW1pbm91c10KCiMuIEFkZCBvciByZXN0YXJ0IGBjZXBoLW1ncmAgZGFlbW9ucy4g IElmIHlvdSBhcmUgdXBncmFkaW5nIGZyb20KICAga3Jha2VuLCB1cGdyYWRlIHBhY2thZ2VzIGFu ZCByZXN0YXJ0IGNlcGgtbWdyIGRhZW1vbnMgd2l0aDo6CgogICAgICMgc3lzdGVtY3RsIHJlc3Rh cnQgY2VwaC1tZ3IudGFyZ2V0CgogICBJZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIGtyYWtlbiwg eW91IG1heSBhbHJlYWR5IGhhdmUgY2VwaC1tZ3IKICAgZGFlbW9ucyBkZXBsb3llZC4gIElmIG5v dCwgb3IgaWYgeW91IGFyZSB1cGdyYWRpbmcgZnJvbSBqZXdlbCwgeW91CiAgIGNhbiBkZXBsb3kg bmV3IGRhZW1vbnMgd2l0aCB0b29scyBsaWtlIGNlcGgtZGVwbG95IG9yIGNlcGgtYW5zaWJsZS4K ICAgRm9yIGV4YW1wbGUsOjoKCiAgICAgIyBjZXBoLWRlcGxveSBtZ3IgY3JlYXRlIEhPU1QKCiAg IFZlcmlmeSB0aGUgY2VwaC1tZ3IgZGFlbW9ucyBhcmUgcnVubmluZyBieSBjaGVja2luZyBgY2Vw aCAtc2A6OgoKICAgICAjIGNlcGggLXMKCiAgICAgLi4uCiAgICAgICBzZXJ2aWNlczoKICAgICAg ICBtb246IDMgZGFlbW9ucywgcXVvcnVtIGZvbyxiYXIsYmF6CiAgICAgICAgbWdyOiBmb28oYWN0 aXZlKSwgc3RhbmRieXM6IGJhciwgYmF6CiAgICAgLi4uCgojLiBVcGdyYWRlIGFsbCBPU0RzIGJ5 IGluc3RhbGxpbmcgdGhlIG5ldyBwYWNrYWdlcyBhbmQgcmVzdGFydGluZyB0aGUKICAgY2VwaC1v c2QgZGFlbW9ucyBvbiBhbGwgaG9zdHMuOjoKCiAgICAgIyBzeXN0ZW1jdGwgcmVzdGFydCBjZXBo LW9zZC50YXJnZXQKCiAgIFlvdSBjYW4gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIE9TRCB1 cGdyYWRlcyB3aXRoIHRoZSBuZXcKICAgYGNlcGggb3NkIHZlcnNpb25zYCBjb21tYW5kLjo6Cgog ICAgICMgY2VwaCBvc2QgdmVyc2lvbnMKICAgICB7CiAgICAgICAgImNlcGggdmVyc2lvbiAxMi4y LjAgKC4uLikgbHVtaW5vdXMgKHN0YWJsZSkiOiAxMiwKICAgICAgICAiY2VwaCB2ZXJzaW9uIDEw LjIuNiAoLi4uKSI6IDMsCiAgICAgfQoKIy4gVXBncmFkZSBhbGwgQ2VwaEZTIGRhZW1vbnMgYnkg dXBncmFkaW5nIHBhY2thZ2VzIGFuZCByZXN0YXJ0aW5nCiAgIGRhZW1vbnMgb24gYWxsIGhvc3Rz Ljo6CgogICAgICMgc3lzdGVtY3RsIHJlc3RhcnQgY2VwaC1tZHMudGFyZ2V0CgojLiBVcGdyYWRl IGFsbCByYWRvc2d3IGRhZW1vbnMgYnkgdXBncmFkaW5nIHBhY2thZ2VzIGFuZCByZXN0YXJ0aW5n CiAgIGRhZW1vbnMgb24gYWxsIGhvc3RzLjo6CgogICAgICMgc3lzdGVtY3RsIHJlc3RhcnQgcmFk b3Nndy50YXJnZXQKCiMuIENvbXBsZXRlIHRoZSB1cGdyYWRlIGJ5IGRpc2FsbG93aW5nIHByZS1s dW1pbm91cyBPU0RzOjoKCiAgICAgIyBjZXBoIG9zZCByZXF1aXJlLW9zZC1yZWxlYXNlIGx1bWlu b3VzCgogICBJZiB5b3Ugc2V0IGBub291dGAgYXQgdGhlIGJlZ2lubmluZywgYmUgc3VyZSB0byBj bGVhciBpdCB3aXRoOjoKCiAgICAgIyBjZXBoIG9zZCB1bnNldCBub291dAoKIy4gVmVyaWZ5IHRo ZSBjbHVzdGVyIGlzIGhlYWx0aHkgd2l0aCBgY2VwaCBoZWFsdGhgLgoKClVwZ3JhZGluZyBmcm9t IHByZS1KZXdlbCByZWxlYXNlcyAobGlrZSBIYW1tZXIpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpZb3UgKm11c3QqIGZpcnN0IHVwZ3JhZGUgdG8gSmV3 ZWwgKDEwLjIueikgYmVmb3JlIGF0dGVtcHRpbmcgYW4KdXBncmFkZSB0byBMdW1pbm91cy4KCgpV cGdyYWRlIGNvbXBhdGliaWxpdHkgbm90ZXMsIEtyYWtlbiB0byBMdW1pbm91cwotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKiBXZSBubyBsb25nZXIgdGVz dCB0aGUgRmlsZVN0b3JlIGNlcGgtb3NkIGJhY2tlbmQgaW4gY29tYmluYXRpb24gd2l0aAogIGBi dHJmc2AuICBXZSByZWNvbW1lbmQgYWdhaW5zdCB1c2luZyBidHJmcy4gIElmIHlvdSBhcmUgdXNp bmcKICBidHJmcy1iYXNlZCBPU0RzIGFuZCB3YW50IHRvIHVwZ3JhZGUgdG8gbHVtaW5vdXMgeW91 IHdpbGwgbmVlZCB0bwogIGFkZCB0aGUgZm9sbHdpbmcgdG8geW91ciBjZXBoLmNvbmY6OgoKICAg IGVuYWJsZSBleHBlcmltZW50YWwgdW5yZWNvdmVyYWJsZSBkYXRhIGNvcnJ1cHRpbmcgZmVhdHVy ZXMgPSBidHJmcwoKICBUaGUgY29kZSBpcyBtYXR1cmUgYW5kIHVubGlrZWx5IHRvIGNoYW5nZSwg YnV0IHdlIGFyZSBvbmx5CiAgY29udGludWluZyB0byB0ZXN0IHRoZSBKZXdlbCBzdGFibGUgYnJh bmNoIGFnYWluc3QgYnRyZnMuICBXZQogIHJlY29tbWVuZCBtb3ZpbmcgdGhlc2UgT1NEcyB0byBG aWxlU3RvcmUgd2l0aCBYRlMgb3IgQmx1ZVN0b3JlLgoqIFRoZSBgcnVsZXNldC0qYCBwcm9wZXJ0 aWVzIGZvciB0aGUgZXJhc3VyZSBjb2RlIHByb2ZpbGVzIGhhdmUgYmVlbgogIHJlbmFtZWQgdG8g YGNydXNoLSpgIHRvICgxKSBtb3ZlIGF3YXkgZnJvbSB0aGUgb2Jzb2xldGUgJ3J1bGVzZXQnCiAg dGVybSBhbmQgdG8gYmUgbW9yZSBjbGVhciBhYm91dCB0aGVpciBwdXJwb3NlLiAgVGhlcmUgaXMg YWxzbyBhIG5ldwogIG9wdGlvbmFsIGBjcnVzaC1kZXZpY2UtY2xhc3NgIHByb3BlcnR5IHRvIHNw ZWNpZnkgYSBDUlVTSCBkZXZpY2UKICBjbGFzcyB0byB1c2UgZm9yIHRoZSBlcmFzdXJlIGNvZGVk IHBvb2wuICBFeGlzdGluZyBlcmFzdXJlIGNvZGUKICBwcm9maWxlcyB3aWxsIGJlIGNvbnZlcnRl ZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXBncmFkZSBjb21wbGV0ZXMKICAod2hlbiB0aGUgYGNlcGgg b3NkIHJlcXVpcmUtb3NkLXJlbGVhc2UgbHVtaW5vdXNgIGNvbW1hbmQgaXMgcnVuKQogIGJ1dCBh bnkgcHJvdmlzaW9uaW5nIHRvb2xzIHRoYXQgY3JlYXRlIGVyYXN1cmUgY29kZWQgcG9vbHMgbWF5 IG5lZWQKICB0byBiZSB1cGRhdGVkLgoqIFdoZW4gYXNzaWduaW5nIGEgbmV0d29yayB0byB0aGUg cHVibGljIG5ldHdvcmsgYW5kIG5vdCB0bwogIHRoZSBjbHVzdGVyIG5ldHdvcmsgdGhlIG5ldHdv cmsgc3BlY2lmaWNhdGlvbiBvZiB0aGUgcHVibGljCiAgbmV0d29yayB3aWxsIGJlIHVzZWQgZm9y IHRoZSBjbHVzdGVyIG5ldHdvcmsgYXMgd2VsbC4KICBJbiBvbGRlciB2ZXJzaW9ucyB0aGlzIHdv dWxkIGxlYWQgdG8gY2x1c3RlciBzZXJ2aWNlcwogIGJlaW5nIGJvdW5kIHRvIDAuMC4wLjA6PHBv cnQ+LCB0aHVzIG1ha2luZyB0aGUKICBjbHVzdGVyIHNlcnZpY2UgZXZlbiBtb3JlIHB1YmxpY2x5 IGF2YWlsYWJsZSB0aGFuIHRoZQogIHB1YmxpYyBzZXJ2aWNlcy4gV2hlbiBvbmx5IHNwZWNpZnlp bmcgYSBjbHVzdGVyIG5ldHdvcmsgaXQKICB3aWxsIHN0aWxsIHJlc3VsdCBpbiB0aGUgcHVibGlj IHNlcnZpY2VzIGJpbmRpbmcgdG8gMC4wLjAuMC4KCiogSW4gcHJldmlvdXMgdmVyc2lvbnMsIGlm IGEgY2xpZW50IHNlbnQgYW4gb3AgdG8gdGhlIHdyb25nIE9TRCwgdGhlIE9TRAogIHdvdWxkIHJl cGx5IHdpdGggRU5YSU8uICBUaGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCB0aGUgY2xpZW50IG9y IE9TRCBpcwogIGNsZWFybHkgYnVnZ3kgYW5kIHdlIHdhbnQgdG8gc3VyZmFjZSB0aGUgZXJyb3Ig YXMgY2xlYXJseSBhcyBwb3NzaWJsZS4KICBXZSBub3cgb25seSBzZW5kIHRoZSBFTlhJTyByZXBs eSBpZiB0aGUgb3NkX2VueGlvX29uX21pc2RpcmVjdGVkX29wIG9wdGlvbgogIGlzIGVuYWJsZWQg KGl0J3Mgb2ZmIGJ5IGRlZmF1bHQpLiAgVGhpcyBtZWFucyB0aGF0IGEgVk0gdXNpbmcgbGlicmJk IHRoYXQKICBwcmV2aW91c2x5IHdvdWxkIGhhdmUgZ290dGVuIGFuIEVJTyBhbmQgZ29uZSByZWFk LW9ubHkgd2lsbCBub3cgc2VlIGEKICBibG9ja2VkL2h1bmcgSU8gaW5zdGVhZC4KCiogVGhlICJq b3VybmFsZXIgYWxsb3cgc3BsaXQgZW50cmllcyIgY29uZmlnIHNldHRpbmcgaGFzIGJlZW4gcmVt b3ZlZC4KCi0gKmxpYnJhZG9zKjoKCiAgKiBTb21lIHZhcmlhbnRzIG9mIHRoZSBvbWFwX2dldF9r ZXlzIGFuZCBvbWFwX2dldF92YWxzIGxpYnJhZG9zCiAgICBmdW5jdGlvbnMgaGF2ZSBiZWVuIGRl cHJlY2F0ZWQgaW4gZmF2b3Igb2Ygb21hcF9nZXRfdmFsczIgYW5kCiAgICBvbWFwX2dldF9rZXlz Mi4gIFRoZSBuZXcgbWV0aG9kcyBpbmNsdWRlIGFuIG91dHB1dCBhcmd1bWVudAogICAgaW5kaWNh dGluZyB3aGV0aGVyIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGtleXMgbGVmdCB0byBmZXRjaC4KICAg IFByZXZpb3VzbHkgdGhpcyBoYWQgdG8gYmUgaW5mZXJyZWQgZnJvbSB0aGUgcmVxdWVzdGVkIGtl eSBjb3VudCB2cwogICAgdGhlIG51bWJlciBvZiBrZXlzIHJldHVybmVkLCBidXQgdGhpcyBicmVh a3Mgd2l0aCBuZXcgT1NELXNpZGUKICAgIGxpbWl0cyBvbiB0aGUgbnVtYmVyIG9mIGtleXMgb3Ig Ynl0ZXMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgYnkgYQogICAgc2luZ2xlIG9tYXAgcmVxdWVzdC4g IFRoZXNlIGxpbWl0cyB3ZXJlIGludHJvZHVjZWQgYnkga3Jha2VuIGJ1dAogICAgYXJlIGVmZmVj dGl2ZWx5IGRpc2FibGVkIGJ5IGRlZmF1bHQgKGJ5IHNldHRpbmcgYSB2ZXJ5IGxhcmdlIGxpbWl0 CiAgICBvZiAxIEdCKSBiZWNhdXNlIHVzZXJzIG9mIHRoZSBuZXdseSBkZXByZWNhdGVkIGludGVy ZmFjZSBjYW5ub3QKICAgIHRlbGwgd2hldGhlciB0aGV5IHNob3VsZCBmZXRjaCBtb3JlIGtleXMg b3Igbm90LiAgSW4gdGhlIGNhc2Ugb2YKICAgIHRoZSBzdGFuZGFsb25lIGNhbGxzIGluIHRoZSBD KysgaW50ZXJmYWNlCiAgICAoSW9DdHg6OmdldF9vbWFwX3trZXlzLHZhbHN9KSwgbGlicmFkb3Mg aGFzIGJlZW4gdXBkYXRlZCB0byBsb29wIG9uCiAgICB0aGUgY2xpZW50IHNpZGUgdG8gcHJvdmlk ZSBhIGNvcnJlY3QgcmVzdWx0IHZpYSBtdWx0aXBsZSBjYWxscyB0bwogICAgdGhlIE9TRC4gIElu IHRoZSBjYXNlIG9mIHRoZSBtZXRob2RzIHVzZWQgZm9yIGJ1aWxkaW5nCiAgICBtdWx0aS1vcGVy YXRpb24gdHJhbnNhY3Rpb25zLCBob3dldmVyLCBjbGllbnQtc2lkZSBsb29waW5nIGlzIG5vdAog ICAgcHJhY3RpY2FsLCBhbmQgdGhlIG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICBOb3Rl IHRoYXQgdXNlIG9mCiAgICBlaXRoZXIgdGhlIElvQ3R4IG1ldGhvZHMgb24gb2xkZXIgbGlicmFk b3MgdmVyc2lvbnMgb3IgdGhlCiAgICBkZXByZWNhdGVkIG1ldGhvZHMgb24gYW55IHZlcnNpb24g b2YgbGlicmFkb3Mgd2lsbCBsZWFkIHRvCiAgICBpbmNvbXBsZXRlIHJlc3VsdHMgaWYvd2hlbiB0 aGUgbmV3IE9TRCBsaW1pdHMgYXJlIGVuYWJsZWQuCgogICogVGhlIG9yaWdpbmFsIGxpYnJhZG9z IHJhZG9zX29iamVjdHNfbGlzdF9vcGVuIChDKSBhbmQgb2JqZWN0c19iZWdpbgogICAgKEMrKykg b2JqZWN0IGxpc3RpbmcgQVBJLCBkZXByZWNhdGVkIGluIEhhbW1lciwgaGFzIGZpbmFsbHkgYmVl bgogICAgcmVtb3ZlZC4gIFVzZXJzIG9mIHRoaXMgaW50ZXJmYWNlIG11c3QgdXBkYXRlIHRoZWly IHNvZnR3YXJlIHRvIHVzZQogICAgZWl0aGVyIHRoZSByYWRvc19ub2JqZWN0c19saXN0X29wZW4g KEMpIGFuZCBub2JqZWN0c19iZWdpbiAoQysrKSBBUEkgb3IKICAgIHRoZSBuZXcgcmFkb3Nfb2Jq ZWN0X2xpc3RfYmVnaW4gKEMpIGFuZCBvYmplY3RfbGlzdF9iZWdpbiAoQysrKSBBUEkKICAgIGJl Zm9yZSB1cGRhdGluZyB0aGUgY2xpZW50LXNpZGUgbGlicmFkb3MgbGlicmFyeSB0byBMdW1pbm91 cy4KICAgIE9iamVjdCBlbnVtZXJhdGlvbiAodmlhIGFueSBBUEkpIHdpdGggdGhlIGxhdGVzdCBs aWJyYWRvcyB2ZXJzaW9uCiAgICBhbmQgcHJlLUhhbW1lciBPU0RzIGlzIG5vIGxvbmdlciBzdXBw b3J0ZWQuICBOb3RlIHRoYXQgbm8gaW4tdHJlZQogICAgQ2VwaCBzZXJ2aWNlcyByZWx5IG9uIG9i amVjdCBlbnVtZXJhdGlvbiB2aWEgdGhlIGRlcHJlY2F0ZWQgQVBJcywgc28KICAgIG9ubHkgZXh0 ZXJuYWwgbGlicmFkb3MgdXNlcnMgbWlnaHQgYmUgYWZmZWN0ZWQuCgogICAgVGhlIG5ld2VzdCAo YW5kIHJlY29tbWVuZGVkKSByYWRvc19vYmplY3RfbGlzdF9iZWdpbiAoQykgYW5kCiAgICBvYmpl Y3RfbGlzdF9iZWdpbiAoQysrKSBBUEkgaXMgb25seSB1c2FibGUgb24gY2x1c3RlcnMgd2l0aCB0 aGUKICAgIFNPUlRCSVRXSVNFIGZsYWcgZW5hYmxlZCAoSmV3ZWwgYW5kIGxhdGVyKS4gIChOb3Rl IHRoYXQgdGhpcyBmbGFnIGlzCiAgICByZXF1aXJlZCB0byBiZSBzZXQgYmVmb3JlIHVwZ3JhZGlu ZyBiZXlvbmQgSmV3ZWwuKQoKLSAqQ2VwaEZTKjoKCiAgKiBXaGVuIGNvbmZpZ3VyaW5nIGNlcGgt ZnVzZSBtb3VudHMgaW4gL2V0Yy9mc3RhYiwgYSBuZXcgc3ludGF4IGlzCiAgICBhdmFpbGFibGUg dGhhdCB1c2VzICJjZXBoLjxhcmc+PTx2YWw+IiBpbiB0aGUgb3B0aW9ucyBjb2x1bW4sIGluc3Rl YWQKICAgIG9mIHB1dHRpbmcgY29uZmlndXJhdGlvbiBpbiB0aGUgZGV2aWNlIGNvbHVtbi4gIFRo ZSBvbGQgc3R5bGUgc3ludGF4CiAgICBzdGlsbCB3b3Jrcy4gIFNlZSB0aGUgZG9jdW1lbnRhdGlv biBwYWdlICJNb3VudCBDZXBoRlMgaW4geW91cgogICAgZmlsZSBzeXN0ZW1zIHRhYmxlIiBmb3Ig ZGV0YWlscy4KCiAgKiBDZXBoRlMgY2xpZW50cyB3aXRob3V0IHRoZSAncCcgZmxhZyBpbiB0aGVp ciBhdXRoZW50aWNhdGlvbiBjYXBhYmlsaXR5CiAgICBzdHJpbmcgd2lsbCBubyBsb25nZXIgYmUg YWJsZSB0byBzZXQgcXVvdGFzIG9yIGFueSBsYXlvdXQgZmllbGRzLiAgVGhpcwogICAgZmxhZyBw cmV2aW91c2x5IG9ubHkgcmVzdHJpY3RlZCBtb2RpZmljYXRpb24gb2YgdGhlIHBvb2wgYW5kIG5h bWVzcGFjZQogICAgZmllbGRzIGluIGxheW91dHMuCiAgKiBDZXBoRlMgd2lsbCBnZW5lcmF0ZSBh IGhlYWx0aCB3YXJuaW5nIGlmIHlvdSBoYXZlIGZld2VyIHN0YW5kYnkgZGFlbW9ucwogICAgdGhh biBpdCB0aGlua3MgeW91IHdhbnRlZC4gIEJ5IGRlZmF1bHQgdGhpcyB3aWxsIGJlIDEgaWYgeW91 IGV2ZXIgaGFkCiAgICBhIHN0YW5kYnksIGFuZCAwIGlmIHlvdSBkaWQgbm90LiAgWW91IGNhbiBj dXN0b21pemUgdGhpcyB1c2luZwogICAgYGNlcGggZnMgc2V0IDxmcz4gc3RhbmRieV9jb3VudF93 YW50ZWQgPG51bWJlcj5gLiAgU2V0dGluZyBpdAogICAgdG8gemVybyB3aWxsIGVmZmVjdGl2ZWx5 IGRpc2FibGUgdGhlIGhlYWx0aCBjaGVjay4KICAqIFRoZSAiY2VwaCBtZHMgdGVsbCAuLi4iIGNv bW1hbmQgaGFzIGJlZW4gcmVtb3ZlZC4gIEl0IGlzIHN1cGVyY2VkZWQKICAgIGJ5ICJjZXBoIHRl bGwgbWRzLjxpZD4gLi4uIgoKCk5vdGFibGUgQ2hhbmdlcyBzaW5jZSB2MTIuMS4xIChSQzEpCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoqIGNob29zZV9hcmdzIGVuY29kaW5n IGhhcyBiZWVuIGNoYW5nZWQgdG8gbWFrZSBpdCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQuCiAg SWYgeW91IGRlcGxveWVkIEx1bWlub3VzIGRldiByZWxlYXNlcyBvciAxMi4xLjAgcmMgcmVsZWFz ZSBhbmQgbWFkZSB1c2Ugb2YKICB0aGUgQ1JVU0ggY2hvb3NlX2FyZ3MgZmVhdHVyZSwgeW91IG5l ZWQgdG8gcmVtb3ZlIGFsbCBjaG9vc2VfYXJncyBtYXBwaW5ncwogIGZyb20geW91ciBDUlVTSCBt YXAgYmVmb3JlIHN0YXJ0aW5nIHRoZSB1cGdyYWRlLgoKKiBUaGUgJ2NlcGggaGVhbHRoJyBzdHJ1 Y3R1cmVkIG91dHB1dCAoSlNPTiBvciBYTUwpIG5vIGxvbmdlciBjb250YWlucwogIGEgJ3RpbWVj aGVja3MnIHNlY3Rpb24gZGVzY3JpYmluZyB0aGUgdGltZSBzeW5jIHN0YXR1cy4gIFRoaXMKICBp bmZvcm1hdGlvbiBpcyBub3cgYXZhaWxhYmxlIHZpYSB0aGUgJ2NlcGggdGltZS1zeW5jLXN0YXR1 cycKICBjb21tYW5kLgoKKiBDZXJ0YWluIGV4dHJhIGZpZWxkcyBpbiB0aGUgJ2NlcGggaGVhbHRo JyBzdHJ1Y3R1cmVkIG91dHB1dCB0aGF0CiAgdXNlZCB0byBhcHBlYXIgaWYgdGhlIG1vbnMgd2Vy ZSBsb3cgb24gZGlzayBzcGFjZSAod2hpY2ggZHVwbGljYXRlZAogIHRoZSBpbmZvcm1hdGlvbiBp biB0aGUgbm9ybWFsIGhlYWx0aCB3YXJuaW5nIG1lc3NhZ2VzKSBhcmUgbm93IGdvbmUuCgoqIFRo ZSAiY2VwaCAtdyIgb3V0cHV0IG5vIGxvbmdlciBjb250YWlucyBhdWRpdCBsb2cgZW50cmllcyBi eSBkZWZhdWx0LgogIEFkZCBhICItLXdhdGNoLWNoYW5uZWw9YXVkaXQiIG9yICItLXdhdGNoLWNo YW5uZWw9KiIgdG8gc2VlIHRoZW0uCgoqIFRoZSAnYXBwbHknIG1vZGUgb2YgY2VwaGZzLWpvdXJu YWwtdG9vbCBoYXMgYmVlbiByZW1vdmVkCgoqIEFkZGVkIG5ldyBjb25maWd1cmF0aW9uICJwdWJs aWMgYmluZCBhZGRyIiB0byBzdXBwb3J0IGR5bmFtaWMgZW52aXJvbm1lbnRzCiAgbGlrZSBLdWJl cm5ldGVzLiBXaGVuIHNldCB0aGUgQ2VwaCBNT04gZGFlbW9uIGNvdWxkIGJpbmQgbG9jYWxseSB0 byBhbiBJUAogIGFkZHJlc3MgYW5kIGFkdmVydGlzZSBhIGRpZmZlcmVudCBJUCBhZGRyZXNzICJw dWJsaWMgYWRkciIgb24gdGhlIG5ldHdvcmsuCgoKRm9yIGEgZGV0YWlsZWQgY2hhbmdlbG9nIHJl ZmVyIHRvIHRoZSBibG9nIHBvc3QgZW50cnkgYXQKaHR0cDovL2NlcGguY29tL3JlbGVhc2VzL3Yx Mi0xLTEtbHVtaW5vdXMtcmMtcmVsZWFzZWQvCgpHZXR0aW5nIENlcGgKLS0tLS0tLS0tLS0tCgoq IEdpdCBhdCBnaXQ6Ly9naXRodWIuY29tL2NlcGgvY2VwaC5naXQKKiBUYXJiYWxsIGF0IGh0dHA6 Ly9kb3dubG9hZC5jZXBoLmNvbS90YXJiYWxscy9jZXBoLTEyLjEuMS50YXIuZ3oKKiBGb3IgcGFj a2FnZXMsIHNlZSBodHRwOi8vZG9jcy5jZXBoLmNvbS9kb2NzL21hc3Rlci9pbnN0YWxsL2dldC1w YWNrYWdlcy8KKiBGb3IgY2VwaC1kZXBsb3ksIHNlZSBodHRwOi8vZG9jcy5jZXBoLmNvbS9kb2Nz L21hc3Rlci9pbnN0YWxsL2luc3RhbGwtY2VwaC1kZXBsb3kKKiBSZWxlYXNlIHNoYTE6IGYzZTY2 M2ExOTBiZjJlZDEyYzdlM2NkYTI4OGI5YTE1OTU3MmM4MDAKCi0tIApBYmhpc2hlayBMZWtzaG1h bmFuClNVU0UgTGludXggR21iSCwgR0Y6IEZlbGl4IEltZW5kw7ZyZmZlciwgSmFuZSBTbWl0aGFy ZCwgR3JhaGFtIE5vcnRvbiwKSFJCIDIxMjg0IChBRyBOw7xybmJlcmcpCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmNlcGgtdXNlcnMgbWFpbGluZyBsaXN0 CmNlcGgtdXNlcnNAbGlzdHMuY2VwaC5jb20KaHR0cDovL2xpc3RzLmNlcGguY29tL2xpc3RpbmZv LmNnaS9jZXBoLXVzZXJzLWNlcGguY29tCg==