<?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>90414</bug_id>
          
          <creation_ts>2012-07-02 16:52:52 -0700</creation_ts>
          <short_desc>Make HTMLCollection RefCounted</short_desc>
          <delta_ts>2012-07-11 13:27:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>89919</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fpizlo</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>sam</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>661817</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-02 16:52:52 -0700</bug_when>
    <thetext>Right now HTMLCollection forwards ref/deref to its owner but this model makes tricky to merge it with DynamicNodeList. Also, we never delete HTMLCollection as long as its owner is alive because no one clears entries in m_cachedCollections, end up consuming a lot of memory over time when the node is left in the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661844</commentid>
    <comment_count>1</comment_count>
      <attachid>150507</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-02 17:58:30 -0700</bug_when>
    <thetext>Created attachment 150507
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661859</commentid>
    <comment_count>2</comment_count>
      <attachid>150507</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-02 18:24:33 -0700</bug_when>
    <thetext>Comment on attachment 150507
Cleanup

Attachment 150507 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13125324</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661867</commentid>
    <comment_count>3</comment_count>
      <attachid>150507</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-02 18:30:03 -0700</bug_when>
    <thetext>Comment on attachment 150507
Cleanup

Attachment 150507 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13138187</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661873</commentid>
    <comment_count>4</comment_count>
      <attachid>150514</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-02 18:43:44 -0700</bug_when>
    <thetext>Created attachment 150514
Fixed builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661895</commentid>
    <comment_count>5</comment_count>
      <attachid>150514</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-02 19:28:56 -0700</bug_when>
    <thetext>Comment on attachment 150514
Fixed builds

Attachment 150514 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13126334</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661936</commentid>
    <comment_count>6</comment_count>
      <attachid>150514</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-02 21:12:47 -0700</bug_when>
    <thetext>Comment on attachment 150514
Fixed builds

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

&gt; Source/WebKit/win/DOMHTMLClasses.cpp:713
&gt; +    RefPtr&lt;HTMLCollection&gt; options = selectElement-&gt;options();

Oops, I need to change this to HTMLOptionsCollection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664342</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-06 22:55:19 -0700</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664400</commentid>
    <comment_count>8</comment_count>
      <attachid>150514</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-07-07 12:21:54 -0700</bug_when>
    <thetext>Comment on attachment 150514
Fixed builds

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

&gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:122
&gt; +    return toJS(exec, thisObj, WTF::getPtr(collection));

Could you use release here?

&gt; Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp:80
&gt; +    return toJS(exec, thisObj-&gt;globalObject(), WTF::getPtr(collection));

Could you use release here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664617</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-08 21:33:06 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 150514 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150514&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMWindowCustom.cpp:122
&gt; &gt; +    return toJS(exec, thisObj, WTF::getPtr(collection));
&gt; 
&gt; Could you use release here?
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp:80
&gt; &gt; +    return toJS(exec, thisObj-&gt;globalObject(), WTF::getPtr(collection));
&gt; 
&gt; Could you use release here?

I don&apos;t think so. At least I don&apos;t see such a pattern anywhere else in the binding code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664978</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-09 10:40:14 -0700</bug_when>
    <thetext>Committed r122115: &lt;http://trac.webkit.org/changeset/122115&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665023</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-09 11:32:49 -0700</bug_when>
    <thetext>EFL build fix landed in http://trac.webkit.org/changeset/122118.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665135</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-09 13:53:26 -0700</bug_when>
    <thetext>Another EFL build fix (microdata tests): http://trac.webkit.org/changeset/122155</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667009</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 13:23:27 -0700</bug_when>
    <thetext>I suspect this may have caused the WK1 Mac release bot to explode into flames:

http://build.webkit.org/results/Apple%20Lion%20Release%20WK1%20(Tests)/r122115%20(900)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667012</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-11 13:26:34 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I suspect this may have caused the WK1 Mac release bot to explode into flames:
&gt; 
&gt; http://build.webkit.org/results/Apple%20Lion%20Release%20WK1%20(Tests)/r122115%20(900)/results.html

That seems unlikely. I use WK1 Mac debug for development, and didn&apos;t see any failures like that when I ran the test locally.

Is it possible that the bot is sick (some stale file lock, process, etc...) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667014</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-11 13:27:39 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; I suspect this may have caused the WK1 Mac release bot to explode into flames:
&gt; &gt; 
&gt; &gt; http://build.webkit.org/results/Apple%20Lion%20Release%20WK1%20(Tests)/r122115%20(900)/results.html
&gt; 
&gt; That seems unlikely. I use WK1 Mac debug for development, and didn&apos;t see any failures like that when I ran the test locally.
&gt; 
&gt; Is it possible that the bot is sick (some stale file lock, process, etc...) ?

Absolutely!  I&apos;m checking this now.  Don&apos;t worry, I&apos;m not hovering over the rollout trigger. ;-)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150507</attachid>
            <date>2012-07-02 17:58:30 -0700</date>
            <delta_ts>2012-07-02 18:43:39 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-90414-20120702180252.patch</filename>
            <type>text/plain</type>
            <size>47105</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTcxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wNy0wMiAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBNYWtlIEhUTUxDb2xsZWN0aW9u
