<?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>134430</bug_id>
          
          <creation_ts>2014-06-28 13:59:43 -0700</creation_ts>
          <short_desc>Refactor ResourceRequest into Cocoa and iOS specific files</short_desc>
          <delta_ts>2014-06-29 16:30:45 -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>Platform</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pratik Solanki">psolanki</reporter>
          <assigned_to name="Pratik Solanki">psolanki</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>psolanki</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1019213</commentid>
    <comment_count>0</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2014-06-28 13:59:43 -0700</bug_when>
    <thetext>Too many ifdefs in ResourceRequestMac.mm. We should also separate out iOS specific code into a separate file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019214</commentid>
    <comment_count>1</comment_count>
      <attachid>234051</attachid>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2014-06-28 14:06:57 -0700</bug_when>
    <thetext>Created attachment 234051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019236</commentid>
    <comment_count>2</comment_count>
      <attachid>234057</attachid>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2014-06-28 22:29:07 -0700</bug_when>
    <thetext>Created attachment 234057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019237</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-28 22:31:46 -0700</bug_when>
    <thetext>Attachment 234057 did not pass style-queue:


ERROR: Source/WebCore/platform/network/cocoa/ResourceRequestCocoa.mm:154:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019249</commentid>
    <comment_count>4</comment_count>
      <attachid>234057</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-06-29 09:20:24 -0700</bug_when>
    <thetext>Comment on attachment 234057
Patch

Great idea!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019257</commentid>
    <comment_count>5</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2014-06-29 14:00:25 -0700</bug_when>
    <thetext>Committed r17054 - &lt;http://trac.webkit.org/changeset/170574&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019258</commentid>
    <comment_count>6</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2014-06-29 14:00:55 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Committed r17054 - &lt;http://trac.webkit.org/changeset/170574&gt;

r170574</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019263</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-06-29 16:30:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Committed r17054 - &lt;http://trac.webkit.org/changeset/170574&gt;

You&apos;re my hero!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234051</attachid>
            <date>2014-06-28 14:06:57 -0700</date>
            <delta_ts>2014-06-28 14:53:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134430-20140628140636.patch</filename>
            <type>text/plain</type>
            <size>31525</size>
            <attacher name="Pratik Solanki">psolanki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzYzN2Q1N2Y5NjhkMTky
