<?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>88646</bug_id>
          
          <creation_ts>2012-06-08 04:40:38 -0700</creation_ts>
          <short_desc>Web Inspector: CSSParser::parseSheet() should provide ready-to-use source data</short_desc>
          <delta_ts>2012-06-15 09:36:32 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>88420</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hyatt</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>koivisto</cc>
    
    <cc>loislo</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mitz</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>vsevik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>644574</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-08 04:40:38 -0700</bug_when>
    <thetext>Currently, parseSheet() returns an intermediate form (StyleRuleRangeMap), which needs to be post-processed by the client.
The entire processing chain should be encapsulated into CSSParser instead.

This change starts a series of changes, which are intended to improve the CSS source code model exposed through Web Inspector (meta bug 88408).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644582</commentid>
    <comment_count>1</comment_count>
      <attachid>146540</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-08 05:03:51 -0700</bug_when>
    <thetext>Created attachment 146540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644654</commentid>
    <comment_count>2</comment_count>
      <attachid>146540</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-06-08 07:33:01 -0700</bug_when>
    <thetext>Comment on attachment 146540
Patch

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

&gt; Source/WebCore/css/CSSParser.cpp:1131
&gt; +        data-&gt;styleSourceData = *styleSourceData;

styleSourceData should be PassRefPtr&lt;CSSStyleSourceData&gt;.

&gt; Source/WebCore/css/CSSParser.cpp:1150
&gt; +        RefPtr&lt;CSSRuleSourceData&gt;&amp; data = m_currentRuleDataStack-&gt;last();

Why do you need &amp; here?
Consider asserting the stack is not empty.

