<?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>165159</bug_id>
          
          <creation_ts>2016-11-29 14:31:31 -0800</creation_ts>
          <short_desc>WebAssembly JS API: add Module.sections</short_desc>
          <delta_ts>2017-01-04 15:46:22 -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>
          
          <blocked>161709</blocked>
    
    <blocked>166688</blocked>
    
    <blocked>166701</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1254476</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-11-29 14:31:31 -0800</bug_when>
    <thetext>As in https://github.com/WebAssembly/design/pull/877</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261768</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-12-20 14:30:07 -0800</bug_when>
    <thetext>&lt;rdar://problem/29760326&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263697</commentid>
    <comment_count>2</comment_count>
      <attachid>297993</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-01-03 23:15:09 -0800</bug_when>
    <thetext>Created attachment 297993
patch

I implemented this one since it&apos;s pretty simple, and likely to be used soon by Emscripten.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263814</commentid>
    <comment_count>3</comment_count>
      <attachid>297993</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-04 10:34:15 -0800</bug_when>
    <thetext>Comment on attachment 297993
patch

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

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:603
&gt; +auto ModuleParser::parseCustom(uint32_t sectionLength) -&gt; PartialResult

Isn&apos;t this the same as &quot;PartialResult ModuleParser::parseCustom(uint32_t sectionLength)&quot;?  Why use this exotic form instead?  Seems like it only adds extra chars to type and is less clear to read.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:612
&gt; +    WASM_PARSER_FAIL_IF(!m_result.module-&gt;customSections.tryReserveCapacity(customSectionNumber), &quot;can&apos;t allocate enough memory for &quot;, customSectionNumber, &quot;th custom section&quot;);
&gt; +    WASM_PARSER_FAIL_IF(!parseVarUInt32(nameLen), &quot;can&apos;t get &quot;, customSectionNumber, &quot;th custom section&apos;s name length&quot;);
&gt; +    WASM_PARSER_FAIL_IF(!consumeUTF8String(section.name, nameLen), &quot;nameLen get &quot;, customSectionNumber, &quot;th custom section&apos;s name of length &quot;, nameLen);

Can we do better with the &quot;Nth&quot; error string here?  &quot;1th&quot;, &quot;2th&quot;, and &quot;3th&quot; doesn&apos;t read well.  How about rephrasing as &quot; custom section 1&apos;s ...&quot; or &quot; custom section [1]&apos;s&quot; instead of &quot;1th custom section&apos;s ...&quot;?  I like the [] notation since it implies that [0] is also a valid section.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:615
&gt; +    WASM_PARSER_FAIL_IF(!section.payload.tryReserveCapacity(payloadBytes), &quot;can&apos;t allocate enough memory for &quot;, customSectionNumber, &quot;th custom section&apos;s &quot;, payloadBytes, &quot; bytes&quot;);

Ditto with usage of &quot;Nth&quot; here.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:619
&gt; +        section.payload.uncheckedAppend(byte);

Ditto.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModulePrototype.cpp:82
&gt; +        if (section.name == sectionNameString) {
&gt; +            auto buffer = ArrayBuffer::tryCreate(section.payload.data(), section.payload.size());
&gt; +            if (!buffer)
&gt; +                throwException(exec, throwScope, createOutOfMemoryError(exec));
&gt; +
&gt; +            Structure* arrayBufferStructure = InternalFunction::createSubclassStructure(exec, JSValue(), globalObject-&gt;arrayBufferStructure(ArrayBufferSharingMode::Default));
&gt; +            RETURN_IF_EXCEPTION(throwScope, { });
&gt; +
&gt; +            result-&gt;push(exec, JSArrayBuffer::create(vm, arrayBufferStructure, WTFMove(buffer)));
&gt; +            RETURN_IF_EXCEPTION(throwScope, { });
&gt; +        }

Is it possible to have more than one section matching the same name?  If not, why do we not break out of the loop once we&apos;ve found a match?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263818</commentid>
    <comment_count>4</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-01-04 10:44:19 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 297993 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=297993&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:603