IFJlZkNvdW50ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkwNDE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWFrZSBIVE1MQ29sbGVjdGlvbiByZWYgY291bnRlZCBhbmQgc3RvcCBmb3J3YXJkaW5nIHJl
ZiBhbmQgZGVyZWYgdG8gaXRzIG93bmVyIChtX2Jhc2UpCisgICAgICAgIHNvIGFzIHRvIGFsaWdu
IGl0cyBsaWZlIHRpbWUgbWFuYWdlbWVudCB0byB0aGF0IG9mIER5bmFtaWNOb2RlTGlzdC4KKwor
ICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCBlYWNoIEhUTUxDb2xsZWN0aW9uIGlzIG93bmVkIGJ5
IEpTQy9WOCBhbmQgbV9jYWNoZWRDb2xsZWN0aW9ucyBpbiBFbGVtZW50UmFyZURhdGEKKyAgICAg
ICAgYW5kIG1fY29sbGVjdGlvbiBpbiBEb2N1bWVudCBtZXJlbHkgaG9sZCByYXcgcG9pbnRlcnMg
Zm9yIHRoZSBjYWNoaW5nIHB1cnBvc2UuIFRoZXNlIHJhdyBwb2ludGVycworICAgICAgICBhcmUg
Y2xlYXJlZCB3aGVuIGVhY2ggSFRNTENvbGxlY3Rpb24gaXMgZGVzdHJ1Y3RlZCB2aWEgY29ycmVz
cG9uZGluZyByZW1vdmVDYWNoZWRIVE1MQ29sbGVjdGlvbidzLgorCisgICAgICAgIEluIHRoZSBk
ZXN0cnVjdG9yIG9mIEhUTUxDb2xsZWN0aW9uLCB3ZSB1c2UgdGhlIENvbGxlY3Rpb25UeXBlIHRv
IGRlY2lkZSB3aGV0aGVyIGJhc2UoKSBpcyBhbiBlbGVtZW50CisgICAgICAgIG9yIGFuIGRvY3Vt
ZW50LCBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgcmVtb3ZlQ2FjaGVkSFRNTENvbGxlY3Rpb24g
ZXhjZXB0IGZvciBXaW5kb3dOYW1lZEl0ZW1zIGFuZAorICAgICAgICBEb2N1bWVudE5hbWVkSXRl
bXMuIEZvciB0aG9zZSB0d28gdHlwZXMsIHdlIG5lZWQgdG8ga25vdyB0aGUgYXRvbWljIHN0cmlu
ZyBuYW1lIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICB0aGUgY29sbGVjdGlvbiBqdXN0IGxpa2Ug
bWFueSBEeW5hbWljTm9kZUxpc3QgdG8gcmVtb3ZlIHRoZSBjYWNoZSwgc28gd2UgbGV0IEhUTUxO
YW1lQ29sbGVjdGlvbgorICAgICAgICBkaXJlY3RseSBjYWxsIHJlbW92ZVdpbmRvd05hbWVkSXRl
bUNhY2hlIGFuZCByZW1vdmVEb2N1bWVudE5hbWVkSXRlbUNhY2hlLiBXZSdsbCBjbGVhbnVwIHRo
aXMgbWVzcyBpbgorICAgICAgICBhIGZvbGxvdyB1cCBwYXRjaCB1c2luZyBhIG5pY2UgY2xhc3Mg
aGllcmFyY2h5IGFuZCB2aXJ0dWFsIGRlc3RydWN0b3JzLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5hbWVk
SXRlbUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om9wZW5TZWFyY2hEZXNjcmlwdGlv
blVSTCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpj
YWNoZWRDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVDYWNo
ZWRIVE1MQ29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1hZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphcHBsZXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjplbWJlZHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBsdWdpbnMp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om9iamVjdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnNjcmlwdHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Omxpbmtz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpmb3Jtcyk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6YW5jaG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWxsKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojpkb2N1bWVudE5hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnJlbW92ZVdpbmRvd05hbWVkSXRlbUNhY2hlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpyZW1vdmVEb2N1bWVudE5hbWVkSXRlbUNhY2hlKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVDYWNoZWRIVE1MQ29sbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UmFyZURhdGE6OmVuc3VyZUNhY2hlZEhU
TUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUNhY2hlZEhU
TUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9FbGVtZW50
Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudFJhcmVEYXRhLmg6
CisgICAgICAgIChFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJh
cmVEYXRhOjpjYWNoZWRIVE1MQ29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
UmFyZURhdGE6OnJlbW92ZUNhY2hlZEhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0Nv
bGxlY3Rpb25UeXBlLmg6CisgICAgICAgIChXZWJDb3JlKTogU2luY2UgV2luZG93TmFtZWRJdGVt
cyBpcyBub3QgYSBwYXJ0IG9mIFVubmFtZWREb2N1bWVudENhY2hlZFR5cGUsIHdlIHNob3VsZG4n
dCBhZGRkIDEuCisgICAgICAgIChXZWJDb3JlOjppc1VubmFtZWREb2N1bWVudENhY2hlZFR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6aXNOb2RlQ29sbGVjdGlvblR5cGUpOgorICAgICAgICAqIGh0
bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFsbENvbGxl
Y3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oOgorICAg
ICAgICAoSFRNTEFsbENvbGxlY3Rpb24pOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6fkhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppdGVtQWZ0ZXIpOgorICAgICAgICAqIGh0bWwvSFRNTENv
bGxlY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlOjpI
VE1MQ29sbGVjdGlvbkNhY2hlQmFzZSk6CisgICAgICAgIChIVE1MQ29sbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6YmFzZSk6CisgICAgICAgICogaHRtbC9IVE1M
RGF0YUxpc3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEYXRhTGlzdEVsZW1l
bnQ6Om9wdGlvbnMpOgorICAgICAgICAqIGh0bWwvSFRNTERhdGFMaXN0RWxlbWVudC5oOgorICAg
ICAgICAoSFRNTERhdGFMaXN0RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Y2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnByb3BlcnRpZXMpOgorICAgICAgICAqIGh0bWwvSFRNTEVs
ZW1lbnQuaDoKKyAgICAgICAgKEhUTUxFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6
ZWxlbWVudHMpOgorICAgICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oOgorICAgICAg
ICAoSFRNTEZpZWxkU2V0RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbGxlY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmg6CisgICAgICAgIChIVE1MRm9ybUNv
bGxlY3Rpb24pOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudHMpOgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1FbGVtZW50Lmg6CisgICAgICAgIChIVE1MRm9ybUVsZW1lbnQpOgorICAgICAgICAqIGh0
bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQ6
OmltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6YXJlYXMp
OgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxNYXBFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTmFtZUNvbGxlY3Rpb246OkhUTUxOYW1lQ29sbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTmFtZUNvbGxlY3Rpb246On5IVE1MTmFtZUNvbGxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEhU
TUxOYW1lQ29sbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmg6CisgICAgICAgIChIVE1MT3B0
aW9uc0NvbGxlY3Rpb24pOgorICAgICAgICAqIGh0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9u
Lmg6CisgICAgICAgIChIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24pOgorICAgICAgICAqIGh0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6OnNlbGVjdGVkT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6b3B0aW9ucyk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oOgorICAgICAg
ICAoSFRNTFNlbGVjdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50Ojpyb3dzKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnRCb2RpZXMpOgorICAgICAgICAqIGh0bWwvSFRN
TFRhYmxlRWxlbWVudC5oOgorICAgICAgICAoSFRNTFRhYmxlRWxlbWVudCk6CisgICAgICAgICog
aHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZVJvd0VsZW1lbnQ6Omluc2VydENlbGwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUm93
RWxlbWVudDo6ZGVsZXRlQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVt
ZW50OjpjZWxscyk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50Lmg6CisgICAg
ICAgIChIVE1MVGFibGVSb3dFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24uaDoKKyAg
ICAgICAgKEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50OjppbnNlcnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQ6OmRlbGV0ZVJvdyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxl
bWVudDo6cm93cyk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oOgor
ICAgICAgICAoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQpOgorCiAyMDEyLTA3LTAyICBObydhbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBHZXQg
cmlkIG9mIEdyYXBoaWNzTGF5ZXJRdApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lv
biAxMjE3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDI0LDcgKzI0MjQsNyBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiB2b2lkIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiByZXN1bHQpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9yZW5kZXJlci0+ZG9jdW1l
bnQoKTsKLSAgICBIVE1MQ29sbGVjdGlvbiogbGlua3MgPSBkb2N1bWVudC0+bGlua3MoKTsKKyAg
ICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGxpbmtzID0gZG9jdW1lbnQtPmxpbmtzKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgTm9kZSogY3VyciA9IGxpbmtzLT5pdGVtKGkpOyBpKyspIHsK
ICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmogPSBjdXJyLT5yZW5kZXJlcigpOwogICAgICAgICBp
ZiAob2JqKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAxMjE3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiwxMCAr
MTE2LDEwIEBAIHN0YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbUdldHRlcihFeGVjU3RhdGUKICAgICBB
U1NFUlQoZG9jdW1lbnQpOwogICAgIEFTU0VSVChkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7
CiAKLSAgICBIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IGRvY3VtZW50LT53aW5kb3dOYW1l
ZEl0ZW1zKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAgIFJl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IGRvY3VtZW50LT53aW5kb3dOYW1lZEl0
ZW1zKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOwogICAgIGlmIChj
b2xsZWN0aW9uLT5oYXNFeGFjdGx5T25lSXRlbSgpKQogICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCB0aGlzT2JqLCBjb2xsZWN0aW9uLT5pdGVtKDApKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCB0
aGlzT2JqLCBjb2xsZWN0aW9uKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLCBXVEY6
OmdldFB0cihjb2xsZWN0aW9uKSk7CiB9CiAKIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIxNzAz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIEpTVmFsdWUgSlNIVE1MRG9jdW1lbnQ6
Om5hbWVHZXR0ZXIoRXhlY1MKICAgICBKU0hUTUxEb2N1bWVudCogdGhpc09iaiA9IGpzQ2FzdDxK
U0hUTUxEb2N1bWVudCo+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgSFRNTERvY3VtZW50KiBk
b2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KHRoaXNPYmotPmltcGwoKSk7CiAK
LSAgICBIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IGRvY3VtZW50LT5kb2N1bWVudE5hbWVk
SXRlbXMocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAgUmVm
UHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gZG9jdW1lbnQtPmRvY3VtZW50TmFtZWRJ
dGVtcyhwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKIAogICAgIGlm
IChjb2xsZWN0aW9uLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpA
QCAtNzcsNyArNzcsNyBAQCBKU1ZhbHVlIEpTSFRNTERvY3VtZW50OjpuYW1lR2V0dGVyKEV4ZWNT
CiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBub2Rl
KTsKICAgICB9IAogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0
KCksIGNvbGxlY3Rpb24pOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9i
amVjdCgpLCBXVEY6OmdldFB0cihjb2xsZWN0aW9uKSk7CiB9CiAKIC8vIEN1c3RvbSBhdHRyaWJ1
dGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEyMTcwMykKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Nyw2ICs1
NTcsOSBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLCiAgICAgc3Rh
dGljIGludCBkb2NJRCA9IDA7CiAgICAgbV9kb2NJRCA9IGRvY0lEKys7CiAgICAgCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobV9jb2xsZWN0aW9ucyk7IGkr
KykKKyAgICAgICAgbV9jb2xsZWN0aW9uc1tpXSA9IDA7CisKICAgICBJbnNwZWN0b3JDb3VudGVy
czo6aW5jcmVtZW50Q291bnRlcihJbnNwZWN0b3JDb3VudGVyczo6RG9jdW1lbnRDb3VudGVyKTsK
IH0KIApAQCAtNDU3MSw3ICs0NTc0LDcgQEAgS1VSTCBEb2N1bWVudDo6b3BlblNlYXJjaERlc2Ny
aXB0aW9uVVJMKAogICAgIGlmICghaGVhZCgpKQogICAgICAgICByZXR1cm4gS1VSTCgpOwogCi0g
ICAgSFRNTENvbGxlY3Rpb24qIGNoaWxkcmVuID0gaGVhZCgpLT5jaGlsZHJlbigpOworICAgIFJl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4gY2hpbGRyZW4gPSBoZWFkKCktPmNoaWxkcmVuKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgTm9kZSogY2hpbGQgPSBjaGlsZHJlbi0+aXRlbShpKTsgaSsr
KSB7CiAgICAgICAgIGlmICghY2hpbGQtPmhhc1RhZ05hbWUobGlua1RhZykpCiAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTQ2ODksODEgKzQ2OTIsMTEzIEBAIGJvb2wgRG9jdW1lbnQ6Omhhc1NW
R1Jvb3ROb2RlKCkgY29uc3QKIH0KICNlbmRpZgogCi1IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6
OmNhY2hlZENvbGxlY3Rpb24oQ29sbGVjdGlvblR5cGUgdHlwZSkKKy8vIEZJWE1FOiBUaGlzIGNh
Y2hpbmcgbWVjaGFuaXNtIHNob3VsZCBiZSBtZXJnZWQgdGhhdCBvZiBEeW5hbWljTm9kZUxpc3Qg
aW4gTm9kZVJhcmVEYXRhLgorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmNh
Y2hlZENvbGxlY3Rpb24oQ29sbGVjdGlvblR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHR5cGUpIDwgTnVtVW5uYW1lZERvY3VtZW50Q2FjaGVkVHlwZXMpOwot
ICAgIGlmICghbV9jb2xsZWN0aW9uc1t0eXBlXSkKLSAgICAgICAgbV9jb2xsZWN0aW9uc1t0eXBl
XSA9IEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgdHlwZSk7Ci0gICAgcmV0dXJuIG1fY29s
bGVjdGlvbnNbdHlwZV0uZ2V0KCk7CisgICAgaWYgKG1fY29sbGVjdGlvbnNbdHlwZV0pCisgICAg
ICAgIHJldHVybiBtX2NvbGxlY3Rpb25zW3R5cGVdOworCisgICAgUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiBjb2xsZWN0aW9uOworICAgIGlmICh0eXBlID09IERvY0FsbCkKKyAgICAgICAgY29sbGVj
dGlvbiA9IEhUTUxBbGxDb2xsZWN0aW9uOjpjcmVhdGUodGhpcyk7CisgICAgZWxzZQorICAgICAg
ICBjb2xsZWN0aW9uID0gSFRNTENvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCB0eXBlKTsKKyAgICBt
X2NvbGxlY3Rpb25zW3R5cGVdID0gY29sbGVjdGlvbi5nZXQoKTsKKworICAgIHJldHVybiBjb2xs
ZWN0aW9uLnJlbGVhc2UoKTsKIH0KIAotSFRNTENvbGxlY3Rpb24qIERvY3VtZW50OjppbWFnZXMo
KQordm9pZCBEb2N1bWVudDo6cmVtb3ZlQ2FjaGVkSFRNTENvbGxlY3Rpb24oSFRNTENvbGxlY3Rp
b24qIGNvbGxlY3Rpb24sIENvbGxlY3Rpb25UeXBlIHR5cGUpCit7CisgICAgQVNTRVJUX1VOVVNF
RChjb2xsZWN0aW9uLCBtX2NvbGxlY3Rpb25zW3R5cGVdID09IGNvbGxlY3Rpb24pOworICAgIG1f
Y29sbGVjdGlvbnNbdHlwZV0gPSAwOworfQorCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBE
b2N1bWVudDo6aW1hZ2VzKCkKIHsKICAgICByZXR1cm4gY2FjaGVkQ29sbGVjdGlvbihEb2NJbWFn
ZXMpOwogfQogCi1IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6OmFwcGxldHMoKQorUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmFwcGxldHMoKQogewogICAgIHJldHVybiBjYWNo
ZWRDb2xsZWN0aW9uKERvY0FwcGxldHMpOwogfQogCi1IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6
OmVtYmVkcygpCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6ZW1iZWRzKCkK
IHsKICAgICByZXR1cm4gY2FjaGVkQ29sbGVjdGlvbihEb2NFbWJlZHMpOwogfQogCi1IVE1MQ29s
bGVjdGlvbiogRG9jdW1lbnQ6OnBsdWdpbnMoKQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
RG9jdW1lbnQ6OnBsdWdpbnMoKQogewogICAgIC8vIFRoaXMgaXMgYW4gYWxpYXMgZm9yIGVtYmVk
cygpIHJlcXVpcmVkIGZvciB0aGUgSlMgRE9NIGJpbmRpbmdzLgogICAgIHJldHVybiBjYWNoZWRD
b2xsZWN0aW9uKERvY0VtYmVkcyk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDo6b2Jq
ZWN0cygpCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6b2JqZWN0cygpCiB7
CiAgICAgcmV0dXJuIGNhY2hlZENvbGxlY3Rpb24oRG9jT2JqZWN0cyk7CiB9CiAKLUhUTUxDb2xs
ZWN0aW9uKiBEb2N1bWVudDo6c2NyaXB0cygpCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBE
b2N1bWVudDo6c2NyaXB0cygpCiB7CiAgICAgcmV0dXJuIGNhY2hlZENvbGxlY3Rpb24oRG9jU2Ny
aXB0cyk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDo6bGlua3MoKQorUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmxpbmtzKCkKIHsKICAgICByZXR1cm4gY2FjaGVk
Q29sbGVjdGlvbihEb2NMaW5rcyk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDo6Zm9y
bXMoKQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmZvcm1zKCkKIHsKICAg
ICByZXR1cm4gY2FjaGVkQ29sbGVjdGlvbihEb2NGb3Jtcyk7CiB9CiAKLUhUTUxDb2xsZWN0aW9u
KiBEb2N1bWVudDo6YW5jaG9ycygpCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVu
dDo6YW5jaG9ycygpCiB7CiAgICAgcmV0dXJuIGNhY2hlZENvbGxlY3Rpb24oRG9jQW5jaG9ycyk7
CiB9CiAKLUhUTUxBbGxDb2xsZWN0aW9uKiBEb2N1bWVudDo6YWxsKCkKK1Bhc3NSZWZQdHI8SFRN
TENvbGxlY3Rpb24+IERvY3VtZW50OjphbGwoKQogewotICAgIGlmICghbV9jb2xsZWN0aW9uc1tE
b2NBbGxdKQotICAgICAgICBtX2NvbGxlY3Rpb25zW0RvY0FsbF0gPSBIVE1MQWxsQ29sbGVjdGlv
bjo6Y3JlYXRlKHRoaXMpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MQWxsQ29sbGVjdGlv
bio+KG1fY29sbGVjdGlvbnNbRG9jQWxsXS5nZXQoKSk7CisgICAgcmV0dXJuIGNhY2hlZENvbGxl
Y3Rpb24oRG9jQWxsKTsKK30KKworUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6
OndpbmRvd05hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQoreworICAgIE5hbWVk
Q29sbGVjdGlvbk1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fd2luZG93TmFtZWRJdGVtQ29sbGVj
dGlvbnMuYWRkKG5hbWUsIDApOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
IHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIFJlZlB0cjxIVE1MTmFtZUNv
bGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBX
aW5kb3dOYW1lZEl0ZW1zLCBuYW1lKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGNv
bGxlY3Rpb24uZ2V0KCk7CisgICAgcmV0dXJuIGNvbGxlY3Rpb24ucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6ZG9jdW1lbnROYW1lZEl0ZW1zKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkKK3sKKyAgICBOYW1lZENvbGxlY3Rpb25NYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBtX2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDAp
OworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZDsKKworICAgIFJlZlB0cjxIVE1MTmFtZUNvbGxlY3Rpb24+IGNvbGxlY3Rp
b24gPSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBEb2N1bWVudE5hbWVkSXRlbXMs
IG5hbWUpOworICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gY29sbGVjdGlvbi5nZXQoKTsK
KyAgICByZXR1cm4gY29sbGVjdGlvbi5yZWxlYXNlKCk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBE
b2N1bWVudDo6d2luZG93TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCisvLyBG
SVhNRTogVGhpcyBjYWNoaW5nIG1lY2hhbmlzbSBzaG91bGQgYmUgbWVyZ2VkIHRoYXQgb2YgRHlu
YW1pY05vZGVMaXN0IGluIE5vZGVSYXJlRGF0YS4KK3ZvaWQgRG9jdW1lbnQ6OnJlbW92ZVdpbmRv
d05hbWVkSXRlbUNhY2hlKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgT3duUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4mIGNvbGxlY3Rp
b24gPSBtX3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rpb25zLmFkZChuYW1lLmltcGwoKSwgbnVsbHB0
cikuaXRlcmF0b3ItPnNlY29uZDsKLSAgICBpZiAoIWNvbGxlY3Rpb24pCi0gICAgICAgIGNvbGxl
Y3Rpb24gPSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBXaW5kb3dOYW1lZEl0ZW1z
LCBuYW1lKTsKLSAgICByZXR1cm4gY29sbGVjdGlvbi5nZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VE
KGNvbGxlY3Rpb24sIG1fd2luZG93TmFtZWRJdGVtQ29sbGVjdGlvbnMuZ2V0KG5hbWUpID09IGNv
bGxlY3Rpb24pOworICAgIG1fd2luZG93TmFtZWRJdGVtQ29sbGVjdGlvbnMucmVtb3ZlKG5hbWUp
OwogfQogCi1IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyhjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpCit2b2lkIERvY3VtZW50OjpyZW1vdmVEb2N1bWVudE5hbWVk
SXRlbUNhY2hlKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpCiB7Ci0gICAgT3duUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4mIGNvbGxlY3Rpb24gPSBt
X2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUuaW1wbCgpLCBudWxscHRyKS5p
dGVyYXRvci0+c2Vjb25kOwotICAgIGlmICghY29sbGVjdGlvbikKLSAgICAgICAgY29sbGVjdGlv
biA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIERvY3VtZW50TmFtZWRJdGVtcywg
bmFtZSk7Ci0gICAgcmV0dXJuIGNvbGxlY3Rpb24uZ2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChj
b2xsZWN0aW9uLCBtX2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMuZ2V0KG5hbWUpID09IGNv
bGxlY3Rpb24pOworICAgIG1fZG9jdW1lbnROYW1lZEl0ZW1Db2xsZWN0aW9ucy5yZW1vdmUobmFt
ZSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmZpbmlzaGVkUGFyc2luZygpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkocmV2aXNpb24gMTIxNzAzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMiwxOSArNDAyLDIyIEBAIHB1YmxpYzoKIAogICAg
IFBhc3NSZWZQdHI8Tm9kZT4gYWRvcHROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gc291cmNlLCBFeGNl
cHRpb25Db2RlJik7CiAKLSAgICBIVE1MQ29sbGVjdGlvbiogaW1hZ2VzKCk7Ci0gICAgSFRNTENv
bGxlY3Rpb24qIGVtYmVkcygpOwotICAgIEhUTUxDb2xsZWN0aW9uKiBwbHVnaW5zKCk7IC8vIGFu
IGFsaWFzIGZvciBlbWJlZHMoKSByZXF1aXJlZCBmb3IgdGhlIEpTIERPTSBiaW5kaW5ncy4KLSAg
ICBIVE1MQ29sbGVjdGlvbiogYXBwbGV0cygpOwotICAgIEhUTUxDb2xsZWN0aW9uKiBsaW5rcygp
OwotICAgIEhUTUxDb2xsZWN0aW9uKiBmb3JtcygpOwotICAgIEhUTUxDb2xsZWN0aW9uKiBhbmNo
b3JzKCk7Ci0gICAgSFRNTENvbGxlY3Rpb24qIG9iamVjdHMoKTsKLSAgICBIVE1MQ29sbGVjdGlv
biogc2NyaXB0cygpOwotICAgIEhUTUxDb2xsZWN0aW9uKiB3aW5kb3dOYW1lZEl0ZW1zKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSk7Ci0gICAgSFRNTENvbGxlY3Rpb24qIGRvY3VtZW50TmFtZWRJ
dGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOwotCi0gICAgSFRNTEFsbENvbGxlY3Rpb24q
IGFsbCgpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGltYWdlcygpOworICAgIFBh
c3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGVtYmVkcygpOworICAgIFBhc3NSZWZQdHI8SFRNTENv
bGxlY3Rpb24+IHBsdWdpbnMoKTsgLy8gYW4gYWxpYXMgZm9yIGVtYmVkcygpIHJlcXVpcmVkIGZv
ciB0aGUgSlMgRE9NIGJpbmRpbmdzLgorICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGFw
cGxldHMoKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBsaW5rcygpOworICAgIFBh
c3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGZvcm1zKCk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gYW5jaG9ycygpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IG9iamVj
dHMoKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBzY3JpcHRzKCk7CisgICAgUGFz
c1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gYWxsKCk7CisgICAgdm9pZCByZW1vdmVDYWNoZWRIVE1M
Q29sbGVjdGlvbihIVE1MQ29sbGVjdGlvbiosIENvbGxlY3Rpb25UeXBlKTsKKworICAgIFBhc3NS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+IHdpbmRvd05hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBkb2N1bWVudE5hbWVkSXRl
bXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlbW92ZVdpbmRvd05hbWVk
SXRlbUNhY2hlKEhUTUxDb2xsZWN0aW9uKiwgY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgdm9p
ZCByZW1vdmVEb2N1bWVudE5hbWVkSXRlbUNhY2hlKEhUTUxDb2xsZWN0aW9uKiwgY29uc3QgQXRv
bWljU3RyaW5nJik7CiAKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAg
ICAgYm9vbCBpc0hUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIVE1MOyB9CkBAIC0x
MjA2LDcgKzEyMDksNyBAQCBwcml2YXRlOgogICAgIFBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJp
bGl0eVN0YXRlKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIEhUTUxDb2xsZWN0aW9uKiBjYWNoZWRD
b2xsZWN0aW9uKENvbGxlY3Rpb25UeXBlKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBjYWNoZWRDb2xsZWN0aW9uKENvbGxlY3Rpb25UeXBlKTsKIAogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKICAgICB2b2lkIGNsZWFyRnVsbHNjcmVlbkVsZW1lbnRTdGFjaygpOwpAQCAtMTM5
NCwxMSArMTM5NywxMSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBtX2RlY29kZXI7CiAKICAgICBJbmhlcml0ZWRCb29sIG1fZGVzaWduTW9kZTsKLSAgICAKLSAg
ICBPd25QdHI8SFRNTENvbGxlY3Rpb24+IG1fY29sbGVjdGlvbnNbTnVtVW5uYW1lZERvY3VtZW50
Q2FjaGVkVHlwZXNdOworCiAgICAgSGFzaFNldDxEeW5hbWljU3VidHJlZU5vZGVMaXN0Kj4gbV9s
aXN0c0ludmFsaWRhdGVkQXREb2N1bWVudDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNT
dHJpbmdJbXBsKiwgT3duUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gPiBOYW1lZENvbGxlY3Rpb25N
YXA7CisgICAgSFRNTENvbGxlY3Rpb24qIG1fY29sbGVjdGlvbnNbTnVtVW5uYW1lZERvY3VtZW50
Q2FjaGVkVHlwZXNdOworICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEhUTUxOYW1l
Q29sbGVjdGlvbio+IE5hbWVkQ29sbGVjdGlvbk1hcDsKICAgICBOYW1lZENvbGxlY3Rpb25NYXAg
bV9kb2N1bWVudE5hbWVkSXRlbUNvbGxlY3Rpb25zOwogICAgIE5hbWVkQ29sbGVjdGlvbk1hcCBt
X3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rpb25zOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxMjE3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwNDIsMzUgKzIwNDIsNDAgQEAgdm9pZCBFbGVtZW50Ojp1cGRhdGVF
eHRyYU5hbWVkSXRlbVJlZ2lzdAogICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihk
b2N1bWVudCgpKS0+YWRkRXh0cmFOYW1lZEl0ZW0obmV3SWQpOwogfQogCi1IVE1MQ29sbGVjdGlv
biogRWxlbWVudDo6ZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oQ29sbGVjdGlvblR5cGUgdHlw
ZSkKK1Bhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEVsZW1lbnQ6OmVuc3VyZUNhY2hlZEhUTUxD
b2xsZWN0aW9uKENvbGxlY3Rpb25UeXBlIHR5cGUpCiB7CiAgICAgcmV0dXJuIGVuc3VyZUVsZW1l
bnRSYXJlRGF0YSgpLT5lbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbih0aGlzLCB0eXBlKTsKIH0K
IAotSFRNTENvbGxlY3Rpb24qIEVsZW1lbnRSYXJlRGF0YTo6ZW5zdXJlQ2FjaGVkSFRNTENvbGxl
Y3Rpb24oRWxlbWVudCogZWxlbWVudCwgQ29sbGVjdGlvblR5cGUgdHlwZSkKK1Bhc3NSZWZQdHI8
SFRNTENvbGxlY3Rpb24+IEVsZW1lbnRSYXJlRGF0YTo6ZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rp
b24oRWxlbWVudCogZWxlbWVudCwgQ29sbGVjdGlvblR5cGUgdHlwZSkKIHsKLSAgICBpZiAoIW1f
Y2FjaGVkQ29sbGVjdGlvbnMpCisgICAgaWYgKCFtX2NhY2hlZENvbGxlY3Rpb25zKSB7CiAgICAg
ICAgIG1fY2FjaGVkQ29sbGVjdGlvbnMgPSBhZG9wdFB0cihuZXcgQ2FjaGVkSFRNTENvbGxlY3Rp
b25BcnJheSk7Ci0gICAgCi0gICAgT3duUHRyPEhUTUxDb2xsZWN0aW9uPiYgY29sbGVjdGlvbiA9
ICgqbV9jYWNoZWRDb2xsZWN0aW9ucylbdHlwZSAtIEZpcnN0Tm9kZUNvbGxlY3Rpb25UeXBlXTsK
LSAgICBpZiAoIWNvbGxlY3Rpb24pIHsKLSAgICAgICAgaWYgKHR5cGUgPT0gVGFibGVSb3dzKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpOwotICAg
ICAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpjcmVhdGUoZWxl
bWVudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBTZWxlY3RPcHRpb25zKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKTsKLSAgICAgICAg
ICAgIGNvbGxlY3Rpb24gPSBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmNyZWF0ZShlbGVtZW50KTsK
LSAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IEZvcm1Db250cm9scykgewotICAgICAgICAgICAg
QVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFt
ZShmaWVsZHNldFRhZykpOwotICAgICAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxGb3JtQ29sbGVj
dGlvbjo6Y3JlYXRlKGVsZW1lbnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
TnVtTm9kZUNvbGxlY3Rpb25UeXBlczsgaSsrKQorICAgICAgICAgICAgKCptX2NhY2hlZENvbGxl
Y3Rpb25zKVtpXSA9IDA7CisgICAgfQorCisgICAgaWYgKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0
aW9uID0gKCptX2NhY2hlZENvbGxlY3Rpb25zKVt0eXBlIC0gRmlyc3ROb2RlQ29sbGVjdGlvblR5
cGVdKQorICAgICAgICByZXR1cm4gY29sbGVjdGlvbjsKKworICAgIFJlZlB0cjxIVE1MQ29sbGVj
dGlvbj4gY29sbGVjdGlvbjsKKyAgICBpZiAodHlwZSA9PSBUYWJsZVJvd3MpIHsKKyAgICAgICAg
QVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUodGFibGVUYWcpKTsKKyAgICAgICAgY29sbGVjdGlv
biA9IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpjcmVhdGUoZWxlbWVudCk7CisgICAgfSBlbHNl
IGlmICh0eXBlID09IFNlbGVjdE9wdGlvbnMpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmhh
c1RhZ05hbWUoc2VsZWN0VGFnKSk7CisgICAgICAgIGNvbGxlY3Rpb24gPSBIVE1MT3B0aW9uc0Nv
bGxlY3Rpb246OmNyZWF0ZShlbGVtZW50KTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gRm9ybUNv
bnRyb2xzKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKTsKKyAgICAgICAgY29sbGVjdGlvbiA9
IEhUTUxGb3JtQ29sbGVjdGlvbjo6Y3JlYXRlKGVsZW1lbnQpOwogI2lmIEVOQUJMRShNSUNST0RB
VEEpCi0gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBJdGVtUHJvcGVydGllcykgewotICAgICAg
ICAgICAgY29sbGVjdGlvbiA9IEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbjo6Y3JlYXRlKGVsZW1l
bnQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBJdGVtUHJvcGVydGllcykgeworICAgICAgICBj
b2xsZWN0aW9uID0gSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uOjpjcmVhdGUoZWxlbWVudCk7CiAj
ZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb2xsZWN0aW9uID0gSFRNTENvbGxl
Y3Rpb246OmNyZWF0ZShlbGVtZW50LCB0eXBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbGxlY3Rp
b24uZ2V0KCk7CisgICAgfSBlbHNlCisgICAgICAgIGNvbGxlY3Rpb24gPSBIVE1MQ29sbGVjdGlv
bjo6Y3JlYXRlKGVsZW1lbnQsIHR5cGUpOworICAgICgqbV9jYWNoZWRDb2xsZWN0aW9ucylbdHlw
ZSAtIEZpcnN0Tm9kZUNvbGxlY3Rpb25UeXBlXSA9IGNvbGxlY3Rpb24uZ2V0KCk7CisgICAgcmV0
dXJuIGNvbGxlY3Rpb24ucmVsZWFzZSgpOwogfQogCiBIVE1MQ29sbGVjdGlvbiogRWxlbWVudDo6
Y2FjaGVkSFRNTENvbGxlY3Rpb24oQ29sbGVjdGlvblR5cGUgdHlwZSkKQEAgLTIwNzgsNiArMjA4
MywxMiBAQCBIVE1MQ29sbGVjdGlvbiogRWxlbWVudDo6Y2FjaGVkSFRNTENvbGxlCiAgICAgcmV0
dXJuIGhhc1JhcmVEYXRhKCkgPyBlbGVtZW50UmFyZURhdGEoKS0+Y2FjaGVkSFRNTENvbGxlY3Rp
b24odHlwZSkgOiAwOwogfQogCit2b2lkIEVsZW1lbnQ6OnJlbW92ZUNhY2hlZEhUTUxDb2xsZWN0
aW9uKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBDb2xsZWN0aW9uVHlwZSB0eXBlKQorewor
ICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKKyAgICBlbGVtZW50UmFyZURhdGEoKS0+cmVtb3Zl
Q2FjaGVkSFRNTENvbGxlY3Rpb24oY29sbGVjdGlvbiwgdHlwZSk7Cit9CisKIEludFNpemUgRWxl
bWVudDo6c2F2ZWRMYXllclNjcm9sbE9mZnNldCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhhc1Jh
cmVEYXRhKCkgPyBlbGVtZW50UmFyZURhdGEoKS0+bV9zYXZlZExheWVyU2Nyb2xsT2Zmc2V0IDog
SW50U2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAxMjE3MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEy
LDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkTW9kaWZ5QXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0
ZSYpOwogICAgIHZvaWQgZGlkUmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
IAorICAgIHZvaWQgcmVtb3ZlQ2FjaGVkSFRNTENvbGxlY3Rpb24oSFRNTENvbGxlY3Rpb24qLCBD
b2xsZWN0aW9uVHlwZSk7CisKICAgICBMYXlvdXRTaXplIG1pbmltdW1TaXplRm9yUmVzaXppbmco
KSBjb25zdDsKICAgICB2b2lkIHNldE1pbmltdW1TaXplRm9yUmVzaXppbmcoY29uc3QgTGF5b3V0
U2l6ZSYpOwogCkBAIC00NDcsNyArNDQ5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRSZWdpc3RlckFzTmFtZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVnaXN0ZXJBc0V4dHJhTmFtZWRJdGVtKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIAotICAgIEhUTUxDb2xsZWN0aW9uKiBlbnN1cmVDYWNoZWRIVE1MQ29s
bGVjdGlvbihDb2xsZWN0aW9uVHlwZSk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
ZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oQ29sbGVjdGlvblR5cGUpOwogICAgIEhUTUxDb2xs
ZWN0aW9uKiBjYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSk7CiAKIHByaXZhdGU6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiAxMjE3MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDIyICs0NCwyNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgTm9kZVJhcmVEYXRhOjpuZWVk
c0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaDsKICAgICB1c2luZyBOb2RlUmFy
ZURhdGE6OnNldE5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoOwogCi0g
ICAgdHlwZWRlZiBGaXhlZEFycmF5PE93blB0cjxIVE1MQ29sbGVjdGlvbj4sIE51bU5vZGVDb2xs
ZWN0aW9uVHlwZXM+IENhY2hlZEhUTUxDb2xsZWN0aW9uQXJyYXk7Ci0KICAgICBib29sIGhhc0Nh
Y2hlZEhUTUxDb2xsZWN0aW9ucygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9jYWNo
ZWRDb2xsZWN0aW9uczsKICAgICB9CiAKLSAgICBIVE1MQ29sbGVjdGlvbiogZW5zdXJlQ2FjaGVk
SFRNTENvbGxlY3Rpb24oRWxlbWVudCosIENvbGxlY3Rpb25UeXBlKTsKKyAgICBQYXNzUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiBlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihFbGVtZW50KiwgQ29s
bGVjdGlvblR5cGUpOwogICAgIEhUTUxDb2xsZWN0aW9uKiBjYWNoZWRIVE1MQ29sbGVjdGlvbihD
b2xsZWN0aW9uVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgaWYgKCFtX2NhY2hlZENvbGxlY3Rp
b25zKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuICgqbV9jYWNoZWRD
b2xsZWN0aW9ucylbdHlwZSAtIEZpcnN0Tm9kZUNvbGxlY3Rpb25UeXBlXS5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuICgqbV9jYWNoZWRDb2xsZWN0aW9ucylbdHlwZSAtIEZpcnN0Tm9kZUNvbGxlY3Rp
b25UeXBlXTsKKyAgICB9CisgICAgdm9pZCByZW1vdmVDYWNoZWRIVE1MQ29sbGVjdGlvbihIVE1M
Q29sbGVjdGlvbiogY29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2NhY2hlZENvbGxlY3Rpb25zKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChj
b2xsZWN0aW9uLCAoKm1fY2FjaGVkQ29sbGVjdGlvbnMpW3R5cGUgLSBGaXJzdE5vZGVDb2xsZWN0
aW9uVHlwZV0gPT0gY29sbGVjdGlvbik7CisgICAgICAgICgqbV9jYWNoZWRDb2xsZWN0aW9ucylb
dHlwZSAtIEZpcnN0Tm9kZUNvbGxlY3Rpb25UeXBlXSA9IDA7CiAgICAgfQogCisgICAgdHlwZWRl
ZiBGaXhlZEFycmF5PEhUTUxDb2xsZWN0aW9uKiwgTnVtTm9kZUNvbGxlY3Rpb25UeXBlcz4gQ2Fj
aGVkSFRNTENvbGxlY3Rpb25BcnJheTsKICAgICBPd25QdHI8Q2FjaGVkSFRNTENvbGxlY3Rpb25B
cnJheT4gbV9jYWNoZWRDb2xsZWN0aW9uczsKIAogICAgIExheW91dFNpemUgbV9taW5pbXVtU2l6
ZUZvclJlc2l6aW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9Db2xsZWN0aW9uVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sbGVjdGlvblR5cGUuaAkocmV2
aXNpb24gMTIxNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Db2xsZWN0aW9uVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsMjEgQEAgZW51bSBDb2xsZWN0aW9uVHlwZSB7CiB9
OwogCiBzdGF0aWMgY29uc3QgQ29sbGVjdGlvblR5cGUgRmlyc3RVbm5hbWVkRG9jdW1lbnRDYWNo
ZWRUeXBlID0gRG9jSW1hZ2VzOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIE51bVVubmFtZWREb2N1
bWVudENhY2hlZFR5cGVzID0gV2luZG93TmFtZWRJdGVtcyAtIERvY0ltYWdlcyArIDE7CitzdGF0
aWMgY29uc3QgdW5zaWduZWQgTnVtVW5uYW1lZERvY3VtZW50Q2FjaGVkVHlwZXMgPSBXaW5kb3dO
YW1lZEl0ZW1zIC0gRG9jSW1hZ2VzOwogCiBzdGF0aWMgY29uc3QgQ29sbGVjdGlvblR5cGUgRmly
c3ROb2RlQ29sbGVjdGlvblR5cGUgPSBOb2RlQ2hpbGRyZW47CiBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgTnVtTm9kZUNvbGxlY3Rpb25UeXBlcyA9IEZvcm1Db250cm9scyAtIE5vZGVDaGlsZHJlbiAr
IDE7CiAKK2lubGluZSBib29sIGlzVW5uYW1lZERvY3VtZW50Q2FjaGVkVHlwZShDb2xsZWN0aW9u
VHlwZSB0eXBlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSkgPCBO
dW1Vbm5hbWVkRG9jdW1lbnRDYWNoZWRUeXBlczsKK30KKworaW5saW5lIGJvb2wgaXNOb2RlQ29s
bGVjdGlvblR5cGUoQ29sbGVjdGlvblR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA+PSBG
aXJzdE5vZGVDb2xsZWN0aW9uVHlwZTsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24g
MTIxNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzT3duUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBIVE1MQWxsQ29sbGVjdGlvbjo6Y3JlYXRlKERv
Y3VtZW50KiBkb2N1bWVudCkKK1Bhc3NSZWZQdHI8SFRNTEFsbENvbGxlY3Rpb24+IEhUTUxBbGxD
b2xsZWN0aW9uOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgSFRNTEFsbENvbGxlY3Rpb24oZG9jdW1lbnQpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEhUTUxBbGxDb2xsZWN0aW9uKGRvY3VtZW50KSk7CiB9CiAKIEhUTUxBbGxDb2xsZWN0
aW9uOjpIVE1MQWxsQ29sbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMjE3MDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MQWxsQ29sbGVjdGlv
biA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8SFRNTEFsbENvbGxlY3Rpb24+IGNyZWF0ZShEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBjcmVhdGUoRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFs
IH5IVE1MQWxsQ29sbGVjdGlvbigpOwogCiAgICAgTm9kZSogbmFtZWRJdGVtV2l0aEluZGV4KGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdW5zaWduZWQgaW5kZXgpIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEyMTcwMykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NywxMyArNzcsMjEgQEAgSFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0aW9uKE5vZGUqIGJhcwog
ICAgIEFTU0VSVChtX2Jhc2UpOwogfQogCi1QYXNzT3duUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1M
Q29sbGVjdGlvbjo6Y3JlYXRlKE5vZGUqIGJhc2UsIENvbGxlY3Rpb25UeXBlIHR5cGUpCitQYXNz
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MQ29sbGVjdGlvbjo6Y3JlYXRlKE5vZGUqIGJhc2Us
IENvbGxlY3Rpb25UeXBlIHR5cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MQ29s
bGVjdGlvbihiYXNlLCB0eXBlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MQ29sbGVj
dGlvbihiYXNlLCB0eXBlKSk7CiB9CiAKIEhUTUxDb2xsZWN0aW9uOjp+SFRNTENvbGxlY3Rpb24o
KQogeworICAgIGlmIChpc1VubmFtZWREb2N1bWVudENhY2hlZFR5cGUodHlwZSgpKSkgeworICAg
ICAgICBBU1NFUlQoYmFzZSgpLT5pc0RvY3VtZW50Tm9kZSgpKTsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihiYXNlKCkpLT5yZW1vdmVDYWNoZWRIVE1MQ29sbGVjdGlvbih0aGlzLCB0
eXBlKCkpOworICAgIH0gZWxzZSBpZiAoaXNOb2RlQ29sbGVjdGlvblR5cGUodHlwZSgpKSkgewor
ICAgICAgICBBU1NFUlQoYmFzZSgpLT5pc0VsZW1lbnROb2RlKCkpOworICAgICAgICB0b0VsZW1l
bnQoYmFzZSgpKS0+cmVtb3ZlQ2FjaGVkSFRNTENvbGxlY3Rpb24odGhpcywgdHlwZSgpKTsKKyAg
ICB9IGVsc2UgLy8gSFRNTE5hbWVDb2xsZWN0aW9uIHJlbW92ZXMgY2FjaGUgYnkgaXRzZWxmLgor
ICAgICAgICBBU1NFUlQodHlwZSgpID09IFdpbmRvd05hbWVkSXRlbXMgfHwgdHlwZSgpID09IERv
Y3VtZW50TmFtZWRJdGVtcyk7CiB9CiAKIHZvaWQgSFRNTENvbGxlY3Rpb246OmludmFsaWRhdGVD
YWNoZUlmTmVlZGVkKCkgY29uc3QKQEAgLTE2OSw5ICsxNzcsOSBAQCBFbGVtZW50KiBIVE1MQ29s
bGVjdGlvbjo6aXRlbUFmdGVyKE5vZGUqCiAgICAgaWYgKCFwcmV2aW91cykKICAgICAgICAgY3Vy
cmVudCA9IG1fYmFzZS0+Zmlyc3RDaGlsZCgpOwogICAgIGVsc2UKLSAgICAgICAgY3VycmVudCA9
IG5leHROb2RlT3JTaWJsaW5nKG1fYmFzZSwgcHJldmlvdXMsIGluY2x1ZGVDaGlsZHJlbigpKTsK
KyAgICAgICAgY3VycmVudCA9IG5leHROb2RlT3JTaWJsaW5nKGJhc2UoKSwgcHJldmlvdXMsIGlu
Y2x1ZGVDaGlsZHJlbigpKTsKIAotICAgIGZvciAoOyBjdXJyZW50OyBjdXJyZW50ID0gbmV4dE5v
ZGVPclNpYmxpbmcobV9iYXNlLCBjdXJyZW50LCBpbmNsdWRlQ2hpbGRyZW4oKSkpIHsKKyAgICBm
b3IgKDsgY3VycmVudDsgY3VycmVudCA9IG5leHROb2RlT3JTaWJsaW5nKGJhc2UoKSwgY3VycmVu
dCwgaW5jbHVkZUNoaWxkcmVuKCkpKSB7CiAgICAgICAgIGlmICghY3VycmVudC0+aXNFbGVtZW50
Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY3VycmVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMjE3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxNCArMTAxLDExIEBAIHBy
aXZhdGU6CiAgICAgY29uc3QgdW5zaWduZWQgbV9pbmNsdWRlQ2hpbGRyZW4gOiAxOwogfTsKIAot
Y2xhc3MgSFRNTENvbGxlY3Rpb24gOiBwdWJsaWMgSFRNTENvbGxlY3Rpb25DYWNoZUJhc2Ugewor
Y2xhc3MgSFRNTENvbGxlY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxIVE1MQ29sbGVjdGlvbj4s
IHB1YmxpYyBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8SFRNTENvbGxlY3Rpb24+IGNyZWF0ZShOb2RlKiBiYXNlLCBDb2xsZWN0aW9uVHlw
ZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNyZWF0ZShOb2RlKiBi
YXNlLCBDb2xsZWN0aW9uVHlwZSk7CiAgICAgdmlydHVhbCB+SFRNTENvbGxlY3Rpb24oKTsKIAot
ICAgIHZvaWQgcmVmKCkgeyBtX2Jhc2UtPnJlZigpOyB9Ci0gICAgdm9pZCBkZXJlZigpIHsgbV9i
YXNlLT5kZXJlZigpOyB9Ci0KICAgICAvLyBET00gQVBJCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKQEAg
LTEzNyw3ICsxMzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpdGVtKDApICYmICFpdGVt
KDEpOwogICAgIH0KIAotICAgIE5vZGUqIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0K
KyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlLmdldCgpOyB9CiAKICAgICB2
b2lkIGludmFsaWRhdGVDYWNoZSgpOwogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlSWZOZWVkZWQo
KSBjb25zdDsKQEAgLTE1NCw3ICsxNTEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc0FjY2Vw
dGFibGVFbGVtZW50KEVsZW1lbnQqKSBjb25zdDsKIAotICAgIE5vZGUqIG1fYmFzZTsKKyAgICBS
ZWZQdHI8Tm9kZT4gbV9iYXNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERhdGFMaXN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRGF0YUxpc3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTIxNzAzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGF0YUxpc3RFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNyBAQCBQYXNzUmVmUHRyPEhUTUxEYXRhTGlzdEVsZW1lbnQ+IEhU
TUxEYXRhCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MRGF0YUxpc3RFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBIVE1MRGF0YUxpc3RFbGVtZW50
OjpvcHRpb25zKCkKK1Bhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxEYXRhTGlzdEVsZW1l
bnQ6Om9wdGlvbnMoKQogewogICAgIHJldHVybiBlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihE
YXRhTGlzdE9wdGlvbnMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGF0YUxp
c3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGF0YUxp
c3RFbGVtZW50LmgJKHJldmlzaW9uIDEyMTcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERhdGFMaXN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNz
IEhUTUxEYXRhTGlzdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEUKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MRGF0YUxpc3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAKLSAgICBIVE1MQ29sbGVjdGlvbiogb3B0aW9ucygpOworICAgIFBh
c3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IG9wdGlvbnMoKTsKIAogcHJpdmF0ZToKICAgICBIVE1M
RGF0YUxpc3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDEyMTcwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYsNyAr
NzQ2LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0VHJhbnNsYXRlKGJvb2wgZW5hYgogfQogCiAK
LUhUTUxDb2xsZWN0aW9uKiBIVE1MRWxlbWVudDo6Y2hpbGRyZW4oKQorUGFzc1JlZlB0cjxIVE1M
Q29sbGVjdGlvbj4gSFRNTEVsZW1lbnQ6OmNoaWxkcmVuKCkKIHsKICAgICByZXR1cm4gZW5zdXJl
Q2FjaGVkSFRNTENvbGxlY3Rpb24oTm9kZUNoaWxkcmVuKTsKIH0KQEAgLTk5MSw3ICs5OTEsNyBA
QCB2b2lkIEhUTUxFbGVtZW50OjpzZXRJdGVtVmFsdWVUZXh0KGNvbnN0CiAKIEhUTUxQcm9wZXJ0
aWVzQ29sbGVjdGlvbiogSFRNTEVsZW1lbnQ6OnByb3BlcnRpZXMoKQogewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24qPihlbnN1cmVDYWNoZWRIVE1MQ29s
bGVjdGlvbihJdGVtUHJvcGVydGllcykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MUHJv
cGVydGllc0NvbGxlY3Rpb24qPihlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihJdGVtUHJvcGVy
dGllcykuZ2V0KCkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmgJKHJldmlzaW9uIDEyMTcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBIVE1MRWxlbWVudCA6IHB1
YmxpYyBTdHlsZWRFbGVtZW50CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwog
Ci0gICAgSFRNTENvbGxlY3Rpb24qIGNoaWxkcmVuKCk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gY2hpbGRyZW4oKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3Q7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTIxNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBIVE1MTGVnZW5kRWxlbWVu
dCogSFRNTEZpZWxkU2V0RWxlbWVudDo6CiAgICAgcmV0dXJuIDA7CiB9CiAKLUhUTUxDb2xsZWN0
aW9uKiBIVE1MRmllbGRTZXRFbGVtZW50OjplbGVtZW50cygpCitQYXNzUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBIVE1MRmllbGRTZXRFbGVtZW50OjplbGVtZW50cygpCiB7CiAgICAgcmV0dXJuIGVu
c3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKEZvcm1Db250cm9scyk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAkocmV2aXNpb24gMTIxNzAzKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxGaWVs
ZFNldEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1M
Rm9ybUVsZW1lbnQqKTsKICAgICBIVE1MTGVnZW5kRWxlbWVudCogbGVnZW5kKCkgY29uc3Q7CiAK
LSAgICBIVE1MQ29sbGVjdGlvbiogZWxlbWVudHMoKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBlbGVtZW50cygpOwogCiAgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxl
bWVudCo+JiBhc3NvY2lhdGVkRWxlbWVudHMoKSBjb25zdDsKICAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5j
cHAJKHJldmlzaW9uIDEyMTcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xs
ZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsOSBAQCBIVE1MRm9ybUNvbGxl
Y3Rpb246OkhUTUxGb3JtQ29sbGVjdGlvbihFCiAgICAgQVNTRVJUKGJhc2UtPmhhc1RhZ05hbWUo
Zm9ybVRhZykgfHwgYmFzZS0+aGFzVGFnTmFtZShmaWVsZHNldFRhZykpOwogfQogCi1QYXNzT3du
UHRyPEhUTUxGb3JtQ29sbGVjdGlvbj4gSFRNTEZvcm1Db2xsZWN0aW9uOjpjcmVhdGUoRWxlbWVu
dCogYmFzZSkKK1Bhc3NSZWZQdHI8SFRNTEZvcm1Db2xsZWN0aW9uPiBIVE1MRm9ybUNvbGxlY3Rp
b246OmNyZWF0ZShFbGVtZW50KiBiYXNlKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgSFRN
TEZvcm1Db2xsZWN0aW9uKGJhc2UpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxGb3Jt
Q29sbGVjdGlvbihiYXNlKSk7CiB9CiAKIEhUTUxGb3JtQ29sbGVjdGlvbjo6fkhUTUxGb3JtQ29s
bGVjdGlvbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmgJ
KHJldmlzaW9uIDEyMTcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgUXVhbGlmaWVkTmFt
ZTsKIAogY2xhc3MgSFRNTEZvcm1Db2xsZWN0aW9uIDogcHVibGljIEhUTUxDb2xsZWN0aW9uIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxIVE1MRm9ybUNvbGxlY3Rpb24+IGNyZWF0
ZShFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEZvcm1Db2xsZWN0aW9uPiBj
cmVhdGUoRWxlbWVudCopOwogCiAgICAgdmlydHVhbCB+SFRNTEZvcm1Db2xsZWN0aW9uKCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDEy
MTcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTM1LDcgKzUzNSw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVJ
bWdFbGVtZW50KEgKICAgICByZW1vdmVGcm9tVmVjdG9yKG1faW1hZ2VFbGVtZW50cywgZSk7CiB9
CiAKLUhUTUxDb2xsZWN0aW9uKiBIVE1MRm9ybUVsZW1lbnQ6OmVsZW1lbnRzKCkKK1Bhc3NSZWZQ
dHI8SFRNTENvbGxlY3Rpb24+IEhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudHMoKQogewogICAgIHJl
dHVybiBlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihGb3JtQ29udHJvbHMpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCShyZXZpc2lvbiAxMjE3MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1l
bnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFs
IH5IVE1MRm9ybUVsZW1lbnQoKTsKIAotICAgIEhUTUxDb2xsZWN0aW9uKiBlbGVtZW50cygpOwor
ICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGVsZW1lbnRzKCk7CiAgICAgdm9pZCBnZXRO
YW1lZEVsZW1lbnRzKGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYp
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTIxNzAzKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAg
Ym9vbCBIVE1MTWFwRWxlbWVudDo6bWFwTW91c2VFdmVudChMYXlvdQogCiBIVE1MSW1hZ2VFbGVt
ZW50KiBIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KCkKIHsKLSAgICBIVE1MQ29sbGVjdGlv
biogaW1hZ2VzID0gZG9jdW1lbnQoKS0+aW1hZ2VzKCk7CisgICAgUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiBpbWFnZXMgPSBkb2N1bWVudCgpLT5pbWFnZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBOb2RlKiBjdXJyID0gaW1hZ2VzLT5pdGVtKGkpOyBpKyspIHsKICAgICAgICAgaWYgKCFj
dXJyLT5oYXNUYWdOYW1lKGltZ1RhZykpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyNSw3
ICsxMjUsNyBAQCB2b2lkIEhUTUxNYXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zCiAgICAg
SFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGF0dHJpYnV0ZSk7CiB9CiAKLUhUTUxDb2xsZWN0
aW9uKiBIVE1MTWFwRWxlbWVudDo6YXJlYXMoKQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
SFRNTE1hcEVsZW1lbnQ6OmFyZWFzKCkKIHsKICAgICByZXR1cm4gZW5zdXJlQ2FjaGVkSFRNTENv
bGxlY3Rpb24oTWFwQXJlYXMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFw
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1l
bnQuaAkocmV2aXNpb24gMTIxNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBib29s
IG1hcE1vdXNlRXZlbnQoTGF5b3V0UG9pbnQgbG9jYXRpb24sIGNvbnN0IExheW91dFNpemUmLCBI
aXRUZXN0UmVzdWx0Jik7CiAgICAgCiAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50
KCk7Ci0gICAgSFRNTENvbGxlY3Rpb24qIGFyZWFzKCk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gYXJlYXMoKTsKIAogcHJpdmF0ZToKICAgICBIVE1MTWFwRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE5hbWVDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxOYW1lQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEyMTcwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
MTcgQEAgSFRNTE5hbWVDb2xsZWN0aW9uOjpIVE1MTmFtZUNvbGxlY3Rpb24oRAogewogfQogCitI
VE1MTmFtZUNvbGxlY3Rpb246On5IVE1MTmFtZUNvbGxlY3Rpb24oKQoreworICAgIEFTU0VSVChi
YXNlKCkpOworICAgIEFTU0VSVChiYXNlKCktPmlzRG9jdW1lbnROb2RlKCkpOworICAgIEFTU0VS
VCh0eXBlKCkgPT0gV2luZG93TmFtZWRJdGVtcyB8fCB0eXBlKCkgPT0gRG9jdW1lbnROYW1lZEl0
ZW1zKTsKKyAgICBpZiAodHlwZSgpID09IFdpbmRvd05hbWVkSXRlbXMpCisgICAgICAgIHN0YXRp
Y19jYXN0PERvY3VtZW50Kj4oYmFzZSgpKS0+cmVtb3ZlV2luZG93TmFtZWRJdGVtQ2FjaGUodGhp
cywgbV9uYW1lKTsKKyAgICBlbHNlCisgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oYmFz
ZSgpKS0+cmVtb3ZlRG9jdW1lbnROYW1lZEl0ZW1DYWNoZSh0aGlzLCBtX25hbWUpOworfQorCiBF
bGVtZW50KiBIVE1MTmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcihOb2RlKiBwcmV2aW91cykgY29u
c3QKIHsKICAgICBBU1NFUlQocHJldmlvdXMgIT0gYmFzZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uaAkocmV2aXNpb24gMTIxNzAzKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTEgKzMzLDEzIEBAIGNsYXNzIERvY3VtZW50OwogCiBjbGFzcyBIVE1MTmFtZUNvbGxlY3Rpb24g
OiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PEhUTUxOYW1lQ29sbGVjdGlvbj4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ29sbGVjdGlv
blR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ29sbGVj
dGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MTmFtZUNvbGxlY3Rpb24oZG9jdW1lbnQsIHR5cGUsIG5h
bWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MTmFtZUNvbGxlY3Rpb24oZG9j
dW1lbnQsIHR5cGUsIG5hbWUpKTsKICAgICB9CiAKKyAgICB+SFRNTE5hbWVDb2xsZWN0aW9uKCk7
CisKIHByaXZhdGU6CiAgICAgSFRNTE5hbWVDb2xsZWN0aW9uKERvY3VtZW50KiwgQ29sbGVjdGlv
blR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEyMTcwMykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsOSArMzMsOSBAQCBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OkhUTUxPcHRpb25z
Q29sbGVjCiAgICAgQVNTRVJUKHNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdFRh
ZykpOwogfQogCi1QYXNzT3duUHRyPEhUTUxPcHRpb25zQ29sbGVjdGlvbj4gSFRNTE9wdGlvbnND
b2xsZWN0aW9uOjpjcmVhdGUoRWxlbWVudCogc2VsZWN0KQorUGFzc1JlZlB0cjxIVE1MT3B0aW9u
c0NvbGxlY3Rpb24+IEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6Y3JlYXRlKEVsZW1lbnQqIHNlbGVj
dCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhUTUxPcHRpb25zQ29sbGVjdGlvbihzZWxl
Y3QpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxPcHRpb25zQ29sbGVjdGlvbihzZWxl
Y3QpKTsKIH0KIAogdm9pZCBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmFkZChQYXNzUmVmUHRyPEhU
TUxPcHRpb25FbGVtZW50PiBlbGVtZW50LCBFeGNlcHRpb25Db2RlICZlYykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAkocmV2aXNpb24gMTIxNzAz
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBj
bGFzcyBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEhUTUxPcHRpb25zQ29sbGVjdGlvbj4gY3JlYXRl
KEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+
IGNyZWF0ZShFbGVtZW50Kik7CiAKICAgICB2b2lkIGFkZChQYXNzUmVmUHRyPEhUTUxPcHRpb25F
bGVtZW50PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8SFRNTE9w
dGlvbkVsZW1lbnQ+LCBpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaAkocmV2aXNpb24gMTIx
NzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogCiBj
bGFzcyBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24gOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbj4g
Y3JlYXRlKE5vZGUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUHJvcGVydGllc0NvbGxl
Y3Rpb24+IGNyZWF0ZShOb2RlKik7CiAgICAgdmlydHVhbCB+SFRNTFByb3BlcnRpZXNDb2xsZWN0
aW9uKCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjE3MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUwLDE0ICszNTAsMTQgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6Y2hpbGRT
aG91bGRDcmVhdAogICAgIHJldHVybiBjaGlsZENvbnRleHQuaXNPblVwcGVyRW5jYXBzdWxhdGlv
bkJvdW5kYXJ5KCkgJiYgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6Y2hpbGRTaG91
bGRDcmVhdGVSZW5kZXJlcihjaGlsZENvbnRleHQpOwogfQogCi1IVE1MQ29sbGVjdGlvbiogSFRN
TFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkT3B0aW9ucygpCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRPcHRpb25zKCkKIHsKICAgICByZXR1cm4g
ZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oU2VsZWN0ZWRPcHRpb25zKTsKIH0KIAotSFRNTE9w
dGlvbnNDb2xsZWN0aW9uKiBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9ucygpCitQYXNzUmVmUHRy
PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4gSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbnMoKQogewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24qPihlbnN1cmVDYWNo
ZWRIVE1MQ29sbGVjdGlvbihTZWxlY3RPcHRpb25zKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KGVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKFNlbGVj
dE9wdGlvbnMpLmdldCgpKTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlz
dEl0ZW1TZWxlY3RlZFN0YXRlcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0
RWxlbWVudC5oCShyZXZpc2lvbiAxMjE3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDggKzYyLDggQEAgcHVibGljOgog
ICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5n
Jik7CiAKLSAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIG9wdGlvbnMoKTsKLSAgICBIVE1MQ29s
bGVjdGlvbiogc2VsZWN0ZWRPcHRpb25zKCk7CisgICAgUGFzc1JlZlB0cjxIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24+IG9wdGlvbnMoKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBzZWxl
Y3RlZE9wdGlvbnMoKTsKIAogICAgIHZvaWQgb3B0aW9uRWxlbWVudENoaWxkcmVuQ2hhbmdlZCgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDEyMTcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2MCwxMiArNTYwLDEyIEBAIGJvb2wgSFRNTFRhYmxlRWxlbWVu
dDo6aXNVUkxBdHRyaWJ1dGUoY28KICAgICByZXR1cm4gYXR0cmlidXRlLm5hbWUoKSA9PSBiYWNr
Z3JvdW5kQXR0ciB8fCBIVE1MRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0K
IAotSFRNTENvbGxlY3Rpb24qIEhUTUxUYWJsZUVsZW1lbnQ6OnJvd3MoKQorUGFzc1JlZlB0cjxI
VE1MQ29sbGVjdGlvbj4gSFRNTFRhYmxlRWxlbWVudDo6cm93cygpCiB7CiAgICAgcmV0dXJuIGVu
c3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKFRhYmxlUm93cyk7CiB9CiAKLUhUTUxDb2xsZWN0aW9u
KiBIVE1MVGFibGVFbGVtZW50Ojp0Qm9kaWVzKCkKK1Bhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+
IEhUTUxUYWJsZUVsZW1lbnQ6OnRCb2RpZXMoKQogewogICAgIHJldHVybiBlbnN1cmVDYWNoZWRI
VE1MQ29sbGVjdGlvbihUYWJsZVRCb2RpZXMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGFibGVFbGVtZW50LmgJKHJldmlzaW9uIDEyMTcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRhYmxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw4IEBAIHB1
YmxpYzoKICAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpbnNlcnRSb3coaW50IGluZGV4LCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBkZWxldGVSb3coaW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJik7CiAKLSAgICBIVE1MQ29sbGVjdGlvbiogcm93cygpOwotICAgIEhUTUxDb2xsZWN0aW9u
KiB0Qm9kaWVzKCk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gcm93cygpOworICAg
IFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHRCb2RpZXMoKTsKIAogICAgIFN0cmluZyBydWxl
cygpIGNvbnN0OwogICAgIFN0cmluZyBzdW1tYXJ5KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAJKHJldmlzaW9uIDEyMTcwMykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBpbnQgSFRNTFRhYmxlUm93RWxlbWVudDo6c2VjdGlvblJv
d0luZGV4CiAKIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEhUTUxUYWJsZVJvd0VsZW1lbnQ6Omlu
c2VydENlbGwoaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBIVE1MQ29sbGVj
dGlvbiogY2hpbGRyZW4gPSBjZWxscygpOworICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY2hp
bGRyZW4gPSBjZWxscygpOwogICAgIGludCBudW1DZWxscyA9IGNoaWxkcmVuID8gY2hpbGRyZW4t
Pmxlbmd0aCgpIDogMDsKICAgICBpZiAoaW5kZXggPCAtMSB8fCBpbmRleCA+IG51bUNlbGxzKSB7
CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CkBAIC0xNDMsNyArMTQzLDcgQEAgUGFzc1Jl
ZlB0cjxIVE1MRWxlbWVudD4gSFRNTFRhYmxlUm93RWxlbQogCiB2b2lkIEhUTUxUYWJsZVJvd0Vs
ZW1lbnQ6OmRlbGV0ZUNlbGwoaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBI
VE1MQ29sbGVjdGlvbiogY2hpbGRyZW4gPSBjZWxscygpOworICAgIFJlZlB0cjxIVE1MQ29sbGVj
dGlvbj4gY2hpbGRyZW4gPSBjZWxscygpOwogICAgIGludCBudW1DZWxscyA9IGNoaWxkcmVuID8g
Y2hpbGRyZW4tPmxlbmd0aCgpIDogMDsKICAgICBpZiAoaW5kZXggPT0gLTEpCiAgICAgICAgIGlu
ZGV4ID0gbnVtQ2VsbHMtMTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEhUTUxUYWJsZVJvd0Vs
ZW1lbnQ6OmRlbGV0ZUNlbGwoaW50CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiB9CiAK
LUhUTUxDb2xsZWN0aW9uKiBIVE1MVGFibGVSb3dFbGVtZW50OjpjZWxscygpCitQYXNzUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiBIVE1MVGFibGVSb3dFbGVtZW50OjpjZWxscygpCiB7CiAgICAgcmV0
dXJuIGVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKFRSQ2VsbHMpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmgJKHJldmlzaW9uIDEyMTcwMykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBp
bnNlcnRDZWxsKGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgZGVsZXRlQ2Vs
bChpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIEhUTUxDb2xsZWN0aW9uKiBjZWxs
cygpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNlbGxzKCk7CiAgICAgdm9pZCBz
ZXRDZWxscyhIVE1MQ29sbGVjdGlvbiAqLCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNw
cAkocmV2aXNpb24gMTIxNzAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dz
Q29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw5ICsxNTcsOSBAQCBIVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbjo6SFRNTFRhYmxlUm93c0NvCiAgICAgQVNTRVJUKHRhYmxlLT5oYXNU
YWdOYW1lKHRhYmxlVGFnKSk7CiB9CiAKLVBhc3NPd25QdHI8SFRNTFRhYmxlUm93c0NvbGxlY3Rp
b24+IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpjcmVhdGUoRWxlbWVudCogdGFibGUpCitQYXNz
UmVmUHRyPEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uPiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6
Y3JlYXRlKEVsZW1lbnQqIHRhYmxlKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgSFRNTFRh
YmxlUm93c0NvbGxlY3Rpb24odGFibGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxU
YWJsZVJvd3NDb2xsZWN0aW9uKHRhYmxlKSk7CiB9CiAKIEVsZW1lbnQqIEhUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uOjppdGVtQWZ0ZXIoTm9kZSogcHJldmlvdXMpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMjE3
MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgSFRNTFRhYmxlUm93RWxlbWVudDsK
IAogY2xhc3MgSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24gOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
PiBjcmVhdGUoRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uPiBjcmVhdGUoRWxlbWVudCopOwogCiAgICAgc3RhdGljIEhUTUxUYWJsZVJvd0Vs
ZW1lbnQqIHJvd0FmdGVyKEhUTUxUYWJsZUVsZW1lbnQqLCBIVE1MVGFibGVSb3dFbGVtZW50Kik7
CiAgICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1lbnQqIGxhc3RSb3coSFRNTFRhYmxlRWxlbWVu
dCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDEyMTcwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIFN0
eWxlUHJvcGVydHlTZXQqIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW4KIFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjppbnNlcnRSb3coaW50IGluZGV4LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8SFRNTFRhYmxlUm93RWxlbWVudD4gcm93Owot
ICAgIEhUTUxDb2xsZWN0aW9uKiBjaGlsZHJlbiA9IHJvd3MoKTsKKyAgICBSZWZQdHI8SFRNTENv
bGxlY3Rpb24+IGNoaWxkcmVuID0gcm93cygpOwogICAgIGludCBudW1Sb3dzID0gY2hpbGRyZW4g
PyAoaW50KWNoaWxkcmVuLT5sZW5ndGgoKSA6IDA7CiAgICAgaWYgKGluZGV4IDwgLTEgfHwgaW5k
ZXggPiBudW1Sb3dzKQogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOyAvLyBwZXIgdGhlIERP
TQpAQCAtODEsNyArODEsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBIVE1MVGFibGVTZWN0
aW9uCiAKIHZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmRlbGV0ZVJvdyhpbnQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEhUTUxDb2xsZWN0aW9uKiBjaGlsZHJlbiA9IHJv
d3MoKTsKKyAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNoaWxkcmVuID0gcm93cygpOwogICAg
IGludCBudW1Sb3dzID0gY2hpbGRyZW4gPyAoaW50KWNoaWxkcmVuLT5sZW5ndGgoKSA6IDA7CiAg
ICAgaWYgKGluZGV4ID09IC0xKQogICAgICAgICBpbmRleCA9IG51bVJvd3MgLSAxOwpAQCAtMTQ1
LDcgKzE0NSw3IEBAIHZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldFZBbGlnbigKICAg
ICBzZXRBdHRyaWJ1dGUodmFsaWduQXR0ciwgdmFsdWUpOwogfQogCi1IVE1MQ29sbGVjdGlvbiog
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnJvd3MoKQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnJvd3MoKQogewogICAgIHJldHVybiBlbnN1cmVD
YWNoZWRIVE1MQ29sbGVjdGlvbihUU2VjdGlvblJvd3MpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMTIxNzAzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdkFsaWduKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRWQWxpZ24oY29uc3QgU3RyaW5nJik7CiAKLSAgICBIVE1MQ29sbGVj
dGlvbiogcm93cygpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHJvd3MoKTsKIAog
cHJpdmF0ZToKICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150514</attachid>
            <date>2012-07-02 18:43:44 -0700</date>
            <delta_ts>2012-07-07 12:21:54 -0700</delta_ts>
            <desc>Fixed builds</desc>
            <filename>bug-90414-20120702184806.patch</filename>
            <type>text/plain</type>
            <size>52962</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NyBAQAorMjAxMi0wNy0wMiAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBNYWtlIEhUTUxDb2xsZWN0aW9u
