<?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>173129</bug_id>
          
          <creation_ts>2017-06-08 22:13:35 -0700</creation_ts>
          <short_desc>Move TreeScope::adoptIfNeeded to Node and rename it to setTreeScopeRecursively</short_desc>
          <delta_ts>2017-06-09 01:59:24 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1317203</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-08 22:13:35 -0700</bug_when>
    <thetext>We should move TreeScope::adoptIfNeeded to Nice and rename it to setTreeScopeRecursively.
This basically brings back the code prior to https://trac.webkit.org/changeset/104528.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317215</commentid>
    <comment_count>1</comment_count>
      <attachid>312383</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-08 22:34:45 -0700</bug_when>
    <thetext>Created attachment 312383
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317217</commentid>
    <comment_count>2</comment_count>
      <attachid>312384</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-08 22:36:46 -0700</bug_when>
    <thetext>Created attachment 312384
Fixed a typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317218</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-06-08 22:38:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/32667282&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317225</commentid>
    <comment_count>4</comment_count>
      <attachid>312389</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-08 23:01:29 -0700</bug_when>
    <thetext>Created attachment 312389
Fixed relase builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317242</commentid>
    <comment_count>5</comment_count>
      <attachid>312394</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-08 23:47:27 -0700</bug_when>
    <thetext>Created attachment 312394
Fixed release builds for real</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317265</commentid>
    <comment_count>6</comment_count>
      <attachid>312394</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-06-09 00:40:58 -0700</bug_when>
    <thetext>Comment on attachment 312394
Fixed release builds for real

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