&gt; &gt; +auto ModuleParser::parseCustom(uint32_t sectionLength) -&gt; PartialResult
&gt; 
&gt; Isn&apos;t this the same as &quot;PartialResult ModuleParser::parseCustom(uint32_t
&gt; sectionLength)&quot;?  Why use this exotic form instead?  Seems like it only adds
&gt; extra chars to type and is less clear to read.

PartialResult needs to be qualified because it&apos;s defined in ModuleParser. The rest of this file follows Yusuke&apos;s lead in other parts of the JSC code :-)

I agree it&apos;s a bit surprising, but I think that&apos;s from the novelty of coming from older C++. IMO it&apos;ll be idiomatic C++ in a few years, at least when returning a class-defined type.


&gt; &gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:612
&gt; &gt; +    WASM_PARSER_FAIL_IF(!m_result.module-&gt;customSections.tryReserveCapacity(customSectionNumber), &quot;can&apos;t allocate enough memory for &quot;, customSectionNumber, &quot;th custom section&quot;);
&gt; &gt; +    WASM_PARSER_FAIL_IF(!parseVarUInt32(nameLen), &quot;can&apos;t get &quot;, customSectionNumber, &quot;th custom section&apos;s name length&quot;);
&gt; &gt; +    WASM_PARSER_FAIL_IF(!consumeUTF8String(section.name, nameLen), &quot;nameLen get &quot;, customSectionNumber, &quot;th custom section&apos;s name of length &quot;, nameLen);
&gt; 
&gt; Can we do better with the &quot;Nth&quot; error string here?  &quot;1th&quot;, &quot;2th&quot;, and &quot;3th&quot;
&gt; doesn&apos;t read well.  How about rephrasing as &quot; custom section 1&apos;s ...&quot; or &quot;
&gt; custom section [1]&apos;s&quot; instead of &quot;1th custom section&apos;s ...&quot;?  I like the []
&gt; notation since it implies that [0] is also a valid section.

Let me file a bug to do this. It&apos;s currently using &quot;th&quot; all over the file, so I&apos;d rather keep it consistent.
https://bugs.webkit.org/show_bug.cgi?id=166688


&gt; &gt; Source/JavaScriptCore/wasm/js/WebAssemblyModulePrototype.cpp:82
&gt; &gt; +        if (section.name == sectionNameString) {
&gt; &gt; +            auto buffer = ArrayBuffer::tryCreate(section.payload.data(), section.payload.size());
&gt; &gt; +            if (!buffer)
&gt; &gt; +                throwException(exec, throwScope, createOutOfMemoryError(exec));
&gt; &gt; +
&gt; &gt; +            Structure* arrayBufferStructure = InternalFunction::createSubclassStructure(exec, JSValue(), globalObject-&gt;arrayBufferStructure(ArrayBufferSharingMode::Default));
&gt; &gt; +            RETURN_IF_EXCEPTION(throwScope, { });
&gt; &gt; +
&gt; &gt; +            result-&gt;push(exec, JSArrayBuffer::create(vm, arrayBufferStructure, WTFMove(buffer)));
&gt; &gt; +            RETURN_IF_EXCEPTION(throwScope, { });
&gt; &gt; +        }
&gt; 
&gt; Is it possible to have more than one section matching the same name?  If
&gt; not, why do we not break out of the loop once we&apos;ve found a match?

Yes, sections can have the same name. The API therefore returns an Array of all the matches (which are ArrayBuffers). I filed a bug to update the spec w.r.t. the order of returned matches: it should be the same as the declaration order in the binary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263821</commentid>
    <comment_count>5</comment_count>
      <attachid>297993</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-04 10:50:38 -0800</bug_when>
    <thetext>Comment on attachment 297993
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263843</commentid>
    <comment_count>6</comment_count>
      <attachid>297993</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-04 11:27:59 -0800</bug_when>
    <thetext>Comment on attachment 297993
patch

Clearing flags on attachment: 297993