IFJlZkNvdW50ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkwNDE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWFrZSBIVE1MQ29sbGVjdGlvbiByZWYgY291bnRlZCBhbmQgc3RvcCBmb3J3YXJkaW5nIHJl
ZiBhbmQgZGVyZWYgdG8gaXRzIG93bmVyIChtX2Jhc2UpCisgICAgICAgIHNvIGFzIHRvIGFsaWdu
IGl0cyBsaWZlIHRpbWUgbWFuYWdlbWVudCB0byB0aGF0IG9mIER5bmFtaWNOb2RlTGlzdC4KKwor
ICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCBlYWNoIEhUTUxDb2xsZWN0aW9uIGlzIG93bmVkIGJ5
IEpTQy9WOCBhbmQgbV9jYWNoZWRDb2xsZWN0aW9ucyBpbiBFbGVtZW50UmFyZURhdGEKKyAgICAg
ICAgYW5kIG1fY29sbGVjdGlvbiBpbiBEb2N1bWVudCBtZXJlbHkgaG9sZCByYXcgcG9pbnRlcnMg
Zm9yIHRoZSBjYWNoaW5nIHB1cnBvc2UuIFRoZXNlIHJhdyBwb2ludGVycworICAgICAgICBhcmUg
Y2xlYXJlZCB3aGVuIGVhY2ggSFRNTENvbGxlY3Rpb24gaXMgZGVzdHJ1Y3RlZCB2aWEgY29ycmVz
cG9uZGluZyByZW1vdmVDYWNoZWRIVE1MQ29sbGVjdGlvbidzLgorCisgICAgICAgIEluIHRoZSBk
ZXN0cnVjdG9yIG9mIEhUTUxDb2xsZWN0aW9uLCB3ZSB1c2UgdGhlIENvbGxlY3Rpb25UeXBlIHRv
IGRlY2lkZSB3aGV0aGVyIGJhc2UoKSBpcyBhbiBlbGVtZW50CisgICAgICAgIG9yIGFuIGRvY3Vt
ZW50LCBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgcmVtb3ZlQ2FjaGVkSFRNTENvbGxlY3Rpb24g
ZXhjZXB0IGZvciBXaW5kb3dOYW1lZEl0ZW1zIGFuZAorICAgICAgICBEb2N1bWVudE5hbWVkSXRl
bXMuIEZvciB0aG9zZSB0d28gdHlwZXMsIHdlIG5lZWQgdG8ga25vdyB0aGUgYXRvbWljIHN0cmlu
ZyBuYW1lIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICB0aGUgY29sbGVjdGlvbiBqdXN0IGxpa2Ug
bWFueSBEeW5hbWljTm9kZUxpc3QgdG8gcmVtb3ZlIHRoZSBjYWNoZSwgc28gd2UgbGV0IEhUTUxO
YW1lQ29sbGVjdGlvbgorICAgICAgICBkaXJlY3RseSBjYWxsIHJlbW92ZVdpbmRvd05hbWVkSXRl
bUNhY2hlIGFuZCByZW1vdmVEb2N1bWVudE5hbWVkSXRlbUNhY2hlLiBXZSdsbCBjbGVhbnVwIHRo
aXMgbWVzcyBpbgorICAgICAgICBhIGZvbGxvdyB1cCBwYXRjaCB1c2luZyBhIG5pY2UgY2xhc3Mg
aGllcmFyY2h5IGFuZCB2aXJ0dWFsIGRlc3RydWN0b3JzLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldERvY3VtZW50TGlua3MpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5hbWVk
SXRlbUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdpbmRvdzo6bmFtZWRQcm9wZXJ0eUdldHRlcik6CisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6b3BlblNlYXJjaERlc2NyaXB0aW9uVVJMKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNhY2hlZENv
bGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZUNhY2hlZEhUTUxD
b2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbWFnZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFwcGxldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmVtYmVkcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cGx1Z2lucyk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6b2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2NyaXB0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bGlua3MpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjphbmNob3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OndpbmRvd05hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6cmVtb3ZlV2luZG93TmFtZWRJdGVtQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnJlbW92ZURvY3VtZW50TmFtZWRJdGVtQ2FjaGUpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5oOgorICAgICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6ZW5zdXJlQ2FjaGVkSFRNTENvbGxl
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlQ2FjaGVkSFRNTENvbGxl
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAg
ICAgICAgKEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAg
ICAgKEVsZW1lbnRSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UmFyZURhdGE6
OmNhY2hlZEhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0
YTo6cmVtb3ZlQ2FjaGVkSFRNTENvbGxlY3Rpb24pOgorICAgICAgICAqIGh0bWwvQ29sbGVjdGlv
blR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmUpOiBTaW5jZSBXaW5kb3dOYW1lZEl0ZW1zIGlzIG5v
dCBhIHBhcnQgb2YgVW5uYW1lZERvY3VtZW50Q2FjaGVkVHlwZSwgd2Ugc2hvdWxkbid0IGFkZGQg
MS4KKyAgICAgICAgKFdlYkNvcmU6OmlzVW5uYW1lZERvY3VtZW50Q2FjaGVkVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc05vZGVDb2xsZWN0aW9uVHlwZSk6CisgICAgICAgICogaHRtbC9IVE1M
QWxsQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQWxsQ29sbGVjdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmg6CisgICAgICAgIChI
VE1MQWxsQ29sbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb2xsZWN0aW9uOjp+SFRNTENvbGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENvbGxlY3Rpb246Oml0ZW1BZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVjdGlv
bi5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2U6OkhUTUxDb2xs
ZWN0aW9uQ2FjaGVCYXNlKToKKyAgICAgICAgKEhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpiYXNlKToKKyAgICAgICAgKiBodG1sL0hUTUxEYXRhTGlz
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERhdGFMaXN0RWxlbWVudDo6b3B0
aW9ucyk6CisgICAgICAgICogaHRtbC9IVE1MRGF0YUxpc3RFbGVtZW50Lmg6CisgICAgICAgIChI
VE1MRGF0YUxpc3RFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpjaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6cHJvcGVydGllcyk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5o
OgorICAgICAgICAoSFRNTEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjplbGVtZW50
cyk6CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50Lmg6CisgICAgICAgIChIVE1M
RmllbGRTZXRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uaDoKKyAgICAgICAgKEhUTUxGb3JtQ29sbGVjdGlv
bik6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50OjplbGVtZW50cyk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuaDoKKyAgICAgICAgKEhUTUxGb3JtRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1M
TWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6aW1hZ2VF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50OjphcmVhcyk6CisgICAg
ICAgICogaHRtbC9IVE1MTWFwRWxlbWVudC5oOgorICAgICAgICAoSFRNTE1hcEVsZW1lbnQpOgor
ICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxOYW1lQ29sbGVjdGlvbjo6SFRNTE5hbWVDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxOYW1lQ29sbGVjdGlvbjo6fkhUTUxOYW1lQ29sbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE5hbWVDb2xsZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSFRNTE5hbWVD
b2xsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKEhUTUxPcHRpb25zQ29s
bGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaDoKKyAg
ICAgICAgKEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2Vs
ZWN0ZWRPcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpvcHRp
b25zKToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50Lmg6CisgICAgICAgIChIVE1M
U2VsZWN0RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnJvd3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRhYmxlRWxlbWVudDo6dEJvZGllcyk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVF
bGVtZW50Lmg6CisgICAgICAgIChIVE1MVGFibGVFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hU
TUxUYWJsZVJvd0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxl
bWVudDo6aW5zZXJ0Q2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50
OjpkZWxldGVDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQ6OmNl
bGxzKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuaDoKKyAgICAgICAgKEhU
TUxUYWJsZVJvd0VsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUm93c0NvbGxlY3Rpb246OmNyZWF0
ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oOgorICAgICAgICAo
SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24pOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6
Omluc2VydFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6
ZGVsZXRlUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ojpy
b3dzKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lmg6CisgICAgICAg
IChIVE1MVGFibGVTZWN0aW9uRWxlbWVudCk6CisKIDIwMTItMDctMDIgIEpvc2h1YSBCZWxsICA8
anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJREwgb3ZlcmxvYWRzIHNob3VsZCBub3Qg
dHJlYXQgd3JhcHBlciB0eXBlcyBhcyBudWxsYWJsZSBieSBkZWZhdWx0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
MjQsNyArMjQyNCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIK
IHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0RG9jdW1lbnRMaW5rcyhBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJlc3VsdCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpOwotICAgIEhUTUxDb2xsZWN0aW9uKiBsaW5rcyA9IGRv
Y3VtZW50LT5saW5rcygpOworICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gbGlua3MgPSBkb2N1
bWVudC0+bGlua3MoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBOb2RlKiBjdXJyID0gbGlu
a3MtPml0ZW0oaSk7IGkrKykgewogICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IGN1cnItPnJl
bmRlcmVyKCk7CiAgICAgICAgIGlmIChvYmopIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDEyMTcxNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDEwICsxMTYsMTAgQEAgc3RhdGljIEpTVmFsdWUgbmFtZWRJdGVtR2V0
dGVyKEV4ZWNTdGF0ZQogICAgIEFTU0VSVChkb2N1bWVudCk7CiAgICAgQVNTRVJUKGRvY3VtZW50
LT5pc0hUTUxEb2N1bWVudCgpKTsKIAotICAgIEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0g
ZG9jdW1lbnQtPndpbmRvd05hbWVkSXRlbXMocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJv
cGVydHlOYW1lKSk7CisgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gZG9j
dW1lbnQtPndpbmRvd05hbWVkSXRlbXMocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVy
dHlOYW1lKSk7CiAgICAgaWYgKGNvbGxlY3Rpb24tPmhhc0V4YWN0bHlPbmVJdGVtKCkpCiAgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmosIGNvbGxlY3Rpb24tPml0ZW0oMCkpOwotICAg
IHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmosIGNvbGxlY3Rpb24pOworICAgIHJldHVybiB0b0pT
KGV4ZWMsIHRoaXNPYmosIFdURjo6Z2V0UHRyKGNvbGxlY3Rpb24pKTsKIH0KIAogYm9vbCBKU0RP
TVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAxMjE3MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgSlNW
YWx1ZSBKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcihFeGVjUwogICAgIEpTSFRNTERvY3VtZW50
KiB0aGlzT2JqID0ganNDYXN0PEpTSFRNTERvY3VtZW50Kj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsK
ICAgICBIVE1MRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4o
dGhpc09iai0+aW1wbCgpKTsKIAotICAgIEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gZG9j
dW1lbnQtPmRvY3VtZW50TmFtZWRJdGVtcyhwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9w
ZXJ0eU5hbWUpKTsKKyAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBkb2N1
bWVudC0+ZG9jdW1lbnROYW1lZEl0ZW1zKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3Bl
cnR5TmFtZSkpOwogCiAgICAgaWYgKGNvbGxlY3Rpb24tPmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC03Nyw3ICs3Nyw3IEBAIEpTVmFsdWUgSlNIVE1MRG9jdW1l
bnQ6Om5hbWVHZXR0ZXIoRXhlY1MKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+
Z2xvYmFsT2JqZWN0KCksIG5vZGUpOwogICAgIH0gCiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCB0
aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbik7CisgICAgcmV0dXJuIHRvSlMoZXhl
YywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGNvbGxlY3Rpb24pKTsKIH0K
IAogLy8gQ3VzdG9tIGF0dHJpYnV0ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIx
NzE0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIwLDExICs1MjAsMTEgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4RE9NV2luZG93OjpuYW1lZAogCiAgICAgaWYgKGRvYyAmJiBkb2MtPmlzSFRN
TERvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRv
YyktPmhhc05hbWVkSXRlbShwcm9wTmFtZS5pbXBsKCkpIHx8IGRvYy0+aGFzRWxlbWVudFdpdGhJ
ZChwcm9wTmFtZS5pbXBsKCkpKSB7Ci0gICAgICAgICAgICBIVE1MQ29sbGVjdGlvbiogaXRlbXMg
PSBkb2MtPndpbmRvd05hbWVkSXRlbXMocHJvcE5hbWUpOworICAgICAgICAgICAgUmVmUHRyPEhU
TUxDb2xsZWN0aW9uPiBpdGVtcyA9IGRvYy0+d2luZG93TmFtZWRJdGVtcyhwcm9wTmFtZSk7CiAg
ICAgICAgICAgICBpZiAoIWl0ZW1zLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
aXRlbXMtPmhhc0V4YWN0bHlPbmVJdGVtKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
b1Y4KGl0ZW1zLT5pdGVtKDApLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRvVjgoaXRlbXMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9WOChpdGVtcy5yZWxlYXNlKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTIxNzE0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERv
Y3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhIVE1MRG9jdW1lbnQ6OkdlCiAgICAgaWYgKCFodG1sRG9jdW1lbnQt
Pmhhc05hbWVkSXRlbShrZXkuaW1wbCgpKSAmJiAhaHRtbERvY3VtZW50LT5oYXNFeHRyYU5hbWVk
SXRlbShrZXkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
OwogCi0gICAgSFRNTENvbGxlY3Rpb24qIGl0ZW1zID0gaHRtbERvY3VtZW50LT5kb2N1bWVudE5h
bWVkSXRlbXMoa2V5KTsKKyAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGl0ZW1zID0gaHRtbERv
Y3VtZW50LT5kb2N1bWVudE5hbWVkSXRlbXMoa2V5KTsKICAgICBpZiAoaXRlbXMtPmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogCkBAIC05Nyw3ICs5
Nyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxEb2N1bWVudDo6R2UKICAgICAgICAg
cmV0dXJuIHRvVjgobm9kZSwgaXNvbGF0ZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRvVjgoaXRl
bXMsIGlzb2xhdGUpOworICAgIHJldHVybiB0b1Y4KGl0ZW1zLnJlbGVhc2UoKSwgaXNvbGF0ZSk7
CiB9CiAKIC8vIEhUTUxEb2N1bWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1Nyw2ICs1NTcsOSBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJh
bWUqIGZyYW1lLCBjb25zdCBLCiAgICAgc3RhdGljIGludCBkb2NJRCA9IDA7CiAgICAgbV9kb2NJ
RCA9IGRvY0lEKys7CiAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJB
WV9MRU5HVEgobV9jb2xsZWN0aW9ucyk7IGkrKykKKyAgICAgICAgbV9jb2xsZWN0aW9uc1tpXSA9
IDA7CisKICAgICBJbnNwZWN0b3JDb3VudGVyczo6aW5jcmVtZW50Q291bnRlcihJbnNwZWN0b3JD
b3VudGVyczo6RG9jdW1lbnRDb3VudGVyKTsKIH0KIApAQCAtNDU3MSw3ICs0NTc0LDcgQEAgS1VS
TCBEb2N1bWVudDo6b3BlblNlYXJjaERlc2NyaXB0aW9uVVJMKAogICAgIGlmICghaGVhZCgpKQog
ICAgICAgICByZXR1cm4gS1VSTCgpOwogCi0gICAgSFRNTENvbGxlY3Rpb24qIGNoaWxkcmVuID0g
aGVhZCgpLT5jaGlsZHJlbigpOworICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY2hpbGRyZW4g
PSBoZWFkKCktPmNoaWxkcmVuKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgTm9kZSogY2hp
bGQgPSBjaGlsZHJlbi0+aXRlbShpKTsgaSsrKSB7CiAgICAgICAgIGlmICghY2hpbGQtPmhhc1Rh
Z05hbWUobGlua1RhZykpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ2ODksODEgKzQ2OTIs
MTEzIEBAIGJvb2wgRG9jdW1lbnQ6Omhhc1NWR1Jvb3ROb2RlKCkgY29uc3QKIH0KICNlbmRpZgog
Ci1IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6OmNhY2hlZENvbGxlY3Rpb24oQ29sbGVjdGlvblR5
cGUgdHlwZSkKKy8vIEZJWE1FOiBUaGlzIGNhY2hpbmcgbWVjaGFuaXNtIHNob3VsZCBiZSBtZXJn
ZWQgdGhhdCBvZiBEeW5hbWljTm9kZUxpc3QgaW4gTm9kZVJhcmVEYXRhLgorUGFzc1JlZlB0cjxI
VE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmNhY2hlZENvbGxlY3Rpb24oQ29sbGVjdGlvblR5cGUg
dHlwZSkKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpIDwgTnVtVW5u
YW1lZERvY3VtZW50Q2FjaGVkVHlwZXMpOwotICAgIGlmICghbV9jb2xsZWN0aW9uc1t0eXBlXSkK
LSAgICAgICAgbV9jb2xsZWN0aW9uc1t0eXBlXSA9IEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUodGhp
cywgdHlwZSk7Ci0gICAgcmV0dXJuIG1fY29sbGVjdGlvbnNbdHlwZV0uZ2V0KCk7CisgICAgaWYg
KG1fY29sbGVjdGlvbnNbdHlwZV0pCisgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb25zW3R5cGVd
OworCisgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uOworICAgIGlmICh0eXBl
ID09IERvY0FsbCkKKyAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxBbGxDb2xsZWN0aW9uOjpjcmVh
dGUodGhpcyk7CisgICAgZWxzZQorICAgICAgICBjb2xsZWN0aW9uID0gSFRNTENvbGxlY3Rpb246
OmNyZWF0ZSh0aGlzLCB0eXBlKTsKKyAgICBtX2NvbGxlY3Rpb25zW3R5cGVdID0gY29sbGVjdGlv
bi5nZXQoKTsKKworICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbGVhc2UoKTsKIH0KIAotSFRNTENv
bGxlY3Rpb24qIERvY3VtZW50OjppbWFnZXMoKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlQ2FjaGVk
SFRNTENvbGxlY3Rpb24oSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIENvbGxlY3Rpb25UeXBl
IHR5cGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChjb2xsZWN0aW9uLCBtX2NvbGxlY3Rpb25zW3R5
cGVdID09IGNvbGxlY3Rpb24pOworICAgIG1fY29sbGVjdGlvbnNbdHlwZV0gPSAwOworfQorCitQ
YXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6aW1hZ2VzKCkKIHsKICAgICByZXR1
cm4gY2FjaGVkQ29sbGVjdGlvbihEb2NJbWFnZXMpOwogfQogCi1IVE1MQ29sbGVjdGlvbiogRG9j
dW1lbnQ6OmFwcGxldHMoKQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmFw
cGxldHMoKQogewogICAgIHJldHVybiBjYWNoZWRDb2xsZWN0aW9uKERvY0FwcGxldHMpOwogfQog
Ci1IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6OmVtYmVkcygpCitQYXNzUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBEb2N1bWVudDo6ZW1iZWRzKCkKIHsKICAgICByZXR1cm4gY2FjaGVkQ29sbGVjdGlv
bihEb2NFbWJlZHMpOwogfQogCi1IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6OnBsdWdpbnMoKQor
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OnBsdWdpbnMoKQogewogICAgIC8v
IFRoaXMgaXMgYW4gYWxpYXMgZm9yIGVtYmVkcygpIHJlcXVpcmVkIGZvciB0aGUgSlMgRE9NIGJp
bmRpbmdzLgogICAgIHJldHVybiBjYWNoZWRDb2xsZWN0aW9uKERvY0VtYmVkcyk7CiB9CiAKLUhU
TUxDb2xsZWN0aW9uKiBEb2N1bWVudDo6b2JqZWN0cygpCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiBEb2N1bWVudDo6b2JqZWN0cygpCiB7CiAgICAgcmV0dXJuIGNhY2hlZENvbGxlY3Rpb24o
RG9jT2JqZWN0cyk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDo6c2NyaXB0cygpCitQ
YXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6c2NyaXB0cygpCiB7CiAgICAgcmV0
dXJuIGNhY2hlZENvbGxlY3Rpb24oRG9jU2NyaXB0cyk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBE
b2N1bWVudDo6bGlua3MoKQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6Omxp
bmtzKCkKIHsKICAgICByZXR1cm4gY2FjaGVkQ29sbGVjdGlvbihEb2NMaW5rcyk7CiB9CiAKLUhU
TUxDb2xsZWN0aW9uKiBEb2N1bWVudDo6Zm9ybXMoKQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gRG9jdW1lbnQ6OmZvcm1zKCkKIHsKICAgICByZXR1cm4gY2FjaGVkQ29sbGVjdGlvbihEb2NG
b3Jtcyk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDo6YW5jaG9ycygpCitQYXNzUmVm
UHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6YW5jaG9ycygpCiB7CiAgICAgcmV0dXJuIGNh
Y2hlZENvbGxlY3Rpb24oRG9jQW5jaG9ycyk7CiB9CiAKLUhUTUxBbGxDb2xsZWN0aW9uKiBEb2N1
bWVudDo6YWxsKCkKK1Bhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50OjphbGwoKQog
ewotICAgIGlmICghbV9jb2xsZWN0aW9uc1tEb2NBbGxdKQotICAgICAgICBtX2NvbGxlY3Rpb25z
W0RvY0FsbF0gPSBIVE1MQWxsQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MQWxsQ29sbGVjdGlvbio+KG1fY29sbGVjdGlvbnNbRG9jQWxsXS5nZXQo
KSk7CisgICAgcmV0dXJuIGNhY2hlZENvbGxlY3Rpb24oRG9jQWxsKTsKK30KKworUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OndpbmRvd05hbWVkSXRlbXMoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKQoreworICAgIE5hbWVkQ29sbGVjdGlvbk1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fd2luZG93TmFtZWRJdGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDApOworICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKworICAgIFJlZlB0cjxIVE1MTmFtZUNvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBIVE1MTmFt
ZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBXaW5kb3dOYW1lZEl0ZW1zLCBuYW1lKTsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGNvbGxlY3Rpb24uZ2V0KCk7CisgICAgcmV0dXJuIGNv
bGxlY3Rpb24ucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1
bWVudDo6ZG9jdW1lbnROYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKK3sKKyAg
ICBOYW1lZENvbGxlY3Rpb25NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2RvY3VtZW50TmFtZWRJ
dGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDApOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIFJlZlB0cjxI
VE1MTmFtZUNvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0
ZSh0aGlzLCBEb2N1bWVudE5hbWVkSXRlbXMsIG5hbWUpOworICAgIHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kID0gY29sbGVjdGlvbi5nZXQoKTsKKyAgICByZXR1cm4gY29sbGVjdGlvbi5yZWxlYXNl
KCk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDo6d2luZG93TmFtZWRJdGVtcyhjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpCisvLyBGSVhNRTogVGhpcyBjYWNoaW5nIG1lY2hhbmlzbSBz
aG91bGQgYmUgbWVyZ2VkIHRoYXQgb2YgRHluYW1pY05vZGVMaXN0IGluIE5vZGVSYXJlRGF0YS4K
K3ZvaWQgRG9jdW1lbnQ6OnJlbW92ZVdpbmRvd05hbWVkSXRlbUNhY2hlKEhUTUxDb2xsZWN0aW9u
KiBjb2xsZWN0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgT3duUHRyPEhU
TUxOYW1lQ29sbGVjdGlvbj4mIGNvbGxlY3Rpb24gPSBtX3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rp
b25zLmFkZChuYW1lLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnNlY29uZDsKLSAgICBpZiAo
IWNvbGxlY3Rpb24pCi0gICAgICAgIGNvbGxlY3Rpb24gPSBIVE1MTmFtZUNvbGxlY3Rpb246OmNy
ZWF0ZSh0aGlzLCBXaW5kb3dOYW1lZEl0ZW1zLCBuYW1lKTsKLSAgICByZXR1cm4gY29sbGVjdGlv
bi5nZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbGxlY3Rpb24sIG1fd2luZG93TmFtZWRJdGVt
Q29sbGVjdGlvbnMuZ2V0KG5hbWUpID09IGNvbGxlY3Rpb24pOworICAgIG1fd2luZG93TmFtZWRJ
dGVtQ29sbGVjdGlvbnMucmVtb3ZlKG5hbWUpOwogfQogCi1IVE1MQ29sbGVjdGlvbiogRG9jdW1l
bnQ6OmRvY3VtZW50TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCit2b2lkIERv
Y3VtZW50OjpyZW1vdmVEb2N1bWVudE5hbWVkSXRlbUNhY2hlKEhUTUxDb2xsZWN0aW9uKiBjb2xs
ZWN0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgT3duUHRyPEhUTUxOYW1l
Q29sbGVjdGlvbj4mIGNvbGxlY3Rpb24gPSBtX2RvY3VtZW50TmFtZWRJdGVtQ29sbGVjdGlvbnMu
YWRkKG5hbWUuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+c2Vjb25kOwotICAgIGlmICghY29s
bGVjdGlvbikKLSAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRl
KHRoaXMsIERvY3VtZW50TmFtZWRJdGVtcywgbmFtZSk7Ci0gICAgcmV0dXJuIGNvbGxlY3Rpb24u
Z2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChjb2xsZWN0aW9uLCBtX2RvY3VtZW50TmFtZWRJdGVt
Q29sbGVjdGlvbnMuZ2V0KG5hbWUpID09IGNvbGxlY3Rpb24pOworICAgIG1fZG9jdW1lbnROYW1l
ZEl0ZW1Db2xsZWN0aW9ucy5yZW1vdmUobmFtZSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmZpbmlz
aGVkUGFyc2luZygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTIxNzE0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMiwx
OSArNDAyLDIyIEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8Tm9kZT4gYWRvcHROb2RlKFBh
c3NSZWZQdHI8Tm9kZT4gc291cmNlLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBIVE1MQ29sbGVj
dGlvbiogaW1hZ2VzKCk7Ci0gICAgSFRNTENvbGxlY3Rpb24qIGVtYmVkcygpOwotICAgIEhUTUxD
b2xsZWN0aW9uKiBwbHVnaW5zKCk7IC8vIGFuIGFsaWFzIGZvciBlbWJlZHMoKSByZXF1aXJlZCBm
b3IgdGhlIEpTIERPTSBiaW5kaW5ncy4KLSAgICBIVE1MQ29sbGVjdGlvbiogYXBwbGV0cygpOwot
ICAgIEhUTUxDb2xsZWN0aW9uKiBsaW5rcygpOwotICAgIEhUTUxDb2xsZWN0aW9uKiBmb3Jtcygp
OwotICAgIEhUTUxDb2xsZWN0aW9uKiBhbmNob3JzKCk7Ci0gICAgSFRNTENvbGxlY3Rpb24qIG9i
amVjdHMoKTsKLSAgICBIVE1MQ29sbGVjdGlvbiogc2NyaXB0cygpOwotICAgIEhUTUxDb2xsZWN0
aW9uKiB3aW5kb3dOYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7Ci0gICAgSFRN
TENvbGxlY3Rpb24qIGRvY3VtZW50TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUp
OwotCi0gICAgSFRNTEFsbENvbGxlY3Rpb24qIGFsbCgpOworICAgIFBhc3NSZWZQdHI8SFRNTENv
bGxlY3Rpb24+IGltYWdlcygpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGVtYmVk
cygpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHBsdWdpbnMoKTsgLy8gYW4gYWxp
YXMgZm9yIGVtYmVkcygpIHJlcXVpcmVkIGZvciB0aGUgSlMgRE9NIGJpbmRpbmdzLgorICAgIFBh
c3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGFwcGxldHMoKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxD
b2xsZWN0aW9uPiBsaW5rcygpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGZvcm1z
KCk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gYW5jaG9ycygpOworICAgIFBhc3NS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+IG9iamVjdHMoKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBzY3JpcHRzKCk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gYWxsKCk7
CisgICAgdm9pZCByZW1vdmVDYWNoZWRIVE1MQ29sbGVjdGlvbihIVE1MQ29sbGVjdGlvbiosIENv
bGxlY3Rpb25UeXBlKTsKKworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHdpbmRvd05h
bWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxD
b2xsZWN0aW9uPiBkb2N1bWVudE5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsK
KyAgICB2b2lkIHJlbW92ZVdpbmRvd05hbWVkSXRlbUNhY2hlKEhUTUxDb2xsZWN0aW9uKiwgY29u
c3QgQXRvbWljU3RyaW5nJik7CisgICAgdm9pZCByZW1vdmVEb2N1bWVudE5hbWVkSXRlbUNhY2hl
KEhUTUxDb2xsZWN0aW9uKiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICAvLyBPdGhlciBt
ZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgYm9vbCBpc0hUTUxEb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNIVE1MOyB9CkBAIC0xMjA2LDcgKzEyMDksNyBAQCBwcml2YXRlOgogICAg
IFBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlKCkgY29uc3Q7CiAjZW5kaWYKIAot
ICAgIEhUTUxDb2xsZWN0aW9uKiBjYWNoZWRDb2xsZWN0aW9uKENvbGxlY3Rpb25UeXBlKTsKKyAg
ICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjYWNoZWRDb2xsZWN0aW9uKENvbGxlY3Rpb25U
eXBlKTsKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICB2b2lkIGNsZWFyRnVsbHNj
cmVlbkVsZW1lbnRTdGFjaygpOwpAQCAtMTM5NCwxMSArMTM5NywxMSBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKICAgICBJbmhlcml0ZWRC
b29sIG1fZGVzaWduTW9kZTsKLSAgICAKLSAgICBPd25QdHI8SFRNTENvbGxlY3Rpb24+IG1fY29s
bGVjdGlvbnNbTnVtVW5uYW1lZERvY3VtZW50Q2FjaGVkVHlwZXNdOworCiAgICAgSGFzaFNldDxE
eW5hbWljU3VidHJlZU5vZGVMaXN0Kj4gbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudDsKIAot
ICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgT3duUHRyPEhUTUxOYW1lQ29s
bGVjdGlvbj4gPiBOYW1lZENvbGxlY3Rpb25NYXA7CisgICAgSFRNTENvbGxlY3Rpb24qIG1fY29s
bGVjdGlvbnNbTnVtVW5uYW1lZERvY3VtZW50Q2FjaGVkVHlwZXNdOworICAgIHR5cGVkZWYgSGFz
aE1hcDxBdG9taWNTdHJpbmcsIEhUTUxOYW1lQ29sbGVjdGlvbio+IE5hbWVkQ29sbGVjdGlvbk1h
cDsKICAgICBOYW1lZENvbGxlY3Rpb25NYXAgbV9kb2N1bWVudE5hbWVkSXRlbUNvbGxlY3Rpb25z
OwogICAgIE5hbWVkQ29sbGVjdGlvbk1hcCBtX3dpbmRvd05hbWVkSXRlbUNvbGxlY3Rpb25zOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjE3MTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNDIsMzUgKzIwNDIs
NDAgQEAgdm9pZCBFbGVtZW50Ojp1cGRhdGVFeHRyYU5hbWVkSXRlbVJlZ2lzdAogICAgICAgICBz
dGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1bWVudCgpKS0+YWRkRXh0cmFOYW1lZEl0ZW0o
bmV3SWQpOwogfQogCi1IVE1MQ29sbGVjdGlvbiogRWxlbWVudDo6ZW5zdXJlQ2FjaGVkSFRNTENv
bGxlY3Rpb24oQ29sbGVjdGlvblR5cGUgdHlwZSkKK1Bhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+
IEVsZW1lbnQ6OmVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKENvbGxlY3Rpb25UeXBlIHR5cGUp
CiB7CiAgICAgcmV0dXJuIGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpLT5lbnN1cmVDYWNoZWRIVE1M
Q29sbGVjdGlvbih0aGlzLCB0eXBlKTsKIH0KIAotSFRNTENvbGxlY3Rpb24qIEVsZW1lbnRSYXJl
RGF0YTo6ZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oRWxlbWVudCogZWxlbWVudCwgQ29sbGVj
dGlvblR5cGUgdHlwZSkKK1Bhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEVsZW1lbnRSYXJlRGF0
YTo6ZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oRWxlbWVudCogZWxlbWVudCwgQ29sbGVjdGlv
blR5cGUgdHlwZSkKIHsKLSAgICBpZiAoIW1fY2FjaGVkQ29sbGVjdGlvbnMpCisgICAgaWYgKCFt
X2NhY2hlZENvbGxlY3Rpb25zKSB7CiAgICAgICAgIG1fY2FjaGVkQ29sbGVjdGlvbnMgPSBhZG9w
dFB0cihuZXcgQ2FjaGVkSFRNTENvbGxlY3Rpb25BcnJheSk7Ci0gICAgCi0gICAgT3duUHRyPEhU
TUxDb2xsZWN0aW9uPiYgY29sbGVjdGlvbiA9ICgqbV9jYWNoZWRDb2xsZWN0aW9ucylbdHlwZSAt
IEZpcnN0Tm9kZUNvbGxlY3Rpb25UeXBlXTsKLSAgICBpZiAoIWNvbGxlY3Rpb24pIHsKLSAgICAg
ICAgaWYgKHR5cGUgPT0gVGFibGVSb3dzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+
aGFzVGFnTmFtZSh0YWJsZVRhZykpOwotICAgICAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxUYWJs
ZVJvd3NDb2xsZWN0aW9uOjpjcmVhdGUoZWxlbWVudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBTZWxlY3RPcHRpb25zKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFn
TmFtZShzZWxlY3RUYWcpKTsKLSAgICAgICAgICAgIGNvbGxlY3Rpb24gPSBIVE1MT3B0aW9uc0Nv
bGxlY3Rpb246OmNyZWF0ZShlbGVtZW50KTsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IEZv
cm1Db250cm9scykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUoZm9y
bVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShmaWVsZHNldFRhZykpOwotICAgICAgICAgICAg
Y29sbGVjdGlvbiA9IEhUTUxGb3JtQ29sbGVjdGlvbjo6Y3JlYXRlKGVsZW1lbnQpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtTm9kZUNvbGxlY3Rpb25UeXBlczsgaSsrKQor
ICAgICAgICAgICAgKCptX2NhY2hlZENvbGxlY3Rpb25zKVtpXSA9IDA7CisgICAgfQorCisgICAg
aWYgKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gKCptX2NhY2hlZENvbGxlY3Rpb25zKVt0
eXBlIC0gRmlyc3ROb2RlQ29sbGVjdGlvblR5cGVdKQorICAgICAgICByZXR1cm4gY29sbGVjdGlv
bjsKKworICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKKyAgICBpZiAodHlw
ZSA9PSBUYWJsZVJvd3MpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUodGFi
bGVUYWcpKTsKKyAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpj
cmVhdGUoZWxlbWVudCk7CisgICAgfSBlbHNlIGlmICh0eXBlID09IFNlbGVjdE9wdGlvbnMpIHsK
KyAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSk7CisgICAgICAg
IGNvbGxlY3Rpb24gPSBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmNyZWF0ZShlbGVtZW50KTsKKyAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gRm9ybUNvbnRyb2xzKSB7CisgICAgICAgIEFTU0VSVChlbGVt
ZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZmllbGRzZXRU
YWcpKTsKKyAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxGb3JtQ29sbGVjdGlvbjo6Y3JlYXRlKGVs
ZW1lbnQpOwogI2lmIEVOQUJMRShNSUNST0RBVEEpCi0gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9
PSBJdGVtUHJvcGVydGllcykgewotICAgICAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxQcm9wZXJ0
aWVzQ29sbGVjdGlvbjo6Y3JlYXRlKGVsZW1lbnQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBJ
dGVtUHJvcGVydGllcykgeworICAgICAgICBjb2xsZWN0aW9uID0gSFRNTFByb3BlcnRpZXNDb2xs
ZWN0aW9uOjpjcmVhdGUoZWxlbWVudCk7CiAjZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBjb2xsZWN0aW9uID0gSFRNTENvbGxlY3Rpb246OmNyZWF0ZShlbGVtZW50LCB0eXBlKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGNvbGxlY3Rpb24uZ2V0KCk7CisgICAgfSBlbHNlCisgICAgICAg
IGNvbGxlY3Rpb24gPSBIVE1MQ29sbGVjdGlvbjo6Y3JlYXRlKGVsZW1lbnQsIHR5cGUpOworICAg
ICgqbV9jYWNoZWRDb2xsZWN0aW9ucylbdHlwZSAtIEZpcnN0Tm9kZUNvbGxlY3Rpb25UeXBlXSA9
IGNvbGxlY3Rpb24uZ2V0KCk7CisgICAgcmV0dXJuIGNvbGxlY3Rpb24ucmVsZWFzZSgpOwogfQog
CiBIVE1MQ29sbGVjdGlvbiogRWxlbWVudDo6Y2FjaGVkSFRNTENvbGxlY3Rpb24oQ29sbGVjdGlv
blR5cGUgdHlwZSkKQEAgLTIwNzgsNiArMjA4MywxMiBAQCBIVE1MQ29sbGVjdGlvbiogRWxlbWVu
dDo6Y2FjaGVkSFRNTENvbGxlCiAgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyBlbGVtZW50UmFy
ZURhdGEoKS0+Y2FjaGVkSFRNTENvbGxlY3Rpb24odHlwZSkgOiAwOwogfQogCit2b2lkIEVsZW1l
bnQ6OnJlbW92ZUNhY2hlZEhUTUxDb2xsZWN0aW9uKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9u
LCBDb2xsZWN0aW9uVHlwZSB0eXBlKQoreworICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKKyAg
ICBlbGVtZW50UmFyZURhdGEoKS0+cmVtb3ZlQ2FjaGVkSFRNTENvbGxlY3Rpb24oY29sbGVjdGlv
biwgdHlwZSk7Cit9CisKIEludFNpemUgRWxlbWVudDo6c2F2ZWRMYXllclNjcm9sbE9mZnNldCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyBlbGVtZW50UmFyZURhdGEoKS0+
bV9zYXZlZExheWVyU2Nyb2xsT2Zmc2V0IDogSW50U2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCShyZXZpc2lvbiAxMjE3MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEyLDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkTW9k
aWZ5QXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYpOwogICAgIHZvaWQgZGlkUmVtb3ZlQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAorICAgIHZvaWQgcmVtb3ZlQ2FjaGVkSFRNTENv
bGxlY3Rpb24oSFRNTENvbGxlY3Rpb24qLCBDb2xsZWN0aW9uVHlwZSk7CisKICAgICBMYXlvdXRT
aXplIG1pbmltdW1TaXplRm9yUmVzaXppbmcoKSBjb25zdDsKICAgICB2b2lkIHNldE1pbmltdW1T
aXplRm9yUmVzaXppbmcoY29uc3QgTGF5b3V0U2l6ZSYpOwogCkBAIC00NDcsNyArNDQ5LDcgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZWdpc3RlckFzTmFtZWRJdGVtKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVnaXN0ZXJB
c0V4dHJhTmFtZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIEhUTUxDb2xs
ZWN0aW9uKiBlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSk7CisgICAg
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oQ29s
bGVjdGlvblR5cGUpOwogICAgIEhUTUxDb2xsZWN0aW9uKiBjYWNoZWRIVE1MQ29sbGVjdGlvbihD
b2xsZWN0aW9uVHlwZSk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRS
YXJlRGF0YS5oCShyZXZpc2lvbiAxMjE3MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDIyICs0NCwyNyBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgTm9kZVJhcmVEYXRhOjpuZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRl
ckF0dGFjaDsKICAgICB1c2luZyBOb2RlUmFyZURhdGE6OnNldE5lZWRzRm9jdXNBcHBlYXJhbmNl
VXBkYXRlU29vbkFmdGVyQXR0YWNoOwogCi0gICAgdHlwZWRlZiBGaXhlZEFycmF5PE93blB0cjxI
VE1MQ29sbGVjdGlvbj4sIE51bU5vZGVDb2xsZWN0aW9uVHlwZXM+IENhY2hlZEhUTUxDb2xsZWN0
aW9uQXJyYXk7Ci0KICAgICBib29sIGhhc0NhY2hlZEhUTUxDb2xsZWN0aW9ucygpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gbV9jYWNoZWRDb2xsZWN0aW9uczsKICAgICB9CiAKLSAgICBI
VE1MQ29sbGVjdGlvbiogZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oRWxlbWVudCosIENvbGxl
Y3Rpb25UeXBlKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBlbnN1cmVDYWNoZWRI
VE1MQ29sbGVjdGlvbihFbGVtZW50KiwgQ29sbGVjdGlvblR5cGUpOwogICAgIEhUTUxDb2xsZWN0
aW9uKiBjYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSB0eXBlKQogICAgIHsKICAg
ICAgICAgaWYgKCFtX2NhY2hlZENvbGxlY3Rpb25zKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICAgICAgcmV0dXJuICgqbV9jYWNoZWRDb2xsZWN0aW9ucylbdHlwZSAtIEZpcnN0Tm9kZUNv
bGxlY3Rpb25UeXBlXS5nZXQoKTsKKyAgICAgICAgcmV0dXJuICgqbV9jYWNoZWRDb2xsZWN0aW9u
cylbdHlwZSAtIEZpcnN0Tm9kZUNvbGxlY3Rpb25UeXBlXTsKKyAgICB9CisgICAgdm9pZCByZW1v
dmVDYWNoZWRIVE1MQ29sbGVjdGlvbihIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgQ29sbGVj
dGlvblR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NhY2hlZENvbGxlY3Rpb25z
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjb2xsZWN0aW9uLCAoKm1fY2FjaGVkQ29sbGVjdGlv
bnMpW3R5cGUgLSBGaXJzdE5vZGVDb2xsZWN0aW9uVHlwZV0gPT0gY29sbGVjdGlvbik7CisgICAg
ICAgICgqbV9jYWNoZWRDb2xsZWN0aW9ucylbdHlwZSAtIEZpcnN0Tm9kZUNvbGxlY3Rpb25UeXBl
XSA9IDA7CiAgICAgfQogCisgICAgdHlwZWRlZiBGaXhlZEFycmF5PEhUTUxDb2xsZWN0aW9uKiwg
TnVtTm9kZUNvbGxlY3Rpb25UeXBlcz4gQ2FjaGVkSFRNTENvbGxlY3Rpb25BcnJheTsKICAgICBP
d25QdHI8Q2FjaGVkSFRNTENvbGxlY3Rpb25BcnJheT4gbV9jYWNoZWRDb2xsZWN0aW9uczsKIAog
ICAgIExheW91dFNpemUgbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9Db2xsZWN0aW9uVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvQ29sbGVjdGlvblR5cGUuaAkocmV2aXNpb24gMTIxNzE0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9Db2xsZWN0aW9uVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsMjEg
QEAgZW51bSBDb2xsZWN0aW9uVHlwZSB7CiB9OwogCiBzdGF0aWMgY29uc3QgQ29sbGVjdGlvblR5
cGUgRmlyc3RVbm5hbWVkRG9jdW1lbnRDYWNoZWRUeXBlID0gRG9jSW1hZ2VzOwotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIE51bVVubmFtZWREb2N1bWVudENhY2hlZFR5cGVzID0gV2luZG93TmFtZWRJ
dGVtcyAtIERvY0ltYWdlcyArIDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgTnVtVW5uYW1lZERv
Y3VtZW50Q2FjaGVkVHlwZXMgPSBXaW5kb3dOYW1lZEl0ZW1zIC0gRG9jSW1hZ2VzOwogCiBzdGF0
aWMgY29uc3QgQ29sbGVjdGlvblR5cGUgRmlyc3ROb2RlQ29sbGVjdGlvblR5cGUgPSBOb2RlQ2hp
bGRyZW47CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgTnVtTm9kZUNvbGxlY3Rpb25UeXBlcyA9IEZv
cm1Db250cm9scyAtIE5vZGVDaGlsZHJlbiArIDE7CiAKK2lubGluZSBib29sIGlzVW5uYW1lZERv
Y3VtZW50Q2FjaGVkVHlwZShDb2xsZWN0aW9uVHlwZSB0eXBlKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odHlwZSkgPCBOdW1Vbm5hbWVkRG9jdW1lbnRDYWNoZWRUeXBlczsK
K30KKworaW5saW5lIGJvb2wgaXNOb2RlQ29sbGVjdGlvblR5cGUoQ29sbGVjdGlvblR5cGUgdHlw
ZSkKK3sKKyAgICByZXR1cm4gdHlwZSA+PSBGaXJzdE5vZGVDb2xsZWN0aW9uVHlwZTsKK30KKwog
fSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
bGxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
bGxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTIxNzE0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBI
VE1MQWxsQ29sbGVjdGlvbjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK1Bhc3NSZWZQdHI8
SFRNTEFsbENvbGxlY3Rpb24+IEhUTUxBbGxDb2xsZWN0aW9uOjpjcmVhdGUoRG9jdW1lbnQqIGRv
Y3VtZW50KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgSFRNTEFsbENvbGxlY3Rpb24oZG9j
dW1lbnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxBbGxDb2xsZWN0aW9uKGRvY3Vt
ZW50KSk7CiB9CiAKIEhUTUxBbGxDb2xsZWN0aW9uOjpIVE1MQWxsQ29sbGVjdGlvbihEb2N1bWVu
dCogZG9jdW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5o
CShyZXZpc2lvbiAxMjE3MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBIVE1MQWxsQ29sbGVjdGlvbiA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SFRNTEFsbENvbGxlY3Rpb24+IGNyZWF0ZShE
b2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBjcmVh
dGUoRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MQWxsQ29sbGVjdGlvbigpOwogCiAgICAg
Tm9kZSogbmFtZWRJdGVtV2l0aEluZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdW5zaWdu
ZWQgaW5kZXgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5j
cHAJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxMyArNzcsMjEgQEAgSFRNTENvbGxlY3Rpb246
OkhUTUxDb2xsZWN0aW9uKE5vZGUqIGJhcwogICAgIEFTU0VSVChtX2Jhc2UpOwogfQogCi1QYXNz
T3duUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MQ29sbGVjdGlvbjo6Y3JlYXRlKE5vZGUqIGJhc2Us
IENvbGxlY3Rpb25UeXBlIHR5cGUpCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MQ29s
bGVjdGlvbjo6Y3JlYXRlKE5vZGUqIGJhc2UsIENvbGxlY3Rpb25UeXBlIHR5cGUpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MQ29sbGVjdGlvbihiYXNlLCB0eXBlKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBIVE1MQ29sbGVjdGlvbihiYXNlLCB0eXBlKSk7CiB9CiAKIEhUTUxD
b2xsZWN0aW9uOjp+SFRNTENvbGxlY3Rpb24oKQogeworICAgIGlmIChpc1VubmFtZWREb2N1bWVu
dENhY2hlZFR5cGUodHlwZSgpKSkgeworICAgICAgICBBU1NFUlQoYmFzZSgpLT5pc0RvY3VtZW50
Tm9kZSgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihiYXNlKCkpLT5yZW1vdmVD
YWNoZWRIVE1MQ29sbGVjdGlvbih0aGlzLCB0eXBlKCkpOworICAgIH0gZWxzZSBpZiAoaXNOb2Rl
Q29sbGVjdGlvblR5cGUodHlwZSgpKSkgeworICAgICAgICBBU1NFUlQoYmFzZSgpLT5pc0VsZW1l
bnROb2RlKCkpOworICAgICAgICB0b0VsZW1lbnQoYmFzZSgpKS0+cmVtb3ZlQ2FjaGVkSFRNTENv
bGxlY3Rpb24odGhpcywgdHlwZSgpKTsKKyAgICB9IGVsc2UgLy8gSFRNTE5hbWVDb2xsZWN0aW9u
IHJlbW92ZXMgY2FjaGUgYnkgaXRzZWxmLgorICAgICAgICBBU1NFUlQodHlwZSgpID09IFdpbmRv
d05hbWVkSXRlbXMgfHwgdHlwZSgpID09IERvY3VtZW50TmFtZWRJdGVtcyk7CiB9CiAKIHZvaWQg
SFRNTENvbGxlY3Rpb246OmludmFsaWRhdGVDYWNoZUlmTmVlZGVkKCkgY29uc3QKQEAgLTE2OSw5
ICsxNzcsOSBAQCBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6aXRlbUFmdGVyKE5vZGUqCiAgICAg
aWYgKCFwcmV2aW91cykKICAgICAgICAgY3VycmVudCA9IG1fYmFzZS0+Zmlyc3RDaGlsZCgpOwog
ICAgIGVsc2UKLSAgICAgICAgY3VycmVudCA9IG5leHROb2RlT3JTaWJsaW5nKG1fYmFzZSwgcHJl
dmlvdXMsIGluY2x1ZGVDaGlsZHJlbigpKTsKKyAgICAgICAgY3VycmVudCA9IG5leHROb2RlT3JT
aWJsaW5nKGJhc2UoKSwgcHJldmlvdXMsIGluY2x1ZGVDaGlsZHJlbigpKTsKIAotICAgIGZvciAo
OyBjdXJyZW50OyBjdXJyZW50ID0gbmV4dE5vZGVPclNpYmxpbmcobV9iYXNlLCBjdXJyZW50LCBp
bmNsdWRlQ2hpbGRyZW4oKSkpIHsKKyAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IG5leHRO
b2RlT3JTaWJsaW5nKGJhc2UoKSwgY3VycmVudCwgaW5jbHVkZUNoaWxkcmVuKCkpKSB7CiAgICAg
ICAgIGlmICghY3VycmVudC0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY3VycmVu
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMjE3
MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSwxNCArMTAxLDExIEBAIHByaXZhdGU6CiAgICAgY29uc3QgdW5zaWduZWQgbV9p
bmNsdWRlQ2hpbGRyZW4gOiAxOwogfTsKIAotY2xhc3MgSFRNTENvbGxlY3Rpb24gOiBwdWJsaWMg
SFRNTENvbGxlY3Rpb25DYWNoZUJhc2UgeworY2xhc3MgSFRNTENvbGxlY3Rpb24gOiBwdWJsaWMg
UmVmQ291bnRlZDxIVE1MQ29sbGVjdGlvbj4sIHB1YmxpYyBIVE1MQ29sbGVjdGlvbkNhY2hlQmFz
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SFRNTENvbGxlY3Rpb24+IGNyZWF0
ZShOb2RlKiBiYXNlLCBDb2xsZWN0aW9uVHlwZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRN
TENvbGxlY3Rpb24+IGNyZWF0ZShOb2RlKiBiYXNlLCBDb2xsZWN0aW9uVHlwZSk7CiAgICAgdmly
dHVhbCB+SFRNTENvbGxlY3Rpb24oKTsKIAotICAgIHZvaWQgcmVmKCkgeyBtX2Jhc2UtPnJlZigp
OyB9Ci0gICAgdm9pZCBkZXJlZigpIHsgbV9iYXNlLT5kZXJlZigpOyB9Ci0KICAgICAvLyBET00g
QVBJCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2RlKiBpdGVt
KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKQEAgLTEzNyw3ICsxMzQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBpdGVtKDApICYmICFpdGVtKDEpOwogICAgIH0KIAotICAgIE5vZGUqIGJhc2Uo
KSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICBOb2RlKiBiYXNlKCkgY29uc3QgeyByZXR1
cm4gbV9iYXNlLmdldCgpOyB9CiAKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZSgpOwogICAgIHZv
aWQgaW52YWxpZGF0ZUNhY2hlSWZOZWVkZWQoKSBjb25zdDsKQEAgLTE1NCw3ICsxNTEsNyBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBpc0FjY2VwdGFibGVFbGVtZW50KEVsZW1lbnQqKSBjb25zdDsK
IAotICAgIE5vZGUqIG1fYmFzZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9iYXNlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERhdGFMaXN0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGF0YUxpc3RFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTIxNzE0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGF0
YUxpc3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBQYXNzUmVm
UHRyPEhUTUxEYXRhTGlzdEVsZW1lbnQ+IEhUTUxEYXRhCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBIVE1MRGF0YUxpc3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLUhUTUxDb2xs
ZWN0aW9uKiBIVE1MRGF0YUxpc3RFbGVtZW50OjpvcHRpb25zKCkKK1Bhc3NSZWZQdHI8SFRNTENv
bGxlY3Rpb24+IEhUTUxEYXRhTGlzdEVsZW1lbnQ6Om9wdGlvbnMoKQogewogICAgIHJldHVybiBl
bnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihEYXRhTGlzdE9wdGlvbnMpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGF0YUxpc3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGF0YUxpc3RFbGVtZW50LmgJKHJldmlzaW9uIDEyMTcxNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERhdGFMaXN0RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIEhUTUxEYXRhTGlzdEVsZW1lbnQgOiBwdWJsaWMg
SFRNTEUKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRGF0YUxpc3RFbGVtZW50
PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBIVE1MQ29s
bGVjdGlvbiogb3B0aW9ucygpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IG9wdGlv
bnMoKTsKIAogcHJpdmF0ZToKICAgICBIVE1MRGF0YUxpc3RFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NDYsNyArNzQ2LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0
VHJhbnNsYXRlKGJvb2wgZW5hYgogfQogCiAKLUhUTUxDb2xsZWN0aW9uKiBIVE1MRWxlbWVudDo6
Y2hpbGRyZW4oKQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTEVsZW1lbnQ6OmNoaWxk
cmVuKCkKIHsKICAgICByZXR1cm4gZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oTm9kZUNoaWxk
cmVuKTsKIH0KQEAgLTk5MSw3ICs5OTEsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRJdGVtVmFs
dWVUZXh0KGNvbnN0CiAKIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbiogSFRNTEVsZW1lbnQ6OnBy
b3BlcnRpZXMoKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MUHJvcGVydGllc0NvbGxl
Y3Rpb24qPihlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihJdGVtUHJvcGVydGllcykpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24qPihlbnN1cmVDYWNo
ZWRIVE1MQ29sbGVjdGlvbihJdGVtUHJvcGVydGllcykuZ2V0KCkpOwogfQogI2VuZGlmCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NyBAQCBjbGFzcyBIVE1MRWxlbWVudCA6IHB1YmxpYyBTdHlsZWRFbGVtZW50CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogCi0gICAgSFRNTENvbGxlY3Rpb24qIGNoaWxkcmVu
KCk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY2hpbGRyZW4oKTsKIAogICAgIHZp
cnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTIxNzE0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcs
NyArOTcsNyBAQCBIVE1MTGVnZW5kRWxlbWVudCogSFRNTEZpZWxkU2V0RWxlbWVudDo6CiAgICAg
cmV0dXJuIDA7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBIVE1MRmllbGRTZXRFbGVtZW50OjplbGVt
ZW50cygpCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MRmllbGRTZXRFbGVtZW50Ojpl
bGVtZW50cygpCiB7CiAgICAgcmV0dXJuIGVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKEZvcm1D
b250cm9scyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1l
bnQuaAkocmV2aXNpb24gMTIxNzE0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRT
ZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxGaWVsZFNldEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKICAgICBIVE1MTGVnZW5k
RWxlbWVudCogbGVnZW5kKCkgY29uc3Q7CiAKLSAgICBIVE1MQ29sbGVjdGlvbiogZWxlbWVudHMo
KTsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBlbGVtZW50cygpOwogCiAgICAgY29u
c3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBhc3NvY2lhdGVkRWxlbWVudHMoKSBj
b25zdDsKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsOSArNDIsOSBAQCBIVE1MRm9ybUNvbGxlY3Rpb246OkhUTUxGb3JtQ29sbGVjdGlvbihFCiAg
ICAgQVNTRVJUKGJhc2UtPmhhc1RhZ05hbWUoZm9ybVRhZykgfHwgYmFzZS0+aGFzVGFnTmFtZShm
aWVsZHNldFRhZykpOwogfQogCi1QYXNzT3duUHRyPEhUTUxGb3JtQ29sbGVjdGlvbj4gSFRNTEZv
cm1Db2xsZWN0aW9uOjpjcmVhdGUoRWxlbWVudCogYmFzZSkKK1Bhc3NSZWZQdHI8SFRNTEZvcm1D
b2xsZWN0aW9uPiBIVE1MRm9ybUNvbGxlY3Rpb246OmNyZWF0ZShFbGVtZW50KiBiYXNlKQogewot
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgSFRNTEZvcm1Db2xsZWN0aW9uKGJhc2UpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxGb3JtQ29sbGVjdGlvbihiYXNlKSk7CiB9CiAKIEhUTUxG
b3JtQ29sbGVjdGlvbjo6fkhUTUxGb3JtQ29sbGVjdGlvbigpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmgJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgY2xhc3MgUXVhbGlmaWVkTmFtZTsKIAogY2xhc3MgSFRNTEZvcm1Db2xsZWN0aW9u
IDogcHVibGljIEhUTUxDb2xsZWN0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxIVE1MRm9ybUNvbGxlY3Rpb24+IGNyZWF0ZShFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SFRNTEZvcm1Db2xsZWN0aW9uPiBjcmVhdGUoRWxlbWVudCopOwogCiAgICAgdmlydHVh
bCB+SFRNTEZvcm1Db2xsZWN0aW9uKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM1LDcgKzUzNSw3IEBAIHZv
aWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVJbWdFbGVtZW50KEgKICAgICByZW1vdmVGcm9tVmVj
dG9yKG1faW1hZ2VFbGVtZW50cywgZSk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBIVE1MRm9ybUVs
ZW1lbnQ6OmVsZW1lbnRzKCkKK1Bhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxGb3JtRWxl
bWVudDo6ZWxlbWVudHMoKQogewogICAgIHJldHVybiBlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlv
bihGb3JtQ29udHJvbHMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5oCShyZXZpc2lvbiAxMjE3MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUVsZW1lbnQoKTsKIAotICAgIEhU
TUxDb2xsZWN0aW9uKiBlbGVtZW50cygpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+
IGVsZW1lbnRzKCk7CiAgICAgdm9pZCBnZXROYW1lZEVsZW1lbnRzKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24g
MTIxNzE0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBIVE1MTWFwRWxlbWVudDo6bWFwTW91c2VF
dmVudChMYXlvdQogCiBIVE1MSW1hZ2VFbGVtZW50KiBIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVt
ZW50KCkKIHsKLSAgICBIVE1MQ29sbGVjdGlvbiogaW1hZ2VzID0gZG9jdW1lbnQoKS0+aW1hZ2Vz
KCk7CisgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBpbWFnZXMgPSBkb2N1bWVudCgpLT5pbWFn
ZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBOb2RlKiBjdXJyID0gaW1hZ2VzLT5pdGVt
KGkpOyBpKyspIHsKICAgICAgICAgaWYgKCFjdXJyLT5oYXNUYWdOYW1lKGltZ1RhZykpCiAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIEhUTUxNYXBFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjb25zCiAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGF0
dHJpYnV0ZSk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBIVE1MTWFwRWxlbWVudDo6YXJlYXMoKQor
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTE1hcEVsZW1lbnQ6OmFyZWFzKCkKIHsKICAg
ICByZXR1cm4gZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oTWFwQXJlYXMpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuaAkocmV2aXNpb24gMTIxNzE0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBAIHB1YmxpYzoKICAgICBib29sIG1hcE1vdXNlRXZlbnQoTGF5b3V0UG9pbnQgbG9j
YXRpb24sIGNvbnN0IExheW91dFNpemUmLCBIaXRUZXN0UmVzdWx0Jik7CiAgICAgCiAgICAgSFRN
TEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50KCk7Ci0gICAgSFRNTENvbGxlY3Rpb24qIGFyZWFz
KCk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gYXJlYXMoKTsKIAogcHJpdmF0ZToK
ICAgICBIVE1MTWFwRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9u
IDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTcgQEAgSFRNTE5hbWVDb2xsZWN0aW9uOjpIVE1M
TmFtZUNvbGxlY3Rpb24oRAogewogfQogCitIVE1MTmFtZUNvbGxlY3Rpb246On5IVE1MTmFtZUNv
bGxlY3Rpb24oKQoreworICAgIEFTU0VSVChiYXNlKCkpOworICAgIEFTU0VSVChiYXNlKCktPmlz
RG9jdW1lbnROb2RlKCkpOworICAgIEFTU0VSVCh0eXBlKCkgPT0gV2luZG93TmFtZWRJdGVtcyB8
fCB0eXBlKCkgPT0gRG9jdW1lbnROYW1lZEl0ZW1zKTsKKyAgICBpZiAodHlwZSgpID09IFdpbmRv
d05hbWVkSXRlbXMpCisgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oYmFzZSgpKS0+cmVt
b3ZlV2luZG93TmFtZWRJdGVtQ2FjaGUodGhpcywgbV9uYW1lKTsKKyAgICBlbHNlCisgICAgICAg
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oYmFzZSgpKS0+cmVtb3ZlRG9jdW1lbnROYW1lZEl0ZW1D
YWNoZSh0aGlzLCBtX25hbWUpOworfQorCiBFbGVtZW50KiBIVE1MTmFtZUNvbGxlY3Rpb246Oml0
ZW1BZnRlcihOb2RlKiBwcmV2aW91cykgY29uc3QKIHsKICAgICBBU1NFUlQocHJldmlvdXMgIT0g
YmFzZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uaAko
cmV2aXNpb24gMTIxNzE0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDEzIEBAIGNsYXNzIERvY3VtZW50Owog
CiBjbGFzcyBIVE1MTmFtZUNvbGxlY3Rpb24gOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gY3JlYXRlKERv
Y3VtZW50KiBkb2N1bWVudCwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxOYW1lQ29sbGVjdGlvbj4gY3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MTmFtZUNv
bGxlY3Rpb24oZG9jdW1lbnQsIHR5cGUsIG5hbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBIVE1MTmFtZUNvbGxlY3Rpb24oZG9jdW1lbnQsIHR5cGUsIG5hbWUpKTsKICAgICB9CiAK
KyAgICB+SFRNTE5hbWVDb2xsZWN0aW9uKCk7CisKIHByaXZhdGU6CiAgICAgSFRNTE5hbWVDb2xs
ZWN0aW9uKERvY3VtZW50KiwgQ29sbGVjdGlvblR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlv
bi5jcHAJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlv
bnNDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsOSBAQCBIVE1MT3B0
aW9uc0NvbGxlY3Rpb246OkhUTUxPcHRpb25zQ29sbGVjCiAgICAgQVNTRVJUKHNlbGVjdC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdFRhZykpOwogfQogCi1QYXNzT3duUHRyPEhUTUxPcHRp
b25zQ29sbGVjdGlvbj4gSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpjcmVhdGUoRWxlbWVudCogc2Vs
ZWN0KQorUGFzc1JlZlB0cjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IEhUTUxPcHRpb25zQ29sbGVj
dGlvbjo6Y3JlYXRlKEVsZW1lbnQqIHNlbGVjdCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEhUTUxPcHRpb25zQ29sbGVjdGlvbihzZWxlY3QpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhUTUxPcHRpb25zQ29sbGVjdGlvbihzZWxlY3QpKTsKIH0KIAogdm9pZCBIVE1MT3B0aW9uc0Nv
bGxlY3Rpb246OmFkZChQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBlbGVtZW50LCBFeGNl
cHRpb25Db2RlICZlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uaAkocmV2aXNpb24gMTIxNzE0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T3B0aW9uc0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCB0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gOiBw
dWJsaWMgSFRNTENvbGxlY3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEhU
TUxPcHRpb25zQ29sbGVjdGlvbj4gY3JlYXRlKEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IGNyZWF0ZShFbGVtZW50Kik7CiAKICAgICB2b2lk
IGFkZChQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZvaWQgYWRkKFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBpbnQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb3BlcnRpZXNDb2xs
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGll
c0NvbGxlY3Rpb24uaAkocmV2aXNpb24gMTIxNzE0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QCBjbGFzcyBET01TdHJpbmdMaXN0OwogCiBjbGFzcyBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24g
OiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbj4gY3JlYXRlKE5vZGUqKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24+IGNyZWF0ZShOb2RlKik7CiAgICAgdmly
dHVhbCB+SFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uKCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdCBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMjE3MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUwLDE0ICszNTAsMTQgQEAgYm9v
bCBIVE1MU2VsZWN0RWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdAogICAgIHJldHVybiBjaGlsZENv
bnRleHQuaXNPblVwcGVyRW5jYXBzdWxhdGlvbkJvdW5kYXJ5KCkgJiYgSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZTo6Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihjaGlsZENvbnRleHQp
OwogfQogCi1IVE1MQ29sbGVjdGlvbiogSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkT3B0aW9u
cygpCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0
ZWRPcHRpb25zKCkKIHsKICAgICByZXR1cm4gZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oU2Vs
ZWN0ZWRPcHRpb25zKTsKIH0KIAotSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBIVE1MU2VsZWN0RWxl
bWVudDo6b3B0aW9ucygpCitQYXNzUmVmUHRyPEhUTUxPcHRpb25zQ29sbGVjdGlvbj4gSFRNTFNl
bGVjdEVsZW1lbnQ6Om9wdGlvbnMoKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT3B0
aW9uc0NvbGxlY3Rpb24qPihlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihTZWxlY3RPcHRpb25z
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbio+KGVuc3Vy
ZUNhY2hlZEhUTUxDb2xsZWN0aW9uKFNlbGVjdE9wdGlvbnMpLmdldCgpKTsKIH0KIAogdm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEl0ZW1TZWxlY3RlZFN0YXRlcygpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiAxMjE3MTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDggKzYyLDggQEAgcHVibGljOgogICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAKLSAgICBIVE1MT3B0aW9uc0NvbGxlY3Rp
b24qIG9wdGlvbnMoKTsKLSAgICBIVE1MQ29sbGVjdGlvbiogc2VsZWN0ZWRPcHRpb25zKCk7Cisg
ICAgUGFzc1JlZlB0cjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IG9wdGlvbnMoKTsKKyAgICBQYXNz
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBzZWxlY3RlZE9wdGlvbnMoKTsKIAogICAgIHZvaWQgb3B0
aW9uRWxlbWVudENoaWxkcmVuQ2hhbmdlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MCwxMiArNTYw
LDEyIEBAIGJvb2wgSFRNTFRhYmxlRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoY28KICAgICByZXR1
cm4gYXR0cmlidXRlLm5hbWUoKSA9PSBiYWNrZ3JvdW5kQXR0ciB8fCBIVE1MRWxlbWVudDo6aXNV
UkxBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KIAotSFRNTENvbGxlY3Rpb24qIEhUTUxUYWJsZUVs
ZW1lbnQ6OnJvd3MoKQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTFRhYmxlRWxlbWVu
dDo6cm93cygpCiB7CiAgICAgcmV0dXJuIGVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKFRhYmxl
Um93cyk7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBIVE1MVGFibGVFbGVtZW50Ojp0Qm9kaWVzKCkK
K1Bhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxUYWJsZUVsZW1lbnQ6OnRCb2RpZXMoKQog
ewogICAgIHJldHVybiBlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihUYWJsZVRCb2RpZXMpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgJKHJldmlzaW9uIDEy
MTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50PiBpbnNlcnRSb3coaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBkZWxl
dGVSb3coaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBIVE1MQ29sbGVjdGlvbiog
cm93cygpOwotICAgIEhUTUxDb2xsZWN0aW9uKiB0Qm9kaWVzKCk7CisgICAgUGFzc1JlZlB0cjxI
VE1MQ29sbGVjdGlvbj4gcm93cygpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHRC
b2RpZXMoKTsKIAogICAgIFN0cmluZyBydWxlcygpIGNvbnN0OwogICAgIFN0cmluZyBzdW1tYXJ5
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
Um93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBpbnQgSFRN
TFRhYmxlUm93RWxlbWVudDo6c2VjdGlvblJvd0luZGV4CiAKIFBhc3NSZWZQdHI8SFRNTEVsZW1l
bnQ+IEhUTUxUYWJsZVJvd0VsZW1lbnQ6Omluc2VydENlbGwoaW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBIVE1MQ29sbGVjdGlvbiogY2hpbGRyZW4gPSBjZWxscygpOworICAg
IFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY2hpbGRyZW4gPSBjZWxscygpOwogICAgIGludCBudW1D
ZWxscyA9IGNoaWxkcmVuID8gY2hpbGRyZW4tPmxlbmd0aCgpIDogMDsKICAgICBpZiAoaW5kZXgg
PCAtMSB8fCBpbmRleCA+IG51bUNlbGxzKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7
CkBAIC0xNDMsNyArMTQzLDcgQEAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSFRNTFRhYmxlUm93
RWxlbQogCiB2b2lkIEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmRlbGV0ZUNlbGwoaW50IGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBIVE1MQ29sbGVjdGlvbiogY2hpbGRyZW4gPSBjZWxs
cygpOworICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY2hpbGRyZW4gPSBjZWxscygpOwogICAg
IGludCBudW1DZWxscyA9IGNoaWxkcmVuID8gY2hpbGRyZW4tPmxlbmd0aCgpIDogMDsKICAgICBp
ZiAoaW5kZXggPT0gLTEpCiAgICAgICAgIGluZGV4ID0gbnVtQ2VsbHMtMTsKQEAgLTE1NCw3ICsx
NTQsNyBAQCB2b2lkIEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmRlbGV0ZUNlbGwoaW50CiAgICAgICAg
IGVjID0gSU5ERVhfU0laRV9FUlI7CiB9CiAKLUhUTUxDb2xsZWN0aW9uKiBIVE1MVGFibGVSb3dF
bGVtZW50OjpjZWxscygpCitQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MVGFibGVSb3dF
bGVtZW50OjpjZWxscygpCiB7CiAgICAgcmV0dXJuIGVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9u
KFRSQ2VsbHMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVt
ZW50LmgJKHJldmlzaW9uIDEyMTcxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
Um93RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAg
ICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpbnNlcnRDZWxsKGludCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZvaWQgZGVsZXRlQ2VsbChpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsK
IAotICAgIEhUTUxDb2xsZWN0aW9uKiBjZWxscygpOworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxl
Y3Rpb24+IGNlbGxzKCk7CiAgICAgdm9pZCBzZXRDZWxscyhIVE1MQ29sbGVjdGlvbiAqLCBFeGNl
cHRpb25Db2RlJik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZVJvd3NDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTIxNzE0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1Nyw5ICsxNTcsOSBAQCBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6SFRNTFRhYmxlUm93
c0NvCiAgICAgQVNTRVJUKHRhYmxlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSk7CiB9CiAKLVBhc3NP
d25QdHI8SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24+IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjpj
cmVhdGUoRWxlbWVudCogdGFibGUpCitQYXNzUmVmUHRyPEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9u
PiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6Y3JlYXRlKEVsZW1lbnQqIHRhYmxlKQogewotICAg
IHJldHVybiBhZG9wdFB0cihuZXcgSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24odGFibGUpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uKHRhYmxlKSk7CiB9
CiAKIEVsZW1lbnQqIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uOjppdGVtQWZ0ZXIoTm9kZSogcHJl
dmlvdXMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xs
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dz
Q29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMjE3MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
Y2xhc3MgSFRNTFRhYmxlUm93RWxlbWVudDsKIAogY2xhc3MgSFRNTFRhYmxlUm93c0NvbGxlY3Rp
b24gOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uPiBjcmVhdGUoRWxlbWVudCopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uPiBjcmVhdGUoRWxlbWVudCopOwog
CiAgICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1lbnQqIHJvd0FmdGVyKEhUTUxUYWJsZUVsZW1l
bnQqLCBIVE1MVGFibGVSb3dFbGVtZW50Kik7CiAgICAgc3RhdGljIEhUTUxUYWJsZVJvd0VsZW1l
bnQqIGxhc3RSb3coSFRNTFRhYmxlRWxlbWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEyMTcxNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIFN0eWxlUHJvcGVydHlTZXQqIEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW4KIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
OjppbnNlcnRSb3coaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8
SFRNTFRhYmxlUm93RWxlbWVudD4gcm93OwotICAgIEhUTUxDb2xsZWN0aW9uKiBjaGlsZHJlbiA9
IHJvd3MoKTsKKyAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNoaWxkcmVuID0gcm93cygpOwog
ICAgIGludCBudW1Sb3dzID0gY2hpbGRyZW4gPyAoaW50KWNoaWxkcmVuLT5sZW5ndGgoKSA6IDA7
CiAgICAgaWYgKGluZGV4IDwgLTEgfHwgaW5kZXggPiBudW1Sb3dzKQogICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOyAvLyBwZXIgdGhlIERPTQpAQCAtODEsNyArODEsNyBAQCBQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBIVE1MVGFibGVTZWN0aW9uCiAKIHZvaWQgSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQ6OmRlbGV0ZVJvdyhpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEhU
TUxDb2xsZWN0aW9uKiBjaGlsZHJlbiA9IHJvd3MoKTsKKyAgICBSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IGNoaWxkcmVuID0gcm93cygpOwogICAgIGludCBudW1Sb3dzID0gY2hpbGRyZW4gPyAoaW50
KWNoaWxkcmVuLT5sZW5ndGgoKSA6IDA7CiAgICAgaWYgKGluZGV4ID09IC0xKQogICAgICAgICBp
bmRleCA9IG51bVJvd3MgLSAxOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQ6OnNldFZBbGlnbigKICAgICBzZXRBdHRyaWJ1dGUodmFsaWduQXR0ciwgdmFs
dWUpOwogfQogCi1IVE1MQ29sbGVjdGlvbiogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnJvd3Mo
KQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnJv
d3MoKQogewogICAgIHJldHVybiBlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihUU2VjdGlvblJv
d3MpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQuaAkocmV2aXNpb24gMTIxNzE0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1Ymxp
YzoKICAgICBTdHJpbmcgdkFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWQWxpZ24oY29uc3Qg
U3RyaW5nJik7CiAKLSAgICBIVE1MQ29sbGVjdGlvbiogcm93cygpOworICAgIFBhc3NSZWZQdHI8
SFRNTENvbGxlY3Rpb24+IHJvd3MoKTsKIAogcHJpdmF0ZToKICAgICBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTcxOSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTItMDctMDIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFr
ZSBIVE1MQ29sbGVjdGlvbiBSZWZDb3VudGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDQxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUpOgorICAgICAgICAqIHNyYy9XZWJQ
YWdlU2VyaWFsaXplckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXpl
ckltcGw6OmNvbGxlY3RUYXJnZXRGcmFtZXMpOgorCiAyMDEyLTA3LTAyICBMZWFuZHJvIEdyYWNp
YSBHaWwgIDxsZWFuZHJvZ3JhY2lhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1d
IEltcGxlbWVudCBhIExheW91dCBUZXN0IGZvciBlZGl0aW5nL1N1cnJvdW5kaW5nVGV4dApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNw
cAkocmV2aXNpb24gMTIxNzE0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBy
ZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcgogICAgICAgICBmcmFtZVVSTHMtPmFw
cGVuZChmcmFtZVVSTCk7CiAgIAogICAgIC8vIE5vdyBnZXQgdGhlIHJlc291cmNlcyBhc3NvY2lh
dGVkIHdpdGggZWFjaCBub2RlIG9mIHRoZSBkb2N1bWVudC4KLSAgICBSZWZQdHI8SFRNTEFsbENv
bGxlY3Rpb24+IGFsbE5vZGVzID0gZnJhbWUtPmRvY3VtZW50KCktPmFsbCgpOworICAgIFJlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gYWxsTm9kZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+YWxsKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFsbE5vZGVzLT5sZW5ndGgoKTsgKytpKSB7CiAg
ICAgICAgIE5vZGUqIG5vZGUgPSBhbGxOb2Rlcy0+aXRlbShpKTsKICAgICAgICAgLy8gV2UgYXJl
IG9ubHkgaW50ZXJlc3RlZCBpbiBIVE1MIHJlc291cmNlcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcAkocmV2aXNp
b24gMTIxNzE0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6
ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc2LDcgKzQ3Niw3IEBAIHZvaWQgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsOjpjb2xsZWN0VGFyZ2UKICAgICAgICAgLy8gR2V0IGN1cnJlbnQgdXNp
bmcgZG9jdW1lbnQuCiAgICAgICAgIERvY3VtZW50KiBjdXJyZW50RG9jID0gY3VycmVudEZyYW1l
LT5mcmFtZSgpLT5kb2N1bWVudCgpOwogICAgICAgICAvLyBHbyB0aHJvdWdoIHN1Yi1mcmFtZXMu
Ci0gICAgICAgIFJlZlB0cjxIVE1MQWxsQ29sbGVjdGlvbj4gYWxsID0gY3VycmVudERvYy0+YWxs
KCk7CisgICAgICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gYWxsID0gY3VycmVudERvYy0+YWxs
KCk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgTm9kZSogbm9kZSA9IGFsbC0+aXRl
bShpKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTcxOSkKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA3LTAyICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1ha2UgSFRNTENvbGxl
Y3Rpb24gUmVmQ291bnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTA0MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIERPTUhUTUxDbGFzc2VzLmNwcDoKKyAgICAgICAgKERPTUhUTUxEb2N1bWVudDo6
Zm9ybXMpOgorICAgICAgICAoRE9NSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbnMpOgorCiAyMDEy
LTA3LTAyICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IERvIG5vdCBkbyBhbnkgbG9nZ2luZyBpbml0aWFsaXphdGlvbiB3aGVuIGxvZ2dpbmcgaXMgZGlz
YWJsZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAJKHJldmlzaW9uIDEy
MTcxNCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA1LDcgKzMwNSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRN
TERvY3VtZW4KICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAogICAgIEhUTUxEb2N1bWVudCogaHRt
bERvYyA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KG1fZG9jdW1lbnQpOwotICAgICpjb2xs
ZWN0aW9uID0gRE9NSFRNTENvbGxlY3Rpb246OmNyZWF0ZUluc3RhbmNlKGh0bWxEb2MtPmZvcm1z
KCkpOworICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gZm9ybXMgPSBodG1sRG9jLT5mb3Jtcygp
OworICAgICpjb2xsZWN0aW9uID0gRE9NSFRNTENvbGxlY3Rpb246OmNyZWF0ZUluc3RhbmNlKGZv
cm1zLmdldCgpKTsKICAgICByZXR1cm4gU19PSzsKIH0KICAgICAKQEAgLTcwOSw3ICs3MTAsOCBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxTZWxlY3RFCiAgICAgaWYgKCFzZWxl
Y3RFbGVtZW50LT5vcHRpb25zKCkpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICAqcmVz
dWx0ID0gRE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpjcmVhdGVJbnN0YW5jZShzZWxlY3RFbGVt
ZW50LT5vcHRpb25zKCkpOworICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gb3B0aW9ucyA9IHNl
bGVjdEVsZW1lbnQtPm9wdGlvbnMoKTsKKyAgICAqcmVzdWx0ID0gRE9NSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uOjpjcmVhdGVJbnN0YW5jZShvcHRpb25zLmdldCgpKTsKICAgICByZXR1cm4gU19PSzsK
IH0KICAgICAK
</data>
<flag name="review"
          id="158768"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="158774"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>