<?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>89036</bug_id>
          
          <creation_ts>2012-06-13 14:02:09 -0700</creation_ts>
          <short_desc>Shrink NodeListsNodeData</short_desc>
          <delta_ts>2012-06-22 18:56:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>88825</dependson>
    
    <dependson>89603</dependson>
          <blocked>73853</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>adamk</cc>
    
    <cc>arko</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>648439</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-13 14:02:09 -0700</bug_when>
    <thetext>It&apos;s wasteful for NodeListsNodeData to have HashMap, HashSet, of all node list types.
This will become a serious problem when we try to make HTMLCollection behave more like DynamicNodeList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648441</commentid>
    <comment_count>1</comment_count>
      <attachid>147405</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-13 14:03:21 -0700</bug_when>
    <thetext>Created attachment 147405
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648444</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-13 14:05:08 -0700</bug_when>
    <thetext>Another thing I want to do this in patch is to move more code from Node/NodeListsNodeData to subclasses of DynamicNodeList so that we don&apos;t have modify so much code to add a new type of DynamicNodeList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653848</commentid>
    <comment_count>3</comment_count>
      <attachid>148646</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-20 13:40:13 -0700</bug_when>
    <thetext>Created attachment 148646
work in progress 2

Here, I&apos;ve replaced HashMaps by a Vector of DynamicNodeListCache objects. But I think this incurs too much overhead and is somewhat over-engineered. I&apos;ll take some goodies that came out of this patch and fix in separate bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654193</commentid>
    <comment_count>4</comment_count>
      <attachid>148721</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-20 20:31:14 -0700</bug_when>
    <thetext>Created attachment 148721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654195</commentid>
    <comment_count>5</comment_count>
      <attachid>148721</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-20 20:34:14 -0700</bug_when>
    <thetext>Comment on attachment 148721
Patch

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

&gt; Source/WebCore/dom/NodeRareData.h:57
&gt; +    template&lt;typename T&gt;
&gt; +    PassRefPtr&lt;T&gt; addCacheWithAtomicName(Node* node, DynamicNodeList::NodeListType listType, const AtomicString&amp; name)

Should we use some sort of traits to avoid manually passing list type here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654999</commentid>
    <comment_count>6</comment_count>
      <attachid>148721</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-06-21 16:22:19 -0700</bug_when>
    <thetext>Comment on attachment 148721
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655017</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-21 16:38:01 -0700</bug_when>
    <thetext>Committed r120979: &lt;http://trac.webkit.org/changeset/120979&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147405</attachid>
            <date>2012-06-13 14:03:21 -0700</date>
            <delta_ts>2012-06-20 13:40:13 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>wip89036</filename>
            <type>text/plain</type>
            <size>28212</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDExOTk4NikK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNsYXNzTm9kZUxpc3QuaCIKIAogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVk
RWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NCw3ICs0NSwxMSBAQAogCiBD
bGFzc05vZGVMaXN0Ojp+Q2xhc3NOb2RlTGlzdCgpCiB7Ci0gICAgcm9vdE5vZGUoKS0+cmVtb3Zl
Q2FjaGVkQ2xhc3NOb2RlTGlzdCh0aGlzLCBtX29yaWdpbmFsQ2xhc3NOYW1lcyk7CisgICAgTm9k
ZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cyA9IHJvb3ROb2RlKCktPm5vZGVMaXN0cygpOworICAg
IEFTU0VSVChub2RlTGlzdHMpOworICAgIENsYXNzTm9kZUxpc3RDYWNoZSogY2FjaGUgPSBub2Rl
TGlzdHMtPmNhY2hlT2ZUeXBlPENsYXNzTm9kZUxpc3RDYWNoZT4oQ2xhc3NOb2RlTGlzdFR5cGUp
OworICAgIGlmIChjYWNoZS0+cmVtb3ZlRnJvbUNhY2hlKG1fb3JpZ2luYWxDbGFzc05hbWVzLCB0
aGlzKSkKKyAgICAgICAgbm9kZUxpc3RzLT5yZW1vdmVDYWNoZU9mVHlwZShDbGFzc05vZGVMaXN0
VHlwZSk7CiB9IAogCiBib29sIENsYXNzTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRl
c3ROb2RlKSBjb25zdApAQCAtNTcsNCArNjIsMzMgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KHRlc3ROb2RlKS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zQWxsKG1fY2xh
c3NOYW1lcyk7CiB9CiAKK1Bhc3NSZWZQdHI8Q2xhc3NOb2RlTGlzdD4gQ2xhc3NOb2RlTGlzdENh
Y2hlOjpjcmVhdGVMaXN0SWZOZWVkZWQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05h
bWVzKQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBDbGFzc05vZGVMaXN0Kj46OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX2NsYXNzTm9kZUxpc3RDYWNoZS5hZGQoY2xhc3NOYW1lcywgMCk7CisgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworCisgICAgUmVmUHRyPENsYXNzTm9kZUxpc3Q+IGxpc3QgPSBDbGFzc05vZGVMaXN0Ojpj
cmVhdGUobm9kZSwgY2xhc3NOYW1lcyk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBs
aXN0LmdldCgpOworICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKK30KKworYm9vbCBDbGFzc05v
ZGVMaXN0Q2FjaGU6OnJlbW92ZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMsIENs
YXNzTm9kZUxpc3QqIGxpc3QpCit7CisgICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0ID09IG1f
Y2xhc3NOb2RlTGlzdENhY2hlLmdldChjbGFzc05hbWVzKSk7CisgICAgaWYgKG1fY2xhc3NOb2Rl
TGlzdENhY2hlLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX2NsYXNz
Tm9kZUxpc3RDYWNoZS5yZW1vdmUoY2xhc3NOYW1lcyk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIENsYXNzTm9kZUxpc3RDYWNoZTo6aW52YWxpZGF0ZUNhY2hlKCkKK3sKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBDbGFzc05vZGVMaXN0Kj46Oml0ZXJhdG9yIEl0ZXJhdG9yOwor
CisgICAgSXRlcmF0b3IgY2xhc3NDYWNoZUVuZCA9IG1fY2xhc3NOb2RlTGlzdENhY2hlLmVuZCgp
OworICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2NsYXNzTm9kZUxpc3RDYWNoZS5iZWdpbigpOyBp
dCAhPSBjbGFzc0NhY2hlRW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRl
Q2FjaGUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShy
ZXZpc2lvbiAxMTk5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw2ICs2OSw3IEBACiBjbGFzcyBOYW1lZE5vZGVNYXA7CiBjbGFzcyBOYW1lTm9k
ZUxpc3Q7CiBjbGFzcyBOb2RlTGlzdDsKK2NsYXNzIE5vZGVMaXN0c05vZGVEYXRhOwogY2xhc3Mg
Tm9kZVJhcmVEYXRhOwogY2xhc3MgTm9kZVJlbmRlcmluZ0NvbnRleHQ7CiBjbGFzcyBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ7CkBAIC01NjAsOSArNTYxLDggQEAKICAgICB2b2lkIHVucmVnaXN0ZXJE
eW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKICAgICB2b2lk
IGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRWxlbWVudCogYXR0cmlidXRlT3duZXJFbGVtZW50KTsKICAgICB2b2lkIGlu
dmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgdm9pZCBy
ZW1vdmVDYWNoZWRDbGFzc05vZGVMaXN0KENsYXNzTm9kZUxpc3QqLCBjb25zdCBTdHJpbmcmKTsK
IAotICAgIHZvaWQgcmVtb3ZlQ2FjaGVkTmFtZU5vZGVMaXN0KE5hbWVOb2RlTGlzdCosIGNvbnN0
IFN0cmluZyYpOworICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMoKTsKICAgICB2b2lk
IHJlbW92ZUNhY2hlZFRhZ05vZGVMaXN0KFRhZ05vZGVMaXN0KiwgY29uc3QgQXRvbWljU3RyaW5n
Jik7CiAgICAgdm9pZCByZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChUYWdOb2RlTGlzdCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKICAgICB2b2lkIHJlbW92ZUNhY2hlZExhYmVsc05vZGVMaXN0KER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWlj
Tm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVM
aXN0LmgJKHJldmlzaW9uIDExOTk4NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9k
ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMzcgQEAKICAgICB2aXJ0dWFsIGJv
b2wgaXNEeW5hbWljTm9kZUxpc3QoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiB9
OwogCisvLyBGSVhNRTogVXNlIHRyYWl0cyBhbmQgZ2V0IHJpZCBvZiB0aGlzIGVudW0uCitlbnVt
IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RUeXBlIHsKKyAgICBSYWRpb05vZGVMaXN0VHlwZSwKKyAg
ICBMYWJlbHNOb2RlTGlzdFR5cGUsCisgICAgVGFnTm9kZUxpc3RUeXBlLAorICAgIE5hbWVOb2Rl
TGlzdFR5cGUsCisgICAgQ2xhc3NOb2RlTGlzdFR5cGUsCisgICAgTWljcm9EYXRhSXRlbUxpc3RU
eXBlLAorfTsKKworY2xhc3MgRHluYW1pY1N1YnRyZWVOb2RlTGlzdENhY2hlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEeW5hbWljU3VidHJlZU5vZGVMaXN0Q2FjaGUpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgdmlydHVhbCB+RHluYW1pY1N1YnRy
ZWVOb2RlTGlzdENhY2hlKCkgeyB9CisKKyAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZUNhY2hlKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlz
dENhY2hlKER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBl
KHR5cGUpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBEeW5hbWljU3VidHJlZU5vZGVM
aXN0VHlwZSBtX3R5cGU7Cit9OworCiBjbGFzcyBEeW5hbWljU3VidHJlZU5vZGVMaXN0IDogcHVi
bGljIER5bmFtaWNOb2RlTGlzdCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RHluYW1pY1N1YnRy
ZWVOb2RlTGlzdCgpOwpAQCAtODcsNyArMTE4LDYgQEAKICAgICBEeW5hbWljU3VidHJlZU5vZGVM
aXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUpOwogCiBwcml2YXRlOgotICAgIHVzaW5nIER5
bmFtaWNOb2RlTGlzdDo6aW52YWxpZGF0ZUNhY2hlOwogICAgIGZyaWVuZCBzdHJ1Y3QgTm9kZUxp
c3RzTm9kZURhdGE7CiAKICAgICBOb2RlKiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBz
dGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMTk5ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiAr
MjUsNyBAQAogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDcgKzQwLDExIEBACiAKIE5hbWVOb2RlTGlzdDo6
fk5hbWVOb2RlTGlzdCgpCiB7Ci0gICAgcm9vdE5vZGUoKS0+cmVtb3ZlQ2FjaGVkTmFtZU5vZGVM
aXN0KHRoaXMsIG1fbm9kZU5hbWUpOworICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMg
PSByb290Tm9kZSgpLT5ub2RlTGlzdHMoKTsKKyAgICBBU1NFUlQobm9kZUxpc3RzKTsKKyAgICBO
YW1lTm9kZUxpc3RDYWNoZSogY2FjaGUgPSBub2RlTGlzdHMtPmNhY2hlT2ZUeXBlPE5hbWVOb2Rl
TGlzdENhY2hlPihOYW1lTm9kZUxpc3RUeXBlKTsKKyAgICBpZiAoY2FjaGUtPnJlbW92ZUZyb21D
YWNoZShtX25vZGVOYW1lLCB0aGlzKSkKKyAgICAgICAgbm9kZUxpc3RzLT5yZW1vdmVDYWNoZU9m
VHlwZShOYW1lTm9kZUxpc3RUeXBlKTsKIH0gCiAKIGJvb2wgTmFtZU5vZGVMaXN0Ojpub2RlTWF0
Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKQEAgLTQ3LDQgKzUyLDMzIEBACiAgICAgcmV0
dXJuIHRlc3ROb2RlLT5nZXROYW1lQXR0cmlidXRlKCkgPT0gbV9ub2RlTmFtZTsKIH0KIAorUGFz
c1JlZlB0cjxOYW1lTm9kZUxpc3Q+IE5hbWVOb2RlTGlzdENhY2hlOjpjcmVhdGVMaXN0SWZOZWVk
ZWQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEhhc2hNYXA8U3RyaW5n
LCBOYW1lTm9kZUxpc3QqPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbmFtZU5vZGVMaXN0Q2FjaGUu
YWRkKG5hbWUsIDApOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVy
biByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIFJlZlB0cjxOYW1lTm9kZUxpc3Q+IGxp
c3QgPSBOYW1lTm9kZUxpc3Q6OmNyZWF0ZShub2RlLCBuYW1lKTsKKyAgICByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworfQor
Citib29sIE5hbWVOb2RlTGlzdENhY2hlOjpyZW1vdmVGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBu
YW1lLCBOYW1lTm9kZUxpc3QqIGxpc3QpCit7CisgICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0
ID09IG1fbmFtZU5vZGVMaXN0Q2FjaGUuZ2V0KG5hbWUpKTsKKyAgICBpZiAobV9uYW1lTm9kZUxp
c3RDYWNoZS5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgbV9uYW1lTm9k
ZUxpc3RDYWNoZS5yZW1vdmUobmFtZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE5h
bWVOb2RlTGlzdENhY2hlOjppbnZhbGlkYXRlQ2FjaGUoKQoreworICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIE5hbWVOb2RlTGlzdCo+OjppdGVyYXRvciBJdGVyYXRvcjsKKworICAgIEl0ZXJh
dG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZU5vZGVMaXN0Q2FjaGUuZW5kKCk7CisgICAgZm9yIChJ
dGVyYXRvciBpdCA9IG1fbmFtZU5vZGVMaXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gbmFtZUNhY2hl
RW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJl
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAko
cmV2aXNpb24gMTE5OTg2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxNSArNTEsNDIgQEAKIHN0cnVjdCBOb2RlTGlzdHNOb2RlRGF0
YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZUxpc3RzTm9kZURhdGEpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBWZWN0b3I8T3duUHRyPER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3RDYWNoZT4gPiBtX2NhY2hlTGlzdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgVCogY2FjaGVPZlR5cGUoRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUgdHlwZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2NhY2hlTGlzdC5zaXplKCk7
IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmIChtX2NhY2hlTGlzdFtpIC0gMV0tPnR5cGUo
KSA9PSB0eXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9jYWNo
ZUxpc3RbaSAtIDFdLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGVuc3VyZUNhY2hlT2ZUeXBlKER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3RUeXBlIHR5cGUpCisgICAgeworICAgICAgICBpZiAoVCogY2Fj
aGUgPSBjYWNoZU9mVHlwZTxUPih0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNoZTsKKyAg
ICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGluc2VydGlvbiBzb3J0LgorICAgICAgICBtX2NhY2hl
TGlzdC5hcHBlbmQoVDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+
KG1fY2FjaGVMaXN0Lmxhc3QoKS5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVDYWNo
ZU9mVHlwZShEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IG1fY2FjaGVMaXN0LnNpemUoKTsgaSA+IDA7IC0taSkgeworICAgICAg
ICAgICAgaWYgKG1fY2FjaGVMaXN0W2kgLSAxXS0+dHlwZSgpID09IHR5cGUpIHsKKyAgICAgICAg
ICAgICAgICBtX2NhY2hlTGlzdC5yZW1vdmUoaSAtIDEpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKICAgICB0eXBlZGVmIEhhc2hTZXQ8RHluYW1pY1N1YnRyZWVOb2RlTGlzdCo+
IE5vZGVMaXN0U2V0OwogICAgIE5vZGVMaXN0U2V0IG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1l
bnQ7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDbGFzc05vZGVMaXN0Kj4gQ2xhc3NO
b2RlTGlzdENhY2hlOwotICAgIENsYXNzTm9kZUxpc3RDYWNoZSBtX2NsYXNzTm9kZUxpc3RDYWNo
ZTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIE5hbWVOb2RlTGlzdCo+IE5hbWVOb2Rl
TGlzdENhY2hlOwotICAgIE5hbWVOb2RlTGlzdENhY2hlIG1fbmFtZU5vZGVMaXN0Q2FjaGU7Ci0g
CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgVGFnTm9kZUxpc3QqPiBUYWdOb2Rl
TGlzdENhY2hlOwogICAgIFRhZ05vZGVMaXN0Q2FjaGUgbV90YWdOb2RlTGlzdENhY2hlOwogCkBA
IC03MSwxMSArOTgsNiBAQAogICAgIE1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUgbV9taWNyb0RhdGFJ
dGVtTGlzdENhY2hlOwogI2VuZGlmCiAKLSAgICBMYWJlbHNOb2RlTGlzdCogbV9sYWJlbHNOb2Rl
TGlzdENhY2hlOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmFkaW9Ob2RlTGlzdCo+
IFJhZGlvTm9kZUxpc3RDYWNoZTsKLSAgICBSYWRpb05vZGVMaXN0Q2FjaGUgbV9yYWRpb05vZGVM
aXN0Q2FjaGU7Ci0KICAgICBzdGF0aWMgUGFzc093blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gY3Jl
YXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTm9kZUxpc3RzTm9kZURh
dGEpOwpAQCAtODcsNyArMTA5LDcgQEAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBOb2RlTGlzdHNOb2RlRGF0YSgpIDogbV9sYWJlbHNOb2RlTGlzdENhY2hlKDAp
IHt9CisgICAgTm9kZUxpc3RzTm9kZURhdGEoKSB7fQogfTsKIAogY2xhc3MgTm9kZVJhcmVEYXRh
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDExOTk4NikKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyNywyNiArMTAyNywxMiBAQAog
ICAgIH0KIH0KIAotdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRDbGFzc05vZGVMaXN0KENsYXNzTm9k
ZUxpc3QqIGxpc3QsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lKQorTm9kZUxpc3RzTm9kZURhdGEq
IE5vZGU6Om5vZGVMaXN0cygpCiB7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCkpOwotICAgIEFTU0VS
VChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0
YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlz
dCA9PSBkYXRhLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5nZXQoY2xhc3NOYW1lKSk7Ci0gICAgZGF0
YS0+bV9jbGFzc05vZGVMaXN0Q2FjaGUucmVtb3ZlKGNsYXNzTmFtZSk7CisgICAgcmV0dXJuIHJh
cmVEYXRhKCktPm5vZGVMaXN0cygpOwogfQogCi12b2lkIE5vZGU6OnJlbW92ZUNhY2hlZE5hbWVO
b2RlTGlzdChOYW1lTm9kZUxpc3QqIGxpc3QsIGNvbnN0IFN0cmluZyYgbm9kZU5hbWUpCi17Ci0g
ICAgQVNTRVJUKHJhcmVEYXRhKCkpOwotICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMo
KSk7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0
cygpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX25hbWVOb2RlTGlz
dENhY2hlLmdldChub2RlTmFtZSkpOwotICAgIGRhdGEtPm1fbmFtZU5vZGVMaXN0Q2FjaGUucmVt
b3ZlKG5vZGVOYW1lKTsKLX0KLQogdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChU
YWdOb2RlTGlzdCogbGlzdCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VS
VChyYXJlRGF0YSgpKTsKQEAgLTEwNjcsMTYgKzEwNTMsOSBAQAogICAgIGRhdGEtPm1fdGFnTm9k
ZUxpc3RDYWNoZU5TLnJlbW92ZShuYW1lLmltcGwoKSk7CiB9CiAKLXZvaWQgTm9kZTo6cmVtb3Zl
Q2FjaGVkTGFiZWxzTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCkKLXsKLSAg
ICBBU1NFUlQocmFyZURhdGEoKSk7Ci0gICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygp
KTsKK3ZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVkTGFiZWxzTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCopCit7IH0KIAotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBkYXRhID0gcmFyZURhdGEo
KS0+bm9kZUxpc3RzKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0ID09IGRhdGEtPm1f
bGFiZWxzTm9kZUxpc3RDYWNoZSk7Ci0gICAgZGF0YS0+bV9sYWJlbHNOb2RlTGlzdENhY2hlID0g
MDsKLX0KLQogdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRDaGlsZE5vZGVMaXN0KCkKIHsKICAgICBB
U1NFUlQocmFyZURhdGEoKSk7CkBAIC0xNjUxLDI1ICsxNjMwLDE2IEBACiAKIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5h
bWUpCiB7Ci0gICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5hbWVOb2RlTGlzdENhY2hlOjpBZGRSZXN1
bHQgcmVzdWx0ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5tX25h
bWVOb2RlTGlzdENhY2hlLmFkZChlbGVtZW50TmFtZSwgMCk7Ci0gICAgaWYgKCFyZXN1bHQuaXNO
ZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+KHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kKTsKLQotICAgIFJlZlB0cjxOYW1lTm9kZUxpc3Q+IGxpc3QgPSBOYW1lTm9k
ZUxpc3Q6OmNyZWF0ZSh0aGlzLCBlbGVtZW50TmFtZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQgPSBsaXN0LmdldCgpOwotICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKKyAgICBOb2Rl
TGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxp
c3RzKHRoaXMpOworICAgIE5hbWVOb2RlTGlzdENhY2hlKiBjYWNoZSA9IG5vZGVMaXN0cy0+ZW5z
dXJlQ2FjaGVPZlR5cGU8TmFtZU5vZGVMaXN0Q2FjaGU+KE5hbWVOb2RlTGlzdFR5cGUpOworICAg
IHJldHVybiBjYWNoZS0+Y3JlYXRlTGlzdElmTmVlZGVkKHRoaXMsIGVsZW1lbnROYW1lKTsKIH0K
IAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb25z
dCBTdHJpbmcmIGNsYXNzTmFtZXMpCiB7Ci0gICAgTm9kZUxpc3RzTm9kZURhdGE6OkNsYXNzTm9k
ZUxpc3RDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdAotICAgICAgICA9IGVuc3VyZVJhcmVEYXRhKCkt
PmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+bV9jbGFzc05vZGVMaXN0Q2FjaGUuYWRkKGNsYXNzTmFt
ZXMsIDApOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQYXNz
UmVmUHRyPE5vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0KLSAgICBSZWZQdHI8
Q2xhc3NOb2RlTGlzdD4gbGlzdCA9IENsYXNzTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzLCBjbGFzc05h
bWVzKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7Ci0gICAgcmV0
dXJuIGxpc3QucmVsZWFzZSgpOworICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMgPSBl
bnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcyk7CisgICAgQ2xhc3NOb2RlTGlz
dENhY2hlKiBjYWNoZSA9IG5vZGVMaXN0cy0+ZW5zdXJlQ2FjaGVPZlR5cGU8Q2xhc3NOb2RlTGlz
dENhY2hlPihDbGFzc05vZGVMaXN0VHlwZSk7CisgICAgcmV0dXJuIGNhY2hlLT5jcmVhdGVMaXN0
SWZOZWVkZWQodGhpcywgY2xhc3NOYW1lcyk7CiB9CiAKIFBhc3NSZWZQdHI8RWxlbWVudD4gTm9k
ZTo6cXVlcnlTZWxlY3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9u
Q29kZSYgZWMpCkBAIC0yMzQ0LDM0ICsyMzE0LDI4IEBACiAKIHZvaWQgTm9kZUxpc3RzTm9kZURh
dGE6OmludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCkKIHsKKyAgICBmb3Ig
KHNpemVfdCBpID0gbV9jYWNoZUxpc3Quc2l6ZSgpOyBpID4gMDsgLS1pKSB7CisvLyBUT0RPOiAg
ICAgICAgaWYgKG1fY2FjaGVMaXN0W2kgLSAxXS0+c2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRl
Q2hhbmdlKCkpCisgICAgICAgIG1fY2FjaGVMaXN0W2kgLSAxXS0+aW52YWxpZGF0ZUNhY2hlKCk7
CisgICAgfQorCiAgICAgLy8gVXNlZCBieSBsYWJlbHMgYW5kIHJlZ2lvbiBub2RlIGxpc3RzIG9u
IGRvY3VtZW50LgogICAgIE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3Ig
ZW5kID0gbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5lbmQoKTsKICAgICBmb3IgKE5vZGVM
aXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgaXQgPSBtX2xpc3RzSW52YWxpZGF0
ZWRBdERvY3VtZW50LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPmlu
dmFsaWRhdGVDYWNoZSgpOwogCi0gICAgQ2xhc3NOb2RlTGlzdENhY2hlOjppdGVyYXRvciBjbGFz
c0NhY2hlRW5kID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuZW5kKCk7Ci0gICAgZm9yIChDbGFzc05v
ZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuYmVnaW4oKTsg
aXQgIT0gY2xhc3NDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0
ZUNhY2hlKCk7Ci0KLSAgICBOYW1lTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgbmFtZUNhY2hlRW5k
ID0gbV9uYW1lTm9kZUxpc3RDYWNoZS5lbmQoKTsKLSAgICBmb3IgKE5hbWVOb2RlTGlzdENhY2hl
OjppdGVyYXRvciBpdCA9IG1fbmFtZU5vZGVMaXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gbmFtZUNh
Y2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKLSAg
ICBpZiAobV9sYWJlbHNOb2RlTGlzdENhY2hlKQotICAgICAgICBtX2xhYmVsc05vZGVMaXN0Q2Fj
aGUtPmludmFsaWRhdGVDYWNoZSgpOwotCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKICAgICBNaWNy
b0RhdGFJdGVtTGlzdENhY2hlOjppdGVyYXRvciBpdGVtTGlzdENhY2hlRW5kID0gbV9taWNyb0Rh
dGFJdGVtTGlzdENhY2hlLmVuZCgpOwogICAgIGZvciAoTWljcm9EYXRhSXRlbUxpc3RDYWNoZTo6
aXRlcmF0b3IgaXQgPSBtX21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gaXRl
bUxpc3RDYWNoZUVuZDsgKytpdCkKICAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hl
KCk7CiAjZW5kaWYKLQotICAgIFJhZGlvTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgcmFkaW9Ob2Rl
TGlzdENhY2hlRW5kID0gbV9yYWRpb05vZGVMaXN0Q2FjaGUuZW5kKCk7Ci0gICAgZm9yIChSYWRp
b05vZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9yYWRpb05vZGVMaXN0Q2FjaGUuYmVnaW4o
KTsgaXQgIT0gcmFkaW9Ob2RlTGlzdENhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25k
LT5pbnZhbGlkYXRlQ2FjaGUoKTsKIH0KIAogYm9vbCBOb2RlTGlzdHNOb2RlRGF0YTo6aXNFbXB0
eSgpIGNvbnN0CiB7CisgICAgaWYgKG1fY2FjaGVMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCiAgICAgaWYgKCFtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMzc5LDIxICsyMzQzLDEyIEBACiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fdGFnTm9kZUxpc3RDYWNoZU5TLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jbGFzc05vZGVMaXN0Q2Fj
aGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX25hbWVOb2Rl
TGlzdENhY2hlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCiAjaWYgRU5BQkxF
KE1JQ1JPREFUQSkKICAgICBpZiAoIW1fbWljcm9EYXRhSXRlbUxpc3RDYWNoZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0gICAgaWYgKG1fbGFiZWxzTm9kZUxp
c3RDYWNoZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX3JhZGlvTm9kZUxp
c3RDYWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0yOTEwLDM1ICsyODY1LDIyIEBACiAgICAgQVNTRVJUKGhhc1RhZ05hbWUo
Zm9ybVRhZykgfHwgaGFzVGFnTmFtZShmaWVsZHNldFRhZykpOwogCiAgICAgTm9kZUxpc3RzTm9k
ZURhdGEqIG5vZGVMaXN0cyA9IGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlz
KTsKLQotICAgIE5vZGVMaXN0c05vZGVEYXRhOjpSYWRpb05vZGVMaXN0Q2FjaGU6OkFkZFJlc3Vs
dCByZXN1bHQgPSBub2RlTGlzdHMtPm1fcmFkaW9Ob2RlTGlzdENhY2hlLmFkZChuYW1lLCAwKTsK
LSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxS
YWRpb05vZGVMaXN0PihyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Ci0KLSAgICBSZWZQdHI8UmFk
aW9Ob2RlTGlzdD4gbGlzdCA9IFJhZGlvTm9kZUxpc3Q6OmNyZWF0ZShuYW1lLCB0b0VsZW1lbnQo
dGhpcykpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKLSAgICBy
ZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgUmFkaW9Ob2RlTGlzdENhY2hlKiBjYWNoZSA9IG5v
ZGVMaXN0cy0+ZW5zdXJlQ2FjaGVPZlR5cGU8UmFkaW9Ob2RlTGlzdENhY2hlPihSYWRpb05vZGVM
aXN0VHlwZSk7CisgICAgcmV0dXJuIGNhY2hlLT5jcmVhdGVMaXN0SWZOZWVkZWQodG9IVE1MRWxl
bWVudCh0aGlzKSwgbmFtZSk7CiB9CiAKLXZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVkUmFkaW9Ob2Rl
TGlzdChSYWRpb05vZGVMaXN0KiBsaXN0LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgQVNTRVJUKHJhcmVEYXRhKCkpOwotICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMo
KSk7Cit2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZFJhZGlvTm9kZUxpc3QoUmFkaW9Ob2RlTGlzdCos
IGNvbnN0IEF0b21pY1N0cmluZyYpCit7IH0KIAotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBkYXRh
ID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0
ID09IGRhdGEtPm1fcmFkaW9Ob2RlTGlzdENhY2hlLmdldChuYW1lKSk7Ci0gICAgZGF0YS0+bV9y
YWRpb05vZGVMaXN0Q2FjaGUucmVtb3ZlKG5hbWUpOwotfQotCiB2b2lkIE5vZGU6OnJlc2V0Q2Fj
aGVkUmFkaW9Ob2RlTGlzdFJvb3ROb2RlKCkKIHsKLSAgICBBU1NFUlQoaGFzVGFnTmFtZShmb3Jt
VGFnKSk7Ci0gICAgaWYgKCFoYXNSYXJlRGF0YSgpIHx8ICFyYXJlRGF0YSgpLT5ub2RlTGlzdHMo
KSkKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkbyB0aGUgc2FtZSBmb3IgTGFiZWxzTm9kZUxp
c3QKKyAgICAvLyBBbHNvIHRoaXMgd29yay1hcm91bmQgZG9lc24ndCB3b3JrIHdoZW4gYW4gYW5j
ZXN0b3Igb2YgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgbm9kZSBsaXN0IGlzIGRldGFjaGVkIGZyb20g
dGhlIGRvY3VtZW50LAorICAgIC8vIGFuZCBpdHMgZGVzY2VuZGVudCBoYXZlIGxhYmVscyB0aGF0
IGFyZSBub3QgaW4gdGhlIHN1YnRyZWUgb2YgdGhlIHJvb3Qgbm9kZS4KKyAgICBpZiAoIWhhc1Jh
cmVEYXRhKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIE5vZGVMaXN0c05vZGVEYXRhOjpSYWRp
b05vZGVMaXN0Q2FjaGUgY2FjaGUgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKS0+bV9yYWRpb05v
ZGVMaXN0Q2FjaGU7Ci0gICAgZm9yIChOb2RlTGlzdHNOb2RlRGF0YTo6UmFkaW9Ob2RlTGlzdENh
Y2hlOjppdGVyYXRvciBpdCA9IGNhY2hlLmJlZ2luKCk7IGl0ICE9IGNhY2hlLmVuZCgpOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5zZXRSb290RWxlbWVudCh0b0VsZW1lbnQodGhpcykpOwor
ICAgIGlmIChOb2RlTGlzdHNOb2RlRGF0YSogbGlzdHMgPSBub2RlTGlzdHMoKSkKKyAgICAgICAg
bGlzdHMtPmNhY2hlT2ZUeXBlPFJhZGlvTm9kZUxpc3RDYWNoZT4oUmFkaW9Ob2RlTGlzdFR5cGUp
LT5yZW1vdmVkRnJvbURvY3VtZW50KCk7CiB9CiAKIC8vIEl0J3MgaW1wb3J0YW50IG5vdCB0byBp
bmxpbmUgcmVtb3ZlZExhc3RSZWYsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBpbmxpbmUgdGhl
IGNvZGUgdG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmgJKHJldmlzaW9uIDExOTk4
NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMjggKzI2LDQ2IEBACiAKICNpbmNsdWRlICJEeW5hbWljTm9kZUxpc3QuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgLy8gTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5v
ZGVzIGluIGEgRWxlbWVudCB3aXRoIGEgZ2l2ZW4gIm5hbWUiIGF0dHJpYnV0ZQotICAgIGNsYXNz
IE5hbWVOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljU3VidHJlZU5vZGVMaXN0IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5hbWVOb2RlTGlzdD4gY3JlYXRlKFBhc3NS
ZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOYW1lTm9kZUxpc3Qocm9vdE5vZGUsIG5hbWUp
KTsKLSAgICAgICAgfQorLy8gTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgRWxl
bWVudCB3aXRoIGEgZ2l2ZW4gIm5hbWUiIGF0dHJpYnV0ZQorY2xhc3MgTmFtZU5vZGVMaXN0IDog
cHVibGljIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE5hbWVOb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNv
bnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmFt
ZU5vZGVMaXN0KHJvb3ROb2RlLCBuYW1lKSk7CisgICAgfQogCi0gICAgICAgIHZpcnR1YWwgfk5h
bWVOb2RlTGlzdCgpOworICAgIHZpcnR1YWwgfk5hbWVOb2RlTGlzdCgpOwogCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgTmFtZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0
IFN0cmluZyYgbmFtZSk7Citwcml2YXRlOgorICAgIE5hbWVOb2RlTGlzdChQYXNzUmVmUHRyPE5v
ZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIG5vZGVNYXRj
aGVzKEVsZW1lbnQqKSBjb25zdDsKIAotICAgICAgICBBdG9taWNTdHJpbmcgbV9ub2RlTmFtZTsK
LSAgICB9OworICAgIEF0b21pY1N0cmluZyBtX25vZGVOYW1lOworfTsKIAorY2xhc3MgTmFtZU5v
ZGVMaXN0Q2FjaGUgOiBwdWJsaWMgRHluYW1pY1N1YnRyZWVOb2RlTGlzdENhY2hlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxOYW1lTm9kZUxpc3RDYWNoZT4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IE5hbWVOb2RlTGlzdENhY2hlKTsgfQorCisgICAgUGFzc1JlZlB0
cjxOYW1lTm9kZUxpc3Q+IGNyZWF0ZUxpc3RJZk5lZWRlZChOb2RlKiwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKKyAgICBib29sIHJlbW92ZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIG5hbWUsIE5hbWVO
b2RlTGlzdCopOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ2FjaGUoKSBPVkVSUklERTsK
KworcHJpdmF0ZToKKyAgICBOYW1lTm9kZUxpc3RDYWNoZSgpCisgICAgICAgIDogRHluYW1pY1N1
YnRyZWVOb2RlTGlzdENhY2hlKE5hbWVOb2RlTGlzdFR5cGUpCisgICAgeyB9CisKKyAgICBIYXNo
TWFwPFN0cmluZywgTmFtZU5vZGVMaXN0Kj4gbV9uYW1lTm9kZUxpc3RDYWNoZTsKK307CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIE5hbWVOb2RlTGlzdF9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmgJKHJldmlzaW9uIDExOTk4NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDI0ICszNiw0
MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBDbGFzc05vZGVMaXN0IDog
cHVibGljIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2xhc3NOb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gcm9v
dE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDbGFzc05vZGVMaXN0KHJvb3ROb2RlLCBjbGFzc05hbWVzKSk7
Ci0gICAgICAgIH0KK2NsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xhc3NOb2RlTGlzdD4g
Y3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1l
cykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xhc3NOb2RlTGlzdChyb290
Tm9kZSwgY2xhc3NOYW1lcykpOworICAgIH0KIAotICAgICAgICB2aXJ0dWFsIH5DbGFzc05vZGVM
aXN0KCk7CisgICAgdmlydHVhbCB+Q2xhc3NOb2RlTGlzdCgpOwogCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgQ2xhc3NOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJp
bmcmIGNsYXNzTmFtZXMpOworcHJpdmF0ZToKKyAgICBDbGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8
Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcyk7CiAKLSAgICAgICAgdmly
dHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0OwogCi0gICAgICAgIFNwYWNlU3BsaXRTdHJpbmcg
bV9jbGFzc05hbWVzOwotICAgICAgICBTdHJpbmcgbV9vcmlnaW5hbENsYXNzTmFtZXM7Ci0gICAg
fTsKKyAgICBTcGFjZVNwbGl0U3RyaW5nIG1fY2xhc3NOYW1lczsKKyAgICBTdHJpbmcgbV9vcmln
aW5hbENsYXNzTmFtZXM7Cit9OwogCitjbGFzcyBDbGFzc05vZGVMaXN0Q2FjaGUgOiBwdWJsaWMg
RHluYW1pY1N1YnRyZWVOb2RlTGlzdENhY2hlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDbGFzc05vZGVMaXN0Q2FjaGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
bGFzc05vZGVMaXN0Q2FjaGUpOyB9CisKKyAgICBQYXNzUmVmUHRyPENsYXNzTm9kZUxpc3Q+IGNy
ZWF0ZUxpc3RJZk5lZWRlZChOb2RlKiwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKTsKKyAgICBi
b29sIHJlbW92ZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMsIENsYXNzTm9kZUxp
c3QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNhY2hlKCkgT1ZFUlJJREU7CisKK3By
aXZhdGU6CisgICAgQ2xhc3NOb2RlTGlzdENhY2hlKCkKKyAgICAgICAgOiBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0Q2FjaGUoQ2xhc3NOb2RlTGlzdFR5cGUpCisgICAgeyB9CisKKyAgICBIYXNoTWFw
PFN0cmluZywgQ2xhc3NOb2RlTGlzdCo+IG1fY2xhc3NOb2RlTGlzdENhY2hlOworfTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ2xhc3NOb2RlTGlzdF9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAJKHJldmlzaW9uIDExOTk4NikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Miw5ICsxMTIsNDYgQEAKICAgICByZXR1cm4gY2hlY2tFbGVtZW50TWF0Y2hlc1JhZGlvTm9kZUxp
c3RGaWx0ZXIodGVzdEVsZW1lbnQpOwogfQogCi12b2lkIFJhZGlvTm9kZUxpc3Q6OnNldFJvb3RF
bGVtZW50KEVsZW1lbnQqIGJhc2VFbGVtZW50KQordm9pZCBSYWRpb05vZGVMaXN0OjpyZXNldFJv
b3RFbGVtZW50KCkKIHsKLSAgICBtX25vZGUgPSBiYXNlRWxlbWVudC0+dG9Ob2RlKCk7CisgICAg
bV9ub2RlID0gbV9iYXNlRWxlbWVudDsKIH0KKworUGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0PiBS
YWRpb05vZGVMaXN0Q2FjaGU6OmNyZWF0ZUxpc3RJZk5lZWRlZChFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJhZGlvTm9kZUxpc3Qq
Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmFkaW9Ob2RlTGlzdENhY2hlLmFkZChuYW1lLCAwKTsK
KyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7CisKKyAgICBSZWZQdHI8UmFkaW9Ob2RlTGlzdD4gbGlzdCA9IFJhZGlvTm9k
ZUxpc3Q6OmNyZWF0ZShlbGVtZW50LCBuYW1lKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCA9IGxpc3QuZ2V0KCk7CisgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworfQorCitib29sIFJh
ZGlvTm9kZUxpc3RDYWNoZTo6cmVtb3ZlRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmFk
aW9Ob2RlTGlzdCogbGlzdCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QgPT0gbV9y
YWRpb05vZGVMaXN0Q2FjaGUuZ2V0KG5hbWUpKTsKKyAgICBpZiAobV9yYWRpb05vZGVMaXN0Q2Fj
aGUuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1fcmFkaW9Ob2RlTGlz
dENhY2hlLnJlbW92ZShuYW1lKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3R5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFJhZGlvTm9kZUxpc3QqPjo6aXRlcmF0b3IgSXRlcmF0b3I7CisKK3ZvaWQg
UmFkaW9Ob2RlTGlzdENhY2hlOjppbnZhbGlkYXRlQ2FjaGUoKQoreworICAgIEl0ZXJhdG9yIHJh
ZGlvQ2FjaGVFbmQgPSBtX3JhZGlvTm9kZUxpc3RDYWNoZS5lbmQoKTsKKyAgICBmb3IgKEl0ZXJh
dG9yIGl0ID0gbV9yYWRpb05vZGVMaXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gcmFkaW9DYWNoZUVu
ZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Cit9CisKK3Zv
aWQgUmFkaW9Ob2RlTGlzdENhY2hlOjpyZW1vdmVkRnJvbURvY3VtZW50KCkKK3sKKyAgICBJdGVy
YXRvciByYWRpb0NhY2hlRW5kID0gbV9yYWRpb05vZGVMaXN0Q2FjaGUuZW5kKCk7CisgICAgZm9y
IChJdGVyYXRvciBpdCA9IG1fcmFkaW9Ob2RlTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IHJhZGlv
Q2FjaGVFbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPnJlc2V0Um9vdEVsZW1lbnQoKTsK
K30KKwogfSAvLyBuYW1zcGFjZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05v
ZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlz
dC5oCShyZXZpc2lvbiAxMTk5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgTGFiZWxzTm9k
ZUxpc3RfaAogCiAjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00Nyw2ICs0OCwyMiBAQAogICAgIFJlZlB0cjxOb2RlPiBtX2Zvck5vZGU7CiB9
OwogCitjbGFzcyBMYWJlbHNOb2RlTGlzdENhY2hlIDogcHVibGljIER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3RDYWNoZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGFiZWxzTm9kZUxp
c3RDYWNoZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IExhYmVsc05vZGVMaXN0Q2Fj
aGUpOyB9CisKKyAgICBQYXNzUmVmUHRyPExhYmVsc05vZGVMaXN0PiBjcmVhdGVMaXN0SWZOZWVk
ZWQoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ2FjaGUoKSBPVkVSUklERTsK
KworcHJpdmF0ZToKKyAgICBMYWJlbHNOb2RlTGlzdENhY2hlKCkKKyAgICAgICAgOiBEeW5hbWlj
U3VidHJlZU5vZGVMaXN0Q2FjaGUoTGFiZWxzTm9kZUxpc3RUeXBlKQorICAgICAgICAsIG1fbGFi
ZWxzTm9kZUxpc3RDYWNoZSgwKQorICAgIHsgfQorCisgICAgTGFiZWxzTm9kZUxpc3QqIG1fbGFi
ZWxzTm9kZUxpc3RDYWNoZTsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIExhYmVsc05vZGVMaXN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9k
ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxp
c3QuY3BwCShyZXZpc2lvbiAxMTk5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05v
ZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDAsNyArNDEsNyBAQAogCiBMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05vZGVMaXN0KCkK
IHsKLSAgICBtX2Zvck5vZGUtPnJlbW92ZUNhY2hlZExhYmVsc05vZGVMaXN0KHRoaXMpOworICAg
IG1fZm9yTm9kZS0+bm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlT2ZUeXBlKExhYmVsc05vZGVMaXN0
VHlwZSk7CiAgICAgbV9mb3JOb2RlLT5kb2N1bWVudCgpLT51bnJlZ2lzdGVyRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdCh0aGlzKTsKIH0gCiAgICAgCkBAIC00OSw0ICs1MCwxOSBAQAogICAgIHJldHVy
biB0ZXN0Tm9kZS0+aGFzVGFnTmFtZShsYWJlbFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTExhYmVs
RWxlbWVudCo+KHRlc3ROb2RlKS0+Y29udHJvbCgpID09IG1fZm9yTm9kZTsKIH0KIAorUGFzc1Jl
ZlB0cjxMYWJlbHNOb2RlTGlzdD4gTGFiZWxzTm9kZUxpc3RDYWNoZTo6Y3JlYXRlTGlzdElmTmVl
ZGVkKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG1fbGFiZWxzTm9kZUxpc3RDYWNoZSkKKyAgICAg
ICAgcmV0dXJuIG1fbGFiZWxzTm9kZUxpc3RDYWNoZTsKKworICAgIFJlZlB0cjxMYWJlbHNOb2Rl
TGlzdD4gbGlzdCA9IExhYmVsc05vZGVMaXN0OjpjcmVhdGUobm9kZSk7CisgICAgbV9sYWJlbHNO
b2RlTGlzdENhY2hlID0gbGlzdC5nZXQoKTsKKyAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7Cit9
CisKK3ZvaWQgTGFiZWxzTm9kZUxpc3RDYWNoZTo6aW52YWxpZGF0ZUNhY2hlKCkKK3sKKyAgICBt
X2xhYmVsc05vZGVMaXN0Q2FjaGUtPmludmFsaWRhdGVDYWNoZSgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDExOTk4NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCw4IEBACiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cyA9IE5vZGU6OmVuc3VyZVJh
cmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKTsKLSAgICBpZiAobm9kZUxpc3RzLT5tX2xh
YmVsc05vZGVMaXN0Q2FjaGUpCi0gICAgICAgIHJldHVybiBub2RlTGlzdHMtPm1fbGFiZWxzTm9k
ZUxpc3RDYWNoZTsKLQotICAgIFJlZlB0cjxMYWJlbHNOb2RlTGlzdD4gbGlzdCA9IExhYmVsc05v
ZGVMaXN0OjpjcmVhdGUodGhpcyk7Ci0gICAgbm9kZUxpc3RzLT5tX2xhYmVsc05vZGVMaXN0Q2Fj
aGUgPSBsaXN0LmdldCgpOwotICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKKyAgICBMYWJlbHNO
b2RlTGlzdENhY2hlKiBjYWNoZSA9IG5vZGVMaXN0cy0+ZW5zdXJlQ2FjaGVPZlR5cGU8TGFiZWxz
Tm9kZUxpc3RDYWNoZT4oTGFiZWxzTm9kZUxpc3RUeXBlKTsKKyAgICByZXR1cm4gY2FjaGUtPmNy
ZWF0ZUxpc3RJZk5lZWRlZCh0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViY29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmgJKHJldmlzaW9uIDExOTk4NikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
NiArMjcsMTYgQEAKICNkZWZpbmUgUmFkaW9Ob2RlTGlzdF9oCiAKICNpbmNsdWRlICJEeW5hbWlj
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBSYWRpb05vZGVMaXN0IDogcHVibGljIER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IGNyZWF0
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEVsZW1lbnQqIGJhc2VFbGVtZW50KQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IGNyZWF0ZShFbGVtZW50KiBiYXNlRWxlbWVu
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBSYWRpb05vZGVMaXN0KG5hbWUsIGJhc2VFbGVtZW50KSk7CiAgICAgfQpAQCAtNDUs
NyArNDUsNyBAQAogCiAgICAgU3RyaW5nIHZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1
ZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldFJvb3RFbGVtZW50KEVsZW1lbnQqIGJhc2VF
bGVtZW50KTsKKyAgICB2b2lkIHJlc2V0Um9vdEVsZW1lbnQoKTsKIAogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7CkBAIC01OCw2ICs1OCwy
MyBAQAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2Jhc2VFbGVtZW50OwogfTsKIAorY2xhc3MgUmFk
aW9Ob2RlTGlzdENhY2hlIDogcHVibGljIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RDYWNoZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UmFkaW9Ob2RlTGlzdENhY2hlPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgUmFkaW9Ob2RlTGlzdENhY2hlKTsgfQorCisgICAgUGFz
c1JlZlB0cjxSYWRpb05vZGVMaXN0PiBjcmVhdGVMaXN0SWZOZWVkZWQoRWxlbWVudCosIGNvbnN0
IFN0cmluZyYgbmFtZSk7CisgICAgYm9vbCByZW1vdmVGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBu
YW1lLCBSYWRpb05vZGVMaXN0Kik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDYWNoZSgp
IE9WRVJSSURFOworICAgIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOworCitwcml2YXRlOgor
ICAgIFJhZGlvTm9kZUxpc3RDYWNoZSgpCisgICAgICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlz
dENhY2hlKFJhZGlvTm9kZUxpc3RUeXBlKQorICAgIHsgfQorCisgICAgSGFzaE1hcDxTdHJpbmcs
IFJhZGlvTm9kZUxpc3QqPiBtX3JhZGlvTm9kZUxpc3RDYWNoZTsKK307CisKIH0gLy8gbmFtZXBz
YWNlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTE5OTg2KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05MDA5
LDcgKzkwMDksNyBAQAogCQk3QjFFQTBDRDE1NzZDNUI1MDA2MDE3N0QgLyogSlNVbmRvTWFuYWdl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VuZG9NYW5hZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCOTE4NENGMTU3NThFNDIwMDkyQUE5MyAvKiBV
bmRvTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmRv
TWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCOTE4NEQwMTU3NThF
NDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVbmRvTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjkxODRE
MTE1NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFnZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gInNvdXJjZWNv
ZGUud2Via2l0LWlkbCI7IHBhdGggPSBVbmRvTWFuYWdlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdCOTE4NEQxMTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVW5kb01hbmFnZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QzYwMTI4MDYwMDc4QkI3MEUzNjdBOTUgLyogRE5TUmVzb2x2ZVF1ZXVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEROU1Jlc29sdmVRdWV1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFMzNDRDAwMTI3RjM0MEQwMEJF
OEYxNyAvKiBQdXJnZVByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFB1cmdlUHJpb3JpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0UzN0VGMkQx
MzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3VicmVzb3VyY2VMb2FkZXJDRi5jcHA7IHBhdGggPSBj
Zi9TdWJyZXNvdXJjZUxvYWRlckNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148646</attachid>
            <date>2012-06-20 13:40:13 -0700</date>
            <delta_ts>2012-06-20 20:31:05 -0700</delta_ts>
            <desc>work in progress 2</desc>
            <filename>node-list-cache-list-2</filename>
            <type>text/plain</type>
            <size>55445</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMjA0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzE0LDYgKzcxNCw3IEBACiAK
