<?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>234484</bug_id>
          
          <creation_ts>2021-12-18 21:35:40 -0800</creation_ts>
          <short_desc>[WTF] Remove RefCountedArray and use RefCountedFixedVector</short_desc>
          <delta_ts>2021-12-21 02:40:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1825407</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-18 21:35:40 -0800</bug_when>
    <thetext>[WTF] Remove RefCountedArray and use RefCountedFixedVector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825408</commentid>
    <comment_count>1</comment_count>
      <attachid>447540</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-18 21:38:06 -0800</bug_when>
    <thetext>Created attachment 447540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825931</commentid>
    <comment_count>2</comment_count>
      <attachid>447540</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-21 02:02:46 -0800</bug_when>
    <thetext>Comment on attachment 447540
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825940</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-12-21 02:10:57 -0800</bug_when>
    <thetext>Related: In new code should start making our argument types and return types be Span&lt;&gt; instead of const Vector&lt;&gt;&amp; or const FixedVector&lt;&gt;&amp;. Find to still have argument types that are Vector&lt;&gt;&amp;&amp; or FixedVector&lt;&gt;&amp;&amp;, and return types that are Vector&lt;&gt; or FixedVector&lt;&gt;, but not references, because Span is more flexible and can return things from a std::array&lt;&gt;, a Vector&lt;&gt;, a FixedVector&lt;&gt;, a pointer to a single value, or a subspan of any of those. I think we’ll end up with better code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825946</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-21 02:34:16 -0800</bug_when>
    <thetext>Committed r287308 (245460@main): &lt;https://commits.webkit.org/245460@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447540.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825947</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-21 02:35:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/86760816&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825948</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-21 02:40:22 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Related: In new code should start making our argument types and return types
&gt; be Span&lt;&gt; instead of const Vector&lt;&gt;&amp; or const FixedVector&lt;&gt;&amp;. Find to still
&gt; have argument types that are Vector&lt;&gt;&amp;&amp; or FixedVector&lt;&gt;&amp;&amp;, and return types
&gt; that are Vector&lt;&gt; or FixedVector&lt;&gt;, but not references, because Span is more
&gt; flexible and can return things from a std::array&lt;&gt;, a Vector&lt;&gt;, a
&gt; FixedVector&lt;&gt;, a pointer to a single value, or a subspan of any of those. I
&gt; think we’ll end up with better code.

Yeah, Span&lt;&gt; is useful, and we can probably use it more!
But in this case, we are using RefCountedFixedVector (not FixedVector) intentionally here since FontCascadeDescription shares RefCountedFixedVector of the other FontCascadeDescription.
And the existing method is returning `RefCountedFixedVector&amp;` (previously, `RefCountedArray&amp;`) to pass it to the other FontCascadeDescription sharing it. (that&apos;s why this is ref-counted, and neither Vector nor FixedVector).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447540</attachid>
            <date>2021-12-18 21:38:06 -0800</date>
            <delta_ts>2021-12-21 02:34:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234484-20211218213805.patch</filename>
            <type>text/plain</type>
            <size>29014</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ1NWMzYmY0NzczYTIyMzMxZTQxMzc1