&gt; Source/WebCore/dom/Node.cpp:1926
&gt; +#if !ASSERT_DISABLED || ENABLE(SECURITY_ASSERTIONS)
&gt; +class DidMoveToNewDocumentAssertionScope {

Maybe we should add NodeAssertions.h or similar at some point for this sort of things? The main files are pretty bloated already.

&gt; Source/WebCore/dom/Node.cpp:2019
&gt; +        if (!is&lt;Element&gt;(*node))
&gt; +            continue;

It might make sense to add &apos;element&apos; local right after this check and use it instead of &apos;node&apos;. The following code will read better and may even get less branchy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317299</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-09 01:48:28 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #6)
&gt; Comment on attachment 312394 [details]
&gt; Fixed release builds for real
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=312394&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Node.cpp:1926
&gt; &gt; +#if !ASSERT_DISABLED || ENABLE(SECURITY_ASSERTIONS)
&gt; &gt; +class DidMoveToNewDocumentAssertionScope {
&gt; 
&gt; Maybe we should add NodeAssertions.h or similar at some point for this sort
&gt; of things? The main files are pretty bloated already.

That sounds like a good idea. There&apos;s already NoEventDispatchAssertion.h so maybe we could rename hat to NodeAssertions.h and move all these assertions there. Although this particular one is local to Node.cpp so we probably don&apos;t need to put into the header.

&gt; &gt; Source/WebCore/dom/Node.cpp:2019
&gt; &gt; +        if (!is&lt;Element&gt;(*node))
&gt; &gt; +            continue;
&gt; 
&gt; It might make sense to add &apos;element&apos; local right after this check and use it
&gt; instead of &apos;node&apos;. The following code will read better and may even get less
&gt; branchy.

Fixed that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317306</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-06-09 01:59:24 -0700</bug_when>
    <thetext>Committed r217972: &lt;http://trac.webkit.org/changeset/217972&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312383</attachid>
            <date>2017-06-08 22:34:45 -0700</date>
            <delta_ts>2017-06-08 22:36:45 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-173129-20170608223444.patch</filename>
            <type>text/plain</type>
            <size>23988</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNzk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE3LTA2LTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgVHJlZVNjb3BlOjphZG9w
dElmTmVlZGVkIHRvIE5vZGUgYW5kIHJlbmFtZSBpdCB0byBzZXRUcmVlU2NvcGVSZWN1cnNpdmVs
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMTI5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1l
ZCBUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQgdG8gc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkgYW5k
IG1vdmVkIHRvIE5vZGUuCisKKyAgICAgICAgVGhlIG9sZCBuYW1lIHdhcyByZWFsbHkgY29uZnVz
aW5nIGJlY2F1c2UgZHVlIHRvIHRoZSBleGlzdGVuY2Ugb2YgRG9jdW1lbnQ6OmFkb3B0Tm9kZSwg
YSBET00gQVBJLAorICAgICAgICB3aGljaCByZW1vdmVzIHRoZSBhZG9wdGVkIG5vZGUgZnJvbSBp
dHMgcGFyZW50IGlmIHRoZXJlIHdhcyBvbmUgYmVmb3JlIGFkb3B0aW5nIHRoZSBub2RlLgorICAg
ICAgICBNb3N0IGNvbmZ1c2luZ2x5LCB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBUcmVlU2NvcGU6OmFk
b3B0SWZOZWVkZWQuCisKKyAgICAgICAgQWxzbyBpbmxpbmVkIHRoZSB0cmVlIHNjb3BlIGNoZWNr
IHRvIGF2b2lkIGNhbGxpbmcgdG8gbW92ZVRyZWVUb05ld1Njb3BlIHdoZW4gdGhlcmUgaXMgbm90
aGluZyB0byBkby4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIHRlc3RzIGNvY2Vy
IHRoaXMuCisKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRy
OjpkZXRhY2hGcm9tRWxlbWVudFdpdGhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjph
dHRhY2hUb0VsZW1lbnQpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnRha2VBbGxDaGlsZHJlbkZyb20pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
YWluZXJOb2RlOjpyZW1vdmVCZXR3ZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5v
ZGU6OnJlcGxhY2VBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2Rl
OjphcHBlbmRDaGlsZFdpdGhvdXRQcmVJbnNlcnRpb25WYWxpZGl0eUNoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlckFwcGVuZENoaWxkKToKKyAgICAgICAgKiBk
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkQ2hp
bGROb2Rlc1RvRGVsZXRpb25RdWV1ZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZG9wdE5vZGUpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZUF0dHIpOgorICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpZE1vdmVUb05ld0RvY3VtZW50
QXNzZXJ0aW9uU2NvcGUpOiBBZGRlZC4gVGhlIG9sZCBhc3NlcnRpb24gd2Fzbid0IHN1ZmZpY2ll
bnQgd2hlbgorICAgICAgICBIVE1MVGVtcGxhdGVFbGVtZW50IG1hZGUgYSByZWN1cnNpdmUgY2Fs
bCB0byBzZXRUcmVlU2NvcGVSZWN1cnNpdmVseS4KKyAgICAgICAgKFdlYkNvcmU6OkRpZE1vdmVU
b05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGU6OkRpZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0aW9u
U2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25T
Y29wZTo6fkRpZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZTo6ZGlkUmVjaWV2ZUNhbGwp
OgorICAgICAgICAoV2ViQ29yZTo6bW92ZU5vZGVUb05ld0RvY3VtZW50KTogTW92ZWQgZnJvbSBU
cmVlU2NvcGUuIENhbGxzIHRvIGluY3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50CisgICAgICAg
IGFuZCBkZWNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCB0byBOb2RlOjpkaWRNb3ZlVG9OZXdE
b2N1bWVudC4gVGhpcyBmdW5jdGlvbiBpcyBub3cgZWxpbWluYXRlZAorICAgICAgICBpbiBhIHJl
bGVhc2UgYnVpbGQuCisgICAgICAgIChXZWJDb3JlOjptb3ZlU2hhZG93VHJlZVRvTmV3RG9jdW1l
bnQpOiBNb3ZlZCBmcm9tIFRyZWVTY29wZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om1vdmVU
cmVlVG9OZXdTY29wZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlkTW92ZVRv
TmV3RG9jdW1lbnQpOiBTZWUgdGhlIGRlc2NyaXB0aW9uIGZvciBtb3ZlTm9kZVRvTmV3RG9jdW1l
bnQgYWJvdmUuCisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmlzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQpOiBNb3ZlZCB0byBhdm9pZCBoYXZpbmcgaXRzIG93
biBwcm90ZWN0ZWQgc2VjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldElzUGFyc2lu
Z0NoaWxkcmVuRmluaXNoZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFy
SXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkpOiBNb3ZlZCBmcm9tIFRyZWVTY29wZTo6YWRvcHRJ
Zk5lZWRlZC4KKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFkb3dSb290Ojp+U2hhZG93Um9vdCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjptb3ZlVHJlZVRvTmV3U2NvcGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjplbnN1cmVEaWRNb3ZlVG9OZXdEb2N1bWVu
dFdhc0NhbGxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6Om1vdmVO
b2RlVG9OZXdEb2N1bWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6
Om1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1Ry
ZWVTY29wZS5oOgorICAgICAgICAqIGh0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGVtcGxhdGVFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudCk6
CisKIDIwMTctMDYtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBbaU9TXSBMb3dQb3dlck1vZGVOb3RpZmllciBub3RpZmllcyBjbGllbnQgb24gbm9uLW1haW4g
dGhyZWFkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vQXR0ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCB2
b2lkIEF0dHI6OmRldGFjaEZyb21FbGVtZW50V2l0aFZhbHVlKGNvCiAgICAgQVNTRVJUKG1fc3Rh
bmRhbG9uZVZhbHVlLmlzTnVsbCgpKTsKICAgICBtX3N0YW5kYWxvbmVWYWx1ZSA9IHZhbHVlOwog
ICAgIG1fZWxlbWVudCA9IG51bGxwdHI7Ci0gICAgZG9jdW1lbnQoKS5hZG9wdElmTmVlZGVkKCp0
aGlzKTsKKyAgICBzZXRUcmVlU2NvcGVSZWN1cnNpdmVseShkb2N1bWVudCgpKTsKIH0KIAogdm9p
ZCBBdHRyOjphdHRhY2hUb0VsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKQEAgLTE0Myw3ICsxNDMs
NyBAQCB2b2lkIEF0dHI6OmF0dGFjaFRvRWxlbWVudChFbGVtZW50JiBlbGVtCiAgICAgQVNTRVJU
KCFtX2VsZW1lbnQpOwogICAgIG1fZWxlbWVudCA9ICZlbGVtZW50OwogICAgIG1fc3RhbmRhbG9u
ZVZhbHVlID0gbnVsbEF0b207Ci0gICAgZWxlbWVudC50cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVk
KCp0aGlzKTsKKyAgICBzZXRUcmVlU2NvcGVSZWN1cnNpdmVseShlbGVtZW50LnRyZWVTY29wZSgp
KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNp
b24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBDb250YWluZXJOb2RlOjp0YWtlQWxs
Q2hpbGRyZW5Gcm9tKAogICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghY2hpbGQtPnBhcmVudE5vZGUoKSAmJiAmY2hpbGQtPnRyZWVTY29w
ZSgpID09ICZ0cmVlU2NvcGUoKSk7CiAgICAgICAgIEFTU0VSVCghZW5zdXJlUHJlSW5zZXJ0aW9u
VmFsaWRpdHkoY2hpbGQsIG51bGxwdHIpLmhhc0V4Y2VwdGlvbigpKTsKLSAgICAgICAgdHJlZVNj
b3BlKCkuYWRvcHRJZk5lZWRlZChjaGlsZCk7CisgICAgICAgIGNoaWxkLT5zZXRUcmVlU2NvcGVS
ZWN1cnNpdmVseSh0cmVlU2NvcGUoKSk7CiAgICAgICAgIHBhcnNlckFwcGVuZENoaWxkKGNoaWxk
KTsKICAgICB9CiB9CkBAIC0yOTAsNyArMjkwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFp
bmVyTm9kZTo6aW5zZXJ0QgogICAgICAgICB7CiAgICAgICAgICAgICBOb0V2ZW50RGlzcGF0Y2hB
c3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwogCi0gICAgICAgICAgICB0cmVlU2NvcGUo
KS5hZG9wdElmTmVlZGVkKGNoaWxkKTsKKyAgICAgICAgICAgIGNoaWxkLT5zZXRUcmVlU2NvcGVS
ZWN1cnNpdmVseSh0cmVlU2NvcGUoKSk7CiAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24o
bmV4dCwgY2hpbGQpOwogICAgICAgICB9CiAKQEAgLTQ2Niw3ICs0NjYsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBDb250YWluZXJOb2RlOjpyZXBsYWNlCiAKICAgICAgICAgewogICAgICAgICAgICAg
Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKLSAgICAgICAg
ICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoY2hpbGQpOworICAgICAgICAgICAgY2hpbGQt
PnNldFRyZWVTY29wZVJlY3Vyc2l2ZWx5KHRyZWVTY29wZSgpKTsKICAgICAgICAgICAgIGlmIChy
ZWZDaGlsZCkKICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24oKnJlZkNoaWxkLCBj
aGlsZC5nZXQoKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBD
b250YWluZXJOb2RlOjpyZW1vdmVCZXR3ZWVuKE5vZGUqIAogICAgIEFTU0VSVCghb2xkQ2hpbGQu
bmV4dFNpYmxpbmcoKSk7CiAgICAgb2xkQ2hpbGQuc2V0UGFyZW50Tm9kZShudWxscHRyKTsKIAot
ICAgIGRvY3VtZW50KCkuYWRvcHRJZk5lZWRlZChvbGRDaGlsZCk7CisgICAgb2xkQ2hpbGQuc2V0
VHJlZVNjb3BlUmVjdXJzaXZlbHkoZG9jdW1lbnQoKSk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9k
ZTo6cGFyc2VyUmVtb3ZlQ2hpbGQoTm9kZSYgb2xkQ2hpbGQpCkBAIC02NDEsNyArNjQxLDcgQEAg
dm9pZCBDb250YWluZXJOb2RlOjpyZXBsYWNlQWxsQ2hpbGRyZW4oUgogICAgIENoaWxkTGlzdE11
dGF0aW9uU2NvcGUgbXV0YXRpb24oKnRoaXMpOwogCiAgICAgLy8gSWYgbm9kZSBpcyBub3QgbnVs
bCwgYWRvcHQgbm9kZSBpbnRvIHBhcmVudCdzIG5vZGUgZG9jdW1lbnQuCi0gICAgdHJlZVNjb3Bl
KCkuYWRvcHRJZk5lZWRlZChub2RlKTsKKyAgICBub2RlLT5zZXRUcmVlU2NvcGVSZWN1cnNpdmVs
eSh0cmVlU2NvcGUoKSk7CiAKICAgICAvLyBSZW1vdmUgYWxsIHBhcmVudCdzIGNoaWxkcmVuLCBp
biB0cmVlIG9yZGVyLgogICAgIHdpbGxSZW1vdmVDaGlsZHJlbigqdGhpcyk7CkBAIC03NTYsNyAr
NzU2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFpbmVyTm9kZTo6YXBwZW5kQwogICAgICAg
ICAvLyBBcHBlbmQgY2hpbGQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAogICAgICAgICB7CiAgICAg
ICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwot
ICAgICAgICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZChjaGlsZCk7CisgICAgICAgICAg
ICBjaGlsZC0+c2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkodHJlZVNjb3BlKCkpOwogICAgICAgICAg
ICAgYXBwZW5kQ2hpbGRDb21tb24oY2hpbGQpOwogICAgICAgICB9CiAKQEAgLTc4MCw3ICs3ODAs
NyBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckFwcGVuZENoaWxkKE5vCiAgICAgICAgICAg
ICBkb2N1bWVudCgpLmFkb3B0Tm9kZShuZXdDaGlsZCk7CiAKICAgICAgICAgYXBwZW5kQ2hpbGRD
b21tb24obmV3Q2hpbGQpOwotICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKG5ld0No
aWxkKTsKKyAgICAgICAgbmV3Q2hpbGQuc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkodHJlZVNjb3Bl
KCkpOwogICAgIH0KIAogICAgIG5ld0NoaWxkLnVwZGF0ZUFuY2VzdG9yQ29ubmVjdGVkU3ViZnJh
bWVDb3VudEZvckluc2VydGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzksNyArMTc5LDcgQEAgdm9pZCBhZGRDaGlsZE5vZGVzVG9EZWxldGlvblF1ZXVlKE5vZGUqJgog
ICAgICAgICAgICAgdGFpbCA9IG5vZGU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBS
ZWY8Tm9kZT4gcHJvdGVjdCgqbm9kZSk7IC8vIHJlbW92ZWRGcm9tRG9jdW1lbnQgbWF5IHJlbW92
ZSByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgotICAgICAgICAgICAgY29udGFp
bmVyLmRvY3VtZW50KCkuYWRvcHRJZk5lZWRlZCgqbm9kZSk7CisgICAgICAgICAgICBub2RlLT5z
ZXRUcmVlU2NvcGVSZWN1cnNpdmVseShjb250YWluZXIuZG9jdW1lbnQoKSk7CiAgICAgICAgICAg
ICBpZiAobm9kZS0+aXNJblRyZWVTY29wZSgpKQogICAgICAgICAgICAgICAgIG5vdGlmeUNoaWxk
Tm9kZVJlbW92ZWQoY29udGFpbmVyLCAqbm9kZSk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTighbm9kZS0+aXNJblRyZWVTY29wZSgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTkxLDcgKzk5MSw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxOb2RlPj4gRG9jdW1lbnQ6OmFkb3B0Tm8KICAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oIXNvdXJjZS5wYXJlbnROb2RlKCkpOwogICAgIH0KIAotICAgIGFk
b3B0SWZOZWVkZWQoc291cmNlKTsKKyAgICBzb3VyY2Uuc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHko
KnRoaXMpOwogCiAgICAgcmV0dXJuIFJlZjxOb2RlPiB7IHNvdXJjZSB9OwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEyLDcgKzM0MTIsNyBAQCBSZWY8QXR0
cj4gRWxlbWVudDo6ZW5zdXJlQXR0cihjb25zdCBRdWFsCiAgICAgUmVmUHRyPEF0dHI+IGF0dHJO
b2RlID0gZmluZEF0dHJOb2RlSW5MaXN0KGF0dHJOb2RlTGlzdCwgbmFtZSk7CiAgICAgaWYgKCFh
dHRyTm9kZSkgewogICAgICAgICBhdHRyTm9kZSA9IEF0dHI6OmNyZWF0ZSgqdGhpcywgbmFtZSk7
Ci0gICAgICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoKmF0dHJOb2RlKTsKKyAgICAgICAg
YXR0ck5vZGUtPnNldFRyZWVTY29wZVJlY3Vyc2l2ZWx5KHRyZWVTY29wZSgpKTsKICAgICAgICAg
YXR0ck5vZGVMaXN0LmFwcGVuZChhdHRyTm9kZSk7CiAgICAgfQogICAgIHJldHVybiBhdHRyTm9k
ZS5yZWxlYXNlTm9uTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjE3OTU3
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIy
LDEwICsxOTIyLDEyNSBAQCBFdmVudFRhcmdldEludGVyZmFjZSBOb2RlOjpldmVudFRhcmdldElu
CiAgICAgcmV0dXJuIE5vZGVFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKKyNpZiAhQVNT
RVJUX0RJU0FCTEVEIHx8IEVOQUJMRShTRUNVUklUWV9BU1NFUlRJT05TKQorY2xhc3MgRGlkTW92
ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZSB7CitwdWJsaWM6CisgICAgRGlkTW92ZVRvTmV3
RG9jdW1lbnRBc3NlcnRpb25TY29wZShOb2RlJiBub2RlLCBEb2N1bWVudCYgb2xkRG9jdW1lbnQs
IERvY3VtZW50JiBuZXdEb2N1bWVudCkKKyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAg
LCBtX29sZERvY3VtZW50KG9sZERvY3VtZW50KQorICAgICAgICAsIG1fbmV3RG9jdW1lbnQobmV3
RG9jdW1lbnQpCisgICAgICAgICwgbV9wcmV2aW91c1Njb3BlKHNfc2NvcGUpCisgICAgeworICAg
ICAgICBzX3Njb3BlID0gdGhpczsKKyAgICB9CisKKyAgICB+RGlkTW92ZVRvTmV3RG9jdW1lbnRB
c3NlcnRpb25TY29wZSgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihtX2NhbGxlZCk7CisgICAgICAgIHNfc2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgZGlkUmVjaWV2ZUNhbGwoTm9kZSYgbm9kZSwgRG9jdW1l
bnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCisgICAgeworICAgICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzX3Njb3BlKTsKKyAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXNfc2NvcGUtPm1fY2FsbGVkKTsKKyAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oJnNfc2NvcGUtPm1fbm9kZSA9PSAmbm9k
ZSk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCZzX3Njb3BlLT5t
X29sZERvY3VtZW50ID09ICZvbGREb2N1bWVudCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCZzX3Njb3BlLT5tX25ld0RvY3VtZW50ID09ICZuZXdEb2N1bWVudCk7
CisgICAgICAgIHNfc2NvcGUtPm1fY2FsbGVkID0gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgTm9kZSYgbV9ub2RlOworICAgIERvY3VtZW50JiBtX29sZERvY3VtZW50OworICAgIERvY3Vt
ZW50JiBtX25ld0RvY3VtZW50OworICAgIGJvb2wgbV9jYWxsZWQgeyBmYWxzZSB9OworICAgIERp
ZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGUqIG1fcHJldmlvdXNTY29wZTsKKworICAg
IHN0YXRpYyBEaWRNb3ZlVG9OZXdEb2N1bWVudEFzc2VydGlvblNjb3BlKiBzX3Njb3BlOworfTsK
KworRGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZSogRGlkTW92ZVRvTmV3RG9jdW1l
bnRBc3NlcnRpb25TY29wZTo6c19zY29wZSA9IG51bGxwdHI7CisKKyNlbHNlCitjbGFzcyBEaWRN
b3ZlVG9OZXdEb2N1bWVudEFzc2VydGlvblNjb3BlIHsKKyAgICBEaWRNb3ZlVG9OZXdEb2N1bWVu
dEFzc2VydGlvblNjb3BlKE5vZGUmLCBEb2N1bWVudCYsIERvY3VtZW50JikKKyAgICB7IH0KK30K
KyNlbmRpZgorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIG1vdmVOb2RlVG9OZXdEb2N1bWVu
dChOb2RlJiBub2RlLCBEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVu
dCkKK3sKKyAgICBBU1NFUlQoIW5vZGUuaXNDb25uZWN0ZWQoKSB8fCAmb2xkRG9jdW1lbnQgIT0g
Jm5ld0RvY3VtZW50KTsKKyAgICBEaWRNb3ZlVG9OZXdEb2N1bWVudEFzc2VydGlvblNjb3BlIHNj
b3BlKG5vZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CisgICAgbm9kZS5kaWRNb3ZlVG9O
ZXdEb2N1bWVudChvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworfQorCitzdGF0aWMgdm9pZCBt
b3ZlU2hhZG93VHJlZVRvTmV3RG9jdW1lbnQoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgRG9jdW1l
bnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCit7CisgICAgZm9yIChOb2Rl
KiBub2RlID0gJnNoYWRvd1Jvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpu
b2RlLCAmc2hhZG93Um9vdCkpIHsKKyAgICAgICAgbW92ZU5vZGVUb05ld0RvY3VtZW50KCpub2Rl
LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgICAgICBpZiAoYXV0byogc2hhZG93ID0g
bm9kZS0+c2hhZG93Um9vdCgpKQorICAgICAgICAgICAgbW92ZVNoYWRvd1RyZWVUb05ld0RvY3Vt
ZW50KCpzaGFkb3csIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CisgICAgfQorfQorCit2b2lk
IE5vZGU6Om1vdmVUcmVlVG9OZXdTY29wZShOb2RlJiByb290LCBUcmVlU2NvcGUmIG9sZFNjb3Bl
LCBUcmVlU2NvcGUmIG5ld1Njb3BlKQoreworICAgIEFTU0VSVCgmb2xkU2NvcGUgIT0gJm5ld1Nj
b3BlKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigmcm9vdC50cmVlU2Nv
cGUoKSA9PSAmb2xkU2NvcGUpOworCisgICAgLy8gSWYgYW4gZWxlbWVudCBpcyBtb3ZlZCBmcm9t
IGEgZG9jdW1lbnQgYW5kIHRoZW4gZXZlbnR1YWxseSBiYWNrIGFnYWluIHRoZSBjb2xsZWN0aW9u
IGNhY2hlIGZvcgorICAgIC8vIHRoYXQgZWxlbWVudCBtYXkgY29udGFpbiBzdGFsZSBkYXRhIGFz
IGNoYW5nZXMgbWFkZSB0byBpdCB3aWxsIGhhdmUgdXBkYXRlZCB0aGUgRE9NVHJlZVZlcnNpb24K
KyAgICAvLyBvZiB0aGUgZG9jdW1lbnQgaXQgd2FzIG1vdmVkIHRvLiBCeSBpbmNyZWFzaW5nIHRo
ZSBET01UcmVlVmVyc2lvbiBvZiB0aGUgZG9uYXRpbmcgZG9jdW1lbnQgaGVyZQorICAgIC8vIHdl
IGVuc3VyZSB0aGF0IHRoZSBjb2xsZWN0aW9uIGNhY2hlIHdpbGwgYmUgaW52YWxpZGF0ZWQgYXMg
bmVlZGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgbW92ZWQgYmFjay4KKyAgICBEb2N1bWVudCYgb2xk
RG9jdW1lbnQgPSBvbGRTY29wZS5kb2N1bWVudFNjb3BlKCk7CisgICAgRG9jdW1lbnQmIG5ld0Rv
Y3VtZW50ID0gbmV3U2NvcGUuZG9jdW1lbnRTY29wZSgpOworICAgIGJvb2wgc2hvdWxkVXBkYXRl
RG9jdW1lbnRTY29wZSA9ICZvbGREb2N1bWVudCAhPSAmbmV3RG9jdW1lbnQ7CisgICAgaWYgKHNo
b3VsZFVwZGF0ZURvY3VtZW50U2NvcGUpIHsKKyAgICAgICAgb2xkRG9jdW1lbnQuaW5jcmVtZW50
UmVmZXJlbmNpbmdOb2RlQ291bnQoKTsKKyAgICAgICAgb2xkRG9jdW1lbnQuaW5jRE9NVHJlZVZl
cnNpb24oKTsKKyAgICB9CisKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSAmcm9vdDsgbm9kZTsgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUsICZyb290KSkgeworICAgICAgICBBU1NFUlQo
IW5vZGUtPmlzVHJlZVNjb3BlKCkpOworICAgICAgICBBU1NFUlQoJm5vZGUtPnRyZWVTY29wZSgp
ID09ICZvbGRTY29wZSk7CisgICAgICAgIG5vZGUtPnNldFRyZWVTY29wZShuZXdTY29wZSk7CisK
KyAgICAgICAgaWYgKHNob3VsZFVwZGF0ZURvY3VtZW50U2NvcGUpCisgICAgICAgICAgICBtb3Zl
Tm9kZVRvTmV3RG9jdW1lbnQoKm5vZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CisgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiBub2RlTGlzdHMgPSBub2RlLT5yYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSkKKyAgICAgICAgICAg
ICAgICBub2RlTGlzdHMtPmFkb3B0VHJlZVNjb3BlKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmIChub2RlLT5oYXNTeW50aGV0aWNBdHRyQ2hpbGROb2RlcygpKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIGF0dHIgOiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuYXR0ck5vZGVMaXN0KCkp
CisgICAgICAgICAgICAgICAgbW92ZVRyZWVUb05ld1Njb3BlKCphdHRyLCBvbGRTY29wZSwgbmV3
U2NvcGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8qIHNoYWRvdyA9IG5vZGUtPnNo
YWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oJnNoYWRvdy0+ZG9jdW1lbnQoKSA9PSAmb2xkRG9jdW1lbnQpOworICAgICAgICAgICAgc2hh
ZG93LT5zZXRQYXJlbnRUcmVlU2NvcGUobmV3U2NvcGUpOworICAgICAgICAgICAgaWYgKHNob3Vs
ZFVwZGF0ZURvY3VtZW50U2NvcGUpCisgICAgICAgICAgICAgICAgbW92ZVNoYWRvd1RyZWVUb05l
d0RvY3VtZW50KCpzaGFkb3csIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoc2hvdWxkVXBkYXRlRG9jdW1lbnRTY29wZSkKKyAgICAgICAgb2xk
RG9jdW1lbnQuZGVjcmVtZW50UmVmZXJlbmNpbmdOb2RlQ291bnQoKTsKK30KKwogdm9pZCBOb2Rl
OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBu
ZXdEb2N1bWVudCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigmZG9j
dW1lbnQoKSA9PSAmbmV3RG9jdW1lbnQpOwotICAgIFRyZWVTY29wZTo6ZW5zdXJlRGlkTW92ZVRv
TmV3RG9jdW1lbnRXYXNDYWxsZWQob2xkRG9jdW1lbnQpOworICAgIERpZE1vdmVUb05ld0RvY3Vt
ZW50QXNzZXJ0aW9uU2NvcGU6OmRpZFJlY2lldmVDYWxsKCp0aGlzLCBvbGREb2N1bWVudCwgbmV3
RG9jdW1lbnQpOworCisgICAgbmV3RG9jdW1lbnQuaW5jcmVtZW50UmVmZXJlbmNpbmdOb2RlQ291
bnQoKTsKKyAgICBvbGREb2N1bWVudC5kZWNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCgpOwog
CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIG5vZGVMaXN0cyA9
IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAyMTc5
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjks
NiArMzY5LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV90cmVlU2NvcGUpOwogICAgICAg
ICByZXR1cm4gKm1fdHJlZVNjb3BlOwogICAgIH0KKyAgICB2b2lkIHNldFRyZWVTY29wZVJlY3Vy
c2l2ZWx5KFRyZWVTY29wZSYpOwogICAgIHN0YXRpYyBwdHJkaWZmX3QgdHJlZVNjb3BlTWVtb3J5
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE5vZGUsIG1fdHJlZVNjb3BlKTsgfQog
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbm9kZSBpcyBhc3NvY2lhdGVkIHdpdGggYSBk
b2N1bWVudCBhbmQgaXMgaW4gaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnQncwpAQCAtNDkwLDYgKzQ5
MSw4IEBAIHB1YmxpYzoKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVy
ZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbDsgLy8gSW1wbGVtZW50ZWQgaW4gRG9jdW1l
bnQuaAogCisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBv
bGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KTsKKwogICAgIGJvb2wgYWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVuZXI+
JiYsIGNvbnN0IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyJiwgY29uc3QgTGlzdGVuZXJPcHRpb25zJikgb3ZlcnJpZGU7CiAKQEAgLTYxNCw2ICs2
MTcsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0RmxhZyhOb2RlRmxhZ3MgbWFzaykgY29u
c3QgeyBtX25vZGVGbGFncyB8PSBtYXNrOyB9IAogICAgIHZvaWQgY2xlYXJGbGFnKE5vZGVGbGFn
cyBtYXNrKSBjb25zdCB7IG1fbm9kZUZsYWdzICY9IH5tYXNrOyB9CiAKKyAgICBib29sIGlzUGFy
c2luZ0NoaWxkcmVuRmluaXNoZWQoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzUGFyc2luZ0No
aWxkcmVuRmluaXNoZWRGbGFnKTsgfQorICAgIHZvaWQgc2V0SXNQYXJzaW5nQ2hpbGRyZW5GaW5p
c2hlZCgpIHsgc2V0RmxhZyhJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyk7IH0KKyAgICB2
b2lkIGNsZWFySXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCgpIHsgY2xlYXJGbGFnKElzUGFyc2lu
Z0NoaWxkcmVuRmluaXNoZWRGbGFnKTsgfQorCiAgICAgZW51bSBDb25zdHJ1Y3Rpb25UeXBlIHsK
ICAgICAgICAgQ3JlYXRlT3RoZXIgPSBEZWZhdWx0Tm9kZUZsYWdzLAogICAgICAgICBDcmVhdGVU
ZXh0ID0gRGVmYXVsdE5vZGVGbGFncyB8IElzVGV4dEZsYWcsCkBAIC02MzEsOCArNjM4LDYgQEAg
cHJvdGVjdGVkOgogICAgIH07CiAgICAgTm9kZShEb2N1bWVudCYsIENvbnN0cnVjdGlvblR5cGUp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGRE
b2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KTsKLSAgICAKICAgICB2aXJ0dWFsIHZvaWQg
YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mKSBjb25zdCB7IH0K
IAogICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKEhhc1JhcmVE
YXRhRmxhZyk7IH0KQEAgLTY3MSw5ICs2NzYsMTEgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5KCk7CiAKICAgICB2b2lkIGFkanVzdFN0eWxlVmFsaWRpdHkoU3R5bGU6OlZhbGlkaXR5
LCBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZSk7Ci0gICAgCisKICAgICB2b2lkKiBvcGFxdWVSb290
U2xvdygpIGNvbnN0OwogCisgICAgc3RhdGljIHZvaWQgbW92ZVRyZWVUb05ld1Njb3BlKE5vZGUm
LCBUcmVlU2NvcGUmIG9sZFNjb3BlLCBUcmVlU2NvcGUmIG5ld1Njb3BlKTsKKwogICAgIGludCBt
X3JlZkNvdW50OwogICAgIG11dGFibGUgdWludDMyX3QgbV9ub2RlRmxhZ3M7CiAKQEAgLTY4Niwx
MSArNjkzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwog
ICAgICAgICBOb2RlUmFyZURhdGFCYXNlKiBtX3JhcmVEYXRhOwogICAgIH0gbV9kYXRhIHsgbnVs
bHB0ciB9OwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBpc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVk
KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyk7
IH0KLSAgICB2b2lkIHNldElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSB7IHNldEZsYWcoSXNQ
YXJzaW5nQ2hpbGRyZW5GaW5pc2hlZEZsYWcpOyB9Ci0gICAgdm9pZCBjbGVhcklzUGFyc2luZ0No
aWxkcmVuRmluaXNoZWQoKSB7IGNsZWFyRmxhZyhJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxh
Zyk7IH0KIH07CiAKICNpZm5kZWYgTkRFQlVHCkBAIC03OTAsNiArNzkyLDE0IEBAIGlubGluZSB2
b2lkIE5vZGU6OnNldEhhc1ZhbGlkU3R5bGUoKQogICAgIGNsZWFyRmxhZyhTdHlsZVJlc29sdXRp
b25TaG91bGRSZWNvbXBvc2l0ZUxheWVyRmxhZyk7CiB9CiAKK2lubGluZSB2b2lkIE5vZGU6OnNl
dFRyZWVTY29wZVJlY3Vyc2l2ZWx5KFRyZWVTY29wZSYgbmV3VHJlZVNjb3BlKQoreworICAgIEFT
U0VSVCghaXNEb2N1bWVudE5vZGUoKSk7CisgICAgQVNTRVJUKCFtX2RlbGV0aW9uSGFzQmVndW4p
OworICAgIGlmIChtX3RyZWVTY29wZSAhPSAmbmV3VHJlZVNjb3BlKQorICAgICAgICBtb3ZlVHJl
ZVRvTmV3U2NvcGUoKnRoaXMsICptX3RyZWVTY29wZSwgbmV3VHJlZVNjb3BlKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBA
IFNoYWRvd1Jvb3Q6On5TaGFkb3dSb290KCkKICAgICB3aWxsQmVEZWxldGVkRnJvbShkb2N1bWVu
dCgpKTsKIAogICAgIC8vIFdlIG11c3QgcmVtb3ZlIGFsbCBvZiBvdXIgY2hpbGRyZW4gZmlyc3Qg
YmVmb3JlIHRoZSBUcmVlU2NvcGUgZGVzdHJ1Y3RvcgotICAgIC8vIHJ1bnMgc28gd2UgZG9uJ3Qg
Z28gdGhyb3VnaCBUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQgZm9yIGVhY2ggY2hpbGQgd2l0aCBh
CisgICAgLy8gcnVucyBzbyB3ZSBkb24ndCBnbyB0aHJvdWdoIE5vZGU6OnNldFRyZWVTY29wZVJl
Y3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIHdpdGggYQogICAgIC8vIGRlc3RydWN0ZWQgdHJlZSBz
Y29wZSBpbiBlYWNoIGRlc2NlbmRhbnQuCiAgICAgcmVtb3ZlRGV0YWNoZWRDaGlsZHJlbigpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHJldmlzaW9uIDIxNzk1NykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsMTAx
ICszNjgsNiBAQCBFbGVtZW50KiBUcmVlU2NvcGU6OmZpbmRBbmNob3IoY29uc3QgU3RyCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgVHJlZVNjb3BlOjphZG9wdElmTmVlZGVkKE5vZGUm
IG5vZGUpCi17Ci0gICAgQVNTRVJUKCFub2RlLmlzRG9jdW1lbnROb2RlKCkpOwotICAgIEFTU0VS
VCghbm9kZS5tX2RlbGV0aW9uSGFzQmVndW4pOwotICAgIFRyZWVTY29wZSYgdHJlZVNjb3BlT2ZO
b2RlID0gbm9kZS50cmVlU2NvcGUoKTsKLSAgICBpZiAodGhpcyAhPSAmdHJlZVNjb3BlT2ZOb2Rl
KQotICAgICAgICBtb3ZlVHJlZVRvTmV3U2NvcGUobm9kZSwgdHJlZVNjb3BlT2ZOb2RlLCAqdGhp
cyk7Ci19Ci0KLXZvaWQgVHJlZVNjb3BlOjptb3ZlVHJlZVRvTmV3U2NvcGUoTm9kZSYgcm9vdCwg
VHJlZVNjb3BlJiBvbGRTY29wZSwgVHJlZVNjb3BlJiBuZXdTY29wZSkKLXsKLSAgICBBU1NFUlQo
Jm9sZFNjb3BlICE9ICZuZXdTY29wZSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oJnJvb3QudHJlZVNjb3BlKCkgPT0gJm9sZFNjb3BlKTsKLQotICAgIC8vIElmIGFuIGVs
ZW1lbnQgaXMgbW92ZWQgZnJvbSBhIGRvY3VtZW50IGFuZCB0aGVuIGV2ZW50dWFsbHkgYmFjayBh
Z2FpbiB0aGUgY29sbGVjdGlvbiBjYWNoZSBmb3IKLSAgICAvLyB0aGF0IGVsZW1lbnQgbWF5IGNv
bnRhaW4gc3RhbGUgZGF0YSBhcyBjaGFuZ2VzIG1hZGUgdG8gaXQgd2lsbCBoYXZlIHVwZGF0ZWQg
dGhlIERPTVRyZWVWZXJzaW9uCi0gICAgLy8gb2YgdGhlIGRvY3VtZW50IGl0IHdhcyBtb3ZlZCB0
by4gQnkgaW5jcmVhc2luZyB0aGUgRE9NVHJlZVZlcnNpb24gb2YgdGhlIGRvbmF0aW5nIGRvY3Vt
ZW50IGhlcmUKLSAgICAvLyB3ZSBlbnN1cmUgdGhhdCB0aGUgY29sbGVjdGlvbiBjYWNoZSB3aWxs
IGJlIGludmFsaWRhdGVkIGFzIG5lZWRlZCB3aGVuIHRoZSBlbGVtZW50IGlzIG1vdmVkIGJhY2su
Ci0gICAgRG9jdW1lbnQmIG9sZERvY3VtZW50ID0gb2xkU2NvcGUuZG9jdW1lbnRTY29wZSgpOwot
ICAgIERvY3VtZW50JiBuZXdEb2N1bWVudCA9IG5ld1Njb3BlLmRvY3VtZW50U2NvcGUoKTsKLSAg
ICBib29sIHdpbGxNb3ZlVG9OZXdEb2N1bWVudCA9ICZvbGREb2N1bWVudCAhPSAmbmV3RG9jdW1l
bnQ7Ci0gICAgaWYgKHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkgewotICAgICAgICBvbGREb2N1bWVu
dC5pbmNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCgpOwotICAgICAgICBvbGREb2N1bWVudC5p
bmNET01UcmVlVmVyc2lvbigpOwotICAgIH0KLQotICAgIGZvciAoTm9kZSogbm9kZSA9ICZyb290
OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgJnJvb3QpKSB7Ci0gICAg
ICAgIEFTU0VSVCghbm9kZS0+aXNUcmVlU2NvcGUoKSk7Ci0gICAgICAgIEFTU0VSVCgmbm9kZS0+
dHJlZVNjb3BlKCkgPT0gJm9sZFNjb3BlKTsKLSAgICAgICAgbm9kZS0+c2V0VHJlZVNjb3BlKG5l
d1Njb3BlKTsKLQotICAgICAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQotICAgICAgICAg
ICAgbW92ZU5vZGVUb05ld0RvY3VtZW50KCpub2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQp
OwotICAgICAgICBlbHNlIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpKSB7Ci0gICAgICAgICAgICBp
ZiAoYXV0byogbm9kZUxpc3RzID0gbm9kZS0+cmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCi0gICAg
ICAgICAgICAgICAgbm9kZUxpc3RzLT5hZG9wdFRyZWVTY29wZSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBpZiAobm9kZS0+aGFzU3ludGhldGljQXR0ckNoaWxkTm9kZXMoKSkgewotICAgICAg
ICAgICAgZm9yIChhdXRvJiBhdHRyIDogZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmF0dHJOb2Rl
TGlzdCgpKQotICAgICAgICAgICAgICAgIG1vdmVUcmVlVG9OZXdTY29wZSgqYXR0ciwgb2xkU2Nv
cGUsIG5ld1Njb3BlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdXRvKiBzaGFkb3cgPSBu
b2RlLT5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCZzaGFkb3ctPmRvY3VtZW50KCkgPT0gJm9sZERvY3VtZW50KTsKLSAgICAgICAg
ICAgIHNoYWRvdy0+c2V0UGFyZW50VHJlZVNjb3BlKG5ld1Njb3BlKTsKLSAgICAgICAgICAgIGlm
ICh3aWxsTW92ZVRvTmV3RG9jdW1lbnQpCi0gICAgICAgICAgICAgICAgbW92ZVNoYWRvd1RyZWVU
b05ld0RvY3VtZW50KCpzaGFkb3csIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQotICAgICAgICBvbGRE
b2N1bWVudC5kZWNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCgpOwotfQotCi0jaWYgIUFTU0VS
VF9ESVNBQkxFRCB8fCBFTkFCTEUoU0VDVVJJVFlfQVNTRVJUSU9OUykKLXN0YXRpYyBib29sIGRp
ZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkID0gZmFsc2U7Ci1zdGF0aWMgRG9jdW1lbnQqIG9s
ZERvY3VtZW50RGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWRXaXRoID0gbnVsbHB0cjsKLQot
dm9pZCBUcmVlU2NvcGU6OmVuc3VyZURpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkKERvY3Vt
ZW50JiBvbGREb2N1bWVudCkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TighZGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWQpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCZvbGREb2N1bWVudCA9PSBvbGREb2N1bWVudERpZE1vdmVUb05ld0Rv
Y3VtZW50V2FzQ2FsbGVkV2l0aCk7Ci0gICAgZGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWQg
PSB0cnVlOwotfQotI2VuZGlmCi0KLXZvaWQgVHJlZVNjb3BlOjptb3ZlTm9kZVRvTmV3RG9jdW1l
bnQoTm9kZSYgbm9kZSwgRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1l
bnQpCi17Ci0gICAgQVNTRVJUKCFub2RlLmlzQ29ubmVjdGVkKCkgfHwgJm9sZERvY3VtZW50ICE9
ICZuZXdEb2N1bWVudCk7Ci0KLSAgICBuZXdEb2N1bWVudC5pbmNyZW1lbnRSZWZlcmVuY2luZ05v
ZGVDb3VudCgpOwotICAgIG9sZERvY3VtZW50LmRlY3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50
KCk7Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVEIHx8IEVOQUJMRShTRUNVUklUWV9BU1NFUlRJT05T
KQotICAgIGRpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkID0gZmFsc2U7Ci0gICAgb2xkRG9j
dW1lbnREaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxlZFdpdGggPSAmb2xkRG9jdW1lbnQ7Ci0j
ZW5kaWYKLQotICAgIG5vZGUuZGlkTW92ZVRvTmV3RG9jdW1lbnQob2xkRG9jdW1lbnQsIG5ld0Rv
Y3VtZW50KTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihkaWRNb3ZlVG9O
ZXdEb2N1bWVudFdhc0NhbGxlZCk7Ci19Ci0KLXZvaWQgVHJlZVNjb3BlOjptb3ZlU2hhZG93VHJl
ZVRvTmV3RG9jdW1lbnQoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgRG9jdW1lbnQmIG9sZERvY3Vt
ZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCi17Ci0gICAgZm9yIChOb2RlKiBub2RlID0gJnNo
YWRvd1Jvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCAmc2hhZG93
Um9vdCkpIHsKLSAgICAgICAgbW92ZU5vZGVUb05ld0RvY3VtZW50KCpub2RlLCBvbGREb2N1bWVu
dCwgbmV3RG9jdW1lbnQpOwotICAgICAgICBpZiAoYXV0byogc2hhZG93ID0gbm9kZS0+c2hhZG93
Um9vdCgpKQotICAgICAgICAgICAgbW92ZVNoYWRvd1RyZWVUb05ld0RvY3VtZW50KCpzaGFkb3cs
IG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7Ci0gICAgfQotfQotCiBzdGF0aWMgRWxlbWVudCog
Zm9jdXNlZEZyYW1lT3duZXJFbGVtZW50KEZyYW1lKiBmb2N1c2VkRnJhbWUsIEZyYW1lKiBjdXJy
ZW50RnJhbWUpCiB7CiAgICAgZm9yICg7IGZvY3VzZWRGcmFtZTsgZm9jdXNlZEZyYW1lID0gZm9j
dXNlZEZyYW1lLT50cmVlKCkucGFyZW50KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJ
KHJldmlzaW9uIDIxNzk1NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAkod29y
a2luZyBjb3B5KQpAQCAtOTYsMTQgKzk2LDYgQEAgcHVibGljOgogICAgIC8vIHF1aXJrcyBtb2Rl
IGZvciBoaXN0b3JpY2FsIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KICAgICBFbGVtZW50KiBmaW5k
QW5jaG9yKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICAvLyBVc2VkIGJ5IHRoZSBiYXNpYyBE
T00gbXV0YXRpb24gbWV0aG9kcyAoZS5nLiwgYXBwZW5kQ2hpbGQoKSkuCi0gICAgdm9pZCBhZG9w
dElmTmVlZGVkKE5vZGUmKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVEIHx8IEVOQUJMRShTRUNVUklU
WV9BU1NFUlRJT05TKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZURpZE1vdmVUb05ld0RvY3VtZW50
V2FzQ2FsbGVkKERvY3VtZW50JiBvbGREb2N1bWVudCk7Ci0jZWxzZQotICAgIHN0YXRpYyB2b2lk
IGVuc3VyZURpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkKERvY3VtZW50JikgeyB9Ci0jZW5k
aWYKLQogICAgIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yb290
Tm9kZTsgfQogCiAgICAgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5JiBpZFRhcmdldE9ic2VydmVy
UmVnaXN0cnkoKSBjb25zdCB7IHJldHVybiAqbV9pZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuZ2V0
KCk7IH0KQEAgLTEyMiw5ICsxMTQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgTm9kZSogbm9kZUZyb21Q
b2ludChjb25zdCBMYXlvdXRQb2ludCYgY2xpZW50UG9pbnQsIExheW91dFBvaW50KiBsb2NhbFBv
aW50KTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIG1vdmVUcmVlVG9OZXdTY29wZShOb2RlJiwgVHJl
ZVNjb3BlJiBvbGRTY29wZSwgVHJlZVNjb3BlJiBuZXdTY29wZSk7Ci0gICAgdm9pZCBtb3ZlTm9k
ZVRvTmV3RG9jdW1lbnQoTm9kZSYsIERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5l
d0RvY3VtZW50KTsKLSAgICB2b2lkIG1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudChTaGFkb3dS
b290JiwgRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpOwogCiAg
ICAgQ29udGFpbmVyTm9kZSYgbV9yb290Tm9kZTsKICAgICBzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PERvY3VtZW50PiBtX2RvY3VtZW50U2NvcGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZW1wbGF0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIxNzk1NykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcg
Kzg4LDcgQEAgdm9pZCBIVE1MVGVtcGxhdGVFbGVtZW50OjpkaWRNb3ZlVG9OZXdEbwogICAgIGlm
ICghbV9jb250ZW50KQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oJmRvY3VtZW50KCkgPT0gJm5ld0RvY3VtZW50KTsKLSAgICBuZXdEb2N1bWVu
dC5lbnN1cmVUZW1wbGF0ZURvY3VtZW50KCkuYWRvcHRJZk5lZWRlZCgqbV9jb250ZW50KTsKKyAg
ICBtX2NvbnRlbnQtPnNldFRyZWVTY29wZVJlY3Vyc2l2ZWx5KG5ld0RvY3VtZW50LmVuc3VyZVRl
bXBsYXRlRG9jdW1lbnQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312384</attachid>
            <date>2017-06-08 22:36:46 -0700</date>
            <delta_ts>2017-06-08 23:01:28 -0700</delta_ts>
            <desc>Fixed a typo</desc>
            <filename>bug-173129-20170608223645.patch</filename>
            <type>text/plain</type>
            <size>23988</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNzk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE3LTA2LTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgVHJlZVNjb3BlOjphZG9w
dElmTmVlZGVkIHRvIE5vZGUgYW5kIHJlbmFtZSBpdCB0byBzZXRUcmVlU2NvcGVSZWN1cnNpdmVs
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMTI5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1l
ZCBUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQgdG8gc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkgYW5k
IG1vdmVkIHRvIE5vZGUuCisKKyAgICAgICAgVGhlIG9sZCBuYW1lIHdhcyByZWFsbHkgY29uZnVz
aW5nIGJlY2F1c2UgZHVlIHRvIHRoZSBleGlzdGVuY2Ugb2YgRG9jdW1lbnQ6OmFkb3B0Tm9kZSwg
YSBET00gQVBJLAorICAgICAgICB3aGljaCByZW1vdmVzIHRoZSBhZG9wdGVkIG5vZGUgZnJvbSBp
dHMgcGFyZW50IGlmIHRoZXJlIHdhcyBvbmUgYmVmb3JlIGFkb3B0aW5nIHRoZSBub2RlLgorICAg
ICAgICBNb3N0IGNvbmZ1c2luZ2x5LCB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBUcmVlU2NvcGU6OmFk
b3B0SWZOZWVkZWQuCisKKyAgICAgICAgQWxzbyBpbmxpbmVkIHRoZSB0cmVlIHNjb3BlIGNoZWNr
IHRvIGF2b2lkIGNhbGxpbmcgdG8gbW92ZVRyZWVUb05ld1Njb3BlIHdoZW4gdGhlcmUgaXMgbm90
aGluZyB0byBkby4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIHRlc3RzIGNvdmVy
IHRoaXMuCisKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRy
OjpkZXRhY2hGcm9tRWxlbWVudFdpdGhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjph
dHRhY2hUb0VsZW1lbnQpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnRha2VBbGxDaGlsZHJlbkZyb20pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
YWluZXJOb2RlOjpyZW1vdmVCZXR3ZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5v
ZGU6OnJlcGxhY2VBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2Rl
OjphcHBlbmRDaGlsZFdpdGhvdXRQcmVJbnNlcnRpb25WYWxpZGl0eUNoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlckFwcGVuZENoaWxkKToKKyAgICAgICAgKiBk
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkQ2hp
bGROb2Rlc1RvRGVsZXRpb25RdWV1ZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZG9wdE5vZGUpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZUF0dHIpOgorICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpZE1vdmVUb05ld0RvY3VtZW50
QXNzZXJ0aW9uU2NvcGUpOiBBZGRlZC4gVGhlIG9sZCBhc3NlcnRpb24gd2Fzbid0IHN1ZmZpY2ll
bnQgd2hlbgorICAgICAgICBIVE1MVGVtcGxhdGVFbGVtZW50IG1hZGUgYSByZWN1cnNpdmUgY2Fs
bCB0byBzZXRUcmVlU2NvcGVSZWN1cnNpdmVseS4KKyAgICAgICAgKFdlYkNvcmU6OkRpZE1vdmVU
b05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGU6OkRpZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0aW9u
U2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25T
Y29wZTo6fkRpZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZTo6ZGlkUmVjaWV2ZUNhbGwp
OgorICAgICAgICAoV2ViQ29yZTo6bW92ZU5vZGVUb05ld0RvY3VtZW50KTogTW92ZWQgZnJvbSBU
cmVlU2NvcGUuIENhbGxzIHRvIGluY3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50CisgICAgICAg
IGFuZCBkZWNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCB0byBOb2RlOjpkaWRNb3ZlVG9OZXdE
b2N1bWVudC4gVGhpcyBmdW5jdGlvbiBpcyBub3cgZWxpbWluYXRlZAorICAgICAgICBpbiBhIHJl
bGVhc2UgYnVpbGQuCisgICAgICAgIChXZWJDb3JlOjptb3ZlU2hhZG93VHJlZVRvTmV3RG9jdW1l
bnQpOiBNb3ZlZCBmcm9tIFRyZWVTY29wZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om1vdmVU
cmVlVG9OZXdTY29wZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlkTW92ZVRv
TmV3RG9jdW1lbnQpOiBTZWUgdGhlIGRlc2NyaXB0aW9uIGZvciBtb3ZlTm9kZVRvTmV3RG9jdW1l
bnQgYWJvdmUuCisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmlzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQpOiBNb3ZlZCB0byBhdm9pZCBoYXZpbmcgaXRzIG93
biBwcm90ZWN0ZWQgc2VjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldElzUGFyc2lu
Z0NoaWxkcmVuRmluaXNoZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFy
SXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6c2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkpOiBNb3ZlZCBmcm9tIFRyZWVTY29wZTo6YWRvcHRJ
Zk5lZWRlZC4KKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFkb3dSb290Ojp+U2hhZG93Um9vdCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjptb3ZlVHJlZVRvTmV3U2NvcGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjplbnN1cmVEaWRNb3ZlVG9OZXdEb2N1bWVu
dFdhc0NhbGxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6Om1vdmVO
b2RlVG9OZXdEb2N1bWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6
Om1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1Ry
ZWVTY29wZS5oOgorICAgICAgICAqIGh0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGVtcGxhdGVFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudCk6
CisKIDIwMTctMDYtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBbaU9TXSBMb3dQb3dlck1vZGVOb3RpZmllciBub3RpZmllcyBjbGllbnQgb24gbm9uLW1haW4g
dGhyZWFkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vQXR0ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCB2
b2lkIEF0dHI6OmRldGFjaEZyb21FbGVtZW50V2l0aFZhbHVlKGNvCiAgICAgQVNTRVJUKG1fc3Rh
bmRhbG9uZVZhbHVlLmlzTnVsbCgpKTsKICAgICBtX3N0YW5kYWxvbmVWYWx1ZSA9IHZhbHVlOwog
ICAgIG1fZWxlbWVudCA9IG51bGxwdHI7Ci0gICAgZG9jdW1lbnQoKS5hZG9wdElmTmVlZGVkKCp0
aGlzKTsKKyAgICBzZXRUcmVlU2NvcGVSZWN1cnNpdmVseShkb2N1bWVudCgpKTsKIH0KIAogdm9p
ZCBBdHRyOjphdHRhY2hUb0VsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKQEAgLTE0Myw3ICsxNDMs
NyBAQCB2b2lkIEF0dHI6OmF0dGFjaFRvRWxlbWVudChFbGVtZW50JiBlbGVtCiAgICAgQVNTRVJU
KCFtX2VsZW1lbnQpOwogICAgIG1fZWxlbWVudCA9ICZlbGVtZW50OwogICAgIG1fc3RhbmRhbG9u
ZVZhbHVlID0gbnVsbEF0b207Ci0gICAgZWxlbWVudC50cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVk
KCp0aGlzKTsKKyAgICBzZXRUcmVlU2NvcGVSZWN1cnNpdmVseShlbGVtZW50LnRyZWVTY29wZSgp
KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNp
b24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBDb250YWluZXJOb2RlOjp0YWtlQWxs
Q2hpbGRyZW5Gcm9tKAogICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghY2hpbGQtPnBhcmVudE5vZGUoKSAmJiAmY2hpbGQtPnRyZWVTY29w
ZSgpID09ICZ0cmVlU2NvcGUoKSk7CiAgICAgICAgIEFTU0VSVCghZW5zdXJlUHJlSW5zZXJ0aW9u
VmFsaWRpdHkoY2hpbGQsIG51bGxwdHIpLmhhc0V4Y2VwdGlvbigpKTsKLSAgICAgICAgdHJlZVNj
b3BlKCkuYWRvcHRJZk5lZWRlZChjaGlsZCk7CisgICAgICAgIGNoaWxkLT5zZXRUcmVlU2NvcGVS
ZWN1cnNpdmVseSh0cmVlU2NvcGUoKSk7CiAgICAgICAgIHBhcnNlckFwcGVuZENoaWxkKGNoaWxk
KTsKICAgICB9CiB9CkBAIC0yOTAsNyArMjkwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFp
bmVyTm9kZTo6aW5zZXJ0QgogICAgICAgICB7CiAgICAgICAgICAgICBOb0V2ZW50RGlzcGF0Y2hB
c3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwogCi0gICAgICAgICAgICB0cmVlU2NvcGUo
KS5hZG9wdElmTmVlZGVkKGNoaWxkKTsKKyAgICAgICAgICAgIGNoaWxkLT5zZXRUcmVlU2NvcGVS
ZWN1cnNpdmVseSh0cmVlU2NvcGUoKSk7CiAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24o
bmV4dCwgY2hpbGQpOwogICAgICAgICB9CiAKQEAgLTQ2Niw3ICs0NjYsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBDb250YWluZXJOb2RlOjpyZXBsYWNlCiAKICAgICAgICAgewogICAgICAgICAgICAg
Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKLSAgICAgICAg
ICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoY2hpbGQpOworICAgICAgICAgICAgY2hpbGQt
PnNldFRyZWVTY29wZVJlY3Vyc2l2ZWx5KHRyZWVTY29wZSgpKTsKICAgICAgICAgICAgIGlmIChy
ZWZDaGlsZCkKICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24oKnJlZkNoaWxkLCBj
aGlsZC5nZXQoKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBD
b250YWluZXJOb2RlOjpyZW1vdmVCZXR3ZWVuKE5vZGUqIAogICAgIEFTU0VSVCghb2xkQ2hpbGQu
bmV4dFNpYmxpbmcoKSk7CiAgICAgb2xkQ2hpbGQuc2V0UGFyZW50Tm9kZShudWxscHRyKTsKIAot
ICAgIGRvY3VtZW50KCkuYWRvcHRJZk5lZWRlZChvbGRDaGlsZCk7CisgICAgb2xkQ2hpbGQuc2V0
VHJlZVNjb3BlUmVjdXJzaXZlbHkoZG9jdW1lbnQoKSk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9k
ZTo6cGFyc2VyUmVtb3ZlQ2hpbGQoTm9kZSYgb2xkQ2hpbGQpCkBAIC02NDEsNyArNjQxLDcgQEAg
dm9pZCBDb250YWluZXJOb2RlOjpyZXBsYWNlQWxsQ2hpbGRyZW4oUgogICAgIENoaWxkTGlzdE11
dGF0aW9uU2NvcGUgbXV0YXRpb24oKnRoaXMpOwogCiAgICAgLy8gSWYgbm9kZSBpcyBub3QgbnVs
bCwgYWRvcHQgbm9kZSBpbnRvIHBhcmVudCdzIG5vZGUgZG9jdW1lbnQuCi0gICAgdHJlZVNjb3Bl
KCkuYWRvcHRJZk5lZWRlZChub2RlKTsKKyAgICBub2RlLT5zZXRUcmVlU2NvcGVSZWN1cnNpdmVs
eSh0cmVlU2NvcGUoKSk7CiAKICAgICAvLyBSZW1vdmUgYWxsIHBhcmVudCdzIGNoaWxkcmVuLCBp
biB0cmVlIG9yZGVyLgogICAgIHdpbGxSZW1vdmVDaGlsZHJlbigqdGhpcyk7CkBAIC03NTYsNyAr
NzU2LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFpbmVyTm9kZTo6YXBwZW5kQwogICAgICAg
ICAvLyBBcHBlbmQgY2hpbGQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAogICAgICAgICB7CiAgICAg
ICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwot
ICAgICAgICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZChjaGlsZCk7CisgICAgICAgICAg
ICBjaGlsZC0+c2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkodHJlZVNjb3BlKCkpOwogICAgICAgICAg
ICAgYXBwZW5kQ2hpbGRDb21tb24oY2hpbGQpOwogICAgICAgICB9CiAKQEAgLTc4MCw3ICs3ODAs
NyBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckFwcGVuZENoaWxkKE5vCiAgICAgICAgICAg
ICBkb2N1bWVudCgpLmFkb3B0Tm9kZShuZXdDaGlsZCk7CiAKICAgICAgICAgYXBwZW5kQ2hpbGRD
b21tb24obmV3Q2hpbGQpOwotICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKG5ld0No
aWxkKTsKKyAgICAgICAgbmV3Q2hpbGQuc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkodHJlZVNjb3Bl
KCkpOwogICAgIH0KIAogICAgIG5ld0NoaWxkLnVwZGF0ZUFuY2VzdG9yQ29ubmVjdGVkU3ViZnJh
bWVDb3VudEZvckluc2VydGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzksNyArMTc5LDcgQEAgdm9pZCBhZGRDaGlsZE5vZGVzVG9EZWxldGlvblF1ZXVlKE5vZGUqJgog
ICAgICAgICAgICAgdGFpbCA9IG5vZGU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBS
ZWY8Tm9kZT4gcHJvdGVjdCgqbm9kZSk7IC8vIHJlbW92ZWRGcm9tRG9jdW1lbnQgbWF5IHJlbW92
ZSByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgotICAgICAgICAgICAgY29udGFp
bmVyLmRvY3VtZW50KCkuYWRvcHRJZk5lZWRlZCgqbm9kZSk7CisgICAgICAgICAgICBub2RlLT5z
ZXRUcmVlU2NvcGVSZWN1cnNpdmVseShjb250YWluZXIuZG9jdW1lbnQoKSk7CiAgICAgICAgICAg
ICBpZiAobm9kZS0+aXNJblRyZWVTY29wZSgpKQogICAgICAgICAgICAgICAgIG5vdGlmeUNoaWxk
Tm9kZVJlbW92ZWQoY29udGFpbmVyLCAqbm9kZSk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTighbm9kZS0+aXNJblRyZWVTY29wZSgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTkxLDcgKzk5MSw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxOb2RlPj4gRG9jdW1lbnQ6OmFkb3B0Tm8KICAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oIXNvdXJjZS5wYXJlbnROb2RlKCkpOwogICAgIH0KIAotICAgIGFk
b3B0SWZOZWVkZWQoc291cmNlKTsKKyAgICBzb3VyY2Uuc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHko
KnRoaXMpOwogCiAgICAgcmV0dXJuIFJlZjxOb2RlPiB7IHNvdXJjZSB9OwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEyLDcgKzM0MTIsNyBAQCBSZWY8QXR0
cj4gRWxlbWVudDo6ZW5zdXJlQXR0cihjb25zdCBRdWFsCiAgICAgUmVmUHRyPEF0dHI+IGF0dHJO
b2RlID0gZmluZEF0dHJOb2RlSW5MaXN0KGF0dHJOb2RlTGlzdCwgbmFtZSk7CiAgICAgaWYgKCFh
dHRyTm9kZSkgewogICAgICAgICBhdHRyTm9kZSA9IEF0dHI6OmNyZWF0ZSgqdGhpcywgbmFtZSk7
Ci0gICAgICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoKmF0dHJOb2RlKTsKKyAgICAgICAg
YXR0ck5vZGUtPnNldFRyZWVTY29wZVJlY3Vyc2l2ZWx5KHRyZWVTY29wZSgpKTsKICAgICAgICAg
YXR0ck5vZGVMaXN0LmFwcGVuZChhdHRyTm9kZSk7CiAgICAgfQogICAgIHJldHVybiBhdHRyTm9k
ZS5yZWxlYXNlTm9uTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjE3OTU3
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIy
LDEwICsxOTIyLDEyNSBAQCBFdmVudFRhcmdldEludGVyZmFjZSBOb2RlOjpldmVudFRhcmdldElu
CiAgICAgcmV0dXJuIE5vZGVFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKKyNpZiAhQVNT
RVJUX0RJU0FCTEVEIHx8IEVOQUJMRShTRUNVUklUWV9BU1NFUlRJT05TKQorY2xhc3MgRGlkTW92
ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZSB7CitwdWJsaWM6CisgICAgRGlkTW92ZVRvTmV3
RG9jdW1lbnRBc3NlcnRpb25TY29wZShOb2RlJiBub2RlLCBEb2N1bWVudCYgb2xkRG9jdW1lbnQs
IERvY3VtZW50JiBuZXdEb2N1bWVudCkKKyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAg
LCBtX29sZERvY3VtZW50KG9sZERvY3VtZW50KQorICAgICAgICAsIG1fbmV3RG9jdW1lbnQobmV3
RG9jdW1lbnQpCisgICAgICAgICwgbV9wcmV2aW91c1Njb3BlKHNfc2NvcGUpCisgICAgeworICAg
ICAgICBzX3Njb3BlID0gdGhpczsKKyAgICB9CisKKyAgICB+RGlkTW92ZVRvTmV3RG9jdW1lbnRB
c3NlcnRpb25TY29wZSgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihtX2NhbGxlZCk7CisgICAgICAgIHNfc2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgZGlkUmVjaWV2ZUNhbGwoTm9kZSYgbm9kZSwgRG9jdW1l
bnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCisgICAgeworICAgICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzX3Njb3BlKTsKKyAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXNfc2NvcGUtPm1fY2FsbGVkKTsKKyAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oJnNfc2NvcGUtPm1fbm9kZSA9PSAmbm9k
ZSk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCZzX3Njb3BlLT5t
X29sZERvY3VtZW50ID09ICZvbGREb2N1bWVudCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCZzX3Njb3BlLT5tX25ld0RvY3VtZW50ID09ICZuZXdEb2N1bWVudCk7
CisgICAgICAgIHNfc2NvcGUtPm1fY2FsbGVkID0gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgTm9kZSYgbV9ub2RlOworICAgIERvY3VtZW50JiBtX29sZERvY3VtZW50OworICAgIERvY3Vt
ZW50JiBtX25ld0RvY3VtZW50OworICAgIGJvb2wgbV9jYWxsZWQgeyBmYWxzZSB9OworICAgIERp
ZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGUqIG1fcHJldmlvdXNTY29wZTsKKworICAg
IHN0YXRpYyBEaWRNb3ZlVG9OZXdEb2N1bWVudEFzc2VydGlvblNjb3BlKiBzX3Njb3BlOworfTsK
KworRGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZSogRGlkTW92ZVRvTmV3RG9jdW1l
bnRBc3NlcnRpb25TY29wZTo6c19zY29wZSA9IG51bGxwdHI7CisKKyNlbHNlCitjbGFzcyBEaWRN
b3ZlVG9OZXdEb2N1bWVudEFzc2VydGlvblNjb3BlIHsKKyAgICBEaWRNb3ZlVG9OZXdEb2N1bWVu
dEFzc2VydGlvblNjb3BlKE5vZGUmLCBEb2N1bWVudCYsIERvY3VtZW50JikKKyAgICB7IH0KK30K
KyNlbmRpZgorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIG1vdmVOb2RlVG9OZXdEb2N1bWVu
dChOb2RlJiBub2RlLCBEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVu
dCkKK3sKKyAgICBBU1NFUlQoIW5vZGUuaXNDb25uZWN0ZWQoKSB8fCAmb2xkRG9jdW1lbnQgIT0g
Jm5ld0RvY3VtZW50KTsKKyAgICBEaWRNb3ZlVG9OZXdEb2N1bWVudEFzc2VydGlvblNjb3BlIHNj
b3BlKG5vZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CisgICAgbm9kZS5kaWRNb3ZlVG9O
ZXdEb2N1bWVudChvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworfQorCitzdGF0aWMgdm9pZCBt
b3ZlU2hhZG93VHJlZVRvTmV3RG9jdW1lbnQoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgRG9jdW1l
bnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCit7CisgICAgZm9yIChOb2Rl
KiBub2RlID0gJnNoYWRvd1Jvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpu
b2RlLCAmc2hhZG93Um9vdCkpIHsKKyAgICAgICAgbW92ZU5vZGVUb05ld0RvY3VtZW50KCpub2Rl
LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgICAgICBpZiAoYXV0byogc2hhZG93ID0g
bm9kZS0+c2hhZG93Um9vdCgpKQorICAgICAgICAgICAgbW92ZVNoYWRvd1RyZWVUb05ld0RvY3Vt
ZW50KCpzaGFkb3csIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CisgICAgfQorfQorCit2b2lk
IE5vZGU6Om1vdmVUcmVlVG9OZXdTY29wZShOb2RlJiByb290LCBUcmVlU2NvcGUmIG9sZFNjb3Bl
LCBUcmVlU2NvcGUmIG5ld1Njb3BlKQoreworICAgIEFTU0VSVCgmb2xkU2NvcGUgIT0gJm5ld1Nj
b3BlKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigmcm9vdC50cmVlU2Nv
cGUoKSA9PSAmb2xkU2NvcGUpOworCisgICAgLy8gSWYgYW4gZWxlbWVudCBpcyBtb3ZlZCBmcm9t
IGEgZG9jdW1lbnQgYW5kIHRoZW4gZXZlbnR1YWxseSBiYWNrIGFnYWluIHRoZSBjb2xsZWN0aW9u
IGNhY2hlIGZvcgorICAgIC8vIHRoYXQgZWxlbWVudCBtYXkgY29udGFpbiBzdGFsZSBkYXRhIGFz
IGNoYW5nZXMgbWFkZSB0byBpdCB3aWxsIGhhdmUgdXBkYXRlZCB0aGUgRE9NVHJlZVZlcnNpb24K
KyAgICAvLyBvZiB0aGUgZG9jdW1lbnQgaXQgd2FzIG1vdmVkIHRvLiBCeSBpbmNyZWFzaW5nIHRo
ZSBET01UcmVlVmVyc2lvbiBvZiB0aGUgZG9uYXRpbmcgZG9jdW1lbnQgaGVyZQorICAgIC8vIHdl
IGVuc3VyZSB0aGF0IHRoZSBjb2xsZWN0aW9uIGNhY2hlIHdpbGwgYmUgaW52YWxpZGF0ZWQgYXMg
bmVlZGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgbW92ZWQgYmFjay4KKyAgICBEb2N1bWVudCYgb2xk
RG9jdW1lbnQgPSBvbGRTY29wZS5kb2N1bWVudFNjb3BlKCk7CisgICAgRG9jdW1lbnQmIG5ld0Rv
Y3VtZW50ID0gbmV3U2NvcGUuZG9jdW1lbnRTY29wZSgpOworICAgIGJvb2wgc2hvdWxkVXBkYXRl
RG9jdW1lbnRTY29wZSA9ICZvbGREb2N1bWVudCAhPSAmbmV3RG9jdW1lbnQ7CisgICAgaWYgKHNo
b3VsZFVwZGF0ZURvY3VtZW50U2NvcGUpIHsKKyAgICAgICAgb2xkRG9jdW1lbnQuaW5jcmVtZW50
UmVmZXJlbmNpbmdOb2RlQ291bnQoKTsKKyAgICAgICAgb2xkRG9jdW1lbnQuaW5jRE9NVHJlZVZl
cnNpb24oKTsKKyAgICB9CisKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSAmcm9vdDsgbm9kZTsgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUsICZyb290KSkgeworICAgICAgICBBU1NFUlQo
IW5vZGUtPmlzVHJlZVNjb3BlKCkpOworICAgICAgICBBU1NFUlQoJm5vZGUtPnRyZWVTY29wZSgp
ID09ICZvbGRTY29wZSk7CisgICAgICAgIG5vZGUtPnNldFRyZWVTY29wZShuZXdTY29wZSk7CisK
KyAgICAgICAgaWYgKHNob3VsZFVwZGF0ZURvY3VtZW50U2NvcGUpCisgICAgICAgICAgICBtb3Zl
Tm9kZVRvTmV3RG9jdW1lbnQoKm5vZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CisgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiBub2RlTGlzdHMgPSBub2RlLT5yYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSkKKyAgICAgICAgICAg
ICAgICBub2RlTGlzdHMtPmFkb3B0VHJlZVNjb3BlKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmIChub2RlLT5oYXNTeW50aGV0aWNBdHRyQ2hpbGROb2RlcygpKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIGF0dHIgOiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuYXR0ck5vZGVMaXN0KCkp
CisgICAgICAgICAgICAgICAgbW92ZVRyZWVUb05ld1Njb3BlKCphdHRyLCBvbGRTY29wZSwgbmV3
U2NvcGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8qIHNoYWRvdyA9IG5vZGUtPnNo
YWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oJnNoYWRvdy0+ZG9jdW1lbnQoKSA9PSAmb2xkRG9jdW1lbnQpOworICAgICAgICAgICAgc2hh
ZG93LT5zZXRQYXJlbnRUcmVlU2NvcGUobmV3U2NvcGUpOworICAgICAgICAgICAgaWYgKHNob3Vs
ZFVwZGF0ZURvY3VtZW50U2NvcGUpCisgICAgICAgICAgICAgICAgbW92ZVNoYWRvd1RyZWVUb05l
d0RvY3VtZW50KCpzaGFkb3csIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoc2hvdWxkVXBkYXRlRG9jdW1lbnRTY29wZSkKKyAgICAgICAgb2xk
RG9jdW1lbnQuZGVjcmVtZW50UmVmZXJlbmNpbmdOb2RlQ291bnQoKTsKK30KKwogdm9pZCBOb2Rl
OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBu
ZXdEb2N1bWVudCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigmZG9j
dW1lbnQoKSA9PSAmbmV3RG9jdW1lbnQpOwotICAgIFRyZWVTY29wZTo6ZW5zdXJlRGlkTW92ZVRv
TmV3RG9jdW1lbnRXYXNDYWxsZWQob2xkRG9jdW1lbnQpOworICAgIERpZE1vdmVUb05ld0RvY3Vt
ZW50QXNzZXJ0aW9uU2NvcGU6OmRpZFJlY2lldmVDYWxsKCp0aGlzLCBvbGREb2N1bWVudCwgbmV3
RG9jdW1lbnQpOworCisgICAgbmV3RG9jdW1lbnQuaW5jcmVtZW50UmVmZXJlbmNpbmdOb2RlQ291
bnQoKTsKKyAgICBvbGREb2N1bWVudC5kZWNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCgpOwog
CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIG5vZGVMaXN0cyA9
IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAyMTc5
NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjks
NiArMzY5LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV90cmVlU2NvcGUpOwogICAgICAg
ICByZXR1cm4gKm1fdHJlZVNjb3BlOwogICAgIH0KKyAgICB2b2lkIHNldFRyZWVTY29wZVJlY3Vy
c2l2ZWx5KFRyZWVTY29wZSYpOwogICAgIHN0YXRpYyBwdHJkaWZmX3QgdHJlZVNjb3BlTWVtb3J5
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE5vZGUsIG1fdHJlZVNjb3BlKTsgfQog
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbm9kZSBpcyBhc3NvY2lhdGVkIHdpdGggYSBk
b2N1bWVudCBhbmQgaXMgaW4gaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnQncwpAQCAtNDkwLDYgKzQ5
MSw4IEBAIHB1YmxpYzoKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVy
ZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbDsgLy8gSW1wbGVtZW50ZWQgaW4gRG9jdW1l
bnQuaAogCisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBv
bGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KTsKKwogICAgIGJvb2wgYWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVuZXI+
JiYsIGNvbnN0IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyJiwgY29uc3QgTGlzdGVuZXJPcHRpb25zJikgb3ZlcnJpZGU7CiAKQEAgLTYxNCw2ICs2
MTcsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0RmxhZyhOb2RlRmxhZ3MgbWFzaykgY29u
c3QgeyBtX25vZGVGbGFncyB8PSBtYXNrOyB9IAogICAgIHZvaWQgY2xlYXJGbGFnKE5vZGVGbGFn
cyBtYXNrKSBjb25zdCB7IG1fbm9kZUZsYWdzICY9IH5tYXNrOyB9CiAKKyAgICBib29sIGlzUGFy
c2luZ0NoaWxkcmVuRmluaXNoZWQoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzUGFyc2luZ0No
aWxkcmVuRmluaXNoZWRGbGFnKTsgfQorICAgIHZvaWQgc2V0SXNQYXJzaW5nQ2hpbGRyZW5GaW5p
c2hlZCgpIHsgc2V0RmxhZyhJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyk7IH0KKyAgICB2
b2lkIGNsZWFySXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCgpIHsgY2xlYXJGbGFnKElzUGFyc2lu
Z0NoaWxkcmVuRmluaXNoZWRGbGFnKTsgfQorCiAgICAgZW51bSBDb25zdHJ1Y3Rpb25UeXBlIHsK
ICAgICAgICAgQ3JlYXRlT3RoZXIgPSBEZWZhdWx0Tm9kZUZsYWdzLAogICAgICAgICBDcmVhdGVU
ZXh0ID0gRGVmYXVsdE5vZGVGbGFncyB8IElzVGV4dEZsYWcsCkBAIC02MzEsOCArNjM4LDYgQEAg
cHJvdGVjdGVkOgogICAgIH07CiAgICAgTm9kZShEb2N1bWVudCYsIENvbnN0cnVjdGlvblR5cGUp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGRE
b2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KTsKLSAgICAKICAgICB2aXJ0dWFsIHZvaWQg
YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mKSBjb25zdCB7IH0K
IAogICAgIGJvb2wgaGFzUmFyZURhdGEoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKEhhc1JhcmVE
YXRhRmxhZyk7IH0KQEAgLTY3MSw5ICs2NzYsMTEgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5KCk7CiAKICAgICB2b2lkIGFkanVzdFN0eWxlVmFsaWRpdHkoU3R5bGU6OlZhbGlkaXR5
LCBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZSk7Ci0gICAgCisKICAgICB2b2lkKiBvcGFxdWVSb290
U2xvdygpIGNvbnN0OwogCisgICAgc3RhdGljIHZvaWQgbW92ZVRyZWVUb05ld1Njb3BlKE5vZGUm
LCBUcmVlU2NvcGUmIG9sZFNjb3BlLCBUcmVlU2NvcGUmIG5ld1Njb3BlKTsKKwogICAgIGludCBt
X3JlZkNvdW50OwogICAgIG11dGFibGUgdWludDMyX3QgbV9ub2RlRmxhZ3M7CiAKQEAgLTY4Niwx
MSArNjkzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwog
ICAgICAgICBOb2RlUmFyZURhdGFCYXNlKiBtX3JhcmVEYXRhOwogICAgIH0gbV9kYXRhIHsgbnVs
bHB0ciB9OwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBpc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVk
KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyk7
IH0KLSAgICB2b2lkIHNldElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSB7IHNldEZsYWcoSXNQ
YXJzaW5nQ2hpbGRyZW5GaW5pc2hlZEZsYWcpOyB9Ci0gICAgdm9pZCBjbGVhcklzUGFyc2luZ0No
aWxkcmVuRmluaXNoZWQoKSB7IGNsZWFyRmxhZyhJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxh
Zyk7IH0KIH07CiAKICNpZm5kZWYgTkRFQlVHCkBAIC03OTAsNiArNzkyLDE0IEBAIGlubGluZSB2
b2lkIE5vZGU6OnNldEhhc1ZhbGlkU3R5bGUoKQogICAgIGNsZWFyRmxhZyhTdHlsZVJlc29sdXRp
b25TaG91bGRSZWNvbXBvc2l0ZUxheWVyRmxhZyk7CiB9CiAKK2lubGluZSB2b2lkIE5vZGU6OnNl
dFRyZWVTY29wZVJlY3Vyc2l2ZWx5KFRyZWVTY29wZSYgbmV3VHJlZVNjb3BlKQoreworICAgIEFT
U0VSVCghaXNEb2N1bWVudE5vZGUoKSk7CisgICAgQVNTRVJUKCFtX2RlbGV0aW9uSGFzQmVndW4p
OworICAgIGlmIChtX3RyZWVTY29wZSAhPSAmbmV3VHJlZVNjb3BlKQorICAgICAgICBtb3ZlVHJl
ZVRvTmV3U2NvcGUoKnRoaXMsICptX3RyZWVTY29wZSwgbmV3VHJlZVNjb3BlKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBA
IFNoYWRvd1Jvb3Q6On5TaGFkb3dSb290KCkKICAgICB3aWxsQmVEZWxldGVkRnJvbShkb2N1bWVu
dCgpKTsKIAogICAgIC8vIFdlIG11c3QgcmVtb3ZlIGFsbCBvZiBvdXIgY2hpbGRyZW4gZmlyc3Qg
YmVmb3JlIHRoZSBUcmVlU2NvcGUgZGVzdHJ1Y3RvcgotICAgIC8vIHJ1bnMgc28gd2UgZG9uJ3Qg
Z28gdGhyb3VnaCBUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQgZm9yIGVhY2ggY2hpbGQgd2l0aCBh
CisgICAgLy8gcnVucyBzbyB3ZSBkb24ndCBnbyB0aHJvdWdoIE5vZGU6OnNldFRyZWVTY29wZVJl
Y3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIHdpdGggYQogICAgIC8vIGRlc3RydWN0ZWQgdHJlZSBz
Y29wZSBpbiBlYWNoIGRlc2NlbmRhbnQuCiAgICAgcmVtb3ZlRGV0YWNoZWRDaGlsZHJlbigpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHJldmlzaW9uIDIxNzk1NykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsMTAx
ICszNjgsNiBAQCBFbGVtZW50KiBUcmVlU2NvcGU6OmZpbmRBbmNob3IoY29uc3QgU3RyCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgVHJlZVNjb3BlOjphZG9wdElmTmVlZGVkKE5vZGUm
IG5vZGUpCi17Ci0gICAgQVNTRVJUKCFub2RlLmlzRG9jdW1lbnROb2RlKCkpOwotICAgIEFTU0VS
VCghbm9kZS5tX2RlbGV0aW9uSGFzQmVndW4pOwotICAgIFRyZWVTY29wZSYgdHJlZVNjb3BlT2ZO
b2RlID0gbm9kZS50cmVlU2NvcGUoKTsKLSAgICBpZiAodGhpcyAhPSAmdHJlZVNjb3BlT2ZOb2Rl
KQotICAgICAgICBtb3ZlVHJlZVRvTmV3U2NvcGUobm9kZSwgdHJlZVNjb3BlT2ZOb2RlLCAqdGhp
cyk7Ci19Ci0KLXZvaWQgVHJlZVNjb3BlOjptb3ZlVHJlZVRvTmV3U2NvcGUoTm9kZSYgcm9vdCwg
VHJlZVNjb3BlJiBvbGRTY29wZSwgVHJlZVNjb3BlJiBuZXdTY29wZSkKLXsKLSAgICBBU1NFUlQo
Jm9sZFNjb3BlICE9ICZuZXdTY29wZSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oJnJvb3QudHJlZVNjb3BlKCkgPT0gJm9sZFNjb3BlKTsKLQotICAgIC8vIElmIGFuIGVs
ZW1lbnQgaXMgbW92ZWQgZnJvbSBhIGRvY3VtZW50IGFuZCB0aGVuIGV2ZW50dWFsbHkgYmFjayBh
Z2FpbiB0aGUgY29sbGVjdGlvbiBjYWNoZSBmb3IKLSAgICAvLyB0aGF0IGVsZW1lbnQgbWF5IGNv
bnRhaW4gc3RhbGUgZGF0YSBhcyBjaGFuZ2VzIG1hZGUgdG8gaXQgd2lsbCBoYXZlIHVwZGF0ZWQg
dGhlIERPTVRyZWVWZXJzaW9uCi0gICAgLy8gb2YgdGhlIGRvY3VtZW50IGl0IHdhcyBtb3ZlZCB0
by4gQnkgaW5jcmVhc2luZyB0aGUgRE9NVHJlZVZlcnNpb24gb2YgdGhlIGRvbmF0aW5nIGRvY3Vt
ZW50IGhlcmUKLSAgICAvLyB3ZSBlbnN1cmUgdGhhdCB0aGUgY29sbGVjdGlvbiBjYWNoZSB3aWxs
IGJlIGludmFsaWRhdGVkIGFzIG5lZWRlZCB3aGVuIHRoZSBlbGVtZW50IGlzIG1vdmVkIGJhY2su
Ci0gICAgRG9jdW1lbnQmIG9sZERvY3VtZW50ID0gb2xkU2NvcGUuZG9jdW1lbnRTY29wZSgpOwot
ICAgIERvY3VtZW50JiBuZXdEb2N1bWVudCA9IG5ld1Njb3BlLmRvY3VtZW50U2NvcGUoKTsKLSAg
ICBib29sIHdpbGxNb3ZlVG9OZXdEb2N1bWVudCA9ICZvbGREb2N1bWVudCAhPSAmbmV3RG9jdW1l
bnQ7Ci0gICAgaWYgKHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkgewotICAgICAgICBvbGREb2N1bWVu
dC5pbmNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCgpOwotICAgICAgICBvbGREb2N1bWVudC5p
bmNET01UcmVlVmVyc2lvbigpOwotICAgIH0KLQotICAgIGZvciAoTm9kZSogbm9kZSA9ICZyb290
OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgJnJvb3QpKSB7Ci0gICAg
ICAgIEFTU0VSVCghbm9kZS0+aXNUcmVlU2NvcGUoKSk7Ci0gICAgICAgIEFTU0VSVCgmbm9kZS0+
dHJlZVNjb3BlKCkgPT0gJm9sZFNjb3BlKTsKLSAgICAgICAgbm9kZS0+c2V0VHJlZVNjb3BlKG5l
d1Njb3BlKTsKLQotICAgICAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQotICAgICAgICAg
ICAgbW92ZU5vZGVUb05ld0RvY3VtZW50KCpub2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQp
OwotICAgICAgICBlbHNlIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpKSB7Ci0gICAgICAgICAgICBp
ZiAoYXV0byogbm9kZUxpc3RzID0gbm9kZS0+cmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCi0gICAg
ICAgICAgICAgICAgbm9kZUxpc3RzLT5hZG9wdFRyZWVTY29wZSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBpZiAobm9kZS0+aGFzU3ludGhldGljQXR0ckNoaWxkTm9kZXMoKSkgewotICAgICAg
ICAgICAgZm9yIChhdXRvJiBhdHRyIDogZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmF0dHJOb2Rl
TGlzdCgpKQotICAgICAgICAgICAgICAgIG1vdmVUcmVlVG9OZXdTY29wZSgqYXR0ciwgb2xkU2Nv
cGUsIG5ld1Njb3BlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdXRvKiBzaGFkb3cgPSBu
b2RlLT5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCZzaGFkb3ctPmRvY3VtZW50KCkgPT0gJm9sZERvY3VtZW50KTsKLSAgICAgICAg
ICAgIHNoYWRvdy0+c2V0UGFyZW50VHJlZVNjb3BlKG5ld1Njb3BlKTsKLSAgICAgICAgICAgIGlm
ICh3aWxsTW92ZVRvTmV3RG9jdW1lbnQpCi0gICAgICAgICAgICAgICAgbW92ZVNoYWRvd1RyZWVU
b05ld0RvY3VtZW50KCpzaGFkb3csIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQotICAgICAgICBvbGRE
b2N1bWVudC5kZWNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCgpOwotfQotCi0jaWYgIUFTU0VS
VF9ESVNBQkxFRCB8fCBFTkFCTEUoU0VDVVJJVFlfQVNTRVJUSU9OUykKLXN0YXRpYyBib29sIGRp
ZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkID0gZmFsc2U7Ci1zdGF0aWMgRG9jdW1lbnQqIG9s
ZERvY3VtZW50RGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWRXaXRoID0gbnVsbHB0cjsKLQot
dm9pZCBUcmVlU2NvcGU6OmVuc3VyZURpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkKERvY3Vt
ZW50JiBvbGREb2N1bWVudCkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TighZGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWQpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCZvbGREb2N1bWVudCA9PSBvbGREb2N1bWVudERpZE1vdmVUb05ld0Rv
Y3VtZW50V2FzQ2FsbGVkV2l0aCk7Ci0gICAgZGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWQg
PSB0cnVlOwotfQotI2VuZGlmCi0KLXZvaWQgVHJlZVNjb3BlOjptb3ZlTm9kZVRvTmV3RG9jdW1l
bnQoTm9kZSYgbm9kZSwgRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1l
bnQpCi17Ci0gICAgQVNTRVJUKCFub2RlLmlzQ29ubmVjdGVkKCkgfHwgJm9sZERvY3VtZW50ICE9
ICZuZXdEb2N1bWVudCk7Ci0KLSAgICBuZXdEb2N1bWVudC5pbmNyZW1lbnRSZWZlcmVuY2luZ05v
ZGVDb3VudCgpOwotICAgIG9sZERvY3VtZW50LmRlY3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50
KCk7Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVEIHx8IEVOQUJMRShTRUNVUklUWV9BU1NFUlRJT05T
KQotICAgIGRpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkID0gZmFsc2U7Ci0gICAgb2xkRG9j
dW1lbnREaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxlZFdpdGggPSAmb2xkRG9jdW1lbnQ7Ci0j
ZW5kaWYKLQotICAgIG5vZGUuZGlkTW92ZVRvTmV3RG9jdW1lbnQob2xkRG9jdW1lbnQsIG5ld0Rv
Y3VtZW50KTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihkaWRNb3ZlVG9O
ZXdEb2N1bWVudFdhc0NhbGxlZCk7Ci19Ci0KLXZvaWQgVHJlZVNjb3BlOjptb3ZlU2hhZG93VHJl
ZVRvTmV3RG9jdW1lbnQoU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgRG9jdW1lbnQmIG9sZERvY3Vt
ZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCi17Ci0gICAgZm9yIChOb2RlKiBub2RlID0gJnNo
YWRvd1Jvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCAmc2hhZG93
Um9vdCkpIHsKLSAgICAgICAgbW92ZU5vZGVUb05ld0RvY3VtZW50KCpub2RlLCBvbGREb2N1bWVu
dCwgbmV3RG9jdW1lbnQpOwotICAgICAgICBpZiAoYXV0byogc2hhZG93ID0gbm9kZS0+c2hhZG93
Um9vdCgpKQotICAgICAgICAgICAgbW92ZVNoYWRvd1RyZWVUb05ld0RvY3VtZW50KCpzaGFkb3cs
IG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7Ci0gICAgfQotfQotCiBzdGF0aWMgRWxlbWVudCog
Zm9jdXNlZEZyYW1lT3duZXJFbGVtZW50KEZyYW1lKiBmb2N1c2VkRnJhbWUsIEZyYW1lKiBjdXJy
ZW50RnJhbWUpCiB7CiAgICAgZm9yICg7IGZvY3VzZWRGcmFtZTsgZm9jdXNlZEZyYW1lID0gZm9j
dXNlZEZyYW1lLT50cmVlKCkucGFyZW50KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJ
KHJldmlzaW9uIDIxNzk1NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAkod29y
a2luZyBjb3B5KQpAQCAtOTYsMTQgKzk2LDYgQEAgcHVibGljOgogICAgIC8vIHF1aXJrcyBtb2Rl
IGZvciBoaXN0b3JpY2FsIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KICAgICBFbGVtZW50KiBmaW5k
QW5jaG9yKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICAvLyBVc2VkIGJ5IHRoZSBiYXNpYyBE
T00gbXV0YXRpb24gbWV0aG9kcyAoZS5nLiwgYXBwZW5kQ2hpbGQoKSkuCi0gICAgdm9pZCBhZG9w
dElmTmVlZGVkKE5vZGUmKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVEIHx8IEVOQUJMRShTRUNVUklU
WV9BU1NFUlRJT05TKQotICAgIHN0YXRpYyB2b2lkIGVuc3VyZURpZE1vdmVUb05ld0RvY3VtZW50
V2FzQ2FsbGVkKERvY3VtZW50JiBvbGREb2N1bWVudCk7Ci0jZWxzZQotICAgIHN0YXRpYyB2b2lk
IGVuc3VyZURpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkKERvY3VtZW50JikgeyB9Ci0jZW5k
aWYKLQogICAgIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yb290
Tm9kZTsgfQogCiAgICAgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5JiBpZFRhcmdldE9ic2VydmVy
UmVnaXN0cnkoKSBjb25zdCB7IHJldHVybiAqbV9pZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuZ2V0
KCk7IH0KQEAgLTEyMiw5ICsxMTQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgTm9kZSogbm9kZUZyb21Q
b2ludChjb25zdCBMYXlvdXRQb2ludCYgY2xpZW50UG9pbnQsIExheW91dFBvaW50KiBsb2NhbFBv
aW50KTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIG1vdmVUcmVlVG9OZXdTY29wZShOb2RlJiwgVHJl
ZVNjb3BlJiBvbGRTY29wZSwgVHJlZVNjb3BlJiBuZXdTY29wZSk7Ci0gICAgdm9pZCBtb3ZlTm9k
ZVRvTmV3RG9jdW1lbnQoTm9kZSYsIERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5l
d0RvY3VtZW50KTsKLSAgICB2b2lkIG1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudChTaGFkb3dS
b290JiwgRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpOwogCiAg
ICAgQ29udGFpbmVyTm9kZSYgbV9yb290Tm9kZTsKICAgICBzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PERvY3VtZW50PiBtX2RvY3VtZW50U2NvcGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZW1wbGF0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIxNzk1NykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcg
Kzg4LDcgQEAgdm9pZCBIVE1MVGVtcGxhdGVFbGVtZW50OjpkaWRNb3ZlVG9OZXdEbwogICAgIGlm
ICghbV9jb250ZW50KQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oJmRvY3VtZW50KCkgPT0gJm5ld0RvY3VtZW50KTsKLSAgICBuZXdEb2N1bWVu
dC5lbnN1cmVUZW1wbGF0ZURvY3VtZW50KCkuYWRvcHRJZk5lZWRlZCgqbV9jb250ZW50KTsKKyAg
ICBtX2NvbnRlbnQtPnNldFRyZWVTY29wZVJlY3Vyc2l2ZWx5KG5ld0RvY3VtZW50LmVuc3VyZVRl
bXBsYXRlRG9jdW1lbnQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312389</attachid>
            <date>2017-06-08 23:01:29 -0700</date>
            <delta_ts>2017-06-08 23:47:25 -0700</delta_ts>
            <desc>Fixed relase builds</desc>
            <filename>bug-173129-20170608230128.patch</filename>
            <type>text/plain</type>
            <size>24040</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNzk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE3LTA2LTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgVHJlZVNjb3BlOjphZG9w
dElmTmVlZGVkIHRvIE5vZGUgYW5kIHJlbmFtZSBpdCB0byBzZXRUcmVlU2NvcGVSZWN1cnNpdmVs
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMTI5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1l
ZCBUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQgdG8gc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkgYW5k
IG1vdmVkIHRvIE5vZGUuCisKKyAgICAgICAgVGhlIG9sZCBuYW1lIHdhcyByZWFsbHkgY29uZnVz
aW5nIGJlY2F1c2UgZHVlIHRvIHRoZSBleGlzdGVuY2Ugb2YgRG9jdW1lbnQ6OmFkb3B0Tm9kZSwg
YSBET00gQVBJLAorICAgICAgICB3aGljaCByZW1vdmVzIHRoZSBhZG9wdGVkIG5vZGUgZnJvbSBp
dHMgcGFyZW50IGlmIHRoZXJlIHdhcyBvbmUgYmVmb3JlIGFkb3B0aW5nIHRoZSBub2RlLgorICAg
ICAgICBNb3N0IGNvbmZ1c2luZ2x5LCB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBUcmVlU2NvcGU6OmFk
b3B0SWZOZWVkZWQuCisKKyAgICAgICAgQWxzbyBpbmxpbmVkIHRoZSB0cmVlIHNjb3BlIGNoZWNr
IHRvIGF2b2lkIGNhbGxpbmcgdG8gbW92ZVRyZWVUb05ld1Njb3BlIHdoZW4gdGhlcmUgaXMgbm90
aGluZyB0byBkby4KKworICAgICAgICBUaGlzIHBhdGNoIGVmZmVjdGl2ZWx5IHJldmVydHMgcjEw
NDUyOC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIHRlc3RzIGNvdmVyIHRoaXMu
CisKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpkZXRh
Y2hGcm9tRWxlbWVudFdpdGhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjphdHRhY2hU
b0VsZW1lbnQpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OnRha2VBbGxDaGlsZHJlbkZyb20pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGFpbmVyTm9kZTo6aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJO
b2RlOjpyZW1vdmVCZXR3ZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnJl
cGxhY2VBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjphcHBl
bmRDaGlsZFdpdGhvdXRQcmVJbnNlcnRpb25WYWxpZGl0eUNoZWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlckFwcGVuZENoaWxkKToKKyAgICAgICAgKiBkb20vQ29u
dGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkQ2hpbGROb2Rl
c1RvRGVsZXRpb25RdWV1ZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjphZG9wdE5vZGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZUF0dHIpOgorICAgICAgICAqIGRv
bS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0
aW9uU2NvcGUpOiBBZGRlZC4gVGhlIG9sZCBhc3NlcnRpb24gd2Fzbid0IHN1ZmZpY2llbnQgd2hl
bgorICAgICAgICBIVE1MVGVtcGxhdGVFbGVtZW50IG1hZGUgYSByZWN1cnNpdmUgY2FsbCB0byBz
ZXRUcmVlU2NvcGVSZWN1cnNpdmVseS4KKyAgICAgICAgKFdlYkNvcmU6OkRpZE1vdmVUb05ld0Rv
Y3VtZW50QXNzZXJ0aW9uU2NvcGU6OkRpZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZTo6
fkRpZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZTo6ZGlkUmVjaWV2ZUNhbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6bW92ZU5vZGVUb05ld0RvY3VtZW50KTogTW92ZWQgZnJvbSBUcmVlU2Nv
cGUuIENhbGxzIHRvIGluY3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50CisgICAgICAgIGFuZCBk
ZWNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCB0byBOb2RlOjpkaWRNb3ZlVG9OZXdEb2N1bWVu
dC4gVGhpcyBmdW5jdGlvbiBpcyBub3cgZWxpbWluYXRlZAorICAgICAgICBpbiBhIHJlbGVhc2Ug
YnVpbGQuCisgICAgICAgIChXZWJDb3JlOjptb3ZlU2hhZG93VHJlZVRvTmV3RG9jdW1lbnQpOiBN
b3ZlZCBmcm9tIFRyZWVTY29wZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om1vdmVUcmVlVG9O
ZXdTY29wZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlkTW92ZVRvTmV3RG9j
dW1lbnQpOiBTZWUgdGhlIGRlc2NyaXB0aW9uIGZvciBtb3ZlTm9kZVRvTmV3RG9jdW1lbnQgYWJv
dmUuCisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzUGFy
c2luZ0NoaWxkcmVuRmluaXNoZWQpOiBNb3ZlZCB0byBhdm9pZCBoYXZpbmcgaXRzIG93biBwcm90
ZWN0ZWQgc2VjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldElzUGFyc2luZ0NoaWxk
cmVuRmluaXNoZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFySXNQYXJz
aW5nQ2hpbGRyZW5GaW5pc2hlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2V0
VHJlZVNjb3BlUmVjdXJzaXZlbHkpOiBNb3ZlZCBmcm9tIFRyZWVTY29wZTo6YWRvcHRJZk5lZWRl
ZC4KKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFk
b3dSb290Ojp+U2hhZG93Um9vdCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VHJlZVNjb3BlOjptb3ZlVHJlZVRvTmV3U2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjplbnN1cmVEaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0Nh
bGxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6Om1vdmVOb2RlVG9O
ZXdEb2N1bWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6Om1vdmVT
aGFkb3dUcmVlVG9OZXdEb2N1bWVudCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1RyZWVTY29w
ZS5oOgorICAgICAgICAqIGh0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGVtcGxhdGVFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudCk6CisKIDIw
MTctMDYtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9T
XSBMb3dQb3dlck1vZGVOb3RpZmllciBub3RpZmllcyBjbGllbnQgb24gbm9uLW1haW4gdGhyZWFk
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0F0dHIuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vQXR0ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIEF0
dHI6OmRldGFjaEZyb21FbGVtZW50V2l0aFZhbHVlKGNvCiAgICAgQVNTRVJUKG1fc3RhbmRhbG9u
ZVZhbHVlLmlzTnVsbCgpKTsKICAgICBtX3N0YW5kYWxvbmVWYWx1ZSA9IHZhbHVlOwogICAgIG1f
ZWxlbWVudCA9IG51bGxwdHI7Ci0gICAgZG9jdW1lbnQoKS5hZG9wdElmTmVlZGVkKCp0aGlzKTsK
KyAgICBzZXRUcmVlU2NvcGVSZWN1cnNpdmVseShkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBBdHRy
OjphdHRhY2hUb0VsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKQEAgLTE0Myw3ICsxNDMsNyBAQCB2
b2lkIEF0dHI6OmF0dGFjaFRvRWxlbWVudChFbGVtZW50JiBlbGVtCiAgICAgQVNTRVJUKCFtX2Vs
ZW1lbnQpOwogICAgIG1fZWxlbWVudCA9ICZlbGVtZW50OwogICAgIG1fc3RhbmRhbG9uZVZhbHVl
ID0gbnVsbEF0b207Ci0gICAgZWxlbWVudC50cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKCp0aGlz
KTsKKyAgICBzZXRUcmVlU2NvcGVSZWN1cnNpdmVseShlbGVtZW50LnRyZWVTY29wZSgpKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMjE3
OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBDb250YWluZXJOb2RlOjp0YWtlQWxsQ2hpbGRy
ZW5Gcm9tKAogICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghY2hpbGQtPnBhcmVudE5vZGUoKSAmJiAmY2hpbGQtPnRyZWVTY29wZSgpID09
ICZ0cmVlU2NvcGUoKSk7CiAgICAgICAgIEFTU0VSVCghZW5zdXJlUHJlSW5zZXJ0aW9uVmFsaWRp
dHkoY2hpbGQsIG51bGxwdHIpLmhhc0V4Y2VwdGlvbigpKTsKLSAgICAgICAgdHJlZVNjb3BlKCku
YWRvcHRJZk5lZWRlZChjaGlsZCk7CisgICAgICAgIGNoaWxkLT5zZXRUcmVlU2NvcGVSZWN1cnNp
dmVseSh0cmVlU2NvcGUoKSk7CiAgICAgICAgIHBhcnNlckFwcGVuZENoaWxkKGNoaWxkKTsKICAg
ICB9CiB9CkBAIC0yOTAsNyArMjkwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFpbmVyTm9k
ZTo6aW5zZXJ0QgogICAgICAgICB7CiAgICAgICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwogCi0gICAgICAgICAgICB0cmVlU2NvcGUoKS5hZG9w
dElmTmVlZGVkKGNoaWxkKTsKKyAgICAgICAgICAgIGNoaWxkLT5zZXRUcmVlU2NvcGVSZWN1cnNp
dmVseSh0cmVlU2NvcGUoKSk7CiAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24obmV4dCwg
Y2hpbGQpOwogICAgICAgICB9CiAKQEAgLTQ2Niw3ICs0NjYsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBDb250YWluZXJOb2RlOjpyZXBsYWNlCiAKICAgICAgICAgewogICAgICAgICAgICAgTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKLSAgICAgICAgICAgIHRy
ZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoY2hpbGQpOworICAgICAgICAgICAgY2hpbGQtPnNldFRy
ZWVTY29wZVJlY3Vyc2l2ZWx5KHRyZWVTY29wZSgpKTsKICAgICAgICAgICAgIGlmIChyZWZDaGls
ZCkKICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24oKnJlZkNoaWxkLCBjaGlsZC5n
ZXQoKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBDb250YWlu
ZXJOb2RlOjpyZW1vdmVCZXR3ZWVuKE5vZGUqIAogICAgIEFTU0VSVCghb2xkQ2hpbGQubmV4dFNp
YmxpbmcoKSk7CiAgICAgb2xkQ2hpbGQuc2V0UGFyZW50Tm9kZShudWxscHRyKTsKIAotICAgIGRv
Y3VtZW50KCkuYWRvcHRJZk5lZWRlZChvbGRDaGlsZCk7CisgICAgb2xkQ2hpbGQuc2V0VHJlZVNj
b3BlUmVjdXJzaXZlbHkoZG9jdW1lbnQoKSk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6cGFy
c2VyUmVtb3ZlQ2hpbGQoTm9kZSYgb2xkQ2hpbGQpCkBAIC02NDEsNyArNjQxLDcgQEAgdm9pZCBD
b250YWluZXJOb2RlOjpyZXBsYWNlQWxsQ2hpbGRyZW4oUgogICAgIENoaWxkTGlzdE11dGF0aW9u
U2NvcGUgbXV0YXRpb24oKnRoaXMpOwogCiAgICAgLy8gSWYgbm9kZSBpcyBub3QgbnVsbCwgYWRv
cHQgbm9kZSBpbnRvIHBhcmVudCdzIG5vZGUgZG9jdW1lbnQuCi0gICAgdHJlZVNjb3BlKCkuYWRv
cHRJZk5lZWRlZChub2RlKTsKKyAgICBub2RlLT5zZXRUcmVlU2NvcGVSZWN1cnNpdmVseSh0cmVl
U2NvcGUoKSk7CiAKICAgICAvLyBSZW1vdmUgYWxsIHBhcmVudCdzIGNoaWxkcmVuLCBpbiB0cmVl
IG9yZGVyLgogICAgIHdpbGxSZW1vdmVDaGlsZHJlbigqdGhpcyk7CkBAIC03NTYsNyArNzU2LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFpbmVyTm9kZTo6YXBwZW5kQwogICAgICAgICAvLyBB
cHBlbmQgY2hpbGQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAogICAgICAgICB7CiAgICAgICAgICAg
ICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwotICAgICAg
ICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZChjaGlsZCk7CisgICAgICAgICAgICBjaGls
ZC0+c2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkodHJlZVNjb3BlKCkpOwogICAgICAgICAgICAgYXBw
ZW5kQ2hpbGRDb21tb24oY2hpbGQpOwogICAgICAgICB9CiAKQEAgLTc4MCw3ICs3ODAsNyBAQCB2
b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckFwcGVuZENoaWxkKE5vCiAgICAgICAgICAgICBkb2N1
bWVudCgpLmFkb3B0Tm9kZShuZXdDaGlsZCk7CiAKICAgICAgICAgYXBwZW5kQ2hpbGRDb21tb24o
bmV3Q2hpbGQpOwotICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKG5ld0NoaWxkKTsK
KyAgICAgICAgbmV3Q2hpbGQuc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkodHJlZVNjb3BlKCkpOwog
ICAgIH0KIAogICAgIG5ld0NoaWxkLnVwZGF0ZUFuY2VzdG9yQ29ubmVjdGVkU3ViZnJhbWVDb3Vu
dEZvckluc2VydGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVB
bGdvcml0aG1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZUFsZ29yaXRobXMuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyAr
MTc5LDcgQEAgdm9pZCBhZGRDaGlsZE5vZGVzVG9EZWxldGlvblF1ZXVlKE5vZGUqJgogICAgICAg
ICAgICAgdGFpbCA9IG5vZGU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBSZWY8Tm9k
ZT4gcHJvdGVjdCgqbm9kZSk7IC8vIHJlbW92ZWRGcm9tRG9jdW1lbnQgbWF5IHJlbW92ZSByZW1v
dmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgotICAgICAgICAgICAgY29udGFpbmVyLmRv
Y3VtZW50KCkuYWRvcHRJZk5lZWRlZCgqbm9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRUcmVl
U2NvcGVSZWN1cnNpdmVseShjb250YWluZXIuZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBpZiAo
bm9kZS0+aXNJblRyZWVTY29wZSgpKQogICAgICAgICAgICAgICAgIG5vdGlmeUNoaWxkTm9kZVJl
bW92ZWQoY29udGFpbmVyLCAqbm9kZSk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTighbm9kZS0+aXNJblRyZWVTY29wZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTkxLDcgKzk5MSw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxOb2RlPj4gRG9jdW1lbnQ6OmFkb3B0Tm8KICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oIXNvdXJjZS5wYXJlbnROb2RlKCkpOwogICAgIH0KIAotICAgIGFkb3B0SWZO
ZWVkZWQoc291cmNlKTsKKyAgICBzb3VyY2Uuc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkoKnRoaXMp
OwogCiAgICAgcmV0dXJuIFJlZjxOb2RlPiB7IHNvdXJjZSB9OwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEyLDcgKzM0MTIsNyBAQCBSZWY8QXR0cj4gRWxl
bWVudDo6ZW5zdXJlQXR0cihjb25zdCBRdWFsCiAgICAgUmVmUHRyPEF0dHI+IGF0dHJOb2RlID0g
ZmluZEF0dHJOb2RlSW5MaXN0KGF0dHJOb2RlTGlzdCwgbmFtZSk7CiAgICAgaWYgKCFhdHRyTm9k
ZSkgewogICAgICAgICBhdHRyTm9kZSA9IEF0dHI6OmNyZWF0ZSgqdGhpcywgbmFtZSk7Ci0gICAg
ICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoKmF0dHJOb2RlKTsKKyAgICAgICAgYXR0ck5v
ZGUtPnNldFRyZWVTY29wZVJlY3Vyc2l2ZWx5KHRyZWVTY29wZSgpKTsKICAgICAgICAgYXR0ck5v
ZGVMaXN0LmFwcGVuZChhdHRyTm9kZSk7CiAgICAgfQogICAgIHJldHVybiBhdHRyTm9kZS5yZWxl
YXNlTm9uTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIyLDEwICsx
OTIyLDEyNSBAQCBFdmVudFRhcmdldEludGVyZmFjZSBOb2RlOjpldmVudFRhcmdldEluCiAgICAg
cmV0dXJuIE5vZGVFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVEIHx8IEVOQUJMRShTRUNVUklUWV9BU1NFUlRJT05TKQorY2xhc3MgRGlkTW92ZVRvTmV3
RG9jdW1lbnRBc3NlcnRpb25TY29wZSB7CitwdWJsaWM6CisgICAgRGlkTW92ZVRvTmV3RG9jdW1l
bnRBc3NlcnRpb25TY29wZShOb2RlJiBub2RlLCBEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3Vt
ZW50JiBuZXdEb2N1bWVudCkKKyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX29s
ZERvY3VtZW50KG9sZERvY3VtZW50KQorICAgICAgICAsIG1fbmV3RG9jdW1lbnQobmV3RG9jdW1l
bnQpCisgICAgICAgICwgbV9wcmV2aW91c1Njb3BlKHNfc2NvcGUpCisgICAgeworICAgICAgICBz
X3Njb3BlID0gdGhpczsKKyAgICB9CisKKyAgICB+RGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRp
b25TY29wZSgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihtX2NhbGxlZCk7CisgICAgICAgIHNfc2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgZGlkUmVjaWV2ZUNhbGwoTm9kZSYgbm9kZSwgRG9jdW1lbnQmIG9s
ZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCisgICAgeworICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzX3Njb3BlKTsKKyAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oIXNfc2NvcGUtPm1fY2FsbGVkKTsKKyAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oJnNfc2NvcGUtPm1fbm9kZSA9PSAmbm9kZSk7Cisg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCZzX3Njb3BlLT5tX29sZERv
Y3VtZW50ID09ICZvbGREb2N1bWVudCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCZzX3Njb3BlLT5tX25ld0RvY3VtZW50ID09ICZuZXdEb2N1bWVudCk7CisgICAg
ICAgIHNfc2NvcGUtPm1fY2FsbGVkID0gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTm9k
ZSYgbV9ub2RlOworICAgIERvY3VtZW50JiBtX29sZERvY3VtZW50OworICAgIERvY3VtZW50JiBt
X25ld0RvY3VtZW50OworICAgIGJvb2wgbV9jYWxsZWQgeyBmYWxzZSB9OworICAgIERpZE1vdmVU
b05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGUqIG1fcHJldmlvdXNTY29wZTsKKworICAgIHN0YXRp
YyBEaWRNb3ZlVG9OZXdEb2N1bWVudEFzc2VydGlvblNjb3BlKiBzX3Njb3BlOworfTsKKworRGlk
TW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZSogRGlkTW92ZVRvTmV3RG9jdW1lbnRBc3Nl
cnRpb25TY29wZTo6c19zY29wZSA9IG51bGxwdHI7CisKKyNlbHNlCitjbGFzcyBEaWRNb3ZlVG9O
ZXdEb2N1bWVudEFzc2VydGlvblNjb3BlIHsKKyAgICBEaWRNb3ZlVG9OZXdEb2N1bWVudEFzc2Vy
dGlvblNjb3BlKE5vZGUmLCBEb2N1bWVudCYsIERvY3VtZW50JikKKyAgICB7IH0KK307CisjZW5k
aWYKKworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBtb3ZlTm9kZVRvTmV3RG9jdW1lbnQoTm9k
ZSYgbm9kZSwgRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCit7
CisgICAgQVNTRVJUKCFub2RlLmlzQ29ubmVjdGVkKCkgfHwgJm9sZERvY3VtZW50ICE9ICZuZXdE
b2N1bWVudCk7CisgICAgRGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZSBzY29wZShu
b2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgIG5vZGUuZGlkTW92ZVRvTmV3RG9j
dW1lbnQob2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKK30KKworc3RhdGljIHZvaWQgbW92ZVNo
YWRvd1RyZWVUb05ld0RvY3VtZW50KFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QsIERvY3VtZW50JiBv
bGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQoreworICAgIGZvciAoTm9kZSogbm9k
ZSA9ICZzaGFkb3dSb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwg
JnNoYWRvd1Jvb3QpKSB7CisgICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVudCgqbm9kZSwgb2xk
RG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKKyAgICAgICAgaWYgKGF1dG8qIHNoYWRvdyA9IG5vZGUt
PnNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIG1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudCgq
c2hhZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgIH0KK30KKwordm9pZCBOb2Rl
Ojptb3ZlVHJlZVRvTmV3U2NvcGUoTm9kZSYgcm9vdCwgVHJlZVNjb3BlJiBvbGRTY29wZSwgVHJl
ZVNjb3BlJiBuZXdTY29wZSkKK3sKKyAgICBBU1NFUlQoJm9sZFNjb3BlICE9ICZuZXdTY29wZSk7
CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oJnJvb3QudHJlZVNjb3BlKCkg
PT0gJm9sZFNjb3BlKTsKKworICAgIC8vIElmIGFuIGVsZW1lbnQgaXMgbW92ZWQgZnJvbSBhIGRv
Y3VtZW50IGFuZCB0aGVuIGV2ZW50dWFsbHkgYmFjayBhZ2FpbiB0aGUgY29sbGVjdGlvbiBjYWNo
ZSBmb3IKKyAgICAvLyB0aGF0IGVsZW1lbnQgbWF5IGNvbnRhaW4gc3RhbGUgZGF0YSBhcyBjaGFu
Z2VzIG1hZGUgdG8gaXQgd2lsbCBoYXZlIHVwZGF0ZWQgdGhlIERPTVRyZWVWZXJzaW9uCisgICAg
Ly8gb2YgdGhlIGRvY3VtZW50IGl0IHdhcyBtb3ZlZCB0by4gQnkgaW5jcmVhc2luZyB0aGUgRE9N
VHJlZVZlcnNpb24gb2YgdGhlIGRvbmF0aW5nIGRvY3VtZW50IGhlcmUKKyAgICAvLyB3ZSBlbnN1
cmUgdGhhdCB0aGUgY29sbGVjdGlvbiBjYWNoZSB3aWxsIGJlIGludmFsaWRhdGVkIGFzIG5lZWRl
ZCB3aGVuIHRoZSBlbGVtZW50IGlzIG1vdmVkIGJhY2suCisgICAgRG9jdW1lbnQmIG9sZERvY3Vt
ZW50ID0gb2xkU2NvcGUuZG9jdW1lbnRTY29wZSgpOworICAgIERvY3VtZW50JiBuZXdEb2N1bWVu
dCA9IG5ld1Njb3BlLmRvY3VtZW50U2NvcGUoKTsKKyAgICBib29sIHNob3VsZFVwZGF0ZURvY3Vt
ZW50U2NvcGUgPSAmb2xkRG9jdW1lbnQgIT0gJm5ld0RvY3VtZW50OworICAgIGlmIChzaG91bGRV
cGRhdGVEb2N1bWVudFNjb3BlKSB7CisgICAgICAgIG9sZERvY3VtZW50LmluY3JlbWVudFJlZmVy
ZW5jaW5nTm9kZUNvdW50KCk7CisgICAgICAgIG9sZERvY3VtZW50LmluY0RPTVRyZWVWZXJzaW9u
KCk7CisgICAgfQorCisgICAgZm9yIChOb2RlKiBub2RlID0gJnJvb3Q7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCAmcm9vdCkpIHsKKyAgICAgICAgQVNTRVJUKCFub2Rl
LT5pc1RyZWVTY29wZSgpKTsKKyAgICAgICAgQVNTRVJUKCZub2RlLT50cmVlU2NvcGUoKSA9PSAm
b2xkU2NvcGUpOworICAgICAgICBub2RlLT5zZXRUcmVlU2NvcGUobmV3U2NvcGUpOworCisgICAg
ICAgIGlmIChzaG91bGRVcGRhdGVEb2N1bWVudFNjb3BlKQorICAgICAgICAgICAgbW92ZU5vZGVU
b05ld0RvY3VtZW50KCpub2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgICAgICBl
bHNlIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogbm9k
ZUxpc3RzID0gbm9kZS0+cmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCisgICAgICAgICAgICAgICAg
bm9kZUxpc3RzLT5hZG9wdFRyZWVTY29wZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFp
czxFbGVtZW50Pigqbm9kZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAo
bm9kZS0+aGFzU3ludGhldGljQXR0ckNoaWxkTm9kZXMoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvJiBhdHRyIDogZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmF0dHJOb2RlTGlzdCgpKQorICAg
ICAgICAgICAgICAgIG1vdmVUcmVlVG9OZXdTY29wZSgqYXR0ciwgb2xkU2NvcGUsIG5ld1Njb3Bl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBzaGFkb3cgPSBub2RlLT5zaGFkb3dS
b290KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCZz
aGFkb3ctPmRvY3VtZW50KCkgPT0gJm9sZERvY3VtZW50KTsKKyAgICAgICAgICAgIHNoYWRvdy0+
c2V0UGFyZW50VHJlZVNjb3BlKG5ld1Njb3BlKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRVcGRh
dGVEb2N1bWVudFNjb3BlKQorICAgICAgICAgICAgICAgIG1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1
bWVudCgqc2hhZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKHNob3VsZFVwZGF0ZURvY3VtZW50U2NvcGUpCisgICAgICAgIG9sZERvY3Vt
ZW50LmRlY3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50KCk7Cit9CisKIHZvaWQgTm9kZTo6ZGlk
TW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9j
dW1lbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oJmRvY3VtZW50
KCkgPT0gJm5ld0RvY3VtZW50KTsKLSAgICBUcmVlU2NvcGU6OmVuc3VyZURpZE1vdmVUb05ld0Rv
Y3VtZW50V2FzQ2FsbGVkKG9sZERvY3VtZW50KTsKKyAgICBEaWRNb3ZlVG9OZXdEb2N1bWVudEFz
c2VydGlvblNjb3BlOjpkaWRSZWNpZXZlQ2FsbCgqdGhpcywgb2xkRG9jdW1lbnQsIG5ld0RvY3Vt
ZW50KTsKKworICAgIG5ld0RvY3VtZW50LmluY3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50KCk7
CisgICAgb2xkRG9jdW1lbnQuZGVjcmVtZW50UmVmZXJlbmNpbmdOb2RlQ291bnQoKTsKIAogICAg
IGlmIChoYXNSYXJlRGF0YSgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBub2RlTGlzdHMgPSByYXJl
RGF0YSgpLT5ub2RlTGlzdHMoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjE3OTU3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fdHJlZVNjb3BlKTsKICAgICAgICAgcmV0
dXJuICptX3RyZWVTY29wZTsKICAgICB9CisgICAgdm9pZCBzZXRUcmVlU2NvcGVSZWN1cnNpdmVs
eShUcmVlU2NvcGUmKTsKICAgICBzdGF0aWMgcHRyZGlmZl90IHRyZWVTY29wZU1lbW9yeU9mZnNl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihOb2RlLCBtX3RyZWVTY29wZSk7IH0KIAogICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZG9jdW1l
bnQgYW5kIGlzIGluIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50J3MKQEAgLTQ5MCw2ICs0OTEsOCBA
QCBwdWJsaWM6CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2Uo
KSBjb25zdCBvdmVycmlkZTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QgZmluYWw7IC8vIEltcGxlbWVudGVkIGluIERvY3VtZW50LmgK
IAorICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9j
dW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCk7CisKICAgICBib29sIGFkZEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZjxFdmVudExpc3RlbmVyPiYmLCBj
b25zdCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyYpIG92ZXJyaWRlOwogICAgIGJvb2wgcmVtb3Zl
RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5l
ciYsIGNvbnN0IExpc3RlbmVyT3B0aW9ucyYpIG92ZXJyaWRlOwogCkBAIC02MTQsNiArNjE3LDEw
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEZsYWcoTm9kZUZsYWdzIG1hc2spIGNvbnN0IHsg
bV9ub2RlRmxhZ3MgfD0gbWFzazsgfSAKICAgICB2b2lkIGNsZWFyRmxhZyhOb2RlRmxhZ3MgbWFz
aykgY29uc3QgeyBtX25vZGVGbGFncyAmPSB+bWFzazsgfQogCisgICAgYm9vbCBpc1BhcnNpbmdD
aGlsZHJlbkZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc1BhcnNpbmdDaGlsZHJl
bkZpbmlzaGVkRmxhZyk7IH0KKyAgICB2b2lkIHNldElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQo
KSB7IHNldEZsYWcoSXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZEZsYWcpOyB9CisgICAgdm9pZCBj
bGVhcklzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSB7IGNsZWFyRmxhZyhJc1BhcnNpbmdDaGls
ZHJlbkZpbmlzaGVkRmxhZyk7IH0KKwogICAgIGVudW0gQ29uc3RydWN0aW9uVHlwZSB7CiAgICAg
ICAgIENyZWF0ZU90aGVyID0gRGVmYXVsdE5vZGVGbGFncywKICAgICAgICAgQ3JlYXRlVGV4dCA9
IERlZmF1bHROb2RlRmxhZ3MgfCBJc1RleHRGbGFnLApAQCAtNjMxLDggKzYzOCw2IEBAIHByb3Rl
Y3RlZDoKICAgICB9OwogICAgIE5vZGUoRG9jdW1lbnQmLCBDb25zdHJ1Y3Rpb25UeXBlKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1l
bnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCk7Ci0gICAgCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1
YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JikgY29uc3QgeyB9CiAKICAg
ICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhIYXNSYXJlRGF0YUZs
YWcpOyB9CkBAIC02NzEsOSArNjc2LDExIEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpOwogCiAgICAgdm9pZCBhZGp1c3RTdHlsZVZhbGlkaXR5KFN0eWxlOjpWYWxpZGl0eSwgU3R5
bGU6OkludmFsaWRhdGlvbk1vZGUpOwotICAgIAorCiAgICAgdm9pZCogb3BhcXVlUm9vdFNsb3co
KSBjb25zdDsKIAorICAgIHN0YXRpYyB2b2lkIG1vdmVUcmVlVG9OZXdTY29wZShOb2RlJiwgVHJl
ZVNjb3BlJiBvbGRTY29wZSwgVHJlZVNjb3BlJiBuZXdTY29wZSk7CisKICAgICBpbnQgbV9yZWZD
b3VudDsKICAgICBtdXRhYmxlIHVpbnQzMl90IG1fbm9kZUZsYWdzOwogCkBAIC02ODYsMTEgKzY5
Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKICAgICAg
ICAgTm9kZVJhcmVEYXRhQmFzZSogbV9yYXJlRGF0YTsKICAgICB9IG1fZGF0YSB7IG51bGxwdHIg
fTsKLQotcHJvdGVjdGVkOgotICAgIGJvb2wgaXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCgpIGNv
bnN0IHsgcmV0dXJuIGdldEZsYWcoSXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZEZsYWcpOyB9Ci0g
ICAgdm9pZCBzZXRJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkgeyBzZXRGbGFnKElzUGFyc2lu
Z0NoaWxkcmVuRmluaXNoZWRGbGFnKTsgfQotICAgIHZvaWQgY2xlYXJJc1BhcnNpbmdDaGlsZHJl
bkZpbmlzaGVkKCkgeyBjbGVhckZsYWcoSXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZEZsYWcpOyB9
CiB9OwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNzkwLDYgKzc5MiwxNCBAQCBpbmxpbmUgdm9pZCBO
b2RlOjpzZXRIYXNWYWxpZFN0eWxlKCkKICAgICBjbGVhckZsYWcoU3R5bGVSZXNvbHV0aW9uU2hv
dWxkUmVjb21wb3NpdGVMYXllckZsYWcpOwogfQogCitpbmxpbmUgdm9pZCBOb2RlOjpzZXRUcmVl
U2NvcGVSZWN1cnNpdmVseShUcmVlU2NvcGUmIG5ld1RyZWVTY29wZSkKK3sKKyAgICBBU1NFUlQo
IWlzRG9jdW1lbnROb2RlKCkpOworICAgIEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3VuKTsKKyAg
ICBpZiAobV90cmVlU2NvcGUgIT0gJm5ld1RyZWVTY29wZSkKKyAgICAgICAgbW92ZVRyZWVUb05l
d1Njb3BlKCp0aGlzLCAqbV90cmVlU2NvcGUsIG5ld1RyZWVTY29wZSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDIxNzk1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBTaGFk
b3dSb290Ojp+U2hhZG93Um9vdCgpCiAgICAgd2lsbEJlRGVsZXRlZEZyb20oZG9jdW1lbnQoKSk7
CiAKICAgICAvLyBXZSBtdXN0IHJlbW92ZSBhbGwgb2Ygb3VyIGNoaWxkcmVuIGZpcnN0IGJlZm9y
ZSB0aGUgVHJlZVNjb3BlIGRlc3RydWN0b3IKLSAgICAvLyBydW5zIHNvIHdlIGRvbid0IGdvIHRo
cm91Z2ggVHJlZVNjb3BlOjphZG9wdElmTmVlZGVkIGZvciBlYWNoIGNoaWxkIHdpdGggYQorICAg
IC8vIHJ1bnMgc28gd2UgZG9uJ3QgZ28gdGhyb3VnaCBOb2RlOjpzZXRUcmVlU2NvcGVSZWN1cnNp
dmVseSBmb3IgZWFjaCBjaGlsZCB3aXRoIGEKICAgICAvLyBkZXN0cnVjdGVkIHRyZWUgc2NvcGUg
aW4gZWFjaCBkZXNjZW5kYW50LgogICAgIHJlbW92ZURldGFjaGVkQ2hpbGRyZW4oKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDEwMSArMzY4
LDYgQEAgRWxlbWVudCogVHJlZVNjb3BlOjpmaW5kQW5jaG9yKGNvbnN0IFN0cgogICAgIHJldHVy
biBudWxscHRyOwogfQogCi12b2lkIFRyZWVTY29wZTo6YWRvcHRJZk5lZWRlZChOb2RlJiBub2Rl
KQotewotICAgIEFTU0VSVCghbm9kZS5pc0RvY3VtZW50Tm9kZSgpKTsKLSAgICBBU1NFUlQoIW5v
ZGUubV9kZWxldGlvbkhhc0JlZ3VuKTsKLSAgICBUcmVlU2NvcGUmIHRyZWVTY29wZU9mTm9kZSA9
IG5vZGUudHJlZVNjb3BlKCk7Ci0gICAgaWYgKHRoaXMgIT0gJnRyZWVTY29wZU9mTm9kZSkKLSAg
ICAgICAgbW92ZVRyZWVUb05ld1Njb3BlKG5vZGUsIHRyZWVTY29wZU9mTm9kZSwgKnRoaXMpOwot
fQotCi12b2lkIFRyZWVTY29wZTo6bW92ZVRyZWVUb05ld1Njb3BlKE5vZGUmIHJvb3QsIFRyZWVT
Y29wZSYgb2xkU2NvcGUsIFRyZWVTY29wZSYgbmV3U2NvcGUpCi17Ci0gICAgQVNTRVJUKCZvbGRT
Y29wZSAhPSAmbmV3U2NvcGUpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCZyb290LnRyZWVTY29wZSgpID09ICZvbGRTY29wZSk7Ci0KLSAgICAvLyBJZiBhbiBlbGVtZW50
IGlzIG1vdmVkIGZyb20gYSBkb2N1bWVudCBhbmQgdGhlbiBldmVudHVhbGx5IGJhY2sgYWdhaW4g
dGhlIGNvbGxlY3Rpb24gY2FjaGUgZm9yCi0gICAgLy8gdGhhdCBlbGVtZW50IG1heSBjb250YWlu
IHN0YWxlIGRhdGEgYXMgY2hhbmdlcyBtYWRlIHRvIGl0IHdpbGwgaGF2ZSB1cGRhdGVkIHRoZSBE
T01UcmVlVmVyc2lvbgotICAgIC8vIG9mIHRoZSBkb2N1bWVudCBpdCB3YXMgbW92ZWQgdG8uIEJ5
IGluY3JlYXNpbmcgdGhlIERPTVRyZWVWZXJzaW9uIG9mIHRoZSBkb25hdGluZyBkb2N1bWVudCBo
ZXJlCi0gICAgLy8gd2UgZW5zdXJlIHRoYXQgdGhlIGNvbGxlY3Rpb24gY2FjaGUgd2lsbCBiZSBp
bnZhbGlkYXRlZCBhcyBuZWVkZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBtb3ZlZCBiYWNrLgotICAg
IERvY3VtZW50JiBvbGREb2N1bWVudCA9IG9sZFNjb3BlLmRvY3VtZW50U2NvcGUoKTsKLSAgICBE
b2N1bWVudCYgbmV3RG9jdW1lbnQgPSBuZXdTY29wZS5kb2N1bWVudFNjb3BlKCk7Ci0gICAgYm9v
bCB3aWxsTW92ZVRvTmV3RG9jdW1lbnQgPSAmb2xkRG9jdW1lbnQgIT0gJm5ld0RvY3VtZW50Owot
ICAgIGlmICh3aWxsTW92ZVRvTmV3RG9jdW1lbnQpIHsKLSAgICAgICAgb2xkRG9jdW1lbnQuaW5j
cmVtZW50UmVmZXJlbmNpbmdOb2RlQ291bnQoKTsKLSAgICAgICAgb2xkRG9jdW1lbnQuaW5jRE9N
VHJlZVZlcnNpb24oKTsKLSAgICB9Ci0KLSAgICBmb3IgKE5vZGUqIG5vZGUgPSAmcm9vdDsgbm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUsICZyb290KSkgewotICAgICAgICBB
U1NFUlQoIW5vZGUtPmlzVHJlZVNjb3BlKCkpOwotICAgICAgICBBU1NFUlQoJm5vZGUtPnRyZWVT
Y29wZSgpID09ICZvbGRTY29wZSk7Ci0gICAgICAgIG5vZGUtPnNldFRyZWVTY29wZShuZXdTY29w
ZSk7Ci0KLSAgICAgICAgaWYgKHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkKLSAgICAgICAgICAgIG1v
dmVOb2RlVG9OZXdEb2N1bWVudCgqbm9kZSwgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKLSAg
ICAgICAgZWxzZSBpZiAobm9kZS0+aGFzUmFyZURhdGEoKSkgewotICAgICAgICAgICAgaWYgKGF1
dG8qIG5vZGVMaXN0cyA9IG5vZGUtPnJhcmVEYXRhKCktPm5vZGVMaXN0cygpKQotICAgICAgICAg
ICAgICAgIG5vZGVMaXN0cy0+YWRvcHRUcmVlU2NvcGUoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgaWYgKG5vZGUtPmhhc1N5bnRoZXRpY0F0dHJDaGlsZE5vZGVzKCkpIHsKLSAgICAgICAgICAg
IGZvciAoYXV0byYgYXR0ciA6IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5hdHRyTm9kZUxpc3Qo
KSkKLSAgICAgICAgICAgICAgICBtb3ZlVHJlZVRvTmV3U2NvcGUoKmF0dHIsIG9sZFNjb3BlLCBu
ZXdTY29wZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXV0byogc2hhZG93ID0gbm9kZS0+
c2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTigmc2hhZG93LT5kb2N1bWVudCgpID09ICZvbGREb2N1bWVudCk7Ci0gICAgICAgICAgICBz
aGFkb3ctPnNldFBhcmVudFRyZWVTY29wZShuZXdTY29wZSk7Ci0gICAgICAgICAgICBpZiAod2ls
bE1vdmVUb05ld0RvY3VtZW50KQotICAgICAgICAgICAgICAgIG1vdmVTaGFkb3dUcmVlVG9OZXdE
b2N1bWVudCgqc2hhZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkKLSAgICAgICAgb2xkRG9jdW1l
bnQuZGVjcmVtZW50UmVmZXJlbmNpbmdOb2RlQ291bnQoKTsKLX0KLQotI2lmICFBU1NFUlRfRElT
QUJMRUQgfHwgRU5BQkxFKFNFQ1VSSVRZX0FTU0VSVElPTlMpCi1zdGF0aWMgYm9vbCBkaWRNb3Zl
VG9OZXdEb2N1bWVudFdhc0NhbGxlZCA9IGZhbHNlOwotc3RhdGljIERvY3VtZW50KiBvbGREb2N1
bWVudERpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkV2l0aCA9IG51bGxwdHI7Ci0KLXZvaWQg
VHJlZVNjb3BlOjplbnN1cmVEaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxlZChEb2N1bWVudCYg
b2xkRG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWRp
ZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTigmb2xkRG9jdW1lbnQgPT0gb2xkRG9jdW1lbnREaWRNb3ZlVG9OZXdEb2N1bWVu
dFdhc0NhbGxlZFdpdGgpOwotICAgIGRpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkID0gdHJ1
ZTsKLX0KLSNlbmRpZgotCi12b2lkIFRyZWVTY29wZTo6bW92ZU5vZGVUb05ld0RvY3VtZW50KE5v
ZGUmIG5vZGUsIERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQot
ewotICAgIEFTU0VSVCghbm9kZS5pc0Nvbm5lY3RlZCgpIHx8ICZvbGREb2N1bWVudCAhPSAmbmV3
RG9jdW1lbnQpOwotCi0gICAgbmV3RG9jdW1lbnQuaW5jcmVtZW50UmVmZXJlbmNpbmdOb2RlQ291
bnQoKTsKLSAgICBvbGREb2N1bWVudC5kZWNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCgpOwot
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRCB8fCBFTkFCTEUoU0VDVVJJVFlfQVNTRVJUSU9OUykKLSAg
ICBkaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxlZCA9IGZhbHNlOwotICAgIG9sZERvY3VtZW50
RGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWRXaXRoID0gJm9sZERvY3VtZW50OwotI2VuZGlm
Ci0KLSAgICBub2RlLmRpZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50LCBuZXdEb2N1bWVu
dCk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZGlkTW92ZVRvTmV3RG9j
dW1lbnRXYXNDYWxsZWQpOwotfQotCi12b2lkIFRyZWVTY29wZTo6bW92ZVNoYWRvd1RyZWVUb05l
d0RvY3VtZW50KFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QsIERvY3VtZW50JiBvbGREb2N1bWVudCwg
RG9jdW1lbnQmIG5ld0RvY3VtZW50KQotewotICAgIGZvciAoTm9kZSogbm9kZSA9ICZzaGFkb3dS
b290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgJnNoYWRvd1Jvb3Qp
KSB7Ci0gICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVudCgqbm9kZSwgb2xkRG9jdW1lbnQsIG5l
d0RvY3VtZW50KTsKLSAgICAgICAgaWYgKGF1dG8qIHNoYWRvdyA9IG5vZGUtPnNoYWRvd1Jvb3Qo
KSkKLSAgICAgICAgICAgIG1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudCgqc2hhZG93LCBvbGRE
b2N1bWVudCwgbmV3RG9jdW1lbnQpOwotICAgIH0KLX0KLQogc3RhdGljIEVsZW1lbnQqIGZvY3Vz
ZWRGcmFtZU93bmVyRWxlbWVudChGcmFtZSogZm9jdXNlZEZyYW1lLCBGcmFtZSogY3VycmVudEZy
YW1lKQogewogICAgIGZvciAoOyBmb2N1c2VkRnJhbWU7IGZvY3VzZWRGcmFtZSA9IGZvY3VzZWRG
cmFtZS0+dHJlZSgpLnBhcmVudCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNj
b3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCShyZXZp
c2lvbiAyMTc5NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDE0ICs5Niw2IEBAIHB1YmxpYzoKICAgICAvLyBxdWlya3MgbW9kZSBmb3Ig
aGlzdG9yaWNhbCBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAgICAgRWxlbWVudCogZmluZEFuY2hv
cihjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgLy8gVXNlZCBieSB0aGUgYmFzaWMgRE9NIG11
dGF0aW9uIG1ldGhvZHMgKGUuZy4sIGFwcGVuZENoaWxkKCkpLgotICAgIHZvaWQgYWRvcHRJZk5l
ZWRlZChOb2RlJik7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRCB8fCBFTkFCTEUoU0VDVVJJVFlfQVNT
RVJUSU9OUykKLSAgICBzdGF0aWMgdm9pZCBlbnN1cmVEaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0Nh
bGxlZChEb2N1bWVudCYgb2xkRG9jdW1lbnQpOwotI2Vsc2UKLSAgICBzdGF0aWMgdm9pZCBlbnN1
cmVEaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxlZChEb2N1bWVudCYpIHsgfQotI2VuZGlmCi0K
ICAgICBDb250YWluZXJOb2RlJiByb290Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdE5vZGU7
IH0KIAogICAgIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeSYgaWRUYXJnZXRPYnNlcnZlclJlZ2lz
dHJ5KCkgY29uc3QgeyByZXR1cm4gKm1faWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmdldCgpOyB9
CkBAIC0xMjIsOSArMTE0LDYgQEAgcHJvdGVjdGVkOgogICAgIE5vZGUqIG5vZGVGcm9tUG9pbnQo
Y29uc3QgTGF5b3V0UG9pbnQmIGNsaWVudFBvaW50LCBMYXlvdXRQb2ludCogbG9jYWxQb2ludCk7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBtb3ZlVHJlZVRvTmV3U2NvcGUoTm9kZSYsIFRyZWVTY29w
ZSYgb2xkU2NvcGUsIFRyZWVTY29wZSYgbmV3U2NvcGUpOwotICAgIHZvaWQgbW92ZU5vZGVUb05l
d0RvY3VtZW50KE5vZGUmLCBEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1
bWVudCk7Ci0gICAgdm9pZCBtb3ZlU2hhZG93VHJlZVRvTmV3RG9jdW1lbnQoU2hhZG93Um9vdCYs
IERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KTsKIAogICAgIENv
bnRhaW5lck5vZGUmIG1fcm9vdE5vZGU7CiAgICAgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxEb2N1
bWVudD4gbV9kb2N1bWVudFNjb3BlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVt
cGxhdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZW1wbGF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3
IEBAIHZvaWQgSFRNTFRlbXBsYXRlRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG8KICAgICBpZiAoIW1f
Y29udGVudCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKCZkb2N1bWVudCgpID09ICZuZXdEb2N1bWVudCk7Ci0gICAgbmV3RG9jdW1lbnQuZW5z
dXJlVGVtcGxhdGVEb2N1bWVudCgpLmFkb3B0SWZOZWVkZWQoKm1fY29udGVudCk7CisgICAgbV9j
b250ZW50LT5zZXRUcmVlU2NvcGVSZWN1cnNpdmVseShuZXdEb2N1bWVudC5lbnN1cmVUZW1wbGF0
ZURvY3VtZW50KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312394</attachid>
            <date>2017-06-08 23:47:27 -0700</date>
            <delta_ts>2017-06-09 00:40:58 -0700</delta_ts>
            <desc>Fixed release builds for real</desc>
            <filename>bug-173129-20170608234726.patch</filename>
            <type>text/plain</type>
            <size>24109</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNzk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE3LTA2LTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgVHJlZVNjb3BlOjphZG9w
dElmTmVlZGVkIHRvIE5vZGUgYW5kIHJlbmFtZSBpdCB0byBzZXRUcmVlU2NvcGVSZWN1cnNpdmVs
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMTI5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1l
ZCBUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQgdG8gc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkgYW5k
IG1vdmVkIHRvIE5vZGUuCisKKyAgICAgICAgVGhlIG9sZCBuYW1lIHdhcyByZWFsbHkgY29uZnVz
aW5nIGJlY2F1c2UgZHVlIHRvIHRoZSBleGlzdGVuY2Ugb2YgRG9jdW1lbnQ6OmFkb3B0Tm9kZSwg
YSBET00gQVBJLAorICAgICAgICB3aGljaCByZW1vdmVzIHRoZSBhZG9wdGVkIG5vZGUgZnJvbSBp
dHMgcGFyZW50IGlmIHRoZXJlIHdhcyBvbmUgYmVmb3JlIGFkb3B0aW5nIHRoZSBub2RlLgorICAg
ICAgICBNb3N0IGNvbmZ1c2luZ2x5LCB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBUcmVlU2NvcGU6OmFk
b3B0SWZOZWVkZWQuCisKKyAgICAgICAgQWxzbyBpbmxpbmVkIHRoZSB0cmVlIHNjb3BlIGNoZWNr
IHRvIGF2b2lkIGNhbGxpbmcgdG8gbW92ZVRyZWVUb05ld1Njb3BlIHdoZW4gdGhlcmUgaXMgbm90
aGluZyB0byBkby4KKworICAgICAgICBUaGlzIHBhdGNoIGVmZmVjdGl2ZWx5IHJldmVydHMgcjEw
NDUyOC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIHRlc3RzIGNvdmVyIHRoaXMu
CisKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpkZXRh
Y2hGcm9tRWxlbWVudFdpdGhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjphdHRhY2hU
b0VsZW1lbnQpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OnRha2VBbGxDaGlsZHJlbkZyb20pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGFpbmVyTm9kZTo6aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJO
b2RlOjpyZW1vdmVCZXR3ZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnJl
cGxhY2VBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjphcHBl
bmRDaGlsZFdpdGhvdXRQcmVJbnNlcnRpb25WYWxpZGl0eUNoZWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlckFwcGVuZENoaWxkKToKKyAgICAgICAgKiBkb20vQ29u
dGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkQ2hpbGROb2Rl
c1RvRGVsZXRpb25RdWV1ZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjphZG9wdE5vZGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZUF0dHIpOgorICAgICAgICAqIGRv
bS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0
aW9uU2NvcGUpOiBBZGRlZC4gVGhlIG9sZCBhc3NlcnRpb24gd2Fzbid0IHN1ZmZpY2llbnQgd2hl
bgorICAgICAgICBIVE1MVGVtcGxhdGVFbGVtZW50IG1hZGUgYSByZWN1cnNpdmUgY2FsbCB0byBz
ZXRUcmVlU2NvcGVSZWN1cnNpdmVseS4KKyAgICAgICAgKFdlYkNvcmU6OkRpZE1vdmVUb05ld0Rv
Y3VtZW50QXNzZXJ0aW9uU2NvcGU6OkRpZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZTo6
fkRpZE1vdmVUb05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZTo6ZGlkUmVjaWV2ZUNhbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6bW92ZU5vZGVUb05ld0RvY3VtZW50KTogTW92ZWQgZnJvbSBUcmVlU2Nv
cGUuIENhbGxzIHRvIGluY3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50CisgICAgICAgIGFuZCBk
ZWNyZW1lbnRSZWZlcmVuY2luZ05vZGVDb3VudCB0byBOb2RlOjpkaWRNb3ZlVG9OZXdEb2N1bWVu
dC4gVGhpcyBmdW5jdGlvbiBpcyBub3cgZWxpbWluYXRlZAorICAgICAgICBpbiBhIHJlbGVhc2Ug
YnVpbGQuCisgICAgICAgIChXZWJDb3JlOjptb3ZlU2hhZG93VHJlZVRvTmV3RG9jdW1lbnQpOiBN
b3ZlZCBmcm9tIFRyZWVTY29wZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om1vdmVUcmVlVG9O
ZXdTY29wZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGlkTW92ZVRvTmV3RG9j
dW1lbnQpOiBTZWUgdGhlIGRlc2NyaXB0aW9uIGZvciBtb3ZlTm9kZVRvTmV3RG9jdW1lbnQgYWJv
dmUuCisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzUGFy
c2luZ0NoaWxkcmVuRmluaXNoZWQpOiBNb3ZlZCB0byBhdm9pZCBoYXZpbmcgaXRzIG93biBwcm90
ZWN0ZWQgc2VjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldElzUGFyc2luZ0NoaWxk
cmVuRmluaXNoZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFySXNQYXJz
aW5nQ2hpbGRyZW5GaW5pc2hlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c2V0
VHJlZVNjb3BlUmVjdXJzaXZlbHkpOiBNb3ZlZCBmcm9tIFRyZWVTY29wZTo6YWRvcHRJZk5lZWRl
ZC4KKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFk
b3dSb290Ojp+U2hhZG93Um9vdCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmFkb3B0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VHJlZVNjb3BlOjptb3ZlVHJlZVRvTmV3U2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjplbnN1cmVEaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0Nh
bGxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6Om1vdmVOb2RlVG9O
ZXdEb2N1bWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6Om1vdmVT
aGFkb3dUcmVlVG9OZXdEb2N1bWVudCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1RyZWVTY29w
ZS5oOgorICAgICAgICAqIGh0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGVtcGxhdGVFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudCk6CisKIDIw
MTctMDYtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9T
XSBMb3dQb3dlck1vZGVOb3RpZmllciBub3RpZmllcyBjbGllbnQgb24gbm9uLW1haW4gdGhyZWFk
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0F0dHIuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vQXR0ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIEF0
dHI6OmRldGFjaEZyb21FbGVtZW50V2l0aFZhbHVlKGNvCiAgICAgQVNTRVJUKG1fc3RhbmRhbG9u
ZVZhbHVlLmlzTnVsbCgpKTsKICAgICBtX3N0YW5kYWxvbmVWYWx1ZSA9IHZhbHVlOwogICAgIG1f
ZWxlbWVudCA9IG51bGxwdHI7Ci0gICAgZG9jdW1lbnQoKS5hZG9wdElmTmVlZGVkKCp0aGlzKTsK
KyAgICBzZXRUcmVlU2NvcGVSZWN1cnNpdmVseShkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBBdHRy
OjphdHRhY2hUb0VsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKQEAgLTE0Myw3ICsxNDMsNyBAQCB2
b2lkIEF0dHI6OmF0dGFjaFRvRWxlbWVudChFbGVtZW50JiBlbGVtCiAgICAgQVNTRVJUKCFtX2Vs
ZW1lbnQpOwogICAgIG1fZWxlbWVudCA9ICZlbGVtZW50OwogICAgIG1fc3RhbmRhbG9uZVZhbHVl
ID0gbnVsbEF0b207Ci0gICAgZWxlbWVudC50cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKCp0aGlz
KTsKKyAgICBzZXRUcmVlU2NvcGVSZWN1cnNpdmVseShlbGVtZW50LnRyZWVTY29wZSgpKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMjE3
OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBDb250YWluZXJOb2RlOjp0YWtlQWxsQ2hpbGRy
ZW5Gcm9tKAogICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghY2hpbGQtPnBhcmVudE5vZGUoKSAmJiAmY2hpbGQtPnRyZWVTY29wZSgpID09
ICZ0cmVlU2NvcGUoKSk7CiAgICAgICAgIEFTU0VSVCghZW5zdXJlUHJlSW5zZXJ0aW9uVmFsaWRp
dHkoY2hpbGQsIG51bGxwdHIpLmhhc0V4Y2VwdGlvbigpKTsKLSAgICAgICAgdHJlZVNjb3BlKCku
YWRvcHRJZk5lZWRlZChjaGlsZCk7CisgICAgICAgIGNoaWxkLT5zZXRUcmVlU2NvcGVSZWN1cnNp
dmVseSh0cmVlU2NvcGUoKSk7CiAgICAgICAgIHBhcnNlckFwcGVuZENoaWxkKGNoaWxkKTsKICAg
ICB9CiB9CkBAIC0yOTAsNyArMjkwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFpbmVyTm9k
ZTo6aW5zZXJ0QgogICAgICAgICB7CiAgICAgICAgICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwogCi0gICAgICAgICAgICB0cmVlU2NvcGUoKS5hZG9w
dElmTmVlZGVkKGNoaWxkKTsKKyAgICAgICAgICAgIGNoaWxkLT5zZXRUcmVlU2NvcGVSZWN1cnNp
dmVseSh0cmVlU2NvcGUoKSk7CiAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24obmV4dCwg
Y2hpbGQpOwogICAgICAgICB9CiAKQEAgLTQ2Niw3ICs0NjYsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBDb250YWluZXJOb2RlOjpyZXBsYWNlCiAKICAgICAgICAgewogICAgICAgICAgICAgTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uIGFzc2VydE5vRXZlbnREaXNwYXRjaDsKLSAgICAgICAgICAgIHRy
ZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoY2hpbGQpOworICAgICAgICAgICAgY2hpbGQtPnNldFRy
ZWVTY29wZVJlY3Vyc2l2ZWx5KHRyZWVTY29wZSgpKTsKICAgICAgICAgICAgIGlmIChyZWZDaGls
ZCkKICAgICAgICAgICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24oKnJlZkNoaWxkLCBjaGlsZC5n
ZXQoKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBDb250YWlu
ZXJOb2RlOjpyZW1vdmVCZXR3ZWVuKE5vZGUqIAogICAgIEFTU0VSVCghb2xkQ2hpbGQubmV4dFNp
YmxpbmcoKSk7CiAgICAgb2xkQ2hpbGQuc2V0UGFyZW50Tm9kZShudWxscHRyKTsKIAotICAgIGRv
Y3VtZW50KCkuYWRvcHRJZk5lZWRlZChvbGRDaGlsZCk7CisgICAgb2xkQ2hpbGQuc2V0VHJlZVNj
b3BlUmVjdXJzaXZlbHkoZG9jdW1lbnQoKSk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6cGFy
c2VyUmVtb3ZlQ2hpbGQoTm9kZSYgb2xkQ2hpbGQpCkBAIC02NDEsNyArNjQxLDcgQEAgdm9pZCBD
b250YWluZXJOb2RlOjpyZXBsYWNlQWxsQ2hpbGRyZW4oUgogICAgIENoaWxkTGlzdE11dGF0aW9u
U2NvcGUgbXV0YXRpb24oKnRoaXMpOwogCiAgICAgLy8gSWYgbm9kZSBpcyBub3QgbnVsbCwgYWRv
cHQgbm9kZSBpbnRvIHBhcmVudCdzIG5vZGUgZG9jdW1lbnQuCi0gICAgdHJlZVNjb3BlKCkuYWRv
cHRJZk5lZWRlZChub2RlKTsKKyAgICBub2RlLT5zZXRUcmVlU2NvcGVSZWN1cnNpdmVseSh0cmVl
U2NvcGUoKSk7CiAKICAgICAvLyBSZW1vdmUgYWxsIHBhcmVudCdzIGNoaWxkcmVuLCBpbiB0cmVl
IG9yZGVyLgogICAgIHdpbGxSZW1vdmVDaGlsZHJlbigqdGhpcyk7CkBAIC03NTYsNyArNzU2LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gQ29udGFpbmVyTm9kZTo6YXBwZW5kQwogICAgICAgICAvLyBB
cHBlbmQgY2hpbGQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAogICAgICAgICB7CiAgICAgICAgICAg
ICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwotICAgICAg
ICAgICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZChjaGlsZCk7CisgICAgICAgICAgICBjaGls
ZC0+c2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkodHJlZVNjb3BlKCkpOwogICAgICAgICAgICAgYXBw
ZW5kQ2hpbGRDb21tb24oY2hpbGQpOwogICAgICAgICB9CiAKQEAgLTc4MCw3ICs3ODAsNyBAQCB2
b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckFwcGVuZENoaWxkKE5vCiAgICAgICAgICAgICBkb2N1
bWVudCgpLmFkb3B0Tm9kZShuZXdDaGlsZCk7CiAKICAgICAgICAgYXBwZW5kQ2hpbGRDb21tb24o
bmV3Q2hpbGQpOwotICAgICAgICB0cmVlU2NvcGUoKS5hZG9wdElmTmVlZGVkKG5ld0NoaWxkKTsK
KyAgICAgICAgbmV3Q2hpbGQuc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkodHJlZVNjb3BlKCkpOwog
ICAgIH0KIAogICAgIG5ld0NoaWxkLnVwZGF0ZUFuY2VzdG9yQ29ubmVjdGVkU3ViZnJhbWVDb3Vu
dEZvckluc2VydGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVB
bGdvcml0aG1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZUFsZ29yaXRobXMuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyAr
MTc5LDcgQEAgdm9pZCBhZGRDaGlsZE5vZGVzVG9EZWxldGlvblF1ZXVlKE5vZGUqJgogICAgICAg
ICAgICAgdGFpbCA9IG5vZGU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBSZWY8Tm9k
ZT4gcHJvdGVjdCgqbm9kZSk7IC8vIHJlbW92ZWRGcm9tRG9jdW1lbnQgbWF5IHJlbW92ZSByZW1v
dmUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgotICAgICAgICAgICAgY29udGFpbmVyLmRv
Y3VtZW50KCkuYWRvcHRJZk5lZWRlZCgqbm9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRUcmVl
U2NvcGVSZWN1cnNpdmVseShjb250YWluZXIuZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBpZiAo
bm9kZS0+aXNJblRyZWVTY29wZSgpKQogICAgICAgICAgICAgICAgIG5vdGlmeUNoaWxkTm9kZVJl
bW92ZWQoY29udGFpbmVyLCAqbm9kZSk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTighbm9kZS0+aXNJblRyZWVTY29wZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTkxLDcgKzk5MSw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxOb2RlPj4gRG9jdW1lbnQ6OmFkb3B0Tm8KICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oIXNvdXJjZS5wYXJlbnROb2RlKCkpOwogICAgIH0KIAotICAgIGFkb3B0SWZO
ZWVkZWQoc291cmNlKTsKKyAgICBzb3VyY2Uuc2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkoKnRoaXMp
OwogCiAgICAgcmV0dXJuIFJlZjxOb2RlPiB7IHNvdXJjZSB9OwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEyLDcgKzM0MTIsNyBAQCBSZWY8QXR0cj4gRWxl
bWVudDo6ZW5zdXJlQXR0cihjb25zdCBRdWFsCiAgICAgUmVmUHRyPEF0dHI+IGF0dHJOb2RlID0g
ZmluZEF0dHJOb2RlSW5MaXN0KGF0dHJOb2RlTGlzdCwgbmFtZSk7CiAgICAgaWYgKCFhdHRyTm9k
ZSkgewogICAgICAgICBhdHRyTm9kZSA9IEF0dHI6OmNyZWF0ZSgqdGhpcywgbmFtZSk7Ci0gICAg
ICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoKmF0dHJOb2RlKTsKKyAgICAgICAgYXR0ck5v
ZGUtPnNldFRyZWVTY29wZVJlY3Vyc2l2ZWx5KHRyZWVTY29wZSgpKTsKICAgICAgICAgYXR0ck5v
ZGVMaXN0LmFwcGVuZChhdHRyTm9kZSk7CiAgICAgfQogICAgIHJldHVybiBhdHRyTm9kZS5yZWxl
YXNlTm9uTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjE3OTU3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIyLDEwICsx
OTIyLDEyNiBAQCBFdmVudFRhcmdldEludGVyZmFjZSBOb2RlOjpldmVudFRhcmdldEluCiAgICAg
cmV0dXJuIE5vZGVFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVEIHx8IEVOQUJMRShTRUNVUklUWV9BU1NFUlRJT05TKQorY2xhc3MgRGlkTW92ZVRvTmV3
RG9jdW1lbnRBc3NlcnRpb25TY29wZSB7CitwdWJsaWM6CisgICAgRGlkTW92ZVRvTmV3RG9jdW1l
bnRBc3NlcnRpb25TY29wZShOb2RlJiBub2RlLCBEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3Vt
ZW50JiBuZXdEb2N1bWVudCkKKyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX29s
ZERvY3VtZW50KG9sZERvY3VtZW50KQorICAgICAgICAsIG1fbmV3RG9jdW1lbnQobmV3RG9jdW1l
bnQpCisgICAgICAgICwgbV9wcmV2aW91c1Njb3BlKHNfc2NvcGUpCisgICAgeworICAgICAgICBz
X3Njb3BlID0gdGhpczsKKyAgICB9CisKKyAgICB+RGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRp
b25TY29wZSgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihtX2NhbGxlZCk7CisgICAgICAgIHNfc2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgZGlkUmVjaWV2ZUNhbGwoTm9kZSYgbm9kZSwgRG9jdW1lbnQmIG9s
ZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCisgICAgeworICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzX3Njb3BlKTsKKyAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oIXNfc2NvcGUtPm1fY2FsbGVkKTsKKyAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oJnNfc2NvcGUtPm1fbm9kZSA9PSAmbm9kZSk7Cisg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCZzX3Njb3BlLT5tX29sZERv
Y3VtZW50ID09ICZvbGREb2N1bWVudCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCZzX3Njb3BlLT5tX25ld0RvY3VtZW50ID09ICZuZXdEb2N1bWVudCk7CisgICAg
ICAgIHNfc2NvcGUtPm1fY2FsbGVkID0gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTm9k
ZSYgbV9ub2RlOworICAgIERvY3VtZW50JiBtX29sZERvY3VtZW50OworICAgIERvY3VtZW50JiBt
X25ld0RvY3VtZW50OworICAgIGJvb2wgbV9jYWxsZWQgeyBmYWxzZSB9OworICAgIERpZE1vdmVU
b05ld0RvY3VtZW50QXNzZXJ0aW9uU2NvcGUqIG1fcHJldmlvdXNTY29wZTsKKworICAgIHN0YXRp
YyBEaWRNb3ZlVG9OZXdEb2N1bWVudEFzc2VydGlvblNjb3BlKiBzX3Njb3BlOworfTsKKworRGlk
TW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25TY29wZSogRGlkTW92ZVRvTmV3RG9jdW1lbnRBc3Nl
cnRpb25TY29wZTo6c19zY29wZSA9IG51bGxwdHI7CisKKyNlbHNlCitjbGFzcyBEaWRNb3ZlVG9O
ZXdEb2N1bWVudEFzc2VydGlvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBEaWRNb3ZlVG9OZXdEb2N1
bWVudEFzc2VydGlvblNjb3BlKE5vZGUmLCBEb2N1bWVudCYsIERvY3VtZW50JikgeyB9CisgICAg
c3RhdGljIHZvaWQgZGlkUmVjaWV2ZUNhbGwoTm9kZSYsIERvY3VtZW50JiwgRG9jdW1lbnQmKSB7
IH0KK307CisjZW5kaWYKKworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBtb3ZlTm9kZVRvTmV3
RG9jdW1lbnQoTm9kZSYgbm9kZSwgRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3
RG9jdW1lbnQpCit7CisgICAgQVNTRVJUKCFub2RlLmlzQ29ubmVjdGVkKCkgfHwgJm9sZERvY3Vt
ZW50ICE9ICZuZXdEb2N1bWVudCk7CisgICAgRGlkTW92ZVRvTmV3RG9jdW1lbnRBc3NlcnRpb25T
Y29wZSBzY29wZShub2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgIG5vZGUuZGlk
TW92ZVRvTmV3RG9jdW1lbnQob2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKK30KKworc3RhdGlj
IHZvaWQgbW92ZVNoYWRvd1RyZWVUb05ld0RvY3VtZW50KFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3Qs
IERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQoreworICAgIGZv
ciAoTm9kZSogbm9kZSA9ICZzaGFkb3dSb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dCgqbm9kZSwgJnNoYWRvd1Jvb3QpKSB7CisgICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVu
dCgqbm9kZSwgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKKyAgICAgICAgaWYgKGF1dG8qIHNo
YWRvdyA9IG5vZGUtPnNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIG1vdmVTaGFkb3dUcmVlVG9O
ZXdEb2N1bWVudCgqc2hhZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgIH0KK30K
Kwordm9pZCBOb2RlOjptb3ZlVHJlZVRvTmV3U2NvcGUoTm9kZSYgcm9vdCwgVHJlZVNjb3BlJiBv
bGRTY29wZSwgVHJlZVNjb3BlJiBuZXdTY29wZSkKK3sKKyAgICBBU1NFUlQoJm9sZFNjb3BlICE9
ICZuZXdTY29wZSk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oJnJvb3Qu
dHJlZVNjb3BlKCkgPT0gJm9sZFNjb3BlKTsKKworICAgIC8vIElmIGFuIGVsZW1lbnQgaXMgbW92
ZWQgZnJvbSBhIGRvY3VtZW50IGFuZCB0aGVuIGV2ZW50dWFsbHkgYmFjayBhZ2FpbiB0aGUgY29s
bGVjdGlvbiBjYWNoZSBmb3IKKyAgICAvLyB0aGF0IGVsZW1lbnQgbWF5IGNvbnRhaW4gc3RhbGUg
ZGF0YSBhcyBjaGFuZ2VzIG1hZGUgdG8gaXQgd2lsbCBoYXZlIHVwZGF0ZWQgdGhlIERPTVRyZWVW
ZXJzaW9uCisgICAgLy8gb2YgdGhlIGRvY3VtZW50IGl0IHdhcyBtb3ZlZCB0by4gQnkgaW5jcmVh
c2luZyB0aGUgRE9NVHJlZVZlcnNpb24gb2YgdGhlIGRvbmF0aW5nIGRvY3VtZW50IGhlcmUKKyAg
ICAvLyB3ZSBlbnN1cmUgdGhhdCB0aGUgY29sbGVjdGlvbiBjYWNoZSB3aWxsIGJlIGludmFsaWRh
dGVkIGFzIG5lZWRlZCB3aGVuIHRoZSBlbGVtZW50IGlzIG1vdmVkIGJhY2suCisgICAgRG9jdW1l
bnQmIG9sZERvY3VtZW50ID0gb2xkU2NvcGUuZG9jdW1lbnRTY29wZSgpOworICAgIERvY3VtZW50
JiBuZXdEb2N1bWVudCA9IG5ld1Njb3BlLmRvY3VtZW50U2NvcGUoKTsKKyAgICBib29sIHNob3Vs
ZFVwZGF0ZURvY3VtZW50U2NvcGUgPSAmb2xkRG9jdW1lbnQgIT0gJm5ld0RvY3VtZW50OworICAg
IGlmIChzaG91bGRVcGRhdGVEb2N1bWVudFNjb3BlKSB7CisgICAgICAgIG9sZERvY3VtZW50Lmlu
Y3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50KCk7CisgICAgICAgIG9sZERvY3VtZW50LmluY0RP
TVRyZWVWZXJzaW9uKCk7CisgICAgfQorCisgICAgZm9yIChOb2RlKiBub2RlID0gJnJvb3Q7IG5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCAmcm9vdCkpIHsKKyAgICAgICAg
QVNTRVJUKCFub2RlLT5pc1RyZWVTY29wZSgpKTsKKyAgICAgICAgQVNTRVJUKCZub2RlLT50cmVl
U2NvcGUoKSA9PSAmb2xkU2NvcGUpOworICAgICAgICBub2RlLT5zZXRUcmVlU2NvcGUobmV3U2Nv
cGUpOworCisgICAgICAgIGlmIChzaG91bGRVcGRhdGVEb2N1bWVudFNjb3BlKQorICAgICAgICAg
ICAgbW92ZU5vZGVUb05ld0RvY3VtZW50KCpub2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQp
OworICAgICAgICBlbHNlIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byogbm9kZUxpc3RzID0gbm9kZS0+cmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCisgICAg
ICAgICAgICAgICAgbm9kZUxpc3RzLT5hZG9wdFRyZWVTY29wZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFpczxFbGVtZW50Pigqbm9kZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBpZiAobm9kZS0+aGFzU3ludGhldGljQXR0ckNoaWxkTm9kZXMoKSkgeworICAgICAg
ICAgICAgZm9yIChhdXRvJiBhdHRyIDogZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmF0dHJOb2Rl
TGlzdCgpKQorICAgICAgICAgICAgICAgIG1vdmVUcmVlVG9OZXdTY29wZSgqYXR0ciwgb2xkU2Nv
cGUsIG5ld1Njb3BlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBzaGFkb3cgPSBu
b2RlLT5zaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCZzaGFkb3ctPmRvY3VtZW50KCkgPT0gJm9sZERvY3VtZW50KTsKKyAgICAgICAg
ICAgIHNoYWRvdy0+c2V0UGFyZW50VHJlZVNjb3BlKG5ld1Njb3BlKTsKKyAgICAgICAgICAgIGlm
IChzaG91bGRVcGRhdGVEb2N1bWVudFNjb3BlKQorICAgICAgICAgICAgICAgIG1vdmVTaGFkb3dU
cmVlVG9OZXdEb2N1bWVudCgqc2hhZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKHNob3VsZFVwZGF0ZURvY3VtZW50U2NvcGUpCisgICAg
ICAgIG9sZERvY3VtZW50LmRlY3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50KCk7Cit9CisKIHZv
aWQgTm9kZTo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1
bWVudCYgbmV3RG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oJmRvY3VtZW50KCkgPT0gJm5ld0RvY3VtZW50KTsKLSAgICBUcmVlU2NvcGU6OmVuc3VyZURp
ZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkKG9sZERvY3VtZW50KTsKKyAgICBEaWRNb3ZlVG9O
ZXdEb2N1bWVudEFzc2VydGlvblNjb3BlOjpkaWRSZWNpZXZlQ2FsbCgqdGhpcywgb2xkRG9jdW1l
bnQsIG5ld0RvY3VtZW50KTsKKworICAgIG5ld0RvY3VtZW50LmluY3JlbWVudFJlZmVyZW5jaW5n
Tm9kZUNvdW50KCk7CisgICAgb2xkRG9jdW1lbnQuZGVjcmVtZW50UmVmZXJlbmNpbmdOb2RlQ291
bnQoKTsKIAogICAgIGlmIChoYXNSYXJlRGF0YSgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBub2Rl
TGlzdHMgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNp
b24gMjE3OTU3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzY5LDYgKzM2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fdHJlZVNjb3BlKTsK
ICAgICAgICAgcmV0dXJuICptX3RyZWVTY29wZTsKICAgICB9CisgICAgdm9pZCBzZXRUcmVlU2Nv
cGVSZWN1cnNpdmVseShUcmVlU2NvcGUmKTsKICAgICBzdGF0aWMgcHRyZGlmZl90IHRyZWVTY29w
ZU1lbW9yeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihOb2RlLCBtX3RyZWVTY29w
ZSk7IH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgYXNzb2NpYXRlZCB3
aXRoIGEgZG9jdW1lbnQgYW5kIGlzIGluIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50J3MKQEAgLTQ5
MCw2ICs0OTEsOCBAQCBwdWJsaWM6CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJn
ZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWw7IC8vIEltcGxlbWVudGVkIGlu
IERvY3VtZW50LmgKIAorICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1
bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCk7CisKICAgICBib29sIGFk
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZjxFdmVudExp
c3RlbmVyPiYmLCBjb25zdCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyYpIG92ZXJyaWRlOwogICAg
IGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
RXZlbnRMaXN0ZW5lciYsIGNvbnN0IExpc3RlbmVyT3B0aW9ucyYpIG92ZXJyaWRlOwogCkBAIC02
MTQsNiArNjE3LDEwIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEZsYWcoTm9kZUZsYWdzIG1h
c2spIGNvbnN0IHsgbV9ub2RlRmxhZ3MgfD0gbWFzazsgfSAKICAgICB2b2lkIGNsZWFyRmxhZyhO
b2RlRmxhZ3MgbWFzaykgY29uc3QgeyBtX25vZGVGbGFncyAmPSB+bWFzazsgfQogCisgICAgYm9v
bCBpc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc1Bh
cnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyk7IH0KKyAgICB2b2lkIHNldElzUGFyc2luZ0NoaWxk
cmVuRmluaXNoZWQoKSB7IHNldEZsYWcoSXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZEZsYWcpOyB9
CisgICAgdm9pZCBjbGVhcklzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSB7IGNsZWFyRmxhZyhJ
c1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyk7IH0KKwogICAgIGVudW0gQ29uc3RydWN0aW9u
VHlwZSB7CiAgICAgICAgIENyZWF0ZU90aGVyID0gRGVmYXVsdE5vZGVGbGFncywKICAgICAgICAg
Q3JlYXRlVGV4dCA9IERlZmF1bHROb2RlRmxhZ3MgfCBJc1RleHRGbGFnLApAQCAtNjMxLDggKzYz
OCw2IEBAIHByb3RlY3RlZDoKICAgICB9OwogICAgIE5vZGUoRG9jdW1lbnQmLCBDb25zdHJ1Y3Rp
b25UeXBlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVu
dCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCk7Ci0gICAgCiAgICAgdmlydHVh
bCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JikgY29u
c3QgeyB9CiAKICAgICBib29sIGhhc1JhcmVEYXRhKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhI
YXNSYXJlRGF0YUZsYWcpOyB9CkBAIC02NzEsOSArNjc2LDExIEBAIHByaXZhdGU6CiAgICAgSGFz
aFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4qIHRyYW5zaWVudE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyeSgpOwogCiAgICAgdm9pZCBhZGp1c3RTdHlsZVZhbGlkaXR5KFN0eWxlOjpW
YWxpZGl0eSwgU3R5bGU6OkludmFsaWRhdGlvbk1vZGUpOwotICAgIAorCiAgICAgdm9pZCogb3Bh
cXVlUm9vdFNsb3coKSBjb25zdDsKIAorICAgIHN0YXRpYyB2b2lkIG1vdmVUcmVlVG9OZXdTY29w
ZShOb2RlJiwgVHJlZVNjb3BlJiBvbGRTY29wZSwgVHJlZVNjb3BlJiBuZXdTY29wZSk7CisKICAg
ICBpbnQgbV9yZWZDb3VudDsKICAgICBtdXRhYmxlIHVpbnQzMl90IG1fbm9kZUZsYWdzOwogCkBA
IC02ODYsMTEgKzY5Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIFJlbmRlck9iamVjdCogbV9yZW5k
ZXJlcjsKICAgICAgICAgTm9kZVJhcmVEYXRhQmFzZSogbV9yYXJlRGF0YTsKICAgICB9IG1fZGF0
YSB7IG51bGxwdHIgfTsKLQotcHJvdGVjdGVkOgotICAgIGJvb2wgaXNQYXJzaW5nQ2hpbGRyZW5G
aW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hl
ZEZsYWcpOyB9Ci0gICAgdm9pZCBzZXRJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkgeyBzZXRG
bGFnKElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWRGbGFnKTsgfQotICAgIHZvaWQgY2xlYXJJc1Bh
cnNpbmdDaGlsZHJlbkZpbmlzaGVkKCkgeyBjbGVhckZsYWcoSXNQYXJzaW5nQ2hpbGRyZW5GaW5p
c2hlZEZsYWcpOyB9CiB9OwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNzkwLDYgKzc5MiwxNCBAQCBp
bmxpbmUgdm9pZCBOb2RlOjpzZXRIYXNWYWxpZFN0eWxlKCkKICAgICBjbGVhckZsYWcoU3R5bGVS
ZXNvbHV0aW9uU2hvdWxkUmVjb21wb3NpdGVMYXllckZsYWcpOwogfQogCitpbmxpbmUgdm9pZCBO
b2RlOjpzZXRUcmVlU2NvcGVSZWN1cnNpdmVseShUcmVlU2NvcGUmIG5ld1RyZWVTY29wZSkKK3sK
KyAgICBBU1NFUlQoIWlzRG9jdW1lbnROb2RlKCkpOworICAgIEFTU0VSVCghbV9kZWxldGlvbkhh
c0JlZ3VuKTsKKyAgICBpZiAobV90cmVlU2NvcGUgIT0gJm5ld1RyZWVTY29wZSkKKyAgICAgICAg
bW92ZVRyZWVUb05ld1Njb3BlKCp0aGlzLCAqbV90cmVlU2NvcGUsIG5ld1RyZWVTY29wZSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDIxNzk1NykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyAr
ODEsNyBAQCBTaGFkb3dSb290Ojp+U2hhZG93Um9vdCgpCiAgICAgd2lsbEJlRGVsZXRlZEZyb20o
ZG9jdW1lbnQoKSk7CiAKICAgICAvLyBXZSBtdXN0IHJlbW92ZSBhbGwgb2Ygb3VyIGNoaWxkcmVu
IGZpcnN0IGJlZm9yZSB0aGUgVHJlZVNjb3BlIGRlc3RydWN0b3IKLSAgICAvLyBydW5zIHNvIHdl
IGRvbid0IGdvIHRocm91Z2ggVHJlZVNjb3BlOjphZG9wdElmTmVlZGVkIGZvciBlYWNoIGNoaWxk
IHdpdGggYQorICAgIC8vIHJ1bnMgc28gd2UgZG9uJ3QgZ28gdGhyb3VnaCBOb2RlOjpzZXRUcmVl
U2NvcGVSZWN1cnNpdmVseSBmb3IgZWFjaCBjaGlsZCB3aXRoIGEKICAgICAvLyBkZXN0cnVjdGVk
IHRyZWUgc2NvcGUgaW4gZWFjaCBkZXNjZW5kYW50LgogICAgIHJlbW92ZURldGFjaGVkQ2hpbGRy
ZW4oKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCShyZXZpc2lvbiAyMTc5NTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzY4LDEwMSArMzY4LDYgQEAgRWxlbWVudCogVHJlZVNjb3BlOjpmaW5kQW5jaG9yKGNvbnN0IFN0
cgogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIFRyZWVTY29wZTo6YWRvcHRJZk5lZWRl
ZChOb2RlJiBub2RlKQotewotICAgIEFTU0VSVCghbm9kZS5pc0RvY3VtZW50Tm9kZSgpKTsKLSAg
ICBBU1NFUlQoIW5vZGUubV9kZWxldGlvbkhhc0JlZ3VuKTsKLSAgICBUcmVlU2NvcGUmIHRyZWVT
Y29wZU9mTm9kZSA9IG5vZGUudHJlZVNjb3BlKCk7Ci0gICAgaWYgKHRoaXMgIT0gJnRyZWVTY29w
ZU9mTm9kZSkKLSAgICAgICAgbW92ZVRyZWVUb05ld1Njb3BlKG5vZGUsIHRyZWVTY29wZU9mTm9k
ZSwgKnRoaXMpOwotfQotCi12b2lkIFRyZWVTY29wZTo6bW92ZVRyZWVUb05ld1Njb3BlKE5vZGUm
IHJvb3QsIFRyZWVTY29wZSYgb2xkU2NvcGUsIFRyZWVTY29wZSYgbmV3U2NvcGUpCi17Ci0gICAg
QVNTRVJUKCZvbGRTY29wZSAhPSAmbmV3U2NvcGUpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKCZyb290LnRyZWVTY29wZSgpID09ICZvbGRTY29wZSk7Ci0KLSAgICAvLyBJ
ZiBhbiBlbGVtZW50IGlzIG1vdmVkIGZyb20gYSBkb2N1bWVudCBhbmQgdGhlbiBldmVudHVhbGx5
IGJhY2sgYWdhaW4gdGhlIGNvbGxlY3Rpb24gY2FjaGUgZm9yCi0gICAgLy8gdGhhdCBlbGVtZW50
IG1heSBjb250YWluIHN0YWxlIGRhdGEgYXMgY2hhbmdlcyBtYWRlIHRvIGl0IHdpbGwgaGF2ZSB1
cGRhdGVkIHRoZSBET01UcmVlVmVyc2lvbgotICAgIC8vIG9mIHRoZSBkb2N1bWVudCBpdCB3YXMg
bW92ZWQgdG8uIEJ5IGluY3JlYXNpbmcgdGhlIERPTVRyZWVWZXJzaW9uIG9mIHRoZSBkb25hdGlu
ZyBkb2N1bWVudCBoZXJlCi0gICAgLy8gd2UgZW5zdXJlIHRoYXQgdGhlIGNvbGxlY3Rpb24gY2Fj
aGUgd2lsbCBiZSBpbnZhbGlkYXRlZCBhcyBuZWVkZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBtb3Zl
ZCBiYWNrLgotICAgIERvY3VtZW50JiBvbGREb2N1bWVudCA9IG9sZFNjb3BlLmRvY3VtZW50U2Nv
cGUoKTsKLSAgICBEb2N1bWVudCYgbmV3RG9jdW1lbnQgPSBuZXdTY29wZS5kb2N1bWVudFNjb3Bl
KCk7Ci0gICAgYm9vbCB3aWxsTW92ZVRvTmV3RG9jdW1lbnQgPSAmb2xkRG9jdW1lbnQgIT0gJm5l
d0RvY3VtZW50OwotICAgIGlmICh3aWxsTW92ZVRvTmV3RG9jdW1lbnQpIHsKLSAgICAgICAgb2xk
RG9jdW1lbnQuaW5jcmVtZW50UmVmZXJlbmNpbmdOb2RlQ291bnQoKTsKLSAgICAgICAgb2xkRG9j
dW1lbnQuaW5jRE9NVHJlZVZlcnNpb24oKTsKLSAgICB9Ci0KLSAgICBmb3IgKE5vZGUqIG5vZGUg
PSAmcm9vdDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUsICZyb290KSkg
ewotICAgICAgICBBU1NFUlQoIW5vZGUtPmlzVHJlZVNjb3BlKCkpOwotICAgICAgICBBU1NFUlQo
Jm5vZGUtPnRyZWVTY29wZSgpID09ICZvbGRTY29wZSk7Ci0gICAgICAgIG5vZGUtPnNldFRyZWVT
Y29wZShuZXdTY29wZSk7Ci0KLSAgICAgICAgaWYgKHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkKLSAg
ICAgICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVudCgqbm9kZSwgb2xkRG9jdW1lbnQsIG5ld0Rv
Y3VtZW50KTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS0+aGFzUmFyZURhdGEoKSkgewotICAgICAg
ICAgICAgaWYgKGF1dG8qIG5vZGVMaXN0cyA9IG5vZGUtPnJhcmVEYXRhKCktPm5vZGVMaXN0cygp
KQotICAgICAgICAgICAgICAgIG5vZGVMaXN0cy0+YWRvcHRUcmVlU2NvcGUoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmhhc1N5bnRoZXRpY0F0dHJDaGlsZE5vZGVzKCkpIHsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgYXR0ciA6IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5h
dHRyTm9kZUxpc3QoKSkKLSAgICAgICAgICAgICAgICBtb3ZlVHJlZVRvTmV3U2NvcGUoKmF0dHIs
IG9sZFNjb3BlLCBuZXdTY29wZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXV0byogc2hh
ZG93ID0gbm9kZS0+c2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTigmc2hhZG93LT5kb2N1bWVudCgpID09ICZvbGREb2N1bWVudCk7Ci0g
ICAgICAgICAgICBzaGFkb3ctPnNldFBhcmVudFRyZWVTY29wZShuZXdTY29wZSk7Ci0gICAgICAg
ICAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQotICAgICAgICAgICAgICAgIG1vdmVTaGFk
b3dUcmVlVG9OZXdEb2N1bWVudCgqc2hhZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkKLSAgICAg
ICAgb2xkRG9jdW1lbnQuZGVjcmVtZW50UmVmZXJlbmNpbmdOb2RlQ291bnQoKTsKLX0KLQotI2lm
ICFBU1NFUlRfRElTQUJMRUQgfHwgRU5BQkxFKFNFQ1VSSVRZX0FTU0VSVElPTlMpCi1zdGF0aWMg
Ym9vbCBkaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxlZCA9IGZhbHNlOwotc3RhdGljIERvY3Vt
ZW50KiBvbGREb2N1bWVudERpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkV2l0aCA9IG51bGxw
dHI7Ci0KLXZvaWQgVHJlZVNjb3BlOjplbnN1cmVEaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxl
ZChEb2N1bWVudCYgb2xkRG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oIWRpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkKTsKLSAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTigmb2xkRG9jdW1lbnQgPT0gb2xkRG9jdW1lbnREaWRNb3Zl
VG9OZXdEb2N1bWVudFdhc0NhbGxlZFdpdGgpOwotICAgIGRpZE1vdmVUb05ld0RvY3VtZW50V2Fz
Q2FsbGVkID0gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIFRyZWVTY29wZTo6bW92ZU5vZGVUb05l
d0RvY3VtZW50KE5vZGUmIG5vZGUsIERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5l
d0RvY3VtZW50KQotewotICAgIEFTU0VSVCghbm9kZS5pc0Nvbm5lY3RlZCgpIHx8ICZvbGREb2N1
bWVudCAhPSAmbmV3RG9jdW1lbnQpOwotCi0gICAgbmV3RG9jdW1lbnQuaW5jcmVtZW50UmVmZXJl
bmNpbmdOb2RlQ291bnQoKTsKLSAgICBvbGREb2N1bWVudC5kZWNyZW1lbnRSZWZlcmVuY2luZ05v
ZGVDb3VudCgpOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRCB8fCBFTkFCTEUoU0VDVVJJVFlfQVNT
RVJUSU9OUykKLSAgICBkaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxlZCA9IGZhbHNlOwotICAg
IG9sZERvY3VtZW50RGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWRXaXRoID0gJm9sZERvY3Vt
ZW50OwotI2VuZGlmCi0KLSAgICBub2RlLmRpZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50
LCBuZXdEb2N1bWVudCk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZGlk
TW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWQpOwotfQotCi12b2lkIFRyZWVTY29wZTo6bW92ZVNo
YWRvd1RyZWVUb05ld0RvY3VtZW50KFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QsIERvY3VtZW50JiBv
bGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQotewotICAgIGZvciAoTm9kZSogbm9k
ZSA9ICZzaGFkb3dSb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwg
JnNoYWRvd1Jvb3QpKSB7Ci0gICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVudCgqbm9kZSwgb2xk
RG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKLSAgICAgICAgaWYgKGF1dG8qIHNoYWRvdyA9IG5vZGUt
PnNoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgIG1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudCgq
c2hhZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwotICAgIH0KLX0KLQogc3RhdGljIEVs
ZW1lbnQqIGZvY3VzZWRGcmFtZU93bmVyRWxlbWVudChGcmFtZSogZm9jdXNlZEZyYW1lLCBGcmFt
ZSogY3VycmVudEZyYW1lKQogewogICAgIGZvciAoOyBmb2N1c2VkRnJhbWU7IGZvY3VzZWRGcmFt
ZSA9IGZvY3VzZWRGcmFtZS0+dHJlZSgpLnBhcmVudCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVT
Y29wZS5oCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDE0ICs5Niw2IEBAIHB1YmxpYzoKICAgICAvLyBxdWly
a3MgbW9kZSBmb3IgaGlzdG9yaWNhbCBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAgICAgRWxlbWVu
dCogZmluZEFuY2hvcihjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgLy8gVXNlZCBieSB0aGUg
YmFzaWMgRE9NIG11dGF0aW9uIG1ldGhvZHMgKGUuZy4sIGFwcGVuZENoaWxkKCkpLgotICAgIHZv
aWQgYWRvcHRJZk5lZWRlZChOb2RlJik7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRCB8fCBFTkFCTEUo
U0VDVVJJVFlfQVNTRVJUSU9OUykKLSAgICBzdGF0aWMgdm9pZCBlbnN1cmVEaWRNb3ZlVG9OZXdE
b2N1bWVudFdhc0NhbGxlZChEb2N1bWVudCYgb2xkRG9jdW1lbnQpOwotI2Vsc2UKLSAgICBzdGF0
aWMgdm9pZCBlbnN1cmVEaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxlZChEb2N1bWVudCYpIHsg
fQotI2VuZGlmCi0KICAgICBDb250YWluZXJOb2RlJiByb290Tm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcm9vdE5vZGU7IH0KIAogICAgIElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeSYgaWRUYXJnZXRP
YnNlcnZlclJlZ2lzdHJ5KCkgY29uc3QgeyByZXR1cm4gKm1faWRUYXJnZXRPYnNlcnZlclJlZ2lz
dHJ5LmdldCgpOyB9CkBAIC0xMjIsOSArMTE0LDYgQEAgcHJvdGVjdGVkOgogICAgIE5vZGUqIG5v
ZGVGcm9tUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIGNsaWVudFBvaW50LCBMYXlvdXRQb2ludCog
bG9jYWxQb2ludCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBtb3ZlVHJlZVRvTmV3U2NvcGUoTm9k
ZSYsIFRyZWVTY29wZSYgb2xkU2NvcGUsIFRyZWVTY29wZSYgbmV3U2NvcGUpOwotICAgIHZvaWQg
bW92ZU5vZGVUb05ld0RvY3VtZW50KE5vZGUmLCBEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3Vt
ZW50JiBuZXdEb2N1bWVudCk7Ci0gICAgdm9pZCBtb3ZlU2hhZG93VHJlZVRvTmV3RG9jdW1lbnQo
U2hhZG93Um9vdCYsIERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50
KTsKIAogICAgIENvbnRhaW5lck5vZGUmIG1fcm9vdE5vZGU7CiAgICAgc3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxEb2N1bWVudD4gbV9kb2N1bWVudFNjb3BlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMTc5NTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OCw3ICs4OCw3IEBAIHZvaWQgSFRNTFRlbXBsYXRlRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG8K
ICAgICBpZiAoIW1fY29udGVudCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKCZkb2N1bWVudCgpID09ICZuZXdEb2N1bWVudCk7Ci0gICAgbmV3
RG9jdW1lbnQuZW5zdXJlVGVtcGxhdGVEb2N1bWVudCgpLmFkb3B0SWZOZWVkZWQoKm1fY29udGVu
dCk7CisgICAgbV9jb250ZW50LT5zZXRUcmVlU2NvcGVSZWN1cnNpdmVseShuZXdEb2N1bWVudC5l
bnN1cmVUZW1wbGF0ZURvY3VtZW50KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="333325"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>