<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>165888</bug_id>
          
          <creation_ts>2016-12-14 19:35:53 -0800</creation_ts>
          <short_desc>WebAssembly: implement init_expr for Element</short_desc>
          <delta_ts>2017-03-06 18:10:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>clopez</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1260025</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-14 19:35:53 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261759</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-12-20 14:23:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/29760199&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283358</commentid>
    <comment_count>2</comment_count>
      <attachid>303375</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-03 18:46:46 -0800</bug_when>
    <thetext>Created attachment 303375
WIP

Needs a test. Also contains part of another patch inside of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283599</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-05 10:55:56 -0800</bug_when>
    <thetext>*** Bug 169183 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283607</commentid>
    <comment_count>4</comment_count>
      <attachid>303460</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-05 11:36:31 -0800</bug_when>
    <thetext>Created attachment 303460
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283678</commentid>
    <comment_count>5</comment_count>
      <attachid>303460</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-03-05 19:22:31 -0800</bug_when>
    <thetext>Comment on attachment 303460
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=303460&amp;action=review

r=me with a comment.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:442
&gt; +        WASM_PARSER_FAIL_IF(initExprType != I32, elementNum, &quot;th Element init_expr must produce an i32&quot;);

typo: the*

I think I would say &quot;Element init_expr must return an i32&quot; though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1283918</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-06 13:44:44 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/213465</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284045</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-03-06 16:20:35 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; landed in:
&gt; https://trac.webkit.org/changeset/213465

This has caused the test wasm.yaml/wasm/js-api/element.js to fail:


https://build.webkit.org/builders/Apple%20El%20Capitan%20Release%20JSC%20%28Tests%29/builds/12917/steps/jscore-test/logs/stdio

Running wasm.yaml/wasm/js-api/globals-export.js.default-wasm
wasm.yaml/wasm/js-api/element.js.default-wasm: Exception: Error: Expected to throw a CompileError with message &quot;WebAssembly.Module doesn&apos;t parse at byte 58 / 72: 0th Element init_expr must produce an i32&quot;, got Error with message &quot;WebAssembly.Module doesn&apos;t parse at byte 58 / 72: Element init_expr must produce an i32 (evaluating &apos;new WebAssembly.Module(bin)&apos;)&quot;
wasm.yaml/wasm/js-api/element.js.default-wasm: _fail@/Volumes/Data/slave/elcapitan-release-tests-jsc/build/WebKitBuild/Release/jsc-stress-results/.tests/wasm.yaml/wasm/assert.js:27:20
wasm.yaml/wasm/js-api/element.js.default-wasm: _throws@/Volumes/Data/slave/elcapitan-release-tests-jsc/build/WebKitBuild/Release/jsc-stress-results/.tests/wasm.yaml/wasm/assert.js:128:14
wasm.yaml/wasm/js-api/element.js.default-wasm: module code@/Volumes/Data/slave/elcapitan-release-tests-jsc/build/WebKitBuild/Release/jsc-stress-results/.tests/wasm.yaml/wasm/js-api/element.js:218:18
wasm.yaml/wasm/js-api/element.js.default-wasm: evaluate@[native code]
wasm.yaml/wasm/js-api/element.js.default-wasm: moduleEvaluation@[native code]
wasm.yaml/wasm/js-api/element.js.default-wasm: [native code]
wasm.yaml/wasm/js-api/element.js.default-wasm: promiseReactionJob@[native code]
Running wasm.yaml/wasm/js-api/globals-import.js.default-wasm
wasm.yaml/wasm/js-api/element.js.default-wasm: ERROR: Unexpected exit code: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284083</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-06 17:36:13 -0800</bug_when>
    <thetext>Will fix now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284095</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-06 18:10:54 -0800</bug_when>
    <thetext>Landed fix in:
https://trac.webkit.org/changeset/213484</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303375</attachid>
            <date>2017-03-03 18:46:46 -0800</date>
            <delta_ts>2017-03-05 11:36:31 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>27664</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMTMzNzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyMyw3ICsxMDIzLDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZW9wdGltaXphdGlvblJldHJ5Q291bnQoRXhl