Committed r210282: &lt;http://trac.webkit.org/changeset/210282&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263844</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-04 11:28:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297993</attachid>
            <date>2017-01-03 23:15:09 -0800</date>
            <delta_ts>2017-01-04 11:27:59 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-custom-sections.patch</filename>
            <type>text/plain</type>
            <size>13126</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBlNGQ2Yjg1MTFiZGMwOTYxYzBmZTQ4YWU2YTQ1MzdiMWFjZTExYTE1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDMgSmFuIDIwMTcgMjM6MTI6NTEgLTA4MDAKU3ViamVjdDogW1BBVENIXSBjdXN0b20g
c2VjdGlvbnMKCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAxNSArKysrKwogSlNUZXN0cy93YXNtL0J1aWxkZXIuanMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMyArLQogSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUuY3VzdG9t
U2VjdGlvbi5qcyAgICAgICAgfCA3NiArKysrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICB8IDE5ICsrKysrKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oICAgICAgICAgICAgfCAgNyArKwog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAgICAgfCAyNyAr
KysrKysrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oICAg
ICAgfCAgMSArCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5jcHAgICAg
ICAgICB8IDQzICsrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAxODggaW5zZXJ0aW9ucygr
KSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vanMtYXBp
L01vZHVsZS5jdXN0b21TZWN0aW9uLmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA2MzJlZTI5Li5kNDkwMmMzIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBA
CiAyMDE3LTAxLTAzICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAorICAgICAg
ICBXZWJBc3NlbWJseSBKUyBBUEk6IGFkZCBNb2R1bGUuc2VjdGlvbnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE1OQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjk3NjAzMjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQXMgZGVzY3JpYmVkIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3Nl
bWJseS9kZXNpZ24vYmxvYi9tYXN0ZXIvSlMubWQjd2ViYXNzZW1ibHltb2R1bGVjdXN0b21zZWN0
aW9ucworCisgICAgICAgICogd2FzbS9CdWlsZGVyLmpzOiBhbGxvdyBjdXN0b20gc2VjdGlvbnMg
dG8gYmUgZHVwbGljYXRlZAorICAgICAgICAqIHdhc20vanMtYXBpL01vZHVsZS5jdXN0b21TZWN0
aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydC50aHJvd3MuV2ViQXNzZW1ibHkuTW9kdWxl
LnByb3RvdHlwZS5jdXN0b21TZWN0aW9ucyk6CisgICAgICAgIChhc3NlcnQuZXEpOgorCisyMDE3
LTAxLTAzICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKwogICAgICAgICBXZWJB
c3NlbWJseSBKUyBBUEk6IGNoZWNrIGFuZCB0ZXN0IGluLWNhbGwgLyBvdXQtY2FsbCB2YWx1ZXMK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDg3Ngog
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjk4NDQxMDc+CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dh
c20vQnVpbGRlci5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCmluZGV4IDFjYzhhNDcuLjJi
MDBhNWQgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCisrKyBiL0pTVGVzdHMv
d2FzbS9CdWlsZGVyLmpzCkBAIC03MTMsNyArNzEzLDggQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3Mg
QnVpbGRlciB7CiAgICAgICAgIGlmICh0aGlzLl9jaGVja2VkKSB7CiAgICAgICAgICAgICAvLyBD
aGVjayB1bmlxdWVuZXNzLgogICAgICAgICAgICAgZm9yIChjb25zdCBzIG9mIHRoaXMuX3NlY3Rp
b25zKQotICAgICAgICAgICAgICAgIGFzc2VydC5mYWxzeShzLm5hbWUgPT09IG5hbWUgJiYgcy5p
ZCA9PT0gbnVtYmVyLCBgQ2Fubm90IGhhdmUgdHdvIHNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFt
ZSAiJHtuYW1lfSIgYW5kIElEICR7bnVtYmVyfWApOworICAgICAgICAgICAgICAgIGlmIChudW1i
ZXIgIT09IF91bmtub3duU2VjdGlvbklkKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZmFs
c3kocy5uYW1lID09PSBuYW1lICYmIHMuaWQgPT09IG51bWJlciwgYENhbm5vdCBoYXZlIHR3byBz
ZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgIiR7bmFtZX0iIGFuZCBJRCAke251bWJlcn1gKTsK
ICAgICAgICAgICAgIC8vIENoZWNrIG9yZGVyaW5nLgogICAgICAgICAgICAgaWYgKChudW1iZXIg
IT09IF91bmtub3duU2VjdGlvbklkKSAmJiAodGhpcy5fc2VjdGlvbnMubGVuZ3RoICE9PSAwKSkg
ewogICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9zZWN0aW9ucy5sZW5ndGggLSAx
OyBpID49IDA7IC0taSkgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9Nb2R1bGUu
Y3VzdG9tU2VjdGlvbi5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLmN1c3RvbVNlY3Rp
b24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE3MGNlOQotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvTW9kdWxlLmN1c3RvbVNlY3Rpb24uanMK
QEAgLTAsMCArMSw3NiBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7Citp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKKworYXNzZXJ0LnRocm93cygo
KSA9PiBXZWJBc3NlbWJseS5Nb2R1bGUucHJvdG90eXBlLmN1c3RvbVNlY3Rpb25zKHVuZGVmaW5l
ZCwgIiIpLCBUeXBlRXJyb3IsIGBXZWJBc3NlbWJseS5Nb2R1bGUucHJvdG90eXBlLmN1c3RvbVNl
Y3Rpb25zIGNhbGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5Nb2R1bGUgfHRoaXN8IHZhbHVlYCk7
CisKK3sKKyAgICBjb25zdCBlbXB0eSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoKG5ldyBCdWls
ZGVyKCkpLldlYkFzc2VtYmx5KCkuZ2V0KCkpOworICAgIGFzc2VydC5pc0FycmF5KGVtcHR5LmN1
c3RvbVNlY3Rpb25zKCIiKSk7CisgICAgYXNzZXJ0LmVxKGVtcHR5LmN1c3RvbVNlY3Rpb25zKCIi
KS5sZW5ndGgsIDApOworfQorCit7CisgICAgY29uc3Qgc2luZ2xlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZSgobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlVua25vd24oImhlbGxvIikuQnl0ZSgw
eDAwKS5CeXRlKDB4NDIpLkJ5dGUoMHhGRikuRW5kKCkKKyAgICAgICAgLldlYkFzc2VtYmx5KCku
Z2V0KCkpOworICAgIGFzc2VydC5lcShzaW5nbGUuY3VzdG9tU2VjdGlvbnMoIiIpLmxlbmd0aCwg
MCk7CisgICAgY29uc3QgaGVsbG8gPSBzaW5nbGUuY3VzdG9tU2VjdGlvbnMoImhlbGxvIik7Cisg
ICAgYXNzZXJ0LmVxKGhlbGxvLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGhlbGxvWzBdLmJ5
dGVMZW5ndGgsIDMpOworICAgIGNvbnN0IGhlbGxvSTggPSBuZXcgSW50OEFycmF5KGhlbGxvWzBd
KTsKKyAgICBhc3NlcnQuZXEoaGVsbG9JOFswXSwgMHgwMCk7CisgICAgYXNzZXJ0LmVxKGhlbGxv
SThbMV0sIDB4NDIpOworICAgIGFzc2VydC5lcShoZWxsb0k4WzJdLCAtMSk7Cit9CisKK3sKKyAg
ICBjb25zdCB1bmljb2RlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSgobmV3IEJ1aWxkZXIoKSkK
KyAgICAgICAgLlVua25vd24oIvCfkajigI3inaTvuI/igI3wn5KL4oCN8J+RqCIpLkJ5dGUoNDIp
LkVuZCgpCisgICAgICAgIC5XZWJBc3NlbWJseSgpLmdldCgpKTsKKyAgICBjb25zdCBmYW1pbHkg
PSB1bmljb2RlLmN1c3RvbVNlY3Rpb25zKCLwn5Go4oCN4p2k77iP4oCN8J+Si+KAjfCfkagiKTsK
KyAgICBhc3NlcnQuZXEoZmFtaWx5Lmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKGZhbWlseVsw
XS5ieXRlTGVuZ3RoLCAxKTsKKyAgICBjb25zdCBmYW1pbHlJOCA9IG5ldyBJbnQ4QXJyYXkoZmFt
aWx5WzBdKTsKKyAgICBhc3NlcnQuZXEoZmFtaWx5SThbMF0sIDQyKTsKK30KKworeworICAgIGNv
bnN0IG1hbnkgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKChuZXcgQnVpbGRlcigpKQorICAgICAg
ICAuVW5rbm93bigiemVybyIpLkJ5dGUoMCkuRW5kKCkKKyAgICAgICAgLlVua25vd24oIm9uZSIp
LkJ5dGUoMSkuQnl0ZSgxKS5FbmQoKQorICAgICAgICAuVW5rbm93bigib25lIikuQnl0ZSgyKS5C
eXRlKDIpLkJ5dGUoMikuRW5kKCkKKyAgICAgICAgLlVua25vd24oInR3byIpLkJ5dGUoMykuQnl0
ZSgzKS5CeXRlKDMpLkJ5dGUoMykuRW5kKCkKKyAgICAgICAgLlVua25vd24oIm9uZSIpLkJ5dGUo
NCkuQnl0ZSg0KS5CeXRlKDQpLkJ5dGUoNCkuQnl0ZSg0KS5FbmQoKQorICAgICAgICAuV2ViQXNz
ZW1ibHkoKS5nZXQoKSk7CisKKyAgICBjb25zdCB6ZXJvID0gbWFueS5jdXN0b21TZWN0aW9ucygi
emVybyIpOworICAgIGFzc2VydC5lcSh6ZXJvLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0LmVxKHpl
cm9bMF0uYnl0ZUxlbmd0aCwgMSk7CisgICAgY29uc3QgemVyb0k4ID0gbmV3IEludDhBcnJheSh6
ZXJvWzBdKTsKKyAgICBhc3NlcnQuZXEoemVyb0k4WzBdLCAwKTsKKworICAgIGNvbnN0IHR3byA9
IG1hbnkuY3VzdG9tU2VjdGlvbnMoInR3byIpOworICAgIGFzc2VydC5lcSh0d28ubGVuZ3RoLCAx
KTsKKyAgICBhc3NlcnQuZXEodHdvWzBdLmJ5dGVMZW5ndGgsIDQpOworICAgIGNvbnN0IHR3b0k4
ID0gbmV3IEludDhBcnJheSh0d29bMF0pOworICAgIGFzc2VydC5lcSh0d29JOFswXSwgMyk7Cisg
ICAgYXNzZXJ0LmVxKHR3b0k4WzFdLCAzKTsKKyAgICBhc3NlcnQuZXEodHdvSThbMl0sIDMpOwor
ICAgIGFzc2VydC5lcSh0d29JOFszXSwgMyk7CisKKyAgICBjb25zdCBvbmUgPSBtYW55LmN1c3Rv
bVNlY3Rpb25zKCJvbmUiKTsKKyAgICBhc3NlcnQuZXEob25lLmxlbmd0aCwgMyk7CisgICAgbGV0
IHNlZW4gPSAwOworICAgIGNvbnN0IGV4cGVjdCA9IFsKKyAgICAgICAgWzEsIDFdLAorICAgICAg
ICBbMiwgMiwgMl0sCisgICAgICAgIFs0LCA0LCA0LCA0LCA0XSwKKyAgICBdOworICAgIGZvciAo
Y29uc3Qgc2VjdGlvbiBvZiBvbmUpIHsKKyAgICAgICAgYXNzZXJ0LmVxKHNlY3Rpb24uYnl0ZUxl
bmd0aCwgZXhwZWN0W3NlZW5dLmxlbmd0aCk7CisgICAgICAgIGNvbnN0IEk4ID0gbmV3IEludDhB
cnJheShzZWN0aW9uKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBlY3Rbc2Vlbl0u
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBhc3NlcnQuZXEoSThbaV0sIGV4cGVjdFtzZWVuXVtp
XSk7CisgICAgICAgICsrc2VlbjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRl
eCA2ZDBhNzcyLi41NWQ2NzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwy
NCBAQAogMjAxNy0wMS0wMyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKKyAg
ICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBhZGQgTW9kdWxlLnNlY3Rpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUxNTkKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI5NzYwMzI2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFzIGRlc2NyaWJlZCBpbjogaHR0cHM6Ly9naXRodWIuY29tL1dlYkFz
c2VtYmx5L2Rlc2lnbi9ibG9iL21hc3Rlci9KUy5tZCN3ZWJhc3NlbWJseW1vZHVsZWN1c3RvbXNl
Y3Rpb25zCisKKyAgICAgICAgVGhpcyB3YXMgYWRkZWQgZm9yIEVtc2NyaXB0ZW4sIGFuZCBpcyBs
aWtlbHkgdG8gYmUgdXNlZCBzb29uLgorCisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6IGN1
c3RvbSBzZWN0aW9ucyBhcmUganVzdCBuYW1lICsgYnl0ZXMKKyAgICAgICAgKiB3YXNtL1dhc21N
b2R1bGVQYXJzZXIuY3BwOiBwYXJzZSB0aGVtLCBpbnN0ZWFkIG9mIHNraXBwaW5nIG92ZXIKKyAg
ICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUHJvdG90eXBlLmNwcDogY29uc3RydWN0IHRoZSBBcnJheSBvZgorICAgICAg
ICBBcnJheUJ1ZmZlciBhcyBkZXNjcmliZWQgaW4gdGhlIHNwZWMKKyAgICAgICAgKEpTQzo6d2Vi
QXNzZW1ibHlNb2R1bGVQcm90b0N1c3RvbVNlY3Rpb25zKToKKworMjAxNy0wMS0wMyAgSkYgQmFz
dGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKICAgICAgICAgUkVHUkVTU0lPTiAocjIxMDI0
NCk6IFJlbGVhc2UgSlNDIFN0cmVzcyB0ZXN0IGZhaWx1cmU6IHdhc20ueWFtbC93YXNtL2pzLWFw
aS93YXNtLXRvLXdhc20uanMuZGVmYXVsdC13YXNtCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY2NjkKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5
ODU2NDU1PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1h
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IDBkN2Uw
YTUuLmRjNjM0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAg
LTIyMCw2ICsyMjAsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNJbXBvcnQgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9pc1ZhbGlkIHsgZmFsc2UgfTsKIH07CisgICAgCitzdHJ1Y3QgQ3VzdG9t
U2VjdGlvbiB7CisgICAgU3RyaW5nIG5hbWU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWQ7
Cit9OwogCiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAgIFZlY3RvcjxJbXBvcnQ+IGlt
cG9ydHM7CkBAIC0yMzUsNiArMjQwLDggQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAg
ICBUYWJsZUluZm9ybWF0aW9uIHRhYmxlSW5mb3JtYXRpb247CiAgICAgVmVjdG9yPEdsb2JhbD4g
Z2xvYmFsczsKICAgICB1bnNpZ25lZCBmaXJzdEludGVybmFsR2xvYmFsIHsgMCB9OworICAgIFZl
Y3RvcjxDdXN0b21TZWN0aW9uPiBjdXN0b21TZWN0aW9uczsKKwogICAgIHNpemVfdCBmdW5jdGlv
bkluZGV4U3BhY2VTaXplKCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKSArIGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsg
fQogICAgIGJvb2wgaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzaXpl
X3QgZnVuY3Rpb25JbmRleCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCmluZGV4IDMwMTFjODkuLjAwZmFjMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC04
Nyw4ICs4Nyw3IEBAIGF1dG8gTW9kdWxlUGFyc2VyOjpwYXJzZSgpIC0+IFJlc3VsdAogI3VuZGVm
IFdBU01fU0VDVElPTl9QQVJTRQogCiAgICAgICAgIGNhc2UgU2VjdGlvbjo6VW5rbm93bjogewot
ICAgICAgICAgICAgLy8gSWdub3JlIHNlY3Rpb24ncyBuYW1lIExFQiBhbmQgYnl0ZXM6IHRoZXkn
cmUgYWxyZWFkeSBpbmNsdWRlZCBpbiBzZWN0aW9uTGVuZ3RoLgotICAgICAgICAgICAgbV9vZmZz
ZXQgKz0gc2VjdGlvbkxlbmd0aDsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJ
TFMocGFyc2VDdXN0b20oc2VjdGlvbkxlbmd0aCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtNjAwLDYgKzU5OSwzMCBAQCBhdXRvIE1vZHVsZVBhcnNlcjo6
cGFyc2VEYXRhKCkgLT4gUGFydGlhbFJlc3VsdAogICAgIH0KICAgICByZXR1cm4geyB9OwogfQor
ICAgIAorYXV0byBNb2R1bGVQYXJzZXI6OnBhcnNlQ3VzdG9tKHVpbnQzMl90IHNlY3Rpb25MZW5n
dGgpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAgICBjb25zdCB1aW50MzJfdCBjdXN0b21TZWN0aW9u
U3RhcnRPZmZzZXQgPSBtX29mZnNldDsKKworICAgIEN1c3RvbVNlY3Rpb24gc2VjdGlvbjsKKyAg
ICB1aW50MzJfdCBjdXN0b21TZWN0aW9uTnVtYmVyID0gbV9yZXN1bHQubW9kdWxlLT5jdXN0b21T
ZWN0aW9ucy5zaXplKCkgKyAxOworICAgIHVpbnQzMl90IG5hbWVMZW47CisgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighbV9yZXN1bHQubW9kdWxlLT5jdXN0b21TZWN0aW9ucy50cnlSZXNlcnZlQ2Fw
YWNpdHkoY3VzdG9tU2VjdGlvbk51bWJlciksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5
IGZvciAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24iKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihuYW1lTGVuKSwgImNhbid0IGdldCAi
LCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3VzdG9tIHNlY3Rpb24ncyBuYW1lIGxlbmd0aCIp
OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWNvbnN1bWVVVEY4U3RyaW5nKHNlY3Rpb24ubmFt
ZSwgbmFtZUxlbiksICJuYW1lTGVuIGdldCAiLCBjdXN0b21TZWN0aW9uTnVtYmVyLCAidGggY3Vz
dG9tIHNlY3Rpb24ncyBuYW1lIG9mIGxlbmd0aCAiLCBuYW1lTGVuKTsKKworICAgIHVpbnQzMl90
IHBheWxvYWRCeXRlcyA9IHNlY3Rpb25MZW5ndGggLSAobV9vZmZzZXQgLSBjdXN0b21TZWN0aW9u
U3RhcnRPZmZzZXQpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXNlY3Rpb24ucGF5bG9hZC50
cnlSZXNlcnZlQ2FwYWNpdHkocGF5bG9hZEJ5dGVzKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yICIsIGN1c3RvbVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbidzICIs
IHBheWxvYWRCeXRlcywgIiBieXRlcyIpOworICAgIGZvciAodWludDMyX3QgYnl0ZU51bWJlciA9
IDA7IGJ5dGVOdW1iZXIgPCBwYXlsb2FkQnl0ZXM7ICsrYnl0ZU51bWJlcikgeworICAgICAgICB1
aW50OF90IGJ5dGU7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgoYnl0
ZSksICJjYW4ndCBnZXQgIiwgYnl0ZU51bWJlciwgInRoIGRhdGEgYnl0ZSBmcm9tICIsIGN1c3Rv
bVNlY3Rpb25OdW1iZXIsICJ0aCBjdXN0b20gc2VjdGlvbiIpOworICAgICAgICBzZWN0aW9uLnBh
eWxvYWQudW5jaGVja2VkQXBwZW5kKGJ5dGUpOworICAgIH0KKyAgICAKKyAgICBtX3Jlc3VsdC5t
b2R1bGUtPmN1c3RvbVNlY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHNlY3Rpb24pKTsK
KworICAgIHJldHVybiB7IH07Cit9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAppbmRleCA3ZTAy
NmM5Li40MWI1N2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5oCkBAIC02MCw2ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgRk9SX0VBQ0hfV0FTTV9T
RUNUSU9OKFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUikKICN1bmRlZiBXQVNNX1NFQ1RJT05f
REVDTEFSRV9QQVJTRVIKIAorICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlQ3VzdG9tKHVpbnQzMl90KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VUYWJsZUhlbHBlcihib29sIGlzSW1wb3J0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUHJvdG90eXBlLmNwcAppbmRleCAyYmIyYjVlLi5iODdhY2FiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVByb3RvdHlw
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVQcm90b3R5cGUuY3BwCkBAIC0yOCw4ICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJGdW5jdGlvblByb3Rv
dHlwZS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorCituYW1lc3BhY2UgSlNDIHsK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TW9kdWxlUHJv
dG9DdXN0b21TZWN0aW9ucyhFeGVjU3RhdGUqKTsKK30KIAogI2luY2x1ZGUgIldlYkFzc2VtYmx5
TW9kdWxlUHJvdG90eXBlLmx1dC5oIgogCkBAIC0zOSw5ICs0Niw0NSBAQCBjb25zdCBDbGFzc0lu
Zm8gV2ViQXNzZW1ibHlNb2R1bGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1v
ZHVsZS5wcm90bwogCiAvKiBTb3VyY2UgZm9yIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlLmx1
dC5oCiAgQGJlZ2luIHByb3RvdHlwZVRhYmxlV2ViQXNzZW1ibHlNb2R1bGUKKyBjdXN0b21TZWN0
aW9ucyB3ZWJBc3NlbWJseU1vZHVsZVByb3RvQ3VzdG9tU2VjdGlvbnMgRG9udEVudW18RnVuY3Rp
b24gMQogIEBlbmQKICAqLwogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5TW9kdWxlUHJvdG9DdXN0b21TZWN0aW9ucyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBqc0R5bmFtaWNDYXN0
PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFtb2R1
bGUpCisgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1vZHVsZS5wcm90b3R5cGUuY3Vz
dG9tU2VjdGlvbnMgY2FsbGVkIHdpdGggbm9uIFdlYkFzc2VtYmx5Lk1vZHVsZSB8dGhpc3wgdmFs
dWUiKSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKworICAg
IGNvbnN0IFN0cmluZyBzZWN0aW9uTmFtZVN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLmdldFN0
cmluZyhleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisK
KyAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIs
IGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OworCisgICAgY29uc3QgYXV0byYgY3VzdG9tU2VjdGlvbnMgPSBtb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCkuY3VzdG9tU2VjdGlvbnM7CisgICAgZm9yIChjb25zdCBXYXNtOjpDdXN0b21TZWN0
aW9uJiBzZWN0aW9uIDogY3VzdG9tU2VjdGlvbnMpIHsKKyAgICAgICAgaWYgKHNlY3Rpb24ubmFt
ZSA9PSBzZWN0aW9uTmFtZVN0cmluZykgeworICAgICAgICAgICAgYXV0byBidWZmZXIgPSBBcnJh
eUJ1ZmZlcjo6dHJ5Q3JlYXRlKHNlY3Rpb24ucGF5bG9hZC5kYXRhKCksIHNlY3Rpb24ucGF5bG9h
ZC5zaXplKCkpOworICAgICAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVj
KSk7CisKKyAgICAgICAgICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBKU1ZhbHVlKCksIGds
b2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoQXJyYXlCdWZmZXJTaGFyaW5nTW9kZTo6
RGVmYXVsdCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOworCisgICAgICAgICAgICByZXN1bHQtPnB1c2goZXhlYywgSlNBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKHZtLCBhcnJheUJ1ZmZlclN0cnVjdHVyZSwgV1RGTW92ZShidWZmZXIpKSk7CisgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKIFdlYkFzc2Vt
Ymx5TW9kdWxlUHJvdG90eXBlKiBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZTo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBhdXRv
KiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseU1vZHVsZVBy
b3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5TW9kdWxlUHJvdG90eXBlKHZtLCBzdHJ1Y3R1
cmUpOwotLSAKMi45LjMKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>