ICAgICB2b2lkIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5v
ZGVMaXN0Kik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5h
bWljU3VidHJlZU5vZGVMaXN0Kik7CisgICAgdm9pZCBpbnZhbGlkYXRlRHluYW1pY1N1YnRyZWVO
b2RlTGlzdENhY2hlcygpOwogCiAgICAgdm9pZCBhdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJh
dG9yKik7CiAgICAgdm9pZCBkZXRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKik7CkBAIC0x
MTA3LDcgKzExMDgsNiBAQAogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKICAgICBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBnZXRJdGVtcyhjb25zdCBTdHJpbmcmIHR5cGVOYW1lcyk7Ci0gICAgdm9pZCBy
ZW1vdmVDYWNoZWRNaWNyb0RhdGFJdGVtTGlzdChNaWNyb0RhdGFJdGVtTGlzdCosIGNvbnN0IFN0
cmluZyYpOwogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKFVORE9fTUFOQUdFUikKQEAgLTEzOTMs
NiArMTM5Myw3IEBACiAgICAgCiAgICAgT3duUHRyPEhUTUxDb2xsZWN0aW9uPiBtX2NvbGxlY3Rp
b25zW051bVVubmFtZWREb2N1bWVudENhY2hlZFR5cGVzXTsKICAgICBPd25QdHI8SFRNTEFsbENv
bGxlY3Rpb24+IG1fYWxsQ29sbGVjdGlvbjsKKyAgICBIYXNoU2V0PER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QqPiBtX25vZGVMaXN0c0ludmFsaWRhdGVkQXREb2N1bWVudDsKIAogICAgIHR5cGVkZWYg
SGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgT3duUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gPiBO
YW1lZENvbGxlY3Rpb25NYXA7CiAgICAgTmFtZWRDb2xsZWN0aW9uTWFwIG1fZG9jdW1lbnROYW1l
ZEl0ZW1Db2xsZWN0aW9uczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9w
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRl
ci5jcHAJKHJldmlzaW9uIDEyMDQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVB
ZG9wdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQAogCiAgICAgZm9yIChO
b2RlKiBub2RlID0gcm9vdDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9v
dCkpIHsKICAgICAgICAgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSA9IG5vZGUtPnNldFRyZWVTY29w
ZShuZXdEb2N1bWVudCA9PSBtX25ld1Njb3BlID8gMCA6IG1fbmV3U2NvcGUpOwotICAgICAgICBp
ZiAocmFyZURhdGEgJiYgcmFyZURhdGEtPm5vZGVMaXN0cygpKSB7Ci0gICAgICAgICAgICByYXJl
RGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXMoKTsKKyAgICAgICAgaWYgKHJhcmVE
YXRhICYmICFyYXJlRGF0YS0+bm9kZUxpc3RzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBy
YXJlRGF0YS0+bm9kZUxpc3RzKCkuaW52YWxpZGF0ZUFsbENhY2hlcygpOwogICAgICAgICAgICAg
aWYgKG1fb2xkU2NvcGUpCiAgICAgICAgICAgICAgICAgbV9vbGRTY29wZS0+cmVtb3ZlTm9kZUxp
c3RDYWNoZSgpOwogICAgICAgICAgICAgbV9uZXdTY29wZS0+YWRkTm9kZUxpc3RDYWNoZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL01pY3JvRGF0YUl0ZW1MaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL01pY3JvRGF0YUl0ZW1MaXN0LmgJKHJldmlzaW9uIDEyMDQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NaWNyb0RhdGFJdGVtTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw2ICs1MiwyMyBAQAogICAgIFN0cmluZyBtX29yaWdpbmFsVHlwZU5hbWVzOwog
fTsKIAorY2xhc3MgTWljcm9EYXRhSXRlbUxpc3RDYWNoZSA6IHB1YmxpYyBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0Q2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1pY3JvRGF0
YUl0ZW1MaXN0Q2FjaGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBNaWNyb0RhdGFJ
dGVtTGlzdENhY2hlKTsgfQorCisgICAgUGFzc1JlZlB0cjxNaWNyb0RhdGFJdGVtTGlzdD4gY3Jl
YXRlTGlzdElmTmVlZGVkKE5vZGUqLCBjb25zdCBTdHJpbmcmIHR5cGVOYW1lcyk7CisgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVDYWNoZShJbnZhbGlkYXRpb25UeXBlKSBPVkVSUklERTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTWljcm9EYXRhSXRlbUxpc3Q7CisKKyAgICBNaWNy
b0RhdGFJdGVtTGlzdENhY2hlKCkKKyAgICAgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0Q2Fj
aGUoTWljcm9EYXRhSXRlbUxpc3RUeXBlKQorICAgIHsgfQorCisgICAgSGFzaE1hcDxTdHJpbmcs
IE1pY3JvRGF0YUl0ZW1MaXN0Kj4gbV9taWNyb0RhdGFJdGVtTGlzdENhY2hlOworfTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1JQ1JPREFUQSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMDQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MjAgKzMxLDI4IEBACiAjaW5jbHVkZSAiQ2xhc3NOb2RlTGlzdC5oIgogCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVt
ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMp
CiAgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlKQotICAgICwgbV9jbGFzc05h
bWVzKGNsYXNzTmFtZXMsIG5vZGUoKS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCisgICAg
LCBtX2NsYXNzTmFtZXMoY2xhc3NOYW1lcywgZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCiAg
ICAgLCBtX29yaWdpbmFsQ2xhc3NOYW1lcyhjbGFzc05hbWVzKQogewogfQogCiBDbGFzc05vZGVM
aXN0Ojp+Q2xhc3NOb2RlTGlzdCgpCiB7Ci0gICAgbm9kZSgpLT5yZW1vdmVDYWNoZWRDbGFzc05v
ZGVMaXN0KHRoaXMsIG1fb3JpZ2luYWxDbGFzc05hbWVzKTsKKyAgICBOb2RlTGlzdHNOb2RlRGF0
YSogbm9kZUxpc3RzID0gbm9kZSgpLT5ub2RlTGlzdHMoKTsKKyAgICBBU1NFUlQobm9kZUxpc3Rz
KTsKKyAgICBDbGFzc05vZGVMaXN0Q2FjaGUqIGNhY2hlID0gbm9kZUxpc3RzLT5jYWNoZU9mVHlw
ZTxDbGFzc05vZGVMaXN0Q2FjaGU+KENsYXNzTm9kZUxpc3RUeXBlKTsKKyAgICBBU1NFUlQodGhp
cyA9PSBjYWNoZS0+bV9jbGFzc05vZGVMaXN0Q2FjaGUuZ2V0KG1fb3JpZ2luYWxDbGFzc05hbWVz
KSk7CisgICAgaWYgKGNhY2hlLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5zaXplKCkgIT0gMSkKKyAg
ICAgICAgY2FjaGUtPm1fY2xhc3NOb2RlTGlzdENhY2hlLnJlbW92ZShtX29yaWdpbmFsQ2xhc3NO
YW1lcyk7CisgICAgZWxzZQorICAgICAgICBub2RlTGlzdHMtPnJlbW92ZUNhY2hlT2ZUeXBlKG5v
ZGUoKSwgQ2xhc3NOb2RlTGlzdFR5cGUpOwogfSAKIAogYm9vbCBDbGFzc05vZGVMaXN0Ojpub2Rl
TWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKQEAgLTU3LDQgKzY1LDI0IEBACiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPih0ZXN0Tm9kZSktPmNsYXNzTmFtZXMo
KS5jb250YWluc0FsbChtX2NsYXNzTmFtZXMpOwogfQogCitQYXNzUmVmUHRyPENsYXNzTm9kZUxp
c3Q+IENsYXNzTm9kZUxpc3RDYWNoZTo6Y3JlYXRlTGlzdElmTmVlZGVkKE5vZGUqIG5vZGUsIGNv
bnN0IFN0cmluZyYgY2xhc3NOYW1lcykKK3sKKyAgICBIYXNoTWFwPFN0cmluZywgQ2xhc3NOb2Rl
TGlzdCo+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuYWRkKGNsYXNz
TmFtZXMsIDApOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIFJlZlB0cjxDbGFzc05vZGVMaXN0PiBsaXN0
ID0gQ2xhc3NOb2RlTGlzdDo6Y3JlYXRlKG5vZGUsIGNsYXNzTmFtZXMpOworICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7
Cit9CisKK3ZvaWQgQ2xhc3NOb2RlTGlzdENhY2hlOjppbnZhbGlkYXRlQ2FjaGUoSW52YWxpZGF0
aW9uVHlwZSkKK3sKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDbGFzc05vZGVMaXN0Kj46
Oml0ZXJhdG9yIEl0ZXJhdG9yOworCisgICAgSXRlcmF0b3IgY2xhc3NDYWNoZUVuZCA9IG1fY2xh
c3NOb2RlTGlzdENhY2hlLmVuZCgpOworICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2NsYXNzTm9k
ZUxpc3RDYWNoZS5iZWdpbigpOyBpdCAhPSBjbGFzc0NhY2hlRW5kOyArK2l0KQorICAgICAgICBp
dC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0LmgJKHJldmlzaW9uIDEyMDQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw0MiAr
MjYsNjMgQEAKIAogI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2gu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgLy8gTm9kZUxpc3QgdGhhdCBsaW1pdHMg
dG8gYSBwYXJ0aWN1bGFyIHRhZy4KLSAgICBjbGFzcyBUYWdOb2RlTGlzdCA6IHB1YmxpYyBEeW5h
bWljU3VidHJlZU5vZGVMaXN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFRhZ05vZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhZ05vZGVMaXN0
KHJvb3ROb2RlLCBuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkpOwotICAgICAgICB9CisvLyBOb2Rl
TGlzdCB0aGF0IGxpbWl0cyB0byBhIHBhcnRpY3VsYXIgdGFnLgorY2xhc3MgVGFnTm9kZUxpc3Qg
OiBwdWJsaWMgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8VGFnTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bE5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhZ05vZGVMaXN0KHJv
b3ROb2RlLCBuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkpOworICAgIH0KIAotICAgICAgICB2aXJ0
dWFsIH5UYWdOb2RlTGlzdCgpOworICAgIHZpcnR1YWwgflRhZ05vZGVMaXN0KCk7CiAKLSAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIFRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSk7Citwcm90ZWN0ZWQ6CisgICAgVGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29u
c3Q7CiAKLSAgICAgICAgQXRvbWljU3RyaW5nIG1fbmFtZXNwYWNlVVJJOwotICAgICAgICBBdG9t
aWNTdHJpbmcgbV9sb2NhbE5hbWU7Ci0gICAgfTsKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3Bh
Y2VVUkk7CisgICAgQXRvbWljU3RyaW5nIG1fbG9jYWxOYW1lOworfTsKIAotICAgIGNsYXNzIEhU
TUxUYWdOb2RlTGlzdCA6IHB1YmxpYyBUYWdOb2RlTGlzdCB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4g
cm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBIVE1MVGFnTm9kZUxpc3Qocm9vdE5vZGUsIG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSk7
Ci0gICAgICAgIH0KK2NsYXNzIEhUTUxUYWdOb2RlTGlzdCA6IHB1YmxpYyBUYWdOb2RlTGlzdCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGFnTm9kZUxpc3Q+IGNyZWF0ZShQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEhUTUxUYWdOb2RlTGlzdChyb290Tm9kZSwgbmFtZXNwYWNlVVJJLCBsb2NhbE5h
bWUpKTsKKyAgICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBIVE1MVGFnTm9kZUxpc3QoUGFz
c1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkks
IGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKK3ByaXZhdGU6CisgICAgSFRNTFRhZ05v
ZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAKLSAgICAgICAgdmly
dHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0OwogCi0gICAgICAgIEF0b21pY1N0cmluZyBtX2xv
d2VyZWRMb2NhbE5hbWU7Ci0gICAgfTsKKyAgICBBdG9taWNTdHJpbmcgbV9sb3dlcmVkTG9jYWxO
YW1lOworfTsKKworY2xhc3MgVGFnTm9kZUxpc3RDYWNoZSA6IHB1YmxpYyBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0Q2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRhZ05vZGVM
aXN0Q2FjaGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUYWdOb2RlTGlzdENhY2hl
KTsgfQorCisgICAgUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4gY3JlYXRlTGlzdElmTmVlZGVkKE5v
ZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUpOworICAgIGJvb2wgcmVtb3ZlRnJvbUNhY2hlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgVGFnTm9kZUxp
c3QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNhY2hlKEludmFsaWRhdGlvblR5cGUp
IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBUYWdOb2RlTGlzdDsKKwor
ICAgIFRhZ05vZGVMaXN0Q2FjaGUoKQorICAgICAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RD
YWNoZShUYWdOb2RlTGlzdFR5cGUpCisgICAgeyB9CisgICAgCisgICAgSGFzaE1hcDxBdG9taWNT
dHJpbmcsIFRhZ05vZGVMaXN0Kj4gbV90YWdOb2RlTGlzdENhY2hlOworICAgIEhhc2hNYXA8UXVh
bGlmaWVkTmFtZSwgVGFnTm9kZUxpc3QqPiBtX3RhZ05vZGVMaXN0Q2FjaGVOUzsKK307CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFRhZ05vZGVMaXN0X2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAkocmV2aXNpb24gMTIwNDk2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQAogY2xhc3MgTmFtZWROb2RlTWFwOwogY2xh
c3MgTmFtZU5vZGVMaXN0OwogY2xhc3MgTm9kZUxpc3Q7CitjbGFzcyBOb2RlTGlzdHNOb2RlRGF0
YTsKIGNsYXNzIE5vZGVSYXJlRGF0YTsKIGNsYXNzIE5vZGVSZW5kZXJpbmdDb250ZXh0OwogY2xh
c3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwpAQCAtNTU4LDE5ICs1NTksMTEgQEAKIAogICAgIHZv
aWQgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBFbGVtZW50KiBhdHRyaWJ1dGVPd25lckVsZW1lbnQpOwogICAgIHZvaWQg
aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQoKTsKLSAgICB2b2lk
IHJlbW92ZUNhY2hlZENsYXNzTm9kZUxpc3QoQ2xhc3NOb2RlTGlzdCosIGNvbnN0IFN0cmluZyYp
OwogCi0gICAgdm9pZCByZW1vdmVDYWNoZWROYW1lTm9kZUxpc3QoTmFtZU5vZGVMaXN0KiwgY29u
c3QgU3RyaW5nJik7Ci0gICAgdm9pZCByZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChUYWdOb2RlTGlz
dCosIGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIHZvaWQgcmVtb3ZlQ2FjaGVkVGFnTm9kZUxp
c3QoVGFnTm9kZUxpc3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAgdm9pZCByZW1vdmVD
YWNoZWRMYWJlbHNOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0Kik7Ci0KKyAgICBOb2Rl
TGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzKCk7CiAgICAgdm9pZCByZW1vdmVDYWNoZWRDaGlsZE5v
ZGVMaXN0KCk7CiAKICAgICBQYXNzUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHJhZGlvTm9kZUxpc3Qo
Y29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgdm9pZCByZW1vdmVDYWNoZWRSYWRpb05vZGVMaXN0
KFJhZGlvTm9kZUxpc3QqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICB2b2lkIHJlc2V0Q2Fj
aGVkUmFkaW9Ob2RlTGlzdFJvb3ROb2RlKCk7Ci0KICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBn
ZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAgICAgUGFzc1JlZlB0
cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNCeU5hbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50TmFtZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAxMjA0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDEzICs2MCwxNSBAQAogICAgICAgICByZXR1cm4gbV9ub2RlLmdldCgpOwogICAgIH0K
IAorICAgIERvY3VtZW50KiBkb2N1bWVudCgpIHsgcmV0dXJuIG1fbm9kZS0+ZG9jdW1lbnQoKTsg
fQorCiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGUoKSB7IG1fY2FjaGVzLnJlc2V0KCk7IH0KIAog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Qg
PSAwOwogCiAgICAgc3RydWN0IENhY2hlcyB7Ci0gICAgICAgIENhY2hlcyhSb290VHlwZSByb290
VHlwZSkKKyAgICAgICAgZXhwbGljaXQgQ2FjaGVzKFJvb3RUeXBlIHJvb3RUeXBlKQogICAgICAg
ICAgICAgOiByb290ZWRBdERvY3VtZW50KHJvb3RUeXBlID09IFJvb3RlZEF0RG9jdW1lbnQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJlc2V0KCk7CkBAIC04MSw3ICs4Myw3IEBACiAKICAgICAg
ICAgTm9kZSogbGFzdEl0ZW07CiAgICAgICAgIHVuc2lnbmVkIGNhY2hlZExlbmd0aDsKLSAgICAg
ICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQgOiAyOTsgLy8gQm9ycm93IDMtYml0cyBmb3IgYml0
IGZpZWxkcworICAgICAgICB1bnNpZ25lZCBsYXN0SXRlbU9mZnNldDsgLy8gQm9ycm93IDMtYml0
cyBmb3IgYml0IGZpZWxkcwogICAgICAgICB1bnNpZ25lZCBpc0xlbmd0aENhY2hlVmFsaWQgOiAx
OwogICAgICAgICB1bnNpZ25lZCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKICAgICAgICAgdW5zaWdu
ZWQgcm9vdGVkQXREb2N1bWVudCA6IDE7CkBAIC05NCw2ICs5NiwxNiBAQAogICAgIHZpcnR1YWwg
Ym9vbCBpc0R5bmFtaWNOb2RlTGlzdCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0K
IH07CiAKKy8vIEZJWE1FOiBVc2UgdHJhaXRzIGFuZCBnZXQgcmlkIG9mIHRoaXMgZW51bS4KK2Vu
dW0gRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUgeworICAgIFJhZGlvTm9kZUxpc3RUeXBlLAor
ICAgIExhYmVsc05vZGVMaXN0VHlwZSwKKyAgICBUYWdOb2RlTGlzdFR5cGUsCisgICAgTmFtZU5v
ZGVMaXN0VHlwZSwKKyAgICBDbGFzc05vZGVMaXN0VHlwZSwKKyAgICBNaWNyb0RhdGFJdGVtTGlz
dFR5cGUsCit9OworCiBjbGFzcyBEeW5hbWljU3VidHJlZU5vZGVMaXN0IDogcHVibGljIER5bmFt
aWNOb2RlTGlzdCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RHluYW1pY1N1YnRyZWVOb2RlTGlz
dCgpOwpAQCAtMTA0LDEzICsxMTYsMzggQEAKICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KFBh
c3NSZWZQdHI8Tm9kZT4sIFJvb3RUeXBlID0gUm9vdGVkQXROb2RlKTsKIAogcHJpdmF0ZToKLSAg
ICB1c2luZyBEeW5hbWljTm9kZUxpc3Q6OmludmFsaWRhdGVDYWNoZTsKKyAgICB1c2luZyBEeW5h
bWljTm9kZUxpc3Q6Om1fY2FjaGVzOwogICAgIGZyaWVuZCBzdHJ1Y3QgTm9kZUxpc3RzTm9kZURh
dGE7CiAKICAgICBOb2RlKiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5z
aWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKICAgICBOb2RlKiBpdGVt
QmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJl
bWFpbmluZ09mZnNldCkgY29uc3Q7CiB9OwogCitjbGFzcyBEeW5hbWljU3VidHJlZU5vZGVMaXN0
Q2FjaGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RD
YWNoZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5EeW5hbWljU3VidHJlZU5vZGVMaXN0Q2FjaGUoKSB7IH0KKworICAgIER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3RUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIGVu
dW0gSW52YWxpZGF0aW9uVHlwZSB7CisgICAgICAgIEludmFsaWRhdGVPbkNoaWxkTm9kZUNoYW5n
ZSwKKyAgICAgICAgSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlLAorICAgIH07CisgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVDYWNoZShJbnZhbGlkYXRpb25UeXBlKSA9IDA7CisKK3Byb3Rl
Y3RlZDoKKyAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0Q2FjaGUoRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorCitw
cml2YXRlOgorICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RUeXBlIG1fdHlwZTsKK307CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIER5bmFtaWNOb2RlTGlzdF9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEyMDQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NjQsMTYgKzM4NjQsMjMg
QEAKIAogdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QpCiB7Ci0gICAgZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJl
Tm9kZUxpc3RzKHRoaXMpLT5tX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LmFkZChsaXN0KTsK
KyAgICBtX25vZGVMaXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5hZGQobGlzdCk7CiB9CiAKIHZv
aWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QqIGxpc3QpCiB7Ci0gICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwotICAgIEFT
U0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0gICAgcmFyZURhdGEoKS0+bm9kZUxpc3Rz
KCktPm1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQucmVtb3ZlKGxpc3QpOworICAgIG1fbm9k
ZUxpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnJlbW92ZShsaXN0KTsKIH0KIAordm9pZCBEb2N1
bWVudDo6aW52YWxpZGF0ZUR5bmFtaWNTdWJ0cmVlTm9kZUxpc3RDYWNoZXMoKQoreworICAgIHR5
cGVkZWYgSGFzaFNldDxEeW5hbWljU3VidHJlZU5vZGVMaXN0Kj46Oml0ZXJhdG9yIEl0ZXJhdG9y
OworCisgICAgSXRlcmF0b3IgZW5kID0gbV9ub2RlTGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQu
ZW5kKCk7CisgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fbm9kZUxpc3RzSW52YWxpZGF0ZWRBdERv
Y3VtZW50LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPmludmFsaWRh
dGVDYWNoZSgpOworfQorCiB2b2lkIERvY3VtZW50OjphdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0
ZXJhdG9yKiBuaSkKIHsKICAgICBtX25vZGVJdGVyYXRvcnMuYWRkKG5pKTsKQEAgLTU5MjEsMzIg
KzU5MjgsMTIgQEAKICNpZiBFTkFCTEUoTUlDUk9EQVRBKQogUGFzc1JlZlB0cjxOb2RlTGlzdD4g
RG9jdW1lbnQ6OmdldEl0ZW1zKGNvbnN0IFN0cmluZyYgdHlwZU5hbWVzKQogewotICAgIE5vZGVM
aXN0c05vZGVEYXRhKiBub2RlTGlzdHMgPSBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlz
dHModGhpcyk7Ci0KICAgICAvLyBTaW5jZSBkb2N1bWV0LmdldEl0ZW0oKSBpcyBhbGxvd2VkIGZv
ciBtaWNyb2RhdGEsIHR5cGVOYW1lcyB3aWxsIGJlIG51bGwgc3RyaW5nLgogICAgIC8vIEluIHRo
aXMgY2FzZSB3ZSBuZWVkIHRvIGNyZWF0ZSBhbiB1bmlxdWUgc3RyaW5nIGlkZW50aWZpZXIgdG8g
bWFwIHN1Y2ggcmVxdWVzdCBpbiB0aGUgY2FjaGUuCiAgICAgU3RyaW5nIGxvY2FsVHlwZU5hbWVz
ID0gdHlwZU5hbWVzLmlzTnVsbCgpID8gU3RyaW5nKCJodHRwOi8vd2Via2l0Lm9yZy9taWNyb2Rh
dGEvdW5kZWZpbmVkSXRlbVR5cGUiKSA6IHR5cGVOYW1lczsKIAotICAgIE5vZGVMaXN0c05vZGVE
YXRhOjpNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbm9kZUxpc3Rz
LT5tX21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUuYWRkKGxvY2FsVHlwZU5hbWVzLCAwKTsKLSAgICBp
ZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxOb2RlTGlz
dD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotCi0gICAgUmVmUHRyPE1pY3JvRGF0YUl0ZW1M
aXN0PiBsaXN0ID0gTWljcm9EYXRhSXRlbUxpc3Q6OmNyZWF0ZSh0aGlzLCB0eXBlTmFtZXMpOwot
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKLSAgICByZXR1cm4gbGlz
dC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPm5vZGVMaXN0cygpLmVu
c3VyZUNhY2hlT2ZUeXBlPE1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGU+KHRoaXMsIE1pY3JvRGF0YUl0
ZW1MaXN0VHlwZSktPmNyZWF0ZUxpc3RJZk5lZWRlZCh0aGlzLCBsb2NhbFR5cGVOYW1lcyk7CiB9
Ci0KLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZUNhY2hlZE1pY3JvRGF0YUl0ZW1MaXN0KE1pY3JvRGF0
YUl0ZW1MaXN0KiBsaXN0LCBjb25zdCBTdHJpbmcmIHR5cGVOYW1lcykKLXsKLSAgICBBU1NFUlQo
cmFyZURhdGEoKSk7Ci0gICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLQotICAg
IE5vZGVMaXN0c05vZGVEYXRhKiBkYXRhID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7Ci0KLSAg
ICBTdHJpbmcgbG9jYWxUeXBlTmFtZXMgPSB0eXBlTmFtZXMuaXNOdWxsKCkgPyBTdHJpbmcoImh0
dHA6Ly93ZWJraXQub3JnL21pY3JvZGF0YS91bmRlZmluZWRJdGVtVHlwZSIpIDogdHlwZU5hbWVz
OwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX21pY3JvRGF0YUl0ZW1M
aXN0Q2FjaGUuZ2V0KGxvY2FsVHlwZU5hbWVzKSk7Ci0gICAgZGF0YS0+bV9taWNyb0RhdGFJdGVt
TGlzdENhY2hlLnJlbW92ZShsb2NhbFR5cGVOYW1lcyk7Ci19CiAjZW5kaWYKIAogSW50U2l6ZSBE
b2N1bWVudDo6dmlld3BvcnRTaXplKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9N
aWNyb0RhdGFJdGVtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01p
Y3JvRGF0YUl0ZW1MaXN0LmNwcAkocmV2aXNpb24gMTIwNDk2KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL01pY3JvRGF0YUl0ZW1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjEgKzMyLDMy
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIE1pY3JvRGF0YUl0
ZW1MaXN0OjpNaWNyb0RhdGFJdGVtTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25z
dCBTdHJpbmcmIHR5cGVOYW1lcykKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5v
ZGUpCisgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlLCBSb290ZWRBdERvY3Vt
ZW50KQogICAgICwgbV90eXBlTmFtZXModHlwZU5hbWVzLCBub2RlKCktPmRvY3VtZW50KCktPmlu
UXVpcmtzTW9kZSgpKQogICAgICwgbV9vcmlnaW5hbFR5cGVOYW1lcyh0eXBlTmFtZXMpCiB7Cisg
ICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQog
CiBNaWNyb0RhdGFJdGVtTGlzdDo6fk1pY3JvRGF0YUl0ZW1MaXN0KCkKIHsKLSAgICByb290Tm9k
ZSgpLT5kb2N1bWVudCgpLT5yZW1vdmVDYWNoZWRNaWNyb0RhdGFJdGVtTGlzdCh0aGlzLCBtX29y
aWdpbmFsVHlwZU5hbWVzKTsKKyAgICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzID0gbV9u
b2RlLT5ub2RlTGlzdHMoKTsKKyAgICBBU1NFUlQobm9kZUxpc3RzKTsKKyAgICBNaWNyb0RhdGFJ
dGVtTGlzdENhY2hlKiBjYWNoZSA9IG5vZGVMaXN0cy0+Y2FjaGVPZlR5cGU8TWljcm9EYXRhSXRl
bUxpc3RDYWNoZT4oTWljcm9EYXRhSXRlbUxpc3RUeXBlKTsKKyAgICBBU1NFUlQodGhpcyA9PSBj
YWNoZS0+bV9taWNyb0RhdGFJdGVtTGlzdENhY2hlLmdldChtX29yaWdpbmFsVHlwZU5hbWVzKSk7
CisgICAgaWYgKGNhY2hlLT5tX21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUuc2l6ZSgpICE9IDEpCisg
ICAgICAgIGNhY2hlLT5tX21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUucmVtb3ZlKG1fb3JpZ2luYWxU
eXBlTmFtZXMpOworICAgIGVsc2UKKyAgICAgICAgbm9kZUxpc3RzLT5yZW1vdmVDYWNoZU9mVHlw
ZShtX25vZGUuZ2V0KCksIE1pY3JvRGF0YUl0ZW1MaXN0VHlwZSk7CisKKyAgICBkb2N1bWVudCgp
LT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKIH0KIAogYm9vbCBNaWNy
b0RhdGFJdGVtTGlzdDo6bm9kZU1hdGNoZXMoRWxlbWVudCogdGVzdE5vZGUpIGNvbnN0CkBAIC02
NCw2ICs3NSwyMCBAQAogICAgIHJldHVybiB0ZXN0RWxlbWVudC0+aXRlbVR5cGUoKS0+dG9rZW5z
KCkuY29udGFpbnNBbGwobV90eXBlTmFtZXMpOwogfQogCitQYXNzUmVmUHRyPE1pY3JvRGF0YUl0
ZW1MaXN0PiBNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjpjcmVhdGVMaXN0SWZOZWVkZWQoTm9kZSog
bm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBN
aWNyb0RhdGFJdGVtTGlzdCo+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9taWNyb0RhdGFJdGVtTGlz
dENhY2hlLmFkZChjbGFzc05hbWVzLCAwKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICBSZWZQdHI8TWlj
cm9EYXRhSXRlbUxpc3Q+IGxpc3QgPSBNaWNyb0RhdGFJdGVtTGlzdDo6Y3JlYXRlKG5vZGUsIGNs
YXNzTmFtZXMpOworICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAg
ICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgTWljcm9EYXRhSXRlbUxpc3RDYWNo
ZTo6aW52YWxpZGF0ZUNhY2hlKEludmFsaWRhdGlvblR5cGUpCit7IH0KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1JQ1JPREFUQSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9OYW1lTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMjA0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTmFtZU5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
Ik5vZGVSYXJlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTM5LDcgKzQwLDE0IEBACiAKIE5hbWVOb2RlTGlzdDo6fk5hbWVOb2Rl
TGlzdCgpCiB7Ci0gICAgbm9kZSgpLT5yZW1vdmVDYWNoZWROYW1lTm9kZUxpc3QodGhpcywgbV9u
b2RlTmFtZSk7CisgICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cyA9IG5vZGUoKS0+bm9k
ZUxpc3RzKCk7CisgICAgQVNTRVJUKG5vZGVMaXN0cyk7CisgICAgTmFtZU5vZGVMaXN0Q2FjaGUq
IGNhY2hlID0gbm9kZUxpc3RzLT5jYWNoZU9mVHlwZTxOYW1lTm9kZUxpc3RDYWNoZT4oTmFtZU5v
ZGVMaXN0VHlwZSk7CisgICAgQVNTRVJUKHRoaXMgPT0gY2FjaGUtPm1fbmFtZU5vZGVMaXN0Q2Fj
aGUuZ2V0KG1fbm9kZU5hbWUpKTsKKyAgICBpZiAoY2FjaGUtPm1fbmFtZU5vZGVMaXN0Q2FjaGUu
c2l6ZSgpICE9IDEpCisgICAgICAgIGNhY2hlLT5tX25hbWVOb2RlTGlzdENhY2hlLnJlbW92ZSht
X25vZGVOYW1lKTsKKyAgICBlbHNlCisgICAgICAgIG5vZGVMaXN0cy0+cmVtb3ZlQ2FjaGVPZlR5
cGUobm9kZSgpLCBOYW1lTm9kZUxpc3RUeXBlKTsKIH0gCiAKIGJvb2wgTmFtZU5vZGVMaXN0Ojpu
b2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKQEAgLTQ3LDQgKzU1LDI0IEBACiAg
ICAgcmV0dXJuIHRlc3ROb2RlLT5nZXROYW1lQXR0cmlidXRlKCkgPT0gbV9ub2RlTmFtZTsKIH0K
IAorUGFzc1JlZlB0cjxOYW1lTm9kZUxpc3Q+IE5hbWVOb2RlTGlzdENhY2hlOjpjcmVhdGVMaXN0
SWZOZWVkZWQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEhhc2hNYXA8
U3RyaW5nLCBOYW1lTm9kZUxpc3QqPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbmFtZU5vZGVMaXN0
Q2FjaGUuYWRkKG5hbWUsIDApOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
IHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIFJlZlB0cjxOYW1lTm9kZUxp
c3Q+IGxpc3QgPSBOYW1lTm9kZUxpc3Q6OmNyZWF0ZShub2RlLCBuYW1lKTsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgp
OworfQorCit2b2lkIE5hbWVOb2RlTGlzdENhY2hlOjppbnZhbGlkYXRlQ2FjaGUoSW52YWxpZGF0
aW9uVHlwZSkKK3sKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBOYW1lTm9kZUxpc3QqPjo6
aXRlcmF0b3IgSXRlcmF0b3I7CisKKyAgICBJdGVyYXRvciBuYW1lQ2FjaGVFbmQgPSBtX25hbWVO
b2RlTGlzdENhY2hlLmVuZCgpOworICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX25hbWVOb2RlTGlz
dENhY2hlLmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNl
Y29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEyMDQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNDYgKzQ5
LDYzIEBACiBjbGFzcyBUcmVlU2NvcGU7CiAKIHN0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YSB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZUxpc3RzTm9kZURhdGEpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEhhc2hTZXQ8RHluYW1pY1N1YnRyZWVO
b2RlTGlzdCo+IE5vZGVMaXN0U2V0OwotICAgIE5vZGVMaXN0U2V0IG1fbGlzdHNJbnZhbGlkYXRl
ZEF0RG9jdW1lbnQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBjYWNoZU9mVHlw
ZShEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IG1fY2FjaGVMaXN0LnNpemUoKTsgaSA+IDA7IC0taSkgeworICAgICAg
ICAgICAgaWYgKG1fY2FjaGVMaXN0W2kgLSAxXS0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX2NhY2hlTGlzdFtpIC0gMV0uZ2V0KCkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIENsYXNzTm9kZUxpc3QqPiBDbGFzc05vZGVMaXN0Q2FjaGU7Ci0gICAgQ2xhc3NO
b2RlTGlzdENhY2hlIG1fY2xhc3NOb2RlTGlzdENhY2hlOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgVCogZW5zdXJlQ2FjaGVPZlR5cGUoTm9kZSogbm9kZSwgRHluYW1pY1N1YnRyZWVO
b2RlTGlzdFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIGlmIChUKiBjYWNoZSA9IGNhY2hlT2ZU
eXBlPFQ+KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlOworICAgICAgICAvLyBGSVhN
RTogQ29uc2lkZXIgaW5zZXJ0aW9uIHNvcnQuCisgICAgICAgIG1fY2FjaGVMaXN0LmFwcGVuZChU
OjpjcmVhdGUoKSk7CisgICAgICAgIGlmIChUcmVlU2NvcGUqIHRyZWVTY29wZSA9IG5vZGUtPnRy
ZWVTY29wZSgpKQorICAgICAgICAgICAgdHJlZVNjb3BlLT5hZGROb2RlTGlzdENhY2hlKCk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9jYWNoZUxpc3QubGFzdCgpLmdldCgpKTsK
KyAgICB9CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBOYW1lTm9kZUxpc3QqPiBOYW1l
Tm9kZUxpc3RDYWNoZTsKLSAgICBOYW1lTm9kZUxpc3RDYWNoZSBtX25hbWVOb2RlTGlzdENhY2hl
OwotIAotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFRhZ05vZGVMaXN0Kj4gVGFn
Tm9kZUxpc3RDYWNoZTsKLSAgICBUYWdOb2RlTGlzdENhY2hlIG1fdGFnTm9kZUxpc3RDYWNoZTsK
KyAgICB2b2lkIHJlbW92ZUNhY2hlT2ZUeXBlKE5vZGUqIG5vZGUsIER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3RUeXBlIHR5cGUpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9jYWNoZUxp
c3Quc2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAobV9jYWNoZUxpc3RbaSAt
IDFdLT50eXBlKCkgPT0gdHlwZSkgeworICAgICAgICAgICAgICAgIG1fY2FjaGVMaXN0LnJlbW92
ZShpIC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKFRyZWVTY29wZSogdHJlZVNjb3BlID0gbm9k
ZS0+dHJlZVNjb3BlKCkpCisgICAgICAgICAgICAgICAgICAgIHRyZWVTY29wZS0+cmVtb3ZlTm9k
ZUxpc3RDYWNoZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVmUHRyPFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsPiwgVGFn
Tm9kZUxpc3QqPiBUYWdOb2RlTGlzdENhY2hlTlM7Ci0gICAgVGFnTm9kZUxpc3RDYWNoZU5TIG1f
dGFnTm9kZUxpc3RDYWNoZU5TOworICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlc09uQ2hpbGROb2Rl
Q2hhbmdlKCkKKyAgICB7CisgICAgICAgIGludmFsaWRhdGVDYWNoZXNPbkNoaWxkTm9kZUNoYW5n
ZSgpOworICAgIH0KIAotI2lmIEVOQUJMRShNSUNST0RBVEEpCi0gICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgTWljcm9EYXRhSXRlbUxpc3QqPiBNaWNyb0RhdGFJdGVtTGlzdENhY2hlOwotICAg
IE1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUgbV9taWNyb0RhdGFJdGVtTGlzdENhY2hlOwotI2VuZGlm
Ci0KLSAgICBMYWJlbHNOb2RlTGlzdCogbV9sYWJlbHNOb2RlTGlzdENhY2hlOwotCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgUmFkaW9Ob2RlTGlzdCo+IFJhZGlvTm9kZUxpc3RDYWNoZTsK
LSAgICBSYWRpb05vZGVMaXN0Q2FjaGUgbV9yYWRpb05vZGVMaXN0Q2FjaGU7Ci0KLSAgICBzdGF0
aWMgUGFzc093blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gY3JlYXRlKCkKKyAgICB2b2lkIGludmFs
aWRhdGVDYWNoZXNPbkF0dHJpYnV0ZUNoYW5nZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG1f
Y2FjaGVMaXN0LnNpemUoKTsgaSA+IDA7IC0taSkKKyAgICAgICAgICAgIG1fY2FjaGVMaXN0W2kg
LSAxXS0+aW52YWxpZGF0ZUNhY2hlKER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RDYWNoZTo6SW52YWxp
ZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKTsKICAgICB9CisgICAgCisgICAgdm9pZCBpbnZhbGlkYXRl
QWxsQ2FjaGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2NhY2hlTGlzdC5z
aXplKCk7IGkgPiAwOyAtLWkpCisgICAgICAgICAgICBtX2NhY2hlTGlzdFtpIC0gMV0tPmludmFs
aWRhdGVDYWNoZShEeW5hbWljU3VidHJlZU5vZGVMaXN0Q2FjaGU6OkludmFsaWRhdGVPbkNoaWxk
Tm9kZUNoYW5nZSk7ICAgICAgICAKKyAgICB9CiAKLSAgICB2b2lkIGludmFsaWRhdGVDYWNoZXMo
KTsKLSAgICB2b2lkIGludmFsaWRhdGVDYWNoZXNGb3JEb2N1bWVudCgpOwotICAgIHZvaWQgaW52
YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlTGlzdC5pc0VtcHR5KCk7IH0KIAotICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0OwotCiBwcml2YXRlOgotICAgIE5vZGVMaXN0c05vZGVEYXRhKCkgOiBtX2xh
YmVsc05vZGVMaXN0Q2FjaGUoMCkge30KKyAgICBWZWN0b3I8T3duUHRyPER5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3RDYWNoZT4gPiBtX2NhY2hlTGlzdDsKIH07CiAKIGNsYXNzIE5vZGVSYXJlRGF0YSB7
CkBAIC0xMjYsMTYgKzE0Myw5IEBACiAKICAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJlZVNjb3BlOyB9CiAgICAgdm9pZCBzZXRUcmVlU2NvcGUoVHJlZVNjb3Bl
KiB0cmVlU2NvcGUpIHsgbV90cmVlU2NvcGUgPSB0cmVlU2NvcGU7IH0KLSAgICAKLSAgICB2b2lk
IGNsZWFyTm9kZUxpc3RzKCkgeyBtX25vZGVMaXN0cy5jbGVhcigpOyB9Ci0gICAgdm9pZCBzZXRO
b2RlTGlzdHMoUGFzc093blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbGlzdHMpIHsgbV9ub2RlTGlz
dHMgPSBsaXN0czsgfQotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMoKSBjb25zdCB7
IHJldHVybiBtX25vZGVMaXN0cy5nZXQoKTsgfQotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBlbnN1
cmVOb2RlTGlzdHMoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghbV9ub2RlTGlzdHMp
Ci0gICAgICAgICAgICBjcmVhdGVOb2RlTGlzdHMobm9kZSk7Ci0gICAgICAgIHJldHVybiBtX25v
ZGVMaXN0cy5nZXQoKTsKLSAgICB9CisKKyAgICBjb25zdCBOb2RlTGlzdHNOb2RlRGF0YSYgbm9k
ZUxpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlTGlzdHM7IH0KKyAgICBOb2RlTGlzdHNOb2Rl
RGF0YSYgbm9kZUxpc3RzKCkgeyByZXR1cm4gbV9ub2RlTGlzdHM7IH0KICAgICB2b2lkIGNsZWFy
Q2hpbGROb2RlTGlzdENhY2hlKCk7CiAKICAgICBDaGlsZE5vZGVMaXN0KiBjaGlsZE5vZGVMaXN0
KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZE5vZGVMaXN0OyB9CkBAIC0yNjMsMTAgKzI3Myw4IEBA
CiAgICAgdm9pZCBzZXROZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaChi
b29sIG5lZWRzKSB7IG1fbmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2gg
PSBuZWVkczsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgY3JlYXRlTm9kZUxpc3RzKE5vZGUqKTsK
LQogICAgIFRyZWVTY29wZSogbV90cmVlU2NvcGU7Ci0gICAgT3duUHRyPE5vZGVMaXN0c05vZGVE
YXRhPiBtX25vZGVMaXN0czsKKyAgICBOb2RlTGlzdHNOb2RlRGF0YSBtX25vZGVMaXN0czsKICAg
ICBDaGlsZE5vZGVMaXN0KiBtX2NoaWxkTm9kZUxpc3Q7CiAgICAgT3duUHRyPEV2ZW50VGFyZ2V0
RGF0YT4gbV9ldmVudFRhcmdldERhdGE7CiAgICAgc2hvcnQgbV90YWJJbmRleDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1RhZ05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIwNDk2KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1RhZ05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBA
QAogI2luY2x1ZGUgIlRhZ05vZGVMaXN0LmgiCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5j
bHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMTAgKzQwLDI2IEBACiAKIFRhZ05vZGVMaXN0Ojp+VGFn
Tm9kZUxpc3QoKQogewotICAgIGlmIChtX25hbWVzcGFjZVVSSSA9PSBzdGFyQXRvbSkKLSAgICAg
ICAgbm9kZSgpLT5yZW1vdmVDYWNoZWRUYWdOb2RlTGlzdCh0aGlzLCBtX2xvY2FsTmFtZSk7Ci0g
ICAgZWxzZQotICAgICAgICBub2RlKCktPnJlbW92ZUNhY2hlZFRhZ05vZGVMaXN0KHRoaXMsIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIG1fbG9jYWxOYW1lLCBtX25hbWVzcGFjZVVSSSkpOworICAg
IE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMgPSBub2RlKCktPm5vZGVMaXN0cygpOworICAg
IEFTU0VSVChub2RlTGlzdHMpOworICAgIFRhZ05vZGVMaXN0Q2FjaGUqIGNhY2hlID0gbm9kZUxp
c3RzLT5jYWNoZU9mVHlwZTxUYWdOb2RlTGlzdENhY2hlPihUYWdOb2RlTGlzdFR5cGUpOworCisg
ICAgaWYgKG1fbmFtZXNwYWNlVVJJID09IHN0YXJBdG9tKSB7CisgICAgICAgIEFTU0VSVCh0aGlz
ID09IGNhY2hlLT5tX3RhZ05vZGVMaXN0Q2FjaGUuZ2V0KG1fbG9jYWxOYW1lKSk7CisgICAgICAg
IGlmIChjYWNoZS0+bV90YWdOb2RlTGlzdENhY2hlLnNpemUoKSAhPSAxIHx8IGNhY2hlLT5tX3Rh
Z05vZGVMaXN0Q2FjaGVOUy5zaXplKCkpIHsKKyAgICAgICAgICAgIGNhY2hlLT5tX3RhZ05vZGVM
aXN0Q2FjaGUucmVtb3ZlKG1fbG9jYWxOYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUgbmFtZSA9IFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIG1fbG9jYWxOYW1lLCBtX25hbWVzcGFjZVVSSSk7CisgICAg
ICAgIEFTU0VSVCh0aGlzID09IGNhY2hlLT5tX3RhZ05vZGVMaXN0Q2FjaGVOUy5nZXQobmFtZSkp
OworICAgICAgICBpZiAoY2FjaGUtPm1fdGFnTm9kZUxpc3RDYWNoZU5TLnNpemUoKSAhPSAxIHx8
IGNhY2hlLT5tX3RhZ05vZGVMaXN0Q2FjaGUuc2l6ZSgpKSB7CisgICAgICAgICAgICBjYWNoZS0+
bV90YWdOb2RlTGlzdENhY2hlTlMucmVtb3ZlKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgbm9kZUxpc3RzLT5yZW1vdmVDYWNoZU9mVHlwZShub2Rl
KCksIFRhZ05vZGVMaXN0VHlwZSk7CiB9CiAKIGJvb2wgVGFnTm9kZUxpc3Q6Om5vZGVNYXRjaGVz
KEVsZW1lbnQqIHRlc3ROb2RlKSBjb25zdApAQCAtNzIsNCArODksNDEgQEAKICAgICByZXR1cm4g
bV9uYW1lc3BhY2VVUkkgPT0gc3RhckF0b20gfHwgbV9uYW1lc3BhY2VVUkkgPT0gdGVzdE5vZGUt
Pm5hbWVzcGFjZVVSSSgpOwogfQogCitQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PiBUYWdOb2RlTGlz
dENhY2hlOjpjcmVhdGVMaXN0SWZOZWVkZWQoTm9kZSogbm9kZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQoreworICAgIGlm
IChuYW1lc3BhY2VVUkkgPT0gc3RhckF0b20pIHsKKyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJp
bmcsIFRhZ05vZGVMaXN0Kj46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3RhZ05vZGVMaXN0Q2FjaGUu
YWRkKGxvY2FsTmFtZSwgMCk7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIFJlZlB0cjxU
YWdOb2RlTGlzdD4gbGlzdCA9IG5vZGUtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkgPyBI
VE1MVGFnTm9kZUxpc3Q6OmNyZWF0ZShub2RlLCBuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkKKyAg
ICAgICAgICAgIDogVGFnTm9kZUxpc3Q6OmNyZWF0ZShub2RlLCBuYW1lc3BhY2VVUkksIGxvY2Fs
TmFtZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKKyAg
ICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgIH0KKworICAgIEhhc2hNYXA8UXVhbGlm
aWVkTmFtZSwgVGFnTm9kZUxpc3QqPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fdGFnTm9kZUxpc3RD
YWNoZU5TLmFkZChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVS
SSksIDApOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKKyAgICBSZWZQdHI8VGFnTm9kZUxpc3Q+IGxpc3QgPSBUYWdO
b2RlTGlzdDo6Y3JlYXRlKG5vZGUsIG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkgPyBudWxsQXRvbSA6
IG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9
IGxpc3QuZ2V0KCk7CisgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworfQorCit2b2lkIFRhZ05v
ZGVMaXN0Q2FjaGU6OmludmFsaWRhdGVDYWNoZShJbnZhbGlkYXRpb25UeXBlIHR5cGUpCit7Cisg
ICAgaWYgKHR5cGUgPT0gSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKQorICAgICAgICByZXR1
cm47CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBUYWdOb2RlTGlzdCo+Ojpp
dGVyYXRvciBJdGVyYXRvcjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UXVhbGlmaWVkTmFtZSwgVGFn
Tm9kZUxpc3QqPjo6aXRlcmF0b3IgSXRlcmF0b3JOUzsKKworICAgIEl0ZXJhdG9yIHRhZ0NhY2hl
RW5kID0gbV90YWdOb2RlTGlzdENhY2hlLmVuZCgpOworICAgIGZvciAoSXRlcmF0b3IgaXQgPSBt
X3RhZ05vZGVMaXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVFbmQ7ICsraXQpCisgICAg
ICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOworCisgICAgSXRlcmF0b3JOUyB0YWdD
YWNoZUVuZE5TID0gbV90YWdOb2RlTGlzdENhY2hlTlMuZW5kKCk7CisgICAgZm9yIChJdGVyYXRv
ck5TIGl0ID0gbV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVFbmRO
UzsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEyMDQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgy
LDcgKzQ4Miw3IEBACiB2b2lkIE5vZGU6OmNsZWFyUmFyZURhdGEoKQogewogICAgIEFTU0VSVCho
YXNSYXJlRGF0YSgpKTsKLSAgICBpZiAodHJlZVNjb3BlKCkgJiYgcmFyZURhdGEoKS0+bm9kZUxp
c3RzKCkpCisgICAgaWYgKHRyZWVTY29wZSgpICYmICFyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKS5p
c0VtcHR5KCkpCiAgICAgICAgIHRyZWVTY29wZSgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CiAK
ICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQpAQCAtOTQwLDExICs5NDAsOCBAQAogCiB2
b2lkIE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgRWxlbWVudCogYXR0cmlidXRlT3duZXJFbGVt
ZW50KQogewotICAgIGlmIChoYXNSYXJlRGF0YSgpICYmIGlzQXR0cmlidXRlTm9kZSgpKSB7Ci0g
ICAgICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7Ci0gICAgICAgIEFTU0VSVCgh
ZGF0YS0+bm9kZUxpc3RzKCkpOwotICAgICAgICBkYXRhLT5jbGVhckNoaWxkTm9kZUxpc3RDYWNo
ZSgpOwotICAgIH0KKyAgICBpZiAoaGFzUmFyZURhdGEoKSAmJiBpc0F0dHJpYnV0ZU5vZGUoKSkK
KyAgICAgICAgcmFyZURhdGEoKS0+Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKTsKIAogICAgIC8v
IE1vZGlmaWNhdGlvbnMgdG8gYXR0cmlidXRlcyB0aGF0IGFyZSBub3QgYXNzb2NpYXRlZCB3aXRo
IGFuIEVsZW1lbnQgY2FuJ3QgaW52YWxpZGF0ZSBOb2RlTGlzdCBjYWNoZXMuCiAgICAgaWYgKCFh
dHRyaWJ1dGVPd25lckVsZW1lbnQpCkBAIC05NjcsMjMgKzk2NCwxNSBAQAogICAgICAgICAmJiAo
YXR0ck5hbWUgIT0gaWRBdHRyIHx8ICFhdHRyaWJ1dGVPd25lckVsZW1lbnQtPmlzRm9ybUNvbnRy
b2xFbGVtZW50KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZG9jdW1lbnQoKS0+aGFz
UmFyZURhdGEoKSkgewotICAgICAgICBpZiAoTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cyA9
IGRvY3VtZW50KCktPnJhcmVEYXRhKCktPm5vZGVMaXN0cygpKQotICAgICAgICAgICAgbm9kZUxp
c3RzLT5pbnZhbGlkYXRlQ2FjaGVzRm9yRG9jdW1lbnQoKTsKLSAgICB9CisgICAgZG9jdW1lbnQo
KS0+aW52YWxpZGF0ZUR5bmFtaWNTdWJ0cmVlTm9kZUxpc3RDYWNoZXMoKTsKIAogICAgIGlmICgh
dHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkp
IHsKICAgICAgICAgQVNTRVJUKHRoaXMgPT0gbm9kZSB8fCAhbm9kZS0+aXNBdHRyaWJ1dGVOb2Rl
KCkpOwotICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKLSAg
ICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0
cmlidXRlcygpOworICAgICAgICBpZiAobm9kZS0+aGFzUmFyZURhdGEoKSkKKyAgICAgICAgICAg
IG5vZGUtPnJhcmVEYXRhKCktPm5vZGVMaXN0cygpLmludmFsaWRhdGVDYWNoZXNPbkNoaWxkTm9k
ZUNoYW5nZSgpOwogICAgIH0KIH0KIApAQCAtOTkyLDc0ICs5ODEsMjMgQEAKICAgICBpZiAoaGFz
UmFyZURhdGEoKSkKICAgICAgICAgcmFyZURhdGEoKS0+Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUo
KTsKIAotICAgIGlmIChkb2N1bWVudCgpLT5oYXNSYXJlRGF0YSgpKSB7Ci0gICAgICAgIGlmIChO
b2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzID0gZG9jdW1lbnQoKS0+cmFyZURhdGEoKS0+bm9k
ZUxpc3RzKCkpCi0gICAgICAgICAgICBub2RlTGlzdHMtPmludmFsaWRhdGVDYWNoZXNGb3JEb2N1
bWVudCgpOwotICAgIH0KKyAgICBkb2N1bWVudCgpLT5pbnZhbGlkYXRlRHluYW1pY1N1YnRyZWVO
b2RlTGlzdENhY2hlcygpOwogCiAgICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNo
ZXMoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7
IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5oYXNSYXJl
RGF0YSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIE5vZGVSYXJlRGF0YSogZGF0
YSA9IG5vZGUtPnJhcmVEYXRhKCk7Ci0gICAgICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxp
ZGF0ZUNhY2hlcygpOworICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpCisg
ICAgICAgICAgICBub2RlLT5yYXJlRGF0YSgpLT5ub2RlTGlzdHMoKS5pbnZhbGlkYXRlQ2FjaGVz
T25BdHRyaWJ1dGVDaGFuZ2UoKTsKICAgICB9CiB9CiAKLXZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVk
Q2xhc3NOb2RlTGlzdChDbGFzc05vZGVMaXN0KiBsaXN0LCBjb25zdCBTdHJpbmcmIGNsYXNzTmFt
ZSkKK05vZGVMaXN0c05vZGVEYXRhKiBOb2RlOjpub2RlTGlzdHMoKQogewogICAgIEFTU0VSVChy
YXJlRGF0YSgpKTsKLSAgICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpOwotCi0gICAg
Tm9kZUxpc3RzTm9kZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKTsKLSAgICBB
U1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QgPT0gZGF0YS0+bV9jbGFzc05vZGVMaXN0Q2FjaGUuZ2V0
KGNsYXNzTmFtZSkpOwotICAgIGRhdGEtPm1fY2xhc3NOb2RlTGlzdENhY2hlLnJlbW92ZShjbGFz
c05hbWUpOworICAgIHJldHVybiAmcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7CiB9CiAKLXZvaWQg
Tm9kZTo6cmVtb3ZlQ2FjaGVkTmFtZU5vZGVMaXN0KE5hbWVOb2RlTGlzdCogbGlzdCwgY29uc3Qg
U3RyaW5nJiBub2RlTmFtZSkKLXsKLSAgICBBU1NFUlQocmFyZURhdGEoKSk7Ci0gICAgQVNTRVJU
KHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLQotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBkYXRh
ID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0
ID09IGRhdGEtPm1fbmFtZU5vZGVMaXN0Q2FjaGUuZ2V0KG5vZGVOYW1lKSk7Ci0gICAgZGF0YS0+
bV9uYW1lTm9kZUxpc3RDYWNoZS5yZW1vdmUobm9kZU5hbWUpOwotfQotCi12b2lkIE5vZGU6OnJl
bW92ZUNhY2hlZFRhZ05vZGVMaXN0KFRhZ05vZGVMaXN0KiBsaXN0LCBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHJhcmVEYXRhKCkpOwotICAgIEFTU0VSVChyYXJlRGF0
YSgpLT5ub2RlTGlzdHMoKSk7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVE
YXRhKCktPm5vZGVMaXN0cygpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRh
LT5tX3RhZ05vZGVMaXN0Q2FjaGUuZ2V0KG5hbWUuaW1wbCgpKSk7Ci0gICAgZGF0YS0+bV90YWdO
b2RlTGlzdENhY2hlLnJlbW92ZShuYW1lLmltcGwoKSk7Ci19Ci0KLXZvaWQgTm9kZTo6cmVtb3Zl
Q2FjaGVkVGFnTm9kZUxpc3QoVGFnTm9kZUxpc3QqIGxpc3QsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpCi17Ci0gICAgQVNTRVJUKHJhcmVEYXRhKCkpOwotICAgIEFTU0VSVChyYXJlRGF0YSgp
LT5ub2RlTGlzdHMoKSk7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRh
KCktPm5vZGVMaXN0cygpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5t
X3RhZ05vZGVMaXN0Q2FjaGVOUy5nZXQobmFtZS5pbXBsKCkpKTsKLSAgICBkYXRhLT5tX3RhZ05v
ZGVMaXN0Q2FjaGVOUy5yZW1vdmUobmFtZS5pbXBsKCkpOwotfQotCi12b2lkIE5vZGU6OnJlbW92
ZUNhY2hlZExhYmVsc05vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QpCi17Ci0g
ICAgQVNTRVJUKHJhcmVEYXRhKCkpOwotICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMo
KSk7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0
cygpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX2xhYmVsc05vZGVM
aXN0Q2FjaGUpOwotICAgIGRhdGEtPm1fbGFiZWxzTm9kZUxpc3RDYWNoZSA9IDA7Ci19Ci0KIHZv
aWQgTm9kZTo6cmVtb3ZlQ2FjaGVkQ2hpbGROb2RlTGlzdCgpCiB7CiAgICAgQVNTRVJUKHJhcmVE
YXRhKCkpOwpAQCAtMTU5Miw2NyArMTUzMCwzMiBAQAogCiAvLyBGSVhNRTogRW5kIG9mIG9idmlv
dXNseSBtaXNwbGFjZWQgSFRNTCBlZGl0aW5nIGZ1bmN0aW9ucy4gIFRyeSB0byBtb3ZlIHRoZXNl
IG91dCBvZiBOb2RlLgogCi1QYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5
VGFnTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKK1Bhc3NSZWZQdHI8UmFkaW9O
b2RlTGlzdD4gTm9kZTo6cmFkaW9Ob2RlTGlzdChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7
Ci0gICAgaWYgKGxvY2FsTmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgQVNT
RVJUKGhhc1RhZ05hbWUoZm9ybVRhZykgfHwgaGFzVGFnTmFtZShmaWVsZHNldFRhZykpOworICAg
IHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5ub2RlTGlzdHMoKS5lbnN1cmVDYWNoZU9mVHlwZTxS
YWRpb05vZGVMaXN0Q2FjaGU+KHRoaXMsIFJhZGlvTm9kZUxpc3RUeXBlKS0+Y3JlYXRlTGlzdElm
TmVlZGVkKHRvSFRNTEVsZW1lbnQodGhpcyksIG5hbWUpOworfQogCi0gICAgQXRvbWljU3RyaW5n
IGxvY2FsTmFtZUF0b20gPSBsb2NhbE5hbWU7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YTo6VGFn
Tm9kZUxpc3RDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGVuc3VyZVJhcmVEYXRhKCktPmVuc3Vy
ZU5vZGVMaXN0cyh0aGlzKS0+bV90YWdOb2RlTGlzdENhY2hlLmFkZChsb2NhbE5hbWVBdG9tLCAw
KTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0
cjxUYWdOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotCi0gICAgUmVmUHRyPFRh
Z05vZGVMaXN0PiBsaXN0OwotICAgIGlmIChkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQot
ICAgICAgICBsaXN0ID0gSFRNTFRhZ05vZGVMaXN0OjpjcmVhdGUodGhpcywgc3RhckF0b20sIGxv
Y2FsTmFtZUF0b20pOwotICAgIGVsc2UKLSAgICAgICAgbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVh
dGUodGhpcywgc3RhckF0b20sIGxvY2FsTmFtZUF0b20pOwotICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gbGlzdC5nZXQoKTsKLSAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7ICAgCitQYXNz
UmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSkKK3sKKyAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhz
dGFyQXRvbSwgbG9jYWxOYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0
RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCiB7CiAgICAgaWYgKGxvY2FsTmFtZS5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobmFtZXNwYWNlVVJJID09IHN0YXJBdG9t
KQotICAgICAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWUobG9jYWxOYW1lKTsKLQotICAg
IEF0b21pY1N0cmluZyBsb2NhbE5hbWVBdG9tID0gbG9jYWxOYW1lOwotCi0gICAgTm9kZUxpc3Rz
Tm9kZURhdGE6OlRhZ05vZGVMaXN0Q2FjaGVOUzo6QWRkUmVzdWx0IHJlc3VsdAotICAgICAgICA9
IGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+bV90YWdOb2RlTGlzdENh
Y2hlTlMuYWRkKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZUF0b20sIG5hbWVzcGFj
ZVVSSSkuaW1wbCgpLCAwKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwot
Ci0gICAgUmVmUHRyPFRhZ05vZGVMaXN0PiBsaXN0ID0gVGFnTm9kZUxpc3Q6OmNyZWF0ZSh0aGlz
LCBuYW1lc3BhY2VVUkkuaXNFbXB0eSgpID8gbnVsbEF0b20gOiBuYW1lc3BhY2VVUkksIGxvY2Fs
TmFtZUF0b20pOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKLSAg
ICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPm5v
ZGVMaXN0cygpLmVuc3VyZUNhY2hlT2ZUeXBlPFRhZ05vZGVMaXN0Q2FjaGU+KHRoaXMsIFRhZ05v
ZGVMaXN0VHlwZSktPmNyZWF0ZUxpc3RJZk5lZWRlZCh0aGlzLCBuYW1lc3BhY2VVUkksIGxvY2Fs
TmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlOYW1l
KGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpCiB7Ci0gICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5h
bWVOb2RlTGlzdENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5z
dXJlTm9kZUxpc3RzKHRoaXMpLT5tX25hbWVOb2RlTGlzdENhY2hlLmFkZChlbGVtZW50TmFtZSwg
MCk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLQotICAgIFJlZlB0cjxOYW1l
Tm9kZUxpc3Q+IGxpc3QgPSBOYW1lTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzLCBlbGVtZW50TmFtZSk7
Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOwotICAgIHJldHVybiBs
aXN0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+bm9kZUxpc3RzKCku
ZW5zdXJlQ2FjaGVPZlR5cGU8TmFtZU5vZGVMaXN0Q2FjaGU+KHRoaXMsIE5hbWVOb2RlTGlzdFR5
cGUpLT5jcmVhdGVMaXN0SWZOZWVkZWQodGhpcywgZWxlbWVudE5hbWUpOwogfQogCiBQYXNzUmVm
UHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYg
Y2xhc3NOYW1lcykKIHsKLSAgICBOb2RlTGlzdHNOb2RlRGF0YTo6Q2xhc3NOb2RlTGlzdENhY2hl
OjpBZGRSZXN1bHQgcmVzdWx0Ci0gICAgICAgID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9k
ZUxpc3RzKHRoaXMpLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5hZGQoY2xhc3NOYW1lcywgMCk7Ci0g
ICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLQotICAgIFJlZlB0cjxDbGFzc05vZGVM
aXN0PiBsaXN0ID0gQ2xhc3NOb2RlTGlzdDo6Y3JlYXRlKHRoaXMsIGNsYXNzTmFtZXMpOwotICAg
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKLSAgICByZXR1cm4gbGlzdC5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPm5vZGVMaXN0cygpLmVuc3Vy
ZUNhY2hlT2ZUeXBlPENsYXNzTm9kZUxpc3RDYWNoZT4odGhpcywgQ2xhc3NOb2RlTGlzdFR5cGUp
LT5jcmVhdGVMaXN0SWZOZWVkZWQodGhpcywgY2xhc3NOYW1lcyk7CiB9CiAKIFBhc3NSZWZQdHI8
RWxlbWVudD4gTm9kZTo6cXVlcnlTZWxlY3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9y
cywgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yMzE0LDc0ICsyMjE3LDYgQEAKIAogLy8gLS0tLS0t
LS0KIAotdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcygpCi17Ci0gICAg
VGFnTm9kZUxpc3RDYWNoZTo6Y29uc3RfaXRlcmF0b3IgdGFnQ2FjaGVFbmQgPSBtX3RhZ05vZGVM
aXN0Q2FjaGUuZW5kKCk7Ci0gICAgZm9yIChUYWdOb2RlTGlzdENhY2hlOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZS5iZWdpbigpOyBpdCAhPSB0YWdDYWNoZUVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0gICAgVGFnTm9kZUxp
c3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciB0YWdDYWNoZU5TRW5kID0gbV90YWdOb2RlTGlzdENh
Y2hlTlMuZW5kKCk7Ci0gICAgZm9yIChUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVOU0VuZDsg
KytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0gICAgaW52YWxp
ZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsKLX0KLQotdm9pZCBOb2RlTGlzdHNO
b2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlc0ZvckRvY3VtZW50KCkKLXsKLSAgICBOb2RlTGlzdHNO
b2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fbGlzdHNJbnZhbGlkYXRlZEF0
RG9jdW1lbnQuZW5kKCk7Ci0gICAgZm9yIChOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6
Oml0ZXJhdG9yIGl0ID0gbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5pbnZhbGlkYXRlQ2FjaGUoKTsKLX0KLQotdm9p
ZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0
ZXMoKQotewotICAgIENsYXNzTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgY2xhc3NDYWNoZUVuZCA9
IG1fY2xhc3NOb2RlTGlzdENhY2hlLmVuZCgpOwotICAgIGZvciAoQ2xhc3NOb2RlTGlzdENhY2hl
OjppdGVyYXRvciBpdCA9IG1fY2xhc3NOb2RlTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IGNsYXNz
Q2FjaGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOwot
Ci0gICAgTmFtZU5vZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZU5v
ZGVMaXN0Q2FjaGUuZW5kKCk7Ci0gICAgZm9yIChOYW1lTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3Ig
aXQgPSBtX25hbWVOb2RlTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0gICAgaWYgKG1fbGFi
ZWxzTm9kZUxpc3RDYWNoZSkKLSAgICAgICAgbV9sYWJlbHNOb2RlTGlzdENhY2hlLT5pbnZhbGlk
YXRlQ2FjaGUoKTsKLQotI2lmIEVOQUJMRShNSUNST0RBVEEpCi0gICAgTWljcm9EYXRhSXRlbUxp
c3RDYWNoZTo6aXRlcmF0b3IgaXRlbUxpc3RDYWNoZUVuZCA9IG1fbWljcm9EYXRhSXRlbUxpc3RD
YWNoZS5lbmQoKTsKLSAgICBmb3IgKE1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0
ID0gbV9taWNyb0RhdGFJdGVtTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IGl0ZW1MaXN0Q2FjaGVF
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOwotI2VuZGlm
Ci0KLSAgICBSYWRpb05vZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yIHJhZGlvTm9kZUxpc3RDYWNoZUVu
ZCA9IG1fcmFkaW9Ob2RlTGlzdENhY2hlLmVuZCgpOwotICAgIGZvciAoUmFkaW9Ob2RlTGlzdENh
Y2hlOjppdGVyYXRvciBpdCA9IG1fcmFkaW9Ob2RlTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IHJh
ZGlvTm9kZUxpc3RDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0
ZUNhY2hlKCk7Ci19Ci0KLWJvb2wgTm9kZUxpc3RzTm9kZURhdGE6OmlzRW1wdHkoKSBjb25zdAot
ewotICAgIGlmICghbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV90YWdOb2RlTGlzdENhY2hlLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV90YWdOb2RlTGlzdENhY2hlTlMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NsYXNzTm9kZUxp
c3RDYWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fbmFt
ZU5vZGVMaXN0Q2FjaGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5B
QkxFKE1JQ1JPREFUQSkKLSAgICBpZiAoIW1fbWljcm9EYXRhSXRlbUxpc3RDYWNoZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0gICAgaWYgKG1fbGFiZWxzTm9k
ZUxpc3RDYWNoZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX3JhZGlvTm9k
ZUxpc3RDYWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCiB2b2lkIE5vZGU6OmdldFN1YnJlc291cmNlVVJMcyhMaXN0SGFzaFNldDxL
VVJMPiYgdXJscykgY29uc3QKIHsKICAgICBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJs
cyk7CkBAIC0yODc2LDQ1ICsyNzExLDEyIEBACiB9CiAjZW5kaWYKIAotdm9pZCBOb2RlUmFyZURh
dGE6OmNyZWF0ZU5vZGVMaXN0cyhOb2RlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlKTsKLSAg
ICBzZXROb2RlTGlzdHMoTm9kZUxpc3RzTm9kZURhdGE6OmNyZWF0ZSgpKTsKLSAgICBpZiAoVHJl
ZVNjb3BlKiB0cmVlU2NvcGUgPSBub2RlLT50cmVlU2NvcGUoKSkKLSAgICAgICAgdHJlZVNjb3Bl
LT5hZGROb2RlTGlzdENhY2hlKCk7Ci19Ci0KIHZvaWQgTm9kZVJhcmVEYXRhOjpjbGVhckNoaWxk
Tm9kZUxpc3RDYWNoZSgpCiB7CiAgICAgaWYgKG1fY2hpbGROb2RlTGlzdCkKICAgICAgICAgbV9j
aGlsZE5vZGVMaXN0LT5pbnZhbGlkYXRlQ2FjaGUoKTsKIH0KIAotUGFzc1JlZlB0cjxSYWRpb05v
ZGVMaXN0PiBOb2RlOjpyYWRpb05vZGVMaXN0KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKLXsK
LSAgICBBU1NFUlQoaGFzVGFnTmFtZShmb3JtVGFnKSB8fCBoYXNUYWdOYW1lKGZpZWxkc2V0VGFn
KSk7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzID0gZW5zdXJlUmFyZURhdGEo
KS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpOwotCi0gICAgTm9kZUxpc3RzTm9kZURhdGE6OlJhZGlv
Tm9kZUxpc3RDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG5vZGVMaXN0cy0+bV9yYWRpb05vZGVM
aXN0Q2FjaGUuYWRkKG5hbWUsIDApOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAg
ICAgIHJldHVybiBQYXNzUmVmUHRyPFJhZGlvTm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kKTsKLQotICAgIFJlZlB0cjxSYWRpb05vZGVMaXN0PiBsaXN0ID0gUmFkaW9Ob2RlTGlzdDo6
Y3JlYXRlKHRvRWxlbWVudCh0aGlzKSwgbmFtZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSBsaXN0LmdldCgpOwotICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBO
b2RlOjpyZW1vdmVDYWNoZWRSYWRpb05vZGVMaXN0KFJhZGlvTm9kZUxpc3QqIGxpc3QsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocmFyZURhdGEoKSk7Ci0gICAgQVNT
RVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLQotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBk
YXRhID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBs
aXN0ID09IGRhdGEtPm1fcmFkaW9Ob2RlTGlzdENhY2hlLmdldChuYW1lKSk7Ci0gICAgZGF0YS0+
bV9yYWRpb05vZGVMaXN0Q2FjaGUucmVtb3ZlKG5hbWUpOwotfQotCiAvLyBJdCdzIGltcG9ydGFu
dCBub3QgdG8gaW5saW5lIHJlbW92ZWRMYXN0UmVmLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8g
aW5saW5lIHRoZSBjb2RlIHRvCiAvLyBkZWxldGUgYSBOb2RlIGF0IGVhY2ggZGVyZWYgY2FsbCBz
aXRlLgogdm9pZCBOb2RlOjpyZW1vdmVkTGFzdFJlZigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vTmFtZU5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05hbWVO
b2RlTGlzdC5oCShyZXZpc2lvbiAxMjA0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZU5v
ZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI4ICsyNiw0NyBAQAogCiAjaW5jbHVkZSAi
RHluYW1pY05vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIC8vIE5v
ZGVMaXN0IHdoaWNoIGxpc3RzIGFsbCBOb2RlcyBpbiBhIEVsZW1lbnQgd2l0aCBhIGdpdmVuICJu
YW1lIiBhdHRyaWJ1dGUKLSAgICBjbGFzcyBOYW1lTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY1N1
YnRyZWVOb2RlTGlzdCB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxO
YW1lTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJp
bmcmIG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmFt
ZU5vZGVMaXN0KHJvb3ROb2RlLCBuYW1lKSk7Ci0gICAgICAgIH0KKy8vIE5vZGVMaXN0IHdoaWNo
IGxpc3RzIGFsbCBOb2RlcyBpbiBhIEVsZW1lbnQgd2l0aCBhIGdpdmVuICJuYW1lIiBhdHRyaWJ1
dGUKK2NsYXNzIE5hbWVOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljU3VidHJlZU5vZGVMaXN0IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxOYW1lTm9kZUxpc3Q+IGNyZWF0ZShQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE5hbWVOb2RlTGlzdChyb290Tm9kZSwgbmFtZSkpOworICAg
IH0KIAotICAgICAgICB2aXJ0dWFsIH5OYW1lTm9kZUxpc3QoKTsKKyAgICB2aXJ0dWFsIH5OYW1l
Tm9kZUxpc3QoKTsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIE5hbWVOb2RlTGlzdChQYXNzUmVm
UHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworcHJpdmF0ZToKKyAgICBO
YW1lTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7CiAKLSAgICAgICAg
QXRvbWljU3RyaW5nIG1fbm9kZU5hbWU7Ci0gICAgfTsKKyAgICBBdG9taWNTdHJpbmcgbV9ub2Rl
TmFtZTsKK307CiAKK2NsYXNzIE5hbWVOb2RlTGlzdENhY2hlIDogcHVibGljIER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3RDYWNoZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TmFtZU5v
ZGVMaXN0Q2FjaGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBOYW1lTm9kZUxpc3RD
YWNoZSk7IH0KKworICAgIFBhc3NSZWZQdHI8TmFtZU5vZGVMaXN0PiBjcmVhdGVMaXN0SWZOZWVk
ZWQoTm9kZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRh
dGVDYWNoZShJbnZhbGlkYXRpb25UeXBlKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgTmFtZU5vZGVMaXN0OworCisgICAgTmFtZU5vZGVMaXN0Q2FjaGUoKQorICAgICAg
ICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RDYWNoZShOYW1lTm9kZUxpc3RUeXBlKQorICAgIHsg
fQorCisgICAgSGFzaE1hcDxTdHJpbmcsIE5hbWVOb2RlTGlzdCo+IG1fbmFtZU5vZGVMaXN0Q2Fj
aGU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBOYW1lTm9kZUxp
c3RfaApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCShyZXZpc2lvbiAxMjA0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiwyNCArMzYsNDEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgQ2xh
c3NOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljU3VidHJlZU5vZGVMaXN0IHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsYXNzTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVm
UHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xhc3NOb2RlTGlzdChyb290Tm9kZSwg
Y2xhc3NOYW1lcykpOwotICAgICAgICB9CitjbGFzcyBDbGFzc05vZGVMaXN0IDogcHVibGljIER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENs
YXNzTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJp
bmcmIGNsYXNzTmFtZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsYXNz
Tm9kZUxpc3Qocm9vdE5vZGUsIGNsYXNzTmFtZXMpKTsKKyAgICB9CiAKLSAgICAgICAgdmlydHVh
bCB+Q2xhc3NOb2RlTGlzdCgpOworICAgIHZpcnR1YWwgfkNsYXNzTm9kZUxpc3QoKTsKIAotICAg
IHByaXZhdGU6Ci0gICAgICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9k
ZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKTsKK3ByaXZhdGU6CisgICAgQ2xhc3NOb2RlTGlz
dChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpOwog
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdDsKIAotICAgICAgICBTcGFj
ZVNwbGl0U3RyaW5nIG1fY2xhc3NOYW1lczsKLSAgICAgICAgU3RyaW5nIG1fb3JpZ2luYWxDbGFz
c05hbWVzOwotICAgIH07CisgICAgU3BhY2VTcGxpdFN0cmluZyBtX2NsYXNzTmFtZXM7CisgICAg
U3RyaW5nIG1fb3JpZ2luYWxDbGFzc05hbWVzOworfTsKIAorY2xhc3MgQ2xhc3NOb2RlTGlzdENh
Y2hlIDogcHVibGljIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RDYWNoZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8Q2xhc3NOb2RlTGlzdENhY2hlPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFB0cihuZXcgQ2xhc3NOb2RlTGlzdENhY2hlKTsgfQorCisgICAgUGFzc1JlZlB0cjxDbGFz
c05vZGVMaXN0PiBjcmVhdGVMaXN0SWZOZWVkZWQoTm9kZSosIGNvbnN0IFN0cmluZyYgY2xhc3NO
YW1lcyk7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDYWNoZShJbnZhbGlkYXRpb25UeXBl
KSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2xhc3NOb2RlTGlzdDsK
KworICAgIENsYXNzTm9kZUxpc3RDYWNoZSgpCisgICAgICAgIDogRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdENhY2hlKENsYXNzTm9kZUxpc3RUeXBlKQorICAgIHsgfQorCisgICAgSGFzaE1hcDxTdHJp
bmcsIENsYXNzTm9kZUxpc3QqPiBtX2NsYXNzTm9kZUxpc3RDYWNoZTsKK307CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENsYXNzTm9kZUxpc3RfaApJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTIwNzg2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTM2IEBACisyMDEyLTA2LTE5ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNocmluayBOb2RlTGlzdHNOb2RlRGF0YQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkwMzYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIHRoZSBmaXhl
ZCBsaXN0IG9mIEhhc2hNYXBzIGluIE5vZGVMaXN0c05vZGVEYXRhIGJ5IGEgVmVjdG9yIG9mIGNh
Y2hlIG9iamVjdHMuCisgICAgICAgIAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQor
CisgICAgICAgICogZG9tL0NsYXNzTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xh
c3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGFzc05vZGVM
aXN0Ojp+Q2xhc3NOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGFzc05vZGVMaXN0Q2Fj
aGU6OmNyZWF0ZUxpc3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNsYXNzTm9kZUxpc3RDYWNoZTo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKiBk
b20vQ2xhc3NOb2RlTGlzdC5oOgorICAgICAgICAoQ2xhc3NOb2RlTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDbGFzc05vZGVMaXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChDbGFzc05vZGVMaXN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NOb2RlTGlz
dENhY2hlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NOb2RlTGlzdENhY2hlOjpD
bGFzc05vZGVMaXN0Q2FjaGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlz
dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbnZh
bGlkYXRlRHluYW1pY1N1YnRyZWVOb2RlTGlzdENhY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Z2V0SXRlbXMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAo
RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9EeW5hbWljTm9kZUxpc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6ZG9jdW1lbnQpOgorICAgICAgICAoRHluYW1pY05vZGVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpDYWNoZXMp
OgorICAgICAgICAoQ2FjaGVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdCk6CisgICAgICAgIChEeW5hbWljU3VidHJlZU5vZGVMaXN0Q2FjaGUp
OgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdENhY2hlOjp+RHluYW1p
Y1N1YnRyZWVOb2RlTGlzdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3RDYWNoZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5v
ZGVMaXN0Q2FjaGU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3RDYWNoZSk6CisgICAgICAgICogZG9t
L01pY3JvRGF0YUl0ZW1MaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1pY3JvRGF0YUl0ZW1M
aXN0OjpNaWNyb0RhdGFJdGVtTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpNaWNyb0RhdGFJdGVt
TGlzdDo6fk1pY3JvRGF0YUl0ZW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1pY3JvRGF0YUl0
ZW1MaXN0Q2FjaGU6OmNyZWF0ZUxpc3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGU6OmludmFsaWRhdGVDYWNoZSk6
CisgICAgICAgICogZG9tL01pY3JvRGF0YUl0ZW1MaXN0Lmg6CisgICAgICAgIChNaWNyb0RhdGFJ
dGVtTGlzdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjpNaWNy
b0RhdGFJdGVtTGlzdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9O
YW1lTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZU5vZGVMaXN0Ojp+TmFtZU5v
ZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVOb2RlTGlzdENhY2hlOjpjcmVhdGVMaXN0
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lTm9k
ZUxpc3RDYWNoZTo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKiBkb20vTmFtZU5vZGVMaXN0
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE5hbWVOb2RlTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpOYW1lTm9kZUxpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChOYW1lTm9kZUxpc3RD
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lTm9kZUxpc3RDYWNoZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hbWVOb2RlTGlzdENhY2hlOjpOYW1lTm9kZUxpc3RDYWNoZSk6Cisg
ICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJSYXJl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVB
ZnRlckF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0
ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6bm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJhZGlvTm9kZUxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyk6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpn
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRv
bS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAq
IGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKE5vZGVMaXN0c05vZGVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpjYWNoZU9mVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6ZW5zdXJlQ2FjaGVPZlR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OnJlbW92ZUNhY2hlT2ZUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzT25DaGlsZE5vZGVD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVD
YWNoZXNPbkF0dHJpYnV0ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2Rl
RGF0YTo6aW52YWxpZGF0ZUFsbENhY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNO
b2RlRGF0YTo6aXNFbXB0eSk6CisgICAgICAgIChOb2RlUmFyZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZVJhcmVEYXRhOjpub2RlTGlzdHMpOgorICAgICAgICAqIGRvbS9UYWdOb2RlTGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUYWdOb2RlTGlzdDo6flRhZ05vZGVMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0Q2FjaGU6OmNyZWF0ZUxpc3RJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0Q2FjaGU6Omlu
dmFsaWRhdGVDYWNoZSk6CisgICAgICAgICogZG9tL1RhZ05vZGVMaXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05v
ZGVMaXN0OjpjcmVhdGUpOgorICAgICAgICAoSFRNTFRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUYWdOb2RlTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFRhZ05vZGVMaXN0Q2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6VGFnTm9kZUxpc3RDYWNoZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0Q2FjaGU6OlRhZ05vZGVMaXN0Q2FjaGUpOgorICAgICAg
ICAqIGRvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29w
ZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wZSk6CisgICAgICAgICogaHRtbC9MYWJlbGFibGVF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxhYmVsYWJsZUVsZW1lbnQ6OmxhYmVscyk6
CisgICAgICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YWJlbHNOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxz
Tm9kZUxpc3Q6On5MYWJlbHNOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxhYmVsc05vZGVMaXN0Q2FjaGU6OmNyZWF0ZUxpc3RJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYWJlbHNOb2RlTGlzdENhY2hlOjppbnZhbGlkYXRlQ2FjaGUpOgorICAg
ICAgICAqIGh0bWwvTGFiZWxzTm9kZUxpc3QuaDoKKyAgICAgICAgKExhYmVsc05vZGVMaXN0Q2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxzTm9kZUxpc3RDYWNoZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxhYmVsc05vZGVMaXN0Q2FjaGU6OkxhYmVsc05vZGVMaXN0Q2FjaGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9SYWRpb05vZGVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdDo6flJhZGlvTm9kZUxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmFkaW9Ob2RlTGlzdENhY2hlOjpjcmVhdGVMaXN0SWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb05vZGVMaXN0Q2FjaGU6OmludmFsaWRh
dGVDYWNoZSk6CisgICAgICAgICogaHRtbC9SYWRpb05vZGVMaXN0Lmg6CisgICAgICAgIChSYWRp
b05vZGVMaXN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdENhY2hlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdENhY2hlOjpSYWRpb05vZGVM
aXN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDYtMTkgIEVyaWsgQXJ2aWRz
c29uICA8YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIEZpeCBpc3N1ZSB3aGVyZSBh
IGNhbGxiYWNrIGdvdCBhIG51bGwgY2FsbGluZyBjb250ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvUmFkaW9Ob2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMDQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSwxMyArNDIsMjEgQEAKICAgICAsIG1fbmFt
ZShuYW1lKQogICAgICwgbV9iYXNlRWxlbWVudChiYXNlRWxlbWVudCkKIHsKLSAgICBtX2Jhc2VF
bGVtZW50LT5kb2N1bWVudCgpLT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7
CisgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwog
fQogCiBSYWRpb05vZGVMaXN0Ojp+UmFkaW9Ob2RlTGlzdCgpCiB7Ci0gICAgbV9iYXNlRWxlbWVu
dC0+cmVtb3ZlQ2FjaGVkUmFkaW9Ob2RlTGlzdCh0aGlzLCBtX25hbWUpOwotICAgIG1fYmFzZUVs
ZW1lbnQtPmRvY3VtZW50KCktPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMp
OworICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMgPSBtX2Jhc2VFbGVtZW50LT5ub2Rl
TGlzdHMoKTsKKyAgICBBU1NFUlQobm9kZUxpc3RzKTsKKyAgICBSYWRpb05vZGVMaXN0Q2FjaGUq
IGNhY2hlID0gbm9kZUxpc3RzLT5jYWNoZU9mVHlwZTxSYWRpb05vZGVMaXN0Q2FjaGU+KFJhZGlv
Tm9kZUxpc3RUeXBlKTsKKyAgICBBU1NFUlQodGhpcyA9PSBjYWNoZS0+bV9yYWRpb05vZGVMaXN0
Q2FjaGUuZ2V0KG1fbmFtZSkpOworICAgIGlmIChjYWNoZS0+bV9yYWRpb05vZGVMaXN0Q2FjaGUu
c2l6ZSgpICE9IDEpCisgICAgICAgIGNhY2hlLT5tX3JhZGlvTm9kZUxpc3RDYWNoZS5yZW1vdmUo
bV9uYW1lKTsKKyAgICBlbHNlCisgICAgICAgIG5vZGVMaXN0cy0+cmVtb3ZlQ2FjaGVPZlR5cGUo
bV9iYXNlRWxlbWVudC5nZXQoKSwgUmFkaW9Ob2RlTGlzdFR5cGUpOworCisgICAgZG9jdW1lbnQo
KS0+dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgSFRNTElucHV0RWxlbWVudCogdG9SYWRpb0J1dHRvbklucHV0RWxlbWVudChOb2RlKiBu
b2RlKQpAQCAtMTEyLDUgKzEyMSwxOSBAQAogICAgIHJldHVybiBjaGVja0VsZW1lbnRNYXRjaGVz
UmFkaW9Ob2RlTGlzdEZpbHRlcih0ZXN0RWxlbWVudCk7CiB9CiAKK1Bhc3NSZWZQdHI8UmFkaW9O
b2RlTGlzdD4gUmFkaW9Ob2RlTGlzdENhY2hlOjpjcmVhdGVMaXN0SWZOZWVkZWQoRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQoreworICAgIEhhc2hNYXA8QXRvbWlj
U3RyaW5nLCBSYWRpb05vZGVMaXN0Kj46OkFkZFJlc3VsdCByZXN1bHQgPSBtX3JhZGlvTm9kZUxp
c3RDYWNoZS5hZGQobmFtZSwgMCk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgUmVmUHRyPFJhZGlvTm9k
ZUxpc3Q+IGxpc3QgPSBSYWRpb05vZGVMaXN0OjpjcmVhdGUoZWxlbWVudCwgbmFtZSk7CisgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOworICAgIHJldHVybiBsaXN0LnJl
bGVhc2UoKTsKK30KKwordm9pZCBSYWRpb05vZGVMaXN0Q2FjaGU6OmludmFsaWRhdGVDYWNoZShJ
bnZhbGlkYXRpb25UeXBlKQoreyB9CisKIH0gLy8gbmFtc3BhY2UKIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvTGFiZWxzTm9kZUxpc3QuaAkocmV2aXNpb24gMTIwNDk2KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjZGVmaW5lIExhYmVsc05vZGVMaXN0X2gKIAogI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5o
IgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcsNiArNDgsMjIgQEAKICAgICBSZWZQdHI8
Tm9kZT4gbV9mb3JOb2RlOwogfTsKIAorY2xhc3MgTGFiZWxzTm9kZUxpc3RDYWNoZSA6IHB1Ymxp
YyBEeW5hbWljU3VidHJlZU5vZGVMaXN0Q2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPExhYmVsc05vZGVMaXN0Q2FjaGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5l
dyBMYWJlbHNOb2RlTGlzdENhY2hlKTsgfQorCisgICAgUGFzc1JlZlB0cjxMYWJlbHNOb2RlTGlz
dD4gY3JlYXRlTGlzdElmTmVlZGVkKE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZUNhY2hlKEludmFsaWRhdGlvblR5cGUpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIExhYmVs
c05vZGVMaXN0Q2FjaGUoKQorICAgICAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RDYWNoZShM
YWJlbHNOb2RlTGlzdFR5cGUpCisgICAgICAgICwgbV9sYWJlbHNOb2RlTGlzdENhY2hlKDApCisg
ICAgeyB9CisKKyAgICBMYWJlbHNOb2RlTGlzdCogbV9sYWJlbHNOb2RlTGlzdENhY2hlOworfTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gTGFiZWxzTm9kZUxpc3RfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMDQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2Rl
UmFyZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiwxOCArMzcsMzEgQEAK
ICAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoZm9yTm9kZSwgUm9vdGVkQXREb2N1bWVudCkK
ICAgICAsIG1fZm9yTm9kZShmb3JOb2RlKQogewotICAgIG1fZm9yTm9kZS0+ZG9jdW1lbnQoKS0+
cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOworICAgIGRvY3VtZW50KCktPnJl
Z2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKIH0KIAogTGFiZWxzTm9kZUxpc3Q6
On5MYWJlbHNOb2RlTGlzdCgpCiB7Ci0gICAgbV9mb3JOb2RlLT5yZW1vdmVDYWNoZWRMYWJlbHNO
b2RlTGlzdCh0aGlzKTsKLSAgICBtX2Zvck5vZGUtPmRvY3VtZW50KCktPnVucmVnaXN0ZXJEeW5h
bWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwotfSAKLSAgICAKKyAgICBtX2Zvck5vZGUtPm5vZGVM
aXN0cygpLT5yZW1vdmVDYWNoZU9mVHlwZShtX2Zvck5vZGUuZ2V0KCksIExhYmVsc05vZGVMaXN0
VHlwZSk7CisgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qo
dGhpcyk7Cit9CisKIGJvb2wgTGFiZWxzTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRl
c3ROb2RlKSBjb25zdAogewogICAgIHJldHVybiB0ZXN0Tm9kZS0+aGFzVGFnTmFtZShsYWJlbFRh
ZykgJiYgc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHRlc3ROb2RlKS0+Y29udHJvbCgp
ID09IG1fZm9yTm9kZTsKIH0KIAorUGFzc1JlZlB0cjxMYWJlbHNOb2RlTGlzdD4gTGFiZWxzTm9k
ZUxpc3RDYWNoZTo6Y3JlYXRlTGlzdElmTmVlZGVkKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG1f
bGFiZWxzTm9kZUxpc3RDYWNoZSkKKyAgICAgICAgcmV0dXJuIG1fbGFiZWxzTm9kZUxpc3RDYWNo
ZTsKKworICAgIFJlZlB0cjxMYWJlbHNOb2RlTGlzdD4gbGlzdCA9IExhYmVsc05vZGVMaXN0Ojpj
cmVhdGUobm9kZSk7CisgICAgbV9sYWJlbHNOb2RlTGlzdENhY2hlID0gbGlzdC5nZXQoKTsKKyAg
ICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgTGFiZWxzTm9kZUxpc3RDYWNoZTo6
aW52YWxpZGF0ZUNhY2hlKEludmFsaWRhdGlvblR5cGUpCit7IH0KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMjA0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNiArNDQsNyBAQAogewogICAgIGlmICghc3VwcG9y
dExhYmVscygpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWRvY3VtZW50KCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cyA9IE5vZGU6
OmVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKTsKLSAgICBpZiAobm9kZUxp
c3RzLT5tX2xhYmVsc05vZGVMaXN0Q2FjaGUpCi0gICAgICAgIHJldHVybiBub2RlTGlzdHMtPm1f
bGFiZWxzTm9kZUxpc3RDYWNoZTsKLQotICAgIFJlZlB0cjxMYWJlbHNOb2RlTGlzdD4gbGlzdCA9
IExhYmVsc05vZGVMaXN0OjpjcmVhdGUodGhpcyk7Ci0gICAgbm9kZUxpc3RzLT5tX2xhYmVsc05v
ZGVMaXN0Q2FjaGUgPSBsaXN0LmdldCgpOwotICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gTm9kZTo6ZW5zdXJlUmFyZURhdGEoKS0+bm9kZUxpc3RzKCkuZW5zdXJlQ2FjaGVP
ZlR5cGU8TGFiZWxzTm9kZUxpc3RDYWNoZT4odGhpcywgTGFiZWxzTm9kZUxpc3RUeXBlKS0+Y3Jl
YXRlTGlzdElmTmVlZGVkKHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJjb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuaAkocmV2aXNpb24gMTIwNDk2KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEw
ICsyNywxMSBAQAogI2RlZmluZSBSYWRpb05vZGVMaXN0X2gKIAogI2luY2x1ZGUgIkR5bmFtaWNO
b2RlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw2ICs1
OCwyMyBAQAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2Jhc2VFbGVtZW50OwogfTsKIAorY2xhc3Mg
UmFkaW9Ob2RlTGlzdENhY2hlIDogcHVibGljIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RDYWNoZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UmFkaW9Ob2RlTGlzdENhY2hlPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgUmFkaW9Ob2RlTGlzdENhY2hlKTsgfQorCisgICAg
UGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0PiBjcmVhdGVMaXN0SWZOZWVkZWQoRWxlbWVudCosIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDYWNo
ZShJbnZhbGlkYXRpb25UeXBlKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUmFkaW9Ob2RlTGlzdDsKKworICAgIFJhZGlvTm9kZUxpc3RDYWNoZSgpCisgICAgICAgIDog
RHluYW1pY1N1YnRyZWVOb2RlTGlzdENhY2hlKFJhZGlvTm9kZUxpc3RUeXBlKQorICAgIHsgfQor
CisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJhZGlvTm9kZUxpc3QqPiBtX3JhZGlvTm9kZUxp
c3RDYWNoZTsKK307CisKIH0gLy8gbmFtZXBzYWNlCiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148721</attachid>
            <date>2012-06-20 20:31:14 -0700</date>
            <delta_ts>2012-06-21 16:22:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89036-20120620203510.patch</filename>
            <type>text/plain</type>
            <size>42687</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxMi0wNi0yMCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBTaHJpbmsgTm9kZUxpc3RzTm9k
ZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5
MDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVw
bGFjZWQgNiBoYXNoIG1hcHMgb2YgQXRvbWljU3RyaW5nLCBTdHJpbmcsIGFuZCBSZWZQdHI8UXVh
bGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGw+IGFuZCBhIHJhdyBwb2ludGVyCisgICAgICAg
IGJ5IDMgaGFzaCBtYXBzIG9mIHN0ZDo6cGFpcjx1bnNpZ25lZCBzaG9ydCwgQXRvbWljU3RyaW5n
Piwgc3RkOjpwYWlyPHVuc2lnbmVkIHNob3J0LCBTdHJpbmc+LCBhbmQgUXVhbGlmaWVkTmFtZSwK
KyAgICAgICAgdG8gaGFsdmUgdGhlIE5vZGVMaXN0c05vZGVEYXRhJ3Mgc2l6ZSAoUmVkdWNlZCBm
cm9tIDcgcG9pbnRlcnMgdG8gMyBwb2ludGVycykuIE1hZGUgdGhvc2UgaGFzaCBtYXBzIHByaXZh
dGUgYW5kCisgICAgICAgIGFkZGVkIGFkZENhY2hlV2l0aCogYW5kIHJlbW92ZUNhY2hlV2l0aCog
bWVtYmVyIGZ1bmN0aW9ucyB0byByZWR1Y2UgdGhlIGNvZGUgZHVwbGljYXRpb24uCisKKyAgICAg
ICAgQWxzbyBnb3QgcmlkIG9mIHJlbW92ZUNhY2hlZCpOb2RlTGlzdCBtZW1iZXIgZnVuY3Rpb25z
IGZyb20gTm9kZSBhbmQgRG9jdW1lbnQgbm93IHRoYXQgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCBj
YW4KKyAgICAgICAgc2ltcGx5IGNhbGwgbm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aCogb24g
bV9ub2RlLgorCisgICAgICAgICogZG9tL0NoaWxkTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdCk6CisgICAgICAgICogZG9tL0NsYXNz
Tm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NOb2RlTGlzdDo6fkNsYXNzTm9k
ZUxpc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Z2V0SXRlbXMpOiBVc2UgYWRkQ2FjaGVXaXRoTmFtZS4KKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuaDogR290IHJpZCBvZiByZW1vdmVDYWNoZWRNaWNyb0RhdGFJdGVtTGlzdC4KKyAg
ICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOiBNb3ZlZCB0aGUgY29uc3RydWN0b3IgdG8gdGhlIGhlYWRlciBmaWxl
LgorICAgICAgICAqIGRvbS9EeW5hbWljTm9kZUxpc3QuaDogQWRkZWQgTm9kZUxpc3RUeXBlIGFu
ZCBJbnZhbGlkYXRpb25UeXBlIHRvIGJlIHVzZWQgaW4gTm9kZUxpc3RzTm9kZURhdGEuCisgICAg
ICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdCk6IFRha2VzIHRo
ZSBpbnZhbGlkYXRpb24gdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6
ZG9jdW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6c2hv
dWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKTogQWRkZWQgc2hvdWxkSW52YWxpZGF0
ZU9uQXR0cmlidXRlQ2hhbmdlIHRvIHJldGFpbiB0aGUgaW52YWxpZGF0aW9uIHR5cGUuCisgICAg
ICAgIChDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6
RHluYW1pY1N1YnRyZWVOb2RlTGlzdCk6CisgICAgICAgICogZG9tL01pY3JvRGF0YUl0ZW1MaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1pY3JvRGF0YUl0ZW1MaXN0Ojp+TWljcm9EYXRhSXRl
bUxpc3QpOgorICAgICAgICAqIGRvbS9OYW1lTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TmFtZU5vZGVMaXN0OjpOYW1lTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmFtZU5v
ZGVMaXN0Ojp+TmFtZU5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVOb2RlTGlzdDo6
bm9kZU1hdGNoZXMpOgorICAgICAgICAqIGRvbS9OYW1lTm9kZUxpc3QuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoTmFtZU5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVO
b2RlTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpub2RlTGlzdHMpOiBBZGRlZCBzbyB0aGF0IG5vZGUgbGlzdHMgY2FuIGRpcmVj
dGx5IGNhbGwgcmVtb3ZlQ2FjaGVXaXRoKi4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVs
ZW1lbnRzQnlUYWdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlU
YWdOYW1lTlMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpyYWRpb05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVM
aXN0c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzKTogTWVyZ2VkIGludmFsaWRhdGVDYWNoZXNU
aGF0RGVwZW5kT25BdHRyaWJ1dGVzLiBUaGUgZnVuY3Rpb24gdGFrZXMKKyAgICAgICAgdGhlIGF0
dHJpYnV0ZSBuYW1lIHRvIGF2b2lkIGludmFsaWRhdGluZyB0YWcgbm9kZSBsaXN0cyB3aGVuIG9u
bHkgYXR0cmlidXRlcyBhcmUgbW9kaWZpZWQuIEFsc28sIG5vdyB3ZSBoYXZlIGV4YWN0bHkKKyAg
ICAgICAgdGhyZWUgaGFzaCBtYXBzIHRvIGludmFsaWRhdGU6IG1fYXRvbWljTmFtZUNhY2hlcywg
bV9uYW1lQ2FjaGVzLCBhbmQgbV90YWdOb2RlTGlzdENhY2hlTlMuCisgICAgICAgIChXZWJDb3Jl
KTogTm9kZUxpc3RzTm9kZURhdGE6OmlzRW1wdHkgaXMgbW92ZWQgdG8gTm9kZVJhcmVEYXRhLmgu
CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTm9k
ZSk6CisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5oOgorICAgICAgICAoTm9kZUxpc3RzTm9k
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmFkZENhY2hlV2l0
aEF0b21pY05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmFkZENh
Y2hlV2l0aE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmFkZENh
Y2hlV2l0aFF1YWxpZmllZE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURh
dGE6OnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxp
c3RzTm9kZURhdGE6OnJlbW92ZUNhY2hlV2l0aE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZUxpc3RzTm9kZURhdGE6OnJlbW92ZUNhY2hlV2l0aFF1YWxpZmllZE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmlzRW1wdHkpOiBNb3ZlZCBmcm9tIE5vZGUuY3Bw
IG5vdyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbXVjaCBzaG9ydGVyLgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0c05vZGVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpuYW1lZE5vZGVMaXN0S2V5KTogSGVscGVyIG1lbWJlciBm
dW5jdGlvbnMgdG8gb2J0YWluIHRoZSBrZXkgZm9yIEF0b21pY1N0cmluZyBhbmQKKyAgICAgICAg
U3RyaW5nIGhhc2ggbWFwcy4KKyAgICAgICAgKiBkb20vVGFnTm9kZUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRhZ05vZGVMaXN0Ojp+VGFnTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhZ05v
ZGVMaXN0OjpIVE1MVGFnTm9kZUxpc3QpOiBIYXJkIGNvZGUgbmFtZXNwYWNlVVJJID0gc3RhckF0
b20gc2luY2Ugb3RoZXIgdmFsdWVzIGFyZSBuZXZlciB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRhZ05vZGVMaXN0Ojpub2RlTWF0Y2hlcyk6IEdpdmVuIHRoYXQsIGFzc2VydCBtX25hbWVz
cGFjZSA9PSBzdGFyQXRvbS4KKyAgICAgICAgKiBkb20vVGFnTm9kZUxpc3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlRhZ05vZGVMaXN0OjpjcmVhdGUpOiBBZGQgYSBuZXcgdmVyc2lvbiBvZiBjcmVh
dGUgdGhhdCBkb2Vzbid0IHRha2UgbmFtZXNwYWNlIChhc3N1bWUgc3RhckF0b20pIHNvIHRoYXQK
KyAgICAgICAgYWRkQ2FjaGVXaXRoQXRvbWljTmFtZSB3b3JrcyB3aXRoIHRoaXMgY2xhc3MuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGFnTm9kZUxpc3Q6OmNyZWF0ZSk6IFJlbW92ZWQgbmFtZXNw
YWNlVVJJIGZyb20gdGhlIGFyZ3VtZW50IGxpc3Qgc2luY2UgaXQncyBhbHdheXMgc3RhckF0b20u
CisgICAgICAgIChIVE1MVGFnTm9kZUxpc3QpOgorICAgICAgICAqIGh0bWwvTGFiZWxhYmxlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYWJlbGFibGVFbGVtZW50OjpsYWJlbHMpOgor
ICAgICAgICAqIGh0bWwvTGFiZWxzTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGFi
ZWxzTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0KTogUmVtb3ZlZCByZWR1bmRhbnQgbV9mb3JOb2Rl
IChpZGVudGljYWwgdG8gbV9ub2RlIGluIER5bmFtaWNOb2RlTGlzdCkuCisgICAgICAgIChXZWJD
b3JlOjpMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxhYmVsc05vZGVMaXN0Ojpub2RlTWF0Y2hlcyk6CisgICAgICAgICogaHRtbC9MYWJlbHNOb2Rl
TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxzTm9kZUxpc3Q6OmNyZWF0ZSk6CisgICAg
ICAgIChMYWJlbHNOb2RlTGlzdCk6CisgICAgICAgICogaHRtbC9SYWRpb05vZGVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3QpOiBSZW1vdmVk
IHJlZHVuZGFudCBtX2Jhc2VFbGVtZW50IChpZGVudGljYWwgdG8gbV9ub2RlIGluIER5bmFtaWNO
b2RlTGlzdCkuCisgICAgICAgIEFsc28gY2hhbmdlZCB0aGUgZmlyc3QgYXJndW1lbnQncyB0eXBl
IGZyb20gRWxlbWVudCogdG8gTm9kZSogc28gdGhhdCBpdCB3b3JrcyBiZXR0ZXIgd2l0aCBuZXcg
dGVtcGxhdGUgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9ucyBvZiBOb2RlTGlzdHNOb2RlRGF0YS4K
KyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6OmNoZWNrRWxlbWVudE1hdGNoZXNSYWRpb05vZGVM
aXN0RmlsdGVyKToKKyAgICAgICAgKiBodG1sL1JhZGlvTm9kZUxpc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJhZGlvTm9kZUxpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChSYWRpb05vZGVMaXN0KToK
KwogMjAxMi0wNi0yMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMDg4OS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMDg2NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDaGlsZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0
KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKLSAgICA6IER5bmFtaWNOb2RlTGlzdChub2RlKQorICAg
IDogRHluYW1pY05vZGVMaXN0KG5vZGUsIFJvb3RlZEF0Tm9kZSwgRG9Ob3RJbnZhbGlkYXRlT25B
dHRyaWJ1dGVDaGFuZ2UpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05v
ZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlz
dC5jcHAJKHJldmlzaW9uIDEyMDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNsYXNz
Tm9kZUxpc3QuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTm9kZVJhcmVE
YXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00NCw3ICs0NSw3IEBAIENsYXNzTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3QoUGFzc1JlZlB0
cjwKIAogQ2xhc3NOb2RlTGlzdDo6fkNsYXNzTm9kZUxpc3QoKQogewotICAgIG5vZGUoKS0+cmVt
b3ZlQ2FjaGVkQ2xhc3NOb2RlTGlzdCh0aGlzLCBtX29yaWdpbmFsQ2xhc3NOYW1lcyk7CisgICAg
bm9kZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoTmFtZSh0aGlzLCBEeW5hbWljTm9k
ZUxpc3Q6OkNsYXNzTm9kZUxpc3RUeXBlLCBtX29yaWdpbmFsQ2xhc3NOYW1lcyk7CiB9IAogCiBi
b29sIENsYXNzTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRlc3ROb2RlKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMjA4NjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTI2LDMxICs1OTI2
LDExIEBAIERvY3VtZW50TG9hZGVyKiBEb2N1bWVudDo6bG9hZGVyKCkgY29uc3QKICNpZiBFTkFC
TEUoTUlDUk9EQVRBKQogUGFzc1JlZlB0cjxOb2RlTGlzdD4gRG9jdW1lbnQ6OmdldEl0ZW1zKGNv
bnN0IFN0cmluZyYgdHlwZU5hbWVzKQogewotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlz
dHMgPSBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcyk7Ci0KICAgICAvLyBT
aW5jZSBkb2N1bWV0LmdldEl0ZW0oKSBpcyBhbGxvd2VkIGZvciBtaWNyb2RhdGEsIHR5cGVOYW1l
cyB3aWxsIGJlIG51bGwgc3RyaW5nLgogICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGNy
ZWF0ZSBhbiB1bmlxdWUgc3RyaW5nIGlkZW50aWZpZXIgdG8gbWFwIHN1Y2ggcmVxdWVzdCBpbiB0
aGUgY2FjaGUuCiAgICAgU3RyaW5nIGxvY2FsVHlwZU5hbWVzID0gdHlwZU5hbWVzLmlzTnVsbCgp
ID8gU3RyaW5nKCJodHRwOi8vd2Via2l0Lm9yZy9taWNyb2RhdGEvdW5kZWZpbmVkSXRlbVR5cGUi
KSA6IHR5cGVOYW1lczsKIAotICAgIE5vZGVMaXN0c05vZGVEYXRhOjpNaWNyb0RhdGFJdGVtTGlz
dENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbm9kZUxpc3RzLT5tX21pY3JvRGF0YUl0ZW1MaXN0
Q2FjaGUuYWRkKGxvY2FsVHlwZU5hbWVzLCAwKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQpOwotCi0gICAgUmVmUHRyPE1pY3JvRGF0YUl0ZW1MaXN0PiBsaXN0ID0gTWljcm9EYXRh
SXRlbUxpc3Q6OmNyZWF0ZSh0aGlzLCB0eXBlTmFtZXMpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gbGlzdC5nZXQoKTsKLSAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7Ci19Ci0KLXZv
aWQgRG9jdW1lbnQ6OnJlbW92ZUNhY2hlZE1pY3JvRGF0YUl0ZW1MaXN0KE1pY3JvRGF0YUl0ZW1M
aXN0KiBsaXN0LCBjb25zdCBTdHJpbmcmIHR5cGVOYW1lcykKLXsKLSAgICBBU1NFUlQocmFyZURh
dGEoKSk7Ci0gICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLQotICAgIE5vZGVM
aXN0c05vZGVEYXRhKiBkYXRhID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7Ci0KLSAgICBTdHJp
bmcgbG9jYWxUeXBlTmFtZXMgPSB0eXBlTmFtZXMuaXNOdWxsKCkgPyBTdHJpbmcoImh0dHA6Ly93
ZWJraXQub3JnL21pY3JvZGF0YS91bmRlZmluZWRJdGVtVHlwZSIpIDogdHlwZU5hbWVzOwotICAg
IEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX21pY3JvRGF0YUl0ZW1MaXN0Q2Fj
aGUuZ2V0KGxvY2FsVHlwZU5hbWVzKSk7Ci0gICAgZGF0YS0+bV9taWNyb0RhdGFJdGVtTGlzdENh
Y2hlLnJlbW92ZShsb2NhbFR5cGVOYW1lcyk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkt
PmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRoTmFtZTxNaWNyb0RhdGFJdGVtTGlz
dD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpNaWNyb0RhdGFJdGVtTGlzdFR5cGUsIGxvY2FsVHlw
ZU5hbWVzKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24g
MTIwODY4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMDgsNyArMTEwOCw2IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCiAg
ICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0SXRlbXMoY29uc3QgU3RyaW5nJiB0eXBlTmFtZXMp
OwotICAgIHZvaWQgcmVtb3ZlQ2FjaGVkTWljcm9EYXRhSXRlbUxpc3QoTWljcm9EYXRhSXRlbUxp
c3QqLCBjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShVTkRPX01BTkFH
RVIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkocmV2aXNpb24g
MTIwODY2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDExICsyOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdDo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdChQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUsIFJvb3RUeXBlIHJvb3RUeXBlKQotICAgIDogRHluYW1pY05vZGVMaXN0KG5vZGUs
IHJvb3RUeXBlKQotewotfQotCiBEeW5hbWljU3VidHJlZU5vZGVMaXN0Ojp+RHluYW1pY1N1YnRy
ZWVOb2RlTGlzdCgpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5o
CShyZXZpc2lvbiAxMjA4NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwyNiBAQCBjbGFzcyBOb2RlOwogCiBjbGFz
cyBEeW5hbWljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgewogcHVibGljOgorICAgIGVudW0g
Tm9kZUxpc3RUeXBlIHsKKyAgICAgICAgQ2hpbGROb2RlTGlzdFR5cGUsCisgICAgICAgIENsYXNz
Tm9kZUxpc3RUeXBlLAorICAgICAgICBOYW1lTm9kZUxpc3RUeXBlLAorICAgICAgICBUYWdOb2Rl
TGlzdFR5cGUsCisgICAgICAgIFJhZGlvTm9kZUxpc3RUeXBlLAorICAgICAgICBMYWJlbHNOb2Rl
TGlzdFR5cGUsCisgICAgICAgIE1pY3JvRGF0YUl0ZW1MaXN0VHlwZSwKKyAgICB9OwogICAgIGVu
dW0gUm9vdFR5cGUgewogICAgICAgICBSb290ZWRBdE5vZGUsCiAgICAgICAgIFJvb3RlZEF0RG9j
dW1lbnQsCiAgICAgfTsKLQotICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IG5v
ZGUsIFJvb3RUeXBlIHJvb3RUeXBlID0gUm9vdGVkQXROb2RlKQorICAgIGVudW0gSW52YWxpZGF0
aW9uVHlwZSB7CisgICAgICAgIEFsd2F5c0ludmFsaWRhdGUsCisgICAgICAgIERvTm90SW52YWxp
ZGF0ZU9uQXR0cmlidXRlQ2hhbmdlLAorICAgIH07CisgICAgRHluYW1pY05vZGVMaXN0KFBhc3NS
ZWZQdHI8Tm9kZT4gbm9kZSwgUm9vdFR5cGUgcm9vdFR5cGUsIEludmFsaWRhdGlvblR5cGUgaW52
YWxpZGF0aW9uVHlwZSkKICAgICAgICAgOiBtX25vZGUobm9kZSkKLSAgICAgICAgLCBtX2NhY2hl
cyhyb290VHlwZSkKKyAgICAgICAgLCBtX2NhY2hlcyhyb290VHlwZSwgaW52YWxpZGF0aW9uVHlw
ZSkKICAgICB7IH0KICAgICB2aXJ0dWFsIH5EeW5hbWljTm9kZUxpc3QoKSB7IH0KIApAQCAtNTks
NiArNzEsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gbV9ub2RlLT5kb2N1bWVudCgp
OwogICAgICAgICByZXR1cm4gbV9ub2RlLmdldCgpOwogICAgIH0KKyAgICBEb2N1bWVudCogZG9j
dW1lbnQoKSB7IHJldHVybiBtX25vZGUtPmRvY3VtZW50KCk7IH0KKworICAgIGJvb2wgc2hvdWxk
SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZXMuc2hv
dWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlOyB9CiAKICAgICB2b2lkIGludmFsaWRhdGVD
YWNoZSgpIHsgbV9jYWNoZXMucmVzZXQoKTsgfQogCkBAIC02Niw4ICs4MSw5IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0ID0gMDsKIAog
ICAgIHN0cnVjdCBDYWNoZXMgewotICAgICAgICBDYWNoZXMoUm9vdFR5cGUgcm9vdFR5cGUpCisg
ICAgICAgIENhY2hlcyhSb290VHlwZSByb290VHlwZSwgSW52YWxpZGF0aW9uVHlwZSBpbnZhbGlk
YXRpb25UeXBlKQogICAgICAgICAgICAgOiByb290ZWRBdERvY3VtZW50KHJvb3RUeXBlID09IFJv
b3RlZEF0RG9jdW1lbnQpCisgICAgICAgICAgICAsIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0
ZUNoYW5nZShpbnZhbGlkYXRpb25UeXBlID09IEFsd2F5c0ludmFsaWRhdGUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgIH0KQEAgLTgxLDEwICs5NywxNCBAQCBwcm90
ZWN0ZWQ6CiAKICAgICAgICAgTm9kZSogbGFzdEl0ZW07CiAgICAgICAgIHVuc2lnbmVkIGNhY2hl
ZExlbmd0aDsKLSAgICAgICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQgOiAyOTsgLy8gQm9ycm93
IDMtYml0cyBmb3IgYml0IGZpZWxkcworICAgICAgICB1bnNpZ25lZCBsYXN0SXRlbU9mZnNldDsK
ICAgICAgICAgdW5zaWduZWQgaXNMZW5ndGhDYWNoZVZhbGlkIDogMTsKICAgICAgICAgdW5zaWdu
ZWQgaXNJdGVtQ2FjaGVWYWxpZCA6IDE7CisKKyAgICAgICAgLy8gRm9sbG93aW5nIGZsYWdzIHNo
b3VsZCBiZWxvbmcgaW4gRHluYW1pY1N1YnRyZWVOb2RlIGJ1dCBhcmUgaGVyZSBmb3IgYml0LXBh
Y2tpbmcuCisgICAgICAgIHVuc2lnbmVkIHR5cGUgOiA0OwogICAgICAgICB1bnNpZ25lZCByb290
ZWRBdERvY3VtZW50IDogMTsKKyAgICAgICAgdW5zaWduZWQgc2hvdWxkSW52YWxpZGF0ZU9uQXR0
cmlidXRlQ2hhbmdlIDogMTsKICAgICB9OwogCiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKQEAg
LTEwMSw3ICsxMjEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVk
IGluZGV4KSBjb25zdCBPVkVSUklERTsKIAogcHJvdGVjdGVkOgotICAgIER5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiwgUm9vdFR5cGUgPSBSb290ZWRBdE5vZGUpOworICAg
IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBSb290VHlwZSBy
b290VHlwZSA9IFJvb3RlZEF0Tm9kZSwgSW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBl
ID0gQWx3YXlzSW52YWxpZGF0ZSkKKyAgICAgICAgOiBEeW5hbWljTm9kZUxpc3Qobm9kZSwgcm9v
dFR5cGUsIGludmFsaWRhdGlvblR5cGUpCisgICAgeyB9CiAKIHByaXZhdGU6CiAgICAgTm9kZSog
aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50
IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWljcm9E
YXRhSXRlbUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NaWNyb0Rh
dGFJdGVtTGlzdC5jcHAJKHJldmlzaW9uIDEyMDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9N
aWNyb0RhdGFJdGVtTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDYsNyArNDcsOCBAQCBNaWNyb0RhdGFJdGVtTGlzdDo6TWljcm9EYXRhSXRl
bUxpc3QoUGFzCiAKIE1pY3JvRGF0YUl0ZW1MaXN0Ojp+TWljcm9EYXRhSXRlbUxpc3QoKQogewot
ICAgIHJvb3ROb2RlKCktPmRvY3VtZW50KCktPnJlbW92ZUNhY2hlZE1pY3JvRGF0YUl0ZW1MaXN0
KHRoaXMsIG1fb3JpZ2luYWxUeXBlTmFtZXMpOworICAgIFN0cmluZyBsb2NhbFR5cGVOYW1lcyA9
IG1fb3JpZ2luYWxUeXBlTmFtZXMuaXNOdWxsKCkgPyBTdHJpbmcoImh0dHA6Ly93ZWJraXQub3Jn
L21pY3JvZGF0YS91bmRlZmluZWRJdGVtVHlwZSIpIDogbV9vcmlnaW5hbFR5cGVOYW1lczsKKyAg
ICBtX25vZGUtPm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhOYW1lKHRoaXMsIER5bmFtaWNO
b2RlTGlzdDo6TWljcm9EYXRhSXRlbUxpc3RUeXBlLCBsb2NhbFR5cGVOYW1lcyk7CiB9CiAKIGJv
b2wgTWljcm9EYXRhSXRlbUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRlc3ROb2RlKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMDg2NikK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwyNiArMjUsMjcgQEAKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKLU5hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5v
ZGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK05hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KFBhc3NS
ZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKICAgICA6IER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUpCi0gICAgLCBtX25vZGVOYW1lKG5hbWUpCisg
ICAgLCBtX25hbWUobmFtZSkKIHsKIH0KIAogTmFtZU5vZGVMaXN0Ojp+TmFtZU5vZGVMaXN0KCkK
IHsKLSAgICBub2RlKCktPnJlbW92ZUNhY2hlZE5hbWVOb2RlTGlzdCh0aGlzLCBtX25vZGVOYW1l
KTsKKyAgICBtX25vZGUtPm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNOYW1lKHRo
aXMsIER5bmFtaWNOb2RlTGlzdDo6TmFtZU5vZGVMaXN0VHlwZSwgbV9uYW1lKTsKIH0gCiAKIGJv
b2wgTmFtZU5vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKIHsK
LSAgICByZXR1cm4gdGVzdE5vZGUtPmdldE5hbWVBdHRyaWJ1dGUoKSA9PSBtX25vZGVOYW1lOwor
ICAgIHJldHVybiB0ZXN0Tm9kZS0+Z2V0TmFtZUF0dHJpYnV0ZSgpID09IG1fbmFtZTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2Rl
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAko
cmV2aXNpb24gMTIwODY2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwyMyArMzAsMjMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgLy8gTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgRWxlbWVudCB3aXRo
IGEgZ2l2ZW4gIm5hbWUiIGF0dHJpYnV0ZQotICAgIGNsYXNzIE5hbWVOb2RlTGlzdCA6IHB1Ymxp
YyBEeW5hbWljU3VidHJlZU5vZGVMaXN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE5hbWVOb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUs
IGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBOYW1lTm9kZUxpc3Qocm9vdE5vZGUsIG5hbWUpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZpcnR1YWwgfk5hbWVOb2RlTGlzdCgpOworLy8gTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxs
IE5vZGVzIGluIGEgRWxlbWVudCB3aXRoIGEgZ2l2ZW4gIm5hbWUiIGF0dHJpYnV0ZQorY2xhc3Mg
TmFtZU5vZGVMaXN0IDogcHVibGljIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5hbWVOb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9k
ZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTmFtZU5vZGVMaXN0KHJvb3ROb2RlLCBuYW1lKSk7CisgICAgfQor
CisgICAgdmlydHVhbCB+TmFtZU5vZGVMaXN0KCk7CiAKLSAgICBwcml2YXRlOgotICAgICAgICBO
YW1lTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKK3ByaXZhdGU6CisgICAgTmFtZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7CiAKLSAgICAgICAgdmlydHVhbCBib29sIG5vZGVN
YXRjaGVzKEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxl
bWVudCopIGNvbnN0OwogCi0gICAgICAgIEF0b21pY1N0cmluZyBtX25vZGVOYW1lOwotICAgIH07
CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTIwODY4KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODAsNyArOTgwLDcgQEAgdm9pZCBO
b2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlcgogICAgICAgICBpZiAoIWRhdGEtPm5v
ZGVMaXN0cygpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgZGF0YS0+bm9kZUxp
c3RzKCktPmludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CisgICAgICAg
IGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCZhdHRyTmFtZSk7CiAgICAgfQog
fQogCkBAIC0xMDA1LDU0ICsxMDA1LDkgQEAgdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3Rz
Q2FjaGVBZnRlcgogICAgIH0KIH0KIAotdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRDbGFzc05vZGVM
aXN0KENsYXNzTm9kZUxpc3QqIGxpc3QsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lKQorTm9kZUxp
c3RzTm9kZURhdGEqIE5vZGU6Om5vZGVMaXN0cygpCiB7Ci0gICAgQVNTRVJUKHJhcmVEYXRhKCkp
OwotICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0KLSAgICBOb2RlTGlzdHNO
b2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpOwotICAgIEFTU0VSVF9VTlVT
RUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5nZXQoY2xhc3NOYW1l
KSk7Ci0gICAgZGF0YS0+bV9jbGFzc05vZGVMaXN0Q2FjaGUucmVtb3ZlKGNsYXNzTmFtZSk7Ci19
Ci0KLXZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVkTmFtZU5vZGVMaXN0KE5hbWVOb2RlTGlzdCogbGlz
dCwgY29uc3QgU3RyaW5nJiBub2RlTmFtZSkKLXsKLSAgICBBU1NFUlQocmFyZURhdGEoKSk7Ci0g
ICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLQotICAgIE5vZGVMaXN0c05vZGVE
YXRhKiBkYXRhID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChs
aXN0LCBsaXN0ID09IGRhdGEtPm1fbmFtZU5vZGVMaXN0Q2FjaGUuZ2V0KG5vZGVOYW1lKSk7Ci0g
ICAgZGF0YS0+bV9uYW1lTm9kZUxpc3RDYWNoZS5yZW1vdmUobm9kZU5hbWUpOwotfQotCi12b2lk
IE5vZGU6OnJlbW92ZUNhY2hlZFRhZ05vZGVMaXN0KFRhZ05vZGVMaXN0KiBsaXN0LCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHJhcmVEYXRhKCkpOwotICAgIEFTU0VS
VChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0
YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlz
dCA9PSBkYXRhLT5tX3RhZ05vZGVMaXN0Q2FjaGUuZ2V0KG5hbWUuaW1wbCgpKSk7Ci0gICAgZGF0
YS0+bV90YWdOb2RlTGlzdENhY2hlLnJlbW92ZShuYW1lLmltcGwoKSk7Ci19Ci0KLXZvaWQgTm9k
ZTo6cmVtb3ZlQ2FjaGVkVGFnTm9kZUxpc3QoVGFnTm9kZUxpc3QqIGxpc3QsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHJhcmVEYXRhKCkpOwotICAgIEFTU0VSVChy
YXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9
IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9
PSBkYXRhLT5tX3RhZ05vZGVMaXN0Q2FjaGVOUy5nZXQobmFtZS5pbXBsKCkpKTsKLSAgICBkYXRh
LT5tX3RhZ05vZGVMaXN0Q2FjaGVOUy5yZW1vdmUobmFtZS5pbXBsKCkpOwotfQotCi12b2lkIE5v
ZGU6OnJlbW92ZUNhY2hlZExhYmVsc05vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxp
c3QpCi17Ci0gICAgQVNTRVJUKHJhcmVEYXRhKCkpOwotICAgIEFTU0VSVChyYXJlRGF0YSgpLT5u
b2RlTGlzdHMoKSk7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCkt
Pm5vZGVMaXN0cygpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX2xh
YmVsc05vZGVMaXN0Q2FjaGUpOwotICAgIGRhdGEtPm1fbGFiZWxzTm9kZUxpc3RDYWNoZSA9IDA7
CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSA6IDA7
CiB9CiAKIHZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVkQ2hpbGROb2RlTGlzdCgpCkBAIC0xNTkyLDE5
ICsxNTQ3LDkgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeQogICAg
IGlmIChsb2NhbE5hbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgQXRvbWlj
U3RyaW5nIGxvY2FsTmFtZUF0b20gPSBsb2NhbE5hbWU7Ci0KLSAgICBOb2RlTGlzdHNOb2RlRGF0
YTo6VGFnTm9kZUxpc3RDYWNoZTo6QWRkUmVzdWx0IHJlc3VsdCA9IGVuc3VyZVJhcmVEYXRhKCkt
PmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+bV90YWdOb2RlTGlzdENhY2hlLmFkZChsb2NhbE5hbWVB
dG9tLCAwKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFz
c1JlZlB0cjxUYWdOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotCi0gICAgUmVm
UHRyPFRhZ05vZGVMaXN0PiBsaXN0OwogICAgIGlmIChkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVu
dCgpKQotICAgICAgICBsaXN0ID0gSFRNTFRhZ05vZGVMaXN0OjpjcmVhdGUodGhpcywgc3RhckF0
b20sIGxvY2FsTmFtZUF0b20pOwotICAgIGVsc2UKLSAgICAgICAgbGlzdCA9IFRhZ05vZGVMaXN0
OjpjcmVhdGUodGhpcywgc3RhckF0b20sIGxvY2FsTmFtZUF0b20pOwotICAgIHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKLSAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7ICAg
CisgICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcykt
PmFkZENhY2hlV2l0aEF0b21pY05hbWU8SFRNTFRhZ05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9k
ZUxpc3Q6OlRhZ05vZGVMaXN0VHlwZSwgbG9jYWxOYW1lKTsKKyAgICByZXR1cm4gZW5zdXJlUmFy
ZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPFRh
Z05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlRhZ05vZGVMaXN0VHlwZSwgbG9jYWxO
YW1lKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05h
bWVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUpCkBAIC0xNjE1LDM5ICsxNTYwLDIzIEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+
IE5vZGU6OmdldEVsZW1lbnRzQnkKICAgICBpZiAobmFtZXNwYWNlVVJJID09IHN0YXJBdG9tKQog
ICAgICAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWUobG9jYWxOYW1lKTsKIAotICAgIEF0
b21pY1N0cmluZyBsb2NhbE5hbWVBdG9tID0gbG9jYWxOYW1lOwotCi0gICAgTm9kZUxpc3RzTm9k
ZURhdGE6OlRhZ05vZGVMaXN0Q2FjaGVOUzo6QWRkUmVzdWx0IHJlc3VsdAotICAgICAgICA9IGVu
c3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+bV90YWdOb2RlTGlzdENhY2hl
TlMuYWRkKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZUF0b20sIG5hbWVzcGFjZVVS
SSkuaW1wbCgpLCAwKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1
cm4gUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotCi0g
ICAgUmVmUHRyPFRhZ05vZGVMaXN0PiBsaXN0ID0gVGFnTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzLCBu
YW1lc3BhY2VVUkkuaXNFbXB0eSgpID8gbnVsbEF0b20gOiBuYW1lc3BhY2VVUkksIGxvY2FsTmFt
ZUF0b20pOwotICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsKLSAgICBy
ZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3Vy
ZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRoUXVhbGlmaWVkTmFtZSh0aGlzLCBuYW1lc3Bh
Y2VVUkkuaXNFbXB0eSgpID8gbnVsbEF0b20gOiBuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7CiB9
CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0
cmluZyYgZWxlbWVudE5hbWUpCiB7Ci0gICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5hbWVOb2RlTGlz
dENhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxp
c3RzKHRoaXMpLT5tX25hbWVOb2RlTGlzdENhY2hlLmFkZChlbGVtZW50TmFtZSwgMCk7Ci0gICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8Tm9kZUxp
c3Q+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLQotICAgIFJlZlB0cjxOYW1lTm9kZUxpc3Q+
IGxpc3QgPSBOYW1lTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzLCBlbGVtZW50TmFtZSk7Ci0gICAgcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOwotICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMp
LT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPE5hbWVOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVM
aXN0OjpOYW1lTm9kZUxpc3RUeXBlLCBlbGVtZW50TmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29uc3QgU3RyaW5nJiBjbGFzc05h
bWVzKQogewotICAgIE5vZGVMaXN0c05vZGVEYXRhOjpDbGFzc05vZGVMaXN0Q2FjaGU6OkFkZFJl
c3VsdCByZXN1bHQKLSAgICAgICAgPSBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMo
dGhpcyktPm1fY2xhc3NOb2RlTGlzdENhY2hlLmFkZChjbGFzc05hbWVzLCAwKTsKLSAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxOb2RlTGlzdD4o
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwotCi0gICAgUmVmUHRyPENsYXNzTm9kZUxpc3Q+IGxp
c3QgPSBDbGFzc05vZGVMaXN0OjpjcmVhdGUodGhpcywgY2xhc3NOYW1lcyk7Ci0gICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0LmdldCgpOwotICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5h
ZGRDYWNoZVdpdGhOYW1lPENsYXNzTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6Q2xh
c3NOb2RlTGlzdFR5cGUsIGNsYXNzTmFtZXMpOworfQorCitQYXNzUmVmUHRyPFJhZGlvTm9kZUxp
c3Q+IE5vZGU6OnJhZGlvTm9kZUxpc3QoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQoreworICAg
IEFTU0VSVChoYXNUYWdOYW1lKGZvcm1UYWcpIHx8IGhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKTsK
KyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5hZGRD
YWNoZVdpdGhBdG9taWNOYW1lPFJhZGlvTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6
UmFkaW9Ob2RlTGlzdFR5cGUsIG5hbWUpOwogfQogCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IE5vZGU6
OnF1ZXJ5U2VsZWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMjMwOSw1OCArMjIzOCwyNiBAQCB2b2lkIE5vZGU6OnNob3dUcmVlRm9yVGhp
c0Fjcm9zc0ZyYW1lKCkgCiAKIC8vIC0tLS0tLS0tCiAKLXZvaWQgTm9kZUxpc3RzTm9kZURhdGE6
OmludmFsaWRhdGVDYWNoZXMoKQordm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNh
Y2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSkKIHsKLSAgICBUYWdOb2RlTGlzdENh
Y2hlOjpjb25zdF9pdGVyYXRvciB0YWdDYWNoZUVuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZS5lbmQo
KTsKLSAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90YWdO
b2RlTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IHRhZ0NhY2hlRW5kOyArK2l0KQotICAgICAgICBp
dC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKLSAgICBUYWdOb2RlTGlzdENhY2hlTlM6OmNv
bnN0X2l0ZXJhdG9yIHRhZ0NhY2hlTlNFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsK
LSAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05v
ZGVMaXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0YWdDYWNoZU5TRW5kOyArK2l0KQotICAgICAg
ICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKLSAgICBpbnZhbGlkYXRlQ2FjaGVzVGhh
dERlcGVuZE9uQXR0cmlidXRlcygpOwotfQorICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFw
Ojpjb25zdF9pdGVyYXRvciBhdG9taWNOYW1lQ2FjaGVFbmQgPSBtX2F0b21pY05hbWVDYWNoZXMu
ZW5kKCk7CisgICAgZm9yIChOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2F0b21pY05hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0gYXRvbWljTmFtZUNhY2hl
RW5kOyArK2l0KSB7CisgICAgICAgIGlmICghYXR0ck5hbWUgfHwgaXQtPnNlY29uZC0+c2hvdWxk
SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5p
bnZhbGlkYXRlQ2FjaGUoKTsKKyAgICB9CiAKLXZvaWQgTm9kZUxpc3RzTm9kZURhdGE6OmludmFs
aWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCkKLXsKLSAgICBDbGFzc05vZGVMaXN0
Q2FjaGU6Oml0ZXJhdG9yIGNsYXNzQ2FjaGVFbmQgPSBtX2NsYXNzTm9kZUxpc3RDYWNoZS5lbmQo
KTsKLSAgICBmb3IgKENsYXNzTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX2NsYXNzTm9k
ZUxpc3RDYWNoZS5iZWdpbigpOyBpdCAhPSBjbGFzc0NhY2hlRW5kOyArK2l0KQotICAgICAgICBp
dC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6
Y29uc3RfaXRlcmF0b3IgbmFtZUNhY2hlRW5kID0gbV9uYW1lQ2FjaGVzLmVuZCgpOworICAgIGZv
ciAoTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lQ2FjaGVz
LmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkgeworICAgICAgICBpZiAoIWF0dHJO
YW1lIHx8IGl0LT5zZWNvbmQtPnNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSgpKQor
ICAgICAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgfQogCi0gICAg
TmFtZU5vZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZU5vZGVMaXN0
Q2FjaGUuZW5kKCk7Ci0gICAgZm9yIChOYW1lTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgaXQgPSBt
X25hbWVOb2RlTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkKLSAg
ICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0gICAgaWYgKG1fbGFiZWxzTm9k
ZUxpc3RDYWNoZSkKLSAgICAgICAgbV9sYWJlbHNOb2RlTGlzdENhY2hlLT5pbnZhbGlkYXRlQ2Fj
aGUoKTsKKyAgICBpZiAoIWF0dHJOYW1lKQorICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFCTEUo
TUlDUk9EQVRBKQotICAgIE1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ZW1MaXN0
Q2FjaGVFbmQgPSBtX21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUuZW5kKCk7Ci0gICAgZm9yIChNaWNy
b0RhdGFJdGVtTGlzdENhY2hlOjppdGVyYXRvciBpdCA9IG1fbWljcm9EYXRhSXRlbUxpc3RDYWNo
ZS5iZWdpbigpOyBpdCAhPSBpdGVtTGlzdENhY2hlRW5kOyArK2l0KQorICAgIFRhZ05vZGVMaXN0
Q2FjaGVOUzo6aXRlcmF0b3IgdGFnQ2FjaGVFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQo
KTsKKyAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVM
aXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0YWdDYWNoZUVuZDsgKytpdCkKICAgICAgICAgaXQt
PnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBOb2RlTGlzdHNO
b2RlRGF0YTo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3RhZ05vZGVMaXN0Q2FjaGUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3RhZ05vZGVMaXN0
Q2FjaGVOUy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1fY2xh
c3NOb2RlTGlzdENhY2hlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICghbV9uYW1lTm9kZUxpc3RDYWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSNpZiBFTkFCTEUoTUlDUk9EQVRBKQotICAgIGlmICghbV9taWNyb0RhdGFJdGVtTGlzdENhY2hl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAgICBpZiAobV9s
YWJlbHNOb2RlTGlzdENhY2hlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1f
cmFkaW9Ob2RlTGlzdENhY2hlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgTm9kZTo6Z2V0U3VicmVzb3VyY2VVUkxzKExpc3RI
YXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApAQCAtMjg3MSwzMSArMjc2OCw2IEBAIHZvaWQgTm9k
ZVJhcmVEYXRhOjpjbGVhckNoaWxkTm9kZUxpc3RDYWMKICAgICAgICAgbV9jaGlsZE5vZGVMaXN0
LT5pbnZhbGlkYXRlQ2FjaGUoKTsKIH0KIAotUGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0PiBOb2Rl
OjpyYWRpb05vZGVMaXN0KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQo
aGFzVGFnTmFtZShmb3JtVGFnKSB8fCBoYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSk7Ci0KLSAgICBO
b2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9k
ZUxpc3RzKHRoaXMpOwotCi0gICAgTm9kZUxpc3RzTm9kZURhdGE6OlJhZGlvTm9kZUxpc3RDYWNo
ZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG5vZGVMaXN0cy0+bV9yYWRpb05vZGVMaXN0Q2FjaGUuYWRk
KG5hbWUsIDApOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBQ
YXNzUmVmUHRyPFJhZGlvTm9kZUxpc3Q+KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKLQotICAg
IFJlZlB0cjxSYWRpb05vZGVMaXN0PiBsaXN0ID0gUmFkaW9Ob2RlTGlzdDo6Y3JlYXRlKHRvRWxl
bWVudCh0aGlzKSwgbmFtZSk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBsaXN0Lmdl
dCgpOwotICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBOb2RlOjpyZW1vdmVD
YWNoZWRSYWRpb05vZGVMaXN0KFJhZGlvTm9kZUxpc3QqIGxpc3QsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocmFyZURhdGEoKSk7Ci0gICAgQVNTRVJUKHJhcmVEYXRh
KCktPm5vZGVMaXN0cygpKTsKLQotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBkYXRhID0gcmFyZURh
dGEoKS0+bm9kZUxpc3RzKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0ID09IGRhdGEt
Pm1fcmFkaW9Ob2RlTGlzdENhY2hlLmdldChuYW1lKSk7Ci0gICAgZGF0YS0+bV9yYWRpb05vZGVM
aXN0Q2FjaGUucmVtb3ZlKG5hbWUpOwotfQotCiAvLyBJdCdzIGltcG9ydGFudCBub3QgdG8gaW5s
aW5lIHJlbW92ZWRMYXN0UmVmLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gaW5saW5lIHRoZSBj
b2RlIHRvCiAvLyBkZWxldGUgYSBOb2RlIGF0IGVhY2ggZGVyZWYgY2FsbCBzaXRlLgogdm9pZCBO
b2RlOjpyZW1vdmVkTGFzdFJlZigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDEyMDg2NikK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5
LDcgQEAgY2xhc3MgTlNSZXNvbHZlcjsKIGNsYXNzIE5hbWVkTm9kZU1hcDsKIGNsYXNzIE5hbWVO
b2RlTGlzdDsKIGNsYXNzIE5vZGVMaXN0OworY2xhc3MgTm9kZUxpc3RzTm9kZURhdGE7CiBjbGFz
cyBOb2RlUmFyZURhdGE7CiBjbGFzcyBOb2RlUmVuZGVyaW5nQ29udGV4dDsKIGNsYXNzIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDsKQEAgLTU1OCwyMyArNTU5LDE0IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBFbGVtZW50KiBhdHRyaWJ1dGVPd25lckVsZW1lbnQpOwogICAgIHZvaWQg
aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQoKTsKLSAgICB2b2lk
IHJlbW92ZUNhY2hlZENsYXNzTm9kZUxpc3QoQ2xhc3NOb2RlTGlzdCosIGNvbnN0IFN0cmluZyYp
OwotCi0gICAgdm9pZCByZW1vdmVDYWNoZWROYW1lTm9kZUxpc3QoTmFtZU5vZGVMaXN0KiwgY29u
c3QgU3RyaW5nJik7Ci0gICAgdm9pZCByZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChUYWdOb2RlTGlz
dCosIGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIHZvaWQgcmVtb3ZlQ2FjaGVkVGFnTm9kZUxp
c3QoVGFnTm9kZUxpc3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAgdm9pZCByZW1vdmVD
YWNoZWRMYWJlbHNOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0Kik7Ci0KKyAgICBOb2Rl
TGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzKCk7CiAgICAgdm9pZCByZW1vdmVDYWNoZWRDaGlsZE5v
ZGVMaXN0KCk7CiAKLSAgICBQYXNzUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHJhZGlvTm9kZUxpc3Qo
Y29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgdm9pZCByZW1vdmVDYWNoZWRSYWRpb05vZGVMaXN0
KFJhZGlvTm9kZUxpc3QqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICB2b2lkIHJlc2V0Q2Fj
aGVkUmFkaW9Ob2RlTGlzdFJvb3ROb2RlKCk7Ci0KICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBn
ZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAgICAgUGFzc1JlZlB0
cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNCeU5hbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50TmFtZSk7
CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb25zdCBT
dHJpbmcmIGNsYXNzTmFtZXMpOworICAgIFBhc3NSZWZQdHI8UmFkaW9Ob2RlTGlzdD4gcmFkaW9O
b2RlTGlzdChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4g
cXVlcnlTZWxlY3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHF1ZXJ5U2VsZWN0b3JBbGwoY29uc3QgQXRv
bWljU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEyMDg2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDkgQEAKICNkZWZpbmUg
Tm9kZVJhcmVEYXRhX2gKIAogI2luY2x1ZGUgIkNoaWxkTm9kZUxpc3QuaCIKLSNpbmNsdWRlICJD
bGFzc05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiRE9NU2V0dGFibGVUb2tlbkxpc3QuaCIKICNpbmNs
dWRlICJEeW5hbWljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uLmgiCi0jaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVk
TmFtZS5oIgogI2luY2x1ZGUgIlRhZ05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRp
b25PYnNlcnZlci5oIgpAQCAtNTEsNDAgKzQ5LDkyIEBAIGNsYXNzIFRyZWVTY29wZTsKIHN0cnVj
dCBOb2RlTGlzdHNOb2RlRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZUxpc3Rz
Tm9kZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBDbGFzc05vZGVMaXN0Kj4gQ2xhc3NOb2RlTGlzdENhY2hlOwotICAg
IENsYXNzTm9kZUxpc3RDYWNoZSBtX2NsYXNzTm9kZUxpc3RDYWNoZTsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8c3RkOjpwYWlyPHVuc2lnbmVkIHNob3J0LCBBdG9taWNTdHJpbmc+LCBEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0Kj4gTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA7CisgICAgdHlwZWRlZiBI
YXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCBzaG9ydCwgU3RyaW5nPiwgRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCo+IE5vZGVMaXN0TmFtZUNhY2hlTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxRdWFs
aWZpZWROYW1lLCBUYWdOb2RlTGlzdCo+IFRhZ05vZGVMaXN0Q2FjaGVOUzsKIAotICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIE5hbWVOb2RlTGlzdCo+IE5hbWVOb2RlTGlzdENhY2hlOwotICAg
IE5hbWVOb2RlTGlzdENhY2hlIG1fbmFtZU5vZGVMaXN0Q2FjaGU7Ci0gCi0gICAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZywgVGFnTm9kZUxpc3QqPiBUYWdOb2RlTGlzdENhY2hlOwotICAg
IFRhZ05vZGVMaXN0Q2FjaGUgbV90YWdOb2RlTGlzdENhY2hlOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgUGFzc1JlZlB0cjxUPiBhZGRDYWNoZVdpdGhBdG9taWNOYW1lKE5vZGUqIG5v
ZGUsIER5bmFtaWNOb2RlTGlzdDo6Tm9kZUxpc3RUeXBlIGxpc3RUeXBlLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5hZGQobmFtZWROb2RlTGlzdEtl
eShsaXN0VHlwZSwgbmFtZSksIDApOworICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZCk7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFF1YWxpZmllZE5hbWU6OlF1YWxpZmll
ZE5hbWVJbXBsPiwgVGFnTm9kZUxpc3QqPiBUYWdOb2RlTGlzdENhY2hlTlM7Ci0gICAgVGFnTm9k
ZUxpc3RDYWNoZU5TIG1fdGFnTm9kZUxpc3RDYWNoZU5TOworICAgICAgICBSZWZQdHI8VD4gbGlz
dCA9IFQ6OmNyZWF0ZShub2RlLCBuYW1lKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQgPSBsaXN0LmdldCgpOworICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgfQog
Ci0jaWYgRU5BQkxFKE1JQ1JPREFUQSkKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBNaWNy
b0RhdGFJdGVtTGlzdCo+IE1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGU7Ci0gICAgTWljcm9EYXRhSXRl
bUxpc3RDYWNoZSBtX21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGU7Ci0jZW5kaWYKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIFBhc3NSZWZQdHI8VD4gYWRkQ2FjaGVXaXRoTmFtZShOb2RlKiBu
b2RlLCBEeW5hbWljTm9kZUxpc3Q6Ok5vZGVMaXN0VHlwZSBsaXN0VHlwZSwgY29uc3QgU3RyaW5n
JiBuYW1lKQorICAgIHsKKyAgICAgICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX25hbWVDYWNoZXMuYWRkKG5hbWVkTm9kZUxpc3RLZXkobGlzdFR5cGUsIG5hbWUp
LCAwKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOworCisgICAgICAgIFJl
ZlB0cjxUPiBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOworICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PiBhZGRDYWNoZVdpdGhRdWFs
aWZpZWROYW1lKE5vZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKKyAgICB7CisgICAgICAgIFF1YWxpZmllZE5h
bWUgbmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpOworICAgICAgICBUYWdO
b2RlTGlzdENhY2hlTlM6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5h
ZGQobmFtZSwgMCk7CisgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAgICAgUmVmUHRyPFRhZ05v
ZGVMaXN0PiBsaXN0ID0gVGFnTm9kZUxpc3Q6OmNyZWF0ZShub2RlLCBuYW1lc3BhY2VVUkksIGxv
Y2FsTmFtZSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gbGlzdC5nZXQoKTsK
KyAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgIH0KKworICAgIHZvaWQgcmVtb3Zl
Q2FjaGVXaXRoQXRvbWljTmFtZShEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0LCBEeW5hbWlj
Tm9kZUxpc3Q6Ok5vZGVMaXN0VHlwZSBsaXN0VHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0ID09IG1fYXRvbWljTmFt
ZUNhY2hlcy5nZXQobmFtZWROb2RlTGlzdEtleShsaXN0VHlwZSwgbmFtZSkpKTsKKyAgICAgICAg
bV9hdG9taWNOYW1lQ2FjaGVzLnJlbW92ZShuYW1lZE5vZGVMaXN0S2V5KGxpc3RUeXBlLCBuYW1l
KSk7CisgICAgfQogCi0gICAgTGFiZWxzTm9kZUxpc3QqIG1fbGFiZWxzTm9kZUxpc3RDYWNoZTsK
KyAgICB2b2lkIHJlbW92ZUNhY2hlV2l0aE5hbWUoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlz
dCwgRHluYW1pY05vZGVMaXN0OjpOb2RlTGlzdFR5cGUgbGlzdFR5cGUsIGNvbnN0IFN0cmluZyYg
bmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBtX25hbWVD
YWNoZXMuZ2V0KG5hbWVkTm9kZUxpc3RLZXkobGlzdFR5cGUsIG5hbWUpKSk7CisgICAgICAgIG1f
bmFtZUNhY2hlcy5yZW1vdmUobmFtZWROb2RlTGlzdEtleShsaXN0VHlwZSwgbmFtZSkpOworICAg
IH0KIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJhZGlvTm9kZUxpc3QqPiBSYWRpb05v
ZGVMaXN0Q2FjaGU7Ci0gICAgUmFkaW9Ob2RlTGlzdENhY2hlIG1fcmFkaW9Ob2RlTGlzdENhY2hl
OworICAgIHZvaWQgcmVtb3ZlQ2FjaGVXaXRoUXVhbGlmaWVkTmFtZShEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KiBsaXN0LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbE5hbWUpCisgICAgeworICAgICAgICBRdWFsaWZpZWROYW1lIG5hbWUo
bnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChsaXN0LCBsaXN0ID09IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmdldChuYW1lKSk7CisgICAgICAg
IG1fdGFnTm9kZUxpc3RDYWNoZU5TLnJlbW92ZShuYW1lKTsKKyAgICB9CiAKICAgICBzdGF0aWMg
UGFzc093blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTm9kZUxpc3RzTm9kZURhdGEpOwogICAgIH0KIAotICAgIHZvaWQg
aW52YWxpZGF0ZUNhY2hlcygpOwotICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRP
bkF0dHJpYnV0ZXMoKTsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIHZvaWQgaW52
YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSA9IDApOworICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hdG9taWNOYW1lQ2Fj
aGVzLmlzRW1wdHkoKSAmJiBtX25hbWVDYWNoZXMuaXNFbXB0eSgpICYmIG1fdGFnTm9kZUxpc3RD
YWNoZU5TLmlzRW1wdHkoKTsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgTm9kZUxpc3RzTm9kZURh
dGEoKSA6IG1fbGFiZWxzTm9kZUxpc3RDYWNoZSgwKSB7fQorICAgIE5vZGVMaXN0c05vZGVEYXRh
KCkgeyB9CisKKyAgICBzdGQ6OnBhaXI8dW5zaWduZWQgc2hvcnQsIEF0b21pY1N0cmluZz4gbmFt
ZWROb2RlTGlzdEtleShEeW5hbWljTm9kZUxpc3Q6Ok5vZGVMaXN0VHlwZSBsaXN0VHlwZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1
bnNpZ25lZCBzaG9ydCwgQXRvbWljU3RyaW5nPihsaXN0VHlwZSwgbmFtZSk7CisgICAgfQorCisg
ICAgc3RkOjpwYWlyPHVuc2lnbmVkIHNob3J0LCBTdHJpbmc+IG5hbWVkTm9kZUxpc3RLZXkoRHlu
YW1pY05vZGVMaXN0OjpOb2RlTGlzdFR5cGUgbGlzdFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWduZWQgc2hvcnQsIFN0cmluZz4o
bGlzdFR5cGUsIG5hbWUpOworICAgIH0KKworICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFw
IG1fYXRvbWljTmFtZUNhY2hlczsKKyAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcCBtX25hbWVDYWNo
ZXM7CisgICAgVGFnTm9kZUxpc3RDYWNoZU5TIG1fdGFnTm9kZUxpc3RDYWNoZU5TOwogfTsKIAog
Y2xhc3MgTm9kZVJhcmVEYXRhIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0LmNwcAko
cmV2aXNpb24gMTIwODY2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDEzIEBACiAjaW5jbHVkZSAiVGFnTm9kZUxpc3Qu
aCIKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRhZ05v
ZGVMaXN0OjpUYWdOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCi0g
ICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlKQorICAgIDogRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdChyb290Tm9kZSwgUm9vdGVkQXROb2RlLCBEb05vdEludmFsaWRhdGVPbkF0dHJp
YnV0ZUNoYW5nZSkKICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKICAgICAsIG1f
bG9jYWxOYW1lKGxvY2FsTmFtZSkKIHsKQEAgLTQwLDkgKzQxLDkgQEAgVGFnTm9kZUxpc3Q6OlRh
Z05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZQogVGFnTm9kZUxpc3Q6On5UYWdOb2RlTGlzdCgpCiB7
CiAgICAgaWYgKG1fbmFtZXNwYWNlVVJJID09IHN0YXJBdG9tKQotICAgICAgICBub2RlKCktPnJl
bW92ZUNhY2hlZFRhZ05vZGVMaXN0KHRoaXMsIG1fbG9jYWxOYW1lKTsKKyAgICAgICAgbV9ub2Rl
LT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCBEeW5hbWljTm9k
ZUxpc3Q6OlRhZ05vZGVMaXN0VHlwZSwgbV9sb2NhbE5hbWUpOwogICAgIGVsc2UKLSAgICAgICAg
bm9kZSgpLT5yZW1vdmVDYWNoZWRUYWdOb2RlTGlzdCh0aGlzLCBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCBtX2xvY2FsTmFtZSwgbV9uYW1lc3BhY2VVUkkpKTsKKyAgICAgICAgbV9ub2RlLT5ub2Rl
TGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoUXVhbGlmaWVkTmFtZSh0aGlzLCBtX25hbWVzcGFjZVVS
SSwgbV9sb2NhbE5hbWUpOwogfQogCiBib29sIFRhZ05vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVt
ZW50KiB0ZXN0Tm9kZSkgY29uc3QKQEAgLTU0LDggKzU1LDggQEAgYm9vbCBUYWdOb2RlTGlzdDo6
bm9kZU1hdGNoZXMoRWxlbWVudCogdAogICAgIHJldHVybiBtX25hbWVzcGFjZVVSSSA9PSBzdGFy
QXRvbSB8fCBtX25hbWVzcGFjZVVSSSA9PSB0ZXN0Tm9kZS0+bmFtZXNwYWNlVVJJKCk7CiB9CiAK
LUhUTUxUYWdOb2RlTGlzdDo6SFRNTFRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5v
ZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSkKLSAgICA6IFRhZ05vZGVMaXN0KHJvb3ROb2RlLCBuYW1lc3BhY2VVUkksIGxv
Y2FsTmFtZSkKK0hUTUxUYWdOb2RlTGlzdDo6SFRNTFRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQorICAgIDogVGFnTm9k
ZUxpc3Qocm9vdE5vZGUsIHN0YXJBdG9tLCBsb2NhbE5hbWUpCiAgICAgLCBtX2xvd2VyZWRMb2Nh
bE5hbWUobG9jYWxOYW1lLmxvd2VyKCkpCiB7CiB9CkBAIC02OSw3ICs3MCw4IEBAIGJvb2wgSFRN
TFRhZ05vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW4KICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9uYW1lc3BhY2VVUkkgPT0gc3RhckF0b20gfHwgbV9u
YW1lc3BhY2VVUkkgPT0gdGVzdE5vZGUtPm5hbWVzcGFjZVVSSSgpOworICAgIEFTU0VSVChtX25h
bWVzcGFjZVVSSSA9PSBzdGFyQXRvbSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCShyZXZpc2lvbiAx
MjA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOSArMzQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGFnTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5v
ZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbE5hbWUpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChuYW1l
c3BhY2VVUkkgIT0gc3RhckF0b20pOwogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
YWdOb2RlTGlzdChyb290Tm9kZSwgbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpKTsKICAgICAgICAg
fQogCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PiBjcmVhdGUoUGFzc1Jl
ZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFnTm9kZUxpc3Qocm9vdE5v
ZGUsIHN0YXJBdG9tLCBsb2NhbE5hbWUpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZpcnR1YWwg
flRhZ05vZGVMaXN0KCk7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC01MCwxMyArNTYsMTMgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSFRNTFRhZ05vZGVMaXN0IDogcHVibGljIFRh
Z05vZGVMaXN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRhZ05v
ZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MVGFnTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5v
ZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MVGFnTm9kZUxpc3Qocm9vdE5vZGUs
IG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEhUTUxUYWdOb2RlTGlzdChyb290Tm9kZSwgbG9jYWxOYW1lKSk7CiAgICAgICAgIH0KIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIEhUTUxUYWdOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJv
b3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbE5hbWUpOworICAgICAgICBIVE1MVGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2Rl
PiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTIwODY2KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcsMTMgKzQ3LDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTGFiZWxhYmxlRWxlbWVudDo6bAog
ICAgIGlmICghZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBOb2RlTGlzdHNO
b2RlRGF0YSogbm9kZUxpc3RzID0gTm9kZTo6ZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxp
c3RzKHRoaXMpOwotICAgIGlmIChub2RlTGlzdHMtPm1fbGFiZWxzTm9kZUxpc3RDYWNoZSkKLSAg
ICAgICAgcmV0dXJuIG5vZGVMaXN0cy0+bV9sYWJlbHNOb2RlTGlzdENhY2hlOwotCi0gICAgUmVm
UHRyPExhYmVsc05vZGVMaXN0PiBsaXN0ID0gTGFiZWxzTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzKTsK
LSAgICBub2RlTGlzdHMtPm1fbGFiZWxzTm9kZUxpc3RDYWNoZSA9IGxpc3QuZ2V0KCk7Ci0gICAg
cmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgIHJldHVybiBOb2RlOjplbnN1cmVSYXJlRGF0YSgp
LT5lbnN1cmVOb2RlTGlzdHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8TGFiZWxzTm9k
ZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3RUeXBlLCBzdGFyQXRv
bSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYmNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvTGFiZWxzTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
TGFiZWxzTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMjA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0xhYmVsc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMzQsMjAgKzM1LDE5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIExhYmVsc05vZGVMaXN0OjpMYWJlbHNOb2RlTGlzdChOb2RlKiBmb3JOb2RlKQogICAg
IDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChmb3JOb2RlLCBSb290ZWRBdERvY3VtZW50KQotICAg
ICwgbV9mb3JOb2RlKGZvck5vZGUpCiB7Ci0gICAgbV9mb3JOb2RlLT5kb2N1bWVudCgpLT5yZWdp
c3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CisgICAgZG9jdW1lbnQoKS0+cmVnaXN0
ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiBMYWJlbHNOb2RlTGlzdDo6fkxh
YmVsc05vZGVMaXN0KCkKIHsKLSAgICBtX2Zvck5vZGUtPnJlbW92ZUNhY2hlZExhYmVsc05vZGVM
aXN0KHRoaXMpOwotICAgIG1fZm9yTm9kZS0+ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckR5bmFtaWNT
dWJ0cmVlTm9kZUxpc3QodGhpcyk7CisgICAgbV9ub2RlLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2Fj
aGVXaXRoQXRvbWljTmFtZSh0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0VHlw
ZSwgc3RhckF0b20pOworICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KHRoaXMpOwogfSAKICAgICAKIGJvb2wgTGFiZWxzTm9kZUxpc3Q6Om5vZGVNYXRjaGVz
KEVsZW1lbnQqIHRlc3ROb2RlKSBjb25zdAogewotICAgIHJldHVybiB0ZXN0Tm9kZS0+aGFzVGFn
TmFtZShsYWJlbFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHRlc3ROb2Rl
KS0+Y29udHJvbCgpID09IG1fZm9yTm9kZTsKKyAgICByZXR1cm4gdGVzdE5vZGUtPmhhc1RhZ05h
bWUobGFiZWxUYWcpICYmIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPih0ZXN0Tm9kZSkt
PmNvbnRyb2woKSA9PSBtX25vZGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmgJKHJldmlzaW9uIDEyMDg2NikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExhYmVsc05vZGVMaXN0IDog
cHVibGljIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPExhYmVsc05vZGVMaXN0PiBjcmVhdGUoTm9kZSogZm9yTm9kZSkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxMYWJlbHNOb2RlTGlzdD4gY3JlYXRlKE5vZGUqIGZvck5vZGUsIGNvbnN0IEF0
b21pY1N0cmluZyYpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExhYmVsc05v
ZGVMaXN0KGZvck5vZGUpKTsKICAgICB9CkBAIC00Miw5ICs0Miw2IEBAIHByb3RlY3RlZDoKICAg
ICBMYWJlbHNOb2RlTGlzdChOb2RlKiBmb3JOb2RlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2Rl
TWF0Y2hlcyhFbGVtZW50KikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IG1f
Zm9yTm9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9SYWRpb05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIwODY2KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjMgKzMxLDIz
IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVJhcmVEYXRh
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotUmFkaW9Ob2RlTGlzdDo6UmFkaW9Ob2RlTGlzdChFbGVtZW50KiBiYXNlRWxlbWVudCwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKQotICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChiYXNl
RWxlbWVudCwgYmFzZUVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykgPyBSb290ZWRBdERvY3Vt
ZW50IDogUm9vdGVkQXROb2RlKQorUmFkaW9Ob2RlTGlzdDo6UmFkaW9Ob2RlTGlzdChOb2RlKiBy
b290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQorICAgIDogRHluYW1pY1N1YnRyZWVO
b2RlTGlzdChyb290Tm9kZSwgcm9vdE5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykgPyBSb290ZWRB
dERvY3VtZW50IDogUm9vdGVkQXROb2RlKQogICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX2Jh
c2VFbGVtZW50KGJhc2VFbGVtZW50KQogewotICAgIG1fYmFzZUVsZW1lbnQtPmRvY3VtZW50KCkt
PnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLT5y
ZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CiB9CiAKIFJhZGlvTm9kZUxpc3Q6
On5SYWRpb05vZGVMaXN0KCkKIHsKLSAgICBtX2Jhc2VFbGVtZW50LT5yZW1vdmVDYWNoZWRSYWRp
b05vZGVMaXN0KHRoaXMsIG1fbmFtZSk7Ci0gICAgbV9iYXNlRWxlbWVudC0+ZG9jdW1lbnQoKS0+
dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CisgICAgbV9ub2RlLT5ub2Rl
TGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCBEeW5hbWljTm9kZUxpc3Q6
OlJhZGlvTm9kZUxpc3RUeXBlLCBtX25hbWUpOworICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJE
eW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiBzdGF0aWMgaW5saW5lIEhUTUxJbnB1
dEVsZW1lbnQqIHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQoTm9kZSogbm9kZSkKQEAgLTg2LDEz
ICs4NiwxMyBAQCB2b2lkIFJhZGlvTm9kZUxpc3Q6OnNldFZhbHVlKGNvbnN0IFN0cmluCiBib29s
IFJhZGlvTm9kZUxpc3Q6OmNoZWNrRWxlbWVudE1hdGNoZXNSYWRpb05vZGVMaXN0RmlsdGVyKEVs
ZW1lbnQqIHRlc3RFbGVtZW50KSBjb25zdAogewogICAgIEFTU0VSVCh0ZXN0RWxlbWVudC0+aGFz
VGFnTmFtZShvYmplY3RUYWcpIHx8IHRlc3RFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgp
KTsKLSAgICBpZiAobV9iYXNlRWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgeworICAgIGlm
IChtX25vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpIHsKICAgICAgICAgSFRNTEZvcm1FbGVtZW50
KiBmb3JtRWxlbWVudCA9IDA7CiAgICAgICAgIGlmICh0ZXN0RWxlbWVudC0+aGFzVGFnTmFtZShv
YmplY3RUYWcpKQogICAgICAgICAgICAgZm9ybUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MT2Jq
ZWN0RWxlbWVudCo+KHRlc3RFbGVtZW50KS0+Zm9ybSgpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBmb3JtRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPih0
ZXN0RWxlbWVudCktPmZvcm0oKTsKLSAgICAgICAgaWYgKCFmb3JtRWxlbWVudCB8fCBmb3JtRWxl
bWVudCAhPSBtX2Jhc2VFbGVtZW50KQorICAgICAgICBpZiAoIWZvcm1FbGVtZW50IHx8IGZvcm1F
bGVtZW50ICE9IG1fbm9kZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5oCShyZXZpc2lvbiAxMjA4NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
OSArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJhZGlvTm9kZUxpc3QgOiBw
dWJsaWMgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8UmFkaW9Ob2RlTGlzdD4gY3JlYXRlKEVsZW1lbnQqIGJhc2VFbGVtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmFkaW9Ob2RlTGlzdD4g
Y3JlYXRlKE5vZGUqIHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJhZGlvTm9kZUxpc3QoYmFzZUVsZW1lbnQsIG5h
bWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSYWRpb05vZGVMaXN0KHJvb3ROb2Rl
LCBuYW1lKSk7CiAgICAgfQogCiAgICAgflJhZGlvTm9kZUxpc3QoKTsKQEAgLTUwLDExICs1MCwx
MCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBj
b25zdDsKIAogcHJpdmF0ZToKLSAgICBSYWRpb05vZGVMaXN0KEVsZW1lbnQqLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUpOworICAgIFJhZGlvTm9kZUxpc3QoTm9kZSosIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSk7CiAgICAgYm9vbCBjaGVja0VsZW1lbnRNYXRjaGVzUmFkaW9Ob2RlTGlzdEZp
bHRlcihFbGVtZW50KikgY29uc3Q7CiAKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwotICAgIFJl
ZlB0cjxFbGVtZW50PiBtX2Jhc2VFbGVtZW50OwogfTsKIAogfSAvLyBuYW1lcHNhY2UK
</data>
<flag name="review"
          id="156540"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>