&gt; Source/WebCore/css/CSSParser.cpp:1153
&gt; +        for (Vector&lt;CSSPropertySourceData&gt;::iterator it = data-&gt;styleSourceData-&gt;propertyData.begin(), endIt = data-&gt;styleSourceData-&gt;propertyData.end(); it != endIt; ++it) {

Style guide prefers using indexes over iterators for Vectors.

&gt; Source/WebCore/css/CSSParser.cpp:9161
&gt; +            ASSERT(!m_currentRuleDataStack-&gt;isEmpty());

You have the same assert in popRuleData() which is called on next line, seems redundant.

&gt; Source/WebCore/css/CSSParser.cpp:9381
&gt; +    if (!ruleData-&gt;styleSourceData)

This check seems redundant since this method should be called for style rules only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644669</commentid>
    <comment_count>3</comment_count>
      <attachid>146570</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-08 07:53:37 -0700</bug_when>
    <thetext>Created attachment 146570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644740</commentid>
    <comment_count>4</comment_count>
      <attachid>146570</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-06-08 09:34:50 -0700</bug_when>
    <thetext>Comment on attachment 146570
Patch

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

&gt; Source/WebCore/css/CSSParser.h:314
&gt; +    size_t m_parsedTextLength;

This field is not used outside of setupParser(), why is it needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644747</commentid>
    <comment_count>5</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-06-08 09:40:56 -0700</bug_when>
    <thetext>Other than that inspector-related part looks good to me, somebody who understands CSSParser better might want to have a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645268</commentid>
    <comment_count>6</comment_count>
      <attachid>146693</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-09 01:17:02 -0700</bug_when>
    <thetext>Created attachment 146693
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650252</commentid>
    <comment_count>7</comment_count>
      <attachid>146693</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-15 09:31:01 -0700</bug_when>
    <thetext>Comment on attachment 146693
Patch

Looks ok, bit sad about the extra bloat in CSSParser. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650257</commentid>
    <comment_count>8</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-15 09:36:32 -0700</bug_when>
    <thetext>Committed r120469: &lt;http://trac.webkit.org/changeset/120469&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146540</attachid>
            <date>2012-06-08 05:03:51 -0700</date>
            <delta_ts>2012-06-08 07:53:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88646-20120608160349.patch</filename>
            <type>text/plain</type>
            <size>24013</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTg5ZjAwZWZmMGU3NDk4
ZDQ2MDQxMTJjMzY2MDJmOTg3OTVjYWU4Ny4uNjYzYTU1NTFjMzE1ZWUxOGJlMmMzOGFlYTA2Zjg3
NTMzMzZhYjMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA2LTA4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCkgc2hvdWxkIHByb3ZpZGUgcmVhZHktdG8tdXNl
IHNvdXJjZSBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04ODY0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgY2hhbmdlIG1vdmVzIHRoZSBwb3N0LXByb2Nlc3Npbmcgc3RlcCBmcm9tIEluc3Bl
Y3RvclN0eWxlU2hlZXQgaW50byBDU1NQYXJzZXIsIHNvIHRoYXQKKyAgICAgICAgQ1NTUGFyc2Vy
OjpwYXJzZVNoZWV0KCkgd2lsbCByZXR1cm4gYSByZWFkeS10by11c2UgbGlzdCB3aXRoIHN0eWxl
IHJ1bGUgc291cmNlIGNvZGUgZGF0YS4KKyAgICAgICAgQWxzbywgdW5pdmVyc2FsIGRhdGEgc3Ry
dWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgd2hpY2ggYWxsb3cgZm9yIHRoZSBmdWxsIHJ1bGUgc291
cmNlIGRhdGEgdHJlZSBidWlsZGluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIHRoaXMg
aXMgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOiBVc2UgdW5p
dmVyc2FsIGRhdGEgc3RydWN0dXJlcywgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGJ1aWxkaW5nIHRo
ZSBmdWxsIHJ1bGUgdHJlZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Q1NTUGFyc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c2V0dXBQYXJzZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoZWV0KTogUmV0dXJuIHJlYWR5LXRvLXVzZSBzb3Vy
Y2UgY29kZSBkYXRhIGVudHJpZXMgcmF0aGVyIHRoYW4gYW4gaW50ZXJtZWRpYXRlIHN0cnVjdHVy
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmFkZE5ld1J1bGVUb1NvdXJjZVRyZWUpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBvcFJ1bGVEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyk6IE1vdmVkIGlu
IGZyb20gSW5zcGVjdG9yU3R5bGVTaGVldC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
bWFya1NlbGVjdG9yTGlzdFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFy
a1NlbGVjdG9yTGlzdEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtSdWxl
Qm9keVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKToKKyAgICAg
ICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChDU1NQYXJzZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpyZXNldFByb3BlcnR5UmFuZ2UpOiBSZW5hbWVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjppc0V4dHJhY3RpbmdTb3VyY2VEYXRhKTogQSBjb252ZW5pZW5j
ZSBjaGVjay4KKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmg6IEludHJvZHVj
ZSB0aGUgUnVsZVNvdXJjZURhdGFMaXN0IHR5cGVkZWYuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6IE1ha2UgdXNlIG9mIFJ1
bGVTb3VyY2VEYXRhTGlzdCBhbmQgZm9sbG93IHRoZSBDU1NQYXJzZXI6OnBhcnNlKigpIEFQSSBj
aGFuZ2VzLgorICAgICAgICAoUGFyc2VkU3R5bGVTaGVldDo6c291cmNlRGF0YSk6CisgICAgICAg
IChQYXJzZWRTdHlsZVNoZWV0KToKKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnNldFNvdXJj
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlU291
cmNlRGF0YSk6IFJlbW92ZSBzb3VyY2UgZGF0YSBwb3N0cHJvY2Vzc2luZywgZm9sbG93IHRoZSBu
ZXcgcGFyc2VTaGVldCgpIEFQSS4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6Okluc3BlY3RvckNTU0lk
KTogRHJpdmUtYnk6IHVuaW5pdGlhbGl6ZWQgZmllbGQgZml4LgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eTo6SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSk6IERpdHRvLgor
ICAgICAgICAoSW5zcGVjdG9yU3R5bGVTaGVldCk6CisKIDIwMTItMDYtMDggIFlvc2hpZnVtaSBJ
bm91ZSAgPHlvc2luQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbRm9ybXNdIERyb3AgU3RlcFJh
bmdlOjpOdW1iZXJXaXRoRGVjaW1hbFBsYWNlc09yTWlzc2luZwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAppbmRleCA5NzMzNDJkMDkwODA5OTc5ZmI5MGU2MDE5NGU2YjljZjY2NjE4MDEzLi4xYWY0
ZDg2YjIzY2IzMDFjYzNjYmE4NzA0MGRlMWUxZWI0MTRjZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcApAQCAtMjM1LDEyICsyMzUsMTIgQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIoY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKICAgICAsIG1faGFzRm9udEZhY2VPbmx5VmFsdWVz
KGZhbHNlKQogICAgICwgbV9oYWRTeW50YWN0aWNhbGx5VmFsaWRDU1NSdWxlKGZhbHNlKQogICAg
ICwgbV9kZWZhdWx0TmFtZXNwYWNlKHN0YXJBdG9tKQorICAgICwgbV9wYXJzZWRUZXh0KDApCiAg
ICAgLCBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbihmYWxzZSkKICAgICAsIG1fc2VsZWN0b3JM
aXN0UmFuZ2UoMCwgMCkKICAgICAsIG1fcnVsZUJvZHlSYW5nZSgwLCAwKQogICAgICwgbV9wcm9w
ZXJ0eVJhbmdlKFVJTlRfTUFYLCBVSU5UX01BWCkKLSAgICAsIG1fcnVsZVJhbmdlTWFwKDApCi0g
ICAgLCBtX2N1cnJlbnRSdWxlRGF0YSgwKQorICAgICwgbV9ydWxlU291cmNlRGF0YVJlc3VsdCgw
KQogICAgICwgbV9wYXJzaW5nTW9kZShOb3JtYWxNb2RlKQogICAgICwgbV9jdXJyZW50Q2hhcmFj
dGVyKDApCiAgICAgLCBtX3Rva2VuU3RhcnQoMCkKQEAgLTI4NSw2ICsyODUsNyBAQCB2b2lkIENT
U1BhcnNlclN0cmluZzo6bG93ZXIoKQogCiB2b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIoY29u
c3QgY2hhciogcHJlZml4LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgY2hhciogc3VmZml4
KQogeworICAgIG1fcGFyc2VkVGV4dCA9ICZzdHJpbmc7CiAgICAgaW50IGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKSArIHN0cmxlbihwcmVmaXgpICsgc3RybGVuKHN1ZmZpeCkgKyAxOwogCiAgICAg
bV9kYXRhU3RhcnQgPSBhZG9wdEFycmF5UHRyKG5ldyBVQ2hhcltsZW5ndGhdKTsKQEAgLTMwNCwy
MSArMzA1LDE5IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVm
aXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyCiAgICAgcmVzZXRSdWxlQm9keU1h
cmtzKCk7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50
cyogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQgc3RhcnRMaW5lTnVtYmVyLCBTdHls
ZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFwKQordm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQo
U3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFy
dExpbmVOdW1iZXIsIFJ1bGVTb3VyY2VEYXRhTGlzdCogcnVsZVNvdXJjZURhdGFSZXN1bHQpCiB7
CiAgICAgc2V0U3R5bGVTaGVldChzaGVldCk7CiAgICAgbV9kZWZhdWx0TmFtZXNwYWNlID0gc3Rh
ckF0b207IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4KLSAgICBtX3J1bGVSYW5nZU1h
cCA9IHJ1bGVSYW5nZU1hcDsKLSAgICBpZiAocnVsZVJhbmdlTWFwKSB7Ci0gICAgICAgIG1fY3Vy
cmVudFJ1bGVEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgICAgICBtX2N1
cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVh
dGUoKTsKLSAgICB9CisgICAgaWYgKHJ1bGVTb3VyY2VEYXRhUmVzdWx0KQorICAgICAgICBtX2N1
cnJlbnRSdWxlRGF0YVN0YWNrID0gYWRvcHRQdHIobmV3IFJ1bGVTb3VyY2VEYXRhTGlzdCgpKTsK
KyAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0ID0gcnVsZVNvdXJjZURhdGFSZXN1bHQ7CiAKICAg
ICBtX2xpbmVOdW1iZXIgPSBzdGFydExpbmVOdW1iZXI7CiAgICAgc2V0dXBQYXJzZXIoIiIsIHN0
cmluZywgIiIpOwogICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgbV9ydWxlUmFuZ2VNYXAgPSAw
OwotICAgIG1fY3VycmVudFJ1bGVEYXRhID0gMDsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNr
LmNsZWFyKCk7CisgICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdCA9IDA7CiAgICAgbV9ydWxlID0g
MDsKIH0KIApAQCAtMTEyNyw4ICsxMTI2LDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xh
cmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0CiAg
ICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5bGVTaGVldCk7CiAKICAgICBpZiAoc3R5bGVTb3Vy
Y2VEYXRhKSB7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6
OmNyZWF0ZSgpOwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0g
Q1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgbV9jdXJyZW50UnVsZURhdGFT
dGFjayA9IGFkb3B0UHRyKG5ldyBSdWxlU291cmNlRGF0YUxpc3QoKSk7CisgICAgICAgIFJlZlB0
cjxDU1NSdWxlU291cmNlRGF0YT4gZGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsK
KyAgICAgICAgZGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gKnN0eWxlU291cmNlRGF0YTsKKyAgICAg
ICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+YXBwZW5kKGRhdGEpOwogICAgICAgICBtX2luU3R5
bGVSdWxlT3JEZWNsYXJhdGlvbiA9IHRydWU7CiAgICAgfQogCkBAIC0xMTQ1LDIwICsxMTQ2LDE5
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRl
Y2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0CiAgICAgICAgIGNsZWFyUHJvcGVydGllcygpOwog
ICAgIH0KIAotICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0YSkgewotICAgICAgICBtX2N1cnJlbnRS
dWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydCA9IDA7Ci0gICAg
ICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVu
ZCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8Q1NTUHJvcGVydHlTb3Vy
Y2VEYXRhPjo6aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5wcm9wZXJ0eURhdGEuYmVnaW4oKSwgZW5kSXQgPSBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVT
b3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuZW5kKCk7IGl0ICE9IGVuZEl0OyArK2l0KSB7Ci0gICAg
ICAgICAgICAoKml0KS5yYW5nZS5zdGFydCAtPSBwcmVmaXhMZW5ndGg7Ci0gICAgICAgICAgICAo
Kml0KS5yYW5nZS5lbmQgLT0gcHJlZml4TGVuZ3RoOworICAgIGlmIChzdHlsZVNvdXJjZURhdGEp
IHsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiYgZGF0YSA9IG1fY3VycmVudFJ1
bGVEYXRhU3RhY2stPmxhc3QoKTsKKyAgICAgICAgZGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHls
ZUJvZHlSYW5nZS5zdGFydCA9IDA7CisgICAgICAgIGRhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5
bGVCb2R5UmFuZ2UuZW5kID0gc3RyaW5nLmxlbmd0aCgpOworICAgICAgICBmb3IgKFZlY3RvcjxD
U1NQcm9wZXJ0eVNvdXJjZURhdGE+OjppdGVyYXRvciBpdCA9IGRhdGEtPnN0eWxlU291cmNlRGF0
YS0+cHJvcGVydHlEYXRhLmJlZ2luKCksIGVuZEl0ID0gZGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5w
cm9wZXJ0eURhdGEuZW5kKCk7IGl0ICE9IGVuZEl0OyArK2l0KSB7CisgICAgICAgICAgICBpdC0+
cmFuZ2Uuc3RhcnQgLT0gcHJlZml4TGVuZ3RoOworICAgICAgICAgICAgaXQtPnJhbmdlLmVuZCAt
PSBwcmVmaXhMZW5ndGg7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAoc3R5bGVTb3VyY2VE
YXRhKSB7Ci0gICAgICAgICpzdHlsZVNvdXJjZURhdGEgPSBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5
bGVTb3VyY2VEYXRhLnJlbGVhc2UoKTsKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGEgPSAwOwor
ICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmNsZWFyKCk7CiAgICAgICAgIG1faW5TdHls
ZVJ1bGVPckRlY2xhcmF0aW9uID0gZmFsc2U7CiAgICAgfQorCiAgICAgcmV0dXJuIG9rOwogfQog
CkBAIC05MTE0LDYgKzkxMTQsMjcgQEAgQ1NTUGFyc2VyOjpSdWxlTGlzdCogQ1NTUGFyc2VyOjpj
cmVhdGVSdWxlTGlzdCgpCiAgICAgcmV0dXJuIGxpc3RQdHI7CiB9CiAKK3ZvaWQgQ1NTUGFyc2Vy
OjphZGROZXdSdWxlVG9Tb3VyY2VUcmVlKFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1
bGUpCit7CisgICAgLy8gUHJlY29uZGl0aW9uOiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKS4K
KyAgICBpZiAoIW1fcnVsZVNvdXJjZURhdGFSZXN1bHQpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEZJWE1FOiBUaGlzIHRlbXBvcmFyaWx5IGJ1aWxkcyBhIGZsYXQgc3R5bGUgcnVsZSBkYXRh
IGxpc3QsIHRvIGF2b2lkIHRoZSBjbGllbnQgY29kZSBicmVha2FnZS4KKyAgICBtX3J1bGVTb3Vy
Y2VEYXRhUmVzdWx0LT5hcHBlbmQocnVsZSk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IENTU1BhcnNlcjo6cG9wUnVsZURhdGEoKQoreworICAgIGlmICghbV9ydWxlU291cmNl
RGF0YVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoIW1fY3VycmVudFJ1
bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBk
YXRhID0gbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpOworICAgIG1fY3VycmVudFJ1bGVE
YXRhU3RhY2stPnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7Cit9CisK
IFN0eWxlUnVsZUtleWZyYW1lcyogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZXNSdWxlKCkKIHsK
ICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0g
ZmFsc2U7CkBAIC05MTM2LDE4ICs5MTU3LDIwIEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6
Y3JlYXRlU3R5bGVSdWxlKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlCiAg
ICAgICAgIHJ1bGUtPnNldFByb3BlcnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNldCgpKTsKICAg
ICAgICAgcmVzdWx0ID0gcnVsZS5nZXQoKTsKICAgICAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQo
cnVsZS5yZWxlYXNlKCkpOwotICAgICAgICBpZiAobV9ydWxlUmFuZ2VNYXApIHsKLSAgICAgICAg
ICAgIEFTU0VSVChtX2N1cnJlbnRSdWxlRGF0YSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRSdWxl
RGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZSA9IG1fcnVsZUJvZHlSYW5nZTsK
LSAgICAgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZSA9IG1fc2Vs
ZWN0b3JMaXN0UmFuZ2U7Ci0gICAgICAgICAgICBtX3J1bGVSYW5nZU1hcC0+c2V0KHJlc3VsdCwg
bV9jdXJyZW50UnVsZURhdGEucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIG1fY3VycmVudFJ1bGVE
YXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgICAgICAgICAgbV9jdXJyZW50
UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7
CisgICAgICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3VycmVudFJ1bGVEYXRhID0gcG9wUnVsZURhdGEoKTsK
KyAgICAgICAgICAgIGN1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlS
YW5nZSA9IG1fcnVsZUJvZHlSYW5nZTsKKyAgICAgICAgICAgIGN1cnJlbnRSdWxlRGF0YS0+c2Vs
ZWN0b3JMaXN0UmFuZ2UgPSBtX3NlbGVjdG9yTGlzdFJhbmdlOworICAgICAgICAgICAgZml4VW5w
YXJzZWRQcm9wZXJ0eVJhbmdlcyhjdXJyZW50UnVsZURhdGEuZ2V0KCkpOworICAgICAgICAgICAg
YWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURhdGEucmVsZWFzZSgpKTsKICAgICAg
ICAgICAgIG1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uID0gZmFsc2U7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgcmVzZXRTZWxlY3Rvckxpc3RNYXJrcygpOwotICAgIHJlc2V0UnVsZUJvZHlNYXJr
cygpOworICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpIHsKKyAgICAgICAgcmVzZXRT
ZWxlY3Rvckxpc3RNYXJrcygpOworICAgICAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKKyAgICB9
CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTkzNTMs
MTQgKzkzNzYsNjMgQEAgdm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RNZWRpYUxpbmUoTWVkaWFR
dWVyeVNldCogbWVkaWEpCiAgICAgbWVkaWEtPnNldExhc3RMaW5lKG1fbGluZU51bWJlcik7CiB9
CiAKK3ZvaWQgQ1NTUGFyc2VyOjpmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKENTU1J1bGVTb3Vy
Y2VEYXRhKiBydWxlRGF0YSkKK3sKKyAgICBpZiAoIXJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEp
CisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYgcHJv
cGVydHlEYXRhID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhOworICAg
IHVuc2lnbmVkIHNpemUgPSBwcm9wZXJ0eURhdGEuc2l6ZSgpOworICAgIGlmICghc2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRhLT5zdHls
ZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0OworICAgIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzID0gbV9wYXJzZWRUZXh0LT5jaGFyYWN0ZXJzKCk7CisgICAgQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhKiBuZXh0RGF0YSA9ICYocHJvcGVydHlEYXRhLmF0KDApKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0
YSogY3VycmVudERhdGEgPSBuZXh0RGF0YTsKKyAgICAgICAgbmV4dERhdGEgPSBpIDwgc2l6ZSAt
IDEgPyAmKHByb3BlcnR5RGF0YS5hdChpICsgMSkpIDogMDsKKworICAgICAgICBpZiAoY3VycmVu
dERhdGEtPnBhcnNlZE9rKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjdXJy
ZW50RGF0YS0+cmFuZ2UuZW5kID4gMCAmJiBjaGFyYWN0ZXJzW3N0eWxlU3RhcnQgKyBjdXJyZW50
RGF0YS0+cmFuZ2UuZW5kIC0gMV0gPT0gJzsnKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgdW5zaWduZWQgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7CisgICAgICAgIGlmICghbmV4
dERhdGEpCisgICAgICAgICAgICBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCA9IHJ1bGVEYXRhLT5z
dHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCAtIDE7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIG5leHREYXRh
LT5yYW5nZS5zdGFydCAtIDE7CisKKyAgICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKGNoYXJhY3Rl
cnNbcHJvcGVydHlFbmRJblN0eWxlU2hlZXRdKSkKKyAgICAgICAgICAgIC0tcHJvcGVydHlFbmRJ
blN0eWxlU2hlZXQ7CisKKyAgICAgICAgLy8gcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgcG9pbnRz
IGF0IHRoZSBsYXN0IHByb3BlcnR5IHRleHQgY2hhcmFjdGVyLgorICAgICAgICB1bnNpZ25lZCBu
ZXdQcm9wZXJ0eUVuZCA9IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gc3R5bGVTdGFydCArIDE7
IC8vIEV4Y2x1c2l2ZSBvZiB0aGUgbGFzdCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KKyAgICAg
ICAgaWYgKGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgIT0gbmV3UHJvcGVydHlFbmQpIHsKKyAgICAg
ICAgICAgIGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgPSBuZXdQcm9wZXJ0eUVuZDsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgY3VycmVu
dERhdGEtPnJhbmdlLnN0YXJ0ICsgY3VycmVudERhdGEtPm5hbWUubGVuZ3RoKCk7CisgICAgICAg
ICAgICB3aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNo
ZWV0ICYmIGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVldF0gIT0gJzonKQorICAgICAg
ICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKKyAgICAgICAgICAgIGlmICh2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQpCisgICAgICAgICAg
ICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OyAvLyBTaGlmdCBwYXN0IHRoZSAnOicuCisg
ICAgICAgICAgICB3aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5T
dHlsZVNoZWV0ICYmIGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVl
dF0pKQorICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKKyAgICAgICAg
ICAgIC8vIE5lZWQgdG8gZXhjbHVkZSB0aGUgdHJhaWxpbmcgJzsnIGZyb20gdGhlIHByb3BlcnR5
IHZhbHVlLgorICAgICAgICAgICAgY3VycmVudERhdGEtPnZhbHVlID0gbV9wYXJzZWRUZXh0LT5z
dWJzdHJpbmcodmFsdWVTdGFydEluU3R5bGVTaGVldCwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQg
LSB2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0ICsgKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0eWxl
U2hlZXRdID09ICc7JyA/IDAgOiAxKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgQ1NT
UGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0U3RhcnQoKQogeworICAgIGlmICghaXNFeHRyYWN0aW5n
U291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5z
dGFydCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogfQogCiB2b2lkIENTU1Bh
cnNlcjo6bWFya1NlbGVjdG9yTGlzdEVuZCgpCiB7Ci0gICAgaWYgKCFtX2N1cnJlbnRSdWxlRGF0
YSkKKyAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIFVDaGFyKiBsaXN0RW5kID0gbV90b2tlblN0YXJ0OwogICAgIHdoaWxlIChsaXN0RW5kID4g
bV9kYXRhU3RhcnQuZ2V0KCkgKyAxKSB7CkBAIC05MzcwLDEwICs5NDQyLDE1IEBAIHZvaWQgQ1NT
UGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0RW5kKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IGxpc3RFbmQgLSBtX2RhdGFTdGFydC5nZXQo
KTsKKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGRhdGEgPSBDU1NSdWxlU291cmNlRGF0
YTo6Y3JlYXRlKCk7CisgICAgZGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VE
YXRhOjpjcmVhdGUoKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5hcHBlbmQoZGF0YSk7
CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCiB7CisgICAgaWYgKCFp
c0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCisgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKICAgICBpZiAoKm1fdG9r
ZW5TdGFydCA9PSAneycpCiAgICAgICAgICsrb2Zmc2V0OyAvLyBTa2lwIHRoZSBydWxlIGJvZHkg
b3BlbmluZyBicmFjZS4KQEAgLTkzODQsNiArOTQ2MSw4IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJr
UnVsZUJvZHlTdGFydCgpCiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQogewor
ICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CiAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiAgICAg
aWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5lbmQpCiAgICAgICAgIG1fcnVsZUJvZHlSYW5n
ZS5lbmQgPSBvZmZzZXQ7CkBAIC05NDAwLDExICs5NDc5LDEyIEBAIHZvaWQgQ1NTUGFyc2VyOjpt
YXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJz
ZWQpCiB7CiAgICAgaWYgKCFtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbikKICAgICAgICAgcmV0
dXJuOworCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQu
Z2V0KCk7CiAgICAgaWYgKCptX3Rva2VuU3RhcnQgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWljb2xv
biBpbnRvIHRoZSBwcm9wZXJ0eSB0ZXh0LgogICAgICAgICArK29mZnNldDsKICAgICBtX3Byb3Bl
cnR5UmFuZ2UuZW5kID0gb2Zmc2V0OwotICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0g
VUlOVF9NQVggJiYgbV9jdXJyZW50UnVsZURhdGEpIHsKKyAgICBpZiAobV9wcm9wZXJ0eVJhbmdl
LnN0YXJ0ICE9IFVJTlRfTUFYICYmICFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gVGhpcyBzdHVmZiBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gdGhlIHN0eWxl
IGRhdGEgcmV0cmlldmFsIGlzIHJlcXVlc3RlZCBieSBjbGllbnQuCiAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0OwogICAgICAgICBjb25zdCB1bnNp
Z25lZCBlbmQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kOwpAQCAtOTQxOCwxMCArOTQ5OCwxMCBAQCB2
b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9v
bCBpc1Byb3BlcnR5UGFyc2VkKQogICAgICAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5U3RyaW5n
LmxlZnQoY29sb25JbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIFN0cmluZyB2YWx1
ZSA9IHByb3BlcnR5U3RyaW5nLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJp
bmcubGVuZ3RoKCkpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAvLyBUaGUgcHJvcGVydHkg
cmFuZ2UgaXMgcmVsYXRpdmUgdG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KLSAgICAg
ICAgbV9jdXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFwcGVu
ZCgKKyAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5zdHlsZVNvdXJjZURh
dGEtPnByb3BlcnR5RGF0YS5hcHBlbmQoCiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURh
dGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91bmQsIGlzUHJvcGVydHlQYXJzZWQsIFNvdXJj
ZVJhbmdlKHN0YXJ0IC0gbV9ydWxlQm9keVJhbmdlLnN0YXJ0LCBlbmQgLSBtX3J1bGVCb2R5UmFu
Z2Uuc3RhcnQpKSk7CiAgICAgfQotICAgIHJlc2V0UHJvcGVydHlNYXJrcygpOworICAgIHJlc2V0
UHJvcGVydHlSYW5nZSgpOwogfQogCiBzdGF0aWMgQ1NTUHJvcGVydHlJRCBjc3NQcm9wZXJ0eUlE
KGNvbnN0IFVDaGFyKiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuaAppbmRleCA3YzVhNjIzNzc0OGZmMjdjOTU1ZjczYTViMzQwMDViMGM4ZTI3MzYxLi5m
ZDg1OGJhMzZkMjEwNDM2ZGZmODQ2ZGNjODQyNDVhM2IwMWZkMmI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIH5DU1NQYXJzZXIoKTsKIAot
ICAgIHZvaWQgcGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmLCBp
bnQgc3RhcnRMaW5lTnVtYmVyID0gMCwgU3R5bGVSdWxlUmFuZ2VNYXAqID0gMCk7CisgICAgdm9p
ZCBwYXJzZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IFN0cmluZyYsIGludCBzdGFy
dExpbmVOdW1iZXIgPSAwLCBSdWxlU291cmNlRGF0YUxpc3QqID0gMCk7CiAgICAgUGFzc1JlZlB0
cjxTdHlsZVJ1bGVCYXNlPiBwYXJzZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3Ry
aW5nJik7CiAgICAgUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1lPiBwYXJzZUtleWZyYW1lUnVsZShT
dHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBwYXJz
ZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBi
b29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKik7CkBAIC0z
MTAsMjEgKzMxMCwzMCBAQCBwdWJsaWM6CiAgICAgQXRvbWljU3RyaW5nIG1fZGVmYXVsdE5hbWVz
cGFjZTsKIAogICAgIC8vIHRva2VuaXplciBtZXRob2RzIGFuZCBkYXRhCisgICAgY29uc3QgU3Ry
aW5nKiBtX3BhcnNlZFRleHQ7CiAgICAgYm9vbCBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbjsK
ICAgICBTb3VyY2VSYW5nZSBtX3NlbGVjdG9yTGlzdFJhbmdlOwogICAgIFNvdXJjZVJhbmdlIG1f
cnVsZUJvZHlSYW5nZTsKICAgICBTb3VyY2VSYW5nZSBtX3Byb3BlcnR5UmFuZ2U7Ci0gICAgU3R5
bGVSdWxlUmFuZ2VNYXAqIG1fcnVsZVJhbmdlTWFwOwotICAgIFJlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4gbV9jdXJyZW50UnVsZURhdGE7CisgICAgT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4g
bV9jdXJyZW50UnVsZURhdGFTdGFjazsKKyAgICBSdWxlU291cmNlRGF0YUxpc3QqIG1fcnVsZVNv
dXJjZURhdGFSZXN1bHQ7CisKKyAgICB2b2lkIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NT
UnVsZVNvdXJjZURhdGEqKTsKKyAgICB2b2lkIG1hcmtTdHlsZVJ1bGVIZWFkZXJTdGFydCgpOwor
ICAgIHZvaWQgbWFya1J1bGVIZWFkZXJFbmQoKTsKKwogICAgIHZvaWQgbWFya1NlbGVjdG9yTGlz
dFN0YXJ0KCk7CiAgICAgdm9pZCBtYXJrU2VsZWN0b3JMaXN0RW5kKCk7CiAgICAgdm9pZCBtYXJr
UnVsZUJvZHlTdGFydCgpOwogICAgIHZvaWQgbWFya1J1bGVCb2R5RW5kKCk7CiAgICAgdm9pZCBt
YXJrUHJvcGVydHlTdGFydCgpOwogICAgIHZvaWQgbWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBv
cnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKTsKKyAgICB2b2lkIGFkZE5ld1J1bGVU
b1NvdXJjZVRyZWUoUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4pOworICAgIFBhc3NSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IHBvcFJ1bGVEYXRhKCk7CiAgICAgdm9pZCByZXNldFNlbGVj
dG9yTGlzdE1hcmtzKCkgeyBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0gbV9zZWxlY3Rvckxp
c3RSYW5nZS5lbmQgPSAwOyB9CiAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVs
ZUJvZHlSYW5nZS5zdGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9Ci0gICAgdm9pZCBy
ZXNldFByb3BlcnR5TWFya3MoKSB7IG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IG1fcHJvcGVydHlS
YW5nZS5lbmQgPSBVSU5UX01BWDsgfQorICAgIHZvaWQgcmVzZXRQcm9wZXJ0eVJhbmdlKCkgeyBt
X3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gVUlOVF9NQVg7IH0K
KyAgICBib29sIGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiAhIW1fY3Vy
cmVudFJ1bGVEYXRhU3RhY2s7IH0KICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7CiAgICAgaW50
IHRva2VuKCkgeyByZXR1cm4gbV90b2tlbjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHlTb3VyY2VEYXRhLmgKaW5kZXggNTgwM2Y5NGIxYzJmYTc1MWU5ZTU2ZTEwMjUyY2JkYjY0
MGUxNWUyNC4uYWEzNTJmYWJmYTBmODRkOTcwMjlmZDVjMDc3ODlmMjY4ODMxNDFkNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtODMsNiArODMsOSBA
QCBzdHJ1Y3QgQ1NTU3R5bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTU3R5bGVT
b3VyY2VEYXRhPiB7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4gcHJvcGVydHlE
YXRhOwogfTsKIAorY2xhc3MgQ1NTUnVsZVNvdXJjZURhdGE7Cit0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+ID4gUnVsZVNvdXJjZURhdGFMaXN0OworCiBzdHJ1Y3QgQ1NT
UnVsZVNvdXJjZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NSdWxlU291cmNlRGF0YT4gewog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjcmVhdGUoKQogICAgIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApp
bmRleCA0NDk4YWRjMTRmNzEyMTkwNmZiMmJlNjA2OTA1YmUwMjdjNWI1MDMxLi44ZTlhNjQ2OWE5
ZTg2ODZjNTY1YWI1Njg4YmRlYTgzYjMwMWMxNjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC02MCwxOCArNjAsMTggQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIFdlYkNvcmU6OlR5cGVC
dWlsZGVyOjpBcnJheTsKK3VzaW5nIFdlYkNvcmU6OlJ1bGVTb3VyY2VEYXRhTGlzdDsKIAogY2xh
c3MgUGFyc2VkU3R5bGVTaGVldCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiA+IFNvdXJjZURhdGE7CiAgICAgUGFyc2VkU3R5
bGVTaGVldCgpOwogCiAgICAgV2ViQ29yZTo6Q1NTU3R5bGVTaGVldCogY3NzU3R5bGVTaGVldCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VyT3V0cHV0OyB9CiAgICAgY29uc3QgU3RyaW5nJiB0ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CiAgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCk7CiAgICAgYm9vbCBoYXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNUZXh0OyB9
Ci0gICAgU291cmNlRGF0YSogc291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRGF0
YS5nZXQoKTsgfQotICAgIHZvaWQgc2V0U291cmNlRGF0YShQYXNzT3duUHRyPFNvdXJjZURhdGE+
IHNvdXJjZURhdGEpOworICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCogc291cmNlRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlRGF0YS5nZXQoKTsgfQorICAgIHZvaWQgc2V0U291cmNlRGF0YShQ
YXNzT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4pOwogICAgIGJvb2wgaGFzU291cmNlRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRGF0YTsgfQogICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NS
dWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAK
QEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBt
X3BhcnNlck91dHB1dDsKICAgICBTdHJpbmcgbV90ZXh0OwogICAgIGJvb2wgbV9oYXNUZXh0Owot
ICAgIE93blB0cjxTb3VyY2VEYXRhPiBtX3NvdXJjZURhdGE7CisgICAgT3duUHRyPFJ1bGVTb3Vy
Y2VEYXRhTGlzdD4gbV9zb3VyY2VEYXRhOwogfTsKIAogUGFyc2VkU3R5bGVTaGVldDo6UGFyc2Vk
U3R5bGVTaGVldCgpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgUGFyc2VkU3R5bGVTaGVldDo6c2V0
VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgc2V0U291cmNlRGF0YShudWxscHRyKTsKIH0K
IAotdm9pZCBQYXJzZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8U291cmNl
RGF0YT4gc291cmNlRGF0YSkKK3ZvaWQgUGFyc2VkU3R5bGVTaGVldDo6c2V0U291cmNlRGF0YShQ
YXNzT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gc291cmNlRGF0YSkKIHsKICAgICBtX3NvdXJj
ZURhdGEgPSBzb3VyY2VEYXRhOwogfQpAQCAtMTA5OCwyMSArMTA5OCw4IEBAIGJvb2wgSW5zcGVj
dG9yU3R5bGVTaGVldDo6ZW5zdXJlU291cmNlRGF0YSgpCiAKICAgICBSZWZQdHI8U3R5bGVTaGVl
dENvbnRlbnRzPiBuZXdTdHlsZVNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoKTsK
ICAgICBDU1NQYXJzZXIgcChDU1NTdHJpY3RNb2RlKTsKLSAgICBTdHlsZVJ1bGVSYW5nZU1hcCBy
dWxlUmFuZ2VNYXA7Ci0gICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFy
c2VkU3R5bGVTaGVldC0+dGV4dCgpLCAwLCAmcnVsZVJhbmdlTWFwKTsKLSAgICBPd25QdHI8UGFy
c2VkU3R5bGVTaGVldDo6U291cmNlRGF0YT4gcmFuZ2VzVmVjdG9yKGFkb3B0UHRyKG5ldyBQYXJz
ZWRTdHlsZVNoZWV0OjpTb3VyY2VEYXRhKSk7Ci0KLSAgICBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4g
cnVsZXM7Ci0gICAgUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qo
Q1NTU3R5bGVTaGVldDo6Y3JlYXRlKG5ld1N0eWxlU2hlZXQpLmdldCgpKTsKLSAgICBjb2xsZWN0
RmxhdFJ1bGVzKHJ1bGVMaXN0LCAmcnVsZXMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNp
emUgPSBydWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlUmFu
Z2VNYXA6Oml0ZXJhdG9yIGl0ID0gcnVsZVJhbmdlTWFwLmZpbmQocnVsZXMuYXQoaSktPnN0eWxl
UnVsZSgpKTsKLSAgICAgICAgaWYgKGl0ICE9IHJ1bGVSYW5nZU1hcC5lbmQoKSkgewotICAgICAg
ICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhpdC0+c2Vjb25kLmdldCgpLCBtX3BhcnNl
ZFN0eWxlU2hlZXQtPnRleHQoKSk7Ci0gICAgICAgICAgICByYW5nZXNWZWN0b3ItPmFwcGVuZChp
dC0+c2Vjb25kKTsKLSAgICAgICAgfQotICAgIH0KLQorICAgIE93blB0cjxSdWxlU291cmNlRGF0
YUxpc3Q+IHJhbmdlc1ZlY3RvcihhZG9wdFB0cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkpKTsK
KyAgICBwLnBhcnNlU2hlZXQobmV3U3R5bGVTaGVldC5nZXQoKSwgbV9wYXJzZWRTdHlsZVNoZWV0
LT50ZXh0KCksIDAsIHJhbmdlc1ZlY3Rvci5nZXQoKSk7CiAgICAgbV9wYXJzZWRTdHlsZVNoZWV0
LT5zZXRTb3VyY2VEYXRhKHJhbmdlc1ZlY3Rvci5yZWxlYXNlKCkpOwogICAgIHJldHVybiBtX3Bh
cnNlZFN0eWxlU2hlZXQtPmhhc1NvdXJjZURhdGEoKTsKIH0KQEAgLTEyNTMsNTEgKzEyNDAsNiBA
QCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxl
PiA+IEluc3BlY3RvclN0eWxlU2hlZXQ6OgogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwog
fQogCi12b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMo
Q1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVEYXRhLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRUZXh0
KQotewotICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBy
dWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7Ci0gICAgdW5zaWduZWQgc2l6
ZSA9IHByb3BlcnR5RGF0YS5zaXplKCk7Ci0gICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB1bnNpZ25lZCBzdHlsZVN0YXJ0ID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+
c3R5bGVCb2R5UmFuZ2Uuc3RhcnQ7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHls
ZVNoZWV0VGV4dC5jaGFyYWN0ZXJzKCk7Ci0gICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKiBuZXh0
RGF0YSA9ICYocHJvcGVydHlEYXRhLmF0KDApKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogY3VycmVudERh
dGEgPSBuZXh0RGF0YTsKLSAgICAgICAgbmV4dERhdGEgPSBpIDwgc2l6ZSAtIDEgPyAmKHByb3Bl
cnR5RGF0YS5hdChpICsgMSkpIDogMDsKLQotICAgICAgICBpZiAoY3VycmVudERhdGEtPnBhcnNl
ZE9rKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjdXJyZW50RGF0YS0+cmFu
Z2UuZW5kID4gMCAmJiBjaGFyYWN0ZXJzW3N0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2Uu
ZW5kIC0gMV0gPT0gJzsnKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdW5zaWdu
ZWQgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7Ci0gICAgICAgIGlmICghbmV4dERhdGEpCi0gICAg
ICAgICAgICBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURh
dGEtPnN0eWxlQm9keVJhbmdlLmVuZCAtIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBy
b3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIG5leHREYXRhLT5yYW5nZS5zdGFy
dCAtIDE7Ci0KLSAgICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbcHJvcGVydHlF
bmRJblN0eWxlU2hlZXRdKSkKLSAgICAgICAgICAgIC0tcHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7
Ci0KLSAgICAgICAgLy8gcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgcG9pbnRzIGF0IHRoZSBsYXN0
IHByb3BlcnR5IHRleHQgY2hhcmFjdGVyLgotICAgICAgICB1bnNpZ25lZCBuZXdQcm9wZXJ0eUVu
ZCA9IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gc3R5bGVTdGFydCArIDE7IC8vIEV4Y2x1c2l2
ZSBvZiB0aGUgbGFzdCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KLSAgICAgICAgaWYgKGN1cnJl
bnREYXRhLT5yYW5nZS5lbmQgIT0gbmV3UHJvcGVydHlFbmQpIHsKLSAgICAgICAgICAgIGN1cnJl
bnREYXRhLT5yYW5nZS5lbmQgPSBuZXdQcm9wZXJ0eUVuZDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdl
LnN0YXJ0ICsgY3VycmVudERhdGEtPm5hbWUubGVuZ3RoKCk7Ci0gICAgICAgICAgICB3aGlsZSAo
dmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIGNoYXJh
Y3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVldF0gIT0gJzonKQotICAgICAgICAgICAgICAgICsr
dmFsdWVTdGFydEluU3R5bGVTaGVldDsKLSAgICAgICAgICAgIGlmICh2YWx1ZVN0YXJ0SW5TdHls
ZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQpCi0gICAgICAgICAgICAgICAgKyt2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0OyAvLyBTaGlmdCBwYXN0IHRoZSAnOicuCi0gICAgICAgICAgICB3
aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYm
IGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVldF0pKQotICAgICAg
ICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKLSAgICAgICAgICAgIC8vIE5lZWQg
dG8gZXhjbHVkZSB0aGUgdHJhaWxpbmcgJzsnIGZyb20gdGhlIHByb3BlcnR5IHZhbHVlLgotICAg
ICAgICAgICAgY3VycmVudERhdGEtPnZhbHVlID0gc3R5bGVTaGVldFRleHQuc3Vic3RyaW5nKHZh
bHVlU3RhcnRJblN0eWxlU2hlZXQsIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gdmFsdWVTdGFy
dEluU3R5bGVTaGVldCArIChjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHlsZVNoZWV0XSA9PSAn
OycgPyAwIDogMSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIEluc3BlY3RvclN0eWxl
U2hlZXQ6OmNvbGxlY3RGbGF0UnVsZXMoUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3Qs
IFZlY3RvcjxDU1NTdHlsZVJ1bGUqPiogcmVzdWx0KQogewogICAgIGlmICghcnVsZUxpc3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCAw
M2NhYjY3N2QyMjQzYzdkNWM0NjUwMzA0MjgxZGQ2OTJjMTdjOTg3Li41NTU1NmFiZGNiMWU3OTkw
NzhlOWNkNzI2MWVjYWIwZjFiMWEyNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTU5LDcgKzU5LDEwIEBAIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogCiBjbGFzcyBJbnNwZWN0b3JDU1NJZCB7CiBwdWJsaWM6Ci0gICAgSW5z
cGVjdG9yQ1NTSWQoKSB7IH0KKyAgICBJbnNwZWN0b3JDU1NJZCgpCisgICAgICAgIDogbV9vcmRp
bmFsKDApCisgICAgeworICAgIH0KIAogICAgIGV4cGxpY2l0IEluc3BlY3RvckNTU0lkKFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgIHsKQEAgLTEwMiw2ICsxMDUsOCBAQCBwcml2
YXRlOgogCiBzdHJ1Y3QgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSB7CiAgICAgSW5zcGVjdG9yU3R5
bGVQcm9wZXJ0eSgpCisgICAgICAgIDogaGFzU291cmNlKGZhbHNlKQorICAgICAgICAsIGRpc2Fi
bGVkKGZhbHNlKQogICAgIHsKICAgICB9CiAKQEAgLTIxOSw3ICsyMjQsNiBAQCBwcm90ZWN0ZWQ6
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JTdHlsZTsKIAotICAgIHN0YXRp
YyB2b2lkIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVE
YXRhLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRUZXh0KTsKICAgICBzdGF0aWMgdm9pZCBjb2xs
ZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+LCBWZWN0b3I8Q1NTU3R5bGVSdWxl
Kj4qIHJlc3VsdCk7CiAgICAgYm9vbCBlbnN1cmVUZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1
cmVTb3VyY2VEYXRhKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146570</attachid>
            <date>2012-06-08 07:53:37 -0700</date>
            <delta_ts>2012-06-09 01:16:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88646-20120608185336.patch</filename>
            <type>text/plain</type>
            <size>27403</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWFkYjQzMTNiZjBiYWZh
NTY3MjA2ZmRhYWM4Y2ZmZjQzN2U5YjY3Ny4uN2EzMDJhYjhhNmNjNjAyNzM4NGE0ZmRjZWEwYzIy
MjNlMzExNmIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA2LTA4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCkgc2hvdWxkIHByb3ZpZGUgcmVhZHktdG8tdXNl
IHNvdXJjZSBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04ODY0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgY2hhbmdlIG1vdmVzIHRoZSBwb3N0LXByb2Nlc3Npbmcgc3RlcCBmcm9tIEluc3Bl
Y3RvclN0eWxlU2hlZXQgaW50byBDU1NQYXJzZXIsIHNvIHRoYXQKKyAgICAgICAgQ1NTUGFyc2Vy
OjpwYXJzZVNoZWV0KCkgd2lsbCByZXR1cm4gYSByZWFkeS10by11c2UgbGlzdCB3aXRoIHN0eWxl
IHJ1bGUgc291cmNlIGNvZGUgZGF0YS4KKyAgICAgICAgQWxzbywgdW5pdmVyc2FsIGRhdGEgc3Ry
dWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgd2hpY2ggYWxsb3cgZm9yIHRoZSBmdWxsIHJ1bGUgc291
cmNlIGRhdGEgdHJlZSBidWlsZGluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIHRoaXMg
aXMgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOiBVc2UgdW5p
dmVyc2FsIGRhdGEgc3RydWN0dXJlcywgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGJ1aWxkaW5nIHRo
ZSBmdWxsIHJ1bGUgdHJlZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Q1NTUGFyc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c2V0dXBQYXJzZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoZWV0KTogUmV0dXJuIHJlYWR5LXRvLXVzZSBzb3Vy
Y2UgY29kZSBkYXRhIGVudHJpZXMgcmF0aGVyIHRoYW4gYW4gaW50ZXJtZWRpYXRlIHN0cnVjdHVy
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmFkZE5ld1J1bGVUb1NvdXJjZVRyZWUpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBvcFJ1bGVEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyk6IE1vdmVkIGlu
IGZyb20gSW5zcGVjdG9yU3R5bGVTaGVldC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
bWFya1NlbGVjdG9yTGlzdFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFy
a1NlbGVjdG9yTGlzdEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtSdWxl
Qm9keVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKToKKyAgICAg
ICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChDU1NQYXJzZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpyZXNldFByb3BlcnR5UmFuZ2UpOiBSZW5hbWVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjppc0V4dHJhY3RpbmdTb3VyY2VEYXRhKTogQSBjb252ZW5pZW5j
ZSBjaGVjay4KKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmg6IEludHJvZHVj
ZSB0aGUgUnVsZVNvdXJjZURhdGFMaXN0IHR5cGVkZWYuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6IE1ha2UgdXNlIG9mIFJ1
bGVTb3VyY2VEYXRhTGlzdCBhbmQgZm9sbG93IHRoZSBDU1NQYXJzZXI6OnBhcnNlKigpIEFQSSBj
aGFuZ2VzLgorICAgICAgICAoUGFyc2VkU3R5bGVTaGVldDo6c291cmNlRGF0YSk6CisgICAgICAg
IChQYXJzZWRTdHlsZVNoZWV0KToKKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnNldFNvdXJj
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlU291
cmNlRGF0YSk6IFJlbW92ZSBzb3VyY2UgZGF0YSBwb3N0cHJvY2Vzc2luZywgZm9sbG93IHRoZSBu
ZXcgcGFyc2VTaGVldCgpIEFQSS4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6Okluc3BlY3RvckNTU0lk
KTogRHJpdmUtYnk6IHVuaW5pdGlhbGl6ZWQgZmllbGQgZml4LgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eTo6SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSk6IERpdHRvLgor
ICAgICAgICAoSW5zcGVjdG9yU3R5bGVTaGVldCk6CisKIDIwMTItMDYtMDggIEJyeWFuIE1jUXVh
ZGUgIDxibWNxdWFkZUBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFubm90
YXRlIHRpbWVsaW5lIHJlY29yZHMgd2l0aCBhIGZyYW1lIGlkZW50aWZpZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAKaW5kZXggOTczMzQyZDA5MDgwOTk3OWZiOTBlNjAxOTRlNmI5Y2Y2NjYxODAx
My4uZTM1Zjg2ZjQxNGM0YTI5NWY0MTJjODcxMDBkMTFmOTUwNDRjY2E4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAKQEAgLTIzNSwxMiArMjM1LDEzIEBAIENTU1BhcnNlcjo6Q1NTUGFyc2Vy
KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiAgICAgLCBtX2hhc0ZvbnRGYWNlT25s
eVZhbHVlcyhmYWxzZSkKICAgICAsIG1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZShmYWxz
ZSkKICAgICAsIG1fZGVmYXVsdE5hbWVzcGFjZShzdGFyQXRvbSkKKyAgICAsIG1fcGFyc2VkVGV4
dFByZWZpeExlbmd0aCgwKQorICAgICwgbV9wYXJzZWRUZXh0TGVuZ3RoKDApCiAgICAgLCBtX2lu
U3R5bGVSdWxlT3JEZWNsYXJhdGlvbihmYWxzZSkKICAgICAsIG1fc2VsZWN0b3JMaXN0UmFuZ2Uo
MCwgMCkKICAgICAsIG1fcnVsZUJvZHlSYW5nZSgwLCAwKQogICAgICwgbV9wcm9wZXJ0eVJhbmdl
KFVJTlRfTUFYLCBVSU5UX01BWCkKLSAgICAsIG1fcnVsZVJhbmdlTWFwKDApCi0gICAgLCBtX2N1
cnJlbnRSdWxlRGF0YSgwKQorICAgICwgbV9ydWxlU291cmNlRGF0YVJlc3VsdCgwKQogICAgICwg
bV9wYXJzaW5nTW9kZShOb3JtYWxNb2RlKQogICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKDApCiAg
ICAgLCBtX3Rva2VuU3RhcnQoMCkKQEAgLTI4NSwxNSArMjg2LDE3IEBAIHZvaWQgQ1NTUGFyc2Vy
U3RyaW5nOjpsb3dlcigpCiAKIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFy
KiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyKiBzdWZmaXgpCiB7Ci0g
ICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKSArIHN0cmxlbihwcmVmaXgpICsgc3RybGVu
KHN1ZmZpeCkgKyAxOworICAgIG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCA9IHN0cmxlbihwcmVm
aXgpOworICAgIG1fcGFyc2VkVGV4dExlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBpbnQg
bGVuZ3RoID0gbV9wYXJzZWRUZXh0TGVuZ3RoICsgbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsg
c3RybGVuKHN1ZmZpeCkgKyAxOwogCiAgICAgbV9kYXRhU3RhcnQgPSBhZG9wdEFycmF5UHRyKG5l
dyBVQ2hhcltsZW5ndGhdKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RybGVuKHBy
ZWZpeCk7IGkrKykKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRUZXh0UHJl
Zml4TGVuZ3RoOyBpKyspCiAgICAgICAgIG1fZGF0YVN0YXJ0W2ldID0gcHJlZml4W2ldOwogCi0g
ICAgbWVtY3B5KG1fZGF0YVN0YXJ0LmdldCgpICsgc3RybGVuKHByZWZpeCksIHN0cmluZy5jaGFy
YWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOworICAgIG1lbWNweSht
X2RhdGFTdGFydC5nZXQoKSArIG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCwgc3RyaW5nLmNoYXJh
Y3RlcnMoKSwgbV9wYXJzZWRUZXh0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAKLSAgICB1bnNp
Z25lZCBzdGFydCA9IHN0cmxlbihwcmVmaXgpICsgc3RyaW5nLmxlbmd0aCgpOworICAgIHVuc2ln
bmVkIHN0YXJ0ID0gbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsgbV9wYXJzZWRUZXh0TGVuZ3Ro
OwogICAgIHVuc2lnbmVkIGVuZCA9IHN0YXJ0ICsgc3RybGVuKHN1ZmZpeCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykKICAgICAgICAgbV9kYXRhU3RhcnRbaV0g
PSBzdWZmaXhbaSAtIHN0YXJ0XTsKQEAgLTMwNCwyMSArMzA3LDE5IEBAIHZvaWQgQ1NTUGFyc2Vy
OjpzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBj
b25zdCBjaGFyCiAgICAgcmVzZXRSdWxlQm9keU1hcmtzKCk7CiB9CiAKLXZvaWQgQ1NTUGFyc2Vy
OjpwYXJzZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBpbnQgc3RhcnRMaW5lTnVtYmVyLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFw
KQordm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydExpbmVOdW1iZXIsIFJ1bGVTb3VyY2VEYXRh
TGlzdCogcnVsZVNvdXJjZURhdGFSZXN1bHQpCiB7CiAgICAgc2V0U3R5bGVTaGVldChzaGVldCk7
CiAgICAgbV9kZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207IC8vIFJlc2V0IHRoZSBkZWZhdWx0
IG5hbWVzcGFjZS4KLSAgICBtX3J1bGVSYW5nZU1hcCA9IHJ1bGVSYW5nZU1hcDsKLSAgICBpZiAo
cnVsZVJhbmdlTWFwKSB7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhID0gQ1NTUnVsZVNvdXJj
ZURhdGE6OmNyZWF0ZSgpOwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VE
YXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKLSAgICB9CisgICAgaWYgKHJ1bGVT
b3VyY2VEYXRhUmVzdWx0KQorICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrID0gYWRvcHRQ
dHIobmV3IFJ1bGVTb3VyY2VEYXRhTGlzdCgpKTsKKyAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0
ID0gcnVsZVNvdXJjZURhdGFSZXN1bHQ7CiAKICAgICBtX2xpbmVOdW1iZXIgPSBzdGFydExpbmVO
dW1iZXI7CiAgICAgc2V0dXBQYXJzZXIoIiIsIHN0cmluZywgIiIpOwogICAgIGNzc3l5cGFyc2Uo
dGhpcyk7Ci0gICAgbV9ydWxlUmFuZ2VNYXAgPSAwOwotICAgIG1fY3VycmVudFJ1bGVEYXRhID0g
MDsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmNsZWFyKCk7CisgICAgbV9ydWxlU291cmNl
RGF0YVJlc3VsdCA9IDA7CiAgICAgbV9ydWxlID0gMDsKIH0KIApAQCAtMTExOSwxNiArMTEyMCwx
OSBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHN0cmluZywg
Q1NTU2VsZWN0b3JMaXN0JiBzZWxlY3RvckxpcwogICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VT
ZWxlY3RvciA9IDA7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxl
UHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVmUHRyPENT
U1N0eWxlU291cmNlRGF0YT4qIHN0eWxlU291cmNlRGF0YSwgU3R5bGVTaGVldENvbnRlbnRzKiBj
b250ZXh0U3R5bGVTaGVldCkKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxl
UHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUGFzc1JlZlB0
cjxDU1NTdHlsZVNvdXJjZURhdGE+IHBycFN0eWxlU291cmNlRGF0YSwgU3R5bGVTaGVldENvbnRl
bnRzKiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICAvLyBMZW5ndGggb2YgdGhlICJALXdlYmtp
dC1kZWNsc3siIHByZWZpeC4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJlZml4TGVuZ3Ro
ID0gMTU7CiAKICAgICBzZXRTdHlsZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KTsKIAorICAgIFJl
ZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHN0eWxlU291cmNlRGF0YSA9IHBycFN0eWxlU291cmNl
RGF0YTsKICAgICBpZiAoc3R5bGVTb3VyY2VEYXRhKSB7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVE
YXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgICAgICBtX2N1cnJlbnRSdWxl
RGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAg
ICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjayA9IGFkb3B0UHRyKG5ldyBSdWxlU291cmNlRGF0
YUxpc3QoKSk7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gZGF0YSA9IENTU1J1
bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgZGF0YS0+c3R5bGVTb3VyY2VEYXRhID0g
c3R5bGVTb3VyY2VEYXRhOworICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5hcHBlbmQo
ZGF0YSk7CiAgICAgICAgIG1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uID0gdHJ1ZTsKICAgICB9
CiAKQEAgLTExNDUsMjAgKzExNDksMjIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRp
b24oU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZyYgc3QKICAgICAg
ICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgfQogCi0gICAgaWYgKG1fY3VycmVudFJ1bGVEYXRh
KSB7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9k
eVJhbmdlLnN0YXJ0ID0gMDsKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNl
RGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kID0gc3RyaW5nLmxlbmd0aCgpOwotICAgICAgICBmb3Ig
KFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+OjppdGVyYXRvciBpdCA9IG1fY3VycmVudFJ1
bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5iZWdpbigpLCBlbmRJdCA9IG1f
Y3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5lbmQoKTsgaXQg
IT0gZW5kSXQ7ICsraXQpIHsKLSAgICAgICAgICAgICgqaXQpLnJhbmdlLnN0YXJ0IC09IHByZWZp
eExlbmd0aDsKLSAgICAgICAgICAgICgqaXQpLnJhbmdlLmVuZCAtPSBwcmVmaXhMZW5ndGg7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAoc3R5bGVTb3VyY2VEYXRhKSB7Ci0gICAgICAgICpz
dHlsZVNvdXJjZURhdGEgPSBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLnJlbGVh
c2UoKTsKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGEgPSAwOworICAgICAgICBBU1NFUlQoIW1f
Y3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7CisgICAgICAgIENTU1J1bGVTb3VyY2VE
YXRhKiBydWxlRGF0YSA9IG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS5nZXQoKTsKKyAg
ICAgICAgcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQgPSAw
OworICAgICAgICBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQg
PSBzdHJpbmcubGVuZ3RoKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcnVs
ZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLnNpemUoKTsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eURhdGEgPSBy
dWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYXQoaSk7CisgICAgICAgICAg
ICBwcm9wZXJ0eURhdGEucmFuZ2Uuc3RhcnQgLT0gcHJlZml4TGVuZ3RoOworICAgICAgICAgICAg
cHJvcGVydHlEYXRhLnJhbmdlLmVuZCAtPSBwcmVmaXhMZW5ndGg7CisgICAgICAgIH0KKyAgICAg
ICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhydWxlRGF0YSk7CisKKyAgICAgICAgbV9jdXJy
ZW50UnVsZURhdGFTdGFjay5jbGVhcigpOwogICAgICAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJh
dGlvbiA9IGZhbHNlOwogICAgIH0KKwogICAgIHJldHVybiBvazsKIH0KIApAQCAtOTExNCw2ICs5
MTIwLDI3IEBAIENTU1BhcnNlcjo6UnVsZUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRlUnVsZUxpc3Qo
KQogICAgIHJldHVybiBsaXN0UHRyOwogfQogCit2b2lkIENTU1BhcnNlcjo6YWRkTmV3UnVsZVRv
U291cmNlVHJlZShQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlKQoreworICAgIC8v
IFByZWNvbmRpdGlvbjogKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkuCisgICAgaWYgKCFtX3J1
bGVTb3VyY2VEYXRhUmVzdWx0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhp
cyB0ZW1wb3JhcmlseSBidWlsZHMgYSBmbGF0IHN0eWxlIHJ1bGUgZGF0YSBsaXN0LCB0byBhdm9p
ZCB0aGUgY2xpZW50IGNvZGUgYnJlYWthZ2UuCisgICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdC0+
YXBwZW5kKHJ1bGUpOworfQorCitQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBDU1NQYXJz
ZXI6OnBvcFJ1bGVEYXRhKCkKK3sKKyAgICBpZiAoIW1fcnVsZVNvdXJjZURhdGFSZXN1bHQpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5p
c0VtcHR5KCkpOworICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gZGF0YSA9IG1fY3VycmVu
dFJ1bGVEYXRhU3RhY2stPmxhc3QoKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5yZW1v
dmVMYXN0KCk7CisgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworfQorCiBTdHlsZVJ1bGVLZXlm
cmFtZXMqIENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZSgpCiB7CiAgICAgbV9hbGxvd0lt
cG9ydFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwpAQCAtOTEz
NiwxOCArOTE2MywxOSBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVs
ZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBzZQogICAgICAgICBydWxlLT5z
ZXRQcm9wZXJ0aWVzKGNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7CiAgICAgICAgIHJlc3VsdCA9
IHJ1bGUuZ2V0KCk7CiAgICAgICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgp
KTsKLSAgICAgICAgaWYgKG1fcnVsZVJhbmdlTWFwKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9j
dXJyZW50UnVsZURhdGEpOwotICAgICAgICAgICAgbV9jdXJyZW50UnVsZURhdGEtPnN0eWxlU291
cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2U7Ci0gICAgICAgICAgICBt
X2N1cnJlbnRSdWxlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UgPSBtX3NlbGVjdG9yTGlzdFJhbmdl
OwotICAgICAgICAgICAgbV9ydWxlUmFuZ2VNYXAtPnNldChyZXN1bHQsIG1fY3VycmVudFJ1bGVE
YXRhLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IENTU1J1bGVT
b3VyY2VEYXRhOjpjcmVhdGUoKTsKLSAgICAgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHls
ZVNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOworICAgICAgICBpZiAo
aXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgICAgICBj
dXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UgPSBtX3J1bGVC
b2R5UmFuZ2U7CisgICAgICAgICAgICBjdXJyZW50UnVsZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdl
ID0gbV9zZWxlY3Rvckxpc3RSYW5nZTsKKyAgICAgICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlS
YW5nZXMoY3VycmVudFJ1bGVEYXRhLmdldCgpKTsKKyAgICAgICAgICAgIGFkZE5ld1J1bGVUb1Nv
dXJjZVRyZWUoY3VycmVudFJ1bGVEYXRhLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBtX2luU3R5
bGVSdWxlT3JEZWNsYXJhdGlvbiA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIHJlc2V0
U2VsZWN0b3JMaXN0TWFya3MoKTsKLSAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKKyAgICBpZiAo
aXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKSB7CisgICAgICAgIHJlc2V0U2VsZWN0b3JMaXN0TWFy
a3MoKTsKKyAgICAgICAgcmVzZXRSdWxlQm9keU1hcmtzKCk7CisgICAgfQogICAgIGNsZWFyUHJv
cGVydGllcygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC05MzUzLDE0ICs5MzgxLDYxIEBA
IHZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0TWVkaWFMaW5lKE1lZGlhUXVlcnlTZXQqIG1lZGlh
KQogICAgIG1lZGlhLT5zZXRMYXN0TGluZShtX2xpbmVOdW1iZXIpOwogfQogCit2b2lkIENTU1Bh
cnNlcjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhDU1NSdWxlU291cmNlRGF0YSogcnVsZURh
dGEpCit7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9
IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YTsKKyAgICB1bnNpZ25lZCBz
aXplID0gcHJvcGVydHlEYXRhLnNpemUoKTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIHVuc2lnbmVkIHN0eWxlU3RhcnQgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZS5zdGFydDsKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG1f
ZGF0YVN0YXJ0LmdldCgpICsgbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoOworICAgIENTU1Byb3Bl
cnR5U291cmNlRGF0YSogbmV4dERhdGEgPSAmKHByb3BlcnR5RGF0YS5hdCgwKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBDU1NQcm9wZXJ0eVNv
dXJjZURhdGEqIGN1cnJlbnREYXRhID0gbmV4dERhdGE7CisgICAgICAgIG5leHREYXRhID0gaSA8
IHNpemUgLSAxID8gJihwcm9wZXJ0eURhdGEuYXQoaSArIDEpKSA6IDA7CisKKyAgICAgICAgaWYg
KGN1cnJlbnREYXRhLT5wYXJzZWRPaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCA+IDAgJiYgY2hhcmFjdGVyc1tzdHlsZVN0YXJ0ICsg
Y3VycmVudERhdGEtPnJhbmdlLmVuZCAtIDFdID09ICc7JykKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0OworICAgICAgICBp
ZiAoIW5leHREYXRhKQorICAgICAgICAgICAgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBydWxl
RGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQgLSAxOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBu
ZXh0RGF0YS0+cmFuZ2Uuc3RhcnQgLSAxOworCisgICAgICAgIHdoaWxlIChpc0hUTUxTcGFjZShj
aGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHlsZVNoZWV0XSkpCisgICAgICAgICAgICAtLXByb3Bl
cnR5RW5kSW5TdHlsZVNoZWV0OworCisgICAgICAgIC8vIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0
IHBvaW50cyBhdCB0aGUgbGFzdCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgdW5z
aWduZWQgbmV3UHJvcGVydHlFbmQgPSBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHN0eWxlU3Rh
cnQgKyAxOyAvLyBFeGNsdXNpdmUgb2YgdGhlIGxhc3QgcHJvcGVydHkgdGV4dCBjaGFyYWN0ZXIu
CisgICAgICAgIGlmIChjdXJyZW50RGF0YS0+cmFuZ2UuZW5kICE9IG5ld1Byb3BlcnR5RW5kKSB7
CisgICAgICAgICAgICBjdXJyZW50RGF0YS0+cmFuZ2UuZW5kID0gbmV3UHJvcGVydHlFbmQ7Cisg
ICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCAr
IGN1cnJlbnREYXRhLT5yYW5nZS5zdGFydCArIGN1cnJlbnREYXRhLT5uYW1lLmxlbmd0aCgpOwor
ICAgICAgICAgICAgd2hpbGUgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZElu
U3R5bGVTaGVldCAmJiBjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdICE9ICc6JykK
KyAgICAgICAgICAgICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7CisgICAgICAgICAgICBp
ZiAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0KQorICAg
ICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsgLy8gU2hpZnQgcGFzdCB0aGUg
JzonLgorICAgICAgICAgICAgd2hpbGUgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0
eUVuZEluU3R5bGVTaGVldCAmJiBpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJblN0
eWxlU2hlZXRdKSkKKyAgICAgICAgICAgICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7Cisg
ICAgICAgICAgICAvLyBOZWVkIHRvIGV4Y2x1ZGUgdGhlIHRyYWlsaW5nICc7JyBmcm9tIHRoZSBw
cm9wZXJ0eSB2YWx1ZS4KKyAgICAgICAgICAgIGN1cnJlbnREYXRhLT52YWx1ZSA9IFN0cmluZyhj
aGFyYWN0ZXJzICsgdmFsdWVTdGFydEluU3R5bGVTaGVldCwgcHJvcGVydHlFbmRJblN0eWxlU2hl
ZXQgLSB2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0ICsgKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0
eWxlU2hlZXRdID09ICc7JyA/IDAgOiAxKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQg
Q1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0U3RhcnQoKQogeworICAgIGlmICghaXNFeHRyYWN0
aW5nU291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9zZWxlY3Rvckxpc3RSYW5n
ZS5zdGFydCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogfQogCiB2b2lkIENT
U1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdEVuZCgpCiB7Ci0gICAgaWYgKCFtX2N1cnJlbnRSdWxl
RGF0YSkKKyAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIFVDaGFyKiBsaXN0RW5kID0gbV90b2tlblN0YXJ0OwogICAgIHdoaWxlIChsaXN0RW5k
ID4gbV9kYXRhU3RhcnQuZ2V0KCkgKyAxKSB7CkBAIC05MzcwLDEwICs5NDQ1LDE1IEBAIHZvaWQg
Q1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0RW5kKCkKICAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IGxpc3RFbmQgLSBtX2RhdGFTdGFydC5n
ZXQoKTsKKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGRhdGEgPSBDU1NSdWxlU291cmNl
RGF0YTo6Y3JlYXRlKCk7CisgICAgZGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3Vy
Y2VEYXRhOjpjcmVhdGUoKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5hcHBlbmQoZGF0
YSk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCiB7CisgICAgaWYg
KCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCisgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25l
ZCBvZmZzZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKICAgICBpZiAoKm1f
dG9rZW5TdGFydCA9PSAneycpCiAgICAgICAgICsrb2Zmc2V0OyAvLyBTa2lwIHRoZSBydWxlIGJv
ZHkgb3BlbmluZyBicmFjZS4KQEAgLTkzODQsNiArOTQ2NCw4IEBAIHZvaWQgQ1NTUGFyc2VyOjpt
YXJrUnVsZUJvZHlTdGFydCgpCiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQog
eworICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CiAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiAg
ICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5lbmQpCiAgICAgICAgIG1fcnVsZUJvZHlS
YW5nZS5lbmQgPSBvZmZzZXQ7CkBAIC05NDAwLDExICs5NDgyLDEyIEBAIHZvaWQgQ1NTUGFyc2Vy
OjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQ
YXJzZWQpCiB7CiAgICAgaWYgKCFtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbikKICAgICAgICAg
cmV0dXJuOworCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3Rh
cnQuZ2V0KCk7CiAgICAgaWYgKCptX3Rva2VuU3RhcnQgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWlj
b2xvbiBpbnRvIHRoZSBwcm9wZXJ0eSB0ZXh0LgogICAgICAgICArK29mZnNldDsKICAgICBtX3By
b3BlcnR5UmFuZ2UuZW5kID0gb2Zmc2V0OwotICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQg
IT0gVUlOVF9NQVggJiYgbV9jdXJyZW50UnVsZURhdGEpIHsKKyAgICBpZiAobV9wcm9wZXJ0eVJh
bmdlLnN0YXJ0ICE9IFVJTlRfTUFYICYmICFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5
KCkpIHsKICAgICAgICAgLy8gVGhpcyBzdHVmZiBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gdGhlIHN0
eWxlIGRhdGEgcmV0cmlldmFsIGlzIHJlcXVlc3RlZCBieSBjbGllbnQuCiAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0OwogICAgICAgICBjb25zdCB1
bnNpZ25lZCBlbmQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kOwpAQCAtOTQxOCwxMCArOTUwMSwxMCBA
QCB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwg
Ym9vbCBpc1Byb3BlcnR5UGFyc2VkKQogICAgICAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5U3Ry
aW5nLmxlZnQoY29sb25JbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIFN0cmluZyB2
YWx1ZSA9IHByb3BlcnR5U3RyaW5nLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlT
dHJpbmcubGVuZ3RoKCkpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAvLyBUaGUgcHJvcGVy
dHkgcmFuZ2UgaXMgcmVsYXRpdmUgdG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KLSAg
ICAgICAgbV9jdXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFw
cGVuZCgKKyAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5zdHlsZVNvdXJj
ZURhdGEtPnByb3BlcnR5RGF0YS5hcHBlbmQoCiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVNvdXJj
ZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91bmQsIGlzUHJvcGVydHlQYXJzZWQsIFNv
dXJjZVJhbmdlKHN0YXJ0IC0gbV9ydWxlQm9keVJhbmdlLnN0YXJ0LCBlbmQgLSBtX3J1bGVCb2R5
UmFuZ2Uuc3RhcnQpKSk7CiAgICAgfQotICAgIHJlc2V0UHJvcGVydHlNYXJrcygpOworICAgIHJl
c2V0UHJvcGVydHlSYW5nZSgpOwogfQogCiBzdGF0aWMgQ1NTUHJvcGVydHlJRCBjc3NQcm9wZXJ0
eUlEKGNvbnN0IFVDaGFyKiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuaAppbmRleCA3YzVhNjIzNzc0OGZmMjdjOTU1ZjczYTViMzQwMDViMGM4ZTI3MzYx
Li5kN2NmMDdmODA0MTk0NTU1N2RlM2I5ZTZlYzNjN2FhY2Q0YjhlMjZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5oCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIH5DU1NQYXJzZXIoKTsK
IAotICAgIHZvaWQgcGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcm
LCBpbnQgc3RhcnRMaW5lTnVtYmVyID0gMCwgU3R5bGVSdWxlUmFuZ2VNYXAqID0gMCk7CisgICAg
dm9pZCBwYXJzZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IFN0cmluZyYsIGludCBz
dGFydExpbmVOdW1iZXIgPSAwLCBSdWxlU291cmNlRGF0YUxpc3QqID0gMCk7CiAgICAgUGFzc1Jl
ZlB0cjxTdHlsZVJ1bGVCYXNlPiBwYXJzZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3Qg
U3RyaW5nJik7CiAgICAgUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1lPiBwYXJzZUtleWZyYW1lUnVs
ZShTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBw
YXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
LCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKik7CkBA
IC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwYXJzZVN5c3RlbUNvbG9y
KFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3Ry
aW5nJik7CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxpZFByaW1p
dGl2ZShpbnQgaWRlbnQsIENTU1BhcnNlclZhbHVlKik7Ci0gICAgYm9vbCBwYXJzZURlY2xhcmF0
aW9uKFN0eWxlUHJvcGVydHlTZXQqLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8Q1NTU3R5bGVTb3Vy
Y2VEYXRhPiosIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOworICAgIGJv
b2wgcGFyc2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiwgY29uc3QgU3RyaW5nJiwgUGFz
c1JlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRT
dHlsZVNoZWV0KTsKICAgICBQYXNzT3duUHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShj
b25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4sIGJvb2wgaW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2Up
OwpAQCAtMzEwLDIxICszMTAsMzEgQEAgcHVibGljOgogICAgIEF0b21pY1N0cmluZyBtX2RlZmF1
bHROYW1lc3BhY2U7CiAKICAgICAvLyB0b2tlbml6ZXIgbWV0aG9kcyBhbmQgZGF0YQorICAgIHNp
emVfdCBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGg7CisgICAgc2l6ZV90IG1fcGFyc2VkVGV4dExl
bmd0aDsKICAgICBib29sIG1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uOwogICAgIFNvdXJjZVJh
bmdlIG1fc2VsZWN0b3JMaXN0UmFuZ2U7CiAgICAgU291cmNlUmFuZ2UgbV9ydWxlQm9keVJhbmdl
OwogICAgIFNvdXJjZVJhbmdlIG1fcHJvcGVydHlSYW5nZTsKLSAgICBTdHlsZVJ1bGVSYW5nZU1h
cCogbV9ydWxlUmFuZ2VNYXA7Ci0gICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBtX2N1cnJl
bnRSdWxlRGF0YTsKKyAgICBPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBtX2N1cnJlbnRSdWxl
RGF0YVN0YWNrOworICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCogbV9ydWxlU291cmNlRGF0YVJlc3Vs
dDsKKworICAgIHZvaWQgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhDU1NSdWxlU291cmNlRGF0
YSopOworICAgIHZvaWQgbWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KCk7CisgICAgdm9pZCBtYXJr
UnVsZUhlYWRlckVuZCgpOworCiAgICAgdm9pZCBtYXJrU2VsZWN0b3JMaXN0U3RhcnQoKTsKICAg
ICB2b2lkIG1hcmtTZWxlY3Rvckxpc3RFbmQoKTsKICAgICB2b2lkIG1hcmtSdWxlQm9keVN0YXJ0
KCk7CiAgICAgdm9pZCBtYXJrUnVsZUJvZHlFbmQoKTsKICAgICB2b2lkIG1hcmtQcm9wZXJ0eVN0
YXJ0KCk7CiAgICAgdm9pZCBtYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBi
b29sIGlzUHJvcGVydHlQYXJzZWQpOworICAgIHZvaWQgYWRkTmV3UnVsZVRvU291cmNlVHJlZShQ
YXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPik7CisgICAgUGFzc1JlZlB0cjxDU1NSdWxlU291
cmNlRGF0YT4gcG9wUnVsZURhdGEoKTsKICAgICB2b2lkIHJlc2V0U2VsZWN0b3JMaXN0TWFya3Mo
KSB7IG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9
IDA7IH0KICAgICB2b2lkIHJlc2V0UnVsZUJvZHlNYXJrcygpIHsgbV9ydWxlQm9keVJhbmdlLnN0
YXJ0ID0gbV9ydWxlQm9keVJhbmdlLmVuZCA9IDA7IH0KLSAgICB2b2lkIHJlc2V0UHJvcGVydHlN
YXJrcygpIHsgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLmVuZCA9IFVJ
TlRfTUFYOyB9CisgICAgdm9pZCByZXNldFByb3BlcnR5UmFuZ2UoKSB7IG1fcHJvcGVydHlSYW5n
ZS5zdGFydCA9IG1fcHJvcGVydHlSYW5nZS5lbmQgPSBVSU5UX01BWDsgfQorICAgIGJvb2wgaXNF
eHRyYWN0aW5nU291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuICEhbV9jdXJyZW50UnVsZURhdGFT
dGFjazsgfQogICAgIGludCBsZXgodm9pZCogeXlsdmFsKTsKICAgICBpbnQgdG9rZW4oKSB7IHJl
dHVybiBtX3Rva2VuOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eVNvdXJjZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURh
dGEuaAppbmRleCA1ODAzZjk0YjFjMmZhNzUxZTllNTZlMTAyNTJjYmRiNjQwZTE1ZTI0Li5hYTM1
MmZhYmZhMGY4NGQ5NzAyOWZkNWMwNzc4OWYyNjg4MzE0MWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCkBAIC04Myw2ICs4Myw5IEBAIHN0cnVjdCBDU1NT
dHlsZVNvdXJjZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NTdHlsZVNvdXJjZURhdGE+IHsK
ICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiBwcm9wZXJ0eURhdGE7CiB9OwogCitj
bGFzcyBDU1NSdWxlU291cmNlRGF0YTsKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxDU1NSdWxlU291
cmNlRGF0YT4gPiBSdWxlU291cmNlRGF0YUxpc3Q7CisKIHN0cnVjdCBDU1NSdWxlU291cmNlRGF0
YSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1J1bGVTb3VyY2VEYXRhPiB7CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGNyZWF0ZSgpCiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDQ0OThhZGMx
NGY3MTIxOTA2ZmIyYmU2MDY5MDViZTAyN2M1YjUwMzEuLmE2ZmYwZGJmOGMyYWVjYWE1YTBlOTA0
NDRiNzc4N2Y4YmUzNzk2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTYwLDE4ICs2MCwxOCBAQAogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgV2ViQ29yZTo6VHlwZUJ1aWxkZXI6OkFycmF5
OwordXNpbmcgV2ViQ29yZTo6UnVsZVNvdXJjZURhdGFMaXN0OwogCiBjbGFzcyBQYXJzZWRTdHls
ZVNoZWV0IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6Q1NT
UnVsZVNvdXJjZURhdGE+ID4gU291cmNlRGF0YTsKICAgICBQYXJzZWRTdHlsZVNoZWV0KCk7CiAK
ICAgICBXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBjc3NTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1
cm4gbV9wYXJzZXJPdXRwdXQ7IH0KICAgICBjb25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJl
dHVybiBtX3RleHQ7IH0KICAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKICAg
ICBib29sIGhhc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2hhc1RleHQ7IH0KLSAgICBTb3VyY2VE
YXRhKiBzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VEYXRhLmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8U291cmNlRGF0YT4gc291cmNlRGF0YSk7
CisgICAgUnVsZVNvdXJjZURhdGFMaXN0KiBzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2VEYXRhLmdldCgpOyB9CisgICAgdm9pZCBzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8UnVs
ZVNvdXJjZURhdGFMaXN0Pik7CiAgICAgYm9vbCBoYXNTb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VEYXRhOyB9CiAgICAgUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRh
PiBydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIApAQCAtODEsNyArODEs
NyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQqIG1fcGFyc2VyT3V0cHV0
OwogICAgIFN0cmluZyBtX3RleHQ7CiAgICAgYm9vbCBtX2hhc1RleHQ7Ci0gICAgT3duUHRyPFNv
dXJjZURhdGE+IG1fc291cmNlRGF0YTsKKyAgICBPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBt
X3NvdXJjZURhdGE7CiB9OwogCiBQYXJzZWRTdHlsZVNoZWV0OjpQYXJzZWRTdHlsZVNoZWV0KCkK
QEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBQYXJzZWRTdHlsZVNoZWV0OjpzZXRUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCkKICAgICBzZXRTb3VyY2VEYXRhKG51bGxwdHIpOwogfQogCi12b2lkIFBhcnNl
ZFN0eWxlU2hlZXQ6OnNldFNvdXJjZURhdGEoUGFzc093blB0cjxTb3VyY2VEYXRhPiBzb3VyY2VE
YXRhKQordm9pZCBQYXJzZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8UnVs
ZVNvdXJjZURhdGFMaXN0PiBzb3VyY2VEYXRhKQogewogICAgIG1fc291cmNlRGF0YSA9IHNvdXJj
ZURhdGE7CiB9CkBAIC0zMTYsNyArMzE2LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6c2V0UHJv
cGVydHlUZXh0KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5VGV4dCwKICAg
ICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHRlbXBNdXRhYmxlU3R5bGUgPSBTdHlsZVBy
b3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICAgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CiAgICAgICAgIENTU1Bh
cnNlciBwKENTU1N0cmljdE1vZGUpOwotICAgICAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcE11
dGFibGVTdHlsZS5nZXQoKSwgcHJvcGVydHlUZXh0ICsgIiAiICsgYm9ndXNQcm9wZXJ0eU5hbWUg
KyAiOiBub25lIiwgJnNvdXJjZURhdGEsIG1fc3R5bGUtPnBhcmVudFN0eWxlU2hlZXQoKS0+Y29u
dGVudHMoKSk7CisgICAgICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wTXV0YWJsZVN0eWxlLmdl
dCgpLCBwcm9wZXJ0eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFtZSArICI6IG5vbmUiLCBz
b3VyY2VEYXRhLCBtX3N0eWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmNvbnRlbnRzKCkpOwogICAg
ICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gc291cmNl
RGF0YS0+cHJvcGVydHlEYXRhOwogICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJv
cGVydHlEYXRhLnNpemUoKTsKIApAQCAtMTA5OCwyMSArMTA5OCw4IEBAIGJvb2wgSW5zcGVjdG9y
U3R5bGVTaGVldDo6ZW5zdXJlU291cmNlRGF0YSgpCiAKICAgICBSZWZQdHI8U3R5bGVTaGVldENv
bnRlbnRzPiBuZXdTdHlsZVNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoKTsKICAg
ICBDU1NQYXJzZXIgcChDU1NTdHJpY3RNb2RlKTsKLSAgICBTdHlsZVJ1bGVSYW5nZU1hcCBydWxl
UmFuZ2VNYXA7Ci0gICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2Vk
U3R5bGVTaGVldC0+dGV4dCgpLCAwLCAmcnVsZVJhbmdlTWFwKTsKLSAgICBPd25QdHI8UGFyc2Vk
U3R5bGVTaGVldDo6U291cmNlRGF0YT4gcmFuZ2VzVmVjdG9yKGFkb3B0UHRyKG5ldyBQYXJzZWRT
dHlsZVNoZWV0OjpTb3VyY2VEYXRhKSk7Ci0KLSAgICBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4gcnVs
ZXM7Ci0gICAgUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3QoQ1NT
U3R5bGVTaGVldDo6Y3JlYXRlKG5ld1N0eWxlU2hlZXQpLmdldCgpKTsKLSAgICBjb2xsZWN0Rmxh
dFJ1bGVzKHJ1bGVMaXN0LCAmcnVsZXMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUg
PSBydWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlUmFuZ2VN
YXA6Oml0ZXJhdG9yIGl0ID0gcnVsZVJhbmdlTWFwLmZpbmQocnVsZXMuYXQoaSktPnN0eWxlUnVs
ZSgpKTsKLSAgICAgICAgaWYgKGl0ICE9IHJ1bGVSYW5nZU1hcC5lbmQoKSkgewotICAgICAgICAg
ICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhpdC0+c2Vjb25kLmdldCgpLCBtX3BhcnNlZFN0
eWxlU2hlZXQtPnRleHQoKSk7Ci0gICAgICAgICAgICByYW5nZXNWZWN0b3ItPmFwcGVuZChpdC0+
c2Vjb25kKTsKLSAgICAgICAgfQotICAgIH0KLQorICAgIE93blB0cjxSdWxlU291cmNlRGF0YUxp
c3Q+IHJhbmdlc1ZlY3RvcihhZG9wdFB0cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkpKTsKKyAg
ICBwLnBhcnNlU2hlZXQobmV3U3R5bGVTaGVldC5nZXQoKSwgbV9wYXJzZWRTdHlsZVNoZWV0LT50
ZXh0KCksIDAsIHJhbmdlc1ZlY3Rvci5nZXQoKSk7CiAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5z
ZXRTb3VyY2VEYXRhKHJhbmdlc1ZlY3Rvci5yZWxlYXNlKCkpOwogICAgIHJldHVybiBtX3BhcnNl
ZFN0eWxlU2hlZXQtPmhhc1NvdXJjZURhdGEoKTsKIH0KQEAgLTEyNTMsNTEgKzEyNDAsNiBAQCBQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiA+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OgogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQog
Ci12b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NT
UnVsZVNvdXJjZURhdGEqIHJ1bGVEYXRhLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRUZXh0KQot
ewotICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBydWxl
RGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7Ci0gICAgdW5zaWduZWQgc2l6ZSA9
IHByb3BlcnR5RGF0YS5zaXplKCk7Ci0gICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB1bnNpZ25lZCBzdHlsZVN0YXJ0ID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5
bGVCb2R5UmFuZ2Uuc3RhcnQ7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHlsZVNo
ZWV0VGV4dC5jaGFyYWN0ZXJzKCk7Ci0gICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKiBuZXh0RGF0
YSA9ICYocHJvcGVydHlEYXRhLmF0KDApKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogY3VycmVudERhdGEg
PSBuZXh0RGF0YTsKLSAgICAgICAgbmV4dERhdGEgPSBpIDwgc2l6ZSAtIDEgPyAmKHByb3BlcnR5
RGF0YS5hdChpICsgMSkpIDogMDsKLQotICAgICAgICBpZiAoY3VycmVudERhdGEtPnBhcnNlZE9r
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjdXJyZW50RGF0YS0+cmFuZ2Uu
ZW5kID4gMCAmJiBjaGFyYWN0ZXJzW3N0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2UuZW5k
IC0gMV0gPT0gJzsnKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdW5zaWduZWQg
cHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7Ci0gICAgICAgIGlmICghbmV4dERhdGEpCi0gICAgICAg
ICAgICBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEt
PnN0eWxlQm9keVJhbmdlLmVuZCAtIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByb3Bl
cnR5RW5kSW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIG5leHREYXRhLT5yYW5nZS5zdGFydCAt
IDE7Ci0KLSAgICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJ
blN0eWxlU2hlZXRdKSkKLSAgICAgICAgICAgIC0tcHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7Ci0K
LSAgICAgICAgLy8gcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgcG9pbnRzIGF0IHRoZSBsYXN0IHBy
b3BlcnR5IHRleHQgY2hhcmFjdGVyLgotICAgICAgICB1bnNpZ25lZCBuZXdQcm9wZXJ0eUVuZCA9
IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gc3R5bGVTdGFydCArIDE7IC8vIEV4Y2x1c2l2ZSBv
ZiB0aGUgbGFzdCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KLSAgICAgICAgaWYgKGN1cnJlbnRE
YXRhLT5yYW5nZS5lbmQgIT0gbmV3UHJvcGVydHlFbmQpIHsKLSAgICAgICAgICAgIGN1cnJlbnRE
YXRhLT5yYW5nZS5lbmQgPSBuZXdQcm9wZXJ0eUVuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHZh
bHVlU3RhcnRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLnN0
YXJ0ICsgY3VycmVudERhdGEtPm5hbWUubGVuZ3RoKCk7Ci0gICAgICAgICAgICB3aGlsZSAodmFs
dWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIGNoYXJhY3Rl
cnNbdmFsdWVTdGFydEluU3R5bGVTaGVldF0gIT0gJzonKQotICAgICAgICAgICAgICAgICsrdmFs
dWVTdGFydEluU3R5bGVTaGVldDsKLSAgICAgICAgICAgIGlmICh2YWx1ZVN0YXJ0SW5TdHlsZVNo
ZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQpCi0gICAgICAgICAgICAgICAgKyt2YWx1ZVN0
YXJ0SW5TdHlsZVNoZWV0OyAvLyBTaGlmdCBwYXN0IHRoZSAnOicuCi0gICAgICAgICAgICB3aGls
ZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIGlz
SFRNTFNwYWNlKGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVldF0pKQotICAgICAgICAg
ICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8g
ZXhjbHVkZSB0aGUgdHJhaWxpbmcgJzsnIGZyb20gdGhlIHByb3BlcnR5IHZhbHVlLgotICAgICAg
ICAgICAgY3VycmVudERhdGEtPnZhbHVlID0gc3R5bGVTaGVldFRleHQuc3Vic3RyaW5nKHZhbHVl
U3RhcnRJblN0eWxlU2hlZXQsIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gdmFsdWVTdGFydElu
U3R5bGVTaGVldCArIChjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHlsZVNoZWV0XSA9PSAnOycg
PyAwIDogMSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmNvbGxlY3RGbGF0UnVsZXMoUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3QsIFZl
Y3RvcjxDU1NTdHlsZVJ1bGUqPiogcmVzdWx0KQogewogICAgIGlmICghcnVsZUxpc3QpCkBAIC0x
NDIzLDcgKzEzNjUsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6
Z2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMoUmVmUHRyPENTU1N0eWxlUwogCiAgICAgUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IHRlbXBEZWNsYXJhdGlvbiA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0
ZSgpOwogICAgIENTU1BhcnNlciBwKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgcC5wYXJz
ZURlY2xhcmF0aW9uKHRlbXBEZWNsYXJhdGlvbi5nZXQoKSwgbV9zdHlsZVRleHQsIHJlc3VsdCwg
bV9lbGVtZW50LT5kb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+Y29udGVudHMoKSk7CisgICAg
cC5wYXJzZURlY2xhcmF0aW9uKHRlbXBEZWNsYXJhdGlvbi5nZXQoKSwgbV9zdHlsZVRleHQsICpy
ZXN1bHQsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmNvbnRlbnRzKCkp
OwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCAwM2NhYjY3N2QyMjQzYzdkNWM0NjUwMzA0MjgxZGQ2
OTJjMTdjOTg3Li41NTU1NmFiZGNiMWU3OTkwNzhlOWNkNzI2MWVjYWIwZjFiMWEyNzhiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTU5
LDcgKzU5LDEwIEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBJbnNwZWN0
b3JDU1NJZCB7CiBwdWJsaWM6Ci0gICAgSW5zcGVjdG9yQ1NTSWQoKSB7IH0KKyAgICBJbnNwZWN0
b3JDU1NJZCgpCisgICAgICAgIDogbV9vcmRpbmFsKDApCisgICAgeworICAgIH0KIAogICAgIGV4
cGxpY2l0IEluc3BlY3RvckNTU0lkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
IHsKQEAgLTEwMiw2ICsxMDUsOCBAQCBwcml2YXRlOgogCiBzdHJ1Y3QgSW5zcGVjdG9yU3R5bGVQ
cm9wZXJ0eSB7CiAgICAgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSgpCisgICAgICAgIDogaGFzU291
cmNlKGZhbHNlKQorICAgICAgICAsIGRpc2FibGVkKGZhbHNlKQogICAgIHsKICAgICB9CiAKQEAg
LTIxOSw3ICsyMjQsNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJ
bnNwZWN0b3JTdHlsZTsKIAotICAgIHN0YXRpYyB2b2lkIGZpeFVucGFyc2VkUHJvcGVydHlSYW5n
ZXMoQ1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVEYXRhLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRU
ZXh0KTsKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVs
ZUxpc3Q+LCBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4qIHJlc3VsdCk7CiAgICAgYm9vbCBlbnN1cmVU
ZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1cmVTb3VyY2VEYXRhKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146693</attachid>
            <date>2012-06-09 01:17:02 -0700</date>
            <delta_ts>2012-06-15 09:31:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88646-20120609121701.patch</filename>
            <type>text/plain</type>
            <size>27290</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWFkYjQzMTNiZjBiYWZh
NTY3MjA2ZmRhYWM4Y2ZmZjQzN2U5YjY3Ny4uN2EzMDJhYjhhNmNjNjAyNzM4NGE0ZmRjZWEwYzIy
MjNlMzExNmIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA2LTA4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCkgc2hvdWxkIHByb3ZpZGUgcmVhZHktdG8tdXNl
IHNvdXJjZSBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04ODY0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgY2hhbmdlIG1vdmVzIHRoZSBwb3N0LXByb2Nlc3Npbmcgc3RlcCBmcm9tIEluc3Bl
Y3RvclN0eWxlU2hlZXQgaW50byBDU1NQYXJzZXIsIHNvIHRoYXQKKyAgICAgICAgQ1NTUGFyc2Vy
OjpwYXJzZVNoZWV0KCkgd2lsbCByZXR1cm4gYSByZWFkeS10by11c2UgbGlzdCB3aXRoIHN0eWxl
IHJ1bGUgc291cmNlIGNvZGUgZGF0YS4KKyAgICAgICAgQWxzbywgdW5pdmVyc2FsIGRhdGEgc3Ry
dWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgd2hpY2ggYWxsb3cgZm9yIHRoZSBmdWxsIHJ1bGUgc291
cmNlIGRhdGEgdHJlZSBidWlsZGluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIHRoaXMg
aXMgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOiBVc2UgdW5p
dmVyc2FsIGRhdGEgc3RydWN0dXJlcywgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGJ1aWxkaW5nIHRo
ZSBmdWxsIHJ1bGUgdHJlZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Q1NTUGFyc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c2V0dXBQYXJzZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoZWV0KTogUmV0dXJuIHJlYWR5LXRvLXVzZSBzb3Vy
Y2UgY29kZSBkYXRhIGVudHJpZXMgcmF0aGVyIHRoYW4gYW4gaW50ZXJtZWRpYXRlIHN0cnVjdHVy
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmFkZE5ld1J1bGVUb1NvdXJjZVRyZWUpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBvcFJ1bGVEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyk6IE1vdmVkIGlu
IGZyb20gSW5zcGVjdG9yU3R5bGVTaGVldC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
bWFya1NlbGVjdG9yTGlzdFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFy
a1NlbGVjdG9yTGlzdEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtSdWxl
Qm9keVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKToKKyAgICAg
ICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChDU1NQYXJzZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpyZXNldFByb3BlcnR5UmFuZ2UpOiBSZW5hbWVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjppc0V4dHJhY3RpbmdTb3VyY2VEYXRhKTogQSBjb252ZW5pZW5j
ZSBjaGVjay4KKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmg6IEludHJvZHVj
ZSB0aGUgUnVsZVNvdXJjZURhdGFMaXN0IHR5cGVkZWYuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6IE1ha2UgdXNlIG9mIFJ1
bGVTb3VyY2VEYXRhTGlzdCBhbmQgZm9sbG93IHRoZSBDU1NQYXJzZXI6OnBhcnNlKigpIEFQSSBj
aGFuZ2VzLgorICAgICAgICAoUGFyc2VkU3R5bGVTaGVldDo6c291cmNlRGF0YSk6CisgICAgICAg
IChQYXJzZWRTdHlsZVNoZWV0KToKKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnNldFNvdXJj
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlU291
cmNlRGF0YSk6IFJlbW92ZSBzb3VyY2UgZGF0YSBwb3N0cHJvY2Vzc2luZywgZm9sbG93IHRoZSBu
ZXcgcGFyc2VTaGVldCgpIEFQSS4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6Okluc3BlY3RvckNTU0lk
KTogRHJpdmUtYnk6IHVuaW5pdGlhbGl6ZWQgZmllbGQgZml4LgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eTo6SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSk6IERpdHRvLgor
ICAgICAgICAoSW5zcGVjdG9yU3R5bGVTaGVldCk6CisKIDIwMTItMDYtMDggIEJyeWFuIE1jUXVh
ZGUgIDxibWNxdWFkZUBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFubm90
YXRlIHRpbWVsaW5lIHJlY29yZHMgd2l0aCBhIGZyYW1lIGlkZW50aWZpZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAKaW5kZXggOTczMzQyZDA5MDgwOTk3OWZiOTBlNjAxOTRlNmI5Y2Y2NjYxODAx
My4uMzNjNzQ3MTA2YmU4NDRlZTYzMDI5NWQ3MDc0ZTNlNmUyZjcxZGY2MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAKQEAgLTIzNSwxMiArMjM1LDEyIEBAIENTU1BhcnNlcjo6Q1NTUGFyc2Vy
KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiAgICAgLCBtX2hhc0ZvbnRGYWNlT25s
eVZhbHVlcyhmYWxzZSkKICAgICAsIG1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZShmYWxz
ZSkKICAgICAsIG1fZGVmYXVsdE5hbWVzcGFjZShzdGFyQXRvbSkKKyAgICAsIG1fcGFyc2VkVGV4
dFByZWZpeExlbmd0aCgwKQogICAgICwgbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24oZmFsc2Up
CiAgICAgLCBtX3NlbGVjdG9yTGlzdFJhbmdlKDAsIDApCiAgICAgLCBtX3J1bGVCb2R5UmFuZ2Uo
MCwgMCkKICAgICAsIG1fcHJvcGVydHlSYW5nZShVSU5UX01BWCwgVUlOVF9NQVgpCi0gICAgLCBt
X3J1bGVSYW5nZU1hcCgwKQotICAgICwgbV9jdXJyZW50UnVsZURhdGEoMCkKKyAgICAsIG1fcnVs
ZVNvdXJjZURhdGFSZXN1bHQoMCkKICAgICAsIG1fcGFyc2luZ01vZGUoTm9ybWFsTW9kZSkKICAg
ICAsIG1fY3VycmVudENoYXJhY3RlcigwKQogICAgICwgbV90b2tlblN0YXJ0KDApCkBAIC0yODUs
MTUgKzI4NSwxNiBAQCB2b2lkIENTU1BhcnNlclN0cmluZzo6bG93ZXIoKQogCiB2b2lkIENTU1Bh
cnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCBjb25zdCBTdHJpbmcmIHN0cmlu
ZywgY29uc3QgY2hhciogc3VmZml4KQogewotICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3Ro
KCkgKyBzdHJsZW4ocHJlZml4KSArIHN0cmxlbihzdWZmaXgpICsgMTsKKyAgICBtX3BhcnNlZFRl
eHRQcmVmaXhMZW5ndGggPSBzdHJsZW4ocHJlZml4KTsKKyAgICBpbnQgbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aCgpICsgbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoICsgc3RybGVuKHN1ZmZpeCkgKyAx
OwogCiAgICAgbV9kYXRhU3RhcnQgPSBhZG9wdEFycmF5UHRyKG5ldyBVQ2hhcltsZW5ndGhdKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RybGVuKHByZWZpeCk7IGkrKykKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoOyBpKyspCiAg
ICAgICAgIG1fZGF0YVN0YXJ0W2ldID0gcHJlZml4W2ldOwogCi0gICAgbWVtY3B5KG1fZGF0YVN0
YXJ0LmdldCgpICsgc3RybGVuKHByZWZpeCksIHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5s
ZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOworICAgIG1lbWNweShtX2RhdGFTdGFydC5nZXQoKSAr
IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aCwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAKLSAgICB1bnNpZ25lZCBzdGFydCA9IHN0cmxlbihw
cmVmaXgpICsgc3RyaW5nLmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHN0YXJ0ID0gbV9wYXJzZWRU
ZXh0UHJlZml4TGVuZ3RoICsgc3RyaW5nLmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIGVuZCA9IHN0
YXJ0ICsgc3RybGVuKHN1ZmZpeCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBl
bmQ7IGkrKykKICAgICAgICAgbV9kYXRhU3RhcnRbaV0gPSBzdWZmaXhbaSAtIHN0YXJ0XTsKQEAg
LTMwNCwyMSArMzA1LDE5IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFy
KiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyCiAgICAgcmVzZXRSdWxl
Qm9keU1hcmtzKCk7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KFN0eWxlU2hlZXRD
b250ZW50cyogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQgc3RhcnRMaW5lTnVtYmVy
LCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFwKQordm9pZCBDU1NQYXJzZXI6OnBhcnNl
U2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGlu
dCBzdGFydExpbmVOdW1iZXIsIFJ1bGVTb3VyY2VEYXRhTGlzdCogcnVsZVNvdXJjZURhdGFSZXN1
bHQpCiB7CiAgICAgc2V0U3R5bGVTaGVldChzaGVldCk7CiAgICAgbV9kZWZhdWx0TmFtZXNwYWNl
ID0gc3RhckF0b207IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4KLSAgICBtX3J1bGVS
YW5nZU1hcCA9IHJ1bGVSYW5nZU1hcDsKLSAgICBpZiAocnVsZVJhbmdlTWFwKSB7Ci0gICAgICAg
IG1fY3VycmVudFJ1bGVEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgICAg
ICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRh
OjpjcmVhdGUoKTsKLSAgICB9CisgICAgaWYgKHJ1bGVTb3VyY2VEYXRhUmVzdWx0KQorICAgICAg
ICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrID0gYWRvcHRQdHIobmV3IFJ1bGVTb3VyY2VEYXRhTGlz
dCgpKTsKKyAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0ID0gcnVsZVNvdXJjZURhdGFSZXN1bHQ7
CiAKICAgICBtX2xpbmVOdW1iZXIgPSBzdGFydExpbmVOdW1iZXI7CiAgICAgc2V0dXBQYXJzZXIo
IiIsIHN0cmluZywgIiIpOwogICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgbV9ydWxlUmFuZ2VN
YXAgPSAwOwotICAgIG1fY3VycmVudFJ1bGVEYXRhID0gMDsKKyAgICBtX2N1cnJlbnRSdWxlRGF0
YVN0YWNrLmNsZWFyKCk7CisgICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdCA9IDA7CiAgICAgbV9y
dWxlID0gMDsKIH0KIApAQCAtMTExOSwxNiArMTExOCwxOSBAQCB2b2lkIENTU1BhcnNlcjo6cGFy
c2VTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rv
ckxpcwogICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvciA9IDA7CiB9CiAKLWJvb2wg
Q1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9u
LCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHN0eWxl
U291cmNlRGF0YSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKK2Jvb2wg
Q1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9u
LCBjb25zdCBTdHJpbmcmIHN0cmluZywgUGFzc1JlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHBy
cFN0eWxlU291cmNlRGF0YSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkK
IHsKICAgICAvLyBMZW5ndGggb2YgdGhlICJALXdlYmtpdC1kZWNsc3siIHByZWZpeC4KICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgcHJlZml4TGVuZ3RoID0gMTU7CiAKICAgICBzZXRTdHlsZVNo
ZWV0KGNvbnRleHRTdHlsZVNoZWV0KTsKIAorICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+
IHN0eWxlU291cmNlRGF0YSA9IHBycFN0eWxlU291cmNlRGF0YTsKICAgICBpZiAoc3R5bGVTb3Vy
Y2VEYXRhKSB7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6
OmNyZWF0ZSgpOwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0g
Q1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgbV9jdXJyZW50UnVsZURhdGFT
dGFjayA9IGFkb3B0UHRyKG5ldyBSdWxlU291cmNlRGF0YUxpc3QoKSk7CisgICAgICAgIFJlZlB0
cjxDU1NSdWxlU291cmNlRGF0YT4gZGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsK
KyAgICAgICAgZGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gc3R5bGVTb3VyY2VEYXRhOworICAgICAg
ICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5hcHBlbmQoZGF0YSk7CiAgICAgICAgIG1faW5TdHls
ZVJ1bGVPckRlY2xhcmF0aW9uID0gdHJ1ZTsKICAgICB9CiAKQEAgLTExNDUsMjAgKzExNDcsMjIg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogZGVj
bGFyYXRpb24sIGNvbnN0IFN0cmluZyYgc3QKICAgICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAg
ICAgfQogCi0gICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhKSB7Ci0gICAgICAgIG1fY3VycmVudFJ1
bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0ID0gMDsKLSAgICAg
ICAgbV9jdXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5k
ID0gc3RyaW5nLmxlbmd0aCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJj
ZURhdGE+OjppdGVyYXRvciBpdCA9IG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEt
PnByb3BlcnR5RGF0YS5iZWdpbigpLCBlbmRJdCA9IG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNv
dXJjZURhdGEtPnByb3BlcnR5RGF0YS5lbmQoKTsgaXQgIT0gZW5kSXQ7ICsraXQpIHsKLSAgICAg
ICAgICAgICgqaXQpLnJhbmdlLnN0YXJ0IC09IHByZWZpeExlbmd0aDsKLSAgICAgICAgICAgICgq
aXQpLnJhbmdlLmVuZCAtPSBwcmVmaXhMZW5ndGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBp
ZiAoc3R5bGVTb3VyY2VEYXRhKSB7Ci0gICAgICAgICpzdHlsZVNvdXJjZURhdGEgPSBtX2N1cnJl
bnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLnJlbGVhc2UoKTsKLSAgICAgICAgbV9jdXJyZW50
UnVsZURhdGEgPSAwOworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlz
RW1wdHkoKSk7CisgICAgICAgIENTU1J1bGVTb3VyY2VEYXRhKiBydWxlRGF0YSA9IG1fY3VycmVu
dFJ1bGVEYXRhU3RhY2stPmxhc3QoKS5nZXQoKTsKKyAgICAgICAgcnVsZURhdGEtPnN0eWxlU291
cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQgPSAwOworICAgICAgICBydWxlRGF0YS0+c3R5
bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQgPSBzdHJpbmcubGVuZ3RoKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+
cHJvcGVydHlEYXRhLnNpemUoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgQ1NTUHJv
cGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eURhdGEgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5wcm9wZXJ0eURhdGEuYXQoaSk7CisgICAgICAgICAgICBwcm9wZXJ0eURhdGEucmFuZ2Uuc3Rh
cnQgLT0gcHJlZml4TGVuZ3RoOworICAgICAgICAgICAgcHJvcGVydHlEYXRhLnJhbmdlLmVuZCAt
PSBwcmVmaXhMZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJh
bmdlcyhydWxlRGF0YSk7CisKKyAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay5jbGVhcigp
OwogICAgICAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IGZhbHNlOwogICAgIH0KKwog
ICAgIHJldHVybiBvazsKIH0KIApAQCAtOTExNCw2ICs5MTE4LDI3IEBAIENTU1BhcnNlcjo6UnVs
ZUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRlUnVsZUxpc3QoKQogICAgIHJldHVybiBsaXN0UHRyOwog
fQogCit2b2lkIENTU1BhcnNlcjo6YWRkTmV3UnVsZVRvU291cmNlVHJlZShQYXNzUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiBydWxlKQoreworICAgIC8vIFByZWNvbmRpdGlvbjogKGlzRXh0cmFj
dGluZ1NvdXJjZURhdGEoKSkuCisgICAgaWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhpcyB0ZW1wb3JhcmlseSBidWlsZHMgYSBm
bGF0IHN0eWxlIHJ1bGUgZGF0YSBsaXN0LCB0byBhdm9pZCB0aGUgY2xpZW50IGNvZGUgYnJlYWth
Z2UuCisgICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdC0+YXBwZW5kKHJ1bGUpOworfQorCitQYXNz
UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBDU1NQYXJzZXI6OnBvcFJ1bGVEYXRhKCkKK3sKKyAg
ICBpZiAoIW1fcnVsZVNvdXJjZURhdGFSZXN1bHQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
QVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpOworICAgIFJlZlB0cjxD
U1NSdWxlU291cmNlRGF0YT4gZGF0YSA9IG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKTsK
KyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIGRh
dGEucmVsZWFzZSgpOworfQorCiBTdHlsZVJ1bGVLZXlmcmFtZXMqIENTU1BhcnNlcjo6Y3JlYXRl
S2V5ZnJhbWVzUnVsZSgpCiB7CiAgICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gbV9hbGxvd05hbWVz
cGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwpAQCAtOTEzNiwxOCArOTE2MSwxOSBAQCBTdHlsZVJ1
bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNl
clNlbGVjdG9yPiA+KiBzZQogICAgICAgICBydWxlLT5zZXRQcm9wZXJ0aWVzKGNyZWF0ZVN0eWxl
UHJvcGVydHlTZXQoKSk7CiAgICAgICAgIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CiAgICAgICAgIG1f
cGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKLSAgICAgICAgaWYgKG1fcnVsZVJh
bmdlTWFwKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50UnVsZURhdGEpOwotICAgICAg
ICAgICAgbV9jdXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Ug
PSBtX3J1bGVCb2R5UmFuZ2U7Ci0gICAgICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c2VsZWN0
b3JMaXN0UmFuZ2UgPSBtX3NlbGVjdG9yTGlzdFJhbmdlOwotICAgICAgICAgICAgbV9ydWxlUmFu
Z2VNYXAtPnNldChyZXN1bHQsIG1fY3VycmVudFJ1bGVEYXRhLnJlbGVhc2UoKSk7Ci0gICAgICAg
ICAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKLSAg
ICAgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEgPSBDU1NTdHlsZVNv
dXJjZURhdGE6OmNyZWF0ZSgpOworICAgICAgICBpZiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgp
KSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0
YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgICAgICBjdXJyZW50UnVsZURhdGEtPnN0eWxlU291
cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2U7CisgICAgICAgICAgICBj
dXJyZW50UnVsZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlID0gbV9zZWxlY3Rvckxpc3RSYW5nZTsK
KyAgICAgICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoY3VycmVudFJ1bGVEYXRhLmdl
dCgpKTsKKyAgICAgICAgICAgIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoY3VycmVudFJ1bGVEYXRh
LnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IGZh
bHNlOwogICAgICAgICB9CiAgICAgfQotICAgIHJlc2V0U2VsZWN0b3JMaXN0TWFya3MoKTsKLSAg
ICByZXNldFJ1bGVCb2R5TWFya3MoKTsKKyAgICBpZiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgp
KSB7CisgICAgICAgIHJlc2V0U2VsZWN0b3JMaXN0TWFya3MoKTsKKyAgICAgICAgcmVzZXRSdWxl
Qm9keU1hcmtzKCk7CisgICAgfQogICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC05MzUzLDE0ICs5Mzc5LDYxIEBAIHZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVM
YXN0TWVkaWFMaW5lKE1lZGlhUXVlcnlTZXQqIG1lZGlhKQogICAgIG1lZGlhLT5zZXRMYXN0TGlu
ZShtX2xpbmVOdW1iZXIpOwogfQogCit2b2lkIENTU1BhcnNlcjo6Zml4VW5wYXJzZWRQcm9wZXJ0
eVJhbmdlcyhDU1NSdWxlU291cmNlRGF0YSogcnVsZURhdGEpCit7CisgICAgVmVjdG9yPENTU1By
b3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURh
dGEtPnByb3BlcnR5RGF0YTsKKyAgICB1bnNpZ25lZCBzaXplID0gcHJvcGVydHlEYXRhLnNpemUo
KTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHN0eWxl
U3RhcnQgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydDsK
KyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG1fZGF0YVN0YXJ0LmdldCgpICsgbV9wYXJz
ZWRUZXh0UHJlZml4TGVuZ3RoOworICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogbmV4dERhdGEg
PSAmKHByb3BlcnR5RGF0YS5hdCgwKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEqIGN1cnJlbnREYXRhID0g
bmV4dERhdGE7CisgICAgICAgIG5leHREYXRhID0gaSA8IHNpemUgLSAxID8gJihwcm9wZXJ0eURh
dGEuYXQoaSArIDEpKSA6IDA7CisKKyAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5wYXJzZWRPaykK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVu
ZCA+IDAgJiYgY2hhcmFjdGVyc1tzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLmVuZCAt
IDFdID09ICc7JykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHVuc2lnbmVkIHBy
b3BlcnR5RW5kSW5TdHlsZVNoZWV0OworICAgICAgICBpZiAoIW5leHREYXRhKQorICAgICAgICAg
ICAgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5z
dHlsZUJvZHlSYW5nZS5lbmQgLSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm9wZXJ0
eUVuZEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBuZXh0RGF0YS0+cmFuZ2Uuc3RhcnQgLSAx
OworCisgICAgICAgIHdoaWxlIChpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5T
dHlsZVNoZWV0XSkpCisgICAgICAgICAgICAtLXByb3BlcnR5RW5kSW5TdHlsZVNoZWV0OworCisg
ICAgICAgIC8vIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IHBvaW50cyBhdCB0aGUgbGFzdCBwcm9w
ZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgdW5zaWduZWQgbmV3UHJvcGVydHlFbmQgPSBw
cm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHN0eWxlU3RhcnQgKyAxOyAvLyBFeGNsdXNpdmUgb2Yg
dGhlIGxhc3QgcHJvcGVydHkgdGV4dCBjaGFyYWN0ZXIuCisgICAgICAgIGlmIChjdXJyZW50RGF0
YS0+cmFuZ2UuZW5kICE9IG5ld1Byb3BlcnR5RW5kKSB7CisgICAgICAgICAgICBjdXJyZW50RGF0
YS0+cmFuZ2UuZW5kID0gbmV3UHJvcGVydHlFbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCB2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIGN1cnJlbnREYXRhLT5yYW5nZS5zdGFy
dCArIGN1cnJlbnREYXRhLT5uYW1lLmxlbmd0aCgpOworICAgICAgICAgICAgd2hpbGUgKHZhbHVl
U3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBjaGFyYWN0ZXJz
W3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdICE9ICc6JykKKyAgICAgICAgICAgICAgICArK3ZhbHVl
U3RhcnRJblN0eWxlU2hlZXQ7CisgICAgICAgICAgICBpZiAodmFsdWVTdGFydEluU3R5bGVTaGVl
dCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0KQorICAgICAgICAgICAgICAgICsrdmFsdWVTdGFy
dEluU3R5bGVTaGVldDsgLy8gU2hpZnQgcGFzdCB0aGUgJzonLgorICAgICAgICAgICAgd2hpbGUg
KHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBpc0hU
TUxTcGFjZShjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdKSkKKyAgICAgICAgICAg
ICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7CisgICAgICAgICAgICAvLyBOZWVkIHRvIGV4
Y2x1ZGUgdGhlIHRyYWlsaW5nICc7JyBmcm9tIHRoZSBwcm9wZXJ0eSB2YWx1ZS4KKyAgICAgICAg
ICAgIGN1cnJlbnREYXRhLT52YWx1ZSA9IFN0cmluZyhjaGFyYWN0ZXJzICsgdmFsdWVTdGFydElu
U3R5bGVTaGVldCwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgLSB2YWx1ZVN0YXJ0SW5TdHlsZVNo
ZWV0ICsgKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0eWxlU2hlZXRdID09ICc7JyA/IDAgOiAx
KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JM
aXN0U3RhcnQoKQogeworICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAg
ICByZXR1cm47CiAgICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCA9IG1fdG9rZW5TdGFydCAt
IG1fZGF0YVN0YXJ0LmdldCgpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlz
dEVuZCgpCiB7Ci0gICAgaWYgKCFtX2N1cnJlbnRSdWxlRGF0YSkKKyAgICBpZiAoIWlzRXh0cmFj
dGluZ1NvdXJjZURhdGEoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFVDaGFyKiBsaXN0RW5kID0g
bV90b2tlblN0YXJ0OwogICAgIHdoaWxlIChsaXN0RW5kID4gbV9kYXRhU3RhcnQuZ2V0KCkgKyAx
KSB7CkBAIC05MzcwLDEwICs5NDQzLDE1IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JM
aXN0RW5kKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBtX3NlbGVjdG9yTGlzdFJh
bmdlLmVuZCA9IGxpc3RFbmQgLSBtX2RhdGFTdGFydC5nZXQoKTsKKyAgICBSZWZQdHI8Q1NTUnVs
ZVNvdXJjZURhdGE+IGRhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CisgICAgZGF0
YS0+c3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICBt
X2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5hcHBlbmQoZGF0YSk7CiB9CiAKIHZvaWQgQ1NTUGFyc2Vy
OjptYXJrUnVsZUJvZHlTdGFydCgpCiB7CisgICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRh
KCkpCisgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX3Rva2VuU3RhcnQg
LSBtX2RhdGFTdGFydC5nZXQoKTsKICAgICBpZiAoKm1fdG9rZW5TdGFydCA9PSAneycpCiAgICAg
ICAgICsrb2Zmc2V0OyAvLyBTa2lwIHRoZSBydWxlIGJvZHkgb3BlbmluZyBicmFjZS4KQEAgLTkz
ODQsNiArOTQ2Miw4IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCiAKIHZv
aWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQogeworICAgIGlmICghaXNFeHRyYWN0aW5n
U291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90
b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiAgICAgaWYgKG9mZnNldCA+IG1fcnVsZUJv
ZHlSYW5nZS5lbmQpCiAgICAgICAgIG1fcnVsZUJvZHlSYW5nZS5lbmQgPSBvZmZzZXQ7CkBAIC05
NDAwLDExICs5NDgwLDEyIEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBp
c0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQpCiB7CiAgICAgaWYgKCFtX2lu
U3R5bGVSdWxlT3JEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuOworCiAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiAgICAgaWYgKCptX3Rv
a2VuU3RhcnQgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWljb2xvbiBpbnRvIHRoZSBwcm9wZXJ0eSB0
ZXh0LgogICAgICAgICArK29mZnNldDsKICAgICBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gb2Zmc2V0
OwotICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0gVUlOVF9NQVggJiYgbV9jdXJyZW50
UnVsZURhdGEpIHsKKyAgICBpZiAobV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ICE9IFVJTlRfTUFYICYm
ICFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVGhpcyBz
dHVmZiBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gdGhlIHN0eWxlIGRhdGEgcmV0cmlldmFsIGlzIHJl
cXVlc3RlZCBieSBjbGllbnQuCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHN0YXJ0ID0gbV9wcm9w
ZXJ0eVJhbmdlLnN0YXJ0OwogICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmQgPSBtX3Byb3BlcnR5
UmFuZ2UuZW5kOwpAQCAtOTQxOCwxMCArOTQ5OSwxMCBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1By
b3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQog
ICAgICAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5U3RyaW5nLmxlZnQoY29sb25JbmRleCkuc3Ry
aXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5U3RyaW5nLnN1
YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3RoKCkpLnN0cmlwV2hp
dGVTcGFjZSgpOwogICAgICAgICAvLyBUaGUgcHJvcGVydHkgcmFuZ2UgaXMgcmVsYXRpdmUgdG8g
dGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGEt
PnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFwcGVuZCgKKyAgICAgICAgbV9jdXJyZW50
UnVsZURhdGFTdGFjay0+bGFzdCgpLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5hcHBl
bmQoCiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1w
b3J0YW50Rm91bmQsIGlzUHJvcGVydHlQYXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gbV9ydWxl
Qm9keVJhbmdlLnN0YXJ0LCBlbmQgLSBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CiAgICAgfQot
ICAgIHJlc2V0UHJvcGVydHlNYXJrcygpOworICAgIHJlc2V0UHJvcGVydHlSYW5nZSgpOwogfQog
CiBzdGF0aWMgQ1NTUHJvcGVydHlJRCBjc3NQcm9wZXJ0eUlEKGNvbnN0IFVDaGFyKiBwcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCA3YzVhNjIz
Nzc0OGZmMjdjOTU1ZjczYTViMzQwMDViMGM4ZTI3MzYxLi5kYWNiM2QwY2I1YTYyMTk0OTY4ZjFk
MGM0OWFjYTdlNWVkNjVlNTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC03MCw3ICs3MCw3
IEBAIHB1YmxpYzoKIAogICAgIH5DU1NQYXJzZXIoKTsKIAotICAgIHZvaWQgcGFyc2VTaGVldChT
dHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmLCBpbnQgc3RhcnRMaW5lTnVtYmVyID0g
MCwgU3R5bGVSdWxlUmFuZ2VNYXAqID0gMCk7CisgICAgdm9pZCBwYXJzZVNoZWV0KFN0eWxlU2hl
ZXRDb250ZW50cyosIGNvbnN0IFN0cmluZyYsIGludCBzdGFydExpbmVOdW1iZXIgPSAwLCBSdWxl
U291cmNlRGF0YUxpc3QqID0gMCk7CiAgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBwYXJz
ZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJik7CiAgICAgUGFzc1JlZlB0
cjxTdHlsZUtleWZyYW1lPiBwYXJzZUtleWZyYW1lUnVsZShTdHlsZVNoZWV0Q29udGVudHMqLCBj
b25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlT
ZXQqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgQ1NTUGFy
c2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKik7CkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBwYXJzZVN5c3RlbUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0
cmluZyYsIERvY3VtZW50Kik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBw
YXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxpZFByaW1pdGl2ZShpbnQgaWRlbnQsIENTU1BhcnNl
clZhbHVlKik7Ci0gICAgYm9vbCBwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqLCBj
b25zdCBTdHJpbmcmLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiosIFN0eWxlU2hlZXRDb250
ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOworICAgIGJvb2wgcGFyc2VEZWNsYXJhdGlvbihTdHls
ZVByb3BlcnR5U2V0KiwgY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxDU1NTdHlsZVNvdXJjZURh
dGE+LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKICAgICBQYXNzT3du
UHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZv
aWQgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4sIGJvb2wg
aW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2UpOwpAQCAtMzEwLDIxICszMTAsMzAgQEAg
cHVibGljOgogICAgIEF0b21pY1N0cmluZyBtX2RlZmF1bHROYW1lc3BhY2U7CiAKICAgICAvLyB0
b2tlbml6ZXIgbWV0aG9kcyBhbmQgZGF0YQorICAgIHNpemVfdCBtX3BhcnNlZFRleHRQcmVmaXhM
ZW5ndGg7CiAgICAgYm9vbCBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbjsKICAgICBTb3VyY2VS
YW5nZSBtX3NlbGVjdG9yTGlzdFJhbmdlOwogICAgIFNvdXJjZVJhbmdlIG1fcnVsZUJvZHlSYW5n
ZTsKICAgICBTb3VyY2VSYW5nZSBtX3Byb3BlcnR5UmFuZ2U7Ci0gICAgU3R5bGVSdWxlUmFuZ2VN
YXAqIG1fcnVsZVJhbmdlTWFwOwotICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gbV9jdXJy
ZW50UnVsZURhdGE7CisgICAgT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gbV9jdXJyZW50UnVs
ZURhdGFTdGFjazsKKyAgICBSdWxlU291cmNlRGF0YUxpc3QqIG1fcnVsZVNvdXJjZURhdGFSZXN1
bHQ7CisKKyAgICB2b2lkIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURh
dGEqKTsKKyAgICB2b2lkIG1hcmtTdHlsZVJ1bGVIZWFkZXJTdGFydCgpOworICAgIHZvaWQgbWFy
a1J1bGVIZWFkZXJFbmQoKTsKKwogICAgIHZvaWQgbWFya1NlbGVjdG9yTGlzdFN0YXJ0KCk7CiAg
ICAgdm9pZCBtYXJrU2VsZWN0b3JMaXN0RW5kKCk7CiAgICAgdm9pZCBtYXJrUnVsZUJvZHlTdGFy
dCgpOwogICAgIHZvaWQgbWFya1J1bGVCb2R5RW5kKCk7CiAgICAgdm9pZCBtYXJrUHJvcGVydHlT
dGFydCgpOwogICAgIHZvaWQgbWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwg
Ym9vbCBpc1Byb3BlcnR5UGFyc2VkKTsKKyAgICB2b2lkIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUo
UGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4pOworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHBvcFJ1bGVEYXRhKCk7CiAgICAgdm9pZCByZXNldFNlbGVjdG9yTGlzdE1hcmtz
KCkgeyBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0gbV9zZWxlY3Rvckxpc3RSYW5nZS5lbmQg
PSAwOyB9CiAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVsZUJvZHlSYW5nZS5z
dGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9Ci0gICAgdm9pZCByZXNldFByb3BlcnR5
TWFya3MoKSB7IG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IG1fcHJvcGVydHlSYW5nZS5lbmQgPSBV
SU5UX01BWDsgfQorICAgIHZvaWQgcmVzZXRQcm9wZXJ0eVJhbmdlKCkgeyBtX3Byb3BlcnR5UmFu
Z2Uuc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gVUlOVF9NQVg7IH0KKyAgICBib29sIGlz
RXh0cmFjdGluZ1NvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiAhIW1fY3VycmVudFJ1bGVEYXRh
U3RhY2s7IH0KICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7CiAgICAgaW50IHRva2VuKCkgeyBy
ZXR1cm4gbV90b2tlbjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHlTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VE
YXRhLmgKaW5kZXggNTgwM2Y5NGIxYzJmYTc1MWU5ZTU2ZTEwMjUyY2JkYjY0MGUxNWUyNC4uYWEz
NTJmYWJmYTBmODRkOTcwMjlmZDVjMDc3ODlmMjY4ODMxNDFkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtODMsNiArODMsOSBAQCBzdHJ1Y3QgQ1NT
U3R5bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTU3R5bGVTb3VyY2VEYXRhPiB7
CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4gcHJvcGVydHlEYXRhOwogfTsKIAor
Y2xhc3MgQ1NTUnVsZVNvdXJjZURhdGE7Cit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+ID4gUnVsZVNvdXJjZURhdGFMaXN0OworCiBzdHJ1Y3QgQ1NTUnVsZVNvdXJjZURh
dGEgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NSdWxlU291cmNlRGF0YT4gewogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjcmVhdGUoKQogICAgIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCA0NDk4YWRj
MTRmNzEyMTkwNmZiMmJlNjA2OTA1YmUwMjdjNWI1MDMxLi5hNmZmMGRiZjhjMmFlY2FhNWEwZTkw
NDQ0Yjc3ODdmOGJlMzc5NjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC02MCwxOCArNjAsMTggQEAKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpBcnJh
eTsKK3VzaW5nIFdlYkNvcmU6OlJ1bGVTb3VyY2VEYXRhTGlzdDsKIAogY2xhc3MgUGFyc2VkU3R5
bGVTaGVldCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkNT
U1J1bGVTb3VyY2VEYXRhPiA+IFNvdXJjZURhdGE7CiAgICAgUGFyc2VkU3R5bGVTaGVldCgpOwog
CiAgICAgV2ViQ29yZTo6Q1NTU3R5bGVTaGVldCogY3NzU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyc2VyT3V0cHV0OyB9CiAgICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0OyB9CiAgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCk7CiAg
ICAgYm9vbCBoYXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNUZXh0OyB9Ci0gICAgU291cmNl
RGF0YSogc291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRGF0YS5nZXQoKTsgfQot
ICAgIHZvaWQgc2V0U291cmNlRGF0YShQYXNzT3duUHRyPFNvdXJjZURhdGE+IHNvdXJjZURhdGEp
OworICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCogc291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlRGF0YS5nZXQoKTsgfQorICAgIHZvaWQgc2V0U291cmNlRGF0YShQYXNzT3duUHRyPFJ1
bGVTb3VyY2VEYXRhTGlzdD4pOwogICAgIGJvb2wgaGFzU291cmNlRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlRGF0YTsgfQogICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0
YT4gcnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKQEAgLTgxLDcgKzgx
LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBtX3BhcnNlck91dHB1
dDsKICAgICBTdHJpbmcgbV90ZXh0OwogICAgIGJvb2wgbV9oYXNUZXh0OwotICAgIE93blB0cjxT
b3VyY2VEYXRhPiBtX3NvdXJjZURhdGE7CisgICAgT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4g
bV9zb3VyY2VEYXRhOwogfTsKIAogUGFyc2VkU3R5bGVTaGVldDo6UGFyc2VkU3R5bGVTaGVldCgp
CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgUGFyc2VkU3R5bGVTaGVldDo6c2V0VGV4dChjb25zdCBT
dHJpbmcmIHRleHQpCiAgICAgc2V0U291cmNlRGF0YShudWxscHRyKTsKIH0KIAotdm9pZCBQYXJz
ZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8U291cmNlRGF0YT4gc291cmNl
RGF0YSkKK3ZvaWQgUGFyc2VkU3R5bGVTaGVldDo6c2V0U291cmNlRGF0YShQYXNzT3duUHRyPFJ1
bGVTb3VyY2VEYXRhTGlzdD4gc291cmNlRGF0YSkKIHsKICAgICBtX3NvdXJjZURhdGEgPSBzb3Vy
Y2VEYXRhOwogfQpAQCAtMzE2LDcgKzMxNiw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnNldFBy
b3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVRleHQsCiAg
ICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wTXV0YWJsZVN0eWxlID0gU3R5bGVQ
cm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+
IHNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwogICAgICAgICBDU1NQ
YXJzZXIgcChDU1NTdHJpY3RNb2RlKTsKLSAgICAgICAgcC5wYXJzZURlY2xhcmF0aW9uKHRlbXBN
dXRhYmxlU3R5bGUuZ2V0KCksIHByb3BlcnR5VGV4dCArICIgIiArIGJvZ3VzUHJvcGVydHlOYW1l
ICsgIjogbm9uZSIsICZzb3VyY2VEYXRhLCBtX3N0eWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmNv
bnRlbnRzKCkpOworICAgICAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcE11dGFibGVTdHlsZS5n
ZXQoKSwgcHJvcGVydHlUZXh0ICsgIiAiICsgYm9ndXNQcm9wZXJ0eU5hbWUgKyAiOiBub25lIiwg
c291cmNlRGF0YSwgbV9zdHlsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5jb250ZW50cygpKTsKICAg
ICAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9IHNvdXJj
ZURhdGEtPnByb3BlcnR5RGF0YTsKICAgICAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHBy
b3BlcnR5RGF0YS5zaXplKCk7CiAKQEAgLTEwOTgsMjEgKzEwOTgsOCBAQCBib29sIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEoKQogCiAgICAgUmVmUHRyPFN0eWxlU2hlZXRD
b250ZW50cz4gbmV3U3R5bGVTaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCk7CiAg
ICAgQ1NTUGFyc2VyIHAoQ1NTU3RyaWN0TW9kZSk7Ci0gICAgU3R5bGVSdWxlUmFuZ2VNYXAgcnVs
ZVJhbmdlTWFwOwotICAgIHAucGFyc2VTaGVldChuZXdTdHlsZVNoZWV0LmdldCgpLCBtX3BhcnNl
ZFN0eWxlU2hlZXQtPnRleHQoKSwgMCwgJnJ1bGVSYW5nZU1hcCk7Ci0gICAgT3duUHRyPFBhcnNl
ZFN0eWxlU2hlZXQ6OlNvdXJjZURhdGE+IHJhbmdlc1ZlY3RvcihhZG9wdFB0cihuZXcgUGFyc2Vk
U3R5bGVTaGVldDo6U291cmNlRGF0YSkpOwotCi0gICAgVmVjdG9yPENTU1N0eWxlUnVsZSo+IHJ1
bGVzOwotICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3QgPSBhc0NTU1J1bGVMaXN0KENT
U1N0eWxlU2hlZXQ6OmNyZWF0ZShuZXdTdHlsZVNoZWV0KS5nZXQoKSk7Ci0gICAgY29sbGVjdEZs
YXRSdWxlcyhydWxlTGlzdCwgJnJ1bGVzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXpl
ID0gcnVsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0eWxlUnVsZVJhbmdl
TWFwOjppdGVyYXRvciBpdCA9IHJ1bGVSYW5nZU1hcC5maW5kKHJ1bGVzLmF0KGkpLT5zdHlsZVJ1
bGUoKSk7Ci0gICAgICAgIGlmIChpdCAhPSBydWxlUmFuZ2VNYXAuZW5kKCkpIHsKLSAgICAgICAg
ICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoaXQtPnNlY29uZC5nZXQoKSwgbV9wYXJzZWRT
dHlsZVNoZWV0LT50ZXh0KCkpOwotICAgICAgICAgICAgcmFuZ2VzVmVjdG9yLT5hcHBlbmQoaXQt
PnNlY29uZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KKyAgICBPd25QdHI8UnVsZVNvdXJjZURhdGFM
aXN0PiByYW5nZXNWZWN0b3IoYWRvcHRQdHIobmV3IFJ1bGVTb3VyY2VEYXRhTGlzdCgpKSk7Cisg
ICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+
dGV4dCgpLCAwLCByYW5nZXNWZWN0b3IuZ2V0KCkpOwogICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+
c2V0U291cmNlRGF0YShyYW5nZXNWZWN0b3IucmVsZWFzZSgpKTsKICAgICByZXR1cm4gbV9wYXJz
ZWRTdHlsZVNoZWV0LT5oYXNTb3VyY2VEYXRhKCk7CiB9CkBAIC0xMjUzLDUxICsxMjQwLDYgQEAg
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4g
PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjoKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKENT
U1J1bGVTb3VyY2VEYXRhKiBydWxlRGF0YSwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0VGV4dCkK
LXsKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gcnVs
ZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwotICAgIHVuc2lnbmVkIHNpemUg
PSBwcm9wZXJ0eURhdGEuc2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdW5zaWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0
eWxlQm9keVJhbmdlLnN0YXJ0OwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3R5bGVT
aGVldFRleHQuY2hhcmFjdGVycygpOwotICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogbmV4dERh
dGEgPSAmKHByb3BlcnR5RGF0YS5hdCgwKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEqIGN1cnJlbnREYXRh
ID0gbmV4dERhdGE7Ci0gICAgICAgIG5leHREYXRhID0gaSA8IHNpemUgLSAxID8gJihwcm9wZXJ0
eURhdGEuYXQoaSArIDEpKSA6IDA7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5wYXJzZWRP
aykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdl
LmVuZCA+IDAgJiYgY2hhcmFjdGVyc1tzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLmVu
ZCAtIDFdID09ICc7JykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHVuc2lnbmVk
IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0OwotICAgICAgICBpZiAoIW5leHREYXRhKQotICAgICAg
ICAgICAgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZS5lbmQgLSAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcm9w
ZXJ0eUVuZEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBuZXh0RGF0YS0+cmFuZ2Uuc3RhcnQg
LSAxOwotCi0gICAgICAgIHdoaWxlIChpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3Byb3BlcnR5RW5k
SW5TdHlsZVNoZWV0XSkpCi0gICAgICAgICAgICAtLXByb3BlcnR5RW5kSW5TdHlsZVNoZWV0Owot
Ci0gICAgICAgIC8vIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IHBvaW50cyBhdCB0aGUgbGFzdCBw
cm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KLSAgICAgICAgdW5zaWduZWQgbmV3UHJvcGVydHlFbmQg
PSBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHN0eWxlU3RhcnQgKyAxOyAvLyBFeGNsdXNpdmUg
b2YgdGhlIGxhc3QgcHJvcGVydHkgdGV4dCBjaGFyYWN0ZXIuCi0gICAgICAgIGlmIChjdXJyZW50
RGF0YS0+cmFuZ2UuZW5kICE9IG5ld1Byb3BlcnR5RW5kKSB7Ci0gICAgICAgICAgICBjdXJyZW50
RGF0YS0+cmFuZ2UuZW5kID0gbmV3UHJvcGVydHlFbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCB2
YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIGN1cnJlbnREYXRhLT5yYW5nZS5z
dGFydCArIGN1cnJlbnREYXRhLT5uYW1lLmxlbmd0aCgpOwotICAgICAgICAgICAgd2hpbGUgKHZh
bHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBjaGFyYWN0
ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdICE9ICc6JykKLSAgICAgICAgICAgICAgICArK3Zh
bHVlU3RhcnRJblN0eWxlU2hlZXQ7Ci0gICAgICAgICAgICBpZiAodmFsdWVTdGFydEluU3R5bGVT
aGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0KQotICAgICAgICAgICAgICAgICsrdmFsdWVT
dGFydEluU3R5bGVTaGVldDsgLy8gU2hpZnQgcGFzdCB0aGUgJzonLgotICAgICAgICAgICAgd2hp
bGUgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBp
c0hUTUxTcGFjZShjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdKSkKLSAgICAgICAg
ICAgICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7Ci0gICAgICAgICAgICAvLyBOZWVkIHRv
IGV4Y2x1ZGUgdGhlIHRyYWlsaW5nICc7JyBmcm9tIHRoZSBwcm9wZXJ0eSB2YWx1ZS4KLSAgICAg
ICAgICAgIGN1cnJlbnREYXRhLT52YWx1ZSA9IHN0eWxlU2hlZXRUZXh0LnN1YnN0cmluZyh2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0LCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHZhbHVlU3RhcnRJ
blN0eWxlU2hlZXQgKyAoY2hhcmFjdGVyc1twcm9wZXJ0eUVuZEluU3R5bGVTaGVldF0gPT0gJzsn
ID8gMCA6IDEpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBJbnNwZWN0b3JTdHlsZVNo
ZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0LCBW
ZWN0b3I8Q1NTU3R5bGVSdWxlKj4qIHJlc3VsdCkKIHsKICAgICBpZiAoIXJ1bGVMaXN0KQpAQCAt
MTQyMyw3ICsxMzY1LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6
OmdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKFJlZlB0cjxDU1NTdHlsZVMKIAogICAgIFJlZlB0cjxT
dHlsZVByb3BlcnR5U2V0PiB0ZW1wRGVjbGFyYXRpb24gPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVh
dGUoKTsKICAgICBDU1NQYXJzZXIgcChtX2VsZW1lbnQtPmRvY3VtZW50KCkpOwotICAgIHAucGFy
c2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIG1fc3R5bGVUZXh0LCByZXN1bHQs
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmNvbnRlbnRzKCkpOworICAg
IHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIG1fc3R5bGVUZXh0LCAq
cmVzdWx0LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5jb250ZW50cygp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXggMDNjYWI2NzdkMjI0M2M3ZDVjNDY1MDMwNDI4MWRk
NjkyYzE3Yzk4Ny4uNTU1NTZhYmRjYjFlNzk5MDc4ZTljZDcyNjFlY2FiMGYxYjFhMjc4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC01
OSw3ICs1OSwxMCBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSW5zcGVj
dG9yQ1NTSWQgewogcHVibGljOgotICAgIEluc3BlY3RvckNTU0lkKCkgeyB9CisgICAgSW5zcGVj
dG9yQ1NTSWQoKQorICAgICAgICA6IG1fb3JkaW5hbCgwKQorICAgIHsKKyAgICB9CiAKICAgICBl
eHBsaWNpdCBJbnNwZWN0b3JDU1NJZChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
ICB7CkBAIC0xMDIsNiArMTA1LDggQEAgcHJpdmF0ZToKIAogc3RydWN0IEluc3BlY3RvclN0eWxl
UHJvcGVydHkgewogICAgIEluc3BlY3RvclN0eWxlUHJvcGVydHkoKQorICAgICAgICA6IGhhc1Nv
dXJjZShmYWxzZSkKKyAgICAgICAgLCBkaXNhYmxlZChmYWxzZSkKICAgICB7CiAgICAgfQogCkBA
IC0yMTksNyArMjI0LDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
SW5zcGVjdG9yU3R5bGU7CiAKLSAgICBzdGF0aWMgdm9pZCBmaXhVbnBhcnNlZFByb3BlcnR5UmFu
Z2VzKENTU1J1bGVTb3VyY2VEYXRhKiBydWxlRGF0YSwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
VGV4dCk7CiAgICAgc3RhdGljIHZvaWQgY29sbGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1
bGVMaXN0PiwgVmVjdG9yPENTU1N0eWxlUnVsZSo+KiByZXN1bHQpOwogICAgIGJvb2wgZW5zdXJl
VGV4dCgpIGNvbnN0OwogICAgIGJvb2wgZW5zdXJlU291cmNlRGF0YSgpOwo=
</data>
<flag name="review"
          id="154027"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>