Y1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblRy
YW5zZmVyQXJyYXlCdWZmZXIoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkZhaWxOZXh0TmV3Q29kZUJsb2NrKEV4ZWNTdGF0ZSopOwotc3Rh
dGljIE5PX1JFVFVSTl9XSVRIX1ZBTFVFIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25RdWl0KEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSopOwogc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkFib3J0KEV4ZWNTdGF0ZSop
Owogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GYWxzZTEoRXhl
Y1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkZh
bHNlMihFeGVjU3RhdGUqKTsKQEAgLTI3MjIsNiArMjcyMiw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25GYWkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblF1aXQoRXhlY1N0YXRlKikKIHsKKyAgICBkYXRhTG9nTG4oIkV4aXRpbmchIik7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBqc2NFeGl0KEVY
SVRfU1VDQ0VTUyk7CiAKICNpZiBDT01QSUxFUihNU1ZDKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5jcHAJKHJldmlzaW9uIDIxMzM3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKKyNp
bmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCiAjaW5j
bHVkZSAiV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5oIgogCkBAIC00Miw2ICs0Myw3IEBA
IFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRSgKIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYyhFeGVjU3RhdGUqKTsKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlDb21waWxlRnVuYyhFeGVjU3Rh
dGUqKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlJbnN0YW50aWF0
ZUZ1bmMoRXhlY1N0YXRlKik7CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNz
ZW1ibHlDb21waWxlRnVuYyhFeGVjU3RhdGUqIGV4ZWMpCiB7CkBAIC02NCw2ICs2Niw0NyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShwcm9taXNlLT5wcm9taXNlKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHdlYkFzc2VtYmx5SW5zdGFudGlhdGVGdW5jKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworCisgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2UgPSBKU1By
b21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihjYXRjaFNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KworICAgIC8vIEZJWE1FOiBzdXBwb3J0IHRoZSBub24gYXJyYXkgYnVmZmVyIG92ZXJmbG9hZCBv
ZiB0aGlzLgorICAgIEpTVmFsdWUgbW9kdWxlID0gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
cjo6Y3JlYXRlTW9kdWxlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNz
ZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CisgICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0aW9uID0g
Y2F0Y2hTY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZhbHVlKCkp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7Cisg
ICAgfQorCisKKyAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7
CisgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgp
OworICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0
KSB7CisgICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywK
KyAgICAgICAgICAgIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5
Lmluc3RhbnRpYXRlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291
cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSk7CisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocHJvbWlzZS0+cHJvbWlzZSgpKTsKKyAgICB9CisK
KyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yOjpjcmVhdGVJbnN0YW5jZShleGVjLCBqc0Nhc3Q8SlNXZWJBc3NlbWJseU1v
ZHVsZSo+KG1vZHVsZSksIGltcG9ydE9iamVjdCk7CisgICAgaWYgKEV4Y2VwdGlvbiogZXhjZXB0
aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICBjYXRjaFNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgICAgIHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24tPnZh
bHVlKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2Uo
KSk7CisgICAgfQorCisgICAgZGF0YUxvZ0xuKCJDcmVhdGluZyBpbnN0YW5jZS9tb2R1bGUgcHJv
bWlzZSEiKTsKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhl
Yyk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCBBU0NJSUxpdGVyYWwoIm1vZHVsZSIpKSwgbW9kdWxlKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiaW5zdGFuY2Ui
KSksIGluc3RhbmNlKTsKKyAgICBwcm9taXNlLT5yZXNvbHZlKGV4ZWMsIHJlc3VsdCk7CisKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb21pc2UtPnByb21pc2UoKSk7Cit9CisKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlWYWxpZGF0ZUZ1bmMoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC05OSw2ICsxNDIsNyBAQCB2
b2lkIEpTV2ViQXNzZW1ibHk6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTigidmFsaWRhdGUiLCB3ZWJBc3NlbWJseVZhbGlkYXRlRnVuYywgRG9udEVudW0sIDEpOwog
ICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJjb21waWxlIiwgd2Vi
QXNzZW1ibHlDb21waWxlRnVuYywgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJ
T05fV0lUSE9VVF9UUkFOU0lUSU9OKCJpbnN0YW50aWF0ZSIsIHdlYkFzc2VtYmx5SW5zdGFudGlh
dGVGdW5jLCBEb250RW51bSwgMSk7CiB9CiAKIEpTV2ViQXNzZW1ibHk6OkpTV2ViQXNzZW1ibHko
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgJKHJldmlzaW9uIDIxMzM3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSwxMSBA
QCBzdHJ1Y3QgU2VnbWVudCB7CiB9OwogCiBzdHJ1Y3QgRWxlbWVudCB7Ci0gICAgdWludDMyX3Qg
b2Zmc2V0OworICAgIEVsZW1lbnQoSTMySW5pdEV4cHIgb2Zmc2V0KQorICAgICAgICA6IG9mZnNl
dChvZmZzZXQpCisgICAgeyB9CisKKyAgICBJMzJJbml0RXhwciBvZmZzZXQ7CiAgICAgVmVjdG9y
PHVpbnQzMl90PiBmdW5jdGlvbkluZGljZXM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2aXNpb24gMjEzMzc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzMSwxOSArNDMxLDIwIEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZUVs
ZW1lbnQoKSAtPiBQYXIKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX3Jlc3VsdC5tb2R1bGUt
PmVsZW1lbnRzLnRyeVJlc2VydmVDYXBhY2l0eShlbGVtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2Nh
dGUgbWVtb3J5IGZvciAiLCBlbGVtZW50Q291bnQsICIgRWxlbWVudHMiKTsKICAgICBmb3IgKHVu
c2lnbmVkIGVsZW1lbnROdW0gPSAwOyBlbGVtZW50TnVtIDwgZWxlbWVudENvdW50OyArK2VsZW1l
bnROdW0pIHsKICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleDsKLSAgICAgICAgdWludDY0X3Qg
b2Zmc2V0OworICAgICAgICB1aW50NjRfdCBpbml0RXhwckJpdHM7CiAgICAgICAgIHVpbnQ4X3Qg
aW5pdE9wY29kZTsKICAgICAgICAgdWludDMyX3QgaW5kZXhDb3VudDsKIAogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCAi
LCBlbGVtZW50TnVtLCAidGggRWxlbWVudCB0YWJsZSBpbmRleCIpOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHRhYmxlSW5kZXgsICJFbGVtZW50IHNlY3Rpb24gY2FuIG9ubHkgaGF2ZSBv
bmUgVGFibGUgZm9yIG5vdyIpOwogICAgICAgICBUeXBlIGluaXRFeHByVHlwZTsKLSAgICAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIG9mZnNl
dCwgaW5pdEV4cHJUeXBlKSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5pdE9wY29k
ZSAhPSBPcFR5cGU6OkkzMkNvbnN0LCAiRWxlbWVudCBzZWN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBu
b24taTMyIGluaXRfZXhwciBvcGNvZGUgZm9yIG5vdywgZ290ICIsIGluaXRPcGNvZGUpOworICAg
ICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlSW5pdEV4cHIoaW5pdE9wY29kZSwg
aW5pdEV4cHJCaXRzLCBpbml0RXhwclR5cGUpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihpbml0RXhwclR5cGUgIT0gSTMyLCBlbGVtZW50TnVtLCAidGggRWxlbWVudCBpbml0X2V4cHIg
bXVzdCBwcm9kdWNlIGFuIGkzMiIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihpbmRleENvdW50KSwgImNhbid0IGdldCAiLCBlbGVtZW50TnVtLCAidGggaW5k
ZXggY291bnQgZm9yIEVsZW1lbnQgc2VjdGlvbiIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGluZGV4Q291bnQgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAi
RWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGluZGV4IGNvdW50IGlzIHRvbyBi
aWcgIiwgaW5kZXhDb3VudCk7CiAKICAgICAgICAgQVNTRVJUKCEhbV9yZXN1bHQubW9kdWxlLT50
YWJsZUluZm9ybWF0aW9uKTsKKyAgICAgICAgLyoKICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8
dWludDMyX3Q+IG1heGltdW0gPSBtX3Jlc3VsdC5tb2R1bGUtPnRhYmxlSW5mb3JtYXRpb24ubWF4
aW11bSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGluZGV4Q291bnQgYmVpbmcg
emVybyBiZSBhIHZhbGlkYXRpb24gZXJyb3I/CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODI2CkBAIC00NTUsMTIgKzQ1NiwxMSBAQCBh
dXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KCkgLT4gUGFyCiAgICAgICAgICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihsYXN0V3JpdHRlbkluZGV4ID49IHN0YXRpY19jYXN0PHVpbnQ2
NF90PigqbWF4aW11bSksICJFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxl
bWVudCB3cml0ZXMgdG8gaW5kZXggIiwgbGFzdFdyaXR0ZW5JbmRleCwgIiB3aGljaCBleGNlZWRz
IHRoZSBtYXhpbXVtICIsICptYXhpbXVtKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAg
ICAgICAqLwogCi0gICAgICAgIEVsZW1lbnQgZWxlbWVudDsKKyAgICAgICAgRWxlbWVudCBlbGVt
ZW50IHsgbWFrZUkzMkluaXRFeHByKGluaXRPcGNvZGUsIGluaXRFeHByQml0cykgfTsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGluZGV4Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBpbmRl
eENvdW50LCAiIEVsZW1lbnQgaW5kaWNlcyIpOwogCi0gICAgICAgIGVsZW1lbnQub2Zmc2V0ID0g
b2Zmc2V0OwotCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGluZGV4
Q291bnQ7ICsraW5kZXgpIHsKICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAg
ICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvbklu
ZGV4KSwgImNhbid0IGdldCBFbGVtZW50IHNlY3Rpb24ncyAiLCBlbGVtZW50TnVtLCAidGggZWxl
bWVudCdzICIsIGluZGV4LCAidGggaW5kZXgiKTsKQEAgLTUzNiwxMiArNTM2LDEzIEBAIGF1dG8g
TW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QKICAgICBjYXNlIEdldEdsb2JhbDog
ewogICAgICAgICB1aW50MzJfdCBpbmRleDsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIoaW5kZXgpLCAiY2FuJ3QgZ2V0IGdldF9nbG9iYWwncyBpbmRleCIpOwot
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+aW1w
b3J0cy5zaXplKCksICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUg
bnVtYmVyIG9mIGltcG9ydHMgIiwgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzLnNpemUoKSk7Ci0g
ICAgICAgIGNvbnN0IEltcG9ydCYgaW1wb3J0ID0gbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzW2lu
ZGV4XTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX3Jlc3VsdC5tb2R1bGUtPmltcG9y
dHNbaW5kZXhdLmtpbmQgIT0gRXh0ZXJuYWxLaW5kOjpHbG9iYWwsICJnZXRfZ2xvYmFsJ3MgaW1w
b3J0IGtpbmQgaXMgIiwgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzW2luZGV4XS5raW5kLCAiIHNo
b3VsZCBiZSBnbG9iYWwiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnQua2lu
ZEluZGV4ID49IG1fcmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgImdldF9nbG9i
YWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW1wb3J0LmtpbmRJbmRleCwgIiBleGNlZWRzIHRoZSBm
aXJzdCBpbnRlcm5hbCBnbG9iYWwgIiwgbV9yZXN1bHQubW9kdWxlLT5maXJzdEludGVybmFsR2xv
YmFsKTsKKyAgICAgICAgLy9XQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1fcmVzdWx0Lm1v
ZHVsZS0+aW1wb3J0cy5zaXplKCksICJnZXRfZ2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhj
ZWVkcyB0aGUgbnVtYmVyIG9mIGltcG9ydHMgIiwgbV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzLnNp
emUoKSk7CisgICAgICAgIC8vY29uc3QgSW1wb3J0JiBpbXBvcnQgPSBtX3Jlc3VsdC5tb2R1bGUt
PmltcG9ydHNbaW5kZXhdOworICAgICAgICAvL1dBU01fUEFSU0VSX0ZBSUxfSUYobV9yZXN1bHQu
bW9kdWxlLT5pbXBvcnRzW2luZGV4XS5raW5kICE9IEV4dGVybmFsS2luZDo6R2xvYmFsLCAiZ2V0
X2dsb2JhbCdzIGltcG9ydCBraW5kIGlzICIsIG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0c1tpbmRl
eF0ua2luZCwgIiBzaG91bGQgYmUgZ2xvYmFsIik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoaW5kZXggPj0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzLnNpemUoKSwgImdldF9nbG9iYWwn
cyBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBudW1iZXIgb2YgaW1wb3J0cyAiLCBtX3Jl
c3VsdC5tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihpbmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwsICJnZXRfZ2xv
YmFsIGltcG9ydCBraW5kIGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMgdGhlIGZpcnN0IGludGVy
bmFsIGdsb2JhbCAiLCBtX3Jlc3VsdC5tb2R1bGUtPmZpcnN0SW50ZXJuYWxHbG9iYWwpOwogCi0g
ICAgICAgIEFTU0VSVChtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0u
bXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0YWJsZSk7CisgICAgICAgIEFTU0VSVChtX3Jlc3Vs
dC5tb2R1bGUtPmdsb2JhbHNbaW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUp
OwogICAgICAgICByZXN1bHRUeXBlID0gbV9yZXN1bHQubW9kdWxlLT5nbG9iYWxzW2luZGV4XS50
eXBlOwogICAgICAgICBiaXRzT3JJbXBvcnROdW1iZXIgPSBpbmRleDsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjEzMzc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDYgKzQ4LDcgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RnVuY3Rpb246OnNfaQogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCiB7CisKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2
bSwgZXhlYy0+anNDYWxsZWUoKSk7CkBAIC0xMTgsNiArMTE5LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogcHJl
dkpTV2ViQXNzZW1ibHlJbnN0YW5jZSA9IHZtLnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKICAg
ICB2bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7
CiAgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKSk7CisgICAgZGF0YUxvZ0xuKCJD
YWxsaW5nIHdhc20gZnVuY3Rpb24hIik7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0g
dm1FbnRyeVRvV2FzbSh3YXNtRnVuY3Rpb24tPmpzRW50cnlwb2ludCgpLCAmdm0sICZwcm90b0Nh
bGxGcmFtZSk7CiAgICAgdm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlID0gcHJldkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTMzNzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywzMyArNTcsNDUgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogewogICAgIGF1dG8mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRv
KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBJ
ZiBtb2R1bGVPYmplY3QgaXMgbm90IGEgV2ViQXNzZW1ibHkuTW9kdWxlIGluc3RhbmNlLCBhIFR5
cGVFcnJvciBpcyB0aHJvd24uCiAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUgPSBq
c0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPih2bSwgZXhlYy0+YXJndW1lbnQoMCkp
OwogICAgIGlmICghanNNb2R1bGUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiZmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBh
IFdlYkFzc2VtYmx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBl
Rm9yVmFsdWUoZXhlYy0+YXJndW1lbnQoMCkpKSkpOwotICAgIGNvbnN0IFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlv
bigpOwogCiAgICAgLy8gSWYgdGhlIGltcG9ydE9iamVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVm
aW5lZCBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlz
IHRocm93bi4KICAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMSk7
CiAgICAgSlNPYmplY3QqIGltcG9ydE9iamVjdCA9IGltcG9ydEFyZ3VtZW50LmdldE9iamVjdCgp
OwogICAgIGlmICghaW1wb3J0QXJndW1lbnQuaXNVbmRlZmluZWQoKSAmJiAhaW1wb3J0T2JqZWN0
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1
bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmpl
Y3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFy
Z3VtZW50KSkpKTsKKyAgICAKKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5z
dGFuY2UoZXhlYywganNNb2R1bGUsIGltcG9ydE9iamVjdCkpOworfQorCitKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSwgSlNPYmplY3Qq
IGltcG9ydE9iamVjdCkKK3sKKyAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworCisgICAgY29uc3QgV2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCk7CiAKICAgICAvLyBJZiB0aGUgbGlzdCBvZiBtb2R1bGUuaW1wb3J0cyBpcyBub3Qg
ZW1wdHkgYW5kIFR5cGUoaW1wb3J0T2JqZWN0KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJvciBp
cyB0aHJvd24uCi0gICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpICYmICFp
bXBvcnRPYmplY3QpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
c2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgT2JqZWN0IGJl
Y2F1c2UgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSBoYXMgaW1wb3J0cyIpLCBkZWZhdWx0U291cmNl
QXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgIGlm
IChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSAmJiAhaW1wb3J0T2JqZWN0KSB7Cisg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoImNhbid0IG1ha2UgV2ViQXNzZW1ibHkuSW5zdGFuY2UgYmVjYXVz
ZSB0aGVyZSBpcyBubyBpbXBvcnRzIE9iamVjdCBhbmQgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSBy
ZXF1aXJlcyBpbXBvcnRzIikpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogCiAg
ICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJZGVudGlmaWVyOjpmcm9tVWlkKFByaXZhdGVOYW1l
KFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwgIldlYkFzc2VtYmx5SW5zdGFuY2UiKSk7CiAgICAg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAgU3RydWN0dXJlKiBp
bnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5SW5z
dGFuY2VTdHJ1Y3R1cmUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwogCiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwganNNb2R1bGUsIG1v
ZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgewogICAgICAgICAvLyBBbHdheXMgc3Rh
cnQgd2l0aCBhIGR1bW15IE1lbW9yeSwgc28gdGhhdCB3YXNtIC0+IHdhc20gdGh1bmtzIGF2b2lk
IGNoZWNraW5nIGZvciBhIG51bGxwdHIgTWVtb3J5IHdoZW4gdHJ5aW5nIHRvIHNldCBwaW5uZWQg
cmVnaXN0ZXJzLgogICAgICAgICBXYXNtOjpNZW1vcnkgbWVtb3J5OwpAQCAtMTAxLDMwICsxMTMs
MzYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIGZvciAo
YXV0byYgaW1wb3J0IDogbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cykgewogICAgICAgICAvLyAx
LiBMZXQgbyBiZSB0aGUgcmVzdWx0YW50IHZhbHVlIG9mIHBlcmZvcm1pbmcgR2V0KGltcG9ydE9i
amVjdCwgaS5tb2R1bGVfbmFtZSkuCiAgICAgICAgIEpTVmFsdWUgaW1wb3J0TW9kdWxlVmFsdWUg
PSBpbXBvcnRPYmplY3QtPmdldChleGVjLCBpbXBvcnQubW9kdWxlKTsKLSAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICAgICAgLy8gMi4gSWYg
VHlwZShvKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCFp
bXBvcnRNb2R1bGVWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNv
dXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpKTsK
KyAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFw
cGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpOworICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KIAogICAgICAgICAvLyAzLiBMZXQgdiBi
ZSB0aGUgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQobywgaS5pdGVtX25hbWUpCiAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBvcnRNb2R1bGVWYWx1ZSk7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpbXBvcnQuZmllbGQpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCiAg
ICAgICAgIHN3aXRjaCAoaW1wb3J0LmtpbmQpIHsKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5h
bEtpbmQ6OkZ1bmN0aW9uOiB7CiAgICAgICAgICAgICAvLyA0LiBJZiBpIGlzIGEgZnVuY3Rpb24g
aW1wb3J0OgogICAgICAgICAgICAgLy8gaS4gSWYgSXNDYWxsYWJsZSh2KSBpcyBmYWxzZSwgdGhy
b3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzRnVu
Y3Rpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhl
Yywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUiKSkp
KTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBj
YWxsYWJsZSIpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKICAgICAgICAg
ICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CiAg
ICAgICAgICAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlvbiogaW1wb3J0ZWRFeHBvcnQgPSBqc0R5
bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPih2bSwgY2VsbCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3QgbWF0Y2ggdGhlIHNpZ25h
dHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KICAgICAgICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gaW1wb3J0ZWRF
eHBvcnQtPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1
bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKLSAgICAgICAgICAgICAg
ICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0s
IEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRj
aCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25h
dHVyZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0
ZXJhbCgiaW1wb3J0ZWQgZnVuY3Rpb24ncyBzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJv
dmlkZWQgV2ViQXNzZW1ibHkgZnVuY3Rpb24ncyBzaWduYXR1cmUiKSkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNlOgpAQCAtMTQyLDIzICsxNjAsMjcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICAgICAgaGFzVGFibGVJ
bXBvcnQgPSB0cnVlOwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IGpz
RHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseVRhYmxlKj4odm0sIHZhbHVlKTsKICAgICAgICAgICAg
IC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0LCB0aHJvdyBhIFdl
YkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgIGlmICghdGFibGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
IlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFibGUiKSkp
KTsKKyAgICAgICAgICAgIGlmICghdGFibGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMs
IHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2Vi
QXNzZW1ibHkuVGFibGUiKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICB1aW50MzJfdCBleHBlY3RlZEluaXRpYWwgPSBtb2R1
bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLmluaXRpYWwoKTsKICAgICAgICAgICAgIHVp
bnQzMl90IGFjdHVhbEluaXRpYWwgPSB0YWJsZS0+c2l6ZSgpOwotICAgICAgICAgICAgaWYgKGFj
dHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dl
YkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBw
cm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKSkpKTsKKyAgICAgICAgICAg
IGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtF
cnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJUYWJsZSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2lu
aXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRp
b24ubWF4aW11bSgpKSB7CiAgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
YWN0dWFsTWF4aW11bSA9IHRhYmxlLT5tYXhpbXVtKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFh
Y3R1YWxNYXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwo
IlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJl
cXVpcmVzIHRoYXQgaXQgZG9lcyIpKSkpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMs
IHZtLCBBU0NJSUxpdGVyYWwoIlRhYmxlIGltcG9ydCBkb2VzIG5vdCBoYXZlIGEgJ21heGltdW0n
IGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBpZiAoKmFjdHVhbE1heGltdW0gPiAqZXhwZWN0ZWRNYXhpbXVtKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIkltcG9ydGVkIFRhYmxlJ3MgJ21heGltdW0nIGlz
IGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSciKSkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJJbXBvcnRlZCBUYWJs
ZSdzICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGlt
dW0nIikpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0xNzQsMjQgKzE5NiwyOCBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICBoYXNNZW1vcnlJbXBv
cnQgPSB0cnVlOwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5ID0ganNE
eW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4odm0sIHZhbHVlKTsKICAgICAgICAgICAg
IC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdCwgdGhyb3cgYSBX
ZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICBpZiAoIW1lbW9yeSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJh
bCgiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5
IikpKSk7CisgICAgICAgICAgICBpZiAoIW1lbW9yeSkgeworICAgICAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ug
b2YgV2ViQXNzZW1ibHkuTWVtb3J5IikpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGV4cGVjdGVk
SW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCk7CiAgICAgICAgICAg
ICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1lbW9yeS0+bWVtb3J5KCktPmluaXRp
YWwoKTsKLSAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFsIDwgZXhwZWN0ZWRJbml0aWFsKQot
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgQVND
SUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRv
byBzbWFsbCIpKSkpOworICAgICAgICAgICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZElu
aXRpYWwpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1l
bW9yeSBpbXBvcnQgcHJvdmlkZWQgYW4gJ2luaXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgaWYgKFdhc206OlBhZ2VDb3VudCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkubWF4aW11bSgpKSB7CiAgICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50
IGFjdHVhbE1heGltdW0gPSBtZW1vcnktPm1lbW9yeSgpLT5tYXhpbXVtKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFhY3R1YWxNYXhpbXVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBB
U0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5vdCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0
aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSkpOworICAgICAgICAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5vdCBoYXZl
IGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIGlmIChhY3R1YWxNYXhpbXVtID4gZXhwZWN0ZWRNYXhpbXVtKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFz
c2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdt
YXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0nIikp
KSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiTWVt
b3J5IGltcG9ydHMgJ21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3Rl
ZCAnbWF4aW11bSciKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBpaS4gQXBwZW5k
IHYgdG8gbWVtb3JpZXMuCkBAIC0yMDQsMTAgKzIzMCwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgICAgICAvLyBpLiBJZiBpIGlzIG5vdCBhbiBp
bW11dGFibGUgZ2xvYmFsLCB0aHJvdyBhIFR5cGVFcnJvci4KICAgICAgICAgICAgIEFTU0VSVCht
b2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFiaWxpdHkgPT0g
V2FzbTo6R2xvYmFsOjpJbW11dGFibGUpOwogICAgICAgICAgICAgLy8gaWkuIElmIHRoZSBnbG9i
YWxfdHlwZSBvZiBpIGlzIGk2NCBvciBUeXBlKHYpIGlzIG5vdCBOdW1iZXIsIHRocm93IGEgV2Vi
QXNzZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgaWYgKG1vZHVsZUluZm9ybWF0aW9uLmds
b2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSA9PSBXYXNtOjpJNjQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImlt
cG9ydGVkIGdsb2JhbCBjYW5ub3QgYmUgYW4gaTY0IikpKSk7Ci0gICAgICAgICAgICBpZiAoIXZh
bHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vy
cm9yKGV4ZWMsIHZtLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJlIGEgbnVt
YmVyIikpKSk7CisgICAgICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBv
cnQua2luZEluZGV4XS50eXBlID09IFdhc206Okk2NCkgeworICAgICAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
ZXhlYywgdm0sIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0ZWQgZ2xvYmFsIGNhbm5vdCBiZSBhbiBpNjQi
KSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihl
eGVjLCB2bSwgQVNDSUlMaXRlcmFsKCJpbXBvcnRlZCBnbG9iYWwgbXVzdCBiZSBhIG51bWJlciIp
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4K
ICAgICAgICAgICAgIHN3aXRjaCAobW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2lu
ZEluZGV4XS50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoKQEAgLTIzOSw4ICsy
NjksMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAg
ICAgICAgLy8gV2UgY3JlYXRlIGEgbWVtb3J5IHdoZW4gaXQncyBhIG1lbW9yeSBkZWZpbml0aW9u
LgogICAgICAgICAgICAgYm9vbCBmYWlsZWQ7CiAgICAgICAgICAgICBXYXNtOjpNZW1vcnkgbWVt
b3J5KG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5tYXhpbXVtKCksIGZhaWxlZCk7Ci0gICAgICAgICAgICBpZiAoZmFpbGVkKQotICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSkpOworICAgICAgICAgICAg
aWYgKGZhaWxlZCkgeworICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOworICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1l
bW9yeSh2bSwKICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgp
LCBXVEZNb3ZlKG1lbW9yeSkpKTsKICAgICAgICAgfQpAQCAtMjgwLDE1ICszMTIsMTUgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIH0KIAogICAgIG1vZHVs
ZVJlY29yZC0+bGluayhleGVjLCBpbnN0YW5jZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIG1vZHVsZVJl
Y29yZC0+ZHVtcCgpOwogICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2
YWx1YXRlKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShpbnN0YW5jZSk7CisgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNT
dGF0ZSogc3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaAkocmV2aXNpb24g
MjEzMzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBXZWJBc3Nl
bWJseUluc3RhbmNlUHJvdG90eXBlOwogCiBjbGFzcyBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CkBAIC00NCw2ICs0NSw4IEBAIHB1Ymxp
YzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAorICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGNyZWF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU09i
amVjdCogaW1wb3J0T2JqZWN0KTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlKik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHAJKHJldmlzaW9uIDIxMzM3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcg
KzIyMiwxMyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0CiAgICAg
ICAgICAgICBpZiAoIWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnNpemUoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleCA9IGVsZW1l
bnQub2Zmc2V0OworICAgICAgICAgICAgdWludDMyX3QgdGFibGVJbmRleDsKKworICAgICAgICAg
ICAgaWYgKGVsZW1lbnQub2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkpCisgICAgICAgICAgICAgICAg
dGFibGVJbmRleCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2luc3RhbmNlLT5sb2FkSTMyR2xv
YmFsKGVsZW1lbnQub2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB0YWJsZUluZGV4ID0gZWxlbWVudC5vZmZzZXQuY29uc3RWYWx1
ZSgpOworCiAgICAgICAgICAgICB1aW50NjRfdCBsYXN0V3JpdHRlbkluZGV4ID0gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHRhYmxlSW5kZXgpICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGVsZW1lbnQu
ZnVuY3Rpb25JbmRpY2VzLnNpemUoKSkgLSAxOwogICAgICAgICAgICAgaWYgKGxhc3RXcml0dGVu
SW5kZXggPj0gdGFibGUtPnNpemUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKHN0YXRlLCB2
bSwgQVNDSUlMaXRlcmFsKCJFbGVtZW50IGlzIHRyeWluZyB0byBzZXQgYW4gb3V0IG9mIGJvdW5k
cyB0YWJsZSBpbmRleCIpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303460</attachid>
            <date>2017-03-05 11:36:31 -0800</date>
            <delta_ts>2017-03-05 19:22:31 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>15715</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTM0MzUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIxIEBACisyMDE3LTAzLTA1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBpbXBsZW1lbnQgaW5pdF9leHByIGZvciBFbGVt
ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4
ODgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMTk5PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5
QmluYXJ5LmpzOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuRWxlbWVudCk6CisgICAgICAgICog
d2FzbS9hc3NlcnQuanM6CisgICAgICAgICogd2FzbS9qcy1hcGkvZWxlbWVudC5qczoKKyAgICAg
ICAgKGFzc2VydC50aHJvd3MpOgorICAgICAgICAoYmFkSW5zdGFudGlhdGlvbi5tYWtlTW9kdWxl
KToKKyAgICAgICAgKGJhZEluc3RhbnRpYXRpb24udGVzdCk6CisgICAgICAgIChiYWRJbnN0YW50
aWF0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanM6CisKIDIwMTct
MDMtMDIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiBzaG91bGQgaGF2ZSBGdW5jdGlvbi5wcm90b3R5cGUgYXMgaXRz
IHByb3RvdHlwZQpJbmRleDogSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnku
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnku
anMJKHJldmlzaW9uIDIxMzQzNCkKKysrIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5
QmluYXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsMTEgKzE5NSwxMiBAQCBjb25zdCBlbWl0
dGVycyA9IHsKICAgICAgICAgZm9yIChjb25zdCB7dGFibGVJbmRleCwgb2Zmc2V0LCBmdW5jdGlv
bkluZGljZXN9IG9mIGRhdGEpIHsKICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCB0
YWJsZUluZGV4KTsKIAotICAgICAgICAgICAgLy8gRklYTUUgYWxsb3cgY29tcGxleCBpbml0X2V4
cHIgaGVyZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcwMAot
ICAgICAgICAgICAgLy8gRm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSBpMzIuY29uc3QgYXMgb2Zmc2V0
LgotICAgICAgICAgICAgcHV0KGJpbiwgInVpbnQ4IiwgV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVb
ImkzMi5jb25zdCJdLnZhbHVlKTsKLSAgICAgICAgICAgIHB1dChiaW4sIFdBU00uZGVzY3JpcHRp
b24ub3Bjb2RlWyJpMzIuY29uc3QiXS5pbW1lZGlhdGVbMF0udHlwZSwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgIHB1dChiaW4sICJ1aW50OCIsIFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlWyJlbmQiXS52
YWx1ZSk7CisgICAgICAgICAgICBsZXQgaW5pdEV4cHI7CisgICAgICAgICAgICBpZiAodHlwZW9m
IG9mZnNldCA9PT0gIm51bWJlciIpCisgICAgICAgICAgICAgICAgaW5pdEV4cHIgPSB7b3A6ICJp
MzIuY29uc3QiLCBpbml0VmFsdWU6IG9mZnNldH07CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgaW5pdEV4cHIgPSBvZmZzZXQ7CisgICAgICAgICAgICBwdXRJbml0RXhwcihiaW4s
IGluaXRFeHByKTsKIAogICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGZ1bmN0aW9u
SW5kaWNlcy5sZW5ndGgpOwogICAgICAgICAgICAgZm9yIChjb25zdCBmdW5jdGlvbkluZGV4IG9m
IGZ1bmN0aW9uSW5kaWNlcykKSW5kZXg6IEpTVGVzdHMvd2FzbS9hc3NlcnQuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy93YXNtL2Fzc2VydC5qcwkocmV2aXNpb24gMjEzNDM0KQorKysgSlNUZXN0
cy93YXNtL2Fzc2VydC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIGV4cG9y
dCBjb25zdCBsZSA9IChsaHMsIHJocywgbXNnKSA9PiB7CiB9OwogCiAvLyBJZ25vcmUgc291cmNl
IGluZm9ybWF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGV4cGVj
dGVkIG1lc3NhZ2UgZGlkbid0IHNwZWNpZnkgdGhhdCBpbmZvcm1hdGlvbi4gU29tZXRpbWVzIGl0
IGNoYW5nZXMsIG9yIGl0J3MgdHJpY2t5IHRvIGdldCBqdXN0IHJpZ2h0LgotY29uc3QgX3NvdXJj
ZVJlID0gbmV3IFJlZ0V4cCgvIFwoZXZhbHVhdGluZyAnLionXCkvKTsKK2NvbnN0IF9zb3VyY2VS
ZSA9IG5ldyBSZWdFeHAoLyggXChldmFsdWF0aW5nICcuKidcKSl8KCBcKEluIC4qXCkpLyk7CiAK
IGNvbnN0IF90aHJvd3MgPSAoZnVuYywgdHlwZSwgbWVzc2FnZSwgLi4uYXJncykgPT4gewogICAg
IHRyeSB7CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzCShyZXZpc2lvbiAyMTM0MzQpCisrKyBK
U1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUz
LDcgQEAgaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiAgICAgICAgICAg
ICAuVGFibGUoe2VsZW1lbnQ6ICJhbnlmdW5jIiwgaW5pdGlhbDogMjAsIG1heGltdW06IDIwfSkK
ICAgICAgICAgLkVuZCgpCiAgICAgICAgIC5FbGVtZW50KCkKLSAgICAgICAgICAgIC5FbGVtZW50
KHtvZmZzZXQ6IDE5LCBmdW5jdGlvbkluZGljZXM6IFswLCAxXX0pCisgICAgICAgICAgICAuRWxl
bWVudCh7b2Zmc2V0OiAxOSwgZnVuY3Rpb25JbmRpY2VzOiBbMCwgMF19KQogICAgICAgICAuRW5k
KCkKICAgICAgICAgLkNvZGUoKQogICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1z
OiBbImkzMiJdLCByZXQ6ICJpMzIifSkKQEAgLTY0LDcgKzY0LDggQEAgaW1wb3J0ICogYXMgYXNz
ZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVu
ZCgpOwogCi0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldl
YkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzUgLyA0OTogRWxlbWVudCBz
ZWN0aW9uJ3MgMHRoIGVsZW1lbnQgd3JpdGVzIHRvIGluZGV4IDIwIHdoaWNoIGV4Y2VlZHMgdGhl
IG1heGltdW0gMjAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpKScpIik7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOworICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSksIFdlYkFzc2VtYmx5Lkxp
bmtFcnJvciwgIkVsZW1lbnQgaXMgdHJ5aW5nIHRvIHNldCBhbiBvdXQgb2YgYm91bmRzIHRhYmxl
IGluZGV4Iik7CiB9CiAKIHsKQEAgLTg3LDcgKzg4LDggQEAgaW1wb3J0ICogYXMgYXNzZXJ0IGZy
b20gJy4uL2Fzc2VydC5qcyc7CiAgICAgICAgICAgICAuRW5kKCkKICAgICAgICAgLkVuZCgpOwog
Ci0gICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKSksIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgIldlYkFzc2Vt
Ymx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMzUgLyA0ODogRWxlbWVudCBzZWN0aW9u
J3MgMHRoIGVsZW1lbnQgd3JpdGVzIHRvIGluZGV4IDIwIHdoaWNoIGV4Y2VlZHMgdGhlIG1heGlt
dW0gMjAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpKScpIik7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCkpOworICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSksIFdlYkFzc2VtYmx5LkxpbmtFcnJv
ciwgIkVsZW1lbnQgaXMgdHJ5aW5nIHRvIHNldCBhbiBvdXQgb2YgYm91bmRzIHRhYmxlIGluZGV4
Iik7CiB9CiAKIHsKQEAgLTE0NCwzICsxNDYsNzQgQEAgaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20g
Jy4uL2Fzc2VydC5qcyc7CiAgICAgICAgIGJhZEluc3RhbnRpYXRpb24odGFibGUsIFdlYkFzc2Vt
Ymx5LkxpbmtFcnJvciwgIkVsZW1lbnQgaXMgdHJ5aW5nIHRvIHNldCBhbiBvdXQgb2YgYm91bmRz
IHRhYmxlIGluZGV4IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxl
LCB7aW1wOiB7dGFibGU6IGFjdHVhbFRhYmxlfX0pJykiKTsKICAgICB9CiB9CisKK3sKKyAgICBm
dW5jdGlvbiBtYWtlTW9kdWxlKCkgeworICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxk
ZXIoKQorICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAgICAgLkltcG9ydCgpCisg
ICAgICAgICAgICAgICAgLlRhYmxlKCJpbXAiLCAidGFibGUiLCB7ZWxlbWVudDogImFueWZ1bmMi
LCBpbml0aWFsOiAxOX0pIC8vIHVuc3BlY2lmaWVkIG1heGltdW0uCisgICAgICAgICAgICAgICAg
Lkdsb2JhbCgpLkkzMigiaW1wIiwgImdsb2JhbCIsICJpbW11dGFibGUiKS5FbmQoKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgICAg
LkVsZW1lbnQoKQorICAgICAgICAgICAgICAgIC5FbGVtZW50KHtvZmZzZXQ6IHtvcDogImdldF9n
bG9iYWwiLCBpbml0VmFsdWU6IDB9LCBmdW5jdGlvbkluZGljZXM6IFswXX0pCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24o
ImZvbyIsIHtwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiJ9KQorICAgICAgICAgICAgICAgICAg
ICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQorICAgICAg
ICAgICAgICAgICAgICAuSTMyQWRkKCkKKyAgICAgICAgICAgICAgICAgICAgLlJldHVybigpCisg
ICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCk7CisKKyAgICAgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICByZXR1cm4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3QoaSkg
eworICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7ZWxlbWVudDog
ImFueWZ1bmMiLCBpbml0aWFsOiAxOX0pOworICAgICAgICBjb25zdCBnbG9iYWwgPSBpOworICAg
ICAgICBjb25zdCBtb2R1bGUgPSBtYWtlTW9kdWxlKCk7CisgICAgICAgIGNvbnN0IGluc3RhbmNl
ID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge3RhYmxlLCBnbG9iYWx9
fSk7CisgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTk7IGorKykgeworICAgICAgICAgICAg
aWYgKGogPT09IGkpCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxKHRhYmxlLmdldChqKShpKjIp
LCBpKjIgKyA0Mik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXNzZXJ0LnRo
cm93cygoKSA9PiB0YWJsZS5nZXQoaikoaSoyKSwgVHlwZUVycm9yLCAidGFibGUuZ2V0KGopIGlz
IG5vdCBhIGZ1bmN0aW9uLiIpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgMTk7IGkrKykKKyAgICAgICAgdGVzdChpKTsKKworICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gdGVzdCgxOSksIEVycm9yLCAiRWxlbWVudCBpcyB0cnlpbmcgdG8gc2V0IGFuIG91dCBvZiBi
b3VuZHMgdGFibGUgaW5kZXgiKTsKK30KKworeworICAgIGZ1bmN0aW9uIGJhZE1vZHVsZSgpIHsK
KyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBl
KCkuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5UYWJsZSgi
aW1wIiwgInRhYmxlIiwge2VsZW1lbnQ6ICJhbnlmdW5jIiwgaW5pdGlhbDogMTl9KSAvLyB1bnNw
ZWNpZmllZCBtYXhpbXVtLgorICAgICAgICAgICAgICAgIC5HbG9iYWwoKS5GMzIoImltcCIsICJn
bG9iYWwiLCAiaW1tdXRhYmxlIikuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FbGVtZW50KCkKKyAgICAgICAgICAg
ICAgICAuRWxlbWVudCh7b2Zmc2V0OiB7b3A6ICJnZXRfZ2xvYmFsIiwgaW5pdFZhbHVlOiAwfSwg
ZnVuY3Rpb25JbmRpY2VzOiBbMF19KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAu
Q29kZSgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJd
LCByZXQ6ICJpMzIifSkKKyAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAg
ICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAgICAgICAgICAgICAgLkkzMkFkZCgp
CisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkVuZCgpOworCisgICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmlu
KTsKKyAgICB9CisKKyAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJhZE1vZHVsZSgpLCBXZWJBc3Nl
bWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBwYXJzZSBhdCBi
eXRlIDU4IC8gNzI6IDB0aCBFbGVtZW50IGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIik7
Cit9CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1lcnJvci5qcwkocmV2aXNpb24gMjEzNDM0
KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXJyb3IuanMJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDcgKzIzLDcgQEAgaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CiAg
ICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpOwogICAgIGJpbi50cmltKCk7CiAK
LSAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgp
KSwgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCAiV2ViQXNzZW1ibHkuTW9kdWxlIGRvZXNuJ3Qg
cGFyc2UgYXQgYnl0ZSAyNiAvIDU5OiBnZXRfZ2xvYmFsJ3MgaW5kZXggMCBleGNlZWRzIHRoZSBu
dW1iZXIgb2YgaW1wb3J0cyAwIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
bi5nZXQoKSknKSIpOworICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4uZ2V0KCkpLCBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsICJXZWJBc3NlbWJseS5N
b2R1bGUgZG9lc24ndCBwYXJzZSBhdCBieXRlIDI2IC8gNTk6IGdldF9nbG9iYWwncyBpbmRleCAw
IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxzIDAgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3Nl
bWJseS5Nb2R1bGUoYmluLmdldCgpKScpIik7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTM0MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTctMDMtMDUgIFNhYW0gQmFy
YXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IGltcGxlbWVu
dCBpbml0X2V4cHIgZm9yIEVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTg4OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjk3NjAxOTk+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBmaXhlcyBhIGZldyBidWdzLiBUaGUgbWFpbiBjaGFuZ2UgaXMgYWxsb3dpbmcgaW5pdF9l
eHByCisgICAgICAgIGZvciB0aGUgRWxlbWVudCdzIG9mZnNldC4gVG8gZG8gdGhpcywgSSBoYWQg
dG8gZml4IGEgY291cGxlIG9mCisgICAgICAgIG90aGVyIGJ1Z3M6CisgICAgICAgIAorICAgICAg
ICAtIEkgcmVtb3ZlZCBvdXIgaW52YWxpZCBlYXJseSBtb2R1bGUtcGFyc2UtdGltZSBpbnZhbGlk
YXRpb24KKyAgICAgICAgb2Ygb3V0IG9mIGJvdW5kIEVsZW1lbnQgc2VjdGlvbnMuIFRoaXMgaXMg
bm90IGluIHRoZSBzcGVjIGJlY2F1c2UKKyAgICAgICAgaXQgY2FuJ3QgYmUgdmFsaWRhdGVkIGlu
IHRoZSBnZW5lcmFsIGNhc2Ugd2hlbiB0aGUgb2Zmc2V0IGlzIGEKKyAgICAgICAgZ2V0X2dsb2Jh
bC4KKyAgICAgICAgCisgICAgICAgIC0gT3VyIGdldF9nbG9iYWwgdmFsaWRhdGlvbiBpbnNpZGUg
b3VyIGluaXRfZXhwciBwYXJzaW5nIGNvZGUgd2FzIHNpbXBseSB3cm9uZy4KKyAgICAgICAgSXQg
dGhvdWdodCB0aGF0IHRoZSBpbmRleCBvcGVyYW5kIHRvIGdldF9nbG9iYWwgd2VudCBpbnRvIHRo
ZSBwb29sIG9mIGltcG9ydHMsCisgICAgICAgIGJ1dCBpdCBkb2VzIG5vdC4gSXQgaW5kZXhlcyBp
bnRvIHRoZSBwb29sIG9mIGdsb2JhbHMuIEkgY2hhbmdlZCB0aGUgY29kZSB0bworICAgICAgICBy
ZWZlciB0byB0aGUgZ2xvYmFsIHBvb2wgaW5zdGVhZC4KKworICAgICAgICAqIHdhc20vV2FzbUZv
cm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpFbGVtZW50OjpFbGVtZW50KToKKyAgICAgICAg
KiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6ZXZhbHVhdGUpOgorCiAyMDE3LTAzLTA1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgogCiAgICAgICAgIFtKU0NPbmx5XVtHVEtdIFN1cHByZXNzIHdhcm5pbmdzIG9u
IHJldHVybiB0eXBlIGluIEIzIGFuZCBXQVNNCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyMTM0MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksMTEgQEAg
c3RydWN0IFNlZ21lbnQgewogfTsKIAogc3RydWN0IEVsZW1lbnQgewotICAgIHVpbnQzMl90IG9m
ZnNldDsKKyAgICBFbGVtZW50KEkzMkluaXRFeHByIG9mZnNldCkKKyAgICAgICAgOiBvZmZzZXQo
b2Zmc2V0KQorICAgIHsgfQorCisgICAgSTMySW5pdEV4cHIgb2Zmc2V0OwogICAgIFZlY3Rvcjx1
aW50MzJfdD4gZnVuY3Rpb25JbmRpY2VzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHJldmlzaW9uIDIxMzQzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MzEsMzYgKzQzMSwyMyBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VFbGVt
ZW50KCkgLT4gUGFyCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5l
bGVtZW50cy50cnlSZXNlcnZlQ2FwYWNpdHkoZWxlbWVudENvdW50KSwgImNhbid0IGFsbG9jYXRl
IG1lbW9yeSBmb3IgIiwgZWxlbWVudENvdW50LCAiIEVsZW1lbnRzIik7CiAgICAgZm9yICh1bnNp
Z25lZCBlbGVtZW50TnVtID0gMDsgZWxlbWVudE51bSA8IGVsZW1lbnRDb3VudDsgKytlbGVtZW50
TnVtKSB7CiAgICAgICAgIHVpbnQzMl90IHRhYmxlSW5kZXg7Ci0gICAgICAgIHVpbnQ2NF90IG9m
ZnNldDsKKyAgICAgICAgdWludDY0X3QgaW5pdEV4cHJCaXRzOwogICAgICAgICB1aW50OF90IGlu
aXRPcGNvZGU7CiAgICAgICAgIHVpbnQzMl90IGluZGV4Q291bnQ7CiAKICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodGFibGVJbmRleCksICJjYW4ndCBnZXQgIiwg
ZWxlbWVudE51bSwgInRoIEVsZW1lbnQgdGFibGUgaW5kZXgiKTsKICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRih0YWJsZUluZGV4LCAiRWxlbWVudCBzZWN0aW9uIGNhbiBvbmx5IGhhdmUgb25l
IFRhYmxlIGZvciBub3ciKTsKICAgICAgICAgVHlwZSBpbml0RXhwclR5cGU7Ci0gICAgICAgIFdB
U01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VJbml0RXhwcihpbml0T3Bjb2RlLCBvZmZzZXQs
IGluaXRFeHByVHlwZSkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluaXRPcGNvZGUg
IT0gT3BUeXBlOjpJMzJDb25zdCwgIkVsZW1lbnQgc2VjdGlvbiBkb2Vzbid0IHN1cHBvcnQgbm9u
LWkzMiBpbml0X2V4cHIgb3Bjb2RlIGZvciBub3csIGdvdCAiLCBpbml0T3Bjb2RlKTsKKyAgICAg
ICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUluaXRFeHByKGluaXRPcGNvZGUsIGlu
aXRFeHByQml0cywgaW5pdEV4cHJUeXBlKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
aW5pdEV4cHJUeXBlICE9IEkzMiwgZWxlbWVudE51bSwgInRoIEVsZW1lbnQgaW5pdF9leHByIG11
c3QgcHJvZHVjZSBhbiBpMzIiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VW
YXJVSW50MzIoaW5kZXhDb3VudCksICJjYW4ndCBnZXQgIiwgZWxlbWVudE51bSwgInRoIGluZGV4
IGNvdW50IGZvciBFbGVtZW50IHNlY3Rpb24iKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihpbmRleENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSwgIkVs
ZW1lbnQgc2VjdGlvbidzICIsIGVsZW1lbnROdW0sICJ0aCBpbmRleCBjb3VudCBpcyB0b28gYmln
ICIsIGluZGV4Q291bnQpOwogCiAgICAgICAgIEFTU0VSVCghIW1fcmVzdWx0Lm1vZHVsZS0+dGFi
bGVJbmZvcm1hdGlvbik7Ci0gICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhp
bXVtID0gbV9yZXN1bHQubW9kdWxlLT50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBpbmRleENvdW50IGJlaW5nIHplcm8gYmUgYSB2YWxp
ZGF0aW9uIGVycm9yPwotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTgyNgotICAgICAgICAgICAgaWYgKGluZGV4Q291bnQpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogcmlnaHQgbm93LCBwcm92YWJseSBvdXQgb2YgYm91bmRzIHdy
aXRlcyBhcmUgdmFsaWRhdGlvbiBlcnJvcnMuCi0gICAgICAgICAgICAgICAgLy8gU2hvdWxkIHRo
ZXkgYmUgdGhvdWdoPwotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU4MjcKLSAgICAgICAgICAgICAgICB1aW50NjRfdCBsYXN0V3Jp
dHRlbkluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4Q291bnQpICsgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KG9mZnNldCkgLSAxOwotICAgICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYobGFzdFdyaXR0ZW5JbmRleCA+PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oKm1heGltdW0p
LCAiRWxlbWVudCBzZWN0aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1lbnQgd3JpdGVzIHRv
IGluZGV4ICIsIGxhc3RXcml0dGVuSW5kZXgsICIgd2hpY2ggZXhjZWVkcyB0aGUgbWF4aW11bSAi
LCAqbWF4aW11bSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBFbGVtZW50
IGVsZW1lbnQ7CisgICAgICAgIEVsZW1lbnQgZWxlbWVudChtYWtlSTMySW5pdEV4cHIoaW5pdE9w
Y29kZSwgaW5pdEV4cHJCaXRzKSk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWVsZW1l
bnQuZnVuY3Rpb25JbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSwgImNhbid0
IGFsbG9jYXRlIG1lbW9yeSBmb3IgIiwgaW5kZXhDb3VudCwgIiBFbGVtZW50IGluZGljZXMiKTsK
IAotICAgICAgICBlbGVtZW50Lm9mZnNldCA9IG9mZnNldDsKLQogICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBpbmRleENvdW50OyArK2luZGV4KSB7CiAgICAgICAgICAg
ICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCksICJjYW4ndCBnZXQgRWxlbWVudCBzZWN0
aW9uJ3MgIiwgZWxlbWVudE51bSwgInRoIGVsZW1lbnQncyAiLCBpbmRleCwgInRoIGluZGV4Iik7
CkBAIC01MzYsMTIgKzUyMywxMSBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1
aW50OF90CiAgICAgY2FzZSBHZXRHbG9iYWw6IHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGluZGV4KSwgImNhbid0
IGdldCBnZXRfZ2xvYmFsJ3MgaW5kZXgiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihp
bmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUtPmltcG9ydHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGlu
ZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBpbXBvcnRzICIsIG1fcmVzdWx0
Lm1vZHVsZS0+aW1wb3J0cy5zaXplKCkpOwotICAgICAgICBjb25zdCBJbXBvcnQmIGltcG9ydCA9
IG1fcmVzdWx0Lm1vZHVsZS0+aW1wb3J0c1tpbmRleF07Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYobV9yZXN1bHQubW9kdWxlLT5pbXBvcnRzW2luZGV4XS5raW5kICE9IEV4dGVybmFsS2lu
ZDo6R2xvYmFsLCAiZ2V0X2dsb2JhbCdzIGltcG9ydCBraW5kIGlzICIsIG1fcmVzdWx0Lm1vZHVs
ZS0+aW1wb3J0c1tpbmRleF0ua2luZCwgIiBzaG91bGQgYmUgZ2xvYmFsIik7Ci0gICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoaW1wb3J0LmtpbmRJbmRleCA+PSBtX3Jlc3VsdC5tb2R1bGUtPmZp
cnN0SW50ZXJuYWxHbG9iYWwsICJnZXRfZ2xvYmFsIGltcG9ydCBraW5kIGluZGV4ICIsIGltcG9y
dC5raW5kSW5kZXgsICIgZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1fcmVz
dWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7CiAKLSAgICAgICAgQVNTRVJUKG1fcmVz
dWx0Lm1vZHVsZS0+Z2xvYmFsc1tpbXBvcnQua2luZEluZGV4XS5tdXRhYmlsaXR5ID09IEdsb2Jh
bDo6SW1tdXRhYmxlKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX3Jl
c3VsdC5tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpLCAiZ2V0X2dsb2JhbCdzIGluZGV4ICIsIGluZGV4
LCAiIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBnbG9iYWxzICIsIG1fcmVzdWx0Lm1vZHVsZS0+Z2xv
YmFscy5zaXplKCkpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1fcmVz
dWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQg
aW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgZmlyc3QgaW50ZXJuYWwgZ2xvYmFsICIsIG1f
cmVzdWx0Lm1vZHVsZS0+Zmlyc3RJbnRlcm5hbEdsb2JhbCk7CisKKyAgICAgICAgQVNTRVJUKG1f
cmVzdWx0Lm1vZHVsZS0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWw6OkltbXV0
YWJsZSk7CiAgICAgICAgIHJlc3VsdFR5cGUgPSBtX3Jlc3VsdC5tb2R1bGUtPmdsb2JhbHNbaW5k
ZXhdLnR5cGU7CiAgICAgICAgIGJpdHNPckltcG9ydE51bWJlciA9IGluZGV4OwogICAgICAgICBi
cmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIxMzQzNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCwxMyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuZnVuY3Rpb25JbmRpY2Vz
LnNpemUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgdWludDMy
X3QgdGFibGVJbmRleCA9IGVsZW1lbnQub2Zmc2V0OworICAgICAgICAgICAgdWludDMyX3QgdGFi
bGVJbmRleDsKKworICAgICAgICAgICAgaWYgKGVsZW1lbnQub2Zmc2V0LmlzR2xvYmFsSW1wb3J0
KCkpCisgICAgICAgICAgICAgICAgdGFibGVJbmRleCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Piht
X2luc3RhbmNlLT5sb2FkSTMyR2xvYmFsKGVsZW1lbnQub2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4
KCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0YWJsZUluZGV4ID0gZWxl
bWVudC5vZmZzZXQuY29uc3RWYWx1ZSgpOworCiAgICAgICAgICAgICB1aW50NjRfdCBsYXN0V3Jp
dHRlbkluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRhYmxlSW5kZXgpICsgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnNpemUoKSkgLSAxOwogICAgICAg
ICAgICAgaWYgKGxhc3RXcml0dGVuSW5kZXggPj0gdGFibGUtPnNpemUoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKHN0YXRlLCB2bSwgQVNDSUlMaXRlcmFsKCJFbGVtZW50IGlzIHRyeWluZyB0
byBzZXQgYW4gb3V0IG9mIGJvdW5kcyB0YWJsZSBpbmRleCIpKSk7Cg==
</data>
<flag name="review"
          id="325101"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>