From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f42.google.com (mail-wm0-f42.google.com [74.125.82.42]) by dpdk.org (Postfix) with ESMTP id D59CB5590 for ; Fri, 18 Mar 2016 16:26:03 +0100 (CET) Received: by mail-wm0-f42.google.com with SMTP id l124so35377051wmf.1 for ; Fri, 18 Mar 2016 08:26:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:references:in-reply-to:mime-version:thread-index:date :message-id:subject:to:cc; bh=MMHamw31oqdFTkHw2oG4cEM1DijyrP+X+u8h9kiObCo=; b=UrT84apO/spseBsOhJZgoeS6jWW2d6GIe+YpQTR4EcobrJgaO+aOjE4uh8K9p9cF1H s6Hig59Y4o2hOjSeVrXBdNcpOUDi3C4eyDUVC+txor0e+rNw8NdKQm2DdqTOcq+2f9u3 TnfQX/58qZgcCP2GR/v4mg7PuJtYmAAjzDvRw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:references:in-reply-to:mime-version :thread-index:date:message-id:subject:to:cc; bh=MMHamw31oqdFTkHw2oG4cEM1DijyrP+X+u8h9kiObCo=; b=EUM8v89s1fTxww4qfF+/dWrx8Wfc5+H2xp4iRJOTCDrUiF/nQLrhql5atXd7UrZbrt SjWtTHX9zDwtE+NX/2om4MdcttTGvTW8SNJkjTkKhoh0VZsep7wH1M3tK42yZjckUMqm UQ4+lL6ODpYAZLs+31K7vzSDhfXjFTy9dh8uGb84h8kpYOAy2BtBYItRpreArVtl0taX LETgCzJoepDKdpU89P6J68lTgOvGPhoeZNQbvu5OsQYfbeimp6IAvOScyV65RQMWGPsj ng7kwfUQHGS/HuU9/7G4MgZY9RDTCdibXItIjO32/krcZwKIBslIdQBAVhdb06+VkoQ3 v1xw== X-Gm-Message-State: AD7BkJJZWvdK+3hvnQlbFZ4z95zMTJQopttNaEtcxca4J6VotD5lLZcF4ChUGNSYnYmQcGFGq0Hx4O70t5p5dSE9 X-Received: by 10.28.7.196 with SMTP id 187mr13542wmh.12.1458314763531; Fri, 18 Mar 2016 08:26:03 -0700 (PDT) From: Murali Krishna References: In-Reply-To: MIME-Version: 1.0 X-Mailer: Microsoft Outlook 14.0 Thread-Index: AQGq7aBDmVBNJPFLOXe+RL8CFh1m1QFkUVy/n6FWs3A= Date: Fri, 18 Mar 2016 20:56:02 +0530 Message-ID: <053ac883dac86a16b8c63962ab0ef6f6@mail.gmail.com> To: Vladimir Medvedkin Cc: users@dpdk.org X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Subject: Re: [dpdk-users] unable to run l2fwd application due to 'Cause: No Ethernet ports - bye' error X-BeenThere: users@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: usage discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Mar 2016 15:26:04 -0000 SGkgVmxhZGltaXIsCgpBdHRhY2hlZCBkcGRrLTIuMC4wL3Rvb2xzL2RwZGtfbmljX2JpbmQucHkg ZmlsZS4gTGV0IG1lIGtub3cgaWYgeW91IGFyZSBub3QKYWJsZSB0byBvcGVuIHRoZSBhdHRhY2ht ZW50LgoKCgpUaGFua3MsCgpNdXJhbGkKCgoKKkZyb206KiBWbGFkaW1pciBNZWR2ZWRraW4gW21h aWx0bzptZWR2ZWRraW52QGdtYWlsLmNvbV0KKlNlbnQ6KiBGcmlkYXksIE1hcmNoIDE4LCAyMDE2 IDg6NTEgUE0KKlRvOiogTXVyYWxpIEtyaXNobmEKKkNjOiogdXNlcnNAZHBkay5vcmcKKlN1Ympl Y3Q6KiBSZTogW2RwZGstdXNlcnNdIHVuYWJsZSB0byBydW4gbDJmd2QgYXBwbGljYXRpb24gZHVl IHRvICdDYXVzZToKTm8gRXRoZXJuZXQgcG9ydHMgLSBieWUnIGVycm9yCgoKCkhpLAoKU2hvdyB0 b29scy9kcGRrX25pY19iaW5kLnB5IC0tc3RhdHVzCgpSZWdhcmRzLAoKVmxhZGltaXIKCgoKMjAx Ni0wMy0xOCAxODoxMSBHTVQrMDM6MDAgTXVyYWxpIEtyaXNobmEgPG11cmFsaS5rcmlzaG5hQGJy b2FkY29tLmNvbT46CgpIaSBBbGwsCgoKCkkgYW0gdW5hYmxlIHRvIHJ1biBsMmZ3ZCBhcHAgb24g bGludXgsIGR1ZSB0byDigJhDYXVzZTogTm8gRXRoZXJuZXQgcG9ydHMgLQpieWUnIGVycm9yCgoK CkkgYW0gdXNpbmcgKkRQREsgMi4wLjAqIHdpdGggKkVtdWxleCBPQ2UxNDEwMiogYWRhcHRlcgoK Cgpbcm9vdEBSaGVsNjdHQS1WYWxlbmNpYSBEUERLMl0jIGxzcGNpIHwgZ3JlcCBFbXVsZXgKCjAx OjAwLjAgRXRoZXJuZXQgY29udHJvbGxlcjogRW11bGV4IENvcnBvcmF0aW9uIE9uZUNvbm5lY3Qg TklDIChTa3loYXdrKQoocmV2IDEwKQoKMDE6MDAuMSBFdGhlcm5ldCBjb250cm9sbGVyOiBFbXVs ZXggQ29ycG9yYXRpb24gT25lQ29ubmVjdCBOSUMgKFNreWhhd2spCihyZXYgMTApCgpUaGUgRW11 bGV4IG9jZSBkcml2ZXIgaXMgbGlzdGVkIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBkcml2ZXJz KApodHRwOi8vZHBkay5vcmcvZG9jL25pY3MgKQoKCgpCZWxvdyBpcyB0aGUgZGV0YWlsZWQgaW5m b3JtYXRpb246CgoKCltyb290QFJoZWw2N0dBLVZhbGVuY2lhIERQREsyXSMgLi9sMmZ3ZCAtYyBm IC1uIDQgLS0gLXEgOCAtcCBmZmZmCgpFQUw6IERldGVjdGVkIGxjb3JlIDAgYXMgY29yZSAwIG9u IHNvY2tldCAwCgpFQUw6IERldGVjdGVkIGxjb3JlIDEgYXMgY29yZSAwIG9uIHNvY2tldCAxCgpF QUw6IERldGVjdGVkIGxjb3JlIDIgYXMgY29yZSAxIG9uIHNvY2tldCAwCgpFQUw6IERldGVjdGVk IGxjb3JlIDMgYXMgY29yZSAxIG9uIHNvY2tldCAxCgpFQUw6IERldGVjdGVkIGxjb3JlIDQgYXMg Y29yZSAyIG9uIHNvY2tldCAwCgpFQUw6IERldGVjdGVkIGxjb3JlIDUgYXMgY29yZSAyIG9uIHNv Y2tldCAxCgpFQUw6IERldGVjdGVkIGxjb3JlIDYgYXMgY29yZSAzIG9uIHNvY2tldCAwCgpFQUw6 IERldGVjdGVkIGxjb3JlIDcgYXMgY29yZSAzIG9uIHNvY2tldCAxCgpFQUw6IERldGVjdGVkIGxj b3JlIDggYXMgY29yZSA0IG9uIHNvY2tldCAwCgpFQUw6IERldGVjdGVkIGxjb3JlIDkgYXMgY29y ZSA0IG9uIHNvY2tldCAxCgpFQUw6IERldGVjdGVkIGxjb3JlIDEwIGFzIGNvcmUgNSBvbiBzb2Nr ZXQgMAoKRUFMOiBEZXRlY3RlZCBsY29yZSAxMSBhcyBjb3JlIDUgb24gc29ja2V0IDEKCkVBTDog RGV0ZWN0ZWQgbGNvcmUgMTIgYXMgY29yZSA2IG9uIHNvY2tldCAwCgpFQUw6IERldGVjdGVkIGxj b3JlIDEzIGFzIGNvcmUgNiBvbiBzb2NrZXQgMQoKRUFMOiBEZXRlY3RlZCBsY29yZSAxNCBhcyBj b3JlIDcgb24gc29ja2V0IDAKCkVBTDogRGV0ZWN0ZWQgbGNvcmUgMTUgYXMgY29yZSA3IG9uIHNv Y2tldCAxCgpFQUw6IERldGVjdGVkIGxjb3JlIDE2IGFzIGNvcmUgMCBvbiBzb2NrZXQgMAoKRUFM OiBEZXRlY3RlZCBsY29yZSAxNyBhcyBjb3JlIDAgb24gc29ja2V0IDEKCkVBTDogRGV0ZWN0ZWQg bGNvcmUgMTggYXMgY29yZSAxIG9uIHNvY2tldCAwCgpFQUw6IERldGVjdGVkIGxjb3JlIDE5IGFz IGNvcmUgMSBvbiBzb2NrZXQgMQoKRUFMOiBEZXRlY3RlZCBsY29yZSAyMCBhcyBjb3JlIDIgb24g c29ja2V0IDAKCkVBTDogRGV0ZWN0ZWQgbGNvcmUgMjEgYXMgY29yZSAyIG9uIHNvY2tldCAxCgpF QUw6IERldGVjdGVkIGxjb3JlIDIyIGFzIGNvcmUgMyBvbiBzb2NrZXQgMAoKRUFMOiBEZXRlY3Rl ZCBsY29yZSAyMyBhcyBjb3JlIDMgb24gc29ja2V0IDEKCkVBTDogRGV0ZWN0ZWQgbGNvcmUgMjQg YXMgY29yZSA0IG9uIHNvY2tldCAwCgpFQUw6IERldGVjdGVkIGxjb3JlIDI1IGFzIGNvcmUgNCBv biBzb2NrZXQgMQoKRUFMOiBEZXRlY3RlZCBsY29yZSAyNiBhcyBjb3JlIDUgb24gc29ja2V0IDAK CkVBTDogRGV0ZWN0ZWQgbGNvcmUgMjcgYXMgY29yZSA1IG9uIHNvY2tldCAxCgpFQUw6IERldGVj dGVkIGxjb3JlIDI4IGFzIGNvcmUgNiBvbiBzb2NrZXQgMAoKRUFMOiBEZXRlY3RlZCBsY29yZSAy OSBhcyBjb3JlIDYgb24gc29ja2V0IDEKCkVBTDogRGV0ZWN0ZWQgbGNvcmUgMzAgYXMgY29yZSA3 IG9uIHNvY2tldCAwCgpFQUw6IERldGVjdGVkIGxjb3JlIDMxIGFzIGNvcmUgNyBvbiBzb2NrZXQg MQoKRUFMOiBTdXBwb3J0IG1heGltdW0gMTI4IGxvZ2ljYWwgY29yZShzKSBieSBjb25maWd1cmF0 aW9uLgoKRUFMOiBEZXRlY3RlZCAzMiBsY29yZShzKQoKRUFMOiBTZXR0aW5nIHVwIG1lbW9yeS4u LgoKRUFMOiBBc2sgYSB2aXJ0dWFsIGFyZWEgb2YgMHg0MDAwMDAwMCBieXRlcwoKRUFMOiBWaXJ0 dWFsIGFyZWEgZm91bmQgYXQgMHg3ZmYzY2I2MDAwMDAgKHNpemUgPSAweDQwMDAwMDAwKQoKRUFM OiBBc2sgYSB2aXJ0dWFsIGFyZWEgb2YgMHg0MDAwMDAwMCBieXRlcwoKRUFMOiBWaXJ0dWFsIGFy ZWEgZm91bmQgYXQgMHg3ZmYzOGI0MDAwMDAgKHNpemUgPSAweDQwMDAwMDAwKQoKRUFMOiBSZXF1 ZXN0aW5nIDUxMiBwYWdlcyBvZiBzaXplIDJNQiBmcm9tIHNvY2tldCAwCgpFQUw6IFJlcXVlc3Rp bmcgNTEyIHBhZ2VzIG9mIHNpemUgMk1CIGZyb20gc29ja2V0IDEKCkVBTDogVFNDIGZyZXF1ZW5j eSBpcyB+MjM5OTk5OCBLSHoKCkVBTDogTWFzdGVyIGxjb3JlIDAgaXMgcmVhZHkgKHRpZD1iYjM5 ODgwO2NwdXNldD1bMF0pCgpQTUQ6IEVOSUNQTUQgdHJhY2U6IHJ0ZV9lbmljX3BtZF9pbml0CgpF QUw6IGxjb3JlIDEgaXMgcmVhZHkgKHRpZD04YTVmMDcwMDtjcHVzZXQ9WzFdKQoKRUFMOiBsY29y ZSAyIGlzIHJlYWR5ICh0aWQ9ODliZWY3MDA7Y3B1c2V0PVsyXSkKCkVBTDogbGNvcmUgMyBpcyBy ZWFkeSAodGlkPTg5MWVlNzAwO2NwdXNldD1bM10pCgpFQUw6IEVycm9yIC0gZXhpdGluZyB3aXRo IGNvZGU6IDEKCiAgQ2F1c2U6IE5vIEV0aGVybmV0IHBvcnRzIOKAkyBieWUKCgoKUGxlYXNlIGxl dCBtZSBrbm93IGhvdyB0byBwcm9jZWVkIG9uIHRoaXMuCgoKClRoYW5rcywKCk11cmFsaQoKCgoK LS0gCgpSZWdhcmRzLAoKVmxhZGltaXIKLS0tLS0tLS0tLS0tLS0gbmV4dCBwYXJ0IC0tLS0tLS0t LS0tLS0tCiMhIC91c3IvYmluL3B5dGhvbgojCiMgICBCU0QgTElDRU5TRQojCiMgICBDb3B5cmln aHQoYykgMjAxMC0yMDE0IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgoj ICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIwojICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiMgICBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIyAg IGFyZSBtZXQ6CiMKIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAojICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIyAgICAgKiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAoj ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgojICAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKIyAgICAgICBkaXN0cmlidXRpb24uCiMgICAgICogTmVp dGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwoj ICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZAojICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIwojICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwojICAgIkFTIElTIiBB TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK IyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUgojICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIyAgIE9XTkVSIE9SIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAojICAgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVAojICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsCiMgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIyAgIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIyAg IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRQojICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIwoKaW1wb3J0IHN5cywgb3MsIGdldG9wdCwg c3VicHJvY2Vzcwpmcm9tIG9zLnBhdGggaW1wb3J0IGV4aXN0cywgYWJzcGF0aCwgZGlybmFtZSwg YmFzZW5hbWUKCgojIFRoZSBQQ0kgZGV2aWNlIGNsYXNzIGZvciBFVEhFUk5FVCBkZXZpY2VzCkVU SEVSTkVUX0NMQVNTID0gIjAyMDAiCgojIGdsb2JhbCBkaWN0IGV0aGVybmV0IGRldmljZXMgcHJl c2VudC4gRGljdGlvbmFyeSBpbmRleGVkIGJ5IFBDSSBhZGRyZXNzLgojIEVhY2ggZGV2aWNlIHdp dGhpbiB0aGlzIGlzIGl0c2VsZiBhIGRpY3Rpb25hcnkgb2YgZGV2aWNlIHByb3BlcnRpZXMKZGV2 aWNlcyA9IHt9CiMgbGlzdCBvZiBzdXBwb3J0ZWQgRFBESyBkcml2ZXJzCmRwZGtfZHJpdmVycyA9 IFsgImlnYl91aW8iLCAidmZpby1wY2kiLCAidWlvX3BjaV9nZW5lcmljIiBdCgojIGNvbW1hbmQt bGluZSBhcmcgZmxhZ3MKYl9mbGFnID0gTm9uZQpzdGF0dXNfZmxhZyA9IEZhbHNlCmZvcmNlX2Zs YWcgPSBGYWxzZQphcmdzID0gW10KCmRlZiB1c2FnZSgpOgogICAgJycnUHJpbnQgdXNhZ2UgaW5m b3JtYXRpb24gZm9yIHRoZSBwcm9ncmFtJycnCiAgICBhcmd2MCA9IGJhc2VuYW1lKHN5cy5hcmd2 WzBdKQogICAgcHJpbnQgIiIiClVzYWdlOgotLS0tLS0KCiAgICAgJShhcmd2MClzIFtvcHRpb25z XSBERVZJQ0UxIERFVklDRTIgLi4uLgoKd2hlcmUgREVWSUNFMSwgREVWSUNFMiBldGMsIGFyZSBz cGVjaWZpZWQgdmlhIFBDSSAiZG9tYWluOmJ1czpzbG90LmZ1bmMiIHN5bnRheApvciAiYnVzOnNs b3QuZnVuYyIgc3ludGF4LiBGb3IgZGV2aWNlcyBib3VuZCB0byBMaW51eCBrZXJuZWwgZHJpdmVy cywgdGhleSBtYXkKYWxzbyBiZSByZWZlcnJlZCB0byBieSBMaW51eCBpbnRlcmZhY2UgbmFtZSBl LmcuIGV0aDAsIGV0aDEsIGVtMCwgZW0xLCBldGMuCgpPcHRpb25zOgogICAgLS1oZWxwLCAtLXVz YWdlOgogICAgICAgIERpc3BsYXkgdXNhZ2UgaW5mb3JtYXRpb24gYW5kIHF1aXQKCiAgICAtLXN0 YXR1czoKICAgICAgICBQcmludCB0aGUgY3VycmVudCBzdGF0dXMgb2YgYWxsIGtub3duIG5ldHdv cmsgaW50ZXJmYWNlcy4KICAgICAgICBGb3IgZWFjaCBkZXZpY2UsIGl0IGRpc3BsYXlzIHRoZSBQ Q0kgZG9tYWluLCBidXMsIHNsb3QgYW5kIGZ1bmN0aW9uLAogICAgICAgIGFsb25nIHdpdGggYSB0 ZXh0IGRlc2NyaXB0aW9uIG9mIHRoZSBkZXZpY2UuIERlcGVuZGluZyB1cG9uIHdoZXRoZXIgdGhl CiAgICAgICAgZGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYSBrZXJuZWwgZHJpdmVyLCB0aGUgaWdi X3VpbyBkcml2ZXIsIG9yIG5vCiAgICAgICAgZHJpdmVyLCBvdGhlciByZWxldmFudCBpbmZvcm1h dGlvbiB3aWxsIGJlIGRpc3BsYXllZDoKICAgICAgICAqIHRoZSBMaW51eCBpbnRlcmZhY2UgbmFt ZSBlLmcuIGlmPWV0aDAKICAgICAgICAqIHRoZSBkcml2ZXIgYmVpbmcgdXNlZCBlLmcuIGRydj1p Z2JfdWlvCiAgICAgICAgKiBhbnkgc3VpdGFibGUgZHJpdmVycyBub3QgY3VycmVudGx5IHVzaW5n IHRoYXQgZGV2aWNlCiAgICAgICAgICAgIGUuZy4gdW51c2VkPWlnYl91aW8KICAgICAgICBOT1RF OiBpZiB0aGlzIGZsYWcgaXMgcGFzc2VkIGFsb25nIHdpdGggYSBiaW5kL3VuYmluZCBvcHRpb24s IHRoZSBzdGF0dXMKICAgICAgICBkaXNwbGF5IHdpbGwgYWx3YXlzIG9jY3VyIGFmdGVyIHRoZSBv dGhlciBvcGVyYXRpb25zIGhhdmUgdGFrZW4gcGxhY2UuCgogICAgLWIgZHJpdmVyLCAtLWJpbmQ9 ZHJpdmVyOgogICAgICAgIFNlbGVjdCB0aGUgZHJpdmVyIHRvIHVzZSBvciBcIm5vbmVcIiB0byB1 bmJpbmQgdGhlIGRldmljZQoKICAgIC11LCAtLXVuYmluZDoKICAgICAgICBVbmJpbmQgYSBkZXZp Y2UgKEVxdWl2YWxlbnQgdG8gXCItYiBub25lXCIpCgogICAgLS1mb3JjZToKICAgICAgICBCeSBk ZWZhdWx0LCBkZXZpY2VzIHdoaWNoIGFyZSB1c2VkIGJ5IExpbnV4IC0gYXMgaW5kaWNhdGVkIGJ5 IGhhdmluZwogICAgICAgIHJvdXRlcyBpbiB0aGUgcm91dGluZyB0YWJsZSAtIGNhbm5vdCBiZSBt b2RpZmllZC4gVXNpbmcgdGhlIC0tZm9yY2UKICAgICAgICBmbGFnIG92ZXJyaWRlcyB0aGlzIGJl aGF2aW9yLCBhbGxvd2luZyBhY3RpdmUgbGlua3MgdG8gYmUgZm9yY2libHkKICAgICAgICB1bmJv dW5kLgogICAgICAgIFdBUk5JTkc6IFRoaXMgY2FuIGxlYWQgdG8gbG9zcyBvZiBuZXR3b3JrIGNv bm5lY3Rpb24gYW5kIHNob3VsZCBiZSB1c2VkCiAgICAgICAgd2l0aCBjYXV0aW9uLgoKRXhhbXBs ZXM6Ci0tLS0tLS0tLQoKVG8gZGlzcGxheSBjdXJyZW50IGRldmljZSBzdGF0dXM6CiAgICAgICAg JShhcmd2MClzIC0tc3RhdHVzCgpUbyBiaW5kIGV0aDEgZnJvbSB0aGUgY3VycmVudCBkcml2ZXIg YW5kIG1vdmUgdG8gdXNlIGlnYl91aW8KICAgICAgICAlKGFyZ3YwKXMgLS1iaW5kPWlnYl91aW8g ZXRoMQoKVG8gdW5iaW5kIDAwMDA6MDE6MDAuMCBmcm9tIHVzaW5nIGFueSBkcml2ZXIKICAgICAg ICAlKGFyZ3YwKXMgLXUgMDAwMDowMTowMC4wCgpUbyBiaW5kIDAwMDA6MDI6MDAuMCBhbmQgMDAw MDowMjowMC4xIHRvIHRoZSBpeGdiZSBrZXJuZWwgZHJpdmVyCiAgICAgICAgJShhcmd2MClzIC1i IGl4Z2JlIDAyOjAwLjAgMDI6MDAuMQoKICAgICIiIiAlIGxvY2FscygpICMgcmVwbGFjZSBpdGVt cyBmcm9tIGxvY2FsIHZhcmlhYmxlcwoKIyBUaGlzIGlzIHJvdWdobHkgY29tcGF0aWJsZSB3aXRo IGNoZWNrX291dHB1dCBmdW5jdGlvbiBpbiBzdWJwcm9jZXNzIG1vZHVsZQojIHdoaWNoIGlzIG9u bHkgYXZhaWxhYmxlIGluIHB5dGhvbiAyLjcuCmRlZiBjaGVja19vdXRwdXQoYXJncywgc3RkZXJy PU5vbmUpOgogICAgJycnUnVuIGEgY29tbWFuZCBhbmQgY2FwdHVyZSBpdHMgb3V0cHV0JycnCiAg ICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVycikuY29tbXVuaWNhdGUoKVsw XQoKZGVmIGZpbmRfbW9kdWxlKG1vZCk6CiAgICAnJydmaW5kIHRoZSAua28gZmlsZSBmb3Iga2Vy bmVsIG1vZHVsZSBuYW1lZCBtb2QuCiAgICBTZWFyY2hlcyB0aGUgJFJURV9TREsvJFJURV9UQVJH RVQgZGlyZWN0b3J5LCB0aGUga2VybmVsCiAgICBtb2R1bGVzIGRpcmVjdG9yeSBhbmQgZmluYWxs eSB1bmRlciB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZgogICAgdGhlIHNjcmlwdCAnJycKICAgICMg Y2hlY2sgJFJURV9TREsvJFJURV9UQVJHRVQgZGlyZWN0b3J5CiAgICBpZiAnUlRFX1NESycgaW4g b3MuZW52aXJvbiBhbmQgJ1JURV9UQVJHRVQnIGluIG9zLmVudmlyb246CiAgICAgICAgcGF0aCA9 ICIlcy8lcy9rbW9kLyVzLmtvIiAlIChvcy5lbnZpcm9uWydSVEVfU0RLJ10sXAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnUlRFX1RBUkdFVCddLCBtb2Qp CiAgICAgICAgaWYgZXhpc3RzKHBhdGgpOgogICAgICAgICAgICByZXR1cm4gcGF0aAoKICAgICMg Y2hlY2sgdXNpbmcgZGVwbW9kCiAgICB0cnk6CiAgICAgICAgZGVwbW9kX291dCA9IGNoZWNrX291 dHB1dChbIm1vZGluZm8iLCAiLW4iLCBtb2RdLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLmxvd2VyKCkKICAgICAgICBpZiAiZXJy b3IiIG5vdCBpbiBkZXBtb2Rfb3V0OgogICAgICAgICAgICBwYXRoID0gZGVwbW9kX291dC5zdHJp cCgpCiAgICAgICAgICAgIGlmIGV4aXN0cyhwYXRoKToKICAgICAgICAgICAgICAgIHJldHVybiBw YXRoCiAgICBleGNlcHQ6ICMgaWYgbW9kaW5mbyBjYW4ndCBmaW5kIG1vZHVsZSwgaXQgZmFpbHMs IHNvIGNvbnRpbnVlCiAgICAgICAgcGFzcwoKICAgICMgY2hlY2sgZm9yIGEgY29weSBiYXNlZCBv ZmYgY3VycmVudCBwYXRoCiAgICB0b29sc19kaXIgPSBkaXJuYW1lKGFic3BhdGgoc3lzLmFyZ3Zb MF0pKQogICAgaWYgKHRvb2xzX2Rpci5lbmRzd2l0aCgidG9vbHMiKSk6CiAgICAgICAgYmFzZV9k aXIgPSBkaXJuYW1lKHRvb2xzX2RpcikKICAgICAgICBmaW5kX291dCA9IGNoZWNrX291dHB1dChb ImZpbmQiLCBiYXNlX2RpciwgIi1uYW1lIiwgbW9kICsgIi5rbyJdKQogICAgICAgIGlmIGxlbihm aW5kX291dCkgPiAwOiAjc29tZXRoaW5nIG1hdGNoZWQKICAgICAgICAgICAgcGF0aCA9IGZpbmRf b3V0LnNwbGl0bGluZXMoKVswXQogICAgICAgICAgICBpZiBleGlzdHMocGF0aCk6CiAgICAgICAg ICAgICAgICByZXR1cm4gcGF0aAoKZGVmIGNoZWNrX21vZHVsZXMoKToKICAgICcnJ0NoZWNrcyB0 aGF0IGlnYl91aW8gaXMgbG9hZGVkJycnCiAgICBnbG9iYWwgZHBka19kcml2ZXJzCgogICAgZmQg PSBmaWxlKCIvcHJvYy9tb2R1bGVzIikKICAgIGxvYWRlZF9tb2RzID0gZmQucmVhZGxpbmVzKCkK ICAgIGZkLmNsb3NlKCkKCiAgICAjIGxpc3Qgb2Ygc3VwcG9ydGVkIG1vZHVsZXMKICAgIG1vZHMg PSAgW3siTmFtZSIgOiBkcml2ZXIsICJGb3VuZCIgOiBGYWxzZX0gZm9yIGRyaXZlciBpbiBkcGRr X2RyaXZlcnNdCgogICAgIyBmaXJzdCBjaGVjayBpZiBtb2R1bGUgaXMgbG9hZGVkCiAgICBmb3Ig bGluZSBpbiBsb2FkZWRfbW9kczoKICAgICAgICBmb3IgbW9kIGluIG1vZHM6CiAgICAgICAgICAg IGlmIGxpbmUuc3RhcnRzd2l0aChtb2RbIk5hbWUiXSk6CiAgICAgICAgICAgICAgICBtb2RbIkZv dW5kIl0gPSBUcnVlCiAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciB2ZmlvX3BjaSAobW9k dWxlIGlzIG5hbWVkIHZmaW8tcGNpLAogICAgICAgICAgICAjIGJ1dCBpdHMgLmtvIGlzIG5hbWVk IHZmaW9fcGNpKQogICAgICAgICAgICBlbGlmIGxpbmUucmVwbGFjZSgiXyIsICItIikuc3RhcnRz d2l0aChtb2RbIk5hbWUiXSk6CiAgICAgICAgICAgICAgICBtb2RbIkZvdW5kIl0gPSBUcnVlCgog ICAgIyBjaGVjayBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBsb2FkZWQgbW9kdWxlCiAgICBpZiBU cnVlIG5vdCBpbiBbbW9kWyJGb3VuZCJdIGZvciBtb2QgaW4gbW9kc10gYW5kIGJfZmxhZyBpcyBu b3QgTm9uZToKICAgICAgICBpZiBiX2ZsYWcgaW4gZHBka19kcml2ZXJzOgogICAgICAgICAgICBw cmludCAiRXJyb3IgLSBubyBzdXBwb3J0ZWQgbW9kdWxlcyhEUERLIGRyaXZlcikgYXJlIGxvYWRl ZCIKICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmlu dCAiV2FybmluZyAtIG5vIHN1cHBvcnRlZCBtb2R1bGVzKERQREsgZHJpdmVyKSBhcmUgbG9hZGVk IgoKICAgICMgY2hhbmdlIERQREsgZHJpdmVyIGxpc3QgdG8gb25seSBjb250YWluIGRyaXZlcnMg dGhhdCBhcmUgbG9hZGVkCiAgICBkcGRrX2RyaXZlcnMgPSBbbW9kWyJOYW1lIl0gZm9yIG1vZCBp biBtb2RzIGlmIG1vZFsiRm91bmQiXV0KCmRlZiBoYXNfZHJpdmVyKGRldl9pZCk6CiAgICAnJydy ZXR1cm4gdHJ1ZSBpZiBhIGRldmljZSBpcyBhc3NpZ25lZCB0byBhIGRyaXZlci4gRmFsc2Ugb3Ro ZXJ3aXNlJycnCiAgICByZXR1cm4gIkRyaXZlcl9zdHIiIGluIGRldmljZXNbZGV2X2lkXQoKZGVm IGdldF9wY2lfZGV2aWNlX2RldGFpbHMoZGV2X2lkKToKICAgICcnJ1RoaXMgZnVuY3Rpb24gZ2V0 cyBhZGRpdGlvbmFsIGRldGFpbHMgZm9yIGEgUENJIGRldmljZScnJwogICAgZGV2aWNlID0ge30K CiAgICBleHRyYV9pbmZvID0gY2hlY2tfb3V0cHV0KFsibHNwY2kiLCAiLXZtbWtzIiwgZGV2X2lk XSkuc3BsaXRsaW5lcygpCgogICAgIyBwYXJzZSBsc3BjaSBkZXRhaWxzCiAgICBmb3IgbGluZSBp biBleHRyYV9pbmZvOgogICAgICAgIGlmIGxlbihsaW5lKSA9PSAwOgogICAgICAgICAgICBjb250 aW51ZQogICAgICAgIG5hbWUsIHZhbHVlID0gbGluZS5zcGxpdCgiXHQiLCAxKQogICAgICAgIG5h bWUgPSBuYW1lLnN0cmlwKCI6IikgKyAiX3N0ciIKICAgICAgICBkZXZpY2VbbmFtZV0gPSB2YWx1 ZQogICAgIyBjaGVjayBmb3IgYSB1bml4IGludGVyZmFjZSBuYW1lCiAgICBzeXNfcGF0aCA9ICIv c3lzL2J1cy9wY2kvZGV2aWNlcy8lcy9uZXQvIiAlIGRldl9pZAogICAgaWYgZXhpc3RzKHN5c19w YXRoKToKICAgICAgICBkZXZpY2VbIkludGVyZmFjZSJdID0gIiwiLmpvaW4ob3MubGlzdGRpcihz eXNfcGF0aCkpCiAgICBlbHNlOgogICAgICAgIGRldmljZVsiSW50ZXJmYWNlIl0gPSAiIgogICAg IyBjaGVjayBpZiBhIHBvcnQgaXMgdXNlZCBmb3Igc3NoIGNvbm5lY3Rpb24KICAgIGRldmljZVsi U3NoX2lmIl0gPSBGYWxzZQogICAgZGV2aWNlWyJBY3RpdmUiXSA9ICIiCgogICAgcmV0dXJuIGRl dmljZQoKZGVmIGdldF9uaWNfZGV0YWlscygpOgogICAgJycnVGhpcyBmdW5jdGlvbiBwb3B1bGF0 ZXMgdGhlICJkZXZpY2VzIiBkaWN0aW9uYXJ5LiBUaGUga2V5cyB1c2VkIGFyZQogICAgdGhlIHBj aSBhZGRyZXNzZXMgKGRvbWFpbjpidXM6c2xvdC5mdW5jKS4gVGhlIHZhbHVlcyBhcmUgdGhlbXNl bHZlcwogICAgZGljdGlvbmFyaWVzIC0gb25lIGZvciBlYWNoIE5JQy4nJycKICAgIGdsb2JhbCBk ZXZpY2VzCiAgICBnbG9iYWwgZHBka19kcml2ZXJzCgogICAgIyBjbGVhciBhbnkgb2xkIGRhdGEK ICAgIGRldmljZXMgPSB7fQogICAgIyBmaXJzdCBsb29wIHRocm91Z2ggYW5kIHJlYWQgZGV0YWls cyBmb3IgYWxsIGRldmljZXMKICAgICMgcmVxdWVzdCBtYWNoaW5lIHJlYWRhYmxlIGZvcm1hdCwg d2l0aCBudW1lcmljIElEcwogICAgZGV2ID0ge307CiAgICBkZXZfbGluZXMgPSBjaGVja19vdXRw dXQoWyJsc3BjaSIsICItRHZtbW4iXSkuc3BsaXRsaW5lcygpCiAgICBmb3IgZGV2X2xpbmUgaW4g ZGV2X2xpbmVzOgogICAgICAgIGlmIChsZW4oZGV2X2xpbmUpID09IDApOgogICAgICAgICAgICBp ZiBkZXZbIkNsYXNzIl0gPT0gRVRIRVJORVRfQ0xBU1M6CiAgICAgICAgICAgICAgICAjY29udmVy dCBkZXZpY2UgYW5kIHZlbmRvciBpZHMgdG8gbnVtYmVycywgdGhlbiBhZGQgdG8gZ2xvYmFsCiAg ICAgICAgICAgICAgICBkZXZbIlZlbmRvciJdID0gaW50KGRldlsiVmVuZG9yIl0sMTYpCiAgICAg ICAgICAgICAgICBkZXZbIkRldmljZSJdID0gaW50KGRldlsiRGV2aWNlIl0sMTYpCiAgICAgICAg ICAgICAgICBkZXZpY2VzW2RldlsiU2xvdCJdXSA9IGRpY3QoZGV2KSAjIHVzZSBkaWN0IHRvIG1h a2UgY29weSBvZiBkZXYKICAgICAgICBlbHNlOgogICAgICAgICAgICBuYW1lLCB2YWx1ZSA9IGRl dl9saW5lLnNwbGl0KCJcdCIsIDEpCiAgICAgICAgICAgIGRldltuYW1lLnJzdHJpcCgiOiIpXSA9 IHZhbHVlCgogICAgIyBjaGVjayB3aGF0IGlzIHRoZSBpbnRlcmZhY2UgaWYgYW55IGZvciBhbiBz c2ggY29ubmVjdGlvbiBpZgogICAgIyBhbnkgdG8gdGhpcyBob3N0LCBzbyB3ZSBjYW4gbWFyayBp dCBsYXRlci4KICAgIHNzaF9pZiA9IFtdCiAgICByb3V0ZSA9IGNoZWNrX291dHB1dChbImlwIiwg Ii1vIiwgInJvdXRlIl0pCiAgICAjIGZpbHRlciBvdXQgYWxsIGxpbmVzIGZvciAxNjkuMjU0IHJv dXRlcwogICAgcm91dGUgPSAiXG4iLmpvaW4oZmlsdGVyKGxhbWJkYSBsbjogbm90IGxuLnN0YXJ0 c3dpdGgoIjE2OS4yNTQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZS5zcGxp dGxpbmVzKCkpKQogICAgcnRfaW5mbyA9IHJvdXRlLnNwbGl0KCkKICAgIGZvciBpIGluIHhyYW5n ZShsZW4ocnRfaW5mbykgLSAxKToKICAgICAgICBpZiBydF9pbmZvW2ldID09ICJkZXYiOgogICAg ICAgICAgICBzc2hfaWYuYXBwZW5kKHJ0X2luZm9baSsxXSkKCiAgICAjIGJhc2VkIG9uIHRoZSBi YXNpYyBpbmZvLCBnZXQgZXh0ZW5kZWQgdGV4dCBkZXRhaWxzCiAgICBmb3IgZCBpbiBkZXZpY2Vz LmtleXMoKToKICAgICAgICAjIGdldCBhZGRpdGlvbmFsIGluZm8gYW5kIGFkZCBpdCB0byBleGlz dGluZyBkYXRhCiAgICAgICAgZGV2aWNlc1tkXSA9IGRpY3QoZGV2aWNlc1tkXS5pdGVtcygpICsK ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcGNpX2RldmljZV9kZXRhaWxzKGQpLml0ZW1z KCkpCgogICAgICAgIGZvciBfaWYgaW4gc3NoX2lmOgogICAgICAgICAgICBpZiBfaWYgaW4gZGV2 aWNlc1tkXVsiSW50ZXJmYWNlIl0uc3BsaXQoIiwiKToKICAgICAgICAgICAgICAgIGRldmljZXNb ZF1bIlNzaF9pZiJdID0gVHJ1ZQogICAgICAgICAgICAgICAgZGV2aWNlc1tkXVsiQWN0aXZlIl0g PSAiKkFjdGl2ZSoiCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgIyBhZGQgaWdiX3Vp byB0byBsaXN0IG9mIHN1cHBvcnRpbmcgbW9kdWxlcyBpZiBuZWVkZWQKICAgICAgICBpZiAiTW9k dWxlX3N0ciIgaW4gZGV2aWNlc1tkXToKICAgICAgICAgICAgZm9yIGRyaXZlciBpbiBkcGRrX2Ry aXZlcnM6CiAgICAgICAgICAgICAgICBpZiBkcml2ZXIgbm90IGluIGRldmljZXNbZF1bIk1vZHVs ZV9zdHIiXToKICAgICAgICAgICAgICAgICAgICBkZXZpY2VzW2RdWyJNb2R1bGVfc3RyIl0gPSBk ZXZpY2VzW2RdWyJNb2R1bGVfc3RyIl0gKyAiLCVzIiAlIGRyaXZlcgogICAgICAgIGVsc2U6CiAg ICAgICAgICAgIGRldmljZXNbZF1bIk1vZHVsZV9zdHIiXSA9ICIsIi5qb2luKGRwZGtfZHJpdmVy cykKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGRyaXZlciBhbmQgbW9kdWxlIHN0cmluZ3MgZG8g bm90IGhhdmUgYW55IGR1cGxpY2F0ZXMKICAgICAgICBpZiBoYXNfZHJpdmVyKGQpOgogICAgICAg ICAgICBtb2R1bGVzID0gZGV2aWNlc1tkXVsiTW9kdWxlX3N0ciJdLnNwbGl0KCIsIikKICAgICAg ICAgICAgaWYgZGV2aWNlc1tkXVsiRHJpdmVyX3N0ciJdIGluIG1vZHVsZXM6CiAgICAgICAgICAg ICAgICBtb2R1bGVzLnJlbW92ZShkZXZpY2VzW2RdWyJEcml2ZXJfc3RyIl0pCiAgICAgICAgICAg ICAgICBkZXZpY2VzW2RdWyJNb2R1bGVfc3RyIl0gPSAiLCIuam9pbihtb2R1bGVzKQoKZGVmIGRl dl9pZF9mcm9tX2Rldl9uYW1lKGRldl9uYW1lKToKICAgICcnJ1Rha2UgYSBkZXZpY2UgIm5hbWUi IC0gYSBzdHJpbmcgcGFzc2VkIGluIGJ5IHVzZXIgdG8gaWRlbnRpZnkgYSBOSUMKICAgIGRldmlj ZSwgYW5kIGRldGVybWluZSB0aGUgZGV2aWNlIGlkIC0gaS5lLiB0aGUgZG9tYWluOmJ1czpzbG90 LmZ1bmMgLSBmb3IKICAgIGl0LCB3aGljaCBjYW4gdGhlbiBiZSB1c2VkIHRvIGluZGV4IGludG8g dGhlIGRldmljZXMgYXJyYXknJycKICAgIGRldiA9IE5vbmUKICAgICMgY2hlY2sgaWYgaXQncyBh bHJlYWR5IGEgc3VpdGFibGUgaW5kZXgKICAgIGlmIGRldl9uYW1lIGluIGRldmljZXM6CiAgICAg ICAgcmV0dXJuIGRldl9uYW1lCiAgICAjIGNoZWNrIGlmIGl0J3MgYW4gaW5kZXgganVzdCBtaXNz aW5nIHRoZSBkb21haW4gcGFydAogICAgZWxpZiAiMDAwMDoiICsgZGV2X25hbWUgaW4gZGV2aWNl czoKICAgICAgICByZXR1cm4gIjAwMDA6IiArIGRldl9uYW1lCiAgICBlbHNlOgogICAgICAgICMg Y2hlY2sgaWYgaXQncyBhbiBpbnRlcmZhY2UgbmFtZSwgZS5nLiBldGgxCiAgICAgICAgZm9yIGQg aW4gZGV2aWNlcy5rZXlzKCk6CiAgICAgICAgICAgIGlmIGRldl9uYW1lIGluIGRldmljZXNbZF1b IkludGVyZmFjZSJdLnNwbGl0KCIsIik6CiAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlc1tk XVsiU2xvdCJdCiAgICAjIGlmIG5vdGhpbmcgZWxzZSBtYXRjaGVzIC0gZXJyb3IKICAgIHByaW50 ICJVbmtub3duIGRldmljZTogJXMuICIgXAogICAgICAgICJQbGVhc2Ugc3BlY2lmeSBkZXZpY2Ug aW4gXCJidXM6c2xvdC5mdW5jXCIgZm9ybWF0IiAlIGRldl9uYW1lCiAgICBzeXMuZXhpdCgxKQoK ZGVmIHVuYmluZF9vbmUoZGV2X2lkLCBmb3JjZSk6CiAgICAnJydVbmJpbmQgdGhlIGRldmljZSBp ZGVudGlmaWVkIGJ5ICJkZXZfaWQiIGZyb20gaXRzIGN1cnJlbnQgZHJpdmVyJycnCiAgICBkZXYg PSBkZXZpY2VzW2Rldl9pZF0KICAgIGlmIG5vdCBoYXNfZHJpdmVyKGRldl9pZCk6CiAgICAgICAg cHJpbnQgIiVzICVzICVzIGlzIG5vdCBjdXJyZW50bHkgbWFuYWdlZCBieSBhbnkgZHJpdmVyXG4i ICUgXAogICAgICAgICAgICAoZGV2WyJTbG90Il0sIGRldlsiRGV2aWNlX3N0ciJdLCBkZXZbIklu dGVyZmFjZSJdKQogICAgICAgIHJldHVybgoKICAgICMgcHJldmVudCB1cyBkaXNjb25uZWN0aW5n IG91cnNlbHZlcwogICAgaWYgZGV2WyJTc2hfaWYiXSBhbmQgbm90IGZvcmNlOgogICAgICAgIHBy aW50ICJSb3V0aW5nIHRhYmxlIGluZGljYXRlcyB0aGF0IGludGVyZmFjZSAlcyBpcyBhY3RpdmUi IFwKICAgICAgICAgICAgIi4gU2tpcHBpbmcgdW5iaW5kIiAlIChkZXZfaWQpCiAgICAgICAgcmV0 dXJuCgogICAgIyB3cml0ZSB0byAvc3lzIHRvIHVuYmluZAogICAgZmlsZW5hbWUgPSAiL3N5cy9i dXMvcGNpL2RyaXZlcnMvJXMvdW5iaW5kIiAlIGRldlsiRHJpdmVyX3N0ciJdCiAgICB0cnk6CiAg ICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJhIikKICAgIGV4Y2VwdDoKICAgICAgICBwcmludCAi RXJyb3I6IHVuYmluZCBmYWlsZWQgZm9yICVzIC0gQ2Fubm90IG9wZW4gJXMiICUgKGRldl9pZCwg ZmlsZW5hbWUpCiAgICAgICAgc3lzL2V4aXQoMSkKICAgIGYud3JpdGUoZGV2X2lkKQogICAgZi5j bG9zZSgpCgpkZWYgYmluZF9vbmUoZGV2X2lkLCBkcml2ZXIsIGZvcmNlKToKICAgICcnJ0JpbmQg dGhlIGRldmljZSBnaXZlbiBieSAiZGV2X2lkIiB0byB0aGUgZHJpdmVyICJkcml2ZXIiLiBJZiB0 aGUgZGV2aWNlCiAgICBpcyBhbHJlYWR5IGJvdW5kIHRvIGEgZGlmZmVyZW50IGRyaXZlciwgaXQg d2lsbCBiZSB1bmJvdW5kIGZpcnN0JycnCiAgICBkZXYgPSBkZXZpY2VzW2Rldl9pZF0KICAgIHNh dmVkX2RyaXZlciA9IE5vbmUgIyB1c2VkIHRvIHJvbGxiYWNrIGFueSB1bmJpbmQgaW4gY2FzZSBv ZiBmYWlsdXJlCgogICAgIyBwcmV2ZW50IGRpc2Nvbm5lY3Rpb24gb2Ygb3VyIHNzaCBzZXNzaW9u CiAgICBpZiBkZXZbIlNzaF9pZiJdIGFuZCBub3QgZm9yY2U6CiAgICAgICAgcHJpbnQgIlJvdXRp bmcgdGFibGUgaW5kaWNhdGVzIHRoYXQgaW50ZXJmYWNlICVzIGlzIGFjdGl2ZSIgXAogICAgICAg ICAgICAiLiBOb3QgbW9kaWZ5aW5nIiAlIChkZXZfaWQpCiAgICAgICAgcmV0dXJuCgogICAgIyB1 bmJpbmQgYW55IGV4aXN0aW5nIGRyaXZlcnMgd2UgZG9uJ3Qgd2FudAogICAgaWYgaGFzX2RyaXZl cihkZXZfaWQpOgogICAgICAgIGlmIGRldlsiRHJpdmVyX3N0ciJdID09IGRyaXZlcjoKICAgICAg ICAgICAgcHJpbnQgIiVzIGFscmVhZHkgYm91bmQgdG8gZHJpdmVyICVzLCBza2lwcGluZ1xuIiAl IChkZXZfaWQsIGRyaXZlcikKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgZWxzZToKICAgICAg ICAgICAgc2F2ZWRfZHJpdmVyID0gZGV2WyJEcml2ZXJfc3RyIl0KICAgICAgICAgICAgdW5iaW5k X29uZShkZXZfaWQsIGZvcmNlKQogICAgICAgICAgICBkZXZbIkRyaXZlcl9zdHIiXSA9ICIiICMg Y2xlYXIgZHJpdmVyIHN0cmluZwoKICAgICMgaWYgd2UgYXJlIGJpbmRpbmcgdG8gb25lIG9mIERQ REsgZHJpdmVycywgYWRkIFBDSSBpZCdzIHRvIHRoYXQgZHJpdmVyCiAgICBpZiBkcml2ZXIgaW4g ZHBka19kcml2ZXJzOgogICAgICAgIGZpbGVuYW1lID0gIi9zeXMvYnVzL3BjaS9kcml2ZXJzLyVz L25ld19pZCIgJSBkcml2ZXIKICAgICAgICB0cnk6CiAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVu YW1lLCAidyIpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwcmludCAiRXJyb3I6IGJpbmQg ZmFpbGVkIGZvciAlcyAtIENhbm5vdCBvcGVuICVzIiAlIChkZXZfaWQsIGZpbGVuYW1lKQogICAg ICAgICAgICByZXR1cm4KICAgICAgICB0cnk6CiAgICAgICAgICAgIGYud3JpdGUoIiUwNHggJTA0 eCIgJSAoZGV2WyJWZW5kb3IiXSwgZGV2WyJEZXZpY2UiXSkpCiAgICAgICAgICAgIGYuY2xvc2Uo KQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgIkVycm9yOiBiaW5kIGZhaWxlZCBm b3IgJXMgLSBDYW5ub3Qgd3JpdGUgbmV3IFBDSSBJRCB0byAiIFwKICAgICAgICAgICAgICAgICJk cml2ZXIgJXMiICUgKGRldl9pZCwgZHJpdmVyKQogICAgICAgICAgICByZXR1cm4KCiAgICAjIGRv IHRoZSBiaW5kIGJ5IHdyaXRpbmcgdG8gL3N5cwogICAgZmlsZW5hbWUgPSAiL3N5cy9idXMvcGNp L2RyaXZlcnMvJXMvYmluZCIgJSBkcml2ZXIKICAgIHRyeToKICAgICAgICBmID0gb3BlbihmaWxl bmFtZSwgImEiKQogICAgZXhjZXB0OgogICAgICAgIHByaW50ICJFcnJvcjogYmluZCBmYWlsZWQg Zm9yICVzIC0gQ2Fubm90IG9wZW4gJXMiICUgKGRldl9pZCwgZmlsZW5hbWUpCiAgICAgICAgaWYg c2F2ZWRfZHJpdmVyIGlzIG5vdCBOb25lOiAjIHJlc3RvcmUgYW55IHByZXZpb3VzIGRyaXZlcgog ICAgICAgICAgICBiaW5kX29uZShkZXZfaWQsIHNhdmVkX2RyaXZlciwgZm9yY2UpCiAgICAgICAg cmV0dXJuCiAgICB0cnk6CiAgICAgICAgZi53cml0ZShkZXZfaWQpCiAgICAgICAgZi5jbG9zZSgp CiAgICBleGNlcHQ6CiAgICAgICAgIyBmb3Igc29tZSByZWFzb24sIGNsb3NpbmcgZGV2X2lkIGFm dGVyIGFkZGluZyBhIG5ldyBQQ0kgSUQgdG8gbmV3X2lkCiAgICAgICAgIyByZXN1bHRzIGluIElP RXJyb3IuIGhvd2V2ZXIsIGlmIHRoZSBkZXZpY2Ugd2FzIHN1Y2Nlc3NmdWxseSBib3VuZCwKICAg ICAgICAjIHdlIGRvbid0IGNhcmUgZm9yIGFueSBlcnJvcnMgYW5kIGNhbiBzYWZlbHkgaWdub3Jl IElPRXJyb3IKICAgICAgICB0bXAgPSBnZXRfcGNpX2RldmljZV9kZXRhaWxzKGRldl9pZCkKICAg ICAgICBpZiAiRHJpdmVyX3N0ciIgaW4gdG1wIGFuZCB0bXBbIkRyaXZlcl9zdHIiXSA9PSBkcml2 ZXI6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIHByaW50ICJFcnJvcjogYmluZCBmYWlsZWQg Zm9yICVzIC0gQ2Fubm90IGJpbmQgdG8gZHJpdmVyICVzIiAlIChkZXZfaWQsIGRyaXZlcikKICAg ICAgICBpZiBzYXZlZF9kcml2ZXIgaXMgbm90IE5vbmU6ICMgcmVzdG9yZSBhbnkgcHJldmlvdXMg ZHJpdmVyCiAgICAgICAgICAgIGJpbmRfb25lKGRldl9pZCwgc2F2ZWRfZHJpdmVyLCBmb3JjZSkK ICAgICAgICByZXR1cm4KCgpkZWYgdW5iaW5kX2FsbChkZXZfbGlzdCwgZm9yY2U9RmFsc2UpOgog ICAgIiIiVW5iaW5kIG1ldGhvZCwgdGFrZXMgYSBsaXN0IG9mIGRldmljZSBsb2NhdGlvbnMiIiIK ICAgIGRldl9saXN0ID0gbWFwKGRldl9pZF9mcm9tX2Rldl9uYW1lLCBkZXZfbGlzdCkKICAgIGZv ciBkIGluIGRldl9saXN0OgogICAgICAgIHVuYmluZF9vbmUoZCwgZm9yY2UpCgpkZWYgYmluZF9h bGwoZGV2X2xpc3QsIGRyaXZlciwgZm9yY2U9RmFsc2UpOgogICAgIiIiVW5iaW5kIG1ldGhvZCwg dGFrZXMgYSBsaXN0IG9mIGRldmljZSBsb2NhdGlvbnMiIiIKICAgIGdsb2JhbCBkZXZpY2VzCgog ICAgZGV2X2xpc3QgPSBtYXAoZGV2X2lkX2Zyb21fZGV2X25hbWUsIGRldl9saXN0KQoKICAgIGZv ciBkIGluIGRldl9saXN0OgogICAgICAgIGJpbmRfb25lKGQsIGRyaXZlciwgZm9yY2UpCgogICAg IyB3aGVuIGJpbmRpbmcgZGV2aWNlcyB0byBhIGdlbmVyaWMgZHJpdmVyIChpLmUuIG9uZSB0aGF0 IGRvZXNuJ3QgaGF2ZSBhCiAgICAjIFBDSSBJRCB0YWJsZSksIHNvbWUgZGV2aWNlcyB0aGF0IGFy ZSBub3QgYm91bmQgdG8gYW55IG90aGVyIGRyaXZlciBjb3VsZAogICAgIyBiZSBib3VuZCBldmVu IGlmIG5vIG9uZSBoYXMgYXNrZWQgdGhlbSB0by4gaGVuY2UsIHdlIGNoZWNrIHRoZSBsaXN0IG9m CiAgICAjIGRyaXZlcnMgYWdhaW4sIGFuZCBzZWUgaWYgc29tZSBvZiB0aGUgcHJldmlvdXNseS11 bmJvdW5kIGRldmljZXMgd2VyZQogICAgIyBlcnJvbmVvdXNseSBib3VuZC4KICAgIGZvciBkIGlu IGRldmljZXMua2V5cygpOgogICAgICAgICMgc2tpcCBkZXZpY2VzIHRoYXQgd2VyZSBhbHJlYWR5 IGJvdW5kIG9yIHRoYXQgd2Uga25vdyBzaG91bGQgYmUgYm91bmQKICAgICAgICBpZiAiRHJpdmVy X3N0ciIgaW4gZGV2aWNlc1tkXSBvciBkIGluIGRldl9saXN0OgogICAgICAgICAgICBjb250aW51 ZQoKICAgICAgICAjIHVwZGF0ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRldmljZQogICAgICAg IGRldmljZXNbZF0gPSBkaWN0KGRldmljZXNbZF0uaXRlbXMoKSArCiAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2V0X3BjaV9kZXZpY2VfZGV0YWlscyhkKS5pdGVtcygpKQoKICAgICAgICAjIGNo ZWNrIGlmIHVwZGF0ZWQgaW5mb3JtYXRpb24gaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSB3YXMg Ym91bmQKICAgICAgICBpZiAiRHJpdmVyX3N0ciIgaW4gZGV2aWNlc1tkXToKICAgICAgICAgICAg dW5iaW5kX29uZShkLCBmb3JjZSkKCmRlZiBkaXNwbGF5X2RldmljZXModGl0bGUsIGRldl9saXN0 LCBleHRyYV9wYXJhbXMgPSBOb25lKToKICAgICcnJ0Rpc3BsYXlzIHRvIHRoZSB1c2VyIHRoZSBk ZXRhaWxzIG9mIGEgbGlzdCBvZiBkZXZpY2VzIGdpdmVuIGluICJkZXZfbGlzdCIKICAgIFRoZSAi ZXh0cmFfcGFyYW1zIiBwYXJhbWV0ZXIsIGlmIGdpdmVuLCBzaG91bGQgY29udGFpbiBhIHN0cmlu ZyB3aXRoCiAgICAlKClzIGZpZWxkcyBpbiBpdCBmb3IgcmVwbGFjZW1lbnQgYnkgdGhlIG5hbWVk IGZpZWxkcyBpbiBlYWNoIGRldmljZSdzCiAgICBkaWN0aW9uYXJ5LicnJwogICAgc3RyaW5ncyA9 IFtdICMgdGhpcyBob2xkcyB0aGUgc3RyaW5ncyB0byBwcmludC4gV2Ugc29ydCBiZWZvcmUgcHJp bnRpbmcKICAgIHByaW50ICJcbiVzIiAlIHRpdGxlCiAgICBwcmludCAgICI9IipsZW4odGl0bGUp CiAgICBpZiBsZW4oZGV2X2xpc3QpID09IDA6CiAgICAgICAgc3RyaW5ncy5hcHBlbmQoIjxub25l PiIpCiAgICBlbHNlOgogICAgICAgIGZvciBkZXYgaW4gZGV2X2xpc3Q6CiAgICAgICAgICAgIGlm IGV4dHJhX3BhcmFtcyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIHN0cmluZ3MuYXBwZW5k KCIlcyAnJXMnICVzIiAlIChkZXZbIlNsb3QiXSwgXAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRldlsiRGV2aWNlX3N0ciJdLCBleHRyYV9wYXJhbXMgJSBkZXYpKQogICAgICAgICAg ICBlbHNlOgogICAgICAgICAgICAgICAgc3RyaW5ncy5hcHBlbmQoIiVzICclcyciICUgKGRldlsi U2xvdCJdLCBkZXZbIkRldmljZV9zdHIiXSkpCiAgICAjIHNvcnQgYmVmb3JlIHByaW50aW5nLCBz byB0aGF0IHRoZSBlbnRyaWVzIGFwcGVhciBpbiBQQ0kgb3JkZXIKICAgIHN0cmluZ3Muc29ydCgp CiAgICBwcmludCAiXG4iLmpvaW4oc3RyaW5ncykgIyBwcmludCBvbmUgcGVyIGxpbmUKCmRlZiBz aG93X3N0YXR1cygpOgogICAgJycnRnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBpcyBw YXNzZWQgdGhlICItLXN0YXR1cyIgb3B0aW9uLiBEaXNwbGF5cwogICAgdG8gdGhlIHVzZXIgd2hh dCBkZXZpY2VzIGFyZSBib3VuZCB0byB0aGUgaWdiX3VpbyBkcml2ZXIsIHRoZSBrZXJuZWwgZHJp dmVyCiAgICBvciB0byBubyBkcml2ZXInJycKICAgIGdsb2JhbCBkcGRrX2RyaXZlcnMKICAgIGtl cm5lbF9kcnYgPSBbXQogICAgZHBka19kcnYgPSBbXQogICAgbm9fZHJ2ID0gW10KCiAgICAjIHNw bGl0IG91ciBsaXN0IG9mIGRldmljZXMgaW50byB0aGUgdGhyZWUgY2F0ZWdvcmllcyBhYm92ZQog ICAgZm9yIGQgaW4gZGV2aWNlcy5rZXlzKCk6CiAgICAgICAgaWYgbm90IGhhc19kcml2ZXIoZCk6 CiAgICAgICAgICAgIG5vX2Rydi5hcHBlbmQoZGV2aWNlc1tkXSkKICAgICAgICAgICAgY29udGlu dWUKICAgICAgICBpZiBkZXZpY2VzW2RdWyJEcml2ZXJfc3RyIl0gaW4gZHBka19kcml2ZXJzOgog ICAgICAgICAgICBkcGRrX2Rydi5hcHBlbmQoZGV2aWNlc1tkXSkKICAgICAgICBlbHNlOgogICAg ICAgICAgICBrZXJuZWxfZHJ2LmFwcGVuZChkZXZpY2VzW2RdKQoKICAgICMgcHJpbnQgZWFjaCBj YXRlZ29yeSBzZXBhcmF0ZWx5LCBzbyB3ZSBjYW4gY2xlYXJseSBzZWUgd2hhdCdzIHVzZWQgYnkg RFBESwogICAgZGlzcGxheV9kZXZpY2VzKCJOZXR3b3JrIGRldmljZXMgdXNpbmcgRFBESy1jb21w YXRpYmxlIGRyaXZlciIsIGRwZGtfZHJ2LCBcCiAgICAgICAgICAgICAgICAgICAgImRydj0lKERy aXZlcl9zdHIpcyB1bnVzZWQ9JShNb2R1bGVfc3RyKXMiKQogICAgZGlzcGxheV9kZXZpY2VzKCJO ZXR3b3JrIGRldmljZXMgdXNpbmcga2VybmVsIGRyaXZlciIsIGtlcm5lbF9kcnYsCiAgICAgICAg ICAgICAgICAgICAgImlmPSUoSW50ZXJmYWNlKXMgZHJ2PSUoRHJpdmVyX3N0cilzIHVudXNlZD0l KE1vZHVsZV9zdHIpcyAlKEFjdGl2ZSlzIikKICAgIGRpc3BsYXlfZGV2aWNlcygiT3RoZXIgbmV0 d29yayBkZXZpY2VzIiwgbm9fZHJ2LFwKICAgICAgICAgICAgICAgICAgICAidW51c2VkPSUoTW9k dWxlX3N0cilzIikKCmRlZiBwYXJzZV9hcmdzKCk6CiAgICAnJydQYXJzZXMgdGhlIGNvbW1hbmQt bGluZSBhcmd1bWVudHMgZ2l2ZW4gYnkgdGhlIHVzZXIgYW5kIHRha2VzIHRoZQogICAgYXBwcm9w cmlhdGUgYWN0aW9uIGZvciBlYWNoJycnCiAgICBnbG9iYWwgYl9mbGFnCiAgICBnbG9iYWwgc3Rh dHVzX2ZsYWcKICAgIGdsb2JhbCBmb3JjZV9mbGFnCiAgICBnbG9iYWwgYXJncwogICAgaWYgbGVu KHN5cy5hcmd2KSA8PSAxOgogICAgICAgIHVzYWdlKCkKICAgICAgICBzeXMuZXhpdCgwKQoKICAg IHRyeToKICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJi OnUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoZWxwIiwgInVzYWdlIiwgInN0 YXR1cyIsICJmb3JjZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbmQ9Iiwg InVuYmluZCJdKQogICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciwgZXJyb3I6CiAgICAgICAg cHJpbnQgc3RyKGVycm9yKQogICAgICAgIHByaW50ICJSdW4gJyVzIC0tdXNhZ2UnIGZvciBmdXJ0 aGVyIGluZm9ybWF0aW9uIiAlIHN5cy5hcmd2WzBdCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICBm b3Igb3B0LCBhcmcgaW4gb3B0czoKICAgICAgICBpZiBvcHQgPT0gIi0taGVscCIgb3Igb3B0ID09 ICItLXVzYWdlIjoKICAgICAgICAgICAgdXNhZ2UoKQogICAgICAgICAgICBzeXMuZXhpdCgwKQog ICAgICAgIGlmIG9wdCA9PSAiLS1zdGF0dXMiOgogICAgICAgICAgICBzdGF0dXNfZmxhZyA9IFRy dWUKICAgICAgICBpZiBvcHQgPT0gIi0tZm9yY2UiOgogICAgICAgICAgICBmb3JjZV9mbGFnID0g VHJ1ZQogICAgICAgIGlmIG9wdCA9PSAiLWIiIG9yIG9wdCA9PSAiLXUiIG9yIG9wdCA9PSAiLS1i aW5kIiBvciBvcHQgPT0gIi0tdW5iaW5kIjoKICAgICAgICAgICAgaWYgYl9mbGFnIGlzIG5vdCBO b25lOgogICAgICAgICAgICAgICAgcHJpbnQgIkVycm9yIC0gT25seSBvbmUgYmluZCBvciB1bmJp bmQgbWF5IGJlIHNwZWNpZmllZFxuIgogICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAg ICAgICAgaWYgb3B0ID09ICItdSIgb3Igb3B0ID09ICItLXVuYmluZCI6CiAgICAgICAgICAgICAg ICBiX2ZsYWcgPSAibm9uZSIKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGJfZmxh ZyA9IGFyZwoKZGVmIGRvX2FyZ19hY3Rpb25zKCk6CiAgICAnJydkbyB0aGUgYWN0dWFsIGFjdGlv biByZXF1ZXN0ZWQgYnkgdGhlIHVzZXInJycKICAgIGdsb2JhbCBiX2ZsYWcKICAgIGdsb2JhbCBz dGF0dXNfZmxhZwogICAgZ2xvYmFsIGZvcmNlX2ZsYWcKICAgIGdsb2JhbCBhcmdzCgogICAgaWYg Yl9mbGFnIGlzIE5vbmUgYW5kIG5vdCBzdGF0dXNfZmxhZzoKICAgICAgICBwcmludCAiRXJyb3I6 IE5vIGFjdGlvbiBzcGVjaWZpZWQgZm9yIGRldmljZXMuIFBsZWFzZSBnaXZlIGEgLWIgb3IgLXUg b3B0aW9uIgogICAgICAgIHByaW50ICJSdW4gJyVzIC0tdXNhZ2UnIGZvciBmdXJ0aGVyIGluZm9y bWF0aW9uIiAlIHN5cy5hcmd2WzBdCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICBpZiBiX2ZsYWcg aXMgbm90IE5vbmUgYW5kIGxlbihhcmdzKSA9PSAwOgogICAgICAgIHByaW50ICJFcnJvcjogTm8g ZGV2aWNlcyBzcGVjaWZpZWQuIgogICAgICAgIHByaW50ICJSdW4gJyVzIC0tdXNhZ2UnIGZvciBm dXJ0aGVyIGluZm9ybWF0aW9uIiAlIHN5cy5hcmd2WzBdCiAgICAgICAgc3lzLmV4aXQoMSkKCiAg ICBpZiBiX2ZsYWcgPT0gIm5vbmUiIG9yIGJfZmxhZyA9PSAiTm9uZSI6CiAgICAgICAgdW5iaW5k X2FsbChhcmdzLCBmb3JjZV9mbGFnKQogICAgZWxpZiBiX2ZsYWcgaXMgbm90IE5vbmU6CiAgICAg ICAgYmluZF9hbGwoYXJncywgYl9mbGFnLCBmb3JjZV9mbGFnKQogICAgaWYgc3RhdHVzX2ZsYWc6 CiAgICAgICAgaWYgYl9mbGFnIGlzIG5vdCBOb25lOgogICAgICAgICAgICBnZXRfbmljX2RldGFp bHMoKSAjIHJlZnJlc2ggaWYgd2UgaGF2ZSBjaGFuZ2VkIGFueXRoaW5nCiAgICAgICAgc2hvd19z dGF0dXMoKQoKZGVmIG1haW4oKToKICAgICcnJ3Byb2dyYW0gbWFpbiBmdW5jdGlvbicnJwogICAg cGFyc2VfYXJncygpCiAgICBjaGVja19tb2R1bGVzKCkKICAgIGdldF9uaWNfZGV0YWlscygpCiAg ICBkb19hcmdfYWN0aW9ucygpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigp Cg==