<?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>236933</bug_id>
          
          <creation_ts>2022-02-19 23:30:43 -0800</creation_ts>
          <short_desc>[WebGPU] Tracer bullet part 11: Implement shader creation methods</short_desc>
          <delta_ts>2022-02-21 13:35:20 -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>WebGPU</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>236879</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>rmorisset</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1844029</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-19 23:30:43 -0800</bug_when>
    <thetext>This implements Device::createShaderModule() and Device::createComputePipeline(). The async versions (neither the WebGPU nor the Metal flavor) aren&apos;t implemented yet; this is just the first basic implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844031</commentid>
    <comment_count>1</comment_count>
      <attachid>452681</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-19 23:32:14 -0800</bug_when>
    <thetext>Created attachment 452681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844359</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-02-21 13:34:29 -0800</bug_when>
    <thetext>Committed r290267 (247592@trunk): &lt;https://commits.webkit.org/247592@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844360</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-21 13:35:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/89254032&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452681</attachid>
            <date>2022-02-19 23:32:14 -0800</date>
            <delta_ts>2022-02-21 09:49:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22611</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkdQVS9DaGFu
Z2VMb2cKaW5kZXggMzA0YzAzNjA1ZGFhLi4zYTM1NDA1ZTk2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNDEgQEAKKzIwMjItMDItMTkgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxl
LmNvbT4KKworICAgICAgICBbV2ViR1BVXSBUcmFjZXIgYnVsbGV0IHBhcnQgMTE6IEltcGxlbWVu
dCBzaGFkZXIgY3JlYXRpb24gbWV0aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2OTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIERldmljZTo6Y3JlYXRlU2hhZGVyTW9k
dWxlKCkgYW5kIERldmljZTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lKCkuIFRoZSBhc3luYyB2ZXJz
aW9ucyAobmVpdGhlcgorICAgICAgICB0aGUgV2ViR1BVIG5vciB0aGUgTWV0YWwgZmxhdm9yKSBh
cmVuJ3QgaW1wbGVtZW50ZWQgeWV0OyB0aGlzIGlzIGp1c3QgdGhlIGZpcnN0IGJhc2ljIGltcGxl
bWVudGF0aW9uLgorCisgICAgICAgICogV2ViR1BVL0NvbXB1dGVQaXBlbGluZS5tbToKKyAgICAg
ICAgKFdlYkdQVTo6Y3JlYXRlTGlicmFyeSk6CisgICAgICAgIChXZWJHUFU6OmNyZWF0ZUNvbnN0
YW50VmFsdWVzKToKKyAgICAgICAgKFdlYkdQVTo6Y3JlYXRlRnVuY3Rpb24pOgorICAgICAgICAo
V2ViR1BVOjpjcmVhdGVDb21wdXRlUGlwZWxpbmVTdGF0ZSk6CisgICAgICAgIChXZWJHUFU6OkRl
dmljZTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpj
cmVhdGVDb21wdXRlUGlwZWxpbmVBc3luYyk6CisgICAgICAgICogV2ViR1BVL1BpcGVsaW5lTGF5
b3V0Lmg6CisgICAgICAgICogV2ViR1BVL1BpcGVsaW5lTGF5b3V0Lm1tOgorICAgICAgICAoV2Vi
R1BVOjpQaXBlbGluZUxheW91dDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJHUFU6
OlBpcGVsaW5lTGF5b3V0OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUvU2hh
ZGVyTW9kdWxlLmg6CisgICAgICAgIChXZWJHUFU6OlNoYWRlck1vZHVsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBXZWJHUFUvU2hhZGVyTW9kdWxlLm1tOgorICAgICAgICAoV2ViR1BVOjpmaW5kU2hh
ZGVyTW9kdWxlUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJHUFU6OlNoYWRlck1vZHVsZTo6Y3Jl
YXRlTGlicmFyeSk6CisgICAgICAgIChXZWJHUFU6OmVhcmx5Q29tcGlsZVNoYWRlck1vZHVsZSk6
CisgICAgICAgIChXZWJHUFU6OkRldmljZTo6Y3JlYXRlU2hhZGVyTW9kdWxlKToKKyAgICAgICAg
KFdlYkdQVTo6U2hhZGVyTW9kdWxlOjpTaGFkZXJNb2R1bGUpOgorICAgICAgICAoV2ViR1BVOjpD
b21waWxhdGlvbk1lc3NhZ2VEYXRhOjpDb21waWxhdGlvbk1lc3NhZ2VEYXRhKToKKyAgICAgICAg
KFdlYkdQVTo6Y29udmVydE1lc3NhZ2VzKToKKyAgICAgICAgKFdlYkdQVTo6U2hhZGVyTW9kdWxl
OjpnZXRDb21waWxhdGlvbkluZm8pOgorICAgICAgICAoV2ViR1BVOjpTaGFkZXJNb2R1bGU6OnNl
dExhYmVsKToKKyAgICAgICAgKFdlYkdQVTo6U2hhZGVyTW9kdWxlOjpjb252ZXJ0UGlwZWxpbmVM
YXlvdXQpOgorICAgICAgICAoV2ViR1BVOjpTaGFkZXJNb2R1bGU6OmFzdCBjb25zdCk6CisgICAg
ICAgIChXZWJHUFU6OlNoYWRlck1vZHVsZTo6cGlwZWxpbmVMYXlvdXRIaW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkdQVTo6U2hhZGVyTW9kdWxlOjplbnRyeVBvaW50SW5mb3JtYXRpb24gY29uc3Qp
OgorCiAyMDIyLTAyLTE5ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CiAKICAgICAgICAgW1dlYkdQVV0gVHJhY2VyIGJ1bGxldCBwYXJ0IDEwOiBJbXBsZW1lbnQgc2V0
TGFiZWwoKSBhbmQgTWV0YWwgYWNjZXNzb3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9Db21wdXRlUGlwZWxpbmUubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGlw
ZWxpbmUubW0KaW5kZXggZTU4YTRlMGEwOTYyLi5iMmYxYjIwNDYxOTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQaXBlbGluZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9Db21wdXRlUGlwZWxpbmUubW0KQEAgLTI5LDE3ICsyOSwxNTAgQEAKIAogI2ltcG9y
dCAiQmluZEdyb3VwTGF5b3V0LmgiCiAjaW1wb3J0ICJEZXZpY2UuaCIKKyNpbXBvcnQgIlBpcGVs
aW5lTGF5b3V0LmgiCisjaW1wb3J0ICJTaGFkZXJNb2R1bGUuaCIKIAogbmFtZXNwYWNlIFdlYkdQ
VSB7CiAKK3N0cnVjdCBMaWJyYXJ5Q3JlYXRpb25SZXN1bHQgeworICAgIGlkIDxNVExMaWJyYXJ5
PiBsaWJyYXJ5OworICAgIFdHU0w6OlJlZmxlY3Rpb246OkVudHJ5UG9pbnRJbmZvcm1hdGlvbiBl
bnRyeVBvaW50SW5mb3JtYXRpb247IC8vIEZJWE1FOiBUaGlzIGlzIGJpZy4gRG9uJ3QgY29weSB0
aGlzIGFyb3VuZC4KK307CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPExpYnJhcnlDcmVhdGlvblJl
c3VsdD4gY3JlYXRlTGlicmFyeShpZCA8TVRMRGV2aWNlPiBkZXZpY2UsIGNvbnN0IFNoYWRlck1v
ZHVsZSYgc2hhZGVyTW9kdWxlLCBjb25zdCBQaXBlbGluZUxheW91dCYgcGlwZWxpbmVMYXlvdXQs
IGNvbnN0IFN0cmluZyYgZW50cnlQb2ludCwgTlNTdHJpbmcgKmxhYmVsKQoreworICAgIGlmIChz
aGFkZXJNb2R1bGUubGlicmFyeSgpKSB7CisgICAgICAgIGlmIChjb25zdCBhdXRvKiBwaXBlbGlu
ZUxheW91dEhpbnQgPSBzaGFkZXJNb2R1bGUucGlwZWxpbmVMYXlvdXRIaW50KGVudHJ5UG9pbnQp
KSB7CisgICAgICAgICAgICBpZiAoKnBpcGVsaW5lTGF5b3V0SGludCA9PSBwaXBlbGluZUxheW91
dCkgeworICAgICAgICAgICAgICAgIGlmIChjb25zdCBhdXRvKiBlbnRyeVBvaW50SW5mb3JtYXRp
b24gPSBzaGFkZXJNb2R1bGUuZW50cnlQb2ludEluZm9ybWF0aW9uKGVudHJ5UG9pbnQpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geyB7IHNoYWRlck1vZHVsZS5saWJyYXJ5KCksICplbnRy
eVBvaW50SW5mb3JtYXRpb24gfSB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgY29uc3QgYXV0byogYXN0ID0gc2hhZGVyTW9kdWxlLmFzdCgpOworICAgIGlmICghYXN0
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byBwcmVwYXJlUmVzdWx0
ID0gV0dTTDo6cHJlcGFyZSgqYXN0LCBlbnRyeVBvaW50LCBTaGFkZXJNb2R1bGU6OmNvbnZlcnRQ
aXBlbGluZUxheW91dChwaXBlbGluZUxheW91dCkpOworCisgICAgYXV0byBsaWJyYXJ5ID0gU2hh
ZGVyTW9kdWxlOjpjcmVhdGVMaWJyYXJ5KGRldmljZSwgcHJlcGFyZVJlc3VsdC5tc2wsIGxhYmVs
KTsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBwcmVwYXJlUmVzdWx0LmVudHJ5UG9pbnRzLmZpbmQo
ZW50cnlQb2ludCk7CisgICAgaWYgKGl0ZXJhdG9yID09IHByZXBhcmVSZXN1bHQuZW50cnlQb2lu
dHMuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgY29uc3QgYXV0byYg
ZW50cnlQb2ludEluZm9ybWF0aW9uID0gaXRlcmF0b3ItPnZhbHVlOworCisgICAgcmV0dXJuIHsg
eyBsaWJyYXJ5LCBlbnRyeVBvaW50SW5mb3JtYXRpb24gfSB9OworfQorCitzdGF0aWMgTVRMRnVu
Y3Rpb25Db25zdGFudFZhbHVlcyAqY3JlYXRlQ29uc3RhbnRWYWx1ZXModWludDMyX3QgY29uc3Rh
bnRDb3VudCwgY29uc3QgV0dQVUNvbnN0YW50RW50cnkqIGNvbnN0YW50cywgY29uc3QgV0dTTDo6
UmVmbGVjdGlvbjo6RW50cnlQb2ludEluZm9ybWF0aW9uJiBlbnRyeVBvaW50SW5mb3JtYXRpb24p
Cit7CisgICAgYXV0byBjb25zdGFudFZhbHVlcyA9IFtNVExGdW5jdGlvbkNvbnN0YW50VmFsdWVz
IG5ld107CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvbnN0YW50Q291bnQ7ICsraSkg
eworICAgICAgICBjb25zdCBhdXRvJiBlbnRyeSA9IGNvbnN0YW50c1tpXTsKKyAgICAgICAgYXV0
byBuYW1lSXRlcmF0b3IgPSBlbnRyeVBvaW50SW5mb3JtYXRpb24uc3BlY2lhbGl6YXRpb25Db25z
dGFudEluZGljZXMuZmluZChlbnRyeS5rZXkpOworICAgICAgICBpZiAobmFtZUl0ZXJhdG9yID09
IGVudHJ5UG9pbnRJbmZvcm1hdGlvbi5zcGVjaWFsaXphdGlvbkNvbnN0YW50SW5kaWNlcy5lbmQo
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBhdXRvIHNwZWNpYWxpemF0
aW9uQ29uc3RhbnRJbmRleCA9IG5hbWVJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8gaW5k
ZXhJdGVyYXRvciA9IGVudHJ5UG9pbnRJbmZvcm1hdGlvbi5zcGVjaWFsaXphdGlvbkNvbnN0YW50
cy5maW5kKHNwZWNpYWxpemF0aW9uQ29uc3RhbnRJbmRleCk7CisgICAgICAgIGlmIChpbmRleEl0
ZXJhdG9yID09IGVudHJ5UG9pbnRJbmZvcm1hdGlvbi5zcGVjaWFsaXphdGlvbkNvbnN0YW50cy5l
bmQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBjb25zdCBhdXRvJiBz
cGVjaWFsaXphdGlvbkNvbnN0YW50ID0gaW5kZXhJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIHN3
aXRjaCAoc3BlY2lhbGl6YXRpb25Db25zdGFudC50eXBlKSB7CisgICAgICAgIGNhc2UgV0dTTDo6
UmVmbGVjdGlvbjo6U3BlY2lhbGl6YXRpb25Db25zdGFudFR5cGU6OkJvb2xlYW46IHsKKyAgICAg
ICAgICAgIGJvb2wgdmFsdWUgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIFtjb25zdGFudFZh
bHVlcyBzZXRDb25zdGFudFZhbHVlOiZ2YWx1ZSB0eXBlOk1UTERhdGFUeXBlQm9vbCB3aXRoTmFt
ZTpzcGVjaWFsaXphdGlvbkNvbnN0YW50Lm1hbmdsZWROYW1lXTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgV0dTTDo6UmVmbGVjdGlvbjo6U3BlY2lhbGl6YXRp
b25Db25zdGFudFR5cGU6OkZsb2F0OiB7CisgICAgICAgICAgICBmbG9hdCB2YWx1ZSA9IGVudHJ5
LnZhbHVlOworICAgICAgICAgICAgW2NvbnN0YW50VmFsdWVzIHNldENvbnN0YW50VmFsdWU6JnZh
bHVlIHR5cGU6TVRMRGF0YVR5cGVGbG9hdCB3aXRoTmFtZTpzcGVjaWFsaXphdGlvbkNvbnN0YW50
Lm1hbmdsZWROYW1lXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgV0dTTDo6UmVmbGVjdGlvbjo6U3BlY2lhbGl6YXRpb25Db25zdGFudFR5cGU6OkludDogewor
ICAgICAgICAgICAgaW50IHZhbHVlID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICBbY29uc3Rh
bnRWYWx1ZXMgc2V0Q29uc3RhbnRWYWx1ZTomdmFsdWUgdHlwZTpNVExEYXRhVHlwZUludCB3aXRo
TmFtZTpzcGVjaWFsaXphdGlvbkNvbnN0YW50Lm1hbmdsZWROYW1lXTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV0dTTDo6UmVmbGVjdGlvbjo6U3BlY2lhbGl6
YXRpb25Db25zdGFudFR5cGU6OlVuc2lnbmVkOiB7CisgICAgICAgICAgICB1bnNpZ25lZCB2YWx1
ZSA9IGVudHJ5LnZhbHVlOworICAgICAgICAgICAgW2NvbnN0YW50VmFsdWVzIHNldENvbnN0YW50
VmFsdWU6JnZhbHVlIHR5cGU6TVRMRGF0YVR5cGVVSW50IHdpdGhOYW1lOnNwZWNpYWxpemF0aW9u
Q29uc3RhbnQubWFuZ2xlZE5hbWVdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBjb25zdGFudFZhbHVlczsKK30KKworc3RhdGljIGlkIDxNVExGdW5j
dGlvbj4gY3JlYXRlRnVuY3Rpb24oaWQgPE1UTExpYnJhcnk+IGxpYnJhcnksIGNvbnN0IFdHU0w6
OlJlZmxlY3Rpb246OkVudHJ5UG9pbnRJbmZvcm1hdGlvbiYgZW50cnlQb2ludEluZm9ybWF0aW9u
LCBjb25zdCBXR1BVUHJvZ3JhbW1hYmxlU3RhZ2VEZXNjcmlwdG9yJiBjb21wdXRlLCBOU1N0cmlu
ZyAqbGFiZWwpCit7CisgICAgYXV0byBmdW5jdGlvbkRlc2NyaXB0b3IgPSBbTVRMRnVuY3Rpb25E
ZXNjcmlwdG9yIG5ld107CisgICAgZnVuY3Rpb25EZXNjcmlwdG9yLm5hbWUgPSBlbnRyeVBvaW50
SW5mb3JtYXRpb24ubWFuZ2xlZE5hbWU7CisgICAgaWYgKGNvbXB1dGUuY29uc3RhbnRDb3VudCkg
eworICAgICAgICBhdXRvIGNvbnN0YW50VmFsdWVzID0gY3JlYXRlQ29uc3RhbnRWYWx1ZXMoY29t
cHV0ZS5jb25zdGFudENvdW50LCBjb21wdXRlLmNvbnN0YW50cywgZW50cnlQb2ludEluZm9ybWF0
aW9uKTsKKyAgICAgICAgaWYgKCFjb25zdGFudFZhbHVlcykKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBmdW5jdGlvbkRlc2NyaXB0b3IuY29uc3RhbnRWYWx1ZXMgPSBjb25z
dGFudFZhbHVlczsKKyAgICB9CisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgaWQgPE1U
TEZ1bmN0aW9uPiBmdW5jdGlvbiA9IFtsaWJyYXJ5IG5ld0Z1bmN0aW9uV2l0aERlc2NyaXB0b3I6
ZnVuY3Rpb25EZXNjcmlwdG9yIGVycm9yOiZlcnJvcl07CisgICAgaWYgKGVycm9yKQorICAgICAg
ICBXVEZMb2dBbHdheXMoIkZ1bmN0aW9uIGNyZWF0aW9uIGVycm9yOiAlQCIsIGVycm9yKTsKKyAg
ICBmdW5jdGlvbi5sYWJlbCA9IGxhYmVsOworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworc3Rh
dGljIGlkIDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4gY3JlYXRlQ29tcHV0ZVBpcGVsaW5lU3Rh
dGUoaWQgPE1UTERldmljZT4gZGV2aWNlLCBpZCA8TVRMRnVuY3Rpb24+IGZ1bmN0aW9uLCBjb25z
dCBQaXBlbGluZUxheW91dCYgcGlwZWxpbmVMYXlvdXQsIGNvbnN0IFdHU0w6OlJlZmxlY3Rpb246
OkNvbXB1dGUmIGNvbXB1dGVJbmZvcm1hdGlvbiwgTlNTdHJpbmcgKmxhYmVsKQoreworICAgIGF1
dG8gY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IFtNVExDb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yIG5ld107CisgICAgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvci5jb21wdXRlRnVuY3Rpb24g
PSBmdW5jdGlvbjsKKyAgICAvLyBGSVhNRTogY2hlY2sgdGhpcyBjYWxjdWxhdGlvbiBmb3Igb3Zl
cmZsb3cKKyAgICBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yLm1heFRvdGFsVGhyZWFkc1BlclRo
cmVhZGdyb3VwID0gY29tcHV0ZUluZm9ybWF0aW9uLndvcmtncm91cFNpemUud2lkdGggKiBjb21w
dXRlSW5mb3JtYXRpb24ud29ya2dyb3VwU2l6ZS5oZWlnaHQgKiBjb21wdXRlSW5mb3JtYXRpb24u
d29ya2dyb3VwU2l6ZS5kZXB0aDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBpcGVsaW5l
TGF5b3V0Lm51bWJlck9mQmluZEdyb3VwTGF5b3V0cygpOyArK2kpCisgICAgICAgIGNvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IuYnVmZmVyc1tpXS5tdXRhYmlsaXR5ID0gTVRMTXV0YWJpbGl0eUlt
bXV0YWJsZTsgLy8gQXJndW1lbnQgYnVmZmVycyBhcmUgYWx3YXlzIGltbXV0YWJsZSBpbiBXZWJH
UFUuCisgICAgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvci5zdXBwb3J0SW5kaXJlY3RDb21tYW5k
QnVmZmVycyA9IFlFUzsKKyAgICBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yLmxhYmVsID0gbGFi
ZWw7CisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgLy8gRklYTUU6IFJ1biB0aGUgYXN5
bmNocm9ub3VzIHZlcnNpb24gb2YgdGhpcworICAgIGlkIDxNVExDb21wdXRlUGlwZWxpbmVTdGF0
ZT4gY29tcHV0ZVBpcGVsaW5lU3RhdGUgPSBbZGV2aWNlIG5ld0NvbXB1dGVQaXBlbGluZVN0YXRl
V2l0aERlc2NyaXB0b3I6Y29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciBvcHRpb25zOk1UTFBpcGVs
aW5lT3B0aW9uTm9uZSByZWZsZWN0aW9uOm5pbCBlcnJvcjomZXJyb3JdOworICAgIGlmIChlcnJv
cikKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJQaXBlbGluZSBzdGF0ZSBjcmVhdGlvbiBlcnJvcjog
JUAiLCBlcnJvcik7CisgICAgcmV0dXJuIGNvbXB1dGVQaXBlbGluZVN0YXRlOworfQorCiBSZWZQ
dHI8Q29tcHV0ZVBpcGVsaW5lPiBEZXZpY2U6OmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb25zdCBX
R1BVQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciogZGVzY3JpcHRvcikKIHsKLSAgICBVTlVTRURf
UEFSQU0oZGVzY3JpcHRvcik7Ci0gICAgcmV0dXJuIENvbXB1dGVQaXBlbGluZTo6Y3JlYXRlKG5p
bCk7CisgICAgaWYgKGRlc2NyaXB0b3ItPm5leHRJbkNoYWluIHx8IGRlc2NyaXB0b3ItPmNvbXB1
dGUubmV4dEluQ2hhaW4pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgU2hh
ZGVyTW9kdWxlJiBzaGFkZXJNb2R1bGUgPSBkZXNjcmlwdG9yLT5jb21wdXRlLm1vZHVsZS0+c2hh
ZGVyTW9kdWxlOworICAgIGNvbnN0IFBpcGVsaW5lTGF5b3V0JiBwaXBlbGluZUxheW91dCA9IGRl
c2NyaXB0b3ItPmxheW91dC0+cGlwZWxpbmVMYXlvdXQ7CisgICAgYXV0byBsYWJlbCA9IFtOU1N0
cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpkZXNjcmlwdG9yLT5sYWJlbCBlbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZ107CisKKyAgICBhdXRvIGxpYnJhcnlDcmVhdGlvblJlc3VsdCA9IGNyZWF0
ZUxpYnJhcnkobV9kZXZpY2UsIHNoYWRlck1vZHVsZSwgcGlwZWxpbmVMYXlvdXQsIGRlc2NyaXB0
b3ItPmNvbXB1dGUuZW50cnlQb2ludCwgbGFiZWwpOworICAgIGlmICghbGlicmFyeUNyZWF0aW9u
UmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbGlicmFyeSA9IGxp
YnJhcnlDcmVhdGlvblJlc3VsdC0+bGlicmFyeTsKKyAgICBjb25zdCBhdXRvJiBlbnRyeVBvaW50
SW5mb3JtYXRpb24gPSBsaWJyYXJ5Q3JlYXRpb25SZXN1bHQtPmVudHJ5UG9pbnRJbmZvcm1hdGlv
bjsKKworICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxXR1NMOjpSZWZsZWN0aW9uOjpD
b21wdXRlPihlbnRyeVBvaW50SW5mb3JtYXRpb24udHlwZWRFbnRyeVBvaW50KSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgY29uc3QgYXV0byYgY29tcHV0ZUluZm9ybWF0aW9uID0gc3Rk
OjpnZXQ8V0dTTDo6UmVmbGVjdGlvbjo6Q29tcHV0ZT4oZW50cnlQb2ludEluZm9ybWF0aW9uLnR5
cGVkRW50cnlQb2ludCk7CisKKyAgICBhdXRvIGZ1bmN0aW9uID0gY3JlYXRlRnVuY3Rpb24obGli
cmFyeSwgZW50cnlQb2ludEluZm9ybWF0aW9uLCBkZXNjcmlwdG9yLT5jb21wdXRlLCBsYWJlbCk7
CisKKyAgICBhdXRvIGNvbXB1dGVQaXBlbGluZVN0YXRlID0gY3JlYXRlQ29tcHV0ZVBpcGVsaW5l
U3RhdGUobV9kZXZpY2UsIGZ1bmN0aW9uLCBwaXBlbGluZUxheW91dCwgY29tcHV0ZUluZm9ybWF0
aW9uLCBsYWJlbCk7CisKKyAgICByZXR1cm4gQ29tcHV0ZVBpcGVsaW5lOjpjcmVhdGUoY29tcHV0
ZVBpcGVsaW5lU3RhdGUpOwogfQogCiB2b2lkIERldmljZTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5l
QXN5bmMoY29uc3QgV0dQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIFdU
Rjo6RnVuY3Rpb248dm9pZChXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywgUmVmUHRyPENv
bXB1dGVQaXBlbGluZT4mJiwgY29uc3QgY2hhciogbWVzc2FnZSk+JiYgY2FsbGJhY2spCiB7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCiAgICAgVU5VU0VEX1BBUkFNKGRlc2NyaXB0b3Ip
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsYmFjayk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9QaXBlbGluZUxheW91dC5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxp
bmVMYXlvdXQuaAppbmRleCBkNjNhNDRmZGE0NTEuLjgyMTI1NmQ4MDE4MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQuaAorKysgYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9QaXBlbGluZUxheW91dC5oCkBAIC00Niw2ICs0Niw5IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0TGFiZWwoY29uc3QgY2hhciopOwogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFBpcGVsaW5lTGF5b3V0JikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBpcGVs
aW5lTGF5b3V0JikgY29uc3Q7CisKICAgICBzaXplX3QgbnVtYmVyT2ZCaW5kR3JvdXBMYXlvdXRz
KCkgY29uc3QgeyByZXR1cm4gbV9iaW5kR3JvdXBMYXlvdXRzLnNpemUoKTsgfQogICAgIGNvbnN0
IEJpbmRHcm91cExheW91dCYgYmluZEdyb3VwTGF5b3V0KHNpemVfdCBpKSBjb25zdCB7IHJldHVy
biBtX2JpbmRHcm91cExheW91dHNbaV07IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9X
ZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9QaXBlbGluZUxh
eW91dC5tbQppbmRleCA3MDQ2YjNkOWNiNjguLjdlYTJhZDk5ZDBhYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KKysrIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvUGlwZWxpbmVMYXlvdXQubW0KQEAgLTU3LDYgKzU3LDE4IEBAIHZvaWQgUGlwZWxpbmVM
YXlvdXQ6OnNldExhYmVsKGNvbnN0IGNoYXIqKQogICAgIC8vIFRoZXJlIGlzIG5vIE1ldGFsIG9i
amVjdCB0aGF0IHJlcHJlc2VudHMgYSBwaXBlbGluZSBsYXlvdXQuCiB9CiAKK2Jvb2wgUGlwZWxp
bmVMYXlvdXQ6Om9wZXJhdG9yPT0oY29uc3QgUGlwZWxpbmVMYXlvdXQmIG90aGVyKSBjb25zdAor
eworICAgIFVOVVNFRF9QQVJBTShvdGhlcik7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBpcGVsaW5lTGF5b3V0OjpvcGVyYXRvciE9
KGNvbnN0IFBpcGVsaW5lTGF5b3V0JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7Cit9CisKIH0KIAogdm9pZCB3Z3B1UGlwZWxpbmVMYXlvdXRSZWxlYXNlKFdH
UFVQaXBlbGluZUxheW91dCBwaXBlbGluZUxheW91dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1NoYWRlck1vZHVsZS5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvU2hhZGVyTW9k
dWxlLmgKaW5kZXggYjMwYjgwMjVmYmUxLi5iOGEwN2NhNzEwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1NoYWRlck1vZHVsZS5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L1NoYWRlck1vZHVsZS5oCkBAIC0yNSwxOCArMjUsMjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bXBvcnQgIldHU0wuaCIKICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW1wb3J0IDx3dGYv
UmVmLmg+CiAjaW1wb3J0IDx3dGYvUmVmQ291bnRlZC5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJHUFUgewogCitjbGFzcyBQaXBlbGluZUxheW91dDsKKwogY2xhc3MgU2hhZGVyTW9kdWxlIDog
cHVibGljIFJlZkNvdW50ZWQ8U2hhZGVyTW9kdWxlPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTaGFkZXJNb2R1bGU+IGNyZWF0ZShpZCA8
TVRMTGlicmFyeT4gbGlicmFyeSkKKyAgICBzdGF0aWMgUmVmPFNoYWRlck1vZHVsZT4gY3JlYXRl
KHN0ZDo6dmFyaWFudDxXR1NMOjpTdWNjZXNzZnVsQ2hlY2ssIFdHU0w6OkZhaWxlZENoZWNrPiYm
IGNoZWNrUmVzdWx0LCBIYXNoTWFwPFN0cmluZywgUmVmPFBpcGVsaW5lTGF5b3V0Pj4mJiBwaXBl
bGluZUxheW91dEhpbnRzLCBIYXNoTWFwPFN0cmluZywgV0dTTDo6UmVmbGVjdGlvbjo6RW50cnlQ
b2ludEluZm9ybWF0aW9uPiYmIGVudHJ5UG9pbnRJbmZvcm1hdGlvbiwgaWQgPE1UTExpYnJhcnk+
IGxpYnJhcnkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFkZXJNb2R1
bGUobGlicmFyeSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFkZXJNb2R1bGUo
V1RGTW92ZShjaGVja1Jlc3VsdCksIFdURk1vdmUocGlwZWxpbmVMYXlvdXRIaW50cyksIFdURk1v
dmUoZW50cnlQb2ludEluZm9ybWF0aW9uKSwgbGlicmFyeSkpOwogICAgIH0KIAogICAgIH5TaGFk
ZXJNb2R1bGUoKTsKQEAgLTQ0LDEyICs0OSwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRDb21w
aWxhdGlvbkluZm8oV1RGOjpGdW5jdGlvbjx2b2lkKFdHUFVDb21waWxhdGlvbkluZm9SZXF1ZXN0
U3RhdHVzLCBjb25zdCBXR1BVQ29tcGlsYXRpb25JbmZvKik+JiYgY2FsbGJhY2spOwogICAgIHZv
aWQgc2V0TGFiZWwoY29uc3QgY2hhciopOwogCisgICAgc3RhdGljIFdHU0w6OlBpcGVsaW5lTGF5
b3V0IGNvbnZlcnRQaXBlbGluZUxheW91dChjb25zdCBQaXBlbGluZUxheW91dCYpOworICAgIHN0
YXRpYyBpZCA8TVRMTGlicmFyeT4gY3JlYXRlTGlicmFyeShpZCA8TVRMRGV2aWNlPiwgY29uc3Qg
U3RyaW5nJiBtc2wsIE5TU3RyaW5nICpsYWJlbCk7CisKKyAgICBjb25zdCBXR1NMOjpBU1QqIGFz
dCgpIGNvbnN0OworCisgICAgY29uc3QgUGlwZWxpbmVMYXlvdXQqIHBpcGVsaW5lTGF5b3V0SGlu
dChjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBjb25zdCBXR1NMOjpSZWZsZWN0aW9uOjpFbnRy
eVBvaW50SW5mb3JtYXRpb24qIGVudHJ5UG9pbnRJbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmKSBj
b25zdDsKICAgICBpZCA8TVRMTGlicmFyeT4gbGlicmFyeSgpIGNvbnN0IHsgcmV0dXJuIG1fbGli
cmFyeTsgfQogCiBwcml2YXRlOgotICAgIFNoYWRlck1vZHVsZShpZCA8TVRMTGlicmFyeT4pOwor
ICAgIFNoYWRlck1vZHVsZShzdGQ6OnZhcmlhbnQ8V0dTTDo6U3VjY2Vzc2Z1bENoZWNrLCBXR1NM
OjpGYWlsZWRDaGVjaz4mJiwgSGFzaE1hcDxTdHJpbmcsIFJlZjxQaXBlbGluZUxheW91dD4+JiYs
IEhhc2hNYXA8U3RyaW5nLCBXR1NMOjpSZWZsZWN0aW9uOjpFbnRyeVBvaW50SW5mb3JtYXRpb24+
JiYsIGlkIDxNVExMaWJyYXJ5Pik7CiAKLSAgICBpZCA8TVRMTGlicmFyeT4gbV9saWJyYXJ5IHsg
bmlsIH07CisgICAgY29uc3Qgc3RkOjp2YXJpYW50PFdHU0w6OlN1Y2Nlc3NmdWxDaGVjaywgV0dT
TDo6RmFpbGVkQ2hlY2s+IG1fY2hlY2tSZXN1bHQ7CisgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcs
IFJlZjxQaXBlbGluZUxheW91dD4+IG1fcGlwZWxpbmVMYXlvdXRIaW50czsKKyAgICBjb25zdCBI
YXNoTWFwPFN0cmluZywgV0dTTDo6UmVmbGVjdGlvbjo6RW50cnlQb2ludEluZm9ybWF0aW9uPiBt
X2VudHJ5UG9pbnRJbmZvcm1hdGlvbjsKKyAgICBpZCA8TVRMTGlicmFyeT4gbV9saWJyYXJ5IHsg
bmlsIH07IC8vIFRoaXMgaXMgb25seSBub24tbnVsbCBpZiB3ZSBjb3VsZCBjb21waWxlIHRoZSBt
b2R1bGUgZWFybHkuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL1NoYWRlck1vZHVsZS5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L1NoYWRlck1vZHVsZS5tbQppbmRleCAwYzk1MjJkOTJlY2YuLjNlNmMxZWMwMjJmZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2hhZGVyTW9kdWxlLm1tCisrKyBiL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL1NoYWRlck1vZHVsZS5tbQpAQCAtMjcsMzAgKzI3LDIyMCBAQAogI2ltcG9y
dCAiU2hhZGVyTW9kdWxlLmgiCiAKICNpbXBvcnQgIkRldmljZS5oIgorI2ltcG9ydCAiUGlwZWxp
bmVMYXlvdXQuaCIKIAogbmFtZXNwYWNlIFdlYkdQVSB7CiAKK3N0cnVjdCBTaGFkZXJNb2R1bGVQ
YXJhbWV0ZXJzIHsKKyAgICBjb25zdCBXR1BVU2hhZGVyTW9kdWxlV0dTTERlc2NyaXB0b3ImIHdn
c2w7CisgICAgY29uc3QgV0dQVVNoYWRlck1vZHVsZURlc2NyaXB0b3JIaW50cyogaGludHM7Cit9
OworCitzdGF0aWMgc3RkOjpvcHRpb25hbDxTaGFkZXJNb2R1bGVQYXJhbWV0ZXJzPiBmaW5kU2hh
ZGVyTW9kdWxlUGFyYW1ldGVycyhjb25zdCBXR1BVU2hhZGVyTW9kdWxlRGVzY3JpcHRvciogZGVz
Y3JpcHRvcikKK3sKKyAgICBjb25zdCBXR1BVU2hhZGVyTW9kdWxlV0dTTERlc2NyaXB0b3IqIHdn
c2wgPSBudWxscHRyOworICAgIGNvbnN0IFdHUFVTaGFkZXJNb2R1bGVEZXNjcmlwdG9ySGludHMq
IGhpbnRzID0gbnVsbHB0cjsKKworICAgIGZvciAoY29uc3QgV0dQVUNoYWluZWRTdHJ1Y3QqIHB0
ciA9IGRlc2NyaXB0b3ItPm5leHRJbkNoYWluOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkgeworICAg
ICAgICBhdXRvIHR5cGUgPSBwdHItPnNUeXBlOworCisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8aW50Pih0eXBlKSkgeworICAgICAgICBjYXNlIFdHUFVTVHlwZV9TaGFkZXJNb2R1bGVXR1NM
RGVzY3JpcHRvcjoKKyAgICAgICAgICAgIGlmICh3Z3NsKQorICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB3Z3NsID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBXR1BVU2hhZGVyTW9kdWxlV0dTTERlc2NyaXB0b3IqPihwdHIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV0dQVVNUeXBlRXh0ZW5kZWRfU2hhZGVyTW9kdWxlRGVzY3JpcHRv
ckhpbnRzOgorICAgICAgICAgICAgaWYgKGhpbnRzKQorICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgICAgICBoaW50cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
V0dQVVNoYWRlck1vZHVsZURlc2NyaXB0b3JIaW50cyo+KHB0cik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXdnc2wpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICp3Z3NsLCBoaW50cyB9IH07Cit9CisKK2lkIDxNVExM
aWJyYXJ5PiBTaGFkZXJNb2R1bGU6OmNyZWF0ZUxpYnJhcnkoaWQgPE1UTERldmljZT4gZGV2aWNl
LCBjb25zdCBTdHJpbmcmIG1zbCwgTlNTdHJpbmcgKmxhYmVsKQoreworICAgIGF1dG8gb3B0aW9u
cyA9IFtNVExDb21waWxlT3B0aW9ucyBuZXddOworICAgIG9wdGlvbnMuZmFzdE1hdGhFbmFibGVk
ID0gWUVTOworICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIC8vIEZJWE1FOiBSdW4gdGhl
IGFzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIHRoaXMKKyAgICBpZCA8TVRMTGlicmFyeT4gbGlicmFy
eSA9IFtkZXZpY2UgbmV3TGlicmFyeVdpdGhTb3VyY2U6bXNsIG9wdGlvbnM6b3B0aW9ucyBlcnJv
cjomZXJyb3JdOworICAgIGlmIChlcnJvcikKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJNU0wgY29t
cGlsYXRpb24gZXJyb3I6ICVAIiwgZXJyb3IpOworICAgIGxpYnJhcnkubGFiZWwgPSBsYWJlbDsK
KyAgICByZXR1cm4gbGlicmFyeTsKK30KKworc3RhdGljIFJlZlB0cjxTaGFkZXJNb2R1bGU+IGVh
cmx5Q29tcGlsZVNoYWRlck1vZHVsZShpZCA8TVRMRGV2aWNlPiBkZXZpY2UsIHN0ZDo6dmFyaWFu
dDxXR1NMOjpTdWNjZXNzZnVsQ2hlY2ssIFdHU0w6OkZhaWxlZENoZWNrPiYmIGNoZWNrUmVzdWx0
LCBjb25zdCBXR1BVU2hhZGVyTW9kdWxlRGVzY3JpcHRvckhpbnRzJiBzdXBwbGllZEhpbnRzLCBO
U1N0cmluZyAqbGFiZWwpCit7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZjxQaXBlbGluZUxheW91
dD4+IGhpbnRzOworICAgIEhhc2hNYXA8U3RyaW5nLCBXR1NMOjpQaXBlbGluZUxheW91dD4gd2dz
bEhpbnRzOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzdXBwbGllZEhpbnRzLmhpbnRz
Q291bnQ7ICsraSkgeworICAgICAgICBjb25zdCBhdXRvJiBoaW50ID0gc3VwcGxpZWRIaW50cy5o
aW50c1tpXTsKKyAgICAgICAgaWYgKGhpbnQubmV4dEluQ2hhaW4pCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgaGludHMuYWRkKGhpbnQua2V5LCBoaW50LmhpbnQubGF5b3V0
LT5waXBlbGluZUxheW91dCk7CisgICAgICAgIGF1dG8gY29udmVydGVkUGlwZWxpbmVMYXlvdXQg
PSBTaGFkZXJNb2R1bGU6OmNvbnZlcnRQaXBlbGluZUxheW91dChoaW50LmhpbnQubGF5b3V0LT5w
aXBlbGluZUxheW91dCk7CisgICAgICAgIHdnc2xIaW50cy5hZGQoaGludC5rZXksIFdURk1vdmUo
Y29udmVydGVkUGlwZWxpbmVMYXlvdXQpKTsKKyAgICB9CisgICAgYXV0byBwcmVwYXJlUmVzdWx0
ID0gV0dTTDo6cHJlcGFyZShzdGQ6OmdldDxXR1NMOjpTdWNjZXNzZnVsQ2hlY2s+KGNoZWNrUmVz
dWx0KS5hc3QsIHdnc2xIaW50cyk7CisgICAgYXV0byBsaWJyYXJ5ID0gU2hhZGVyTW9kdWxlOjpj
cmVhdGVMaWJyYXJ5KGRldmljZSwgcHJlcGFyZVJlc3VsdC5tc2wsIGxhYmVsKTsKKyAgICBpZiAo
IWxpYnJhcnkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBTaGFkZXJNb2R1
bGU6OmNyZWF0ZShXVEZNb3ZlKGNoZWNrUmVzdWx0KSwgV1RGTW92ZShoaW50cyksIFdURk1vdmUo
cHJlcGFyZVJlc3VsdC5lbnRyeVBvaW50cyksIGxpYnJhcnkpOworfQorCiBSZWZQdHI8U2hhZGVy
TW9kdWxlPiBEZXZpY2U6OmNyZWF0ZVNoYWRlck1vZHVsZShjb25zdCBXR1BVU2hhZGVyTW9kdWxl
RGVzY3JpcHRvciogZGVzY3JpcHRvcikKIHsKLSAgICBVTlVTRURfUEFSQU0oZGVzY3JpcHRvcik7
Ci0gICAgcmV0dXJuIFNoYWRlck1vZHVsZTo6Y3JlYXRlKG5pbCk7CisgICAgaWYgKCFkZXNjcmlw
dG9yLT5uZXh0SW5DaGFpbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHNo
YWRlck1vZHVsZVBhcmFtZXRlcnMgPSBmaW5kU2hhZGVyTW9kdWxlUGFyYW1ldGVycyhkZXNjcmlw
dG9yKTsKKyAgICBpZiAoIXNoYWRlck1vZHVsZVBhcmFtZXRlcnMpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBjaGVja1Jlc3VsdCA9IFdHU0w6OnN0YXRpY0NoZWNrKFN0cmlu
ZyhzaGFkZXJNb2R1bGVQYXJhbWV0ZXJzLT53Z3NsLmNvZGUpLCBzdGQ6Om51bGxvcHQpOworCisg
ICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8V0dTTDo6U3VjY2Vzc2Z1bENoZWNrPihjaGVj
a1Jlc3VsdCkgJiYgc2hhZGVyTW9kdWxlUGFyYW1ldGVycy0+aGludHMgJiYgc2hhZGVyTW9kdWxl
UGFyYW1ldGVycy0+aGludHMtPmhpbnRzQ291bnQpIHsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0
ID0gZWFybHlDb21waWxlU2hhZGVyTW9kdWxlKG1fZGV2aWNlLCBXVEZNb3ZlKGNoZWNrUmVzdWx0
KSwgKnNoYWRlck1vZHVsZVBhcmFtZXRlcnMtPmhpbnRzLCBbTlNTdHJpbmcgc3RyaW5nV2l0aENT
dHJpbmc6ZGVzY3JpcHRvci0+bGFiZWwgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddKSkK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIFNoYWRlck1v
ZHVsZTo6Y3JlYXRlKFdURk1vdmUoY2hlY2tSZXN1bHQpLCB7IH0sIHsgfSwgbmlsKTsKIH0KIAot
U2hhZGVyTW9kdWxlOjpTaGFkZXJNb2R1bGUoaWQgPE1UTExpYnJhcnk+IGxpYnJhcnkpCi0gICAg
OiBtX2xpYnJhcnkobGlicmFyeSkKK1NoYWRlck1vZHVsZTo6U2hhZGVyTW9kdWxlKHN0ZDo6dmFy
aWFudDxXR1NMOjpTdWNjZXNzZnVsQ2hlY2ssIFdHU0w6OkZhaWxlZENoZWNrPiYmIGNoZWNrUmVz
dWx0LCBIYXNoTWFwPFN0cmluZywgUmVmPFBpcGVsaW5lTGF5b3V0Pj4mJiBwaXBlbGluZUxheW91
dEhpbnRzLCBIYXNoTWFwPFN0cmluZywgV0dTTDo6UmVmbGVjdGlvbjo6RW50cnlQb2ludEluZm9y
bWF0aW9uPiYmIGVudHJ5UG9pbnRJbmZvcm1hdGlvbiwgaWQgPE1UTExpYnJhcnk+IGxpYnJhcnkp
CisgICAgOiBtX2NoZWNrUmVzdWx0KFdURk1vdmUoY2hlY2tSZXN1bHQpKQorICAgICwgbV9waXBl
bGluZUxheW91dEhpbnRzKFdURk1vdmUocGlwZWxpbmVMYXlvdXRIaW50cykpCisgICAgLCBtX2Vu
dHJ5UG9pbnRJbmZvcm1hdGlvbihXVEZNb3ZlKGVudHJ5UG9pbnRJbmZvcm1hdGlvbikpCisgICAg
LCBtX2xpYnJhcnkobGlicmFyeSkKIHsKIH0KIAogU2hhZGVyTW9kdWxlOjp+U2hhZGVyTW9kdWxl
KCkgPSBkZWZhdWx0OwogCitzdHJ1Y3QgTWVzc2FnZXMgeworICAgIGNvbnN0IFZlY3RvcjxXR1NM
OjpDb21waWxhdGlvbk1lc3NhZ2U+JiBtZXNzYWdlczsKKyAgICBXR1BVQ29tcGlsYXRpb25NZXNz
YWdlVHlwZSB0eXBlOworfTsKKworc3RydWN0IENvbXBpbGF0aW9uTWVzc2FnZURhdGEgeworICAg
IENvbXBpbGF0aW9uTWVzc2FnZURhdGEoVmVjdG9yPFdHUFVDb21waWxhdGlvbk1lc3NhZ2U+JiYg
Y29tcGlsYXRpb25NZXNzYWdlcywgVmVjdG9yPENTdHJpbmc+JiYgbWVzc2FnZXMpCisgICAgICAg
IDogY29tcGlsYXRpb25NZXNzYWdlcyhXVEZNb3ZlKGNvbXBpbGF0aW9uTWVzc2FnZXMpKQorICAg
ICAgICAsIG1lc3NhZ2VzKFdURk1vdmUobWVzc2FnZXMpKQorICAgIHsKKyAgICB9CisKKyAgICBD
b21waWxhdGlvbk1lc3NhZ2VEYXRhKGNvbnN0IENvbXBpbGF0aW9uTWVzc2FnZURhdGEmKSA9IGRl
bGV0ZTsKKyAgICBDb21waWxhdGlvbk1lc3NhZ2VEYXRhKENvbXBpbGF0aW9uTWVzc2FnZURhdGEm
JikgPSBkZWZhdWx0OworCisgICAgVmVjdG9yPFdHUFVDb21waWxhdGlvbk1lc3NhZ2U+IGNvbXBp
bGF0aW9uTWVzc2FnZXM7CisgICAgVmVjdG9yPENTdHJpbmc+IG1lc3NhZ2VzOworfTsKKworc3Rh
dGljIENvbXBpbGF0aW9uTWVzc2FnZURhdGEgY29udmVydE1lc3NhZ2VzKGNvbnN0IE1lc3NhZ2Vz
JiBtZXNzYWdlczEsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8TWVzc2FnZXM+JiBtZXNzYWdlczIgPSBz
dGQ6Om51bGxvcHQpCit7CisgICAgVmVjdG9yPFdHUFVDb21waWxhdGlvbk1lc3NhZ2U+IGZsYXR0
ZW5lZENvbXBpbGF0aW9uTWVzc2FnZXM7CisgICAgVmVjdG9yPENTdHJpbmc+IGZsYXR0ZW5lZE1l
c3NhZ2VzOworCisgICAgYXV0byBwb3B1bGF0ZU1lc3NhZ2VzID0gWyZdIChjb25zdCBNZXNzYWdl
cyYgY29tcGlsYXRpb25NZXNzYWdlcykgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbXBp
bGF0aW9uTWVzc2FnZSA6IGNvbXBpbGF0aW9uTWVzc2FnZXMubWVzc2FnZXMpCisgICAgICAgICAg
ICBmbGF0dGVuZWRNZXNzYWdlcy5hcHBlbmQoY29tcGlsYXRpb25NZXNzYWdlLm1lc3NhZ2UudXRm
OCgpKTsKKyAgICB9OworCisgICAgcG9wdWxhdGVNZXNzYWdlcyhtZXNzYWdlczEpOworICAgIGlm
IChtZXNzYWdlczIpCisgICAgICAgIHBvcHVsYXRlTWVzc2FnZXMoKm1lc3NhZ2VzMik7CisKKyAg
ICBhdXRvIHBvcHVsYXRlQ29tcGlsYXRpb25NZXNzYWdlcyA9IFsmXSAoY29uc3QgTWVzc2FnZXMm
IGNvbXBpbGF0aW9uTWVzc2FnZXMsIHNpemVfdCBiYXNlKSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29tcGlsYXRpb25NZXNzYWdlcy5tZXNzYWdlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgY29uc3QgYXV0byYgY29tcGlsYXRpb25NZXNzYWdlID0gY29tcGlsYXRpb25N
ZXNzYWdlcy5tZXNzYWdlc1tpXTsKKyAgICAgICAgICAgIGZsYXR0ZW5lZENvbXBpbGF0aW9uTWVz
c2FnZXMuYXBwZW5kKHsKKyAgICAgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgICAg
IGZsYXR0ZW5lZE1lc3NhZ2VzW2kgKyBiYXNlXS5kYXRhKCksCisgICAgICAgICAgICAgICAgY29t
cGlsYXRpb25NZXNzYWdlcy50eXBlLAorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uTWVzc2Fn
ZS5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uTWVzc2FnZS5saW5lUG9z
aXRpb24sCisgICAgICAgICAgICAgICAgY29tcGlsYXRpb25NZXNzYWdlLm9mZnNldCwKKyAgICAg
ICAgICAgICAgICBjb21waWxhdGlvbk1lc3NhZ2UubGVuZ3RoLAorICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgcG9wdWxhdGVDb21waWxhdGlvbk1lc3NhZ2VzKG1lc3Nh
Z2VzMSwgMCk7CisgICAgaWYgKG1lc3NhZ2VzMikKKyAgICAgICAgcG9wdWxhdGVDb21waWxhdGlv
bk1lc3NhZ2VzKCptZXNzYWdlczIsIG1lc3NhZ2VzMS5tZXNzYWdlcy5zaXplKCkpOworCisgICAg
cmV0dXJuIHsgV1RGTW92ZShmbGF0dGVuZWRDb21waWxhdGlvbk1lc3NhZ2VzKSwgV1RGTW92ZShm
bGF0dGVuZWRNZXNzYWdlcykgfTsKK30KKwogdm9pZCBTaGFkZXJNb2R1bGU6OmdldENvbXBpbGF0
aW9uSW5mbyhXVEY6OkZ1bmN0aW9uPHZvaWQoV0dQVUNvbXBpbGF0aW9uSW5mb1JlcXVlc3RTdGF0
dXMsIGNvbnN0IFdHUFVDb21waWxhdGlvbkluZm8qKT4mJiBjYWxsYmFjaykKIHsKLSAgICBVTlVT
RURfUEFSQU0oY2FsbGJhY2spOworICAgIFdURjo6c3dpdGNoT24obV9jaGVja1Jlc3VsdCwgWyZd
IChjb25zdCBXR1NMOjpTdWNjZXNzZnVsQ2hlY2smIHN1Y2Nlc3NmdWxDaGVjaykgeworICAgICAg
ICBhdXRvIGNvbXBpbGF0aW9uTWVzc2FnZURhdGEoY29udmVydE1lc3NhZ2VzKHsgc3VjY2Vzc2Z1
bENoZWNrLndhcm5pbmdzLCBXR1BVQ29tcGlsYXRpb25NZXNzYWdlVHlwZV9XYXJuaW5nIH0pKTsK
KyAgICAgICAgV0dQVUNvbXBpbGF0aW9uSW5mbyBjb21waWxhdGlvbkluZm8geworICAgICAgICAg
ICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb21waWxhdGlv
bk1lc3NhZ2VEYXRhLmNvbXBpbGF0aW9uTWVzc2FnZXMuc2l6ZSgpKSwKKyAgICAgICAgICAgIGNv
bXBpbGF0aW9uTWVzc2FnZURhdGEuY29tcGlsYXRpb25NZXNzYWdlcy5kYXRhKCksCisgICAgICAg
IH07CisgICAgICAgIGNhbGxiYWNrKFdHUFVDb21waWxhdGlvbkluZm9SZXF1ZXN0U3RhdHVzX1N1
Y2Nlc3MsICZjb21waWxhdGlvbkluZm8pOworICAgIH0sIFsmXSAoY29uc3QgV0dTTDo6RmFpbGVk
Q2hlY2smIGZhaWxlZENoZWNrKSB7CisgICAgICAgIGF1dG8gY29tcGlsYXRpb25NZXNzYWdlRGF0
YShjb252ZXJ0TWVzc2FnZXMoCisgICAgICAgICAgICB7IGZhaWxlZENoZWNrLmVycm9ycywgV0dQ
VUNvbXBpbGF0aW9uTWVzc2FnZVR5cGVfRXJyb3IgfSwKKyAgICAgICAgICAgIHsgeyBmYWlsZWRD
aGVjay53YXJuaW5ncywgV0dQVUNvbXBpbGF0aW9uTWVzc2FnZVR5cGVfV2FybmluZyB9IH0pKTsK
KyAgICAgICAgV0dQVUNvbXBpbGF0aW9uSW5mbyBjb21waWxhdGlvbkluZm8geworICAgICAgICAg
ICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb21waWxhdGlv
bk1lc3NhZ2VEYXRhLmNvbXBpbGF0aW9uTWVzc2FnZXMuc2l6ZSgpKSwKKyAgICAgICAgICAgIGNv
bXBpbGF0aW9uTWVzc2FnZURhdGEuY29tcGlsYXRpb25NZXNzYWdlcy5kYXRhKCksCisgICAgICAg
IH07CisgICAgICAgIGNhbGxiYWNrKFdHUFVDb21waWxhdGlvbkluZm9SZXF1ZXN0U3RhdHVzX0Vy
cm9yLCAmY29tcGlsYXRpb25JbmZvKTsKKyAgICB9KTsKIH0KIAogdm9pZCBTaGFkZXJNb2R1bGU6
OnNldExhYmVsKGNvbnN0IGNoYXIqIGxhYmVsKQogewotICAgIG1fbGlicmFyeS5sYWJlbCA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoQ1N0cmluZzpsYWJlbCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZ107CisgICAgaWYgKG1fbGlicmFyeSkKKyAgICAgICAgbV9saWJyYXJ5LmxhYmVsID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhDU3RyaW5nOmxhYmVsIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nXTsKK30KKworV0dTTDo6UGlwZWxpbmVMYXlvdXQgU2hhZGVyTW9kdWxlOjpjb252ZXJ0UGlw
ZWxpbmVMYXlvdXQoY29uc3QgUGlwZWxpbmVMYXlvdXQmIHBpcGVsaW5lTGF5b3V0KQoreworICAg
IFVOVVNFRF9QQVJBTShwaXBlbGluZUxheW91dCk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzCisgICAgcmV0dXJuIHsgeyB9IH07Cit9CisKK2NvbnN0IFdHU0w6OkFTVCogU2hhZGVyTW9k
dWxlOjphc3QoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fY2hlY2tSZXN1
bHQsIFsmXSAoY29uc3QgV0dTTDo6U3VjY2Vzc2Z1bENoZWNrJiBzdWNjZXNzZnVsQ2hlY2spIC0+
IGNvbnN0IFdHU0w6OkFTVCogeworICAgICAgICByZXR1cm4gc3VjY2Vzc2Z1bENoZWNrLmFzdC5w
dHIoKTsKKyAgICB9LCBbJl0gKGNvbnN0IFdHU0w6OkZhaWxlZENoZWNrJikgLT4gY29uc3QgV0dT
TDo6QVNUKiB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0pOworfQorCitjb25zdCBQ
aXBlbGluZUxheW91dCogU2hhZGVyTW9kdWxlOjpwaXBlbGluZUxheW91dEhpbnQoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdAoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BpcGVsaW5lTGF5b3V0
SGludHMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9waXBlbGluZUxheW91dEhp
bnRzLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gaXRlcmF0b3It
PnZhbHVlLnB0cigpOworfQorCitjb25zdCBXR1NMOjpSZWZsZWN0aW9uOjpFbnRyeVBvaW50SW5m
b3JtYXRpb24qIFNoYWRlck1vZHVsZTo6ZW50cnlQb2ludEluZm9ybWF0aW9uKGNvbnN0IFN0cmlu
ZyYgbmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9lbnRyeVBvaW50SW5mb3Jt
YXRpb24uZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9lbnRyeVBvaW50SW5mb3Jt
YXRpb24uZW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiAmaXRlcmF0
b3ItPnZhbHVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJHUFUK
</data>
<flag name="review"
          id="479798"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>