From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw1-x112e.google.com (mail-yw1-x112e.google.com [IPv6:2607:f8b0:4864:20::112e]) by sourceware.org (Postfix) with ESMTPS id BBF5A386076C for ; Mon, 23 Oct 2023 21:17:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BBF5A386076C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=golang.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=golang.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org BBF5A386076C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::112e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698095828; cv=none; b=saeRMwpRmLtxTmRBRVUx6tGw8HJcg02KF69fWfsMWcfVXkOHruC+Fwqbyber356Cm/RXh1tSNN0R1bfnxjsWU9uYQ5h7njTso+7Xb6XWCDEgEcNPRw7z7ql9EKDrdUXQsR0wvcc5POUj1S/EMBuT7mksEyUsz3LudVfk9dkZocU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698095828; c=relaxed/simple; bh=LuZAz8MBhROeYFuSG6fGqLwv75yD5Eua4Tr2g+bZpFg=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=Nj95LgkMTTteTniQt/TPP01KgmTJKsrZe8+sRzwujJneiEJdRAvSqOggzB80kCDeBmPGr7gJ1WXd0hANhjkV/haerKtOnec8KaYSbq+mlSpLyBmJas8uwMJtDI9LBemFwOGoasafkXNosvFVIxZ/RVNMTxJrCkGaDkbEVx1UTLQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yw1-x112e.google.com with SMTP id 00721157ae682-5a7c011e113so41310577b3.1 for ; Mon, 23 Oct 2023 14:17:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=golang-org.20230601.gappssmtp.com; s=20230601; t=1698095825; x=1698700625; darn=gcc.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=qqgUwgYLfjueeIgeYLO41e40pTIuoitnSMIQDRyRbWo=; b=tCeXSqaTD6q9lUaa/Ur6BP90oWawlnpW/twEj+w97zsF+E7Wf/aHps83WUPnc7lDfQ Ts/9YmCDRvGwceBjl11AmcdjVgbQf+yPOdDTxP1GDym0Fkm96POqgnlG7FE+cQllDxvZ fZ65q8/M1VARKNi/rAPbz2WcrZmy+Qr6aiR/myIJ2kPdkil60WTCs3v3QwLzFskM4TEv 6UctH5WIlsMGLlgROPszUIEK347W9w4OYRsRXByKB71DcG+YCDgUaAV+vHz+fQepHcdX eDAVT8cILpC/97umgKlaB0sULeL/kChNajan1ClzTWRt4ujUgICTZZyGi15FeYmrAeqv jb8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698095825; x=1698700625; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=qqgUwgYLfjueeIgeYLO41e40pTIuoitnSMIQDRyRbWo=; b=anXhUuYCtaGoC4uxnm4J/FXHk2LV2f3ZtuFN8eD3At3NLN/EbEG2VYTrTEAdngdNuY ndIKq7FQGto+xq6Htw9ucb9HhW7oudFF1XC7p9Vvdy84PKkjpGx8Kk5NH5b1Ssy21/HZ Nu1xsUAdac6OmVdHNHpOFW1guPFgL4JUsa9l0YMIBrHZB+hOYwtgE5L8QKnEEGghJn/i ZlueP2c6qPkJ4f88ADv9oAXQF5dS/j/CT3+f7P4hsi3cggU6dGsiHtx3oeYk8bZryjz2 IH6NkHlvEkJiG4mkkB7fNZFkJ4VCB/LInDNqZewK+EFXsGvWrN3qTu+1l6Nu0mV1Jvm0 lSxw== X-Gm-Message-State: AOJu0YzoRnmAu1eBg8UIyCl7AY/1406nHI8VLt8MEKGUCwx4qyqO5dBD X6rRYQyvr9quym0jtpBefw77/g8FOqfI2GO06fMZnnS706iNi1dbDVs= X-Google-Smtp-Source: AGHT+IG1iUyNnmo/xPUT+8k48RlcgPilE/QWATYSEoAcjCnBwDfO2LmZTjXNYWG0WaB9ofXGM6JcGVlHO+RofYHmgLE= X-Received: by 2002:a0d:cc4d:0:b0:5a7:d4c2:d59e with SMTP id o74-20020a0dcc4d000000b005a7d4c2d59emr12502315ywd.22.1698095825018; Mon, 23 Oct 2023 14:17:05 -0700 (PDT) MIME-Version: 1.0 From: Ian Lance Taylor Date: Mon, 23 Oct 2023 14:16:53 -0700 Message-ID: Subject: Go patch committed: Move Selector_expression up in file To: gcc-patches , gofrontend-dev Content-Type: multipart/mixed; boundary="000000000000722ece060868be33" X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_FILL_THIS_FORM_SHORT autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000722ece060868be33 Content-Type: text/plain; charset="UTF-8" This patch to the Go frontend just moves Selector_expression up in file. This is a mechanical change to expressions.cc. This will make Selector_expression visible to Builtin_call_expression for later work. This produces a very large "git --diff", but "git diff --minimal" is clear. Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline. Ian --000000000000722ece060868be33 Content-Type: text/plain; charset="US-ASCII"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lo3eebqi0 MDJhYTMyMmM4Y2ZkM2Y2MGZhNWEzYTBlZWU0MzQwYmI2NDQyNjFmZQpkaWZmIC0tZ2l0IGEvZ2Nj L2dvL2dvZnJvbnRlbmQvTUVSR0UgYi9nY2MvZ28vZ29mcm9udGVuZC9NRVJHRQppbmRleCAzNWI5 Y2Q3ODBkYS4uYWZmNzRiZDc0ZGMgMTAwNjQ0Ci0tLSBhL2djYy9nby9nb2Zyb250ZW5kL01FUkdF CisrKyBiL2djYy9nby9nb2Zyb250ZW5kL01FUkdFCkBAIC0xLDQgKzEsNCBAQAotM2MyYTQ0MWVm NmNhZmIwMThiYjNjYzE2Zjg0MDNhZTNkMWRhZjJlMQorZTk5N2IwMjAxNTEyMTEwZTljMjBiMWZk ZmQ0MDAxNDgzMDAzMTA0NwogCiBUaGUgZmlyc3QgbGluZSBvZiB0aGlzIGZpbGUgaG9sZHMgdGhl IGdpdCByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGxhc3QKIG1lcmdlIGRvbmUgZnJvbSB0aGUgZ29m cm9udGVuZCByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvZ2NjL2dvL2dvZnJvbnRlbmQvZXhwcmVz c2lvbnMuY2MgYi9nY2MvZ28vZ29mcm9udGVuZC9leHByZXNzaW9ucy5jYwppbmRleCBmMjE4NzMx MDQxYi4uYzkxNzdiNzExNzQgMTAwNjQ0Ci0tLSBhL2djYy9nby9nb2Zyb250ZW5kL2V4cHJlc3Np b25zLmNjCisrKyBiL2djYy9nby9nb2Zyb250ZW5kL2V4cHJlc3Npb25zLmNjCkBAIC04NDI2LDYg Kzg0MjYsMjg3IEBAIEV4cHJlc3Npb246Om1ha2VfYm91bmRfbWV0aG9kKEV4cHJlc3Npb24qIGV4 cHIsIGNvbnN0IE1ldGhvZCogbWV0aG9kLAogICByZXR1cm4gbmV3IEJvdW5kX21ldGhvZF9leHBy ZXNzaW9uKGV4cHIsIG1ldGhvZCwgZnVuY3Rpb24sIGxvY2F0aW9uKTsKIH0KIAorLy8gQSBnZW5l cmFsIHNlbGVjdG9yLiAgVGhpcyBpcyBhIFBhcnNlcl9leHByZXNzaW9uIGZvciBMRUZULk5BTUUu ICBJdAorLy8gaXMgbG93ZXJlZCBhZnRlciB3ZSBrbm93IHRoZSB0eXBlIG9mIHRoZSBsZWZ0IGhh bmQgc2lkZS4KKworY2xhc3MgU2VsZWN0b3JfZXhwcmVzc2lvbiA6IHB1YmxpYyBQYXJzZXJfZXhw cmVzc2lvbgoreworIHB1YmxpYzoKKyAgU2VsZWN0b3JfZXhwcmVzc2lvbihFeHByZXNzaW9uKiBs ZWZ0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKKwkJICAgICAgTG9jYXRpb24gbG9jYXRpb24p CisgICAgOiBQYXJzZXJfZXhwcmVzc2lvbihFWFBSRVNTSU9OX1NFTEVDVE9SLCBsb2NhdGlvbiks CisgICAgICBsZWZ0XyhsZWZ0KSwgbmFtZV8obmFtZSkKKyAgeyB9CisKKyBwcm90ZWN0ZWQ6Cisg IGludAorICBkb190cmF2ZXJzZShUcmF2ZXJzZSogdHJhdmVyc2UpCisgIHsgcmV0dXJuIEV4cHJl c3Npb246OnRyYXZlcnNlKCZ0aGlzLT5sZWZ0XywgdHJhdmVyc2UpOyB9CisKKyAgRXhwcmVzc2lv bioKKyAgZG9fbG93ZXIoR29nbyosIE5hbWVkX29iamVjdCosIFN0YXRlbWVudF9pbnNlcnRlcios IGludCk7CisKKyAgRXhwcmVzc2lvbioKKyAgZG9fY29weSgpCisgIHsKKyAgICByZXR1cm4gbmV3 IFNlbGVjdG9yX2V4cHJlc3Npb24odGhpcy0+bGVmdF8tPmNvcHkoKSwgdGhpcy0+bmFtZV8sCisJ CQkJICAgdGhpcy0+bG9jYXRpb24oKSk7CisgIH0KKworICB2b2lkCisgIGRvX2R1bXBfZXhwcmVz c2lvbihBc3RfZHVtcF9jb250ZXh0KiBhc3RfZHVtcF9jb250ZXh0KSBjb25zdDsKKworIHByaXZh dGU6CisgIEV4cHJlc3Npb24qCisgIGxvd2VyX21ldGhvZF9leHByZXNzaW9uKEdvZ28qKTsKKwor ICAvLyBUaGUgZXhwcmVzc2lvbiBvbiB0aGUgbGVmdCBoYW5kIHNpZGUuCisgIEV4cHJlc3Npb24q IGxlZnRfOworICAvLyBUaGUgbmFtZSBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlLgorICBzdGQ6OnN0 cmluZyBuYW1lXzsKK307CisKKy8vIExvd2VyIGEgc2VsZWN0b3IgZXhwcmVzc2lvbiBvbmNlIHdl IGtub3cgdGhlIHJlYWwgdHlwZSBvZiB0aGUgbGVmdAorLy8gaGFuZCBzaWRlLgorCitFeHByZXNz aW9uKgorU2VsZWN0b3JfZXhwcmVzc2lvbjo6ZG9fbG93ZXIoR29nbyogZ29nbywgTmFtZWRfb2Jq ZWN0KiwgU3RhdGVtZW50X2luc2VydGVyKiwKKwkJCSAgICAgIGludCkKK3sKKyAgRXhwcmVzc2lv biogbGVmdCA9IHRoaXMtPmxlZnRfOworICBpZiAobGVmdC0+aXNfdHlwZV9leHByZXNzaW9uKCkp CisgICAgcmV0dXJuIHRoaXMtPmxvd2VyX21ldGhvZF9leHByZXNzaW9uKGdvZ28pOworICByZXR1 cm4gVHlwZTo6YmluZF9maWVsZF9vcl9tZXRob2QoZ29nbywgbGVmdC0+dHlwZSgpLCBsZWZ0LCB0 aGlzLT5uYW1lXywKKwkJCQkgICAgdGhpcy0+bG9jYXRpb24oKSk7Cit9CisKKy8vIExvd2VyIGEg bWV0aG9kIGV4cHJlc3Npb24gVC5NIG9yICgqVCkuTS4gIFdlIHR1cm4gdGhpcyBpbnRvIGEKKy8v IGZ1bmN0aW9uIGxpdGVyYWwuCisKK0V4cHJlc3Npb24qCitTZWxlY3Rvcl9leHByZXNzaW9uOjps b3dlcl9tZXRob2RfZXhwcmVzc2lvbihHb2dvKiBnb2dvKQoreworICBMb2NhdGlvbiBsb2NhdGlv biA9IHRoaXMtPmxvY2F0aW9uKCk7CisgIFR5cGUqIGxlZnRfdHlwZSA9IHRoaXMtPmxlZnRfLT50 eXBlKCk7CisgIFR5cGUqIHR5cGUgPSBsZWZ0X3R5cGU7CisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBu YW1lKHRoaXMtPm5hbWVfKTsKKworICBib29sIGlzX3BvaW50ZXI7CisgIGlmICh0eXBlLT5wb2lu dHNfdG8oKSA9PSBOVUxMKQorICAgIGlzX3BvaW50ZXIgPSBmYWxzZTsKKyAgZWxzZQorICAgIHsK KyAgICAgIGlzX3BvaW50ZXIgPSB0cnVlOworICAgICAgdHlwZSA9IHR5cGUtPnBvaW50c190bygp OworICAgIH0KKworICBOYW1lZF90eXBlKiBudCA9IHR5cGUtPm5hbWVkX3R5cGUoKTsKKyAgU3Ry dWN0X3R5cGUqIHN0ID0gdHlwZS0+c3RydWN0X3R5cGUoKTsKKyAgYm9vbCBpc19hbWJpZ3VvdXM7 CisgIE1ldGhvZCogbWV0aG9kID0gTlVMTDsKKyAgaWYgKG50ICE9IE5VTEwpCisgICAgbWV0aG9k ID0gbnQtPm1ldGhvZF9mdW5jdGlvbihuYW1lLCAmaXNfYW1iaWd1b3VzKTsKKyAgZWxzZSBpZiAo c3QgIT0gTlVMTCkKKyAgICBtZXRob2QgPSBzdC0+bWV0aG9kX2Z1bmN0aW9uKG5hbWUsICZpc19h bWJpZ3VvdXMpOworICBjb25zdCBUeXBlZF9pZGVudGlmaWVyKiBpbWV0aG9kID0gTlVMTDsKKyAg aWYgKG1ldGhvZCA9PSBOVUxMICYmICFpc19wb2ludGVyKQorICAgIHsKKyAgICAgIEludGVyZmFj ZV90eXBlKiBpdCA9IHR5cGUtPmludGVyZmFjZV90eXBlKCk7CisgICAgICBpZiAoaXQgIT0gTlVM TCkKKwlpbWV0aG9kID0gaXQtPmZpbmRfbWV0aG9kKG5hbWUpOworICAgIH0KKworICBpZiAoKG1l dGhvZCA9PSBOVUxMICYmIGltZXRob2QgPT0gTlVMTCkKKyAgICAgIHx8IChsZWZ0X3R5cGUtPm5h bWVkX3R5cGUoKSAhPSBOVUxMICYmIGxlZnRfdHlwZS0+cG9pbnRzX3RvKCkgIT0gTlVMTCkpCisg ICAgeworICAgICAgaWYgKG50ICE9IE5VTEwpCisJeworCSAgaWYgKCFpc19hbWJpZ3VvdXMpCisJ ICAgIGdvX2Vycm9yX2F0KGxvY2F0aW9uLCAidHlwZSAlPCVzJXMlPiBoYXMgbm8gbWV0aG9kICU8 JXMlPiIsCisJCQlpc19wb2ludGVyID8gIioiIDogIiIsCisJCQludC0+bWVzc2FnZV9uYW1lKCku Y19zdHIoKSwKKwkJCUdvZ286Om1lc3NhZ2VfbmFtZShuYW1lKS5jX3N0cigpKTsKKwkgIGVsc2UK KwkgICAgZ29fZXJyb3JfYXQobG9jYXRpb24sICJtZXRob2QgJTwlcyVzJT4gaXMgYW1iaWd1b3Vz IGluIHR5cGUgJTwlcyU+IiwKKwkJCUdvZ286Om1lc3NhZ2VfbmFtZShuYW1lKS5jX3N0cigpLAor CQkJaXNfcG9pbnRlciA/ICIqIiA6ICIiLAorCQkJbnQtPm1lc3NhZ2VfbmFtZSgpLmNfc3RyKCkp OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoIWlzX2FtYmlndW91cykKKwkgICAgZ29fZXJy b3JfYXQobG9jYXRpb24sICJ0eXBlIGhhcyBubyBtZXRob2QgJTwlcyU+IiwKKwkJCUdvZ286Om1l c3NhZ2VfbmFtZShuYW1lKS5jX3N0cigpKTsKKwkgIGVsc2UKKwkgICAgZ29fZXJyb3JfYXQobG9j YXRpb24sICJtZXRob2QgJTwlcyU+IGlzIGFtYmlndW91cyIsCisJCQlHb2dvOjptZXNzYWdlX25h bWUobmFtZSkuY19zdHIoKSk7CisJfQorICAgICAgcmV0dXJuIEV4cHJlc3Npb246Om1ha2VfZXJy b3IobG9jYXRpb24pOworICAgIH0KKworICBpZiAobWV0aG9kICE9IE5VTEwgJiYgIWlzX3BvaW50 ZXIgJiYgIW1ldGhvZC0+aXNfdmFsdWVfbWV0aG9kKCkpCisgICAgeworICAgICAgZ29fZXJyb3Jf YXQobG9jYXRpb24sICJtZXRob2QgcmVxdWlyZXMgcG9pbnRlciAodXNlICU8KColcykuJXMlPiki LAorICAgICAgICAgICAgICAgICAgbnQtPm1lc3NhZ2VfbmFtZSgpLmNfc3RyKCksCisgICAgICAg ICAgICAgICAgICBHb2dvOjptZXNzYWdlX25hbWUobmFtZSkuY19zdHIoKSk7CisgICAgICByZXR1 cm4gRXhwcmVzc2lvbjo6bWFrZV9lcnJvcihsb2NhdGlvbik7CisgICAgfQorCisgIC8vIEJ1aWxk IGEgbmV3IGZ1bmN0aW9uIHR5cGUgaW4gd2hpY2ggdGhlIHJlY2VpdmVyIGJlY29tZXMgdGhlIGZp cnN0CisgIC8vIGFyZ3VtZW50LgorICBGdW5jdGlvbl90eXBlKiBtZXRob2RfdHlwZTsKKyAgaWYg KG1ldGhvZCAhPSBOVUxMKQorICAgIHsKKyAgICAgIG1ldGhvZF90eXBlID0gbWV0aG9kLT50eXBl KCk7CisgICAgICBnb19hc3NlcnQobWV0aG9kX3R5cGUtPmlzX21ldGhvZCgpKTsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICBtZXRob2RfdHlwZSA9IGltZXRob2QtPnR5cGUoKS0+ZnVuY3Rp b25fdHlwZSgpOworICAgICAgZ29fYXNzZXJ0KG1ldGhvZF90eXBlICE9IE5VTEwgJiYgIW1ldGhv ZF90eXBlLT5pc19tZXRob2QoKSk7CisgICAgfQorCisgIGNvbnN0IGNoYXIqIGNvbnN0IHJlY2Vp dmVyX25hbWUgPSAiJHRoaXMiOworICBUeXBlZF9pZGVudGlmaWVyX2xpc3QqIHBhcmFtZXRlcnMg PSBuZXcgVHlwZWRfaWRlbnRpZmllcl9saXN0KCk7CisgIHBhcmFtZXRlcnMtPnB1c2hfYmFjayhU eXBlZF9pZGVudGlmaWVyKHJlY2VpdmVyX25hbWUsIHRoaXMtPmxlZnRfLT50eXBlKCksCisJCQkJ CSBsb2NhdGlvbikpOworCisgIGNvbnN0IFR5cGVkX2lkZW50aWZpZXJfbGlzdCogbWV0aG9kX3Bh cmFtZXRlcnMgPSBtZXRob2RfdHlwZS0+cGFyYW1ldGVycygpOworICBpZiAobWV0aG9kX3BhcmFt ZXRlcnMgIT0gTlVMTCkKKyAgICB7CisgICAgICBpbnQgaSA9IDA7CisgICAgICBmb3IgKFR5cGVk X2lkZW50aWZpZXJfbGlzdDo6Y29uc3RfaXRlcmF0b3IgcCA9IG1ldGhvZF9wYXJhbWV0ZXJzLT5i ZWdpbigpOworCSAgIHAgIT0gbWV0aG9kX3BhcmFtZXRlcnMtPmVuZCgpOworCSAgICsrcCwgKytp KQorCXsKKwkgIGlmICghcC0+bmFtZSgpLmVtcHR5KCkgJiYgIUdvZ286OmlzX3NpbmtfbmFtZShw LT5uYW1lKCkpKQorCSAgICBwYXJhbWV0ZXJzLT5wdXNoX2JhY2soKnApOworCSAgZWxzZQorCSAg ICB7CisJICAgICAgY2hhciBidWZbMjBdOworCSAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1 ZiwgIiRwYXJhbSVkIiwgaSk7CisJICAgICAgcGFyYW1ldGVycy0+cHVzaF9iYWNrKFR5cGVkX2lk ZW50aWZpZXIoYnVmLCBwLT50eXBlKCksCisJCQkJCQkgICAgIHAtPmxvY2F0aW9uKCkpKTsKKwkg ICAgfQorCX0KKyAgICB9CisKKyAgY29uc3QgVHlwZWRfaWRlbnRpZmllcl9saXN0KiBtZXRob2Rf cmVzdWx0cyA9IG1ldGhvZF90eXBlLT5yZXN1bHRzKCk7CisgIFR5cGVkX2lkZW50aWZpZXJfbGlz dCogcmVzdWx0czsKKyAgaWYgKG1ldGhvZF9yZXN1bHRzID09IE5VTEwpCisgICAgcmVzdWx0cyA9 IE5VTEw7CisgIGVsc2UKKyAgICB7CisgICAgICByZXN1bHRzID0gbmV3IFR5cGVkX2lkZW50aWZp ZXJfbGlzdCgpOworICAgICAgZm9yIChUeXBlZF9pZGVudGlmaWVyX2xpc3Q6OmNvbnN0X2l0ZXJh dG9yIHAgPSBtZXRob2RfcmVzdWx0cy0+YmVnaW4oKTsKKwkgICBwICE9IG1ldGhvZF9yZXN1bHRz LT5lbmQoKTsKKwkgICArK3ApCisJcmVzdWx0cy0+cHVzaF9iYWNrKCpwKTsKKyAgICB9CisKKyAg RnVuY3Rpb25fdHlwZSogZm50eXBlID0gVHlwZTo6bWFrZV9mdW5jdGlvbl90eXBlKE5VTEwsIHBh cmFtZXRlcnMsIHJlc3VsdHMsCisJCQkJCQkgICBsb2NhdGlvbik7CisgIGlmIChtZXRob2RfdHlw ZS0+aXNfdmFyYXJncygpKQorICAgIGZudHlwZS0+c2V0X2lzX3ZhcmFyZ3MoKTsKKworICAvLyBX ZSBnZW5lcmF0ZSBtZXRob2RzIHdoaWNoIGFsd2F5cyB0YWtlcyBhIHBvaW50ZXIgdG8gdGhlIHJl Y2VpdmVyCisgIC8vIGFzIHRoZWlyIGZpcnN0IGFyZ3VtZW50LiAgSWYgdGhpcyBpcyBmb3IgYSBw b2ludGVyIHR5cGUsIHdlIGNhbgorICAvLyBzaW1wbHkgcmV1c2UgdGhlIGV4aXN0aW5nIGZ1bmN0 aW9uLiAgV2UgdXNlIGFuIGludGVybmFsIGhhY2sgdG8KKyAgLy8gZ2V0IHRoZSByaWdodCB0eXBl LgorICAvLyBGSVhNRTogVGhpcyBvcHRpbWl6YXRpb24gaXMgZGlzYWJsZWQgYmVjYXVzZSBpdCBk b2Vzbid0IHlldCB3b3JrCisgIC8vIHdpdGggZnVuY3Rpb24gZGVzY3JpcHRvcnMgd2hlbiB0aGUg bWV0aG9kIGV4cHJlc3Npb24gaXMgbm90CisgIC8vIGRpcmVjdGx5IGNhbGxlZC4KKyAgaWYgKG1l dGhvZCAhPSBOVUxMICYmIGlzX3BvaW50ZXIgJiYgZmFsc2UpCisgICAgeworICAgICAgTmFtZWRf b2JqZWN0KiBtbm8gPSAobWV0aG9kLT5uZWVkc19zdHViX21ldGhvZCgpCisJCQkgICA/IG1ldGhv ZC0+c3R1Yl9vYmplY3QoKQorCQkJICAgOiBtZXRob2QtPm5hbWVkX29iamVjdCgpKTsKKyAgICAg IEV4cHJlc3Npb24qIGYgPSBFeHByZXNzaW9uOjptYWtlX2Z1bmNfcmVmZXJlbmNlKG1ubywgTlVM TCwgbG9jYXRpb24pOworICAgICAgZiA9IEV4cHJlc3Npb246Om1ha2VfY2FzdChmbnR5cGUsIGYs IGxvY2F0aW9uKTsKKyAgICAgIFR5cGVfY29udmVyc2lvbl9leHByZXNzaW9uKiB0Y2UgPQorCXN0 YXRpY19jYXN0PFR5cGVfY29udmVyc2lvbl9leHByZXNzaW9uKj4oZik7CisgICAgICB0Y2UtPnNl dF9tYXlfY29udmVydF9mdW5jdGlvbl90eXBlcygpOworICAgICAgcmV0dXJuIGY7CisgICAgfQor CisgIE5hbWVkX29iamVjdCogbm8gPSBnb2dvLT5zdGFydF9mdW5jdGlvbihnb2dvLT50aHVua19u YW1lKCksIGZudHlwZSwgZmFsc2UsCisJCQkJCSAgbG9jYXRpb24pOworCisgIE5hbWVkX29iamVj dCogdm5vID0gZ29nby0+bG9va3VwKHJlY2VpdmVyX25hbWUsIE5VTEwpOworICBnb19hc3NlcnQo dm5vICE9IE5VTEwpOworICBFeHByZXNzaW9uKiB2ZSA9IEV4cHJlc3Npb246Om1ha2VfdmFyX3Jl ZmVyZW5jZSh2bm8sIGxvY2F0aW9uKTsKKyAgRXhwcmVzc2lvbiogYm07CisgIGlmIChtZXRob2Qg IT0gTlVMTCkKKyAgICBibSA9IFR5cGU6OmJpbmRfZmllbGRfb3JfbWV0aG9kKGdvZ28sIHR5cGUs IHZlLCBuYW1lLCBsb2NhdGlvbik7CisgIGVsc2UKKyAgICBibSA9IEV4cHJlc3Npb246Om1ha2Vf aW50ZXJmYWNlX2ZpZWxkX3JlZmVyZW5jZSh2ZSwgbmFtZSwgbG9jYXRpb24pOworCisgIC8vIEV2 ZW4gdGhvdWdoIHdlIGZvdW5kIHRoZSBtZXRob2QgYWJvdmUsIGlmIGl0IGhhcyBhbiBlcnJvciB0 eXBlIHdlCisgIC8vIG1heSBzZWUgYW4gZXJyb3IgaGVyZS4KKyAgaWYgKGJtLT5pc19lcnJvcl9l eHByZXNzaW9uKCkpCisgICAgeworICAgICAgZ29nby0+ZmluaXNoX2Z1bmN0aW9uKGxvY2F0aW9u KTsKKyAgICAgIHJldHVybiBibTsKKyAgICB9CisKKyAgRXhwcmVzc2lvbl9saXN0KiBhcmdzOwor ICBpZiAocGFyYW1ldGVycy0+c2l6ZSgpIDw9IDEpCisgICAgYXJncyA9IE5VTEw7CisgIGVsc2UK KyAgICB7CisgICAgICBhcmdzID0gbmV3IEV4cHJlc3Npb25fbGlzdCgpOworICAgICAgVHlwZWRf aWRlbnRpZmllcl9saXN0Ojpjb25zdF9pdGVyYXRvciBwID0gcGFyYW1ldGVycy0+YmVnaW4oKTsK KyAgICAgICsrcDsKKyAgICAgIGZvciAoOyBwICE9IHBhcmFtZXRlcnMtPmVuZCgpOyArK3ApCisJ eworCSAgdm5vID0gZ29nby0+bG9va3VwKHAtPm5hbWUoKSwgTlVMTCk7CisJICBnb19hc3NlcnQo dm5vICE9IE5VTEwpOworCSAgYXJncy0+cHVzaF9iYWNrKEV4cHJlc3Npb246Om1ha2VfdmFyX3Jl ZmVyZW5jZSh2bm8sIGxvY2F0aW9uKSk7CisJfQorICAgIH0KKworICBnb2dvLT5zdGFydF9ibG9j ayhsb2NhdGlvbik7CisKKyAgQ2FsbF9leHByZXNzaW9uKiBjYWxsID0gRXhwcmVzc2lvbjo6bWFr ZV9jYWxsKGJtLCBhcmdzLAorCQkJCQkJbWV0aG9kX3R5cGUtPmlzX3ZhcmFyZ3MoKSwKKwkJCQkJ CWxvY2F0aW9uKTsKKworICBTdGF0ZW1lbnQqIHMgPSBTdGF0ZW1lbnQ6Om1ha2VfcmV0dXJuX2Zy b21fY2FsbChjYWxsLCBsb2NhdGlvbik7CisgIGdvZ28tPmFkZF9zdGF0ZW1lbnQocyk7CisKKyAg QmxvY2sqIGIgPSBnb2dvLT5maW5pc2hfYmxvY2sobG9jYXRpb24pOworCisgIGdvZ28tPmFkZF9i bG9jayhiLCBsb2NhdGlvbik7CisKKyAgLy8gTG93ZXIgdGhlIGNhbGwgaW4gY2FzZSB0aGVyZSBh cmUgbXVsdGlwbGUgcmVzdWx0cy4KKyAgZ29nby0+bG93ZXJfYmxvY2sobm8sIGIpOworICBnb2dv LT5mbGF0dGVuX2Jsb2NrKG5vLCBiKTsKKworICBnb2dvLT5maW5pc2hfZnVuY3Rpb24obG9jYXRp b24pOworCisgIHJldHVybiBFeHByZXNzaW9uOjptYWtlX2Z1bmNfcmVmZXJlbmNlKG5vLCBOVUxM LCBsb2NhdGlvbik7Cit9CisKKy8vIER1bXAgdGhlIGFzdCBmb3IgYSBzZWxlY3RvciBleHByZXNz aW9uLgorCit2b2lkCitTZWxlY3Rvcl9leHByZXNzaW9uOjpkb19kdW1wX2V4cHJlc3Npb24oQXN0 X2R1bXBfY29udGV4dCogYXN0X2R1bXBfY29udGV4dCkKKyAgICBjb25zdAoreworICBhc3RfZHVt cF9jb250ZXh0LT5kdW1wX2V4cHJlc3Npb24odGhpcy0+bGVmdF8pOworICBhc3RfZHVtcF9jb250 ZXh0LT5vc3RyZWFtKCkgPDwgIi4iOworICBhc3RfZHVtcF9jb250ZXh0LT5vc3RyZWFtKCkgPDwg dGhpcy0+bmFtZV87Cit9CisKKy8vIE1ha2UgYSBzZWxlY3RvciBleHByZXNzaW9uLgorCitFeHBy ZXNzaW9uKgorRXhwcmVzc2lvbjo6bWFrZV9zZWxlY3RvcihFeHByZXNzaW9uKiBsZWZ0LCBjb25z dCBzdGQ6OnN0cmluZyYgbmFtZSwKKwkJCSAgTG9jYXRpb24gbG9jYXRpb24pCit7CisgIHJldHVy biBuZXcgU2VsZWN0b3JfZXhwcmVzc2lvbihsZWZ0LCBuYW1lLCBsb2NhdGlvbik7Cit9CisKIC8v IENsYXNzIEJ1aWx0aW5fY2FsbF9leHByZXNzaW9uLiAgVGhpcyBpcyB1c2VkIGZvciBhIGNhbGwg dG8gYQogLy8gYnVpbHRpbiBmdW5jdGlvbi4KIApAQCAtMTUyNjUsMjg3ICsxNTU0Niw2IEBAIEV4 cHJlc3Npb246Om1ha2VfaW50ZXJmYWNlX2ZpZWxkX3JlZmVyZW5jZShFeHByZXNzaW9uKiBleHBy LAogICByZXR1cm4gbmV3IEludGVyZmFjZV9maWVsZF9yZWZlcmVuY2VfZXhwcmVzc2lvbihleHBy LCBmaWVsZCwgbG9jYXRpb24pOwogfQogCi0vLyBBIGdlbmVyYWwgc2VsZWN0b3IuICBUaGlzIGlz IGEgUGFyc2VyX2V4cHJlc3Npb24gZm9yIExFRlQuTkFNRS4gIEl0Ci0vLyBpcyBsb3dlcmVkIGFm dGVyIHdlIGtub3cgdGhlIHR5cGUgb2YgdGhlIGxlZnQgaGFuZCBzaWRlLgotCi1jbGFzcyBTZWxl Y3Rvcl9leHByZXNzaW9uIDogcHVibGljIFBhcnNlcl9leHByZXNzaW9uCi17Ci0gcHVibGljOgot ICBTZWxlY3Rvcl9leHByZXNzaW9uKEV4cHJlc3Npb24qIGxlZnQsIGNvbnN0IHN0ZDo6c3RyaW5n JiBuYW1lLAotCQkgICAgICBMb2NhdGlvbiBsb2NhdGlvbikKLSAgICA6IFBhcnNlcl9leHByZXNz aW9uKEVYUFJFU1NJT05fU0VMRUNUT1IsIGxvY2F0aW9uKSwKLSAgICAgIGxlZnRfKGxlZnQpLCBu YW1lXyhuYW1lKQotICB7IH0KLQotIHByb3RlY3RlZDoKLSAgaW50Ci0gIGRvX3RyYXZlcnNlKFRy YXZlcnNlKiB0cmF2ZXJzZSkKLSAgeyByZXR1cm4gRXhwcmVzc2lvbjo6dHJhdmVyc2UoJnRoaXMt PmxlZnRfLCB0cmF2ZXJzZSk7IH0KLQotICBFeHByZXNzaW9uKgotICBkb19sb3dlcihHb2dvKiwg TmFtZWRfb2JqZWN0KiwgU3RhdGVtZW50X2luc2VydGVyKiwgaW50KTsKLQotICBFeHByZXNzaW9u KgotICBkb19jb3B5KCkKLSAgewotICAgIHJldHVybiBuZXcgU2VsZWN0b3JfZXhwcmVzc2lvbih0 aGlzLT5sZWZ0Xy0+Y29weSgpLCB0aGlzLT5uYW1lXywKLQkJCQkgICB0aGlzLT5sb2NhdGlvbigp KTsKLSAgfQotCi0gIHZvaWQKLSAgZG9fZHVtcF9leHByZXNzaW9uKEFzdF9kdW1wX2NvbnRleHQq IGFzdF9kdW1wX2NvbnRleHQpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgRXhwcmVzc2lvbioKLSAg bG93ZXJfbWV0aG9kX2V4cHJlc3Npb24oR29nbyopOwotCi0gIC8vIFRoZSBleHByZXNzaW9uIG9u IHRoZSBsZWZ0IGhhbmQgc2lkZS4KLSAgRXhwcmVzc2lvbiogbGVmdF87Ci0gIC8vIFRoZSBuYW1l IG9uIHRoZSByaWdodCBoYW5kIHNpZGUuCi0gIHN0ZDo6c3RyaW5nIG5hbWVfOwotfTsKLQotLy8g TG93ZXIgYSBzZWxlY3RvciBleHByZXNzaW9uIG9uY2Ugd2Uga25vdyB0aGUgcmVhbCB0eXBlIG9m IHRoZSBsZWZ0Ci0vLyBoYW5kIHNpZGUuCi0KLUV4cHJlc3Npb24qCi1TZWxlY3Rvcl9leHByZXNz aW9uOjpkb19sb3dlcihHb2dvKiBnb2dvLCBOYW1lZF9vYmplY3QqLCBTdGF0ZW1lbnRfaW5zZXJ0 ZXIqLAotCQkJICAgICAgaW50KQotewotICBFeHByZXNzaW9uKiBsZWZ0ID0gdGhpcy0+bGVmdF87 Ci0gIGlmIChsZWZ0LT5pc190eXBlX2V4cHJlc3Npb24oKSkKLSAgICByZXR1cm4gdGhpcy0+bG93 ZXJfbWV0aG9kX2V4cHJlc3Npb24oZ29nbyk7Ci0gIHJldHVybiBUeXBlOjpiaW5kX2ZpZWxkX29y X21ldGhvZChnb2dvLCBsZWZ0LT50eXBlKCksIGxlZnQsIHRoaXMtPm5hbWVfLAotCQkJCSAgICB0 aGlzLT5sb2NhdGlvbigpKTsKLX0KLQotLy8gTG93ZXIgYSBtZXRob2QgZXhwcmVzc2lvbiBULk0g b3IgKCpUKS5NLiAgV2UgdHVybiB0aGlzIGludG8gYQotLy8gZnVuY3Rpb24gbGl0ZXJhbC4KLQot RXhwcmVzc2lvbioKLVNlbGVjdG9yX2V4cHJlc3Npb246Omxvd2VyX21ldGhvZF9leHByZXNzaW9u KEdvZ28qIGdvZ28pCi17Ci0gIExvY2F0aW9uIGxvY2F0aW9uID0gdGhpcy0+bG9jYXRpb24oKTsK LSAgVHlwZSogbGVmdF90eXBlID0gdGhpcy0+bGVmdF8tPnR5cGUoKTsKLSAgVHlwZSogdHlwZSA9 IGxlZnRfdHlwZTsKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUodGhpcy0+bmFtZV8pOwotCi0g IGJvb2wgaXNfcG9pbnRlcjsKLSAgaWYgKHR5cGUtPnBvaW50c190bygpID09IE5VTEwpCi0gICAg aXNfcG9pbnRlciA9IGZhbHNlOwotICBlbHNlCi0gICAgewotICAgICAgaXNfcG9pbnRlciA9IHRy dWU7Ci0gICAgICB0eXBlID0gdHlwZS0+cG9pbnRzX3RvKCk7Ci0gICAgfQotCi0gIE5hbWVkX3R5 cGUqIG50ID0gdHlwZS0+bmFtZWRfdHlwZSgpOwotICBTdHJ1Y3RfdHlwZSogc3QgPSB0eXBlLT5z dHJ1Y3RfdHlwZSgpOwotICBib29sIGlzX2FtYmlndW91czsKLSAgTWV0aG9kKiBtZXRob2QgPSBO VUxMOwotICBpZiAobnQgIT0gTlVMTCkKLSAgICBtZXRob2QgPSBudC0+bWV0aG9kX2Z1bmN0aW9u KG5hbWUsICZpc19hbWJpZ3VvdXMpOwotICBlbHNlIGlmIChzdCAhPSBOVUxMKQotICAgIG1ldGhv ZCA9IHN0LT5tZXRob2RfZnVuY3Rpb24obmFtZSwgJmlzX2FtYmlndW91cyk7Ci0gIGNvbnN0IFR5 cGVkX2lkZW50aWZpZXIqIGltZXRob2QgPSBOVUxMOwotICBpZiAobWV0aG9kID09IE5VTEwgJiYg IWlzX3BvaW50ZXIpCi0gICAgewotICAgICAgSW50ZXJmYWNlX3R5cGUqIGl0ID0gdHlwZS0+aW50 ZXJmYWNlX3R5cGUoKTsKLSAgICAgIGlmIChpdCAhPSBOVUxMKQotCWltZXRob2QgPSBpdC0+Zmlu ZF9tZXRob2QobmFtZSk7Ci0gICAgfQotCi0gIGlmICgobWV0aG9kID09IE5VTEwgJiYgaW1ldGhv ZCA9PSBOVUxMKQotICAgICAgfHwgKGxlZnRfdHlwZS0+bmFtZWRfdHlwZSgpICE9IE5VTEwgJiYg bGVmdF90eXBlLT5wb2ludHNfdG8oKSAhPSBOVUxMKSkKLSAgICB7Ci0gICAgICBpZiAobnQgIT0g TlVMTCkKLQl7Ci0JICBpZiAoIWlzX2FtYmlndW91cykKLQkgICAgZ29fZXJyb3JfYXQobG9jYXRp b24sICJ0eXBlICU8JXMlcyU+IGhhcyBubyBtZXRob2QgJTwlcyU+IiwKLQkJCWlzX3BvaW50ZXIg PyAiKiIgOiAiIiwKLQkJCW50LT5tZXNzYWdlX25hbWUoKS5jX3N0cigpLAotCQkJR29nbzo6bWVz c2FnZV9uYW1lKG5hbWUpLmNfc3RyKCkpOwotCSAgZWxzZQotCSAgICBnb19lcnJvcl9hdChsb2Nh dGlvbiwgIm1ldGhvZCAlPCVzJXMlPiBpcyBhbWJpZ3VvdXMgaW4gdHlwZSAlPCVzJT4iLAotCQkJ R29nbzo6bWVzc2FnZV9uYW1lKG5hbWUpLmNfc3RyKCksCi0JCQlpc19wb2ludGVyID8gIioiIDog IiIsCi0JCQludC0+bWVzc2FnZV9uYW1lKCkuY19zdHIoKSk7Ci0JfQotICAgICAgZWxzZQotCXsK LQkgIGlmICghaXNfYW1iaWd1b3VzKQotCSAgICBnb19lcnJvcl9hdChsb2NhdGlvbiwgInR5cGUg aGFzIG5vIG1ldGhvZCAlPCVzJT4iLAotCQkJR29nbzo6bWVzc2FnZV9uYW1lKG5hbWUpLmNfc3Ry KCkpOwotCSAgZWxzZQotCSAgICBnb19lcnJvcl9hdChsb2NhdGlvbiwgIm1ldGhvZCAlPCVzJT4g aXMgYW1iaWd1b3VzIiwKLQkJCUdvZ286Om1lc3NhZ2VfbmFtZShuYW1lKS5jX3N0cigpKTsKLQl9 Ci0gICAgICByZXR1cm4gRXhwcmVzc2lvbjo6bWFrZV9lcnJvcihsb2NhdGlvbik7Ci0gICAgfQot Ci0gIGlmIChtZXRob2QgIT0gTlVMTCAmJiAhaXNfcG9pbnRlciAmJiAhbWV0aG9kLT5pc192YWx1 ZV9tZXRob2QoKSkKLSAgICB7Ci0gICAgICBnb19lcnJvcl9hdChsb2NhdGlvbiwgIm1ldGhvZCBy ZXF1aXJlcyBwb2ludGVyICh1c2UgJTwoKiVzKS4lcyU+KSIsCi0gICAgICAgICAgICAgICAgICBu dC0+bWVzc2FnZV9uYW1lKCkuY19zdHIoKSwKLSAgICAgICAgICAgICAgICAgIEdvZ286Om1lc3Nh Z2VfbmFtZShuYW1lKS5jX3N0cigpKTsKLSAgICAgIHJldHVybiBFeHByZXNzaW9uOjptYWtlX2Vy cm9yKGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgLy8gQnVpbGQgYSBuZXcgZnVuY3Rpb24gdHlwZSBp biB3aGljaCB0aGUgcmVjZWl2ZXIgYmVjb21lcyB0aGUgZmlyc3QKLSAgLy8gYXJndW1lbnQuCi0g IEZ1bmN0aW9uX3R5cGUqIG1ldGhvZF90eXBlOwotICBpZiAobWV0aG9kICE9IE5VTEwpCi0gICAg ewotICAgICAgbWV0aG9kX3R5cGUgPSBtZXRob2QtPnR5cGUoKTsKLSAgICAgIGdvX2Fzc2VydCht ZXRob2RfdHlwZS0+aXNfbWV0aG9kKCkpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIG1l dGhvZF90eXBlID0gaW1ldGhvZC0+dHlwZSgpLT5mdW5jdGlvbl90eXBlKCk7Ci0gICAgICBnb19h c3NlcnQobWV0aG9kX3R5cGUgIT0gTlVMTCAmJiAhbWV0aG9kX3R5cGUtPmlzX21ldGhvZCgpKTsK LSAgICB9Ci0KLSAgY29uc3QgY2hhciogY29uc3QgcmVjZWl2ZXJfbmFtZSA9ICIkdGhpcyI7Ci0g IFR5cGVkX2lkZW50aWZpZXJfbGlzdCogcGFyYW1ldGVycyA9IG5ldyBUeXBlZF9pZGVudGlmaWVy X2xpc3QoKTsKLSAgcGFyYW1ldGVycy0+cHVzaF9iYWNrKFR5cGVkX2lkZW50aWZpZXIocmVjZWl2 ZXJfbmFtZSwgdGhpcy0+bGVmdF8tPnR5cGUoKSwKLQkJCQkJIGxvY2F0aW9uKSk7Ci0KLSAgY29u c3QgVHlwZWRfaWRlbnRpZmllcl9saXN0KiBtZXRob2RfcGFyYW1ldGVycyA9IG1ldGhvZF90eXBl LT5wYXJhbWV0ZXJzKCk7Ci0gIGlmIChtZXRob2RfcGFyYW1ldGVycyAhPSBOVUxMKQotICAgIHsK LSAgICAgIGludCBpID0gMDsKLSAgICAgIGZvciAoVHlwZWRfaWRlbnRpZmllcl9saXN0Ojpjb25z dF9pdGVyYXRvciBwID0gbWV0aG9kX3BhcmFtZXRlcnMtPmJlZ2luKCk7Ci0JICAgcCAhPSBtZXRo b2RfcGFyYW1ldGVycy0+ZW5kKCk7Ci0JICAgKytwLCArK2kpCi0JewotCSAgaWYgKCFwLT5uYW1l KCkuZW1wdHkoKSAmJiAhR29nbzo6aXNfc2lua19uYW1lKHAtPm5hbWUoKSkpCi0JICAgIHBhcmFt ZXRlcnMtPnB1c2hfYmFjaygqcCk7Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBjaGFyIGJ1Zlsy MF07Ci0JICAgICAgc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJHBhcmFtJWQiLCBpKTsKLQkg ICAgICBwYXJhbWV0ZXJzLT5wdXNoX2JhY2soVHlwZWRfaWRlbnRpZmllcihidWYsIHAtPnR5cGUo KSwKLQkJCQkJCSAgICAgcC0+bG9jYXRpb24oKSkpOwotCSAgICB9Ci0JfQotICAgIH0KLQotICBj b25zdCBUeXBlZF9pZGVudGlmaWVyX2xpc3QqIG1ldGhvZF9yZXN1bHRzID0gbWV0aG9kX3R5cGUt PnJlc3VsdHMoKTsKLSAgVHlwZWRfaWRlbnRpZmllcl9saXN0KiByZXN1bHRzOwotICBpZiAobWV0 aG9kX3Jlc3VsdHMgPT0gTlVMTCkKLSAgICByZXN1bHRzID0gTlVMTDsKLSAgZWxzZQotICAgIHsK LSAgICAgIHJlc3VsdHMgPSBuZXcgVHlwZWRfaWRlbnRpZmllcl9saXN0KCk7Ci0gICAgICBmb3Ig KFR5cGVkX2lkZW50aWZpZXJfbGlzdDo6Y29uc3RfaXRlcmF0b3IgcCA9IG1ldGhvZF9yZXN1bHRz LT5iZWdpbigpOwotCSAgIHAgIT0gbWV0aG9kX3Jlc3VsdHMtPmVuZCgpOwotCSAgICsrcCkKLQly ZXN1bHRzLT5wdXNoX2JhY2soKnApOwotICAgIH0KLQotICBGdW5jdGlvbl90eXBlKiBmbnR5cGUg PSBUeXBlOjptYWtlX2Z1bmN0aW9uX3R5cGUoTlVMTCwgcGFyYW1ldGVycywgcmVzdWx0cywKLQkJ CQkJCSAgIGxvY2F0aW9uKTsKLSAgaWYgKG1ldGhvZF90eXBlLT5pc192YXJhcmdzKCkpCi0gICAg Zm50eXBlLT5zZXRfaXNfdmFyYXJncygpOwotCi0gIC8vIFdlIGdlbmVyYXRlIG1ldGhvZHMgd2hp Y2ggYWx3YXlzIHRha2VzIGEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZXIKLSAgLy8gYXMgdGhlaXIg Zmlyc3QgYXJndW1lbnQuICBJZiB0aGlzIGlzIGZvciBhIHBvaW50ZXIgdHlwZSwgd2UgY2FuCi0g IC8vIHNpbXBseSByZXVzZSB0aGUgZXhpc3RpbmcgZnVuY3Rpb24uICBXZSB1c2UgYW4gaW50ZXJu YWwgaGFjayB0bwotICAvLyBnZXQgdGhlIHJpZ2h0IHR5cGUuCi0gIC8vIEZJWE1FOiBUaGlzIG9w dGltaXphdGlvbiBpcyBkaXNhYmxlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgeWV0IHdvcmsKLSAgLy8g d2l0aCBmdW5jdGlvbiBkZXNjcmlwdG9ycyB3aGVuIHRoZSBtZXRob2QgZXhwcmVzc2lvbiBpcyBu b3QKLSAgLy8gZGlyZWN0bHkgY2FsbGVkLgotICBpZiAobWV0aG9kICE9IE5VTEwgJiYgaXNfcG9p bnRlciAmJiBmYWxzZSkKLSAgICB7Ci0gICAgICBOYW1lZF9vYmplY3QqIG1ubyA9IChtZXRob2Qt Pm5lZWRzX3N0dWJfbWV0aG9kKCkKLQkJCSAgID8gbWV0aG9kLT5zdHViX29iamVjdCgpCi0JCQkg ICA6IG1ldGhvZC0+bmFtZWRfb2JqZWN0KCkpOwotICAgICAgRXhwcmVzc2lvbiogZiA9IEV4cHJl c3Npb246Om1ha2VfZnVuY19yZWZlcmVuY2UobW5vLCBOVUxMLCBsb2NhdGlvbik7Ci0gICAgICBm ID0gRXhwcmVzc2lvbjo6bWFrZV9jYXN0KGZudHlwZSwgZiwgbG9jYXRpb24pOwotICAgICAgVHlw ZV9jb252ZXJzaW9uX2V4cHJlc3Npb24qIHRjZSA9Ci0Jc3RhdGljX2Nhc3Q8VHlwZV9jb252ZXJz aW9uX2V4cHJlc3Npb24qPihmKTsKLSAgICAgIHRjZS0+c2V0X21heV9jb252ZXJ0X2Z1bmN0aW9u X3R5cGVzKCk7Ci0gICAgICByZXR1cm4gZjsKLSAgICB9Ci0KLSAgTmFtZWRfb2JqZWN0KiBubyA9 IGdvZ28tPnN0YXJ0X2Z1bmN0aW9uKGdvZ28tPnRodW5rX25hbWUoKSwgZm50eXBlLCBmYWxzZSwK LQkJCQkJICBsb2NhdGlvbik7Ci0KLSAgTmFtZWRfb2JqZWN0KiB2bm8gPSBnb2dvLT5sb29rdXAo cmVjZWl2ZXJfbmFtZSwgTlVMTCk7Ci0gIGdvX2Fzc2VydCh2bm8gIT0gTlVMTCk7Ci0gIEV4cHJl c3Npb24qIHZlID0gRXhwcmVzc2lvbjo6bWFrZV92YXJfcmVmZXJlbmNlKHZubywgbG9jYXRpb24p OwotICBFeHByZXNzaW9uKiBibTsKLSAgaWYgKG1ldGhvZCAhPSBOVUxMKQotICAgIGJtID0gVHlw ZTo6YmluZF9maWVsZF9vcl9tZXRob2QoZ29nbywgdHlwZSwgdmUsIG5hbWUsIGxvY2F0aW9uKTsK LSAgZWxzZQotICAgIGJtID0gRXhwcmVzc2lvbjo6bWFrZV9pbnRlcmZhY2VfZmllbGRfcmVmZXJl bmNlKHZlLCBuYW1lLCBsb2NhdGlvbik7Ci0KLSAgLy8gRXZlbiB0aG91Z2ggd2UgZm91bmQgdGhl IG1ldGhvZCBhYm92ZSwgaWYgaXQgaGFzIGFuIGVycm9yIHR5cGUgd2UKLSAgLy8gbWF5IHNlZSBh biBlcnJvciBoZXJlLgotICBpZiAoYm0tPmlzX2Vycm9yX2V4cHJlc3Npb24oKSkKLSAgICB7Ci0g ICAgICBnb2dvLT5maW5pc2hfZnVuY3Rpb24obG9jYXRpb24pOwotICAgICAgcmV0dXJuIGJtOwot ICAgIH0KLQotICBFeHByZXNzaW9uX2xpc3QqIGFyZ3M7Ci0gIGlmIChwYXJhbWV0ZXJzLT5zaXpl KCkgPD0gMSkKLSAgICBhcmdzID0gTlVMTDsKLSAgZWxzZQotICAgIHsKLSAgICAgIGFyZ3MgPSBu ZXcgRXhwcmVzc2lvbl9saXN0KCk7Ci0gICAgICBUeXBlZF9pZGVudGlmaWVyX2xpc3Q6OmNvbnN0 X2l0ZXJhdG9yIHAgPSBwYXJhbWV0ZXJzLT5iZWdpbigpOwotICAgICAgKytwOwotICAgICAgZm9y ICg7IHAgIT0gcGFyYW1ldGVycy0+ZW5kKCk7ICsrcCkKLQl7Ci0JICB2bm8gPSBnb2dvLT5sb29r dXAocC0+bmFtZSgpLCBOVUxMKTsKLQkgIGdvX2Fzc2VydCh2bm8gIT0gTlVMTCk7Ci0JICBhcmdz LT5wdXNoX2JhY2soRXhwcmVzc2lvbjo6bWFrZV92YXJfcmVmZXJlbmNlKHZubywgbG9jYXRpb24p KTsKLQl9Ci0gICAgfQotCi0gIGdvZ28tPnN0YXJ0X2Jsb2NrKGxvY2F0aW9uKTsKLQotICBDYWxs X2V4cHJlc3Npb24qIGNhbGwgPSBFeHByZXNzaW9uOjptYWtlX2NhbGwoYm0sIGFyZ3MsCi0JCQkJ CQltZXRob2RfdHlwZS0+aXNfdmFyYXJncygpLAotCQkJCQkJbG9jYXRpb24pOwotCi0gIFN0YXRl bWVudCogcyA9IFN0YXRlbWVudDo6bWFrZV9yZXR1cm5fZnJvbV9jYWxsKGNhbGwsIGxvY2F0aW9u KTsKLSAgZ29nby0+YWRkX3N0YXRlbWVudChzKTsKLQotICBCbG9jayogYiA9IGdvZ28tPmZpbmlz aF9ibG9jayhsb2NhdGlvbik7Ci0KLSAgZ29nby0+YWRkX2Jsb2NrKGIsIGxvY2F0aW9uKTsKLQot ICAvLyBMb3dlciB0aGUgY2FsbCBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSByZXN1bHRzLgot ICBnb2dvLT5sb3dlcl9ibG9jayhubywgYik7Ci0gIGdvZ28tPmZsYXR0ZW5fYmxvY2sobm8sIGIp OwotCi0gIGdvZ28tPmZpbmlzaF9mdW5jdGlvbihsb2NhdGlvbik7Ci0KLSAgcmV0dXJuIEV4cHJl c3Npb246Om1ha2VfZnVuY19yZWZlcmVuY2Uobm8sIE5VTEwsIGxvY2F0aW9uKTsKLX0KLQotLy8g RHVtcCB0aGUgYXN0IGZvciBhIHNlbGVjdG9yIGV4cHJlc3Npb24uCi0KLXZvaWQKLVNlbGVjdG9y X2V4cHJlc3Npb246OmRvX2R1bXBfZXhwcmVzc2lvbihBc3RfZHVtcF9jb250ZXh0KiBhc3RfZHVt cF9jb250ZXh0KQotICAgIGNvbnN0Ci17Ci0gIGFzdF9kdW1wX2NvbnRleHQtPmR1bXBfZXhwcmVz c2lvbih0aGlzLT5sZWZ0Xyk7Ci0gIGFzdF9kdW1wX2NvbnRleHQtPm9zdHJlYW0oKSA8PCAiLiI7 Ci0gIGFzdF9kdW1wX2NvbnRleHQtPm9zdHJlYW0oKSA8PCB0aGlzLT5uYW1lXzsKLX0KLQotLy8g TWFrZSBhIHNlbGVjdG9yIGV4cHJlc3Npb24uCi0KLUV4cHJlc3Npb24qCi1FeHByZXNzaW9uOjpt YWtlX3NlbGVjdG9yKEV4cHJlc3Npb24qIGxlZnQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAot CQkJICBMb2NhdGlvbiBsb2NhdGlvbikKLXsKLSAgcmV0dXJuIG5ldyBTZWxlY3Rvcl9leHByZXNz aW9uKGxlZnQsIG5hbWUsIGxvY2F0aW9uKTsKLX0KLQogLy8gQ2xhc3MgQWxsb2NhdGlvbl9leHBy ZXNzaW9uLgogCiBpbnQK --000000000000722ece060868be33--