MjZmNGQxYTk0MjZhYjM1M2VhMDc4MGZhMC4uYjk3NGNmM2NhNTZmM2Q3NDRhNzE1Zjk5N2ZkY2Zk
NWRlMDQ0MTQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE0LTA2LTI4ICBQcmF0
aWsgU29sYW5raSAgPHByYXRpay5zb2xhbmtpQGdtYWlsLmNvbT4KKworICAgICAgICBSZWZhY3Rv
ciBSZXNvdXJjZVJlcXVlc3QgaW50byBDb2NvYSBhbmQgaU9TIHNwZWNpZmljIGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ0MzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
YmVjYXVzZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9S
ZXNvdXJjZVJlcXVlc3RDb2NvYS5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tLgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvaW9zL1Jlc291cmNlUmVxdWVzdElPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6aW5pdFF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3Q6OnVzZVF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlc291cmNlUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZU5TVVJMUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6Om5zVVJMUmVxdWVzdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmNmVVJMUmVxdWVzdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUmVzb3VyY2VSZXF1
ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG9VcGRh
dGVSZXNvdXJjZUhUVFBCb2R5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtSFRUUEJvZHkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVGcm9tRGVsZWdhdGVQ
cmVzZXJ2aW5nT2xkUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q6OmFwcGx5V2ViQXJjaGl2ZUhhY2tGb3JNYWlsKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6c2V0U3RvcmFnZVNlc3Npb24pOiBEZWxldGVk
LgorCiAyMDE0LTA2LTE4ICBKYW1lcyBDcmFpZyAgPGpjcmFpZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogQVhJOiBleHBvc2UgYXJpYS1yZWxldmFudApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJkZGRmMWMy
NDE3NWQ2M2QxMDgxOGZjMmQzYTAxMGFkNGQ4MDAyODIuLjFhZGZjM2VlYjk5NzFmMGYxZjE2N2Fh
MjEyMzJiMTA3MzViMGNjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0MjEsNiArMjQyMSw4IEBACiAJCTdFNjZFMjMzMTdF
NkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U2NkUyMzExN0U2RUI2QzAw
RjdFN0ZGIC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAgKi87IH07CiAJCTdFNjZF
MjM0MTZENkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTY2RTIzMjE2RDZFQjZD
MDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oICovOyB9OwogCQk3RTY2RTIz
NDE3RTZFQjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTY2RTIzMjE3RTZFQjZD
MDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmggKi87IH07CisJCTdFN0RF
MUZEMTk1Q0VGMjYwMDM1MzYzQiAvKiBSZXNvdXJjZVJlcXVlc3RDb2NvYS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFN0RFMUZDMTk1Q0VGMjYwMDM1
MzYzQiAvKiBSZXNvdXJjZVJlcXVlc3RDb2NvYS5tbSAqLzsgfTsKKwkJN0U3REUyMDIxOTVDRUZD
RDAwMzUzNjNCIC8qIFJlc291cmNlUmVxdWVzdElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFN0RFMjAxMTk1Q0VGQ0QwMDM1MzYzQiAvKiBSZXNv
dXJjZVJlcXVlc3RJT1MubW0gKi87IH07CiAJCTdFOTlBRjUxMEIxMzg0NjQ2OEZCMDFBNSAvKiBX
aW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0U5OUFGNTIwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRvd0Zv
Y3VzQWxsb3dlZEluZGljYXRvci5jcHAgKi87IH07CiAJCTdFOTlBRjUzMEIxMzg0NjQ2OEZCMDFB
NSAvKiBXaW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFOTlBRjU0MEIxMzg0NjQ2OEZCMDFBNSAvKiBXaW5k
b3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3RUEzMEY2OTE2REZGRTc1MDAyNTdEMEIgLyogSlNXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdFQTMwRjY3MTZERkZFNzUwMDI1N0QwQiAvKiBKU1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEMuY3BwICovOyB9OwpAQCAtOTUzNyw2ICs5NTM5LDggQEAKIAkJN0U2NkUyMzEx
N0U2RUI2QzAwRjdFN0ZGIC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZS
VEMuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFNjZFMjMyMTZENkVCNkMwMEY3RTdGRiAvKiBX
ZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdFNjZFMjMy
MTdFNkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmg7
IHBhdGggPSBjYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdFN0RFMUZDMTk1Q0VGMjYwMDM1MzYzQiAvKiBSZXNvdXJjZVJl
cXVlc3RDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFJl
c291cmNlUmVxdWVzdENvY29hLm1tOyBwYXRoID0gY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdFN0RFMjAxMTk1Q0VGQ0QwMDM1MzYz
QiAvKiBSZXNvdXJjZVJlcXVlc3RJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBSZXNvdXJjZVJlcXVlc3RJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdFOTlBRjUyMEIxMzg0NjQ2OEZCMDFBNSAvKiBXaW5kb3dGb2N1c0FsbG93ZWRJbmRp
Y2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2luZG93Rm9j
dXNBbGxvd2VkSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U5
OUFGNTQwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXaW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0VBMzBGNjIxNkRGRDYyNzAwMjU3
RDBCIC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFt
ZSA9IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVBVEMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2
NDcsNiArMTU2NTEsNyBAQAogCQkJCTQ0MkFGN0E4MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xv
b2subW0gKi8sCiAJCQkJQTEwREJGNDYxOEY5MjMxNzAwMEQ3MEM2IC8qIFF1aWNrTG9va0hhbmRs
ZUNsaWVudC5oICovLAogCQkJCTdFNDI4Q0U0MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhh
bmRsZUlPUy5tbSAqLywKKwkJCQk3RTdERTIwMTE5NUNFRkNEMDAzNTM2M0IgLyogUmVzb3VyY2VS
ZXF1ZXN0SU9TLm1tICovLAogCQkJCTQ0QTIwREI4MEY4NDE2NkMwMEIzRTFGRSAvKiBXZWJDb3Jl
VVJMUmVzcG9uc2VJT1MuaCAqLywKIAkJCQk0NDRENEUyMTBGNzA4QjJFMDAzMTU4RTAgLyogV2Vi
Q29yZVVSTFJlc3BvbnNlSU9TLm1tICovLAogCQkJKTsKQEAgLTE2MTg2LDYgKzE2MTkxLDcgQEAK
IAkJNjU2Qjg0RDcwQUVBMUNFOTAwQTA5NUI0IC8qIG5ldHdvcmsgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTdFN0RFMUZFMTk1Q0VGMkQwMDM1MzYzQiAv
KiBjb2NvYSAqLywKIAkJCQlCMkYzNEZFNzBFODJGODE3MDBGNjI3Q0QgLyogY2YgKi8sCiAJCQkJ
NDQ5N0Q1OEMwRUJBODU0RjAwQTEwNTUyIC8qIGlvcyAqLywKIAkJCQk2NTZCODRFNzBBRUExREFF
MDBBMDk1QjQgLyogbWFjICovLApAQCAtMTY2MjgsNiArMTY2MzQsMTQgQEAKIAkJCXBhdGggPSBp
Y3U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3RTdERTFGRTE5NUNFRjJE
MDAzNTM2M0IgLyogY29jb2EgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTdFN0RFMUZDMTk1Q0VGMjYwMDM1MzYzQiAvKiBSZXNvdXJjZVJlcXVlc3RDb2Nv
YS5tbSAqLywKKwkJCSk7CisJCQluYW1lID0gY29jb2E7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQk3RUU2ODQ3MzEyRDI2RTU1MDBFNzk0MTUgLyogY2YgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjgxMjksNiArMjgxNDMsNyBAQAog
CQkJCUJDNDkxOEM4MEJGRUEwNTAwMDlENjMxNiAvKiBKU0hUTUxJRnJhbWVFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBRTJBQTk3MEExQ0REMkQwMEI0MkIyNSAvKiBKU0hUTUxJbWFn
ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdFOTgwQTFBODNFMzAwN0ZCOEM1
IC8qIEpTSFRNTElucHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3RTdERTIwMjE5
NUNFRkNEMDAzNTM2M0IgLyogUmVzb3VyY2VSZXF1ZXN0SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNDNDM4NzgwRTg4NkNDNzAwNTMzREQ1IC8qIEpTSFRNTElucHV0RWxlbWVudEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNjE0OEE3ODEyRTQxRTNCMDA0NEE3ODQgLyogSlNIVE1M
S2V5Z2VuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyMTBBMUNFNjNCMDBC
NDJCMjUgLyogSlNIVE1MTGFiZWxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg2ODUs
NiArMjg3MDAsNyBAQAogCQkJCTdDQzY5OTQwMTkxRUM1RjUwMEFGMjI3MCAvKiBKU1dlYktpdE5h
bWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDQ2MTNFMzBDRDY4MTlGMDBGQURBNzUg
LyogTWVkaWFQbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcyQzhCMTExMzFDNTE4NjAw
QTRGQ0U5IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk3RTdERTFGRDE5NUNFRjI2MDAzNTM2M0IgLyogUmVzb3VyY2VSZXF1ZXN0Q29jb2Eu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlERjlBRkQ3MzEzRkMzMUQ4MDAxNUZFQjcgLyogTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQzhC
NUEyMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFNDQ2MTNFNTBDRDY4MUE2MDBGQURBNzUgLyogTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENv
Y29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE4MThhM2Q4NzAyNmIyN2U2ODk4NDdkOTFlOTZjMjU0NWNjYmRm
MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nv
Y29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlJlc291cmNlUmVxdWVzdC5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNp
bXBvcnQgIkZvcm1EYXRhU3RyZWFtTWFjLmgiCisjaW1wb3J0ICJIVFRQSGVhZGVyTmFtZXMuaCIK
KyNpbXBvcnQgIlJlc291cmNlUmVxdWVzdENGTmV0LmgiCisjaW1wb3J0ICJSdW50aW1lQXBwbGlj
YXRpb25DaGVja3MuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBv
cnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisKK0BpbnRlcmZhY2UgTlNVUkxSZXF1ZXN0IChXZWJOU1VSTFJlcXVlc3REZXRhaWxzKQor
LSAoTlNBcnJheSAqKWNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTsKKysg
KHZvaWQpc2V0RGVmYXVsdFRpbWVvdXRJbnRlcnZhbDooTlNUaW1lSW50ZXJ2YWwpc2Vjb25kczsK
Ky0gKENGVVJMUmVxdWVzdFJlZilfQ0ZVUkxSZXF1ZXN0OworLSAoaWQpX2luaXRXaXRoQ0ZVUkxS
ZXF1ZXN0OihDRlVSTFJlcXVlc3RSZWYpcmVxdWVzdDsKK0BlbmQKKworQGludGVyZmFjZSBOU011
dGFibGVVUkxSZXF1ZXN0IChXZWJNdXRhYmxlTlNVUkxSZXF1ZXN0RGV0YWlscykKKy0gKHZvaWQp
c2V0Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5OihOU0FycmF5ICopdGhl
RW5jb2RpbmdGYWxsYmFja0FycmF5OworQGVuZAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05T
VVJMUmVxdWVzdCAqUmVzb3VyY2VSZXF1ZXN0Ojpuc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQ
b2xpY3kgYm9keVBvbGljeSkgY29uc3QKK3sKKyAgICB1cGRhdGVQbGF0Zm9ybVJlcXVlc3QoYm9k
eVBvbGljeSk7CisgICAgcmV0dXJuIFtbbV9uc1JlcXVlc3QuZ2V0KCkgcmV0YWluXSBhdXRvcmVs
ZWFzZV07Cit9CisKKyNpZiAhVVNFKENGTkVUV09SSykKKworQ0ZVUkxSZXF1ZXN0UmVmIFJlc291
cmNlUmVxdWVzdDo6Y2ZVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5IGJvZHlQb2xpY3kp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFtuc1VSTFJlcXVlc3QoYm9keVBvbGljeSkgX0NGVVJMUmVx
dWVzdF07Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmVxdWVz
dCgpCit7CisgICAgbV91cmwgPSBbbV9uc1JlcXVlc3QuZ2V0KCkgVVJMXTsKKyAgICBtX2NhY2hl
UG9saWN5ID0gKFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5KVttX25zUmVxdWVzdC5nZXQoKSBj
YWNoZVBvbGljeV07CisgICAgbV90aW1lb3V0SW50ZXJ2YWwgPSBbbV9uc1JlcXVlc3QuZ2V0KCkg
dGltZW91dEludGVydmFsXTsKKyAgICBtX2ZpcnN0UGFydHlGb3JDb29raWVzID0gW21fbnNSZXF1
ZXN0LmdldCgpIG1haW5Eb2N1bWVudFVSTF07CisgICAgCisgICAgaWYgKE5TU3RyaW5nKiBtZXRo
b2QgPSBbbV9uc1JlcXVlc3QuZ2V0KCkgSFRUUE1ldGhvZF0pCisgICAgICAgIG1faHR0cE1ldGhv
ZCA9IG1ldGhvZDsKKyAgICBtX2FsbG93Q29va2llcyA9IFttX25zUmVxdWVzdC5nZXQoKSBIVFRQ
U2hvdWxkSGFuZGxlQ29va2llc107CisKKyAgICBtX3ByaW9yaXR5ID0gdG9SZXNvdXJjZUxvYWRQ
cmlvcml0eSh3a0dldEhUVFBSZXF1ZXN0UHJpb3JpdHkoW21fbnNSZXF1ZXN0LmdldCgpIF9DRlVS
TFJlcXVlc3RdKSk7CisKKyAgICBOU0RpY3Rpb25hcnkgKmhlYWRlcnMgPSBbbV9uc1JlcXVlc3Qu
Z2V0KCkgYWxsSFRUUEhlYWRlckZpZWxkc107CisgICAgTlNFbnVtZXJhdG9yICplID0gW2hlYWRl
cnMga2V5RW51bWVyYXRvcl07CisgICAgTlNTdHJpbmcgKm5hbWU7CisgICAgbV9odHRwSGVhZGVy
RmllbGRzLmNsZWFyKCk7CisgICAgd2hpbGUgKChuYW1lID0gW2UgbmV4dE9iamVjdF0pKQorICAg
ICAgICBtX2h0dHBIZWFkZXJGaWVsZHMuc2V0KFN0cmluZyhuYW1lKSwgW2hlYWRlcnMgb2JqZWN0
Rm9yS2V5Om5hbWVdKTsKKworICAgIG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGlu
Z0ZhbGxiYWNrQXJyYXkuY2xlYXIoKTsKKyAgICBOU0FycmF5ICplbmNvZGluZ0ZhbGxiYWNrcyA9
IFttX25zUmVxdWVzdC5nZXQoKSBjb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXldOworICAgIE5TVUludGVnZXIgY291bnQgPSBbZW5jb2RpbmdGYWxsYmFja3MgY291bnRdOwor
ICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZT
dHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IENGU3RyaW5nQ29udmVydE5TU3RyaW5nRW5jb2RpbmdU
b0VuY29kaW5nKFsoTlNOdW1iZXIgKilbZW5jb2RpbmdGYWxsYmFja3Mgb2JqZWN0QXRJbmRleDpp
XSB1bnNpZ25lZExvbmdWYWx1ZV0pOworICAgICAgICBpZiAoZW5jb2RpbmcgIT0ga0NGU3RyaW5n
RW5jb2RpbmdJbnZhbGlkSWQpCisgICAgICAgICAgICBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0
aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LmFwcGVuZChDRlN0cmluZ0NvbnZlcnRFbmNvZGluZ1Rv
SUFOQUNoYXJTZXROYW1lKGVuY29kaW5nKSk7CisgICAgfQorCisjaWYgRU5BQkxFKENBQ0hFX1BB
UlRJVElPTklORykKKyAgICBpZiAobV9uc1JlcXVlc3QpIHsKKyAgICAgICAgTlNTdHJpbmcqIGNh
Y2hlUGFydGl0aW9uID0gW05TVVJMUHJvdG9jb2wgcHJvcGVydHlGb3JLZXk6KE5TU3RyaW5nICop
d2tDYWNoZVBhcnRpdGlvbktleSgpIGluUmVxdWVzdDptX25zUmVxdWVzdC5nZXQoKV07CisgICAg
ICAgIGlmIChjYWNoZVBhcnRpdGlvbikKKyAgICAgICAgICAgIG1fY2FjaGVQYXJ0aXRpb24gPSBj
YWNoZVBhcnRpdGlvbjsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBSZXNvdXJjZVJlcXVlc3Q6
OmRvVXBkYXRlUmVzb3VyY2VIVFRQQm9keSgpCit7CisgICAgaWYgKE5TRGF0YSogYm9keURhdGEg
PSBbbV9uc1JlcXVlc3QuZ2V0KCkgSFRUUEJvZHldKQorICAgICAgICBtX2h0dHBCb2R5ID0gRm9y
bURhdGE6OmNyZWF0ZShbYm9keURhdGEgYnl0ZXNdLCBbYm9keURhdGEgbGVuZ3RoXSk7CisgICAg
ZWxzZSBpZiAoTlNJbnB1dFN0cmVhbSogYm9keVN0cmVhbSA9IFttX25zUmVxdWVzdC5nZXQoKSBI
VFRQQm9keVN0cmVhbV0pIHsKKyAgICAgICAgRm9ybURhdGEqIGZvcm1EYXRhID0gaHR0cEJvZHlG
cm9tU3RyZWFtKGJvZHlTdHJlYW0pOworICAgICAgICAvLyBUaGVyZSBpcyBubyBGb3JtRGF0YSBv
YmplY3QgaWYgYSBjbGllbnQgcHJvdmlkZWQgYSBjdXN0b20gZGF0YSBzdHJlYW0uCisgICAgICAg
IC8vIFdlIHNob3VsZG4ndCBiZSBsb29raW5nIGF0IGh0dHAgYm9keSBhZnRlciBjbGllbnQgY2Fs
bGJhY2tzLgorICAgICAgICBBU1NFUlQoZm9ybURhdGEpOworICAgICAgICBpZiAoZm9ybURhdGEp
CisgICAgICAgICAgICBtX2h0dHBCb2R5ID0gZm9ybURhdGE7CisgICAgfQorfQorCit2b2lkIFJl
c291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKQoreworICAgIGlmIChpc051
bGwoKSkgeworICAgICAgICBtX25zUmVxdWVzdCA9IG5pbDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBOU011dGFibGVVUkxSZXF1ZXN0ICpuc1JlcXVlc3QgPSBbbV9uc1JlcXVl
c3QuZ2V0KCkgbXV0YWJsZUNvcHldOworCisgICAgaWYgKG5zUmVxdWVzdCkKKyAgICAgICAgW25z
UmVxdWVzdCBzZXRVUkw6dXJsKCldOworICAgIGVsc2UKKyAgICAgICAgbnNSZXF1ZXN0ID0gW1tO
U011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDp1cmwoKV07CisKKyAgICBpZiAo
UmVzb3VyY2VSZXF1ZXN0OjpodHRwUGlwZWxpbmluZ0VuYWJsZWQoKSkKKyAgICAgICAgd2tIVFRQ
UmVxdWVzdEVuYWJsZVBpcGVsaW5pbmcoW25zUmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XSk7CisKKyAg
ICB3a1NldEhUVFBSZXF1ZXN0UHJpb3JpdHkoW25zUmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0XSwgdG9Q
bGF0Zm9ybVJlcXVlc3RQcmlvcml0eShtX3ByaW9yaXR5KSk7CisKKyAgICBbbnNSZXF1ZXN0IHNl
dENhY2hlUG9saWN5OihOU1VSTFJlcXVlc3RDYWNoZVBvbGljeSljYWNoZVBvbGljeSgpXTsKKyAg
ICB3a0NGVVJMUmVxdWVzdEFsbG93QWxsUG9zdENhY2hpbmcoW25zUmVxdWVzdCBfQ0ZVUkxSZXF1
ZXN0XSk7CisKKyAgICBkb3VibGUgdGltZW91dEludGVydmFsID0gUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6dGltZW91dEludGVydmFsKCk7CisgICAgaWYgKHRpbWVvdXRJbnRlcnZhbCkKKyAgICAgICAg
W25zUmVxdWVzdCBzZXRUaW1lb3V0SW50ZXJ2YWw6dGltZW91dEludGVydmFsXTsKKyAgICAvLyBP
dGhlcndpc2UsIHJlc3BlY3QgTlNVUkxSZXF1ZXN0IGRlZmF1bHQgdGltZW91dC4KKworICAgIFtu
c1JlcXVlc3Qgc2V0TWFpbkRvY3VtZW50VVJMOmZpcnN0UGFydHlGb3JDb29raWVzKCldOworICAg
IGlmICghaHR0cE1ldGhvZCgpLmlzRW1wdHkoKSkKKyAgICAgICAgW25zUmVxdWVzdCBzZXRIVFRQ
TWV0aG9kOmh0dHBNZXRob2QoKV07CisgICAgW25zUmVxdWVzdCBzZXRIVFRQU2hvdWxkSGFuZGxl
Q29va2llczphbGxvd0Nvb2tpZXMoKV07CisKKyAgICAvLyBDYW5ub3QganVzdCB1c2Ugc2V0QWxs
SFRUUEhlYWRlckZpZWxkcyBoZXJlLCBiZWNhdXNlIGl0IGRvZXMgbm90IHJlbW92ZSBoZWFkZXJz
LgorICAgIE5TQXJyYXkgKm9sZEhlYWRlckZpZWxkTmFtZXMgPSBbW25zUmVxdWVzdCBhbGxIVFRQ
SGVhZGVyRmllbGRzXSBhbGxLZXlzXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBbb2xkSGVhZGVy
RmllbGROYW1lcyBjb3VudF07IGkgIT0gMDsgLS1pKQorICAgICAgICBbbnNSZXF1ZXN0IHNldFZh
bHVlOm5pbCBmb3JIVFRQSGVhZGVyRmllbGQ6W29sZEhlYWRlckZpZWxkTmFtZXMgb2JqZWN0QXRJ
bmRleDppIC0gMV1dOworICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogaHR0cEhlYWRlckZp
ZWxkcygpKQorICAgICAgICBbbnNSZXF1ZXN0IHNldFZhbHVlOmhlYWRlci52YWx1ZSBmb3JIVFRQ
SGVhZGVyRmllbGQ6aGVhZGVyLmtleV07CisKKyAgICBOU011dGFibGVBcnJheSAqZW5jb2RpbmdG
YWxsYmFja3MgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIHVuc2lnbmVkIGNvdW50ID0g
bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CisgICAgICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gZW5jb2RpbmdOYW1lID0gbV9yZXNwb25zZUNvbnRlbnREaXNw
b3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVtpXS5jcmVhdGVDRlN0cmluZygpOworICAgICAg
ICB1bnNpZ25lZCBsb25nIG5zRW5jb2RpbmcgPSBDRlN0cmluZ0NvbnZlcnRFbmNvZGluZ1RvTlNT
dHJpbmdFbmNvZGluZyhDRlN0cmluZ0NvbnZlcnRJQU5BQ2hhclNldE5hbWVUb0VuY29kaW5nKGVu
Y29kaW5nTmFtZS5nZXQoKSkpOworCisgICAgICAgIGlmIChuc0VuY29kaW5nICE9IGtDRlN0cmlu
Z0VuY29kaW5nSW52YWxpZElkKQorICAgICAgICAgICAgW2VuY29kaW5nRmFsbGJhY2tzIGFkZE9i
amVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkTG9uZzpuc0VuY29kaW5nXV07CisgICAg
fQorICAgIFtuc1JlcXVlc3Qgc2V0Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5OmVuY29kaW5nRmFsbGJhY2tzXTsKKworI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcp
CisgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9uKCk7CisgICAgaWYgKCFwYXJ0
aXRpb24uaXNOdWxsKCkgJiYgIXBhcnRpdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgTlNTdHJp
bmcgKnBhcnRpdGlvblZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnBhcnRp
dGlvbi51dGY4KCkuZGF0YSgpXTsKKyAgICAgICAgW05TVVJMUHJvdG9jb2wgc2V0UHJvcGVydHk6
cGFydGl0aW9uVmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKXdrQ2FjaGVQYXJ0aXRpb25LZXkoKSBp
blJlcXVlc3Q6bnNSZXF1ZXN0XTsKKyAgICB9CisjZW5kaWYKKworICAgIG1fbnNSZXF1ZXN0ID0g
YWRvcHROUyhuc1JlcXVlc3QpOworfQorCit2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQ
bGF0Zm9ybUhUVFBCb2R5KCkKK3sKKyAgICBpZiAoaXNOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJU
KCFtX25zUmVxdWVzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU011dGFibGVV
UkxSZXF1ZXN0ICpuc1JlcXVlc3QgPSBbbV9uc1JlcXVlc3QuZ2V0KCkgbXV0YWJsZUNvcHldOwor
CisgICAgaWYgKG5zUmVxdWVzdCkKKyAgICAgICAgW25zUmVxdWVzdCBzZXRVUkw6dXJsKCldOwor
ICAgIGVsc2UKKyAgICAgICAgbnNSZXF1ZXN0ID0gW1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9j
XSBpbml0V2l0aFVSTDp1cmwoKV07CisKKyAgICBSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhID0g
aHR0cEJvZHkoKTsKKyAgICBpZiAoZm9ybURhdGEgJiYgIWZvcm1EYXRhLT5pc0VtcHR5KCkpCisg
ICAgICAgIFdlYkNvcmU6OnNldEhUVFBCb2R5KG5zUmVxdWVzdCwgZm9ybURhdGEpOworCisgICAg
aWYgKE5TSW5wdXRTdHJlYW0gKmJvZHlTdHJlYW0gPSBbbnNSZXF1ZXN0IEhUVFBCb2R5U3RyZWFt
XSkgeworICAgICAgICAvLyBGb3Igc3RyZWFtcywgcHJvdmlkZSBhIENvbnRlbnQtTGVuZ3RoIHRv
IGF2b2lkIHVzaW5nIGNodW5rZWQgZW5jb2RpbmcsIGFuZCB0byBnZXQgYWNjdXJhdGUgdG90YWwg
bGVuZ3RoIGluIGNhbGxiYWNrcy4KKyAgICAgICAgTlNTdHJpbmcgKmxlbmd0aFN0cmluZyA9IFti
b2R5U3RyZWFtIHByb3BlcnR5Rm9yS2V5OihOU1N0cmluZyAqKWZvcm1EYXRhU3RyZWFtTGVuZ3Ro
UHJvcGVydHlOYW1lKCldOworICAgICAgICBpZiAobGVuZ3RoU3RyaW5nKSB7CisgICAgICAgICAg
ICBbbnNSZXF1ZXN0IHNldFZhbHVlOmxlbmd0aFN0cmluZyBmb3JIVFRQSGVhZGVyRmllbGQ6QCJD
b250ZW50LUxlbmd0aCJdOworICAgICAgICAgICAgLy8gU2luY2UgcmVzb3VyY2UgcmVxdWVzdCBp
cyBhbHJlYWR5IG1hcmtlZCB1cGRhdGVkLCB3ZSBuZWVkIHRvIGtlZXAgaXQgdXAgdG8gZGF0ZSB0
b28uCisgICAgICAgICAgICBBU1NFUlQobV9yZXNvdXJjZVJlcXVlc3RVcGRhdGVkKTsKKyAgICAg
ICAgICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5n
dGgsIGxlbmd0aFN0cmluZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX25zUmVxdWVzdCA9
IGFkb3B0TlMobnNSZXF1ZXN0KTsKK30KKwordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZy
b21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
ZGVsZWdhdGVQcm92aWRlZFJlcXVlc3QpCit7CisgICAgUmVmUHRyPEZvcm1EYXRhPiBvbGRIVFRQ
Qm9keSA9IGh0dHBCb2R5KCk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBib29sIGlzSGlk
ZGVuRnJvbUluc3BlY3RvciA9IGhpZGRlbkZyb21JbnNwZWN0b3IoKTsKKyNlbmRpZgorCisgICAg
KnRoaXMgPSBkZWxlZ2F0ZVByb3ZpZGVkUmVxdWVzdDsKKworICAgIHNldEhUVFBCb2R5KG9sZEhU
VFBCb2R5LnJlbGVhc2UoKSk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBzZXRIaWRkZW5G
cm9tSW5zcGVjdG9yKGlzSGlkZGVuRnJvbUluc3BlY3Rvcik7CisjZW5kaWYKK30KKworI2lmICFQ
TEFURk9STShJT1MpCit2b2lkIFJlc291cmNlUmVxdWVzdDo6YXBwbHlXZWJBcmNoaXZlSGFja0Zv
ck1haWwoKQoreworICAgIC8vIEhhY2sgYmVjYXVzZSBNYWlsIGNoZWNrcyBmb3IgdGhpcyBwcm9w
ZXJ0eSB0byBkZXRlY3QgZGF0YSAvIGFyY2hpdmUgbG9hZHMKKyAgICBbTlNVUkxQcm90b2NvbCBz
ZXRQcm9wZXJ0eTpAIiIgZm9yS2V5OkAiV2ViRGF0YVJlcXVlc3QiIGluUmVxdWVzdDooTlNNdXRh
YmxlVVJMUmVxdWVzdCAqKW5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KV07Cit9Cisj
ZW5kaWYKKwordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnNldFN0b3JhZ2VTZXNzaW9uKENGVVJMU3Rv
cmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24pCit7CisgICAgdXBkYXRlUGxhdGZvcm1SZXF1
ZXN0KCk7CisgICAgbV9uc1JlcXVlc3QgPSBhZG9wdE5TKHdrQ29weVJlcXVlc3RXaXRoU3RvcmFn
ZVNlc3Npb24oc3RvcmFnZVNlc3Npb24sIG1fbnNSZXF1ZXN0LmdldCgpKSk7Cit9CisgICAgCisj
ZW5kaWYgLy8gVVNFKENGTkVUV09SSykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUmVz
b3VyY2VSZXF1ZXN0SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3Mv
UmVzb3VyY2VSZXF1ZXN0SU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkYTM2YjllMGI3ZjA4ZWRjMWRkMTk1
NWYxYzAyNGMzNjA5NjExNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJjZVJlcXVlc3RJT1MubW0KQEAgLTAsMCArMSw3NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJSZXNvdXJjZVJlcXVlc3QuaCIKKworI2lmIFBMQVRGT1JNKElP
UykKKworQGludGVyZmFjZSBOU1VSTFJlcXVlc3QgKFdlYk5TVVJMUmVxdWVzdERldGFpbHMpCist
IChDRlVSTFJlcXVlc3RSZWYpX0NGVVJMUmVxdWVzdDsKKy0gKGlkKV9pbml0V2l0aENGVVJMUmVx
dWVzdDooQ0ZVUkxSZXF1ZXN0UmVmKXJlcXVlc3Q7CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworYm9vbCBSZXNvdXJjZVJlcXVlc3Q6OnVzZVF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1
aXJrcygpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgVVNFKENGTkVUV09SSykKKwor
UmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJjZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3Qp
CisgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKCkKKyAgICAsIG1fbWFpblJlc291cmNlUmVxdWVz
dChmYWxzZSkKKyAgICAsIG1fY2ZSZXF1ZXN0KFtuc1JlcXVlc3QgX0NGVVJMUmVxdWVzdF0pCisg
ICAgLCBtX25zUmVxdWVzdChuc1JlcXVlc3QpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0
Ojp1cGRhdGVOU1VSTFJlcXVlc3QoKQoreworICAgIC8vIFRoZXJlIGlzIGNsaWVudCBjb2RlIHRo
YXQgZXh0ZW5kcyBOU1VSTFJlcXVlc3QgYW5kIGV4cGVjdHMgdG8gZ2V0IGJhY2ssIGluIHRoZSBk
ZWxlZ2F0ZQorICAgIC8vIGNhbGxiYWNrcywgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgdGhh
dCB0aGV5IHBhc3NlZCBpbnRvIFdlYktpdC4gVG8ga2VlcCB0aGVuIHJ1bm5pbmcsIHdlCisgICAg
Ly8gY3JlYXRlIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCByZXR1cm4gdGhhdC4gU2Vl
IDxyZGFyOi8vOTg0MzU4Mj4uCisgICAgLy8gQWxzbywgZGV2ZWxvcGVycyByZWFsbHkgcmVhbGx5
IHdhbnQgYW4gTlNNdXRhYmxlVVJMUmVxdWVzdCBzbyB0cnkgdG8gY3JlYXRlIGFuCisgICAgLy8g
TlNNdXRhYmxlVVJMUmVxdWVzdCBpbnN0ZWFkIG9mIE5TVVJMUmVxdWVzdC4KKyAgICBzdGF0aWMg
Q2xhc3MgbnNVUkxSZXF1ZXN0Q2xhc3MgPSBbTlNVUkxSZXF1ZXN0IGNsYXNzXTsKKyAgICBzdGF0
aWMgQ2xhc3MgbnNNdXRhYmxlVVJMUmVxdWVzdENsYXNzID0gW05TTXV0YWJsZVVSTFJlcXVlc3Qg
Y2xhc3NdOworICAgIENsYXNzIHJlcXVlc3RDbGFzcyA9IFttX25zUmVxdWVzdC5nZXQoKSBjbGFz
c107CisKKyAgICBpZiAoIXJlcXVlc3RDbGFzcyB8fCByZXF1ZXN0Q2xhc3MgPT0gbnNVUkxSZXF1
ZXN0Q2xhc3MpCisgICAgICAgIHJlcXVlc3RDbGFzcyA9IG5zTXV0YWJsZVVSTFJlcXVlc3RDbGFz
czsKKworICAgIGlmIChtX2NmUmVxdWVzdCkKKyAgICAgICAgbV9uc1JlcXVlc3QgPSBhZG9wdE5T
KFtbcmVxdWVzdENsYXNzIGFsbG9jXSBfaW5pdFdpdGhDRlVSTFJlcXVlc3Q6bV9jZlJlcXVlc3Qu
Z2V0KCldKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJj
ZVJlcXVlc3RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZVJlcXVlc3RNYWMubW0KaW5kZXggMjBkOWZmYWRhYjIxMGVmM2EzNDczODRlYjdiNDE0NGIw
Y2QyNjE0YS4uNmRlZjlhYWNhNWFjOGNmNjAzYTBjMmRmZDZlZDM5NmM1ODNmMTNjZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNl
UmVxdWVzdE1hYy5tbQpAQCAtMjYsMjU1ICsyNiwxOSBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAj
aW1wb3J0ICJSZXNvdXJjZVJlcXVlc3QuaCIKIAotI2ltcG9ydCAiRm9ybURhdGFTdHJlYW1NYWMu
aCIKLSNpbXBvcnQgIkhUVFBIZWFkZXJOYW1lcy5oIgotI2ltcG9ydCAiUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuaCIKKyNpZiBQTEFURk9STShNQUMpCisKICNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2ltcG9ydCA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
IAotCiBAaW50ZXJmYWNlIE5TVVJMUmVxdWVzdCAoV2ViTlNVUkxSZXF1ZXN0RGV0YWlscykKLS0g
KE5TQXJyYXkgKiljb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk7Ci0rICh2
b2lkKXNldERlZmF1bHRUaW1lb3V0SW50ZXJ2YWw6KE5TVGltZUludGVydmFsKXNlY29uZHM7CiAt
IChDRlVSTFJlcXVlc3RSZWYpX0NGVVJMUmVxdWVzdDsKIC0gKGlkKV9pbml0V2l0aENGVVJMUmVx
dWVzdDooQ0ZVUkxSZXF1ZXN0UmVmKXJlcXVlc3Q7CiBAZW5kCiAKLUBpbnRlcmZhY2UgTlNNdXRh
YmxlVVJMUmVxdWVzdCAoV2ViTXV0YWJsZU5TVVJMUmVxdWVzdERldGFpbHMpCi0tICh2b2lkKXNl
dENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTooTlNBcnJheSAqKXRoZUVu
Y29kaW5nRmFsbGJhY2tBcnJheTsKLUBlbmQKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OU1VS
TFJlcXVlc3QgKlJlc291cmNlUmVxdWVzdDo6bnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9s
aWN5IGJvZHlQb2xpY3kpIGNvbnN0Ci17Ci0gICAgdXBkYXRlUGxhdGZvcm1SZXF1ZXN0KGJvZHlQ
b2xpY3kpOwotCi0gICAgcmV0dXJuIFtbbV9uc1JlcXVlc3QuZ2V0KCkgcmV0YWluXSBhdXRvcmVs
ZWFzZV07Ci19Ci0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotCi1SZXNvdXJjZVJlcXVlc3Q6OlJlc291
cmNlUmVxdWVzdChOU1VSTFJlcXVlc3QgKm5zUmVxdWVzdCkKLSAgICA6IFJlc291cmNlUmVxdWVz
dEJhc2UoKQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChm
YWxzZSkKLSNlbmRpZgotICAgICwgbV9jZlJlcXVlc3QoW25zUmVxdWVzdCBfQ0ZVUkxSZXF1ZXN0
XSkKLSAgICAsIG1fbnNSZXF1ZXN0KG5zUmVxdWVzdCkKLXsKLX0KLQotdm9pZCBSZXNvdXJjZVJl
cXVlc3Q6OnVwZGF0ZU5TVVJMUmVxdWVzdCgpCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8v
IFRoZXJlIGlzIGNsaWVudCBjb2RlIHRoYXQgZXh0ZW5kcyBOU1VSTFJlcXVlc3QgYW5kIGV4cGVj
dHMgdG8gZ2V0IGJhY2ssIGluIHRoZSBkZWxlZ2F0ZQotICAgIC8vIGNhbGxiYWNrcywgYW4gb2Jq
ZWN0IG9mIHRoZSBzYW1lIHR5cGUgdGhhdCB0aGV5IHBhc3NlZCBpbnRvIFdlYktpdC4gVG8ga2Vl
cCB0aGVuIHJ1bm5pbmcsIHdlCi0gICAgLy8gY3JlYXRlIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0
eXBlIGFuZCByZXR1cm4gdGhhdC4gU2VlIDxyZGFyOi8vOTg0MzU4Mj4uCi0gICAgLy8gQWxzbywg
ZGV2ZWxvcGVycyByZWFsbHkgcmVhbGx5IHdhbnQgYW4gTlNNdXRhYmxlVVJMUmVxdWVzdCBzbyB0
cnkgdG8gY3JlYXRlIGFuCi0gICAgLy8gTlNNdXRhYmxlVVJMUmVxdWVzdCBpbnN0ZWFkIG9mIE5T
VVJMUmVxdWVzdC4KLSAgICBzdGF0aWMgQ2xhc3MgbnNVUkxSZXF1ZXN0Q2xhc3MgPSBbTlNVUkxS
ZXF1ZXN0IGNsYXNzXTsKLSAgICBzdGF0aWMgQ2xhc3MgbnNNdXRhYmxlVVJMUmVxdWVzdENsYXNz
ID0gW05TTXV0YWJsZVVSTFJlcXVlc3QgY2xhc3NdOwotICAgIENsYXNzIHJlcXVlc3RDbGFzcyA9
IFttX25zUmVxdWVzdC5nZXQoKSBjbGFzc107Ci0KLSAgICBpZiAoIXJlcXVlc3RDbGFzcyB8fCBy
ZXF1ZXN0Q2xhc3MgPT0gbnNVUkxSZXF1ZXN0Q2xhc3MpCi0gICAgICAgIHJlcXVlc3RDbGFzcyA9
IG5zTXV0YWJsZVVSTFJlcXVlc3RDbGFzczsKLQotICAgIGlmIChtX2NmUmVxdWVzdCkKLSAgICAg
ICAgbV9uc1JlcXVlc3QgPSBhZG9wdE5TKFtbcmVxdWVzdENsYXNzIGFsbG9jXSBfaW5pdFdpdGhD
RlVSTFJlcXVlc3Q6bV9jZlJlcXVlc3QuZ2V0KCldKTsKLSNlbHNlCi0gICAgaWYgKG1fY2ZSZXF1
ZXN0KQotICAgICAgICBtX25zUmVxdWVzdCA9IGFkb3B0TlMoW1tOU1VSTFJlcXVlc3QgYWxsb2Nd
IF9pbml0V2l0aENGVVJMUmVxdWVzdDptX2NmUmVxdWVzdC5nZXQoKV0pOwotI2VuZGlmCi19Ci0K
LSNlbHNlCi0KLUNGVVJMUmVxdWVzdFJlZiBSZXNvdXJjZVJlcXVlc3Q6OmNmVVJMUmVxdWVzdChI
VFRQQm9keVVwZGF0ZVBvbGljeSBib2R5UG9saWN5KSBjb25zdAotewotICAgIHJldHVybiBbbnNV
UkxSZXF1ZXN0KGJvZHlQb2xpY3kpIF9DRlVSTFJlcXVlc3RdOwotfQotCi12b2lkIFJlc291cmNl
UmVxdWVzdDo6ZG9VcGRhdGVSZXNvdXJjZVJlcXVlc3QoKQotewotICAgIG1fdXJsID0gW21fbnNS
ZXF1ZXN0LmdldCgpIFVSTF07Ci0gICAgbV9jYWNoZVBvbGljeSA9IChSZXNvdXJjZVJlcXVlc3RD
YWNoZVBvbGljeSlbbV9uc1JlcXVlc3QuZ2V0KCkgY2FjaGVQb2xpY3ldOwotICAgIG1fdGltZW91
dEludGVydmFsID0gW21fbnNSZXF1ZXN0LmdldCgpIHRpbWVvdXRJbnRlcnZhbF07Ci0gICAgbV9m
aXJzdFBhcnR5Rm9yQ29va2llcyA9IFttX25zUmVxdWVzdC5nZXQoKSBtYWluRG9jdW1lbnRVUkxd
OwotICAgIAotICAgIGlmIChOU1N0cmluZyogbWV0aG9kID0gW21fbnNSZXF1ZXN0LmdldCgpIEhU
VFBNZXRob2RdKQotICAgICAgICBtX2h0dHBNZXRob2QgPSBtZXRob2Q7Ci0gICAgbV9hbGxvd0Nv
b2tpZXMgPSBbbV9uc1JlcXVlc3QuZ2V0KCkgSFRUUFNob3VsZEhhbmRsZUNvb2tpZXNdOwotCi0g
ICAgbV9wcmlvcml0eSA9IHRvUmVzb3VyY2VMb2FkUHJpb3JpdHkod2tHZXRIVFRQUmVxdWVzdFBy
aW9yaXR5KFttX25zUmVxdWVzdC5nZXQoKSBfQ0ZVUkxSZXF1ZXN0XSkpOwotCi0gICAgTlNEaWN0
aW9uYXJ5ICpoZWFkZXJzID0gW21fbnNSZXF1ZXN0LmdldCgpIGFsbEhUVFBIZWFkZXJGaWVsZHNd
OwotICAgIE5TRW51bWVyYXRvciAqZSA9IFtoZWFkZXJzIGtleUVudW1lcmF0b3JdOwotICAgIE5T
U3RyaW5nICpuYW1lOwotICAgIG1faHR0cEhlYWRlckZpZWxkcy5jbGVhcigpOwotICAgIHdoaWxl
ICgobmFtZSA9IFtlIG5leHRPYmplY3RdKSkKLSAgICAgICAgbV9odHRwSGVhZGVyRmllbGRzLnNl
dChTdHJpbmcobmFtZSksIFtoZWFkZXJzIG9iamVjdEZvcktleTpuYW1lXSk7Ci0KLSAgICBtX3Jl
c3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LmNsZWFyKCk7Ci0g
ICAgTlNBcnJheSAqZW5jb2RpbmdGYWxsYmFja3MgPSBbbV9uc1JlcXVlc3QuZ2V0KCkgY29udGVu
dERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5XTsKLSAgICBOU1VJbnRlZ2VyIGNvdW50
ID0gW2VuY29kaW5nRmFsbGJhY2tzIGNvdW50XTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENGU3RyaW5nRW5jb2RpbmcgZW5jb2RpbmcgPSBD
RlN0cmluZ0NvbnZlcnROU1N0cmluZ0VuY29kaW5nVG9FbmNvZGluZyhbKE5TTnVtYmVyICopW2Vu
Y29kaW5nRmFsbGJhY2tzIG9iamVjdEF0SW5kZXg6aV0gdW5zaWduZWRMb25nVmFsdWVdKTsKLSAg
ICAgICAgaWYgKGVuY29kaW5nICE9IGtDRlN0cmluZ0VuY29kaW5nSW52YWxpZElkKQotICAgICAg
ICAgICAgbV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5h
cHBlbmQoQ0ZTdHJpbmdDb252ZXJ0RW5jb2RpbmdUb0lBTkFDaGFyU2V0TmFtZShlbmNvZGluZykp
OwotICAgIH0KLQotI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgaWYgKG1fbnNS
ZXF1ZXN0KSB7Ci0gICAgICAgIE5TU3RyaW5nKiBjYWNoZVBhcnRpdGlvbiA9IFtOU1VSTFByb3Rv
Y29sIHByb3BlcnR5Rm9yS2V5OihOU1N0cmluZyAqKXdrQ2FjaGVQYXJ0aXRpb25LZXkoKSBpblJl
cXVlc3Q6bV9uc1JlcXVlc3QuZ2V0KCldOwotICAgICAgICBpZiAoY2FjaGVQYXJ0aXRpb24pCi0g
ICAgICAgICAgICBtX2NhY2hlUGFydGl0aW9uID0gY2FjaGVQYXJ0aXRpb247Ci0gICAgfQotI2Vu
ZGlmCi19Ci0KLXZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlSFRUUEJvZHko
KQotewotICAgIGlmIChOU0RhdGEqIGJvZHlEYXRhID0gW21fbnNSZXF1ZXN0LmdldCgpIEhUVFBC
b2R5XSkKLSAgICAgICAgbV9odHRwQm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoW2JvZHlEYXRhIGJ5
dGVzXSwgW2JvZHlEYXRhIGxlbmd0aF0pOwotICAgIGVsc2UgaWYgKE5TSW5wdXRTdHJlYW0qIGJv
ZHlTdHJlYW0gPSBbbV9uc1JlcXVlc3QuZ2V0KCkgSFRUUEJvZHlTdHJlYW1dKSB7Ci0gICAgICAg
IEZvcm1EYXRhKiBmb3JtRGF0YSA9IGh0dHBCb2R5RnJvbVN0cmVhbShib2R5U3RyZWFtKTsKLSAg
ICAgICAgLy8gVGhlcmUgaXMgbm8gRm9ybURhdGEgb2JqZWN0IGlmIGEgY2xpZW50IHByb3ZpZGVk
IGEgY3VzdG9tIGRhdGEgc3RyZWFtLgotICAgICAgICAvLyBXZSBzaG91bGRuJ3QgYmUgbG9va2lu
ZyBhdCBodHRwIGJvZHkgYWZ0ZXIgY2xpZW50IGNhbGxiYWNrcy4KLSAgICAgICAgQVNTRVJUKGZv
cm1EYXRhKTsKLSAgICAgICAgaWYgKGZvcm1EYXRhKQotICAgICAgICAgICAgbV9odHRwQm9keSA9
IGZvcm1EYXRhOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxh
dGZvcm1SZXF1ZXN0KCkKLXsKLSAgICBpZiAoaXNOdWxsKCkpIHsKLSAgICAgICAgbV9uc1JlcXVl
c3QgPSBuaWw7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTlNNdXRhYmxlVVJM
UmVxdWVzdCAqbnNSZXF1ZXN0ID0gW21fbnNSZXF1ZXN0LmdldCgpIG11dGFibGVDb3B5XTsKLQot
ICAgIGlmIChuc1JlcXVlc3QpCi0gICAgICAgIFtuc1JlcXVlc3Qgc2V0VVJMOnVybCgpXTsKLSAg
ICBlbHNlCi0gICAgICAgIG5zUmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJMUmVxdWVzdCBhbGxvY10g
aW5pdFdpdGhVUkw6dXJsKCldOwotCi0gICAgaWYgKFJlc291cmNlUmVxdWVzdDo6aHR0cFBpcGVs
aW5pbmdFbmFibGVkKCkpCi0gICAgICAgIHdrSFRUUFJlcXVlc3RFbmFibGVQaXBlbGluaW5nKFtu
c1JlcXVlc3QgX0NGVVJMUmVxdWVzdF0pOwotCi0gICAgd2tTZXRIVFRQUmVxdWVzdFByaW9yaXR5
KFtuc1JlcXVlc3QgX0NGVVJMUmVxdWVzdF0sIHRvUGxhdGZvcm1SZXF1ZXN0UHJpb3JpdHkobV9w
cmlvcml0eSkpOwotCi0gICAgW25zUmVxdWVzdCBzZXRDYWNoZVBvbGljeTooTlNVUkxSZXF1ZXN0
Q2FjaGVQb2xpY3kpY2FjaGVQb2xpY3koKV07Ci0gICAgd2tDRlVSTFJlcXVlc3RBbGxvd0FsbFBv
c3RDYWNoaW5nKFtuc1JlcXVlc3QgX0NGVVJMUmVxdWVzdF0pOwotCi0gICAgZG91YmxlIHRpbWVv
dXRJbnRlcnZhbCA9IFJlc291cmNlUmVxdWVzdEJhc2U6OnRpbWVvdXRJbnRlcnZhbCgpOwotICAg
IGlmICh0aW1lb3V0SW50ZXJ2YWwpCi0gICAgICAgIFtuc1JlcXVlc3Qgc2V0VGltZW91dEludGVy
dmFsOnRpbWVvdXRJbnRlcnZhbF07Ci0gICAgLy8gT3RoZXJ3aXNlLCByZXNwZWN0IE5TVVJMUmVx
dWVzdCBkZWZhdWx0IHRpbWVvdXQuCi0KLSAgICBbbnNSZXF1ZXN0IHNldE1haW5Eb2N1bWVudFVS
TDpmaXJzdFBhcnR5Rm9yQ29va2llcygpXTsKLSAgICBpZiAoIWh0dHBNZXRob2QoKS5pc0VtcHR5
KCkpCi0gICAgICAgIFtuc1JlcXVlc3Qgc2V0SFRUUE1ldGhvZDpodHRwTWV0aG9kKCldOwotICAg
IFtuc1JlcXVlc3Qgc2V0SFRUUFNob3VsZEhhbmRsZUNvb2tpZXM6YWxsb3dDb29raWVzKCldOwot
Ci0gICAgLy8gQ2Fubm90IGp1c3QgdXNlIHNldEFsbEhUVFBIZWFkZXJGaWVsZHMgaGVyZSwgYmVj
YXVzZSBpdCBkb2VzIG5vdCByZW1vdmUgaGVhZGVycy4KLSAgICBOU0FycmF5ICpvbGRIZWFkZXJG
aWVsZE5hbWVzID0gW1tuc1JlcXVlc3QgYWxsSFRUUEhlYWRlckZpZWxkc10gYWxsS2V5c107Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gW29sZEhlYWRlckZpZWxkTmFtZXMgY291bnRdOyBpICE9IDA7
IC0taSkKLSAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTpuaWwgZm9ySFRUUEhlYWRlckZpZWxk
OltvbGRIZWFkZXJGaWVsZE5hbWVzIG9iamVjdEF0SW5kZXg6aSAtIDFdXTsKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGhlYWRlciA6IGh0dHBIZWFkZXJGaWVsZHMoKSkKLSAgICAgICAgW25zUmVxdWVz
dCBzZXRWYWx1ZTpoZWFkZXIudmFsdWUgZm9ySFRUUEhlYWRlckZpZWxkOmhlYWRlci5rZXldOwot
Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmVuY29kaW5nRmFsbGJhY2tzID0gW05TTXV0YWJsZUFycmF5
IGFycmF5XTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRp
b25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgIT0gY291bnQ7ICsraSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGVuY29k
aW5nTmFtZSA9IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXlbaV0uY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBuc0VuY29kaW5n
ID0gQ0ZTdHJpbmdDb252ZXJ0RW5jb2RpbmdUb05TU3RyaW5nRW5jb2RpbmcoQ0ZTdHJpbmdDb252
ZXJ0SUFOQUNoYXJTZXROYW1lVG9FbmNvZGluZyhlbmNvZGluZ05hbWUuZ2V0KCkpKTsKLQotICAg
ICAgICBpZiAobnNFbmNvZGluZyAhPSBrQ0ZTdHJpbmdFbmNvZGluZ0ludmFsaWRJZCkKLSAgICAg
ICAgICAgIFtlbmNvZGluZ0ZhbGxiYWNrcyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhV
bnNpZ25lZExvbmc6bnNFbmNvZGluZ11dOwotICAgIH0KLSAgICBbbnNSZXF1ZXN0IHNldENvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTplbmNvZGluZ0ZhbGxiYWNrc107Ci0K
LSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBj
YWNoZVBhcnRpdGlvbigpOwotICAgIGlmICghcGFydGl0aW9uLmlzTnVsbCgpICYmICFwYXJ0aXRp
b24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIE5TU3RyaW5nICpwYXJ0aXRpb25WYWx1ZSA9IFtOU1N0
cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpwYXJ0aXRpb24udXRmOCgpLmRhdGEoKV07Ci0gICAg
ICAgIFtOU1VSTFByb3RvY29sIHNldFByb3BlcnR5OnBhcnRpdGlvblZhbHVlIGZvcktleTooTlNT
dHJpbmcgKil3a0NhY2hlUGFydGl0aW9uS2V5KCkgaW5SZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBtX25zUmVxdWVzdCA9IGFkb3B0TlMobnNSZXF1ZXN0KTsKLX0KLQot
dm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZvcm1IVFRQQm9keSgpCi17Ci0gICAg
aWYgKGlzTnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9uc1JlcXVlc3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqbnNSZXF1ZXN0ID0gW21f
bnNSZXF1ZXN0LmdldCgpIG11dGFibGVDb3B5XTsKLQotICAgIGlmIChuc1JlcXVlc3QpCi0gICAg
ICAgIFtuc1JlcXVlc3Qgc2V0VVJMOnVybCgpXTsKLSAgICBlbHNlCi0gICAgICAgIG5zUmVxdWVz
dCA9IFtbTlNNdXRhYmxlVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6dXJsKCldOwotCi0g
ICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IGh0dHBCb2R5KCk7Ci0gICAgaWYgKGZvcm1E
YXRhICYmICFmb3JtRGF0YS0+aXNFbXB0eSgpKQotICAgICAgICBXZWJDb3JlOjpzZXRIVFRQQm9k
eShuc1JlcXVlc3QsIGZvcm1EYXRhKTsKLQotICAgIGlmIChOU0lucHV0U3RyZWFtICpib2R5U3Ry
ZWFtID0gW25zUmVxdWVzdCBIVFRQQm9keVN0cmVhbV0pIHsKLSAgICAgICAgLy8gRm9yIHN0cmVh
bXMsIHByb3ZpZGUgYSBDb250ZW50LUxlbmd0aCB0byBhdm9pZCB1c2luZyBjaHVua2VkIGVuY29k
aW5nLCBhbmQgdG8gZ2V0IGFjY3VyYXRlIHRvdGFsIGxlbmd0aCBpbiBjYWxsYmFja3MuCi0gICAg
ICAgIE5TU3RyaW5nICpsZW5ndGhTdHJpbmcgPSBbYm9keVN0cmVhbSBwcm9wZXJ0eUZvcktleToo
TlNTdHJpbmcgKilmb3JtRGF0YVN0cmVhbUxlbmd0aFByb3BlcnR5TmFtZSgpXTsKLSAgICAgICAg
aWYgKGxlbmd0aFN0cmluZykgewotICAgICAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTpsZW5n
dGhTdHJpbmcgZm9ySFRUUEhlYWRlckZpZWxkOkAiQ29udGVudC1MZW5ndGgiXTsKLSAgICAgICAg
ICAgIC8vIFNpbmNlIHJlc291cmNlIHJlcXVlc3QgaXMgYWxyZWFkeSBtYXJrZWQgdXBkYXRlZCwg
d2UgbmVlZCB0byBrZWVwIGl0IHVwIHRvIGRhdGUgdG9vLgotICAgICAgICAgICAgQVNTRVJUKG1f
cmVzb3VyY2VSZXF1ZXN0VXBkYXRlZCk7Ci0gICAgICAgICAgICBtX2h0dHBIZWFkZXJGaWVsZHMu
c2V0KEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoLCBsZW5ndGhTdHJpbmcpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbV9uc1JlcXVlc3QgPSBhZG9wdE5TKG5zUmVxdWVzdCk7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJv
cGVydGllcyhjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGRlbGVnYXRlUHJvdmlkZWRSZXF1ZXN0KQot
ewotICAgIFJlZlB0cjxGb3JtRGF0YT4gb2xkSFRUUEJvZHkgPSBodHRwQm9keSgpOwotI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgYm9vbCBpc0hpZGRlbkZyb21JbnNwZWN0b3IgPSBoaWRkZW5G
cm9tSW5zcGVjdG9yKCk7Ci0jZW5kaWYKLQotICAgICp0aGlzID0gZGVsZWdhdGVQcm92aWRlZFJl
cXVlc3Q7Ci0KLSAgICBzZXRIVFRQQm9keShvbGRIVFRQQm9keS5yZWxlYXNlKCkpOwotI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgc2V0SGlkZGVuRnJvbUluc3BlY3Rvcihpc0hpZGRlbkZyb21J
bnNwZWN0b3IpOwotI2VuZGlmCi19Ci0KLSNpZiAhUExBVEZPUk0oSU9TKQotdm9pZCBSZXNvdXJj
ZVJlcXVlc3Q6OmFwcGx5V2ViQXJjaGl2ZUhhY2tGb3JNYWlsKCkKLXsKLSAgICAvLyBIYWNrIGJl
Y2F1c2UgTWFpbCBjaGVja3MgZm9yIHRoaXMgcHJvcGVydHkgdG8gZGV0ZWN0IGRhdGEgLyBhcmNo
aXZlIGxvYWRzCi0gICAgW05TVVJMUHJvdG9jb2wgc2V0UHJvcGVydHk6QCIiIGZvcktleTpAIldl
YkRhdGFSZXF1ZXN0IiBpblJlcXVlc3Q6KE5TTXV0YWJsZVVSTFJlcXVlc3QgKiluc1VSTFJlcXVl
c3QoRG9Ob3RVcGRhdGVIVFRQQm9keSldOwotfQotI2VuZGlmCi0KLXZvaWQgUmVzb3VyY2VSZXF1
ZXN0OjpzZXRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNz
aW9uKQotewotICAgIHVwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpOwotICAgIG1fbnNSZXF1ZXN0ID0g
YWRvcHROUyh3a0NvcHlSZXF1ZXN0V2l0aFN0b3JhZ2VTZXNzaW9uKHN0b3JhZ2VTZXNzaW9uLCBt
X25zUmVxdWVzdC5nZXQoKSkpOwotfQotICAgIAotI2VuZGlmIC8vIFVTRShDRk5FVFdPUkspCi0K
LSNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIGJvb2wgaW5pdFF1aWNrTG9va1Jlc291cmNlQ2Fj
aGluZ1F1aXJrcygpCiB7CiAgICAgaWYgKGFwcGxpY2F0aW9uSXNTYWZhcmkoKSkKQEAgLTI5Mywx
NyArNTcsMzAgQEAgc3RhdGljIGJvb2wgaW5pdFF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJr
cygpCiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9T
KQogCiBib29sIFJlc291cmNlUmVxdWVzdDo6dXNlUXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVp
cmtzKCkKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBib29sIGZsYWcgPSBpbml0
UXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVpcmtzKCk7CiAgICAgcmV0dXJuIGZsYWc7Ci0jZWxz
ZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQogCisjaWYg
VVNFKENGTkVUV09SSykKKworUmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJjZVJlcXVlc3QoTlNVUkxS
ZXF1ZXN0ICpuc1JlcXVlc3QpCisgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKCkKKyAgICAsIG1f
Y2ZSZXF1ZXN0KFtuc1JlcXVlc3QgX0NGVVJMUmVxdWVzdF0pCisgICAgLCBtX25zUmVxdWVzdChu
c1JlcXVlc3QpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVOU1VSTFJlcXVl
c3QoKQoreworICAgIGlmIChtX2NmUmVxdWVzdCkKKyAgICAgICAgbV9uc1JlcXVlc3QgPSBhZG9w
dE5TKFtbTlNVUkxSZXF1ZXN0IGFsbG9jXSBfaW5pdFdpdGhDRlVSTFJlcXVlc3Q6bV9jZlJlcXVl
c3QuZ2V0KCldKTsKK30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2Vu
ZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234057</attachid>
            <date>2014-06-28 22:29:07 -0700</date>
            <delta_ts>2014-06-29 09:20:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134430-20140628222846.patch</filename>
            <type>text/plain</type>
            <size>32932</size>
            <attacher name="Pratik Solanki">psolanki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwNTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY5NjdiOTI0YzZiNzMz