MWQ5NzAxODM5ZDdjNWNiYzcuLmQyMzc3Y2ZmODFiZGUwZjQwYzNiNTgxM2MxOGM5NmI4NjU2MjEy
ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMTItMTggIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBSZW1vdmUgUmVmQ291bnRlZEFycmF5IGFu
ZCB1c2UgUmVmQ291bnRlZEZpeGVkVmVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ0ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVc2UgUmVmQ291bnRlZEZpeGVkVmVjdG9yPFQ+IGluc3RlYWQg
b2YgUmVmQ291bnRlZEFycmF5PFQ+IGFuZCByZW1vdmUgUmVmQ291bnRlZEFycmF5PFQ+LgorICAg
ICAgICBSZWZDb3VudGVkRml4ZWRWZWN0b3I8VD4gaXMgbXVjaCBzaW1wbGVyIGludGVyZmFjZTog
aXQgaXMganVzdCB1c2luZyBSZWY8PiAvIFJlZlB0cjw+CisgICAgICAgIGluc3RlYWQgb2YgaW50
ZWdyYXRpbmcgcmVmLWNvdW50aW5nIGhvbGRlciBzZW1hbnRpY3MgaW50byB0aGUgY2xhc3MgaXRz
ZWxmLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9GaXhlZFZlY3Rvci5oOgorICAg
ICAgICAqIHd0Zi9SZWZDb3VudGVkQXJyYXkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi9S
ZWZDb3VudGVkQXJyYXkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvV1RGQXNzZXJ0aW9ucy5j
cHA6CisKIDIwMjEtMTItMTcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbV1RGXSBJbnRyb2R1Y2UgVHJhaWxpbmdBcnJheQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM3YjFj
MWIyNjVjNzgyYjZkZTEyN2UxY2VmMTBiZGVlZGUyNzg1ZWMuLjRlZTc5YWVhYWZmNGZjM2Y4YTMz
MjRmNGFlZTNlNTYwODkxZGQwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAyMS0x
Mi0xOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZd
IFJlbW92ZSBSZWZDb3VudGVkQXJyYXkgYW5kIHVzZSBSZWZDb3VudGVkRml4ZWRWZWN0b3IKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDQ4NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBSZWZDb3Vu
dGVkRml4ZWRWZWN0b3IgaW50ZWFkLiBObyBzZW1hbnRpYyBjaGFuZ2UuCisKKyAgICAgICAgKiBs
YXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpGb250Q2FzY2FkZURlc2NyaXB0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlDb3VudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlB
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1p
bGllcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpz
ZXRPbmVGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
c2V0RmFtaWxpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
b3BlcmF0b3I9PSBjb25zdCk6CisKIDIwMjEtMTItMTcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9o
c2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgSGlkZSB2aWV3cG9ydC1jb25zdHJhaW5lZCBlbGVt
ZW50cyB0aGF0IGFyZSBkZXRlY3RlZCBieSBNb2RhbENvbnRhaW5lck9ic2VydmVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0OTM3M2U2ZjE3YzE3NGJlYjBh
NjI3YTBkOTc3MTQ4OWRiZTM3MTFhLi43NzAxZGViZmViOGU2NTZhMGNlYjM0OWY1NGY4NTdiYTk3
NTFhODE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3
Niw3ICsxNzYsNiBAQAogCQlFMTU1NTZGNTE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhp
Y1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTU1NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5j
cHAgKi87IH07CiAJCUUzMTFGQjE3MUYwQTU2OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzExRkIxNTFG
MEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuY3BwICovOyB9OwogCQlFMzE0OUEzNzIyOEJC
NDIyMDBCRkE2QzcgLyogQmFnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUJBNjQxMjBDRjM3MTAwMDc0OTQxQyAvKiBCYWcuY3BwICovOyB9Owot
CQlFMzE0OUEzODIyOEJCNDJDMDBCRkE2QzcgLyogUmVmQ291bnRlZEFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTZGMzkwMjBDQzYxRUIw
MEEwM0RDRCAvKiBSZWZDb3VudGVkQXJyYXkuY3BwICovOyB9OwogCQlFMzE0OUEzOTIyOEJCNDM1
MDBCRkE2QzcgLyogVmVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTVCNjM0MjBDQjUzQzEwMDQ3OTYzNSAvKiBWZWN0b3IuY3BwICovOyB9
OwogCQlFMzE0OUEzQjIyOEJEQ0FDMDBCRkE2QzcgLyogQ29uY3VycmVudEJ1ZmZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzE0OUEzQTIyOEJE
Q0FCMDBCRkE2QzcgLyogQ29uY3VycmVudEJ1ZmZlci5jcHAgKi87IH07CiAJCUUzMzY2NzRBMjcy
MjU1MTEwMDI1OTEyMiAvKiBJbnQxMjguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTMzNjY3NDkyNzIyNTUwOTAwMjU5MTIyIC8qIEludDEyOC5jcHAg
Ki87IH07CkBAIC0yODAsNyArMjc5LDYgQEAKIAkJMEY5REFBMDQxRkQxQzM3QjAwNzlDNUIyIC8q
IFN0YWNrU2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja1Nob3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5REFBMDUxRkQxQzM3QjAwNzlDNUIy
IC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0YWNrU2hvdFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTZG
MzhFMjBDQzU4MEUwMEEwM0RDRCAvKiBTZWdtZW50ZWRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VnbWVudGVkVmVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMEZBNkYzOTAyMENDNjFFQjAwQTAzRENEIC8qIFJlZkNvdW50ZWRB
cnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWZDb3VudGVk
QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE2RjM5MjIwQ0M3M0Ey
MDBBMDNEQ0QgLyogU21hbGxTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU21hbGxTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE2RjM5
NDIwQ0NBQ0U5MDBBMDNEQ0QgLyogVW5pcXVlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVW5pcXVlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkIxNEUxODE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjQ5LDcgKzY0Nyw2IEBACiAJCUE4QTQ3MkZEMTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1i
ZXJTZWVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmRvbU51bWJlclNl
ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyRkUxNTFBODI1QjAwNDEy
M0ZGIC8qIFJlZEJsYWNrVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyRkYxNTFB
ODI1QjAwNDEyM0ZGIC8qIFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzMw
MDE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlZkNvdW50ZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBOEE0NzMwMTE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZExlYWtDb3VudGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZkNvdW50ZWRMZWFr
Q291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzAyMTUxQTgy
NUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVmQ291bnRlZExlYWtDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4QTQ3MzAzMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZQdHIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjY5LDggKzEyNjYsNiBAQAogCQkJCTI2Mjk5QjZEMTdBOUU1QjgwMEFERUJF
NSAvKiBSZWYuaCAqLywKIAkJCQk0NkJFQjZFOTIyRkZEREQ1MDAyNjk4NjcgLyogUmVmQ291bnRl
ZC5jcHAgKi8sCiAJCQkJQThBNDcyRkYxNTFBODI1QjAwNDEyM0ZGIC8qIFJlZkNvdW50ZWQuaCAq
LywKLQkJCQkwRkE2RjM5MDIwQ0M2MUVCMDBBMDNEQ0QgLyogUmVmQ291bnRlZEFycmF5LmNwcCAq
LywKLQkJCQlBOEE0NzMwMDE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZEFycmF5LmggKi8s
CiAJCQkJRTNFODE2MkYyNzY0Nzk5MzAwQkFBNDVCIC8qIFJlZkNvdW50ZWRGaXhlZFZlY3Rvci5o
ICovLAogCQkJCUE4QTQ3MzAxMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50
ZXIuY3BwICovLAogCQkJCUE4QTQ3MzAyMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVh
a0NvdW50ZXIuaCAqLywKQEAgLTE4MjQsNyArMTgxOSw2IEBACiAJCQkJQThBNDc0MTQxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDM0M1
RTFGMzY4QTk3MDBGNTlCNkMgLyogUmVhZFdyaXRlTG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0NkJFQjZFQjIyRkZFMjQ5MDAyNjk4NjcgLyogUmVmQ291bnRlZC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlFMzE0OUEzODIyOEJCNDJDMDBCRkE2QzcgLyogUmVmQ291bnRlZEFycmF5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVk
TGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5MkZBMjcyMkU5MkJGRjAwRUNE
QzczIC8qIFJlc291cmNlVXNhZ2VDb2NvYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQ0RFRDBG
MzE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQKaW5kZXggZTIwYTBiMzMyOTZmOWZiMmRhOGYxMTRjMmI4MTNmNGM2YmUzMzUzYi4u
ODBlN2FjZjJkNzEzYzA4OTc5NmU5YTA3NjVmMWY2Y2QzNWVkNjg5MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKQEAgLTIxOSw3ICsyMTksNiBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgUmVk
QmxhY2tUcmVlLmgKICAgICBSZWYuaAogICAgIFJlZkNvdW50ZWQuaAotICAgIFJlZkNvdW50ZWRB
cnJheS5oCiAgICAgUmVmQ291bnRlZEZpeGVkVmVjdG9yLmgKICAgICBSZWZDb3VudGVkTGVha0Nv
dW50ZXIuaAogICAgIFJlZkNvdW50ZXIuaApAQCAtNDU4LDcgKzQ1Nyw2IEBAIHNldChXVEZfU09V
UkNFUwogICAgIFJhbmRvbU51bWJlci5jcHAKICAgICBSZWFkV3JpdGVMb2NrLmNwcAogICAgIFJl
ZkNvdW50ZWQuY3BwCi0gICAgUmVmQ291bnRlZEFycmF5LmNwcAogICAgIFJlZkNvdW50ZWRMZWFr
Q291bnRlci5jcHAKICAgICBSdW5Mb29wLmNwcAogICAgIFNIQTEuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9GaXhlZFZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvRml4ZWRWZWN0b3Iu
aAppbmRleCBiZGM3NDk5YzAyOTI4YjQ3Yjc3YzA0MWY4ZGJmYWY1ODAyODA2YmRjLi40OGUyZTY2
ZGU3N2FiMjYwMzIyNTVmNjg3Mzk3ZTcwMTFiZmZkNTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9GaXhlZFZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZpeGVkVmVjdG9yLmgKQEAg
LTI2LDEyICsyNiw5IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9FbWJlZGRlZEZp
eGVkVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAotLy8gV3JhcHBlciBhcm91bmQgUmVmQ291bnRlZEFycmF5LCBmaXhlZC1zaXpl
ZCwgbWVtb3J5IGNvbXBhY3QgVmVjdG9yLgotLy8gQ29weSBjb25zdHJ1Y3RvciAvIGFzc2lnbm1l
bnQgb3BlcmF0b3Igd29yayBkaWZmZXJlbnRseSBmcm9tIFJlZkNvdW50ZWRBcnJheTogd29ya3Mg
YXMgbGlrZSBhIFZlY3Rvci4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBGaXhlZFZlY3Rv
ciB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXku
Y3BwIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjYxN2FjMWJjMTYxZTE3NjIzM2MwNmY4ZTBiNzk5NWQ3OGNjMGM1YS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9SZWZDb3VudGVkQXJyYXkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+Ci0KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLURFRklORV9BTExPQ0FU
T1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVmQ291bnRlZEFycmF5KTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaCBiL1Nv
dXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1MDMzMjUzNDA0MDYyYzQ2ZTRiNWU4NTBiZTY2MDY5YjA3YzQ3OWE2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZkNv
dW50ZWRBcnJheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1Jhd1B0clRyYWl0cy5o
PgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLS8vIFRoaXMgaW1wbGVtZW50cyBhIHJlZmVyZW5jZSBjb3VudGVkIGFycmF5IGZvciBQT0Qq
KiB2YWx1ZXMsIHdoaWNoIGlzIG9wdGltaXplZCBmb3I6Ci0vLyAtIEFuIGVtcHR5IGFycmF5IG9u
bHkgdXNlcyBvbmUgd29yZC4KLS8vIC0gQSBjb3B5IG9mIHRoZSBhcnJheSBvbmx5IHVzZXMgb25l
IHdvcmQgKGkuZS4gYXNzaWdubWVudCBtZWFucyBhbGlhc2luZykuCi0vLyAtIFRoZSB2ZWN0b3Ig
Y2FuJ3QgZ3JvdyBiZXlvbmQgMl4zMi0xIGVsZW1lbnRzLgotLy8gLSBJbiBhbGwgb3RoZXIgcmVn
YXJkcyB0aGlzIGhhcyBzaW1pbGFyIHNwYWNlIHVzYWdlIHRvIGEgVmVjdG9yLgotLy8KLS8vICoq
IFRoaXMgY291bGQgYmUgbW9kaWZpZWQgdG8gc3VwcG9ydCBub24tUE9EIHZhbHVlcyBxdWl0ZSBl
YXNpbHkuIEl0IGp1c3QKLS8vICAgIGhhc24ndCBiZWVuLCBzbyBmYXIsIGJlY2F1c2UgdGhlcmUg
aGFzIGJlZW4gbm8gbmVlZC4gTW9yZW92ZXIsIGV2ZW4gbm93LAotLy8gICAgaXQncyB1c2VkIGZv
ciB0aGluZ3MgdGhhdCBhcmVuJ3QgcXVpdGUgUE9EIGFjY29yZGluZyB0byB0aGUgb2ZmaWNpYWwK
LS8vICAgIGRlZmludGlvbiwgc3VjaCBhcyBKU0M6Okluc3RydWN0aW9uLgotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVmQ291bnRl
ZEFycmF5KTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHJhaXRzID0gUmF3
UHRyVHJhaXRzPFQ+PgotY2xhc3MgUmVmQ291bnRlZEFycmF5IHsKLSAgICBlbnVtIENvbW1vbkNv
cHlDb25zdHJ1Y3RvclRhZyB7IENvbW1vbkNvcHlDb25zdHJ1Y3RvciB9OwotCi1wdWJsaWM6Ci0g
ICAgdXNpbmcgaXRlcmF0b3IgPSBUKjsKLSAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IGNvbnN0
IFQqOwotICAgIHVzaW5nIHJldmVyc2VfaXRlcmF0b3IgPSBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8
aXRlcmF0b3I+OwotICAgIHVzaW5nIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgPSBzdGQ6OnJldmVy
c2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+OwotCi0gICAgUmVmQ291bnRlZEFycmF5KCkgPSBk
ZWZhdWx0OwotICAgIAotICAgIFJlZkNvdW50ZWRBcnJheShjb25zdCBSZWZDb3VudGVkQXJyYXkm
IG90aGVyKQotICAgICAgICA6IFJlZkNvdW50ZWRBcnJheShDb21tb25Db3B5Q29uc3RydWN0b3Is
IG90aGVyKQotICAgIHsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUcmFpdHM+Ci0g
ICAgUmVmQ291bnRlZEFycmF5KGNvbnN0IFJlZkNvdW50ZWRBcnJheTxULCBPdGhlclRyYWl0cz4m
IG90aGVyKQotICAgICAgICA6IFJlZkNvdW50ZWRBcnJheShDb21tb25Db3B5Q29uc3RydWN0b3Is
IG90aGVyKQotICAgIHsgfQotCi0gICAgUmVmQ291bnRlZEFycmF5KFJlZkNvdW50ZWRBcnJheSYm
IG90aGVyKQotICAgICAgICA6IG1fZGF0YShQdHJUcmFpdHM6OmV4Y2hhbmdlKG90aGVyLm1fZGF0
YSwgbnVsbHB0cikpCi0gICAgeyB9Ci0KLSAgICBleHBsaWNpdCBSZWZDb3VudGVkQXJyYXkoc2l6
ZV90IHNpemUpCi0gICAgewotICAgICAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgICAgIC8vIE5P
VEU6IEpTQydzIExvd0xldmVsSW50ZXJwcmV0ZXIgcmVsaWVzIG9uIHRoaXMgYmVpbmcgbnVsbHB0
ciB3aGVuIHRoZSBzaXplIGlzIHplcm8uCi0gICAgICAgICAgICBQdHJUcmFpdHM6OmV4Y2hhbmdl
KG1fZGF0YSwgbnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBtX2RhdGEgPSBhbGxvY2F0ZVVuaW5pdGlhbGl6ZWREYXRhKHNpemUpOwotICAgICAgICBW
ZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6aW5pdGlhbGl6ZUlmTm9uUE9EKGJlZ2luKCksIGVuZCgp
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclRyYWl0cyA9IFB0clRyYWl0
cz4KLSAgICBSZWZDb3VudGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+IGNsb25lKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIFJlZkNvdW50ZWRBcnJheTxULCBPdGhlclRyYWl0cz4gcmVzdWx0KHNpemUo
KSk7Ci0gICAgICAgIGNvbnN0IFQqIGRhdGEgPSB0aGlzLT5kYXRhKCk7Ci0gICAgICAgIFQqIHJl
c3VsdERhdGEgPSByZXN1bHQuZGF0YSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXpl
KCk7IGktLTspCi0gICAgICAgICAgICByZXN1bHREYXRhW2ldID0gZGF0YVtpXTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLSAgICBleHBsaWNpdCBSZWZDb3VudGVkQXJy
YXkoY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBvdGhl
cikKLSAgICB7Ci0gICAgICAgIGlmIChvdGhlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFB0
clRyYWl0czo6ZXhjaGFuZ2UobV9kYXRhLCBudWxscHRyKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIFQqIGRhdGEgPSBhbGxvY2F0ZVVuaW5pdGlhbGl6ZWREYXRh
KG90aGVyLnNpemUoKSk7Ci0gICAgICAgIG1fZGF0YSA9IGRhdGE7Ci0gICAgICAgIFZlY3RvclR5
cGVPcGVyYXRpb25zPFQ+Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5l
bmQoKSwgZGF0YSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci0gICAgZXhwbGljaXQgUmVmQ291bnRlZEFycmF5
KFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYmIG90aGVyKQotICAg
IHsKLSAgICAgICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+IHZl
Y3RvcihXVEZNb3ZlKG90aGVyKSk7Ci0gICAgICAgIGlmICh2ZWN0b3IuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBQdHJUcmFpdHM6OmV4Y2hhbmdlKG1fZGF0YSwgbnVsbHB0cik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBUKiBkYXRhID0gYWxsb2NhdGVVbmlu
aXRpYWxpemVkRGF0YSh2ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgbV9kYXRhID0gZGF0YTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdmVjdG9yLnNpemUoKTsgKytp
bmRleCkKLSAgICAgICAgICAgIG5ldyAoZGF0YSArIGluZGV4KSBUKFdURk1vdmUodmVjdG9yW2lu
ZGV4XSkpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclRyYWl0cyA9
IFB0clRyYWl0cz4KLSAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBSZWZDb3Vu
dGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
c3NpZ248T3RoZXJUcmFpdHM+KG90aGVyKTsKLSAgICB9Ci0KLSAgICBSZWZDb3VudGVkQXJyYXkm
IG9wZXJhdG9yPShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFzc2lnbjxQdHJUcmFpdHM+KG90aGVyKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLSAgICBSZWZD
b3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlcj4mIG90aGVyKQotICAgIHsKLSAgICAgICAgVCogb2xkRGF0YSA9IGRhdGEo
KTsKLSAgICAgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFB0clRyYWl0czo6
ZXhjaGFuZ2UobV9kYXRhLCBudWxscHRyKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBU
KiBkYXRhID0gYWxsb2NhdGVVbmluaXRpYWxpemVkRGF0YShvdGhlci5zaXplKCkpOwotICAgICAg
ICAgICAgbV9kYXRhID0gZGF0YTsKLSAgICAgICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+
Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgZGF0YSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKCFvbGREYXRhKQotICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgICAgICB1bnNpZ25lZCByZWZDb3VudCA9IEhlYWRlcjo6ZnJvbVBheWxvYWQob2xkRGF0
YSktPnJlZkNvdW50IC0gMTsKLSAgICAgICAgaWYgKHJlZkNvdW50KSB7Ci0gICAgICAgICAgICBI
ZWFkZXI6OmZyb21QYXlsb2FkKG9sZERhdGEpLT5yZWZDb3VudCA9IHJlZkNvdW50OwotICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0gICAgICAgIFZlY3RvclR5cGVPcGVyYXRp
b25zPFQ+OjpkZXN0cnVjdChvbGREYXRhLCBvbGREYXRhICsgSGVhZGVyOjpmcm9tUGF5bG9hZChv
bGREYXRhKS0+bGVuZ3RoKTsKLQotICAgICAgICBSZWZDb3VudGVkQXJyYXlNYWxsb2M6OmZyZWUo
SGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KLSAgICBSZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiB2ZWN0b3IoV1RGTW92ZShv
dGhlcikpOwotICAgICAgICBUKiBvbGREYXRhID0gZGF0YSgpOwotICAgICAgICBpZiAodmVjdG9y
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIFB0clRyYWl0czo6ZXhjaGFuZ2UobV9kYXRhLCBudWxs
cHRyKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBUKiBkYXRhID0gYWxsb2NhdGVVbmlu
aXRpYWxpemVkRGF0YSh2ZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIG1fZGF0YSA9IGRhdGE7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB2ZWN0b3Iuc2l6
ZSgpOyArK2luZGV4KQotICAgICAgICAgICAgICAgIG5ldyAoZGF0YSArIGluZGV4KSBUKFdURk1v
dmUodmVjdG9yW2luZGV4XSkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghb2xkRGF0YSkKLSAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgdW5zaWduZWQgcmVmQ291bnQgPSBIZWFk
ZXI6OmZyb21QYXlsb2FkKG9sZERhdGEpLT5yZWZDb3VudCAtIDE7Ci0gICAgICAgIGlmIChyZWZD
b3VudCkgewotICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKS0+cmVmQ291
bnQgPSByZWZDb3VudDsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotICAg
ICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6ZGVzdHJ1Y3Qob2xkRGF0YSwgb2xkRGF0YSAr
IEhlYWRlcjo6ZnJvbVBheWxvYWQob2xkRGF0YSktPmxlbmd0aCk7Ci0KLSAgICAgICAgUmVmQ291
bnRlZEFycmF5TWFsbG9jOjpmcmVlKEhlYWRlcjo6ZnJvbVBheWxvYWQob2xkRGF0YSkpOwotICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgflJlZkNvdW50ZWRBcnJheSgpCi0gICAg
ewotICAgICAgICBpZiAoIW1fZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgVCog
ZGF0YSA9IHRoaXMtPmRhdGEoKTsKLSAgICAgICAgdW5zaWduZWQgcmVmQ291bnQgPSBIZWFkZXI6
OmZyb21QYXlsb2FkKGRhdGEpLT5yZWZDb3VudCAtIDE7Ci0gICAgICAgIGlmIChyZWZDb3VudCkg
ewotICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+cmVmQ291bnQgPSByZWZD
b3VudDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBWZWN0b3JUeXBl
T3BlcmF0aW9uczxUPjo6ZGVzdHJ1Y3QoYmVnaW4oKSwgZW5kKCkpOwotICAgICAgICBSZWZDb3Vu
dGVkQXJyYXlNYWxsb2M6OmZyZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKSk7Ci0gICAgfQot
ICAgIAotICAgIHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICgh
bV9kYXRhKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBIZWFkZXI6OmZy
b21QYXlsb2FkKGRhdGEoKSktPnJlZkNvdW50OwotICAgIH0KLSAgICAKLSAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fZGF0YSkKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICByZXR1cm4gSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKCkpLT5sZW5ndGg7
Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpID09IDA7
IH0KLSAgICAKLSAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplKCkgKiBz
aXplb2YoVCk7IH0KLSAgICAKLSAgICBUKiBkYXRhKCkgeyByZXR1cm4gUHRyVHJhaXRzOjp1bndy
YXAobV9kYXRhKTsgfQotICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gZGF0YSgpOyB9Ci0g
ICAgaXRlcmF0b3IgZW5kKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kYXRhKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIFQqIGRhdGEgPSB0aGlzLT5kYXRhKCk7Ci0gICAgICAgIHJl
dHVybiBkYXRhICsgSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+bGVuZ3RoOwotICAgIH0KLSAg
ICAKLSAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxSZWZDb3Vu
dGVkQXJyYXkqPih0aGlzKS0+ZGF0YSgpOyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBjb25zdF9jYXN0PFJlZkNvdW50ZWRBcnJheSo+KHRoaXMpLT5iZWdpbigp
OyB9Ci0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxS
ZWZDb3VudGVkQXJyYXkqPih0aGlzKS0+ZW5kKCk7IH0KLQotICAgIHJldmVyc2VfaXRlcmF0b3Ig
cmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KLSAgICByZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9Ci0g
ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQotICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KLSAg
ICAKLSAgICBUJiBhdChzaXplX3QgaSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKGkgPCBzaXplKCkpOwotICAgICAgICByZXR1cm4gYmVnaW4oKVtpXTsK
LSAgICB9Ci0gICAgCi0gICAgY29uc3QgVCYgYXQoc2l6ZV90IGkpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgc2l6ZSgpKTsKLSAgICAg
ICAgcmV0dXJuIGJlZ2luKClbaV07Ci0gICAgfQotICAgIAotICAgIFQmIG9wZXJhdG9yW10oc2l6
ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3Qg
aSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KLQotICAgIFQmIGZpcnN0KCkgeyByZXR1cm4gKCp0
aGlzKVswXTsgfQotICAgIGNvbnN0IFQmIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gKCp0aGlzKVsw
XTsgfQotICAgIFQmIGxhc3QoKSB7IHJldHVybiAoKnRoaXMpW3NpemUoKSAtIDFdOyB9Ci0gICAg
Y29uc3QgVCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuICgqdGhpcylbc2l6ZSgpIC0gMV07IH0KLQot
ICAgIHZvaWQgZmlsbChjb25zdCBUJiB2YWwpCi0gICAgewotICAgICAgICBzdGQ6OmZpbGwoYmVn
aW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKFJlZkNvdW50ZWRBcnJh
eSYgb3RoZXIpCi0gICAgewotICAgICAgICBQdHJUcmFpdHM6OnN3YXAobV9kYXRhLCBvdGhlci5t
X2RhdGEpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHJhaXRzID0gUHRy
VHJhaXRzPgotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWZDb3VudGVkQXJyYXk8VCwgT3Ro
ZXJUcmFpdHM+JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFQqIGRhdGEgPSBjb25zdF9j
YXN0PFQqPih0aGlzLT5kYXRhKCkpOwotICAgICAgICBUKiBvdGhlckRhdGEgPSBjb25zdF9jYXN0
PFQqPihvdGhlci5kYXRhKCkpOwotICAgICAgICBpZiAoZGF0YSA9PSBvdGhlckRhdGEpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFkYXRhIHx8ICFvdGhlckRhdGEpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IEhlYWRl
cjo6ZnJvbVBheWxvYWQoZGF0YSktPmxlbmd0aDsKLSAgICAgICAgaWYgKGxlbmd0aCAhPSBIZWFk
ZXI6OmZyb21QYXlsb2FkKG90aGVyRGF0YSktPmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAoZGF0YVtpXSAhPSBvdGhlckRhdGFbaV0pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWZDb3VudGVkQXJyYXkmIG90aGVyKSBjb25zdCB7
IHJldHVybiB0aGlzLT5vcGVyYXRvcj09PFB0clRyYWl0cz4ob3RoZXIpOyB9Ci0gICAgCi1wcml2
YXRlOgotICAgIHN0YXRpYyBUKiBhbGxvY2F0ZVVuaW5pdGlhbGl6ZWREYXRhKHVuc2lnbmVkIGxl
bmd0aCkKLSAgICB7Ci0gICAgICAgIFQqIGRhdGEgPSAoc3RhdGljX2Nhc3Q8SGVhZGVyKj4oUmVm
Q291bnRlZEFycmF5TWFsbG9jOjptYWxsb2MoSGVhZGVyOjpzaXplKCkgKyBzaXplb2YoVCkgKiBs
ZW5ndGgpKSktPnBheWxvYWQoKTsKLSAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+
cmVmQ291bnQgPSAxOwotICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5sZW5ndGgg
PSBsZW5ndGg7Ci0gICAgICAgIEFTU0VSVChIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5sZW5n
dGggPT0gbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3RoZXJUcmFpdHMgPSBQdHJUcmFpdHM+Ci0gICAgUmVmQ291bnRlZEFycmF5
JiBhc3NpZ24oY29uc3QgUmVmQ291bnRlZEFycmF5PFQsIE90aGVyVHJhaXRzPiYgb3RoZXIpCi0g
ICAgewotICAgICAgICBUKiBvbGREYXRhID0gZGF0YSgpOwotICAgICAgICBUKiBvdGhlckRhdGEg
PSBjb25zdF9jYXN0PFQqPihvdGhlci5kYXRhKCkpOwotICAgICAgICBpZiAob3RoZXJEYXRhKQot
ICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChvdGhlckRhdGEpLT5yZWZDb3VudCsrOwot
ICAgICAgICBtX2RhdGEgPSBvdGhlckRhdGE7Ci0KLSAgICAgICAgaWYgKCFvbGREYXRhKQotICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB1bnNpZ25lZCByZWZDb3VudCA9IEhlYWRl
cjo6ZnJvbVBheWxvYWQob2xkRGF0YSktPnJlZkNvdW50IC0gMTsKLSAgICAgICAgaWYgKHJlZkNv
dW50KSB7Ci0gICAgICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKG9sZERhdGEpLT5yZWZDb3Vu
dCA9IHJlZkNvdW50OwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0gICAg
ICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+OjpkZXN0cnVjdChvbGREYXRhLCBvbGREYXRhICsg
SGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKS0+bGVuZ3RoKTsKLQotICAgICAgICBSZWZDb3Vu
dGVkQXJyYXlNYWxsb2M6OmZyZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKSk7Ci0gICAg
ICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBzdHJ1Y3QgSGVhZGVyIHsKLSAgICAgICAg
dW5zaWduZWQgcmVmQ291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAgICAgICAgCi0g
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNpemUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gKHNpemVvZihIZWFkZXIpICsgNykgJiB+NzsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSGVhZGVyLCBsZW5ndGgpOyB9Ci0gICAgICAgIAotICAgICAgICBUKiBwYXlsb2FkKCkK
LSAgICAgICAgewotICAgICAgICAgICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4odGhpcykgKyBzaXplKCk7Ci0gICAgICAgICAgICBBU1NFUlQoIShiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihyZXN1bHQpICYgNykpOwotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3RfcHRyPFQqPihyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0
aWMgSGVhZGVyKiBmcm9tUGF5bG9hZChUKiBwYXlsb2FkKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhZGVyKj4ocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4ocGF5bG9hZCkgLSBzaXplKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIGNv
bnN0IEhlYWRlciogZnJvbVBheWxvYWQoY29uc3QgVCogcGF5bG9hZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGZyb21QYXlsb2FkKGNvbnN0X2Nhc3Q8VCo+KHBheWxvYWQpKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclRyYWl0cz4KLSAg
ICBSZWZDb3VudGVkQXJyYXkoQ29tbW9uQ29weUNvbnN0cnVjdG9yVGFnLCBjb25zdCBSZWZDb3Vu
dGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+JiBvdGhlcikKLSAgICAgICAgOiBtX2RhdGEoY29uc3Rf
Y2FzdDxUKj4ob3RoZXIuZGF0YSgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2RhdGEpCi0gICAg
ICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEoKSktPnJlZkNvdW50Kys7Ci0gICAgfQot
Ci0gICAgZnJpZW5kIGNsYXNzIEpTQzo6TExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgIHR5cGVu
YW1lIFB0clRyYWl0czo6U3RvcmFnZVR5cGUgbV9kYXRhIHsgbnVsbHB0ciB9OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6UmVmQ291bnRlZEFycmF5OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvV1RGQXNzZXJ0aW9ucy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9XVEZB
c3NlcnRpb25zLmNwcAppbmRleCA4M2VhMWYzZTM3NDE1M2JkN2IxODYyZTI1YzQyMmQ1Y2M5MzEw
NTAyLi43NWY2MjRhY2JhYWM5NGJmZWY2YzVhNzhiOWE4MWYzYzg2YWE4NWM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9XVEZBc3NlcnRpb25zLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9X
VEZBc3NlcnRpb25zLmNwcApAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSA8d3RmL0JhZy5o
PgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJy
YXkuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBPUyhEQVJXSU4pCkBAIC00Nyw4
ICs0Niw2IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFJlZjxEdW1teVN0cnVjdD4pID09IHNpemVv
ZihEdW1teVN0cnVjdCopLCAiIik7CiAKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFJlZlB0cjxEdW1t
eVN0cnVjdD4pID09IHNpemVvZihEdW1teVN0cnVjdCopLCAiIik7CiAKLXN0YXRpY19hc3NlcnQo
c2l6ZW9mKFJlZkNvdW50ZWRBcnJheTxEdW1teVN0cnVjdD4pID09IHNpemVvZih2b2lkKiksICIi
KTsKLQogI2lmIE9TKERBUldJTikgJiYgQ1BVKEFERFJFU1M2NCkKIC8vIE5hTiBib3hpbmcgZW5j
b2RpbmcgcmVsaWVzIG9uIHRoaXMuCiBzdGF0aWNfYXNzZXJ0KE1BQ0hfVk1fTUFYX0FERFJFU1Mg
PD0gKDF1bGwgPDwgNDgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaAppbmRleCAyOWMx
YzZjYmM0MWQyODYxYjk1NWU0ZGVlNDFhZDA0MWUwZGM2YTg5Li5iNTlhYjgwZThjYzEyNGQwOTVh
NWIxMTNhMTljNTc2ZmMxZWJhODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oCkBA
IC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiTGVnYWN5Um9vdElubGluZUJveC5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmgiCi0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAppbmRleCA2NzBjZDky
NGI4MGQxYjQ3NTY3ZDYwNGQyMWUzYmY0M2I3NjYwYjNjLi44NjVjNGFlNmE5YzMzMDVkYjY0MTVk
NjhjNDdlZjY2YmJlNTdiMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcApAQCAtNTIsNyArNTIs
OCBAQCBzdHJ1Y3QgU2FtZVNpemVBc0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24gewogQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24pID09IHNpemVvZihTYW1lU2l6ZUFz
Rm9udENhc2NhZGVEZXNjcmlwdGlvbiksIEZvbnRDYXNjYWRlRGVzY3JpcHRpb25fc2hvdWxkX3N0
YXlfc21hbGwpOwogCiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpGb250Q2FzY2FkZURlc2NyaXB0
aW9uKCkKLSAgICA6IG1faXNBYnNvbHV0ZVNpemUoZmFsc2UpCisgICAgOiBtX2ZhbWlsaWVzKFJl
ZkNvdW50ZWRGaXhlZFZlY3RvcjxBdG9tU3RyaW5nPjo6Y3JlYXRlKDEpKQorICAgICwgbV9pc0Fi
c29sdXRlU2l6ZShmYWxzZSkKICAgICAsIG1fa2VybmluZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
S2VybmluZzo6QXV0bykpCiAgICAgLCBtX2tleXdvcmRTaXplKDApCiAgICAgLCBtX2ZvbnRTbW9v
dGhpbmcoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3Ro
aW5nKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24uaAppbmRleCAwOGJkOTA2Njk0NzliMmQ2MmY5OWI5YjY3ODRh
MTVlMWQ1MmRjMjM0Li42M2ViYTJiOTA3NmY2NmRlMTExNjg1YTllZmE2OGEzMjlhZjljZGI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVEZXNjcmlwdGlvbi5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPHZhcmlh
bnQ+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkRml4ZWRWZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIkZv
bnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuaCIKQEAgLTUyLDEwICs1MiwxMCBAQCBjbGFz
cyBGb250Q2FzY2FkZURlc2NyaXB0aW9uIDogcHVibGljIEZvbnREZXNjcmlwdGlvbiB7CiAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdDsKICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKLSAgICB1bnNpZ25lZCBmYW1pbHlD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQg
ZmFtaWx5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzLT5zaXplKCk7IH0KICAgICBj
b25zdCBBdG9tU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIGZhbWlseUF0KDAp
OyB9Ci0gICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gbV9mYW1pbGllc1tpXTsgfQotICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxBdG9tU3Ry
aW5nPiYgZmFtaWxpZXMoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzOyB9CisgICAgY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGll
cy5nZXQoKVtpXTsgfQorICAgIFJlZkNvdW50ZWRGaXhlZFZlY3RvcjxBdG9tU3RyaW5nPiYgZmFt
aWxpZXMoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzLmdldCgpOyB9CiAKICAgICBzdGF0aWMg
Ym9vbCBmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcmLCBjb25zdCBBdG9tU3Ry
aW5nJik7CiAgICAgc3RhdGljIHVuc2lnbmVkIGZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21TdHJp
bmcmKTsKQEAgLTg1LDkgKzg1LDkgQEAgY2xhc3MgRm9udENhc2NhZGVEZXNjcmlwdGlvbiA6IHB1
YmxpYyBGb250RGVzY3JpcHRpb24gewogICAgIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhp
bmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U21vb3RoaW5nTW9kZT4obV9mb250
U21vb3RoaW5nKTsgfQogICAgIGJvb2wgaXNTcGVjaWZpZWRGb250KCkgY29uc3QgeyByZXR1cm4g
bV9pc1NwZWNpZmllZEZvbnQ7IH0KIAotICAgIHZvaWQgc2V0T25lRmFtaWx5KGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseSkgeyBBU1NFUlQobV9mYW1pbGllcy5zaXplKCkgPT0gMSk7IG1fZmFtaWxp
ZXNbMF0gPSBmYW1pbHk7IH0KLSAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9t
U3RyaW5nPiYgZmFtaWxpZXMpIHsgbV9mYW1pbGllcyA9IFJlZkNvdW50ZWRBcnJheTxBdG9tU3Ry
aW5nPihmYW1pbGllcyk7IH0KLSAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFJlZkNvdW50ZWRB
cnJheTxBdG9tU3RyaW5nPiYgZmFtaWxpZXMpIHsgbV9mYW1pbGllcyA9IGZhbWlsaWVzOyB9Cisg
ICAgdm9pZCBzZXRPbmVGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KSB7IEFTU0VSVCht
X2ZhbWlsaWVzLT5zaXplKCkgPT0gMSk7IG1fZmFtaWxpZXMuZ2V0KClbMF0gPSBmYW1pbHk7IH0K
KyAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9tU3RyaW5nPiYgZmFtaWxpZXMp
IHsgbV9mYW1pbGllcyA9IFJlZkNvdW50ZWRGaXhlZFZlY3RvcjxBdG9tU3RyaW5nPjo6Y3JlYXRl
RnJvbVZlY3RvcihmYW1pbGllcyk7IH0KKyAgICB2b2lkIHNldEZhbWlsaWVzKFJlZkNvdW50ZWRG
aXhlZFZlY3RvcjxBdG9tU3RyaW5nPiYgZmFtaWxpZXMpIHsgbV9mYW1pbGllcyA9IGZhbWlsaWVz
OyB9CiAgICAgdm9pZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0IHMpIHsgbV9zcGVjaWZpZWRTaXpl
ID0gY2xhbXBUb0Zsb2F0KHMpOyB9CiAgICAgdm9pZCBzZXRJc0Fic29sdXRlU2l6ZShib29sIHMp
IHsgbV9pc0Fic29sdXRlU2l6ZSA9IHM7IH0KICAgICB2b2lkIHNldEtlcm5pbmcoS2VybmluZyBr
ZXJuaW5nKSB7IG1fa2VybmluZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXJuaW5nKTsgfQpA
QCAtMTM2LDcgKzEzNiw3IEBAIGNsYXNzIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gOiBwdWJsaWMg
Rm9udERlc2NyaXB0aW9uIHsKICAgICBzdGF0aWMgRm9udFBhbGV0dGUgaW5pdGlhbEZvbnRQYWxl
dHRlKCkgeyByZXR1cm4geyBGb250UGFsZXR0ZTo6VHlwZTo6Tm9ybWFsLCBudWxsQXRvbSgpIH07
IH0KIAogcHJpdmF0ZToKLSAgICBSZWZDb3VudGVkQXJyYXk8QXRvbVN0cmluZz4gbV9mYW1pbGll
cyB7IDEgfTsKKyAgICBSZWY8UmVmQ291bnRlZEZpeGVkVmVjdG9yPEF0b21TdHJpbmc+PiBtX2Zh
bWlsaWVzOwogCiAgICAgLy8gU3BlY2lmaWVkIENTUyB2YWx1ZS4gSW5kZXBlbmRlbnQgb2YgcmVu
ZGVyaW5nIGlzc3VlcyBzdWNoIGFzIGludGVnZXIgcm91bmRpbmcsIG1pbmltdW0gZm9udCBzaXpl
cywgYW5kIHpvb21pbmcuCiAgICAgZmxvYXQgbV9zcGVjaWZpZWRTaXplIHsgMCB9OwpAQCAtMTU1
LDcgKzE1NSw3IEBAIGNsYXNzIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gOiBwdWJsaWMgRm9udERl
c2NyaXB0aW9uIHsKIGlubGluZSBib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Om9wZXJhdG9y
PT0oY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEZvbnREZXNjcmlwdGlvbjo6b3BlcmF0b3I9PShvdGhlcikKLSAgICAgICAgJiYgbV9mYW1p
bGllcyA9PSBvdGhlci5tX2ZhbWlsaWVzCisgICAgICAgICYmIG1fZmFtaWxpZXMuZ2V0KCkgPT0g
b3RoZXIubV9mYW1pbGllcy5nZXQoKQogICAgICAgICAmJiBtX3NwZWNpZmllZFNpemUgPT0gb3Ro
ZXIubV9zcGVjaWZpZWRTaXplCiAgICAgICAgICYmIG1faXNBYnNvbHV0ZVNpemUgPT0gb3RoZXIu
bV9pc0Fic29sdXRlU2l6ZQogICAgICAgICAmJiBtX2tlcm5pbmcgPT0gb3RoZXIubV9rZXJuaW5n
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>