Yzg1MjIwOTNjZjYyOWQ2ODVkYjQ4ZDExMC4uZjY1NzU2YzIxNGQxNjA1MTI3M2VlZDQ1ZTlhZWVm
MDJlOTQ0N2NhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE0LTA2LTI4ICBQcmF0
aWsgU29sYW5raSAgPHByYXRpay5zb2xhbmtpQGdtYWlsLmNvbT4KKworICAgICAgICBSZWZhY3Rv
ciBSZXNvdXJjZVJlcXVlc3QgaW50byBDb2NvYSBhbmQgaU9TIHNwZWNpZmljIGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ0MzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
YmVjYXVzZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9S
ZXNvdXJjZVJlcXVlc3RDb2NvYS5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tLgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvaW9zL1Jlc291cmNlUmVxdWVzdElPUy5tbTogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6aW5pdFF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3Q6OnVzZVF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OlJlc291cmNlUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZU5TVVJMUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6Om5zVVJMUmVxdWVzdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmNmVVJMUmVxdWVzdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUmVzb3VyY2VSZXF1
ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG9VcGRh
dGVSZXNvdXJjZUhUVFBCb2R5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtSFRUUEJvZHkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVGcm9tRGVsZWdhdGVQ
cmVzZXJ2aW5nT2xkUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3Q6OmFwcGx5V2ViQXJjaGl2ZUhhY2tGb3JNYWlsKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6c2V0U3RvcmFnZVNlc3Npb24pOiBEZWxldGVk
LgorCiAyMDE0LTA2LTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFtpT1MgV0syXSBwb3NpdGlvbjpmaXhlZCBpbnNpZGUgYWNjZWxlcmF0ZWQgb3Zl
cmZsb3c6c2Nyb2xsIGlzIGp1bXB5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTBlZjkxMmJjZmYyMWYyYzU0ZDZlMjY4YTk3MDUx
YzdiNDU0ZDFhNi4uODA2MDNmYTUyNDA4NzE5NmZmZjQzZWQ2NmE5YzgyMjkxY2MyZjJiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMjQ0Miw2ICsyNDQyLDggQEAKIAkJN0U2NkUyMzMxN0U2RUI2QzAwRjdFN0ZGIC8qIFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3RTY2RTIzMTE3RTZFQjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDLmNwcCAqLzsgfTsKIAkJN0U2NkUyMzQxNkQ2RUI2QzAwRjdFN0ZGIC8q
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdFNjZFMjMyMTZENkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDLmggKi87IH07CiAJCTdFNjZFMjM0MTdFNkVCNkMwMEY3RTdGRiAvKiBX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdFNjZFMjMyMTdFNkVCNkMwMEY3RTdGRiAvKiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUFZSVEMuaCAqLzsgfTsKKwkJN0U3REUxRkQxOTVDRUYyNjAwMzUzNjNCIC8q
IFJlc291cmNlUmVxdWVzdENvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0U3REUxRkMxOTVDRUYyNjAwMzUzNjNCIC8qIFJlc291cmNlUmVxdWVz
dENvY29hLm1tICovOyB9OworCQk3RTdERTIwMjE5NUNFRkNEMDAzNTM2M0IgLyogUmVzb3VyY2VS
ZXF1ZXN0SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0U3REUyMDExOTVDRUZDRDAwMzUzNjNCIC8qIFJlc291cmNlUmVxdWVzdElPUy5tbSAqLzsg
fTsKIAkJN0U5OUFGNTEwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRvd0ZvY3VzQWxsb3dlZEluZGlj
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
RTk5QUY1MjBCMTM4NDY0NjhGQjAxQTUgLyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmNw
cCAqLzsgfTsKIAkJN0U5OUFGNTMwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRvd0ZvY3VzQWxsb3dl
ZEluZGljYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0U5OUFGNTQwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdF
QTMwRjY5MTZERkZFNzUwMDI1N0QwQiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0VBMzBGNjcx
NkRGRkU3NTAwMjU3RDBCIC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgKi87IH07
CkBAIC05NTkyLDYgKzk1OTQsOCBAQAogCQk3RTY2RTIzMTE3RTZFQjZDMDBGN0U3RkYgLyogV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHA7IHBhdGggPSBjYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0U2NkUyMzIxNkQ2RUI2QzAwRjdFN0ZGIC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5oOyBwYXRoID0gY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U2NkUyMzIxN0U2RUI2QzAwRjdFN0ZGIC8qIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTENv
bXByZXNzZWRUZXh0dXJlUFZSVEMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0U3
REUxRkMxOTVDRUYyNjAwMzUzNjNCIC8qIFJlc291cmNlUmVxdWVzdENvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW07
IHBhdGggPSBjb2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0U3REUyMDExOTVDRUZDRDAwMzUzNjNCIC8qIFJlc291cmNlUmVxdWVzdElP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlc291cmNlUmVx
dWVzdElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U5OUFGNTIwQjEzODQ2
NDY4RkIwMUE1IC8qIFdpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTk5QUY1NDBCMTM4NDY0NjhGQjAxQTUg
LyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3RUEzMEY2MjE2REZENjI3MDAyNTdEMEIgLyogV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTcwNiw2ICsxNTcxMCw3IEBACiAJCQkJ
NDQyQUY3QTgxMDJDRERFQTAwOEZENEQzIC8qIFF1aWNrTG9vay5tbSAqLywKIAkJCQlBMTBEQkY0
NjE4RjkyMzE3MDAwRDcwQzYgLyogUXVpY2tMb29rSGFuZGxlQ2xpZW50LmggKi8sCiAJCQkJN0U0
MjhDRTQxM0UzNDA3RjAwM0I2NjFDIC8qIFJlc291cmNlSGFuZGxlSU9TLm1tICovLAorCQkJCTdF
N0RFMjAxMTk1Q0VGQ0QwMDM1MzYzQiAvKiBSZXNvdXJjZVJlcXVlc3RJT1MubW0gKi8sCiAJCQkJ
NDRBMjBEQjgwRjg0MTY2QzAwQjNFMUZFIC8qIFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oICovLAog
CQkJCTQ0NEQ0RTIxMEY3MDhCMkUwMDMxNThFMCAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MubW0g
Ki8sCiAJCQkpOwpAQCAtMTYyNzgsNiArMTYyODMsNyBAQAogCQk2NTZCODRENzBBRUExQ0U5MDBB
MDk1QjQgLyogbmV0d29yayAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJN0U3REUxRkUxOTVDRUYyRDAwMzUzNjNCIC8qIGNvY29hICovLAogCQkJCUIyRjM0
RkU3MEU4MkY4MTcwMEY2MjdDRCAvKiBjZiAqLywKIAkJCQk0NDk3RDU4QzBFQkE4NTRGMDBBMTA1
NTIgLyogaW9zICovLAogCQkJCTY1NkI4NEU3MEFFQTFEQUUwMEEwOTVCNCAvKiBtYWMgKi8sCkBA
IC0xNjcyNSw2ICsxNjczMSwxNCBAQAogCQkJcGF0aCA9IGljdTsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CiAJCX07CisJCTdFN0RFMUZFMTk1Q0VGMkQwMDM1MzYzQiAvKiBjb2NvYSAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJN0U3REUxRkMxOTVD
RUYyNjAwMzUzNjNCIC8qIFJlc291cmNlUmVxdWVzdENvY29hLm1tICovLAorCQkJKTsKKwkJCW5h
bWUgPSBjb2NvYTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdFRTY4NDcz
MTJEMjZFNTUwMEU3OTQxNSAvKiBjZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCkBAIC0yODI2NSw2ICsyODI3OSw3IEBACiAJCQkJQkM0OTE4QzgwQkZFQTA1MDAw
OUQ2MzE2IC8qIEpTSFRNTElGcmFtZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFF
MkFBOTcwQTFDREQyRDAwQjQyQjI1IC8qIEpTSFRNTEltYWdlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBODBFN0U5ODBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MSW5wdXRFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdFN0RFMjAyMTk1Q0VGQ0QwMDM1MzYzQiAvKiBSZXNv
dXJjZVJlcXVlc3RJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0M0Mzg3ODBFODg2Q0M3MDA1
MzNERDUgLyogSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE2MTQ4QTc4MTJFNDFFM0IwMDQ0QTc4NCAvKiBKU0hUTUxLZXlnZW5FbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBRTJBQjIxMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJlbEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODgyNCw2ICsyODgzOSw3IEBACiAJCQkJN0ND
Njk5NDAxOTFFQzVGNTAwQUYyMjcwIC8qIEpTV2ViS2l0TmFtZXNwYWNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUU0NDYxM0UzMENENjgxOUYwMEZBREE3NSAvKiBNZWRpYVBsYXllci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwNzJDOEIxMTEzMUM1MTg2MDBBNEZDRTkgLyogTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdFN0RFMUZEMTk1Q0VG
MjYwMDM1MzYzQiAvKiBSZXNvdXJjZVJlcXVlc3RDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CURGOUFGRDczMTNGQzMxRDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1IC8q
IE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUU0NDYxM0U1MENENjgxQTYwMEZBREE3NSAvKiBNZWRpYVBsYXllclByaXZhdGVRVEtpdC5t
bSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAppbmRleCA2MzMzY2YyODVlMzM1
MzVjMWE3Nzc5ZDUyY2EwN2Y5NTljZjY2YjI2Li43ZTBmMzk0OTU1YmQwYTlhM2E2MWUxNjFjMDUw
YmI4YzI2MjhkMjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcApAQCAtMzQ3LDE0ICszNDcsNiBA
QCB2b2lkIFJlc291cmNlUmVxdWVzdDo6c2V0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZiBzdG9yYWdlU2Vzc2lvbikKICNlbmRpZgogfQogCi0jaWYgUExBVEZPUk0oTUFDKQot
dm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5V2ViQXJjaGl2ZUhhY2tGb3JNYWlsKCkKLXsKLSAg
ICAvLyBIYWNrIGJlY2F1c2UgTWFpbCBjaGVja3MgZm9yIHRoaXMgcHJvcGVydHkgdG8gZGV0ZWN0
IGRhdGEgLyBhcmNoaXZlIGxvYWRzCi0gICAgX0NGVVJMUmVxdWVzdFNldFByb3RvY29sUHJvcGVy
dHkoY2ZVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpLCBDRlNUUigiV2ViRGF0YVJlcXVl
c3QiKSwgQ0ZTVFIoIiIpKTsKLX0KLSNlbmRpZgotCiAjZW5kaWYgLy8gVVNFKENGTkVUV09SSykK
IAogYm9vbCBSZXNvdXJjZVJlcXVlc3Q6Omh0dHBQaXBlbGluaW5nRW5hYmxlZCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVz
dENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SZXNvdXJj
ZVJlcXVlc3RDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODFlNzU4NDEyOGRhYjNlNjcyYzNkMjFiZDQy
Y2MzY2JmZWYwMGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jb2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbQpAQCAtMCwwICsxLDI0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJSZXNvdXJjZVJlcXVlc3QuaCIKKworI2lmIFBMQVRGT1JNKENP
Q09BKQorCisjaW1wb3J0ICJGb3JtRGF0YVN0cmVhbU1hYy5oIgorI2ltcG9ydCAiSFRUUEhlYWRl
ck5hbWVzLmgiCisjaW1wb3J0ICJSZXNvdXJjZVJlcXVlc3RDRk5ldC5oIgorI2ltcG9ydCAiUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCitAaW50ZXJmYWNlIE5TVVJMUmVxdWVzdCAoV2ViTlNVUkxSZXF1ZXN0
RGV0YWlscykKKy0gKE5TQXJyYXkgKiljb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXk7CisrICh2b2lkKXNldERlZmF1bHRUaW1lb3V0SW50ZXJ2YWw6KE5TVGltZUludGVydmFs
KXNlY29uZHM7CistIChDRlVSTFJlcXVlc3RSZWYpX0NGVVJMUmVxdWVzdDsKKy0gKGlkKV9pbml0
V2l0aENGVVJMUmVxdWVzdDooQ0ZVUkxSZXF1ZXN0UmVmKXJlcXVlc3Q7CitAZW5kCisKK0BpbnRl
cmZhY2UgTlNNdXRhYmxlVVJMUmVxdWVzdCAoV2ViTXV0YWJsZU5TVVJMUmVxdWVzdERldGFpbHMp
CistICh2b2lkKXNldENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTooTlNB
cnJheSAqKXRoZUVuY29kaW5nRmFsbGJhY2tBcnJheTsKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitOU1VSTFJlcXVlc3QgKlJlc291cmNlUmVxdWVzdDo6bnNVUkxSZXF1ZXN0KEhUVFBC
b2R5VXBkYXRlUG9saWN5IGJvZHlQb2xpY3kpIGNvbnN0Cit7CisgICAgdXBkYXRlUGxhdGZvcm1S
ZXF1ZXN0KGJvZHlQb2xpY3kpOworICAgIHJldHVybiBbW21fbnNSZXF1ZXN0LmdldCgpIHJldGFp
bl0gYXV0b3JlbGVhc2VdOworfQorCisjaWYgIVVTRShDRk5FVFdPUkspCisKK0NGVVJMUmVxdWVz
dFJlZiBSZXNvdXJjZVJlcXVlc3Q6OmNmVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeSBi
b2R5UG9saWN5KSBjb25zdAoreworICAgIHJldHVybiBbbnNVUkxSZXF1ZXN0KGJvZHlQb2xpY3kp
IF9DRlVSTFJlcXVlc3RdOworfQorCit2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVSZXNv
dXJjZVJlcXVlc3QoKQoreworICAgIG1fdXJsID0gW21fbnNSZXF1ZXN0LmdldCgpIFVSTF07Cisg
ICAgbV9jYWNoZVBvbGljeSA9IChSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSlbbV9uc1JlcXVl
c3QuZ2V0KCkgY2FjaGVQb2xpY3ldOworICAgIG1fdGltZW91dEludGVydmFsID0gW21fbnNSZXF1
ZXN0LmdldCgpIHRpbWVvdXRJbnRlcnZhbF07CisgICAgbV9maXJzdFBhcnR5Rm9yQ29va2llcyA9
IFttX25zUmVxdWVzdC5nZXQoKSBtYWluRG9jdW1lbnRVUkxdOworICAgIAorICAgIGlmIChOU1N0
cmluZyogbWV0aG9kID0gW21fbnNSZXF1ZXN0LmdldCgpIEhUVFBNZXRob2RdKQorICAgICAgICBt
X2h0dHBNZXRob2QgPSBtZXRob2Q7CisgICAgbV9hbGxvd0Nvb2tpZXMgPSBbbV9uc1JlcXVlc3Qu
Z2V0KCkgSFRUUFNob3VsZEhhbmRsZUNvb2tpZXNdOworCisgICAgaWYgKFJlc291cmNlUmVxdWVz
dDo6cmVzb3VyY2VQcmlvcml0aWVzRW5hYmxlZCgpKQorICAgICAgICBtX3ByaW9yaXR5ID0gdG9S
ZXNvdXJjZUxvYWRQcmlvcml0eSh3a0dldEhUVFBSZXF1ZXN0UHJpb3JpdHkoW21fbnNSZXF1ZXN0
LmdldCgpIF9DRlVSTFJlcXVlc3RdKSk7CisKKyAgICBOU0RpY3Rpb25hcnkgKmhlYWRlcnMgPSBb
bV9uc1JlcXVlc3QuZ2V0KCkgYWxsSFRUUEhlYWRlckZpZWxkc107CisgICAgTlNFbnVtZXJhdG9y
ICplID0gW2hlYWRlcnMga2V5RW51bWVyYXRvcl07CisgICAgTlNTdHJpbmcgKm5hbWU7CisgICAg
bV9odHRwSGVhZGVyRmllbGRzLmNsZWFyKCk7CisgICAgd2hpbGUgKChuYW1lID0gW2UgbmV4dE9i
amVjdF0pKQorICAgICAgICBtX2h0dHBIZWFkZXJGaWVsZHMuc2V0KFN0cmluZyhuYW1lKSwgW2hl
YWRlcnMgb2JqZWN0Rm9yS2V5Om5hbWVdKTsKKworICAgIG1fcmVzcG9uc2VDb250ZW50RGlzcG9z
aXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuY2xlYXIoKTsKKyAgICBOU0FycmF5ICplbmNvZGlu
Z0ZhbGxiYWNrcyA9IFttX25zUmVxdWVzdC5nZXQoKSBjb250ZW50RGlzcG9zaXRpb25FbmNvZGlu
Z0ZhbGxiYWNrQXJyYXldOworICAgIE5TVUludGVnZXIgY291bnQgPSBbZW5jb2RpbmdGYWxsYmFj
a3MgY291bnRdOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IENGU3RyaW5nQ29udmVydE5TU3Ry
aW5nRW5jb2RpbmdUb0VuY29kaW5nKFsoTlNOdW1iZXIgKilbZW5jb2RpbmdGYWxsYmFja3Mgb2Jq
ZWN0QXRJbmRleDppXSB1bnNpZ25lZExvbmdWYWx1ZV0pOworICAgICAgICBpZiAoZW5jb2Rpbmcg
IT0ga0NGU3RyaW5nRW5jb2RpbmdJbnZhbGlkSWQpCisgICAgICAgICAgICBtX3Jlc3BvbnNlQ29u
dGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LmFwcGVuZChDRlN0cmluZ0NvbnZl
cnRFbmNvZGluZ1RvSUFOQUNoYXJTZXROYW1lKGVuY29kaW5nKSk7CisgICAgfQorCisjaWYgRU5B
QkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICBpZiAobV9uc1JlcXVlc3QpIHsKKyAgICAgICAg
TlNTdHJpbmcqIGNhY2hlUGFydGl0aW9uID0gW05TVVJMUHJvdG9jb2wgcHJvcGVydHlGb3JLZXk6
KE5TU3RyaW5nICopd2tDYWNoZVBhcnRpdGlvbktleSgpIGluUmVxdWVzdDptX25zUmVxdWVzdC5n
ZXQoKV07CisgICAgICAgIGlmIChjYWNoZVBhcnRpdGlvbikKKyAgICAgICAgICAgIG1fY2FjaGVQ
YXJ0aXRpb24gPSBjYWNoZVBhcnRpdGlvbjsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBSZXNv
dXJjZVJlcXVlc3Q6OmRvVXBkYXRlUmVzb3VyY2VIVFRQQm9keSgpCit7CisgICAgaWYgKE5TRGF0
YSogYm9keURhdGEgPSBbbV9uc1JlcXVlc3QuZ2V0KCkgSFRUUEJvZHldKQorICAgICAgICBtX2h0
dHBCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZShbYm9keURhdGEgYnl0ZXNdLCBbYm9keURhdGEgbGVu
Z3RoXSk7CisgICAgZWxzZSBpZiAoTlNJbnB1dFN0cmVhbSogYm9keVN0cmVhbSA9IFttX25zUmVx
dWVzdC5nZXQoKSBIVFRQQm9keVN0cmVhbV0pIHsKKyAgICAgICAgRm9ybURhdGEqIGZvcm1EYXRh
ID0gaHR0cEJvZHlGcm9tU3RyZWFtKGJvZHlTdHJlYW0pOworICAgICAgICAvLyBUaGVyZSBpcyBu
byBGb3JtRGF0YSBvYmplY3QgaWYgYSBjbGllbnQgcHJvdmlkZWQgYSBjdXN0b20gZGF0YSBzdHJl
YW0uCisgICAgICAgIC8vIFdlIHNob3VsZG4ndCBiZSBsb29raW5nIGF0IGh0dHAgYm9keSBhZnRl
ciBjbGllbnQgY2FsbGJhY2tzLgorICAgICAgICBBU1NFUlQoZm9ybURhdGEpOworICAgICAgICBp
ZiAoZm9ybURhdGEpCisgICAgICAgICAgICBtX2h0dHBCb2R5ID0gZm9ybURhdGE7CisgICAgfQor
fQorCit2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKQorewor
ICAgIGlmIChpc051bGwoKSkgeworICAgICAgICBtX25zUmVxdWVzdCA9IG5pbDsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBOU011dGFibGVVUkxSZXF1ZXN0ICpuc1JlcXVlc3Qg
PSBbbV9uc1JlcXVlc3QuZ2V0KCkgbXV0YWJsZUNvcHldOworCisgICAgaWYgKG5zUmVxdWVzdCkK
KyAgICAgICAgW25zUmVxdWVzdCBzZXRVUkw6dXJsKCldOworICAgIGVsc2UKKyAgICAgICAgbnNS
ZXF1ZXN0ID0gW1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDp1cmwoKV07
CisKKyAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0OjpodHRwUGlwZWxpbmluZ0VuYWJsZWQoKSkKKyAg
ICAgICAgd2tIVFRQUmVxdWVzdEVuYWJsZVBpcGVsaW5pbmcoW25zUmVxdWVzdCBfQ0ZVUkxSZXF1
ZXN0XSk7CisKKyAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFi
bGVkKCkpCisgICAgICAgIHdrU2V0SFRUUFJlcXVlc3RQcmlvcml0eShbbnNSZXF1ZXN0IF9DRlVS
TFJlcXVlc3RdLCB0b1BsYXRmb3JtUmVxdWVzdFByaW9yaXR5KG1fcHJpb3JpdHkpKTsKKworICAg
IFtuc1JlcXVlc3Qgc2V0Q2FjaGVQb2xpY3k6KE5TVVJMUmVxdWVzdENhY2hlUG9saWN5KWNhY2hl
UG9saWN5KCldOworICAgIHdrQ0ZVUkxSZXF1ZXN0QWxsb3dBbGxQb3N0Q2FjaGluZyhbbnNSZXF1
ZXN0IF9DRlVSTFJlcXVlc3RdKTsKKworICAgIGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwgPSBSZXNv
dXJjZVJlcXVlc3RCYXNlOjp0aW1lb3V0SW50ZXJ2YWwoKTsKKyAgICBpZiAodGltZW91dEludGVy
dmFsKQorICAgICAgICBbbnNSZXF1ZXN0IHNldFRpbWVvdXRJbnRlcnZhbDp0aW1lb3V0SW50ZXJ2
YWxdOworICAgIC8vIE90aGVyd2lzZSwgcmVzcGVjdCBOU1VSTFJlcXVlc3QgZGVmYXVsdCB0aW1l
b3V0LgorCisgICAgW25zUmVxdWVzdCBzZXRNYWluRG9jdW1lbnRVUkw6Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKV07CisgICAgaWYgKCFodHRwTWV0aG9kKCkuaXNFbXB0eSgpKQorICAgICAgICBbbnNS
ZXF1ZXN0IHNldEhUVFBNZXRob2Q6aHR0cE1ldGhvZCgpXTsKKyAgICBbbnNSZXF1ZXN0IHNldEhU
VFBTaG91bGRIYW5kbGVDb29raWVzOmFsbG93Q29va2llcygpXTsKKworICAgIC8vIENhbm5vdCBq
dXN0IHVzZSBzZXRBbGxIVFRQSGVhZGVyRmllbGRzIGhlcmUsIGJlY2F1c2UgaXQgZG9lcyBub3Qg
cmVtb3ZlIGhlYWRlcnMuCisgICAgTlNBcnJheSAqb2xkSGVhZGVyRmllbGROYW1lcyA9IFtbbnNS
ZXF1ZXN0IGFsbEhUVFBIZWFkZXJGaWVsZHNdIGFsbEtleXNdOworICAgIGZvciAodW5zaWduZWQg
aSA9IFtvbGRIZWFkZXJGaWVsZE5hbWVzIGNvdW50XTsgaSAhPSAwOyAtLWkpCisgICAgICAgIFtu
c1JlcXVlc3Qgc2V0VmFsdWU6bmlsIGZvckhUVFBIZWFkZXJGaWVsZDpbb2xkSGVhZGVyRmllbGRO
YW1lcyBvYmplY3RBdEluZGV4OmkgLSAxXV07CisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIg
OiBodHRwSGVhZGVyRmllbGRzKCkpCisgICAgICAgIFtuc1JlcXVlc3Qgc2V0VmFsdWU6aGVhZGVy
LnZhbHVlIGZvckhUVFBIZWFkZXJGaWVsZDpoZWFkZXIua2V5XTsKKworICAgIE5TTXV0YWJsZUFy
cmF5ICplbmNvZGluZ0ZhbGxiYWNrcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgdW5z
aWduZWQgY291bnQgPSBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFj
a0FycmF5LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGNvdW50OyArK2kp
IHsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBlbmNvZGluZ05hbWUgPSBtX3Jlc3Bv
bnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5W2ldLmNyZWF0ZUNGU3Ry
aW5nKCk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbnNFbmNvZGluZyA9IENGU3RyaW5nQ29udmVy
dEVuY29kaW5nVG9OU1N0cmluZ0VuY29kaW5nKENGU3RyaW5nQ29udmVydElBTkFDaGFyU2V0TmFt
ZVRvRW5jb2RpbmcoZW5jb2RpbmdOYW1lLmdldCgpKSk7CisKKyAgICAgICAgaWYgKG5zRW5jb2Rp
bmcgIT0ga0NGU3RyaW5nRW5jb2RpbmdJbnZhbGlkSWQpCisgICAgICAgICAgICBbZW5jb2RpbmdG
YWxsYmFja3MgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRMb25nOm5zRW5j
b2RpbmddXTsKKyAgICB9CisgICAgW25zUmVxdWVzdCBzZXRDb250ZW50RGlzcG9zaXRpb25FbmNv
ZGluZ0ZhbGxiYWNrQXJyYXk6ZW5jb2RpbmdGYWxsYmFja3NdOworCisjaWYgRU5BQkxFKENBQ0hF
X1BBUlRJVElPTklORykKKyAgICBTdHJpbmcgcGFydGl0aW9uID0gY2FjaGVQYXJ0aXRpb24oKTsK
KyAgICBpZiAoIXBhcnRpdGlvbi5pc051bGwoKSAmJiAhcGFydGl0aW9uLmlzRW1wdHkoKSkgewor
ICAgICAgICBOU1N0cmluZyAqcGFydGl0aW9uVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVU
RjhTdHJpbmc6cGFydGl0aW9uLnV0ZjgoKS5kYXRhKCldOworICAgICAgICBbTlNVUkxQcm90b2Nv
bCBzZXRQcm9wZXJ0eTpwYXJ0aXRpb25WYWx1ZSBmb3JLZXk6KE5TU3RyaW5nICopd2tDYWNoZVBh
cnRpdGlvbktleSgpIGluUmVxdWVzdDpuc1JlcXVlc3RdOworICAgIH0KKyNlbmRpZgorCisgICAg
bV9uc1JlcXVlc3QgPSBhZG9wdE5TKG5zUmVxdWVzdCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXF1
ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtSFRUUEJvZHkoKQoreworICAgIGlmIChpc051bGwoKSkgewor
ICAgICAgICBBU1NFUlQoIW1fbnNSZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKm5zUmVxdWVzdCA9IFttX25zUmVxdWVzdC5nZXQoKSBt
dXRhYmxlQ29weV07CisKKyAgICBpZiAobnNSZXF1ZXN0KQorICAgICAgICBbbnNSZXF1ZXN0IHNl
dFVSTDp1cmwoKV07CisgICAgZWxzZQorICAgICAgICBuc1JlcXVlc3QgPSBbW05TTXV0YWJsZVVS
TFJlcXVlc3QgYWxsb2NdIGluaXRXaXRoVVJMOnVybCgpXTsKKworICAgIFJlZlB0cjxGb3JtRGF0
YT4gZm9ybURhdGEgPSBodHRwQm9keSgpOworICAgIGlmIChmb3JtRGF0YSAmJiAhZm9ybURhdGEt
PmlzRW1wdHkoKSkKKyAgICAgICAgV2ViQ29yZTo6c2V0SFRUUEJvZHkobnNSZXF1ZXN0LCBmb3Jt
RGF0YSk7CisKKyAgICBpZiAoTlNJbnB1dFN0cmVhbSAqYm9keVN0cmVhbSA9IFtuc1JlcXVlc3Qg
SFRUUEJvZHlTdHJlYW1dKSB7CisgICAgICAgIC8vIEZvciBzdHJlYW1zLCBwcm92aWRlIGEgQ29u
dGVudC1MZW5ndGggdG8gYXZvaWQgdXNpbmcgY2h1bmtlZCBlbmNvZGluZywgYW5kIHRvIGdldCBh
Y2N1cmF0ZSB0b3RhbCBsZW5ndGggaW4gY2FsbGJhY2tzLgorICAgICAgICBOU1N0cmluZyAqbGVu
Z3RoU3RyaW5nID0gW2JvZHlTdHJlYW0gcHJvcGVydHlGb3JLZXk6KE5TU3RyaW5nICopZm9ybURh
dGFTdHJlYW1MZW5ndGhQcm9wZXJ0eU5hbWUoKV07CisgICAgICAgIGlmIChsZW5ndGhTdHJpbmcp
IHsKKyAgICAgICAgICAgIFtuc1JlcXVlc3Qgc2V0VmFsdWU6bGVuZ3RoU3RyaW5nIGZvckhUVFBI
ZWFkZXJGaWVsZDpAIkNvbnRlbnQtTGVuZ3RoIl07CisgICAgICAgICAgICAvLyBTaW5jZSByZXNv
dXJjZSByZXF1ZXN0IGlzIGFscmVhZHkgbWFya2VkIHVwZGF0ZWQsIHdlIG5lZWQgdG8ga2VlcCBp
dCB1cCB0byBkYXRlIHRvby4KKyAgICAgICAgICAgIEFTU0VSVChtX3Jlc291cmNlUmVxdWVzdFVw
ZGF0ZWQpOworICAgICAgICAgICAgbV9odHRwSGVhZGVyRmllbGRzLnNldChIVFRQSGVhZGVyTmFt
ZTo6Q29udGVudExlbmd0aCwgbGVuZ3RoU3RyaW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IG1fbnNSZXF1ZXN0ID0gYWRvcHROUyhuc1JlcXVlc3QpOworfQorCit2b2lkIFJlc291cmNlUmVx
dWVzdDo6dXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFByb3BlcnRpZXMoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiBkZWxlZ2F0ZVByb3ZpZGVkUmVxdWVzdCkKK3sKKyAgICBSZWZQdHI8Rm9y
bURhdGE+IG9sZEhUVFBCb2R5ID0gaHR0cEJvZHkoKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
ICAgIGJvb2wgaXNIaWRkZW5Gcm9tSW5zcGVjdG9yID0gaGlkZGVuRnJvbUluc3BlY3RvcigpOwor
I2VuZGlmCisKKyAgICAqdGhpcyA9IGRlbGVnYXRlUHJvdmlkZWRSZXF1ZXN0OworCisgICAgc2V0
SFRUUEJvZHkob2xkSFRUUEJvZHkucmVsZWFzZSgpKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
ICAgIHNldEhpZGRlbkZyb21JbnNwZWN0b3IoaXNIaWRkZW5Gcm9tSW5zcGVjdG9yKTsKKyNlbmRp
ZgorfQorCisjaWYgIVBMQVRGT1JNKElPUykKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0OjphcHBseVdl
YkFyY2hpdmVIYWNrRm9yTWFpbCgpCit7CisgICAgLy8gSGFjayBiZWNhdXNlIE1haWwgY2hlY2tz
IGZvciB0aGlzIHByb3BlcnR5IHRvIGRldGVjdCBkYXRhIC8gYXJjaGl2ZSBsb2FkcworICAgIFtO
U1VSTFByb3RvY29sIHNldFByb3BlcnR5OkAiIiBmb3JLZXk6QCJXZWJEYXRhUmVxdWVzdCIgaW5S
ZXF1ZXN0OihOU011dGFibGVVUkxSZXF1ZXN0ICopbnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRU
UEJvZHkpXTsKK30KKyNlbmRpZgorCit2b2lkIFJlc291cmNlUmVxdWVzdDo6c2V0U3RvcmFnZVNl
c3Npb24oQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbikKK3sKKyAgICB1cGRh
dGVQbGF0Zm9ybVJlcXVlc3QoKTsKKyAgICBtX25zUmVxdWVzdCA9IGFkb3B0TlMod2tDb3B5UmVx
dWVzdFdpdGhTdG9yYWdlU2Vzc2lvbihzdG9yYWdlU2Vzc2lvbiwgbV9uc1JlcXVlc3QuZ2V0KCkp
KTsKK30KKyAgICAKKyNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUmVzb3VyY2VSZXF1ZXN0SU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUmVzb3VyY2VSZXF1ZXN0SU9TLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjNiMmY2NmNiZjc4ZTdiYmUxYWNkODgxMDc5ZjI1ODNhN2Q1ZTljMGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9SZXNvdXJj
ZVJlcXVlc3RJT1MubW0KQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZXNv
dXJjZVJlcXVlc3QuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworQGludGVyZmFjZSBOU1VSTFJl
cXVlc3QgKFdlYk5TVVJMUmVxdWVzdERldGFpbHMpCistIChDRlVSTFJlcXVlc3RSZWYpX0NGVVJM
UmVxdWVzdDsKKy0gKGlkKV9pbml0V2l0aENGVVJMUmVxdWVzdDooQ0ZVUkxSZXF1ZXN0UmVmKXJl
cXVlc3Q7CitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBSZXNvdXJjZVJlcXVl
c3Q6OnVzZVF1aWNrTG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcygpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCisjaWYgVVNFKENGTkVUV09SSykKKworUmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJj
ZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QpCisgICAgOiBSZXNvdXJjZVJlcXVlc3RC
YXNlKCkKKyAgICAsIG1fbWFpblJlc291cmNlUmVxdWVzdChmYWxzZSkKKyAgICAsIG1fY2ZSZXF1
ZXN0KFtuc1JlcXVlc3QgX0NGVVJMUmVxdWVzdF0pCisgICAgLCBtX25zUmVxdWVzdChuc1JlcXVl
c3QpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVOU1VSTFJlcXVlc3QoKQor
eworICAgIC8vIFRoZXJlIGlzIGNsaWVudCBjb2RlIHRoYXQgZXh0ZW5kcyBOU1VSTFJlcXVlc3Qg
YW5kIGV4cGVjdHMgdG8gZ2V0IGJhY2ssIGluIHRoZSBkZWxlZ2F0ZQorICAgIC8vIGNhbGxiYWNr
cywgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgdGhhdCB0aGV5IHBhc3NlZCBpbnRvIFdlYktp
dC4gVG8ga2VlcCB0aGVuIHJ1bm5pbmcsIHdlCisgICAgLy8gY3JlYXRlIGFuIG9iamVjdCBvZiB0
aGUgc2FtZSB0eXBlIGFuZCByZXR1cm4gdGhhdC4gU2VlIDxyZGFyOi8vOTg0MzU4Mj4uCisgICAg
Ly8gQWxzbywgZGV2ZWxvcGVycyByZWFsbHkgcmVhbGx5IHdhbnQgYW4gTlNNdXRhYmxlVVJMUmVx
dWVzdCBzbyB0cnkgdG8gY3JlYXRlIGFuCisgICAgLy8gTlNNdXRhYmxlVVJMUmVxdWVzdCBpbnN0
ZWFkIG9mIE5TVVJMUmVxdWVzdC4KKyAgICBzdGF0aWMgQ2xhc3MgbnNVUkxSZXF1ZXN0Q2xhc3Mg
PSBbTlNVUkxSZXF1ZXN0IGNsYXNzXTsKKyAgICBzdGF0aWMgQ2xhc3MgbnNNdXRhYmxlVVJMUmVx
dWVzdENsYXNzID0gW05TTXV0YWJsZVVSTFJlcXVlc3QgY2xhc3NdOworICAgIENsYXNzIHJlcXVl
c3RDbGFzcyA9IFttX25zUmVxdWVzdC5nZXQoKSBjbGFzc107CisKKyAgICBpZiAoIXJlcXVlc3RD
bGFzcyB8fCByZXF1ZXN0Q2xhc3MgPT0gbnNVUkxSZXF1ZXN0Q2xhc3MpCisgICAgICAgIHJlcXVl
c3RDbGFzcyA9IG5zTXV0YWJsZVVSTFJlcXVlc3RDbGFzczsKKworICAgIGlmIChtX2NmUmVxdWVz
dCkKKyAgICAgICAgbV9uc1JlcXVlc3QgPSBhZG9wdE5TKFtbcmVxdWVzdENsYXNzIGFsbG9jXSBf
aW5pdFdpdGhDRlVSTFJlcXVlc3Q6bV9jZlJlcXVlc3QuZ2V0KCldKTsKK30KKworI2VuZGlmIC8v
IFVTRShDRk5FVFdPUkspCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5tbQppbmRleCA2Y2VkZTNlMDlmY2ZlZGMyMmNhYjI3
YTJhOWEzNTAwZDZkZDEyODZjLi4zMWRlNGE2YTZmNDBjYzNlN2FmZTZlYTdjMGFjODc0NWU4NjJk
ZGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZVJlcXVlc3RNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCkBAIC0yNiwyNTcgKzI2LDE5IEBACiAjaW1wb3J0ICJj
b25maWcuaCIKICNpbXBvcnQgIlJlc291cmNlUmVxdWVzdC5oIgogCi0jaW1wb3J0ICJGb3JtRGF0
YVN0cmVhbU1hYy5oIgotI2ltcG9ydCAiSFRUUEhlYWRlck5hbWVzLmgiCi0jaW1wb3J0ICJSZXNv
dXJjZVJlcXVlc3RDRk5ldC5oIgorI2lmIFBMQVRGT1JNKE1BQykKKwogI2ltcG9ydCAiUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCi0jaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgi
Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgogCi0KIEBpbnRlcmZhY2UgTlNVUkxSZXF1ZXN0IChXZWJOU1VSTFJlcXVlc3RE
ZXRhaWxzKQotLSAoTlNBcnJheSAqKWNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tB
cnJheTsKLSsgKHZvaWQpc2V0RGVmYXVsdFRpbWVvdXRJbnRlcnZhbDooTlNUaW1lSW50ZXJ2YWwp
c2Vjb25kczsKIC0gKENGVVJMUmVxdWVzdFJlZilfQ0ZVUkxSZXF1ZXN0OwogLSAoaWQpX2luaXRX
aXRoQ0ZVUkxSZXF1ZXN0OihDRlVSTFJlcXVlc3RSZWYpcmVxdWVzdDsKIEBlbmQKIAotQGludGVy
ZmFjZSBOU011dGFibGVVUkxSZXF1ZXN0IChXZWJNdXRhYmxlTlNVUkxSZXF1ZXN0RGV0YWlscykK
LS0gKHZvaWQpc2V0Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5OihOU0Fy
cmF5ICopdGhlRW5jb2RpbmdGYWxsYmFja0FycmF5OwotQGVuZAotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLU5TVVJMUmVxdWVzdCAqUmVzb3VyY2VSZXF1ZXN0Ojpuc1VSTFJlcXVlc3QoSFRUUEJv
ZHlVcGRhdGVQb2xpY3kgYm9keVBvbGljeSkgY29uc3QKLXsKLSAgICB1cGRhdGVQbGF0Zm9ybVJl
cXVlc3QoYm9keVBvbGljeSk7Ci0KLSAgICByZXR1cm4gW1ttX25zUmVxdWVzdC5nZXQoKSByZXRh
aW5dIGF1dG9yZWxlYXNlXTsKLX0KLQotI2lmIFVTRShDRk5FVFdPUkspCi0KLVJlc291cmNlUmVx
dWVzdDo6UmVzb3VyY2VSZXF1ZXN0KE5TVVJMUmVxdWVzdCAqbnNSZXF1ZXN0KQotICAgIDogUmVz
b3VyY2VSZXF1ZXN0QmFzZSgpCi0jaWYgUExBVEZPUk0oSU9TKQotICAgICwgbV9tYWluUmVzb3Vy
Y2VSZXF1ZXN0KGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX2NmUmVxdWVzdChbbnNSZXF1ZXN0IF9D
RlVSTFJlcXVlc3RdKQotICAgICwgbV9uc1JlcXVlc3QobnNSZXF1ZXN0KQotewotfQotCi12b2lk
IFJlc291cmNlUmVxdWVzdDo6dXBkYXRlTlNVUkxSZXF1ZXN0KCkKLXsKLSNpZiBQTEFURk9STShJ
T1MpCi0gICAgLy8gVGhlcmUgaXMgY2xpZW50IGNvZGUgdGhhdCBleHRlbmRzIE5TVVJMUmVxdWVz
dCBhbmQgZXhwZWN0cyB0byBnZXQgYmFjaywgaW4gdGhlIGRlbGVnYXRlCi0gICAgLy8gY2FsbGJh
Y2tzLCBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSB0aGF0IHRoZXkgcGFzc2VkIGludG8gV2Vi
S2l0LiBUbyBrZWVwIHRoZW4gcnVubmluZywgd2UKLSAgICAvLyBjcmVhdGUgYW4gb2JqZWN0IG9m
IHRoZSBzYW1lIHR5cGUgYW5kIHJldHVybiB0aGF0LiBTZWUgPHJkYXI6Ly85ODQzNTgyPi4KLSAg
ICAvLyBBbHNvLCBkZXZlbG9wZXJzIHJlYWxseSByZWFsbHkgd2FudCBhbiBOU011dGFibGVVUkxS
ZXF1ZXN0IHNvIHRyeSB0byBjcmVhdGUgYW4KLSAgICAvLyBOU011dGFibGVVUkxSZXF1ZXN0IGlu
c3RlYWQgb2YgTlNVUkxSZXF1ZXN0LgotICAgIHN0YXRpYyBDbGFzcyBuc1VSTFJlcXVlc3RDbGFz
cyA9IFtOU1VSTFJlcXVlc3QgY2xhc3NdOwotICAgIHN0YXRpYyBDbGFzcyBuc011dGFibGVVUkxS
ZXF1ZXN0Q2xhc3MgPSBbTlNNdXRhYmxlVVJMUmVxdWVzdCBjbGFzc107Ci0gICAgQ2xhc3MgcmVx
dWVzdENsYXNzID0gW21fbnNSZXF1ZXN0LmdldCgpIGNsYXNzXTsKLQotICAgIGlmICghcmVxdWVz
dENsYXNzIHx8IHJlcXVlc3RDbGFzcyA9PSBuc1VSTFJlcXVlc3RDbGFzcykKLSAgICAgICAgcmVx
dWVzdENsYXNzID0gbnNNdXRhYmxlVVJMUmVxdWVzdENsYXNzOwotCi0gICAgaWYgKG1fY2ZSZXF1
ZXN0KQotICAgICAgICBtX25zUmVxdWVzdCA9IGFkb3B0TlMoW1tyZXF1ZXN0Q2xhc3MgYWxsb2Nd
IF9pbml0V2l0aENGVVJMUmVxdWVzdDptX2NmUmVxdWVzdC5nZXQoKV0pOwotI2Vsc2UKLSAgICBp
ZiAobV9jZlJlcXVlc3QpCi0gICAgICAgIG1fbnNSZXF1ZXN0ID0gYWRvcHROUyhbW05TVVJMUmVx
dWVzdCBhbGxvY10gX2luaXRXaXRoQ0ZVUkxSZXF1ZXN0Om1fY2ZSZXF1ZXN0LmdldCgpXSk7Ci0j
ZW5kaWYKLX0KLQotI2Vsc2UKLQotQ0ZVUkxSZXF1ZXN0UmVmIFJlc291cmNlUmVxdWVzdDo6Y2ZV
UkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5IGJvZHlQb2xpY3kpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFtuc1VSTFJlcXVlc3QoYm9keVBvbGljeSkgX0NGVVJMUmVxdWVzdF07Ci19Ci0KLXZv
aWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmVxdWVzdCgpCi17Ci0gICAgbV91
cmwgPSBbbV9uc1JlcXVlc3QuZ2V0KCkgVVJMXTsKLSAgICBtX2NhY2hlUG9saWN5ID0gKFJlc291
cmNlUmVxdWVzdENhY2hlUG9saWN5KVttX25zUmVxdWVzdC5nZXQoKSBjYWNoZVBvbGljeV07Ci0g
ICAgbV90aW1lb3V0SW50ZXJ2YWwgPSBbbV9uc1JlcXVlc3QuZ2V0KCkgdGltZW91dEludGVydmFs
XTsKLSAgICBtX2ZpcnN0UGFydHlGb3JDb29raWVzID0gW21fbnNSZXF1ZXN0LmdldCgpIG1haW5E
b2N1bWVudFVSTF07Ci0gICAgCi0gICAgaWYgKE5TU3RyaW5nKiBtZXRob2QgPSBbbV9uc1JlcXVl
c3QuZ2V0KCkgSFRUUE1ldGhvZF0pCi0gICAgICAgIG1faHR0cE1ldGhvZCA9IG1ldGhvZDsKLSAg
ICBtX2FsbG93Q29va2llcyA9IFttX25zUmVxdWVzdC5nZXQoKSBIVFRQU2hvdWxkSGFuZGxlQ29v
a2llc107Ci0KLSAgICBpZiAoUmVzb3VyY2VSZXF1ZXN0OjpyZXNvdXJjZVByaW9yaXRpZXNFbmFi
bGVkKCkpCi0gICAgICAgIG1fcHJpb3JpdHkgPSB0b1Jlc291cmNlTG9hZFByaW9yaXR5KHdrR2V0
SFRUUFJlcXVlc3RQcmlvcml0eShbbV9uc1JlcXVlc3QuZ2V0KCkgX0NGVVJMUmVxdWVzdF0pKTsK
LQotICAgIE5TRGljdGlvbmFyeSAqaGVhZGVycyA9IFttX25zUmVxdWVzdC5nZXQoKSBhbGxIVFRQ
SGVhZGVyRmllbGRzXTsKLSAgICBOU0VudW1lcmF0b3IgKmUgPSBbaGVhZGVycyBrZXlFbnVtZXJh
dG9yXTsKLSAgICBOU1N0cmluZyAqbmFtZTsKLSAgICBtX2h0dHBIZWFkZXJGaWVsZHMuY2xlYXIo
KTsKLSAgICB3aGlsZSAoKG5hbWUgPSBbZSBuZXh0T2JqZWN0XSkpCi0gICAgICAgIG1faHR0cEhl
YWRlckZpZWxkcy5zZXQoU3RyaW5nKG5hbWUpLCBbaGVhZGVycyBvYmplY3RGb3JLZXk6bmFtZV0p
OwotCi0gICAgbV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJh
eS5jbGVhcigpOwotICAgIE5TQXJyYXkgKmVuY29kaW5nRmFsbGJhY2tzID0gW21fbnNSZXF1ZXN0
LmdldCgpIGNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheV07Ci0gICAgTlNV
SW50ZWdlciBjb3VudCA9IFtlbmNvZGluZ0ZhbGxiYWNrcyBjb3VudF07Ci0gICAgZm9yIChOU1VJ
bnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBDRlN0cmluZ0VuY29kaW5n
IGVuY29kaW5nID0gQ0ZTdHJpbmdDb252ZXJ0TlNTdHJpbmdFbmNvZGluZ1RvRW5jb2RpbmcoWyhO
U051bWJlciAqKVtlbmNvZGluZ0ZhbGxiYWNrcyBvYmplY3RBdEluZGV4OmldIHVuc2lnbmVkTG9u
Z1ZhbHVlXSk7Ci0gICAgICAgIGlmIChlbmNvZGluZyAhPSBrQ0ZTdHJpbmdFbmNvZGluZ0ludmFs
aWRJZCkKLSAgICAgICAgICAgIG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0Zh
bGxiYWNrQXJyYXkuYXBwZW5kKENGU3RyaW5nQ29udmVydEVuY29kaW5nVG9JQU5BQ2hhclNldE5h
bWUoZW5jb2RpbmcpKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQot
ICAgIGlmIChtX25zUmVxdWVzdCkgewotICAgICAgICBOU1N0cmluZyogY2FjaGVQYXJ0aXRpb24g
PSBbTlNVUkxQcm90b2NvbCBwcm9wZXJ0eUZvcktleTooTlNTdHJpbmcgKil3a0NhY2hlUGFydGl0
aW9uS2V5KCkgaW5SZXF1ZXN0Om1fbnNSZXF1ZXN0LmdldCgpXTsKLSAgICAgICAgaWYgKGNhY2hl
UGFydGl0aW9uKQotICAgICAgICAgICAgbV9jYWNoZVBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9u
OwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVSZXNv
dXJjZUhUVFBCb2R5KCkKLXsKLSAgICBpZiAoTlNEYXRhKiBib2R5RGF0YSA9IFttX25zUmVxdWVz
dC5nZXQoKSBIVFRQQm9keV0pCi0gICAgICAgIG1faHR0cEJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRl
KFtib2R5RGF0YSBieXRlc10sIFtib2R5RGF0YSBsZW5ndGhdKTsKLSAgICBlbHNlIGlmIChOU0lu
cHV0U3RyZWFtKiBib2R5U3RyZWFtID0gW21fbnNSZXF1ZXN0LmdldCgpIEhUVFBCb2R5U3RyZWFt
XSkgewotICAgICAgICBGb3JtRGF0YSogZm9ybURhdGEgPSBodHRwQm9keUZyb21TdHJlYW0oYm9k
eVN0cmVhbSk7Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vIEZvcm1EYXRhIG9iamVjdCBpZiBhIGNs
aWVudCBwcm92aWRlZCBhIGN1c3RvbSBkYXRhIHN0cmVhbS4KLSAgICAgICAgLy8gV2Ugc2hvdWxk
bid0IGJlIGxvb2tpbmcgYXQgaHR0cCBib2R5IGFmdGVyIGNsaWVudCBjYWxsYmFja3MuCi0gICAg
ICAgIEFTU0VSVChmb3JtRGF0YSk7Ci0gICAgICAgIGlmIChmb3JtRGF0YSkKLSAgICAgICAgICAg
IG1faHR0cEJvZHkgPSBmb3JtRGF0YTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VSZXF1ZXN0
Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpCi17Ci0gICAgaWYgKGlzTnVsbCgpKSB7Ci0gICAg
ICAgIG1fbnNSZXF1ZXN0ID0gbmlsOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IE5TTXV0YWJsZVVSTFJlcXVlc3QgKm5zUmVxdWVzdCA9IFttX25zUmVxdWVzdC5nZXQoKSBtdXRh
YmxlQ29weV07Ci0KLSAgICBpZiAobnNSZXF1ZXN0KQotICAgICAgICBbbnNSZXF1ZXN0IHNldFVS
TDp1cmwoKV07Ci0gICAgZWxzZQotICAgICAgICBuc1JlcXVlc3QgPSBbW05TTXV0YWJsZVVSTFJl
cXVlc3QgYWxsb2NdIGluaXRXaXRoVVJMOnVybCgpXTsKLQotICAgIGlmIChSZXNvdXJjZVJlcXVl
c3Q6Omh0dHBQaXBlbGluaW5nRW5hYmxlZCgpKQotICAgICAgICB3a0hUVFBSZXF1ZXN0RW5hYmxl
UGlwZWxpbmluZyhbbnNSZXF1ZXN0IF9DRlVSTFJlcXVlc3RdKTsKLQotICAgIGlmIChSZXNvdXJj
ZVJlcXVlc3Q6OnJlc291cmNlUHJpb3JpdGllc0VuYWJsZWQoKSkKLSAgICAgICAgd2tTZXRIVFRQ
UmVxdWVzdFByaW9yaXR5KFtuc1JlcXVlc3QgX0NGVVJMUmVxdWVzdF0sIHRvUGxhdGZvcm1SZXF1
ZXN0UHJpb3JpdHkobV9wcmlvcml0eSkpOwotCi0gICAgW25zUmVxdWVzdCBzZXRDYWNoZVBvbGlj
eTooTlNVUkxSZXF1ZXN0Q2FjaGVQb2xpY3kpY2FjaGVQb2xpY3koKV07Ci0gICAgd2tDRlVSTFJl
cXVlc3RBbGxvd0FsbFBvc3RDYWNoaW5nKFtuc1JlcXVlc3QgX0NGVVJMUmVxdWVzdF0pOwotCi0g
ICAgZG91YmxlIHRpbWVvdXRJbnRlcnZhbCA9IFJlc291cmNlUmVxdWVzdEJhc2U6OnRpbWVvdXRJ
bnRlcnZhbCgpOwotICAgIGlmICh0aW1lb3V0SW50ZXJ2YWwpCi0gICAgICAgIFtuc1JlcXVlc3Qg
c2V0VGltZW91dEludGVydmFsOnRpbWVvdXRJbnRlcnZhbF07Ci0gICAgLy8gT3RoZXJ3aXNlLCBy
ZXNwZWN0IE5TVVJMUmVxdWVzdCBkZWZhdWx0IHRpbWVvdXQuCi0KLSAgICBbbnNSZXF1ZXN0IHNl
dE1haW5Eb2N1bWVudFVSTDpmaXJzdFBhcnR5Rm9yQ29va2llcygpXTsKLSAgICBpZiAoIWh0dHBN
ZXRob2QoKS5pc0VtcHR5KCkpCi0gICAgICAgIFtuc1JlcXVlc3Qgc2V0SFRUUE1ldGhvZDpodHRw
TWV0aG9kKCldOwotICAgIFtuc1JlcXVlc3Qgc2V0SFRUUFNob3VsZEhhbmRsZUNvb2tpZXM6YWxs
b3dDb29raWVzKCldOwotCi0gICAgLy8gQ2Fubm90IGp1c3QgdXNlIHNldEFsbEhUVFBIZWFkZXJG
aWVsZHMgaGVyZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCByZW1vdmUgaGVhZGVycy4KLSAgICBOU0Fy
cmF5ICpvbGRIZWFkZXJGaWVsZE5hbWVzID0gW1tuc1JlcXVlc3QgYWxsSFRUUEhlYWRlckZpZWxk
c10gYWxsS2V5c107Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gW29sZEhlYWRlckZpZWxkTmFtZXMg
Y291bnRdOyBpICE9IDA7IC0taSkKLSAgICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTpuaWwgZm9y
SFRUUEhlYWRlckZpZWxkOltvbGRIZWFkZXJGaWVsZE5hbWVzIG9iamVjdEF0SW5kZXg6aSAtIDFd
XTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGh0dHBIZWFkZXJGaWVsZHMoKSkKLSAg
ICAgICAgW25zUmVxdWVzdCBzZXRWYWx1ZTpoZWFkZXIudmFsdWUgZm9ySFRUUEhlYWRlckZpZWxk
OmhlYWRlci5rZXldOwotCi0gICAgTlNNdXRhYmxlQXJyYXkgKmVuY29kaW5nRmFsbGJhY2tzID0g
W05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IG1fcmVzcG9uc2VD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgIT0gY291bnQ7ICsraSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGVuY29kaW5nTmFtZSA9IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNv
ZGluZ0ZhbGxiYWNrQXJyYXlbaV0uY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgdW5zaWduZWQg
bG9uZyBuc0VuY29kaW5nID0gQ0ZTdHJpbmdDb252ZXJ0RW5jb2RpbmdUb05TU3RyaW5nRW5jb2Rp
bmcoQ0ZTdHJpbmdDb252ZXJ0SUFOQUNoYXJTZXROYW1lVG9FbmNvZGluZyhlbmNvZGluZ05hbWUu
Z2V0KCkpKTsKLQotICAgICAgICBpZiAobnNFbmNvZGluZyAhPSBrQ0ZTdHJpbmdFbmNvZGluZ0lu
dmFsaWRJZCkKLSAgICAgICAgICAgIFtlbmNvZGluZ0ZhbGxiYWNrcyBhZGRPYmplY3Q6W05TTnVt
YmVyIG51bWJlcldpdGhVbnNpZ25lZExvbmc6bnNFbmNvZGluZ11dOwotICAgIH0KLSAgICBbbnNS
ZXF1ZXN0IHNldENvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTplbmNvZGlu
Z0ZhbGxiYWNrc107Ci0KLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIFN0cmlu
ZyBwYXJ0aXRpb24gPSBjYWNoZVBhcnRpdGlvbigpOwotICAgIGlmICghcGFydGl0aW9uLmlzTnVs
bCgpICYmICFwYXJ0aXRpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIE5TU3RyaW5nICpwYXJ0aXRp
b25WYWx1ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpwYXJ0aXRpb24udXRmOCgp
LmRhdGEoKV07Ci0gICAgICAgIFtOU1VSTFByb3RvY29sIHNldFByb3BlcnR5OnBhcnRpdGlvblZh
bHVlIGZvcktleTooTlNTdHJpbmcgKil3a0NhY2hlUGFydGl0aW9uS2V5KCkgaW5SZXF1ZXN0Om5z
UmVxdWVzdF07Ci0gICAgfQotI2VuZGlmCi0KLSAgICBtX25zUmVxdWVzdCA9IGFkb3B0TlMobnNS
ZXF1ZXN0KTsKLX0KLQotdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZvcm1IVFRQ
Qm9keSgpCi17Ci0gICAgaWYgKGlzTnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9uc1JlcXVl
c3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAq
bnNSZXF1ZXN0ID0gW21fbnNSZXF1ZXN0LmdldCgpIG11dGFibGVDb3B5XTsKLQotICAgIGlmIChu
c1JlcXVlc3QpCi0gICAgICAgIFtuc1JlcXVlc3Qgc2V0VVJMOnVybCgpXTsKLSAgICBlbHNlCi0g
ICAgICAgIG5zUmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhV
Ukw6dXJsKCldOwotCi0gICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IGh0dHBCb2R5KCk7
Ci0gICAgaWYgKGZvcm1EYXRhICYmICFmb3JtRGF0YS0+aXNFbXB0eSgpKQotICAgICAgICBXZWJD
b3JlOjpzZXRIVFRQQm9keShuc1JlcXVlc3QsIGZvcm1EYXRhKTsKLQotICAgIGlmIChOU0lucHV0
U3RyZWFtICpib2R5U3RyZWFtID0gW25zUmVxdWVzdCBIVFRQQm9keVN0cmVhbV0pIHsKLSAgICAg
ICAgLy8gRm9yIHN0cmVhbXMsIHByb3ZpZGUgYSBDb250ZW50LUxlbmd0aCB0byBhdm9pZCB1c2lu
ZyBjaHVua2VkIGVuY29kaW5nLCBhbmQgdG8gZ2V0IGFjY3VyYXRlIHRvdGFsIGxlbmd0aCBpbiBj
YWxsYmFja3MuCi0gICAgICAgIE5TU3RyaW5nICpsZW5ndGhTdHJpbmcgPSBbYm9keVN0cmVhbSBw
cm9wZXJ0eUZvcktleTooTlNTdHJpbmcgKilmb3JtRGF0YVN0cmVhbUxlbmd0aFByb3BlcnR5TmFt
ZSgpXTsKLSAgICAgICAgaWYgKGxlbmd0aFN0cmluZykgewotICAgICAgICAgICAgW25zUmVxdWVz
dCBzZXRWYWx1ZTpsZW5ndGhTdHJpbmcgZm9ySFRUUEhlYWRlckZpZWxkOkAiQ29udGVudC1MZW5n
dGgiXTsKLSAgICAgICAgICAgIC8vIFNpbmNlIHJlc291cmNlIHJlcXVlc3QgaXMgYWxyZWFkeSBt
YXJrZWQgdXBkYXRlZCwgd2UgbmVlZCB0byBrZWVwIGl0IHVwIHRvIGRhdGUgdG9vLgotICAgICAg
ICAgICAgQVNTRVJUKG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZCk7Ci0gICAgICAgICAgICBtX2h0
dHBIZWFkZXJGaWVsZHMuc2V0KEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoLCBsZW5ndGhT
dHJpbmcpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9uc1JlcXVlc3QgPSBhZG9wdE5TKG5z
UmVxdWVzdCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVGcm9tRGVsZWdhdGVQ
cmVzZXJ2aW5nT2xkUHJvcGVydGllcyhjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGRlbGVnYXRlUHJv
dmlkZWRSZXF1ZXN0KQotewotICAgIFJlZlB0cjxGb3JtRGF0YT4gb2xkSFRUUEJvZHkgPSBodHRw
Qm9keSgpOwotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgYm9vbCBpc0hpZGRlbkZyb21JbnNw
ZWN0b3IgPSBoaWRkZW5Gcm9tSW5zcGVjdG9yKCk7Ci0jZW5kaWYKLQotICAgICp0aGlzID0gZGVs
ZWdhdGVQcm92aWRlZFJlcXVlc3Q7Ci0KLSAgICBzZXRIVFRQQm9keShvbGRIVFRQQm9keS5yZWxl
YXNlKCkpOwotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgc2V0SGlkZGVuRnJvbUluc3BlY3Rv
cihpc0hpZGRlbkZyb21JbnNwZWN0b3IpOwotI2VuZGlmCi19Ci0KLSNpZiAhUExBVEZPUk0oSU9T
KQotdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmFwcGx5V2ViQXJjaGl2ZUhhY2tGb3JNYWlsKCkKLXsK
LSAgICAvLyBIYWNrIGJlY2F1c2UgTWFpbCBjaGVja3MgZm9yIHRoaXMgcHJvcGVydHkgdG8gZGV0
ZWN0IGRhdGEgLyBhcmNoaXZlIGxvYWRzCi0gICAgW05TVVJMUHJvdG9jb2wgc2V0UHJvcGVydHk6
QCIiIGZvcktleTpAIldlYkRhdGFSZXF1ZXN0IiBpblJlcXVlc3Q6KE5TTXV0YWJsZVVSTFJlcXVl
c3QgKiluc1VSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSldOwotfQotI2VuZGlmCi0KLXZv
aWQgUmVzb3VyY2VSZXF1ZXN0OjpzZXRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0b3JhZ2VTZXNzaW9u
UmVmIHN0b3JhZ2VTZXNzaW9uKQotewotICAgIHVwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpOwotICAg
IG1fbnNSZXF1ZXN0ID0gYWRvcHROUyh3a0NvcHlSZXF1ZXN0V2l0aFN0b3JhZ2VTZXNzaW9uKHN0
b3JhZ2VTZXNzaW9uLCBtX25zUmVxdWVzdC5nZXQoKSkpOwotfQotICAgIAotI2VuZGlmIC8vIFVT
RShDRk5FVFdPUkspCi0KLSNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIGJvb2wgaW5pdFF1aWNr
TG9va1Jlc291cmNlQ2FjaGluZ1F1aXJrcygpCiB7CiAgICAgaWYgKGFwcGxpY2F0aW9uSXNTYWZh
cmkoKSkKQEAgLTI5NSwxNyArNTcsMzYgQEAgc3RhdGljIGJvb2wgaW5pdFF1aWNrTG9va1Jlc291
cmNlQ2FjaGluZ1F1aXJrcygpCiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZiAv
LyAhUExBVEZPUk0oSU9TKQogCiBib29sIFJlc291cmNlUmVxdWVzdDo6dXNlUXVpY2tMb29rUmVz
b3VyY2VDYWNoaW5nUXVpcmtzKCkKIHsKLSNpZiAhUExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBi
b29sIGZsYWcgPSBpbml0UXVpY2tMb29rUmVzb3VyY2VDYWNoaW5nUXVpcmtzKCk7CiAgICAgcmV0
dXJuIGZsYWc7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TKQogfQogCisjaWYgVVNFKENGTkVUV09SSykKKworUmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJj
ZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QpCisgICAgOiBSZXNvdXJjZVJlcXVlc3RC
YXNlKCkKKyAgICAsIG1fY2ZSZXF1ZXN0KFtuc1JlcXVlc3QgX0NGVVJMUmVxdWVzdF0pCisgICAg
LCBtX25zUmVxdWVzdChuc1JlcXVlc3QpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1
cGRhdGVOU1VSTFJlcXVlc3QoKQoreworICAgIGlmIChtX2NmUmVxdWVzdCkKKyAgICAgICAgbV9u
c1JlcXVlc3QgPSBhZG9wdE5TKFtbTlNVUkxSZXF1ZXN0IGFsbG9jXSBfaW5pdFdpdGhDRlVSTFJl
cXVlc3Q6bV9jZlJlcXVlc3QuZ2V0KCldKTsKK30KKwordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmFw
cGx5V2ViQXJjaGl2ZUhhY2tGb3JNYWlsKCkKK3sKKyAgICAvLyBIYWNrIGJlY2F1c2UgTWFpbCBj
aGVja3MgZm9yIHRoaXMgcHJvcGVydHkgdG8gZGV0ZWN0IGRhdGEgLyBhcmNoaXZlIGxvYWRzCisg
ICAgX0NGVVJMUmVxdWVzdFNldFByb3RvY29sUHJvcGVydHkoY2ZVUkxSZXF1ZXN0KERvTm90VXBk
YXRlSFRUUEJvZHkpLCBDRlNUUigiV2ViRGF0YVJlcXVlc3QiKSwgQ0ZTVFIoIiIpKTsKK30KKwor
I2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2VuZGlmCg==
</data>
<flag name="review"
          id="258585"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>