<?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>180992</bug_id>
          
          <creation_ts>2017-12-19 13:20:20 -0800</creation_ts>
          <short_desc>Move first-letter building code to RenderTreeBuilder</short_desc>
          <delta_ts>2017-12-19 17:45:27 -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>Layout and Rendering</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1383248</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-12-19 13:20:20 -0800</bug_when>
    <thetext>RenderTreeBuilder should deal with all special case tree mutations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383257</commentid>
    <comment_count>1</comment_count>
      <attachid>329803</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-12-19 13:25:50 -0800</bug_when>
    <thetext>Created attachment 329803
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383265</commentid>
    <comment_count>2</comment_count>
      <attachid>329803</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-12-19 13:30:22 -0800</bug_when>
    <thetext>Comment on attachment 329803
patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        All special case tree building logic should go to RenderTreeBuilder.s

awesome extension!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383275</commentid>
    <comment_count>3</comment_count>
      <attachid>329809</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-12-19 13:47:48 -0800</bug_when>
    <thetext>Created attachment 329809
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383362</commentid>
    <comment_count>4</comment_count>
      <attachid>329840</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-12-19 15:18:22 -0800</bug_when>
    <thetext>Created attachment 329840
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383462</commentid>
    <comment_count>5</comment_count>
      <attachid>329840</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-19 17:44:41 -0800</bug_when>
    <thetext>Comment on attachment 329840
patch

Clearing flags on attachment: 329840

Committed r226168: &lt;https://trac.webkit.org/changeset/226168&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383463</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-19 17:44:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383464</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-19 17:45:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/36145846&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329803</attachid>
            <date>2017-12-19 13:25:50 -0800</date>
            <delta_ts>2017-12-19 13:47:48 -0800</delta_ts>
            <desc>patch</desc>
            <filename>rtb-updateafterdescendants-3.patch</filename>
            <type>text/plain</type>
            <size>53763</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNjEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE3LTEyLTE5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGZpcnN0LWxldHRlciBi
dWlsZGluZyBjb2RlIHRvIFJlbmRlclRyZWVCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGwgc3BlY2lhbCBjYXNlIHRyZWUgYnVpbGRpbmcg
bG9naWMgc2hvdWxkIGdvIHRvIFJlbmRlclRyZWVCdWlsZGVyLnMKKworICAgICAgICAtIFJlbmRl
clRyZWVVcGRhdGVyOjpGaXJzdExldHRlciAtPiBSZW5kZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0
ZXIKKyAgICAgICAgLSBNYWtlIHRoZSBidWlsZGVyIG5vbi1zdGF0aWMgYW5kIHN0b3AgdXNpbmcg
UmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKSB0aGVyZS4KKworICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiByZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEF1dG9TaXppbmdWYWx1ZTo6YWRqdXN0VGV4dE5vZGVTaXplcyk6CisgICAgICAgICogcmVuZGVy
aW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRyZWVCdWlsZGVyOjpSZW5kZXJUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VHJlZUJ1aWxkZXI6OnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VHJlZUJ1aWxkZXI6OmZpcnN0TGV0dGVyQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUcmVlQnVpbGRlcjo6dGFibGVCdWlsZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5jcHA6IENvcGllZCBmcm9tIHJlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OnN1cHBvcnRzRmlyc3RMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJl
ZUJ1aWxkZXI6OkZpcnN0TGV0dGVyOjpGaXJzdExldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0ZXI6OnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OkZpcnN0TGV0dGVyOjp1cGRhdGVT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0ZXI6
OmNyZWF0ZVJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVGaXJzdExldHRlclN0
eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVy
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OkZpcnN0
TGV0dGVyOjp1cGRhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmg6IENvcGllZCBmcm9tIHJlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmguCisgICAgICAgICogcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVVcGRhdGVyOjp1cGRhdGVBZnRlckRlc2NlbmRhbnRzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvdXBk
YXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaDogUmVt
b3ZlZC4KKwogMjAxNy0xMi0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KIAogICAgICAgICBbWUFSUl0gWWFyciBzaG91bGQgcmV0dXJuIEVycm9yQ29kZSBpbnN0ZWFk
IG9mIGVycm9yIG1lc3NhZ2VzIChjb25zdCBjaGFyKikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZp
c2lvbiAyMjYxMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTk4MCwxMCArMTk4MCwxMCBAQCByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVp
bGRlci5jcHAKIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAogCiByZW5kZXJpbmcvdXBk
YXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCityZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZUJ1aWxkZXJGaXJzdExldHRlci5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVp
bGRlclRhYmxlLmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVQb3NpdGlvbi5jcHAK
IHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKLXJlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcAogcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHAKIHJlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjYxMzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1NzgsNyArNDU3OCw3IEBACiAJCUU0N0MzOTJEMUZFNkUwRjMwMEJCQkM2QiAv
KiBSZW5kZXJUcmVlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ3QzM5MkExRkU2RTBERTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVy
LmggKi87IH07CiAJCUU0N0MzOTJFMUZFNkUwRjcwMEJCQkM2QiAvKiBSZW5kZXJUcmVlUG9zaXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0Mz
OTI0MUZFNkUwREIwMEJCQkM2QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24uaCAqLzsgfTsKIAkJRTQ3
QzM5MkYxRkU2RTBGOTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyQzFGRTZFMERGMDBCQkJD
NkIgLyogUmVuZGVyVHJlZVVwZGF0ZXIuaCAqLzsgfTsKLQkJRTQ3QzM5MzAxRkU2RTBGRDAwQkJC
QzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI2MUZFNkUwREMwMEJCQkM2QiAvKiBS
ZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmggKi87IH07CisJCUU0N0MzOTMwMUZFNkUwRkQw
MEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIg
LyogUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oICovOyB9OwogCQlFNDdDMzkzMTFGRTZF
MTAyMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyNTFGRTZFMERC
MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggKi87IH07CiAJ
CUU0N0MzOTMyMUZFNkUxMDUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyODFG
RTZFMEREMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oICovOyB9OwogCQlF
NDdDMzkzMzFGRTZFMTA4MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QzM5Mjcx
RkU2RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uaCAqLzsgfTsK
QEAgLTEzOTA2LDEyICsxMzkwNiwxMiBAQAogCQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyog
Q2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNDdDMzkxRjFGRTZFMEQ4MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdDMzkyMDFGRTZFMEQ5MDBCQkJDNkIg
LyogUmVuZGVyVHJlZUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyVHJlZUJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlFNDdDMzkyMTFGRTZFMERBMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlVXBk
YXRlckZpcnN0TGV0dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QzM5
MjExRkU2RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGaXJz
dExldHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0MzOTIyMUZFNkUw
REEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0
ZWRDb250ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QzM5MjMxRkU2
RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVt
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0MzOTI0MUZFNkUwREIwMEJC
QkM2QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyVHJlZVBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0N0MzOTI1MUZFNkUwREIwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENv
bnRlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0
ZXJHZW5lcmF0ZWRDb250ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0N0Mz
OTI2MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QzM5MjYxRkU2RTBEQzAwQkJC
QzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDdDMzkyNzFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJl
ZVVwZGF0ZXJNdWx0aUNvbHVtbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0N0MzOTI4MUZFNkUwREQwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyTGlz
dEl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QzM5MjkxRkU2RTBERTAw
QkJCQzZCIC8qIFJlbmRlclRyZWVQb3NpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlUG9zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjQ1MTMsMTQgKzI0NTEzLDE0IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlF
NDdDMzkyMDFGRTZFMEQ5MDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXIuY3BwICovLAogCQkJ
CUU0N0MzOTJBMUZFNkUwREUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlci5oICovLAorCQkJ
CUU0N0MzOTIxMUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVy
LmNwcCAqLywKKwkJCQlFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxk
ZXJGaXJzdExldHRlci5oICovLAogCQkJCTExOTM0MDc2MUZFOEI5MjMwMDkzNUYxRSAvKiBSZW5k
ZXJUcmVlQnVpbGRlclRhYmxlLmNwcCAqLywKIAkJCQkxMTkzNDA3NzFGRThCOTIzMDA5MzVGMUUg
LyogUmVuZGVyVHJlZUJ1aWxkZXJUYWJsZS5oICovLAogCQkJCUU0N0MzOTI5MUZFNkUwREUwMEJC
QkM2QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24uY3BwICovLAogCQkJCUU0N0MzOTI0MUZFNkUwREIw
MEJCQkM2QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24uaCAqLywKIAkJCQlFNDdDMzkxRjFGRTZFMEQ4
MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXIuY3BwICovLAogCQkJCUU0N0MzOTJDMUZFNkUw
REYwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlci5oICovLAotCQkJCUU0N0MzOTIxMUZFNkUw
REEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcCAqLywKLQkJCQlF
NDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5o
ICovLAogCQkJCUU0N0MzOTIyMUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckdl
bmVyYXRlZENvbnRlbnQuY3BwICovLAogCQkJCUU0N0MzOTI1MUZFNkUwREIwMEJCQkM2QiAvKiBS
ZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaCAqLywKIAkJCQlFNDdDMzkyQjFGRTZF
MERGMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5jcHAgKi8sCkBAIC0yNzIz
OCw2ICsyNzIzOCw3IEBACiAJCQkJOTc3QjM4NzgxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxUb2tl
bml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDc1NjhDMTQyMjYyRDYwMDQxNDE2MSAvKiBI
VE1MVHJhY2tFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzcyNjEyMjg3MjE3MDBC
ODFGRjggLyogSFRNTFRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDdDMzkzMDFG
RTZFMEZEMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThFQTc5RjIwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxVTGlzdEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUFENDk5MTQzMThGMDgxNTEwMEJGMDA5MiAvKiBIVE1MVW5r
bm93bkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxM0FCMENENjMzMTAwMEZBREE3
NSAvKiBIVE1MVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI4OTI4LDcgKzI4OTI5
LDYgQEAKIAkJCQkxMTkzNDA3OTFGRThCOTIzMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJU
YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MkUxRkU2RTBGNzAwQkJCQzZCIC8qIFJl
bmRlclRyZWVQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MkYxRkU2RTBGOTAw
QkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDdDMzkz
MDFGRTZFMEZEMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ3QzM5MzExRkU2RTEwMjAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRh
dGVyR2VuZXJhdGVkQ29udGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MzIxRkU2RTEw
NTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0N0MzOTMzMUZFNkUxMDgwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlck11bHRpQ29s
dW1uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
QXV0b1NpemluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvU2l6aW5nLmNwcAkocmV2aXNpb24gMjI2MTM1KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QAogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlci5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVV
cGRhdGVyRmlyc3RMZXR0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0
dGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZXIuaCIKIApAQCAtMTczLDggKzE3Myw3IEBAIGF1dG8gVGV4dEF1dG9TaXpp
bmdWYWx1ZTo6YWRqdXN0VGV4dE5vZGUKICAgICAgICAgYXV0byogYmxvY2sgPSBkb3duY2FzdDxS
ZW5kZXJUZXh0RnJhZ21lbnQ+KHRleHRSZW5kZXJlcikuYmxvY2tGb3JBY2NvbXBhbnlpbmdGaXJz
dExldHRlcigpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIC8vIEZJWE1FOiBBbGwgcmVuZGVyIHRyZWUgbXV0YXRpb25zIHNob3VsZCBiZSBkb25l
IGJ5IFJlbmRlclRyZWVVcGRhdGVyIGNvbW1pdC4KLSAgICAgICAgUmVuZGVyVHJlZVVwZGF0ZXI6
OkZpcnN0TGV0dGVyOjp1cGRhdGUoKmJsb2NrKTsKKyAgICAgICAgYnVpbGRlci51cGRhdGVBZnRl
ckRlc2NlbmRhbnRzKCpibG9jayk7CiAgICAgfQogCiAgICAgcmV0dXJuIHN0aWxsSGFzTm9kZXM7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDIyNjEzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRlICJSZW5kZXJSdWJ5UnVuLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGFibGVSb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVy
VGFibGUuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQxLDYgKzQxLDcgQEAgUmVuZGVyVHJlZUJ1aWxkZXIqIFJlbmRlclRyZWVC
dWlsZGVyOjpzXwogCiBSZW5kZXJUcmVlQnVpbGRlcjo6UmVuZGVyVHJlZUJ1aWxkZXIoUmVuZGVy
VmlldyYgdmlldykKICAgICA6IG1fdmlldyh2aWV3KQorICAgICwgbV9maXJzdExldHRlckJ1aWxk
ZXIoc3RkOjptYWtlX3VuaXF1ZTxGaXJzdExldHRlcj4oKnRoaXMpKQogICAgICwgbV90YWJsZUJ1
aWxkZXIoc3RkOjptYWtlX3VuaXF1ZTxUYWJsZT4oKnRoaXMpKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFzX2N1cnJlbnQgfHwgJm1fdmlldyAhPSAmc19jdXJyZW50LT5tX3ZpZXcpOwpAQCAtNjMs
NyArNjQsNyBAQCB2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGlsZChSZW5kCiAgICAg
fQogCiAgICAgaWYgKGlzPFJlbmRlclRhYmxlUm93PihwYXJlbnQpKSB7Ci0gICAgICAgIG1fdGFi
bGVCdWlsZGVyLT5maW5kT3JDcmVhdGVQYXJlbnRGb3JDaGlsZChkb3duY2FzdDxSZW5kZXJUYWJs
ZVJvdz4ocGFyZW50KSwgKmNoaWxkLCBiZWZvcmVDaGlsZCkuYWRkQ2hpbGQoKnRoaXMsIFdURk1v
dmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHRhYmxlQnVpbGRlcigpLmZpbmRPckNy
ZWF0ZVBhcmVudEZvckNoaWxkKGRvd25jYXN0PFJlbmRlclRhYmxlUm93PihwYXJlbnQpLCAqY2hp
bGQsIGJlZm9yZUNoaWxkKS5hZGRDaGlsZCgqdGhpcywgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNo
aWxkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODAsNiArODEsMTIgQEAgdm9pZCBS
ZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGQoUmVuZAogICAgIGluc2VydENoaWxkKHBvc2l0
aW9uLnBhcmVudCgpLCBXVEZNb3ZlKGNoaWxkKSwgcG9zaXRpb24ubmV4dFNpYmxpbmcoKSk7CiB9
CiAKK3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIpCit7CisgICAgaWYgKGlzPFJlbmRlbkJsb2NrPihyZW5kZXJlcikp
CisgICAgICAgIGZpcnN0TGV0dGVyQnVpbGRlcigpLnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSk7Cit9CisKIHZvaWQgUmVuZGVyVHJlZUJ1aWxk
ZXI6OnJ1YnlSdW5JbnNlcnRDaGlsZChSZW5kZXJSdWJ5UnVuJiBwYXJlbnQsIFJlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGlm
IChjaGlsZC0+aXNSdWJ5VGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAkocmV2aXNpb24gMjI2MTM1
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDIwICs0MCwyOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBp
bnNlcnRDaGlsZChSZW5kZXJFbGVtZW50JiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7CiAgICAgdm9pZCBpbnNlcnRD
aGlsZChSZW5kZXJUcmVlUG9zaXRpb24mLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0Pik7CiAKKyAg
ICB2b2lkIHVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoUmVuZGVyRWxlbWVudCYpOworCiAgICAgLy8g
VGhpcyBhdm9pZHMgaGF2aW5nIHRvIGNvbnZlcnQgYWxsIHNpdGVzIHRoYXQgbmVlZCBSZW5kZXJU
cmVlQnVpbGRlciBpbiBvbmUgZ28uCiAgICAgLy8gRklYTUU6IFJlbW92ZS4KICAgICBzdGF0aWMg
UmVuZGVyVHJlZUJ1aWxkZXIqIGN1cnJlbnQoKSB7IHJldHVybiBzX2N1cnJlbnQ7IH0KIAogcHJp
dmF0ZToKKyAgICBjbGFzcyBGaXJzdExldHRlcjsKICAgICBjbGFzcyBUYWJsZTsKIAogICAgIHZv
aWQgcnVieVJ1bkluc2VydENoaWxkKFJlbmRlclJ1YnlSdW4mLCBSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAKKyAgICBGaXJzdExldHRl
ciYgZmlyc3RMZXR0ZXJCdWlsZGVyKCkgeyByZXR1cm4gKm1fZmlyc3RMZXR0ZXJCdWlsZGVyOyB9
CisgICAgVGFibGUmIHRhYmxlQnVpbGRlcigpIHsgcmV0dXJuICptX3RhYmxlQnVpbGRlcjsgfQor
CiAgICAgUmVuZGVyVmlldyYgbV92aWV3OwogCiAgICAgUmVuZGVyVHJlZUJ1aWxkZXIqIG1fcHJl
dmlvdXMgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBtX3RhYmxlQnVp
bGRlcjsKICAgICBzdGF0aWMgUmVuZGVyVHJlZUJ1aWxkZXIqIHNfY3VycmVudDsKKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxGaXJzdExldHRlcj4gbV9maXJzdExldHRlckJ1aWxkZXI7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFRhYmxlPiBtX3RhYmxlQnVpbGRlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVu
ZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5jcHAJKHJldmlzaW9uIDIyNjEzNSkJKGZyb20gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0
ZXIuY3BwOjIyNjEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQorICogICAgICAgICAgIChDKSAyMDA3IERhdmlkIFNtaXRoIChjYXRmaXNoLm1hbkBnbWFpbC5j
b20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmgiCisKKyNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVyQnV0dG9uLmgi
CisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieVJ1bi5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRhYmxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCisj
aW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgUmVuZGVyU3R5bGUgc3R5bGVGb3JGaXJzdExldHRlcihjb25zdCBSZW5kZXJCbG9jayYg
Zmlyc3RMZXR0ZXJCbG9jaywgY29uc3QgUmVuZGVyT2JqZWN0JiBmaXJzdExldHRlckNvbnRhaW5l
cikKK3sKKyAgICBhdXRvKiBjb250YWluZXJGaXJzdExldHRlclN0eWxlID0gZmlyc3RMZXR0ZXJC
bG9jay5nZXRDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIsICZmaXJzdExldHRlckNvbnRh
aW5lci5maXJzdExpbmVTdHlsZSgpKTsKKyAgICAvLyBGSVhNRTogVGhlcmUgYXBwZWFycyB0byBi
ZSBzb21lIHBhdGggd2hlcmUgd2UgaGF2ZSBhIGZpcnN0IGxldHRlciByZW5kZXJlciB3aXRob3V0
IGZpcnN0IGxldHRlciBzdHlsZS4KKyAgICBBU1NFUlQoY29udGFpbmVyRmlyc3RMZXR0ZXJTdHls
ZSk7CisgICAgYXV0byBmaXJzdExldHRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGNvbnRh
aW5lckZpcnN0TGV0dGVyU3R5bGUgPyAqY29udGFpbmVyRmlyc3RMZXR0ZXJTdHlsZSA6IGZpcnN0
TGV0dGVyQ29udGFpbmVyLmZpcnN0TGluZVN0eWxlKCkpOworCisgICAgLy8gSWYgd2UgaGF2ZSBh
biBpbml0aWFsIGxldHRlciBkcm9wIHRoYXQgaXMgPj0gMSwgdGhlbiB3ZSBuZWVkIHRvIGZvcmNl
IGZsb2F0aW5nIHRvIGJlIG9uLgorICAgIGlmIChmaXJzdExldHRlclN0eWxlLmluaXRpYWxMZXR0
ZXJEcm9wKCkgPj0gMSAmJiAhZmlyc3RMZXR0ZXJTdHlsZS5pc0Zsb2F0aW5nKCkpCisgICAgICAg
IGZpcnN0TGV0dGVyU3R5bGUuc2V0RmxvYXRpbmcoZmlyc3RMZXR0ZXJTdHlsZS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBMZWZ0RmxvYXQgOiBSaWdodEZsb2F0KTsKKworICAgIC8vIFdlIGhh
dmUgdG8gY29tcHV0ZSB0aGUgY29ycmVjdCBmb250LXNpemUgZm9yIHRoZSBmaXJzdC1sZXR0ZXIg
aWYgaXQgaGFzIGFuIGluaXRpYWwgbGV0dGVyIGhlaWdodCBzZXQuCisgICAgYXV0byogcGFyYWdy
YXBoID0gZmlyc3RMZXR0ZXJDb250YWluZXIuaXNSZW5kZXJCbG9ja0Zsb3coKSA/ICZmaXJzdExl
dHRlckNvbnRhaW5lciA6IGZpcnN0TGV0dGVyQ29udGFpbmVyLmNvbnRhaW5pbmdCbG9jaygpOwor
ICAgIGlmIChmaXJzdExldHRlclN0eWxlLmluaXRpYWxMZXR0ZXJIZWlnaHQoKSA+PSAxICYmIGZp
cnN0TGV0dGVyU3R5bGUuZm9udE1ldHJpY3MoKS5oYXNDYXBIZWlnaHQoKSAmJiBwYXJhZ3JhcGgt
PnN0eWxlKCkuZm9udE1ldHJpY3MoKS5oYXNDYXBIZWlnaHQoKSkgeworICAgICAgICAvLyBGSVhN
RTogRm9yIGlkZW9ncmFwaGljIGJhc2VsaW5lcywgd2Ugd2FudCB0byBnbyBmcm9tIGxpbmUgZWRn
ZSB0byBsaW5lIGVkZ2UuIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoTi0xKSpsaW5lLWhlaWdodCAr
IHRoZSBmb250IGhlaWdodC4KKyAgICAgICAgLy8gV2UgZG9uJ3QgeWV0IHN1cHBvcnQgaWRlb2dy
YXBoaWMgYmFzZWxpbmVzLgorICAgICAgICAvLyBGb3IgYW4gTi1saW5lIGZpcnN0LWxldHRlciBh
bmQgZm9yIGFscGhhYmV0aWMgYmFzZWxpbmVzLCB0aGUgY2FwLWhlaWdodCBvZiB0aGUgZmlyc3Qg
bGV0dGVyIG5lZWRzIHRvIGVxdWFsIChOLTEpKmxpbmUtaGVpZ2h0IG9mIHBhcmFncmFwaCBsaW5l
cyArIGNhcC1oZWlnaHQgb2YgdGhlIHBhcmFncmFwaAorICAgICAgICAvLyBNYXRoZW1hdGljYWxs
eSB3ZSBjYW4ndCByZWx5IG9uIGZvbnQtc2l6ZSwgc2luY2UgZm9udCgpLmhlaWdodCgpIGRvZXNu
J3QgbmVjZXNzYXJpbHkgbWF0Y2guIEZvciByZWxpYWJpbGl0eSwgdGhlIGJlc3QgYXBwcm9hY2gg
aXMgc2ltcGx5IHRvCisgICAgICAgIC8vIGNvbXBhcmUgdGhlIGZpbmFsIG1lYXN1cmVkIGNhcC1o
ZWlnaHRzIG9mIHRoZSB0d28gZm9udHMgaW4gb3JkZXIgdG8gZ2V0IHRvIHRoZSBjbG9zZXN0IHBv
c3NpYmxlIHZhbHVlLgorICAgICAgICBmaXJzdExldHRlclN0eWxlLnNldExpbmVCb3hDb250YWlu
KExpbmVCb3hDb250YWluSW5pdGlhbExldHRlcik7CisgICAgICAgIGludCBsaW5lSGVpZ2h0ID0g
cGFyYWdyYXBoLT5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpOworCisgICAgICAgIC8vIFNl
dCB0aGUgZm9udCB0byBiZSBvbmUgbGluZSB0b28gYmlnIGFuZCB0aGVuIHJhdGNoZXQgYmFjayB0
byBnZXQgdG8gYSBwcmVjaXNlIGZpdC4gV2UgY2FuJ3QganVzdCBzZXQgdGhlIGRlc2lyZWQgZm9u
dCBzaXplIGJhc2VkIG9mZiBmb250IGhlaWdodCBtZXRyaWNzCisgICAgICAgIC8vIGJlY2F1c2Ug
bWFueSBmb250cyBiYWtlIGFzY2VudCBpbnRvIHRoZSBmb250IG1ldHJpY3MuIFRoZXJlZm9yZSB3
ZSBoYXZlIHRvIGxvb2sgYXQgYWN0dWFsIG1lYXN1cmVkIGNhcCBoZWlnaHQgdmFsdWVzIGluIG9y
ZGVyIHRvIGtub3cgd2hlbiB3ZSBoYXZlIGEgZ29vZCBmaXQuCisgICAgICAgIGF1dG8gbmV3Rm9u
dERlc2NyaXB0aW9uID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAg
ICAgZmxvYXQgY2FwUmF0aW8gPSBmaXJzdExldHRlclN0eWxlLmZvbnRNZXRyaWNzKCkuZmxvYXRD
YXBIZWlnaHQoKSAvIGZpcnN0TGV0dGVyU3R5bGUuY29tcHV0ZWRGb250UGl4ZWxTaXplKCk7Cisg
ICAgICAgIGZsb2F0IHN0YXJ0aW5nRm9udFNpemUgPSAoKGZpcnN0TGV0dGVyU3R5bGUuaW5pdGlh
bExldHRlckhlaWdodCgpIC0gMSkgKiBsaW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZv
bnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCkpIC8gY2FwUmF0aW87CisgICAgICAgIG5ld0ZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0YXJ0aW5nRm9udFNpemUpOworICAgICAgICBuZXdG
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0YXJ0aW5nRm9udFNpemUpOworICAgICAg
ICBmaXJzdExldHRlclN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24p
OworICAgICAgICBmaXJzdExldHRlclN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKGZpcnN0TGV0
dGVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CisKKyAgICAgICAgaW50IGRl
c2lyZWRDYXBIZWlnaHQgPSAoZmlyc3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0dGVySGVpZ2h0KCkg
LSAxKSAqIGxpbmVIZWlnaHQgKyBwYXJhZ3JhcGgtPnN0eWxlKCkuZm9udE1ldHJpY3MoKS5jYXBI
ZWlnaHQoKTsKKyAgICAgICAgaW50IGFjdHVhbENhcEhlaWdodCA9IGZpcnN0TGV0dGVyU3R5bGUu
Zm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKKyAgICAgICAgd2hpbGUgKGFjdHVhbENhcEhlaWdo
dCA+IGRlc2lyZWRDYXBIZWlnaHQpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0
aW9uID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIG5l
d0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVj
aWZpZWRTaXplKCkgLSAxKTsKKyAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpIC0xKTsKKyAgICAgICAg
ICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlv
bik7CisgICAgICAgICAgICBmaXJzdExldHRlclN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKGZp
cnN0TGV0dGVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAg
ICBhY3R1YWxDYXBIZWlnaHQgPSBmaXJzdExldHRlclN0eWxlLmZvbnRNZXRyaWNzKCkuY2FwSGVp
Z2h0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGb3JjZSBpbmxpbmUgZGlzcGxheSAo
ZXhjZXB0IGZvciBmbG9hdGluZyBmaXJzdC1sZXR0ZXJzKS4KKyAgICBmaXJzdExldHRlclN0eWxl
LnNldERpc3BsYXkoZmlyc3RMZXR0ZXJTdHlsZS5pc0Zsb2F0aW5nKCkgPyBCTE9DSyA6IElOTElO
RSk7CisgICAgLy8gQ1NTMiBzYXlzIGZpcnN0LWxldHRlciBjYW4ndCBiZSBwb3NpdGlvbmVkLgor
ICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOworICAgIHJl
dHVybiBmaXJzdExldHRlclN0eWxlOworfQorCisvLyBDU1MgMi4xIGh0dHA6Ly93d3cudzMub3Jn
L1RSL0NTUzIxL3NlbGVjdG9yLmh0bWwjZmlyc3QtbGV0dGVyCisvLyAiUHVuY3R1YXRpb24gKGku
ZSwgY2hhcmFjdGVycyBkZWZpbmVkIGluIFVuaWNvZGUgW1VOSUNPREVdIGluIHRoZSAib3BlbiIg
KFBzKSwgImNsb3NlIiAoUGUpLAorLy8gImluaXRpYWwiIChQaSkuICJmaW5hbCIgKFBmKSBhbmQg
Im90aGVyIiAoUG8pIHB1bmN0dWF0aW9uIGNsYXNzZXMpLCB0aGF0IHByZWNlZGVzIG9yIGZvbGxv
d3MgdGhlIGZpcnN0IGxldHRlciBzaG91bGQgYmUgaW5jbHVkZWQiCitzdGF0aWMgaW5saW5lIGJv
b2wgaXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIFVf
R0VUX0dDX01BU0soYykgJiAoVV9HQ19QU19NQVNLIHwgVV9HQ19QRV9NQVNLIHwgVV9HQ19QSV9N
QVNLIHwgVV9HQ19QRl9NQVNLIHwgVV9HQ19QT19NQVNLKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHNob3VsZFNraXBGb3JGaXJzdExldHRlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc1Nw
YWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlIHx8IGlzUHVuY3R1YXRpb25Gb3JG
aXJzdExldHRlcihjKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXJTdHlsZShS
ZW5kZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0JiBjdXJyZW50Q2hpbGQp
Cit7CisgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXIgPSBjdXJyZW50Q2hpbGQucGFyZW50
KCk7CisgICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0ZpcnN0TGV0dGVyKCkpOworCisgICAgUmVu
ZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBmaXJzdExldHRlci0+cGFyZW50KCk7
CisgICAgYXV0byBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJC
bG9jaywgKmZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKyAgICBBU1NFUlQoZmlyc3RMZXR0ZXItPmlz
RmxvYXRpbmcoKSB8fCBmaXJzdExldHRlci0+aXNJbmxpbmUoKSk7CisKKyAgICBpZiAoU3R5bGU6
OmRldGVybWluZUNoYW5nZShmaXJzdExldHRlci0+c3R5bGUoKSwgcHNldWRvU3R5bGUpID09IFN0
eWxlOjpEZXRhY2gpIHsKKyAgICAgICAgLy8gVGhlIGZpcnN0LWxldHRlciByZW5kZXJlciBuZWVk
cyB0byBiZSByZXBsYWNlZC4gQ3JlYXRlIGEgbmV3IHJlbmRlcmVyIG9mIHRoZSByaWdodCB0eXBl
LgorICAgICAgICBSZW5kZXJQdHI8UmVuZGVyQm94TW9kZWxPYmplY3Q+IG5ld0ZpcnN0TGV0dGVy
OworICAgICAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKKyAgICAgICAg
ICAgIG5ld0ZpcnN0TGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVySW5saW5lPihmaXJzdExl
dHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRvU3R5bGUpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9j
a0Zsb3c+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkp
OworICAgICAgICBuZXdGaXJzdExldHRlci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgICAgIG5l
d0ZpcnN0TGV0dGVyLT5zZXRJc0ZpcnN0TGV0dGVyKCk7CisKKyAgICAgICAgLy8gTW92ZSB0aGUg
Zmlyc3QgbGV0dGVyIGludG8gdGhlIG5ldyByZW5kZXJlci4KKyAgICAgICAgd2hpbGUgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBmaXJzdExldHRlci0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgICAg
ICBpZiAoaXM8UmVuZGVyVGV4dD4oKmNoaWxkKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxS
ZW5kZXJUZXh0PigqY2hpbGQpLnJlbW92ZUFuZERlc3Ryb3lUZXh0Qm94ZXMoKTsKKyAgICAgICAg
ICAgIGF1dG8gdG9Nb3ZlID0gZmlyc3RMZXR0ZXItPnRha2VDaGlsZCgqY2hpbGQpOworICAgICAg
ICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoKm5ld0ZpcnN0
TGV0dGVyLCBXVEZNb3ZlKHRvTW92ZSkpOworICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBuZXh0U2libGluZyA9IGZpcnN0TGV0dGVyLT5uZXh0U2libGluZygpOworICAgICAgICBp
ZiAoUmVuZGVyVGV4dEZyYWdtZW50KiByZW1haW5pbmdUZXh0ID0gZG93bmNhc3Q8UmVuZGVyQm94
TW9kZWxPYmplY3Q+KCpmaXJzdExldHRlcikuZmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChyZW1haW5pbmdUZXh0LT5pc0Fub255bW91cygpIHx8IHJlbWFp
bmluZ1RleHQtPnRleHROb2RlKCktPnJlbmRlcmVyKCkgPT0gcmVtYWluaW5nVGV4dCk7CisgICAg
ICAgICAgICAvLyBSZXBsYWNlIHRoZSBvbGQgcmVuZGVyZXIgd2l0aCB0aGUgbmV3IG9uZS4KKyAg
ICAgICAgICAgIHJlbWFpbmluZ1RleHQtPnNldEZpcnN0TGV0dGVyKCpuZXdGaXJzdExldHRlcik7
CisgICAgICAgICAgICBuZXdGaXJzdExldHRlci0+c2V0Rmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0
KCpyZW1haW5pbmdUZXh0KTsKKyAgICAgICAgfQorICAgICAgICBmaXJzdExldHRlckNvbnRhaW5l
ci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKCpmaXJzdExldHRlcik7CisgICAgICAgIFJlbmRlclRy
ZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKCpmaXJzdExldHRlckNvbnRhaW5lciwg
V1RGTW92ZShuZXdGaXJzdExldHRlciksIG5leHRTaWJsaW5nKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZmlyc3RMZXR0ZXItPnNldFN0eWxlKFdURk1vdmUocHNldWRvU3R5bGUpKTsKK30KKworc3Rh
dGljIHZvaWQgY3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihSZW5kZXJCbG9jayYgZmlyc3RMZXR0
ZXJCbG9jaywgUmVuZGVyVGV4dCYgY3VycmVudFRleHRDaGlsZCkKK3sKKyAgICBSZW5kZXJFbGVt
ZW50KiBmaXJzdExldHRlckNvbnRhaW5lciA9IGN1cnJlbnRUZXh0Q2hpbGQucGFyZW50KCk7Cisg
ICAgYXV0byBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9j
aywgKmZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQm94TW9kZWxP
YmplY3Q+IG5ld0ZpcnN0TGV0dGVyOworICAgIGlmIChwc2V1ZG9TdHlsZS5kaXNwbGF5KCkgPT0g
SU5MSU5FKQorICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlcklu
bGluZT4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7
CisgICAgZWxzZQorICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRl
ckJsb2NrRmxvdz4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0
eWxlKSk7CisgICAgbmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIG5ld0Zp
cnN0TGV0dGVyLT5zZXRJc0ZpcnN0TGV0dGVyKCk7CisKKyAgICBhdXRvJiBmaXJzdExldHRlciA9
ICpuZXdGaXJzdExldHRlcjsKKyAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNl
cnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250YWluZXIsIFdURk1vdmUobmV3Rmlyc3RMZXR0ZXIpLCAm
Y3VycmVudFRleHRDaGlsZCk7CisKKyAgICAvLyBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIGdvaW5n
IHRvIGJlIGVpdGhlciBhIGdlbmVyYXRlZCBjb250ZW50IHN0cmluZyBvciBhIERPTSBub2RlJ3MK
KyAgICAvLyBzdHJpbmcuIFdlIHdhbnQgdGhlIG9yaWdpbmFsIHN0cmluZyBiZWZvcmUgaXQgZ290
IHRyYW5zZm9ybWVkIGluIGNhc2UgZmlyc3QtbGV0dGVyIGhhcworICAgIC8vIG5vIHRleHQtdHJh
bnNmb3JtIG9yIGEgZGlmZmVyZW50IHRleHQtdHJhbnNmb3JtIGFwcGxpZWQgdG8gaXQuCisgICAg
U3RyaW5nIG9sZFRleHQgPSBjdXJyZW50VGV4dENoaWxkLm9yaWdpbmFsVGV4dCgpOworICAgIEFT
U0VSVCghb2xkVGV4dC5pc051bGwoKSk7CisKKyAgICBpZiAoIW9sZFRleHQuaXNFbXB0eSgpKSB7
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisKKyAgICAgICAgLy8gQWNjb3VudCBmb3Ig
bGVhZGluZyBzcGFjZXMgYW5kIHB1bmN0dWF0aW9uLgorICAgICAgICB3aGlsZSAobGVuZ3RoIDwg
b2xkVGV4dC5sZW5ndGgoKSAmJiBzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIob2xkVGV4dFtsZW5n
dGhdKSkKKyAgICAgICAgICAgIGxlbmd0aCsrOworCisgICAgICAgIC8vIEFjY291bnQgZm9yIGZp
cnN0IGdyYXBoZW1lIGNsdXN0ZXIuCisgICAgICAgIGxlbmd0aCArPSBudW1DaGFyYWN0ZXJzSW5H
cmFwaGVtZUNsdXN0ZXJzKFN0cmluZ1ZpZXcob2xkVGV4dCkuc3Vic3RyaW5nKGxlbmd0aCksIDEp
OworCisgICAgICAgIC8vIEtlZXAgbG9va2luZyBmb3Igd2hpdGVzcGFjZSBhbmQgYWxsb3dlZCBw
dW5jdHVhdGlvbiwgYnV0IGF2b2lkCisgICAgICAgIC8vIGFjY3VtdWxhdGluZyBqdXN0IHdoaXRl
c3BhY2UgaW50byB0aGUgOmZpcnN0LWxldHRlci4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBzY2Fu
TGVuZ3RoID0gbGVuZ3RoOyBzY2FuTGVuZ3RoIDwgb2xkVGV4dC5sZW5ndGgoKTsgKytzY2FuTGVu
Z3RoKSB7CisgICAgICAgICAgICBVQ2hhciBjID0gb2xkVGV4dFtzY2FuTGVuZ3RoXTsKKworICAg
ICAgICAgICAgaWYgKCFzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIoYykpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmIChpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIo
YykpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gc2Nhbkxlbmd0aCArIDE7CisgICAgICAgIH0K
KworICAgICAgICBhdXRvKiB0ZXh0Tm9kZSA9IGN1cnJlbnRUZXh0Q2hpbGQudGV4dE5vZGUoKTsK
KyAgICAgICAgYXV0byogYmVmb3JlQ2hpbGQgPSBjdXJyZW50VGV4dENoaWxkLm5leHRTaWJsaW5n
KCk7CisgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5yZW1vdmVBbmREZXN0cm95Q2hpbGQo
Y3VycmVudFRleHRDaGlsZCk7CisKKyAgICAgICAgLy8gQ29uc3RydWN0IGEgdGV4dCBmcmFnbWVu
dCBmb3IgdGhlIHRleHQgYWZ0ZXIgdGhlIGZpcnN0IGxldHRlci4KKyAgICAgICAgLy8gVGhpcyB0
ZXh0IGZyYWdtZW50IG1pZ2h0IGJlIGVtcHR5LgorICAgICAgICBSZW5kZXJQdHI8UmVuZGVyVGV4
dEZyYWdtZW50PiBuZXdSZW1haW5pbmdUZXh0OworICAgICAgICBpZiAodGV4dE5vZGUpIHsKKyAg
ICAgICAgICAgIG5ld1JlbWFpbmluZ1RleHQgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJh
Z21lbnQ+KCp0ZXh0Tm9kZSwgb2xkVGV4dCwgbGVuZ3RoLCBvbGRUZXh0Lmxlbmd0aCgpIC0gbGVu
Z3RoKTsKKyAgICAgICAgICAgIHRleHROb2RlLT5zZXRSZW5kZXJlcihuZXdSZW1haW5pbmdUZXh0
LmdldCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3Vt
ZW50KCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7CisKKyAg
ICAgICAgUmVuZGVyVGV4dEZyYWdtZW50JiByZW1haW5pbmdUZXh0ID0gKm5ld1JlbWFpbmluZ1Rl
eHQ7CisgICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKCpm
aXJzdExldHRlckNvbnRhaW5lciwgV1RGTW92ZShuZXdSZW1haW5pbmdUZXh0KSwgYmVmb3JlQ2hp
bGQpOworICAgICAgICByZW1haW5pbmdUZXh0LnNldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyKTsK
KyAgICAgICAgZmlyc3RMZXR0ZXIuc2V0Rmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KHJlbWFpbmlu
Z1RleHQpOworCisgICAgICAgIC8vIGNvbnN0cnVjdCB0ZXh0IGZyYWdtZW50IGZvciB0aGUgZmly
c3QgbGV0dGVyCisgICAgICAgIGF1dG8gbGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4
dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRleHQsIDAsIGxlbmd0
aCk7CisKKyAgICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQo
Zmlyc3RMZXR0ZXIsIFdURk1vdmUobGV0dGVyKSk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBz
dXBwb3J0c0ZpcnN0TGV0dGVyKFJlbmRlckJsb2NrJiBibG9jaykKK3sKKyAgICBpZiAoaXM8UmVu
ZGVyQnV0dG9uPihibG9jaykpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghaXM8UmVu
ZGVyQmxvY2tGbG93PihibG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXM8
UmVuZGVyU1ZHVGV4dD4oYmxvY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlz
PFJlbmRlclJ1YnlSdW4+KGJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBibG9jay5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKTsKK30KKwordm9pZCBSZW5kZXJUcmVl
VXBkYXRlcjo6Rmlyc3RMZXR0ZXI6OnVwZGF0ZShSZW5kZXJCbG9jayYgYmxvY2spCit7CisgICAg
aWYgKCFibG9jay5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXN1cHBvcnRzRmlyc3RMZXR0ZXIoYmxvY2spKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZCwgZmlyc3RM
ZXR0ZXJDb250YWluZXIgaXMgbm90IG5lZWRlZC4KKyAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0
dGVyUmVuZGVyZXI7CisgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXI7Cisg
ICAgYmxvY2suZ2V0Rmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJSZW5kZXJlciwgZmlyc3RMZXR0ZXJD
b250YWluZXIpOworCisgICAgaWYgKCFmaXJzdExldHRlclJlbmRlcmVyKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBPdGhlciBjb250YWluZXJzIGFyZSBoYW5kbGVkIHdoZW4gdXBkYXRpbmcg
dGhlaXIgcmVuZGVyZXJzLgorICAgIGlmICgmYmxvY2sgIT0gZmlyc3RMZXR0ZXJDb250YWluZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBjaGlsZCBhbHJlYWR5IGhhcyBzdHls
ZSwgdGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsIHNvIHdlIGp1c3Qgd2FudAorICAg
IC8vIHRvIHVwZGF0ZSBpdC4KKyAgICBpZiAoZmlyc3RMZXR0ZXJSZW5kZXJlci0+cGFyZW50KCkt
PnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7CisgICAgICAgIHVwZGF0ZUZp
cnN0TGV0dGVyU3R5bGUoYmxvY2ssICpmaXJzdExldHRlclJlbmRlcmVyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghaXM8UmVuZGVyVGV4dD4oZmlyc3RMZXR0ZXJSZW5kZXJl
cikpCisgICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoYmxv
Y2ssIGRvd25jYXN0PFJlbmRlclRleHQ+KCpmaXJzdExldHRlclJlbmRlcmVyKSk7Cit9CisKK307
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXJGaXJzdExldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3BwCShyZXZpc2lvbiAyMjYx
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXJGaXJzdExldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExl
dHRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaCIKIAogI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKQEAgLTEwMSw3
ICsxMDEsNTcgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZFNraXBGb3JGaXJzdExldAogICAg
IHJldHVybiBpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlIHx8IGlzUHVu
Y3R1YXRpb25Gb3JGaXJzdExldHRlcihjKTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlRmlyc3RM
ZXR0ZXJTdHlsZShSZW5kZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0JiBj
dXJyZW50Q2hpbGQpCitzdGF0aWMgYm9vbCBzdXBwb3J0c0ZpcnN0TGV0dGVyKFJlbmRlckJsb2Nr
JiBibG9jaykKK3sKKyAgICBpZiAoaXM8UmVuZGVyQnV0dG9uPihibG9jaykpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93PihibG9jaykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXM8UmVuZGVyU1ZHVGV4dD4oYmxvY2spKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzPFJlbmRlclJ1YnlSdW4+KGJsb2NrKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBibG9jay5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRy
ZW4oKTsKK30KKworUmVuZGVyVHJlZUJ1aWxkZXI6OkZpcnN0TGV0dGVyOjpGaXJzdExldHRlcihS
ZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlcikKKyAgICA6IG1fYnVpbGRlcihidWlsZGVyKQorewor
fQorCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpGaXJzdExldHRlcjo6dXBkYXRlQWZ0ZXJEZXNj
ZW5kYW50cyhSZW5kZXJCbG9jayYgYmxvY2spCit7CisgICAgaWYgKCFibG9jay5zdHlsZSgpLmhh
c1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN1
cHBvcnRzRmlyc3RMZXR0ZXIoYmxvY2spKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZCwgZmlyc3RMZXR0ZXJDb250YWluZXIgaXMgbm90
IG5lZWRlZC4KKyAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyUmVuZGVyZXI7CisgICAgUmVu
ZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXI7CisgICAgYmxvY2suZ2V0Rmlyc3RMZXR0
ZXIoZmlyc3RMZXR0ZXJSZW5kZXJlciwgZmlyc3RMZXR0ZXJDb250YWluZXIpOworCisgICAgaWYg
KCFmaXJzdExldHRlclJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdGhlciBj
b250YWluZXJzIGFyZSBoYW5kbGVkIHdoZW4gdXBkYXRpbmcgdGhlaXIgcmVuZGVyZXJzLgorICAg
IGlmICgmYmxvY2sgIT0gZmlyc3RMZXR0ZXJDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIElmIHRoZSBjaGlsZCBhbHJlYWR5IGhhcyBzdHlsZSwgdGhlbiBpdCBoYXMgYWxyZWFk
eSBiZWVuIGNyZWF0ZWQsIHNvIHdlIGp1c3Qgd2FudAorICAgIC8vIHRvIHVwZGF0ZSBpdC4KKyAg
ICBpZiAoZmlyc3RMZXR0ZXJSZW5kZXJlci0+cGFyZW50KCktPnN0eWxlKCkuc3R5bGVUeXBlKCkg
PT0gRklSU1RfTEVUVEVSKSB7CisgICAgICAgIHVwZGF0ZVN0eWxlKGJsb2NrLCAqZmlyc3RMZXR0
ZXJSZW5kZXJlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzPFJlbmRl
clRleHQ+KGZpcnN0TGV0dGVyUmVuZGVyZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVh
dGVSZW5kZXJlcnMoYmxvY2ssIGRvd25jYXN0PFJlbmRlclRleHQ+KCpmaXJzdExldHRlclJlbmRl
cmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OkZpcnN0TGV0dGVyOjp1cGRhdGVT
dHlsZShSZW5kZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0JiBjdXJyZW50
Q2hpbGQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXIgPSBjdXJyZW50Q2hpbGQu
cGFyZW50KCk7CiAgICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0ZpcnN0TGV0dGVyKCkpOwpAQCAt
MTI1LDcgKzE3NSw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUoUmVuZGUK
ICAgICAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqY2hpbGQpKQogICAgICAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlclRleHQ+KCpjaGlsZCkucmVtb3ZlQW5kRGVzdHJveVRleHRCb3hlcygp
OwogICAgICAgICAgICAgYXV0byB0b01vdmUgPSBmaXJzdExldHRlci0+dGFrZUNoaWxkKCpjaGls
ZCk7Ci0gICAgICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGls
ZCgqbmV3Rmlyc3RMZXR0ZXIsIFdURk1vdmUodG9Nb3ZlKSk7CisgICAgICAgICAgICBtX2J1aWxk
ZXIuaW5zZXJ0Q2hpbGQoKm5ld0ZpcnN0TGV0dGVyLCBXVEZNb3ZlKHRvTW92ZSkpOwogICAgICAg
ICB9CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGZpcnN0TGV0dGVyLT5u
ZXh0U2libGluZygpOwpAQCAtMTM2LDEyICsxODYsMTQgQEAgc3RhdGljIHZvaWQgdXBkYXRlRmly
c3RMZXR0ZXJTdHlsZShSZW5kZQogICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXItPnNldEZpcnN0
TGV0dGVyUmVtYWluaW5nVGV4dCgqcmVtYWluaW5nVGV4dCk7CiAgICAgICAgIH0KICAgICAgICAg
Zmlyc3RMZXR0ZXJDb250YWluZXItPnJlbW92ZUFuZERlc3Ryb3lDaGlsZCgqZmlyc3RMZXR0ZXIp
OwotICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqZmly
c3RMZXR0ZXJDb250YWluZXIsIFdURk1vdmUobmV3Rmlyc3RMZXR0ZXIpLCBuZXh0U2libGluZyk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGZpcnN0TGV0dGVyLT5zZXRTdHlsZShXVEZNb3ZlKHBzZXVk
b1N0eWxlKSk7CisgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250
YWluZXIsIFdURk1vdmUobmV3Rmlyc3RMZXR0ZXIpLCBuZXh0U2libGluZyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmaXJzdExldHRlci0+c2V0U3R5bGUoV1RGTW92ZShwc2V1ZG9T
dHlsZSkpOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKFJlbmRl
ckJsb2NrJiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJUZXh0JiBjdXJyZW50VGV4dENoaWxkKQor
dm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0ZXI6OmNyZWF0ZVJlbmRlcmVycyhSZW5k
ZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyVGV4dCYgY3VycmVudFRleHRDaGlsZCkK
IHsKICAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRhaW5lciA9IGN1cnJlbnRUZXh0
Q2hpbGQucGFyZW50KCk7CiAgICAgYXV0byBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0
ZXIoZmlyc3RMZXR0ZXJCbG9jaywgKmZpcnN0TGV0dGVyQ29udGFpbmVyKTsKQEAgLTE1NCw3ICsy
MDYsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKFJlCiAgICAgbmV3
Rmlyc3RMZXR0ZXItPnNldElzRmlyc3RMZXR0ZXIoKTsKIAogICAgIGF1dG8mIGZpcnN0TGV0dGVy
ID0gKm5ld0ZpcnN0TGV0dGVyOwotICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmlu
c2VydENoaWxkKCpmaXJzdExldHRlckNvbnRhaW5lciwgV1RGTW92ZShuZXdGaXJzdExldHRlciks
ICZjdXJyZW50VGV4dENoaWxkKTsKKyAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQoKmZpcnN0TGV0
dGVyQ29udGFpbmVyLCBXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgJmN1cnJlbnRUZXh0Q2hpbGQp
OwogCiAgICAgLy8gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyBnb2luZyB0byBiZSBlaXRoZXIgYSBn
ZW5lcmF0ZWQgY29udGVudCBzdHJpbmcgb3IgYSBET00gbm9kZSdzCiAgICAgLy8gc3RyaW5nLiBX
ZSB3YW50IHRoZSBvcmlnaW5hbCBzdHJpbmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1lZCBpbiBj
YXNlIGZpcnN0LWxldHRlciBoYXMKQEAgLTE5OCw2MCArMjUwLDE1IEBAIHN0YXRpYyB2b2lkIGNy
ZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoUmUKICAgICAgICAgICAgIG5ld1JlbWFpbmluZ1RleHQg
PSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KGZpcnN0TGV0dGVyQmxvY2suZG9j
dW1lbnQoKSwgb2xkVGV4dCwgbGVuZ3RoLCBvbGRUZXh0Lmxlbmd0aCgpIC0gbGVuZ3RoKTsKIAog
ICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQmIHJlbWFpbmluZ1RleHQgPSAqbmV3UmVtYWluaW5n
VGV4dDsKLSAgICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQo
KmZpcnN0TGV0dGVyQ29udGFpbmVyLCBXVEZNb3ZlKG5ld1JlbWFpbmluZ1RleHQpLCBiZWZvcmVD
aGlsZCk7CisgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250YWlu
ZXIsIFdURk1vdmUobmV3UmVtYWluaW5nVGV4dCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmVt
YWluaW5nVGV4dC5zZXRGaXJzdExldHRlcihmaXJzdExldHRlcik7CiAgICAgICAgIGZpcnN0TGV0
dGVyLnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsKIAogICAgICAg
ICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3IgdGhlIGZpcnN0IGxldHRlcgogICAgICAg
ICBhdXRvIGxldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRGcmFnbWVudD4oZmlyc3RM
ZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOwogCi0gICAgICAgIFJl
bmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKGZpcnN0TGV0dGVyLCBXVEZN
b3ZlKGxldHRlcikpOworICAgICAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQoZmlyc3RMZXR0ZXIs
IFdURk1vdmUobGV0dGVyKSk7CiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBzdXBwb3J0c0ZpcnN0
TGV0dGVyKFJlbmRlckJsb2NrJiBibG9jaykKLXsKLSAgICBpZiAoaXM8UmVuZGVyQnV0dG9uPihi
bG9jaykpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93
PihibG9jaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaXM8UmVuZGVyU1ZHVGV4
dD4oYmxvY2spKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlzPFJlbmRlclJ1YnlS
dW4+KGJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBibG9jay5jYW5I
YXZlR2VuZXJhdGVkQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6Rmly
c3RMZXR0ZXI6OnVwZGF0ZShSZW5kZXJCbG9jayYgYmxvY2spCi17Ci0gICAgaWYgKCFibG9jay5z
dHlsZSgpLmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXN1cHBvcnRzRmlyc3RMZXR0ZXIoYmxvY2spKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZCwgZmlyc3RMZXR0ZXJDb250YWlu
ZXIgaXMgbm90IG5lZWRlZC4KLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyUmVuZGVyZXI7
Ci0gICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXI7Ci0gICAgYmxvY2suZ2V0
Rmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJSZW5kZXJlciwgZmlyc3RMZXR0ZXJDb250YWluZXIpOwot
Ci0gICAgaWYgKCFmaXJzdExldHRlclJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBPdGhlciBjb250YWluZXJzIGFyZSBoYW5kbGVkIHdoZW4gdXBkYXRpbmcgdGhlaXIgcmVuZGVy
ZXJzLgotICAgIGlmICgmYmxvY2sgIT0gZmlyc3RMZXR0ZXJDb250YWluZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIElmIHRoZSBjaGlsZCBhbHJlYWR5IGhhcyBzdHlsZSwgdGhlbiBpdCBo
YXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsIHNvIHdlIGp1c3Qgd2FudAotICAgIC8vIHRvIHVwZGF0
ZSBpdC4KLSAgICBpZiAoZmlyc3RMZXR0ZXJSZW5kZXJlci0+cGFyZW50KCktPnN0eWxlKCkuc3R5
bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7Ci0gICAgICAgIHVwZGF0ZUZpcnN0TGV0dGVyU3R5
bGUoYmxvY2ssICpmaXJzdExldHRlclJlbmRlcmVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghaXM8UmVuZGVyVGV4dD4oZmlyc3RMZXR0ZXJSZW5kZXJlcikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoYmxvY2ssIGRvd25jYXN0
PFJlbmRlclRleHQ+KCpmaXJzdExldHRlclJlbmRlcmVyKSk7Ci19Ci0KIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmgJKHJldmlzaW9uIDIyNjEzNSkJKGZyb20gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIu
aDoyMjYxMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZUJ1aWxkZXJGaXJzdExldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyQmxvY2s7CisKK2NsYXNzIFJl
bmRlclRyZWVVcGRhdGVyOjpGaXJzdExldHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQg
dXBkYXRlKFJlbmRlckJsb2NrJik7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckZp
cnN0TGV0dGVyLmgJKHJldmlzaW9uIDIyNjEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDE1ICsyNSwyMyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlJlbmRlclRy
ZWVVcGRhdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJCbG9jazsKK2NsYXNzIFJlbmRlckVsZW1lbnQ7CiAK
LWNsYXNzIFJlbmRlclRyZWVVcGRhdGVyOjpGaXJzdExldHRlciB7CitjbGFzcyBSZW5kZXJUcmVl
QnVpbGRlcjo6Rmlyc3RMZXR0ZXIgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZShS
ZW5kZXJCbG9jayYpOworICAgIEZpcnN0TGV0dGVyKFJlbmRlclRyZWVCdWlsZGVyJik7CisKKyAg
ICB2b2lkIHVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoUmVuZGVyQmxvY2smKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIHVwZGF0ZVN0eWxlKFJlbmRlckJsb2NrJiBmaXJzdExldHRlckJsb2NrLCBSZW5k
ZXJPYmplY3QmIGN1cnJlbnRDaGlsZCk7CisgICAgdm9pZCBjcmVhdGVSZW5kZXJlcnMoUmVuZGVy
QmxvY2smIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlclRleHQmIGN1cnJlbnRUZXh0Q2hpbGQpOwor
CisgICAgUmVuZGVyVHJlZUJ1aWxkZXImIG1fYnVpbGRlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRh
dGVyLmNwcAkocmV2aXNpb24gMjI2MTM1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQAogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJJbmxp
bmUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVV
cGRhdGVyRmlyc3RMZXR0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0
dGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlclRy
ZWVVcGRhdGVyTXVsdGlDb2x1bW4uaCIKQEAgLTI3MSw5ICsyNzEsOSBAQCB2b2lkIFJlbmRlclRy
ZWVVcGRhdGVyOjp1cGRhdGVBZnRlckRlc2NlCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
cmV0dXJuOwogCisgICAgbV9idWlsZGVyLnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKnJlbmRlcmVy
KTsKKwogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBkbyByZW5kZXIgdHJlZSBtdXRhdGlvbnMgdGhh
dCByZXF1aXJlIGRlc2NlbmRhbnQgcmVuZGVyZXJzLgotICAgIGlmIChpczxSZW5kZXJCbG9jaz4o
KnJlbmRlcmVyKSkKLSAgICAgICAgRmlyc3RMZXR0ZXI6OnVwZGF0ZShkb3duY2FzdDxSZW5kZXJC
bG9jaz4oKnJlbmRlcmVyKSk7CiAgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPigqcmVuZGVyZXIp
KQogICAgICAgICBMaXN0SXRlbTo6dXBkYXRlTWFya2VyKG1fYnVpbGRlciwgZG93bmNhc3Q8UmVu
ZGVyTGlzdEl0ZW0+KCpyZW5kZXJlcikpOwogICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpy
ZW5kZXJlcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZVVwZGF0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBk
YXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuaAkocmV2aXNpb24gMjI2MTM1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duUmVu
ZGVyZXJzKEVsZW1lbnQmKTsKICAgICBzdGF0aWMgdm9pZCB0ZWFyRG93blJlbmRlcmVyKFRleHQm
KTsKIAotICAgIGNsYXNzIEZpcnN0TGV0dGVyOwogICAgIGNsYXNzIExpc3RJdGVtOwogCiBwcml2
YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVV
cGRhdGVyRmlyc3RMZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcAkocmV2aXNpb24g
MjI2MTM1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVV
cGRhdGVyRmlyc3RMZXR0ZXIuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjU3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAg
ICAgICAgICAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQotICog
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTEsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVy
VHJlZVVwZGF0ZXJGaXJzdExldHRlci5oIgotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNp
bmNsdWRlICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgotI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlclJ1YnlSdW4uaCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdUZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJUYWJsZS5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgotI2luY2x1ZGUg
IlJlbmRlclRyZWVCdWlsZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJl
bmRlclN0eWxlIHN0eWxlRm9yRmlyc3RMZXR0ZXIoY29uc3QgUmVuZGVyQmxvY2smIGZpcnN0TGV0
dGVyQmxvY2ssIGNvbnN0IFJlbmRlck9iamVjdCYgZmlyc3RMZXR0ZXJDb250YWluZXIpCi17Ci0g
ICAgYXV0byogY29udGFpbmVyRmlyc3RMZXR0ZXJTdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2suZ2V0
Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSLCAmZmlyc3RMZXR0ZXJDb250YWluZXIuZmly
c3RMaW5lU3R5bGUoKSk7Ci0gICAgLy8gRklYTUU6IFRoZXJlIGFwcGVhcnMgdG8gYmUgc29tZSBw
YXRoIHdoZXJlIHdlIGhhdmUgYSBmaXJzdCBsZXR0ZXIgcmVuZGVyZXIgd2l0aG91dCBmaXJzdCBs
ZXR0ZXIgc3R5bGUuCi0gICAgQVNTRVJUKGNvbnRhaW5lckZpcnN0TGV0dGVyU3R5bGUpOwotICAg
IGF1dG8gZmlyc3RMZXR0ZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShjb250YWluZXJGaXJz
dExldHRlclN0eWxlID8gKmNvbnRhaW5lckZpcnN0TGV0dGVyU3R5bGUgOiBmaXJzdExldHRlckNv
bnRhaW5lci5maXJzdExpbmVTdHlsZSgpKTsKLQotICAgIC8vIElmIHdlIGhhdmUgYW4gaW5pdGlh
bCBsZXR0ZXIgZHJvcCB0aGF0IGlzID49IDEsIHRoZW4gd2UgbmVlZCB0byBmb3JjZSBmbG9hdGlu
ZyB0byBiZSBvbi4KLSAgICBpZiAoZmlyc3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0dGVyRHJvcCgp
ID49IDEgJiYgIWZpcnN0TGV0dGVyU3R5bGUuaXNGbG9hdGluZygpKQotICAgICAgICBmaXJzdExl
dHRlclN0eWxlLnNldEZsb2F0aW5nKGZpcnN0TGV0dGVyU3R5bGUuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gTGVmdEZsb2F0IDogUmlnaHRGbG9hdCk7Ci0KLSAgICAvLyBXZSBoYXZlIHRvIGNv
bXB1dGUgdGhlIGNvcnJlY3QgZm9udC1zaXplIGZvciB0aGUgZmlyc3QtbGV0dGVyIGlmIGl0IGhh
cyBhbiBpbml0aWFsIGxldHRlciBoZWlnaHQgc2V0LgotICAgIGF1dG8qIHBhcmFncmFwaCA9IGZp
cnN0TGV0dGVyQ29udGFpbmVyLmlzUmVuZGVyQmxvY2tGbG93KCkgPyAmZmlyc3RMZXR0ZXJDb250
YWluZXIgOiBmaXJzdExldHRlckNvbnRhaW5lci5jb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAo
Zmlyc3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0dGVySGVpZ2h0KCkgPj0gMSAmJiBmaXJzdExldHRl
clN0eWxlLmZvbnRNZXRyaWNzKCkuaGFzQ2FwSGVpZ2h0KCkgJiYgcGFyYWdyYXBoLT5zdHlsZSgp
LmZvbnRNZXRyaWNzKCkuaGFzQ2FwSGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEZvciBp
ZGVvZ3JhcGhpYyBiYXNlbGluZXMsIHdlIHdhbnQgdG8gZ28gZnJvbSBsaW5lIGVkZ2UgdG8gbGlu
ZSBlZGdlLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKE4tMSkqbGluZS1oZWlnaHQgKyB0aGUgZm9u
dCBoZWlnaHQuCi0gICAgICAgIC8vIFdlIGRvbid0IHlldCBzdXBwb3J0IGlkZW9ncmFwaGljIGJh
c2VsaW5lcy4KLSAgICAgICAgLy8gRm9yIGFuIE4tbGluZSBmaXJzdC1sZXR0ZXIgYW5kIGZvciBh
bHBoYWJldGljIGJhc2VsaW5lcywgdGhlIGNhcC1oZWlnaHQgb2YgdGhlIGZpcnN0IGxldHRlciBu
ZWVkcyB0byBlcXVhbCAoTi0xKSpsaW5lLWhlaWdodCBvZiBwYXJhZ3JhcGggbGluZXMgKyBjYXAt
aGVpZ2h0IG9mIHRoZSBwYXJhZ3JhcGgKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgd2UgY2Fu
J3QgcmVseSBvbiBmb250LXNpemUsIHNpbmNlIGZvbnQoKS5oZWlnaHQoKSBkb2Vzbid0IG5lY2Vz
c2FyaWx5IG1hdGNoLiBGb3IgcmVsaWFiaWxpdHksIHRoZSBiZXN0IGFwcHJvYWNoIGlzIHNpbXBs
eSB0bwotICAgICAgICAvLyBjb21wYXJlIHRoZSBmaW5hbCBtZWFzdXJlZCBjYXAtaGVpZ2h0cyBv
ZiB0aGUgdHdvIGZvbnRzIGluIG9yZGVyIHRvIGdldCB0byB0aGUgY2xvc2VzdCBwb3NzaWJsZSB2
YWx1ZS4KLSAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94
Q29udGFpbkluaXRpYWxMZXR0ZXIpOwotICAgICAgICBpbnQgbGluZUhlaWdodCA9IHBhcmFncmFw
aC0+c3R5bGUoKS5jb21wdXRlZExpbmVIZWlnaHQoKTsKLQotICAgICAgICAvLyBTZXQgdGhlIGZv
bnQgdG8gYmUgb25lIGxpbmUgdG9vIGJpZyBhbmQgdGhlbiByYXRjaGV0IGJhY2sgdG8gZ2V0IHRv
IGEgcHJlY2lzZSBmaXQuIFdlIGNhbid0IGp1c3Qgc2V0IHRoZSBkZXNpcmVkIGZvbnQgc2l6ZSBi
YXNlZCBvZmYgZm9udCBoZWlnaHQgbWV0cmljcwotICAgICAgICAvLyBiZWNhdXNlIG1hbnkgZm9u
dHMgYmFrZSBhc2NlbnQgaW50byB0aGUgZm9udCBtZXRyaWNzLiBUaGVyZWZvcmUgd2UgaGF2ZSB0
byBsb29rIGF0IGFjdHVhbCBtZWFzdXJlZCBjYXAgaGVpZ2h0IHZhbHVlcyBpbiBvcmRlciB0byBr
bm93IHdoZW4gd2UgaGF2ZSBhIGdvb2QgZml0LgotICAgICAgICBhdXRvIG5ld0ZvbnREZXNjcmlw
dGlvbiA9IGZpcnN0TGV0dGVyU3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZsb2F0
IGNhcFJhdGlvID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmZsb2F0Q2FwSGVpZ2h0
KCkgLyBmaXJzdExldHRlclN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpOwotICAgICAgICBm
bG9hdCBzdGFydGluZ0ZvbnRTaXplID0gKChmaXJzdExldHRlclN0eWxlLmluaXRpYWxMZXR0ZXJI
ZWlnaHQoKSAtIDEpICogbGluZUhlaWdodCArIHBhcmFncmFwaC0+c3R5bGUoKS5mb250TWV0cmlj
cygpLmNhcEhlaWdodCgpKSAvIGNhcFJhdGlvOwotICAgICAgICBuZXdGb250RGVzY3JpcHRpb24u
c2V0U3BlY2lmaWVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKLSAgICAgICAgbmV3Rm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKLSAgICAgICAgZmlyc3RM
ZXR0ZXJTdHlsZS5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAg
ICAgZmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmaXJzdExldHRlclN0eWxl
LmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwotCi0gICAgICAgIGludCBkZXNpcmVkQ2Fw
SGVpZ2h0ID0gKGZpcnN0TGV0dGVyU3R5bGUuaW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkgKiBs
aW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7
Ci0gICAgICAgIGludCBhY3R1YWxDYXBIZWlnaHQgPSBmaXJzdExldHRlclN0eWxlLmZvbnRNZXRy
aWNzKCkuY2FwSGVpZ2h0KCk7Ci0gICAgICAgIHdoaWxlIChhY3R1YWxDYXBIZWlnaHQgPiBkZXNp
cmVkQ2FwSGVpZ2h0KSB7Ci0gICAgICAgICAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IGZp
cnN0TGV0dGVyU3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBuZXdGb250RGVz
Y3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6
ZSgpIC0gMSk7Ci0gICAgICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KG5ld0ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAtMSk7Ci0gICAgICAgICAgICBmaXJz
dExldHRlclN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwotICAg
ICAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmaXJzdExldHRl
clN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwotICAgICAgICAgICAgYWN0dWFs
Q2FwSGVpZ2h0ID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRm9yY2UgaW5saW5lIGRpc3BsYXkgKGV4Y2VwdCBm
b3IgZmxvYXRpbmcgZmlyc3QtbGV0dGVycykuCi0gICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXREaXNw
bGF5KGZpcnN0TGV0dGVyU3R5bGUuaXNGbG9hdGluZygpID8gQkxPQ0sgOiBJTkxJTkUpOwotICAg
IC8vIENTUzIgc2F5cyBmaXJzdC1sZXR0ZXIgY2FuJ3QgYmUgcG9zaXRpb25lZC4KLSAgICBmaXJz
dExldHRlclN0eWxlLnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKLSAgICByZXR1cm4gZmly
c3RMZXR0ZXJTdHlsZTsKLX0KLQotLy8gQ1NTIDIuMSBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1My
MS9zZWxlY3Rvci5odG1sI2ZpcnN0LWxldHRlcgotLy8gIlB1bmN0dWF0aW9uIChpLmUsIGNoYXJh
Y3RlcnMgZGVmaW5lZCBpbiBVbmljb2RlIFtVTklDT0RFXSBpbiB0aGUgIm9wZW4iIChQcyksICJj
bG9zZSIgKFBlKSwKLS8vICJpbml0aWFsIiAoUGkpLiAiZmluYWwiIChQZikgYW5kICJvdGhlciIg
KFBvKSBwdW5jdHVhdGlvbiBjbGFzc2VzKSwgdGhhdCBwcmVjZWRlcyBvciBmb2xsb3dzIHRoZSBm
aXJzdCBsZXR0ZXIgc2hvdWxkIGJlIGluY2x1ZGVkIgotc3RhdGljIGlubGluZSBib29sIGlzUHVu
Y3R1YXRpb25Gb3JGaXJzdExldHRlcihVQ2hhciBjKQotewotICAgIHJldHVybiBVX0dFVF9HQ19N
QVNLKGMpICYgKFVfR0NfUFNfTUFTSyB8IFVfR0NfUEVfTUFTSyB8IFVfR0NfUElfTUFTSyB8IFVf
R0NfUEZfTUFTSyB8IFVfR0NfUE9fTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRTa2lwRm9yRmlyc3RMZXR0ZXIoVUNoYXIgYykKLXsKLSAgICByZXR1cm4gaXNTcGFjZU9yTmV3
bGluZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSB8fCBpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0
ZXIoYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUoUmVuZGVyQmxv
Y2smIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlck9iamVjdCYgY3VycmVudENoaWxkKQotewotICAg
IFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyID0gY3VycmVudENoaWxkLnBhcmVudCgpOwotICAg
IEFTU0VSVChmaXJzdExldHRlci0+aXNGaXJzdExldHRlcigpKTsKLQotICAgIFJlbmRlckVsZW1l
bnQqIGZpcnN0TGV0dGVyQ29udGFpbmVyID0gZmlyc3RMZXR0ZXItPnBhcmVudCgpOwotICAgIGF1
dG8gcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssICpm
aXJzdExldHRlckNvbnRhaW5lcik7Ci0gICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0Zsb2F0aW5n
KCkgfHwgZmlyc3RMZXR0ZXItPmlzSW5saW5lKCkpOwotCi0gICAgaWYgKFN0eWxlOjpkZXRlcm1p
bmVDaGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBzZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0
YWNoKSB7Ci0gICAgICAgIC8vIFRoZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgbmVlZHMgdG8gYmUg
cmVwbGFjZWQuIENyZWF0ZSBhIG5ldyByZW5kZXJlciBvZiB0aGUgcmlnaHQgdHlwZS4KLSAgICAg
ICAgUmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBuZXdGaXJzdExldHRlcjsKLSAgICAg
ICAgaWYgKHBzZXVkb1N0eWxlLmRpc3BsYXkoKSA9PSBJTkxJTkUpCi0gICAgICAgICAgICBuZXdG
aXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlcklubGluZT4oZmlyc3RMZXR0ZXJCbG9j
ay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93Pihm
aXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRvU3R5bGUpKTsKLSAgICAg
ICAgbmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgICAgICBuZXdGaXJzdExl
dHRlci0+c2V0SXNGaXJzdExldHRlcigpOwotCi0gICAgICAgIC8vIE1vdmUgdGhlIGZpcnN0IGxl
dHRlciBpbnRvIHRoZSBuZXcgcmVuZGVyZXIuCi0gICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3Qq
IGNoaWxkID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hpbGQoKSkgewotICAgICAgICAgICAgaWYgKGlz
PFJlbmRlclRleHQ+KCpjaGlsZCkpCi0gICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4
dD4oKmNoaWxkKS5yZW1vdmVBbmREZXN0cm95VGV4dEJveGVzKCk7Ci0gICAgICAgICAgICBhdXRv
IHRvTW92ZSA9IGZpcnN0TGV0dGVyLT50YWtlQ2hpbGQoKmNoaWxkKTsKLSAgICAgICAgICAgIFJl
bmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKCpuZXdGaXJzdExldHRlciwg
V1RGTW92ZSh0b01vdmUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlck9iamVjdCogbmV4
dFNpYmxpbmcgPSBmaXJzdExldHRlci0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKFJlbmRl
clRleHRGcmFnbWVudCogcmVtYWluaW5nVGV4dCA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2Jq
ZWN0PigqZmlyc3RMZXR0ZXIpLmZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dCgpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQocmVtYWluaW5nVGV4dC0+aXNBbm9ueW1vdXMoKSB8fCByZW1haW5pbmdUZXh0
LT50ZXh0Tm9kZSgpLT5yZW5kZXJlcigpID09IHJlbWFpbmluZ1RleHQpOwotICAgICAgICAgICAg
Ly8gUmVwbGFjZSB0aGUgb2xkIHJlbmRlcmVyIHdpdGggdGhlIG5ldyBvbmUuCi0gICAgICAgICAg
ICByZW1haW5pbmdUZXh0LT5zZXRGaXJzdExldHRlcigqbmV3Rmlyc3RMZXR0ZXIpOwotICAgICAg
ICAgICAgbmV3Rmlyc3RMZXR0ZXItPnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dCgqcmVtYWlu
aW5nVGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmlyc3RMZXR0ZXJDb250YWluZXItPnJlbW92
ZUFuZERlc3Ryb3lDaGlsZCgqZmlyc3RMZXR0ZXIpOwotICAgICAgICBSZW5kZXJUcmVlQnVpbGRl
cjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250YWluZXIsIFdURk1vdmUo
bmV3Rmlyc3RMZXR0ZXIpLCBuZXh0U2libGluZyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZpcnN0
TGV0dGVyLT5zZXRTdHlsZShXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoUmVuZGVyQmxvY2smIGZpcnN0TGV0dGVyQmxvY2ss
IFJlbmRlclRleHQmIGN1cnJlbnRUZXh0Q2hpbGQpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogZmly
c3RMZXR0ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENoaWxkLnBhcmVudCgpOwotICAgIGF1dG8g
cHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssICpmaXJz
dExldHRlckNvbnRhaW5lcik7Ci0gICAgUmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBu
ZXdGaXJzdExldHRlcjsKLSAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkK
LSAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJJbmxpbmU+KGZp
cnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOwotICAgIGVs
c2UKLSAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zs
b3c+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOwot
ICAgIG5ld0ZpcnN0TGV0dGVyLT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICBuZXdGaXJzdExldHRl
ci0+c2V0SXNGaXJzdExldHRlcigpOwotCi0gICAgYXV0byYgZmlyc3RMZXR0ZXIgPSAqbmV3Rmly
c3RMZXR0ZXI7Ci0gICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQo
KmZpcnN0TGV0dGVyQ29udGFpbmVyLCBXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgJmN1cnJlbnRU
ZXh0Q2hpbGQpOwotCi0gICAgLy8gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyBnb2luZyB0byBiZSBl
aXRoZXIgYSBnZW5lcmF0ZWQgY29udGVudCBzdHJpbmcgb3IgYSBET00gbm9kZSdzCi0gICAgLy8g
c3RyaW5nLiBXZSB3YW50IHRoZSBvcmlnaW5hbCBzdHJpbmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zv
cm1lZCBpbiBjYXNlIGZpcnN0LWxldHRlciBoYXMKLSAgICAvLyBubyB0ZXh0LXRyYW5zZm9ybSBv
ciBhIGRpZmZlcmVudCB0ZXh0LXRyYW5zZm9ybSBhcHBsaWVkIHRvIGl0LgotICAgIFN0cmluZyBv
bGRUZXh0ID0gY3VycmVudFRleHRDaGlsZC5vcmlnaW5hbFRleHQoKTsKLSAgICBBU1NFUlQoIW9s
ZFRleHQuaXNOdWxsKCkpOwotCi0gICAgaWYgKCFvbGRUZXh0LmlzRW1wdHkoKSkgewotICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSAwOwotCi0gICAgICAgIC8vIEFjY291bnQgZm9yIGxlYWRpbmcg
c3BhY2VzIGFuZCBwdW5jdHVhdGlvbi4KLSAgICAgICAgd2hpbGUgKGxlbmd0aCA8IG9sZFRleHQu
bGVuZ3RoKCkgJiYgc2hvdWxkU2tpcEZvckZpcnN0TGV0dGVyKG9sZFRleHRbbGVuZ3RoXSkpCi0g
ICAgICAgICAgICBsZW5ndGgrKzsKLQotICAgICAgICAvLyBBY2NvdW50IGZvciBmaXJzdCBncmFw
aGVtZSBjbHVzdGVyLgotICAgICAgICBsZW5ndGggKz0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVD
bHVzdGVycyhTdHJpbmdWaWV3KG9sZFRleHQpLnN1YnN0cmluZyhsZW5ndGgpLCAxKTsKLQotICAg
ICAgICAvLyBLZWVwIGxvb2tpbmcgZm9yIHdoaXRlc3BhY2UgYW5kIGFsbG93ZWQgcHVuY3R1YXRp
b24sIGJ1dCBhdm9pZAotICAgICAgICAvLyBhY2N1bXVsYXRpbmcganVzdCB3aGl0ZXNwYWNlIGlu
dG8gdGhlIDpmaXJzdC1sZXR0ZXIuCi0gICAgICAgIGZvciAodW5zaWduZWQgc2Nhbkxlbmd0aCA9
IGxlbmd0aDsgc2Nhbkxlbmd0aCA8IG9sZFRleHQubGVuZ3RoKCk7ICsrc2Nhbkxlbmd0aCkgewot
ICAgICAgICAgICAgVUNoYXIgYyA9IG9sZFRleHRbc2Nhbkxlbmd0aF07Ci0KLSAgICAgICAgICAg
IGlmICghc2hvdWxkU2tpcEZvckZpcnN0TGV0dGVyKGMpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICBpZiAoaXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKGMpKQotICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IHNjYW5MZW5ndGggKyAxOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYXV0byogdGV4dE5vZGUgPSBjdXJyZW50VGV4dENoaWxkLnRleHROb2RlKCk7Ci0gICAgICAg
IGF1dG8qIGJlZm9yZUNoaWxkID0gY3VycmVudFRleHRDaGlsZC5uZXh0U2libGluZygpOwotICAg
ICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKGN1cnJlbnRU
ZXh0Q2hpbGQpOwotCi0gICAgICAgIC8vIENvbnN0cnVjdCBhIHRleHQgZnJhZ21lbnQgZm9yIHRo
ZSB0ZXh0IGFmdGVyIHRoZSBmaXJzdCBsZXR0ZXIuCi0gICAgICAgIC8vIFRoaXMgdGV4dCBmcmFn
bWVudCBtaWdodCBiZSBlbXB0eS4KLSAgICAgICAgUmVuZGVyUHRyPFJlbmRlclRleHRGcmFnbWVu
dD4gbmV3UmVtYWluaW5nVGV4dDsKLSAgICAgICAgaWYgKHRleHROb2RlKSB7Ci0gICAgICAgICAg
ICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50Pigq
dGV4dE5vZGUsIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7Ci0g
ICAgICAgICAgICB0ZXh0Tm9kZS0+c2V0UmVuZGVyZXIobmV3UmVtYWluaW5nVGV4dC5nZXQoKSk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmV3UmVtYWluaW5nVGV4dCA9IGNyZWF0ZVJl
bmRlcmVyPFJlbmRlclRleHRGcmFnbWVudD4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBv
bGRUZXh0LCBsZW5ndGgsIG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOwotCi0gICAgICAgIFJl
bmRlclRleHRGcmFnbWVudCYgcmVtYWluaW5nVGV4dCA9ICpuZXdSZW1haW5pbmdUZXh0OwotICAg
ICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0
ZXJDb250YWluZXIsIFdURk1vdmUobmV3UmVtYWluaW5nVGV4dCksIGJlZm9yZUNoaWxkKTsKLSAg
ICAgICAgcmVtYWluaW5nVGV4dC5zZXRGaXJzdExldHRlcihmaXJzdExldHRlcik7Ci0gICAgICAg
IGZpcnN0TGV0dGVyLnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsK
LQotICAgICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3IgdGhlIGZpcnN0IGxldHRl
cgotICAgICAgICBhdXRvIGxldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRGcmFnbWVu
dD4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOwotCi0g
ICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKGZpcnN0TGV0
dGVyLCBXVEZNb3ZlKGxldHRlcikpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgc3VwcG9ydHNG
aXJzdExldHRlcihSZW5kZXJCbG9jayYgYmxvY2spCi17Ci0gICAgaWYgKGlzPFJlbmRlckJ1dHRv
bj4oYmxvY2spKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIWlzPFJlbmRlckJsb2Nr
Rmxvdz4oYmxvY2spKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlzPFJlbmRlclNW
R1RleHQ+KGJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpczxSZW5kZXJS
dWJ5UnVuPihibG9jaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYmxvY2su
Y2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6
OkZpcnN0TGV0dGVyOjp1cGRhdGUoUmVuZGVyQmxvY2smIGJsb2NrKQotewotICAgIGlmICghYmxv
Y2suc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFzdXBwb3J0c0ZpcnN0TGV0dGVyKGJsb2NrKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQsIGZpcnN0TGV0dGVyQ29u
dGFpbmVyIGlzIG5vdCBuZWVkZWQuCi0gICAgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlclJlbmRl
cmVyOwotICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29udGFpbmVyOwotICAgIGJsb2Nr
LmdldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyUmVuZGVyZXIsIGZpcnN0TGV0dGVyQ29udGFpbmVy
KTsKLQotICAgIGlmICghZmlyc3RMZXR0ZXJSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gT3RoZXIgY29udGFpbmVycyBhcmUgaGFuZGxlZCB3aGVuIHVwZGF0aW5nIHRoZWlyIHJl
bmRlcmVycy4KLSAgICBpZiAoJmJsb2NrICE9IGZpcnN0TGV0dGVyQ29udGFpbmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgY2hpbGQgYWxyZWFkeSBoYXMgc3R5bGUsIHRoZW4g
aXQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLCBzbyB3ZSBqdXN0IHdhbnQKLSAgICAvLyB0byB1
cGRhdGUgaXQuCi0gICAgaWYgKGZpcnN0TGV0dGVyUmVuZGVyZXItPnBhcmVudCgpLT5zdHlsZSgp
LnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUikgewotICAgICAgICB1cGRhdGVGaXJzdExldHRl
clN0eWxlKGJsb2NrLCAqZmlyc3RMZXR0ZXJSZW5kZXJlcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIWlzPFJlbmRlclRleHQ+KGZpcnN0TGV0dGVyUmVuZGVyZXIpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKGJsb2NrLCBkb3du
Y2FzdDxSZW5kZXJUZXh0PigqZmlyc3RMZXR0ZXJSZW5kZXJlcikpOwotfQotCi19OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RM
ZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oCShyZXZpc2lvbiAyMjYxMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRl
ci5oCShub25leGlzdGVudCkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBSZW5kZXJCbG9jazsKLQotY2xhc3MgUmVuZGVyVHJlZVVwZGF0ZXI6OkZp
cnN0TGV0dGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGUoUmVuZGVyQmxvY2sm
KTsKLX07Ci0KLX0K
</data>
<flag name="review"
          id="348835"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329809</attachid>
            <date>2017-12-19 13:47:48 -0800</date>
            <delta_ts>2017-12-19 15:18:22 -0800</delta_ts>
            <desc>patch</desc>
            <filename>rtb-updateafterdescendants-4.patch</filename>
            <type>text/plain</type>
            <size>53760</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNjEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE3LTEyLTE5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGZpcnN0LWxldHRlciBi
dWlsZGluZyBjb2RlIHRvIFJlbmRlclRyZWVCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTIKKworICAgICAgICBSZXZpZXdlZCBieSBa
YWxhbiBCdWp0YXMuCisKKyAgICAgICAgQWxsIHNwZWNpYWwgY2FzZSB0cmVlIGJ1aWxkaW5nIGxv
Z2ljIHNob3VsZCBnbyB0byBSZW5kZXJUcmVlQnVpbGRlci4KKworICAgICAgICAtIFJlbmRlclRy
ZWVVcGRhdGVyOjpGaXJzdExldHRlciAtPiBSZW5kZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0ZXIK
KyAgICAgICAgLSBNYWtlIHRoZSBidWlsZGVyIG5vbi1zdGF0aWMgYW5kIHN0b3AgdXNpbmcgUmVu
ZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKSB0aGVyZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiByZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9TaXppbmdWYWx1ZTo6YWRqdXN0VGV4dE5vZGVTaXplcyk6CisgICAgICAgICogcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVCdWlsZGVyOjpSZW5kZXJUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJl
ZUJ1aWxkZXI6OnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMpOgorICAgICAgICAqIHJlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJl
ZUJ1aWxkZXI6OmZpcnN0TGV0dGVyQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
cmVlQnVpbGRlcjo6dGFibGVCdWlsZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5jcHA6IENvcGllZCBmcm9tIHJlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OnN1cHBvcnRzRmlyc3RMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1
aWxkZXI6OkZpcnN0TGV0dGVyOjpGaXJzdExldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0ZXI6OnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OkZpcnN0TGV0dGVyOjp1cGRhdGVTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0ZXI6OmNy
ZWF0ZVJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVGaXJzdExldHRlclN0eWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OkZpcnN0TGV0
dGVyOjp1cGRhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmg6IENvcGllZCBmcm9tIHJlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmguCisgICAgICAgICogcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRy
ZWVVcGRhdGVyOjp1cGRhdGVBZnRlckRlc2NlbmRhbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaDogUmVtb3Zl
ZC4KKwogMjAxNy0xMi0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4K
IAogICAgICAgICBbWUFSUl0gWWFyciBzaG91bGQgcmV0dXJuIEVycm9yQ29kZSBpbnN0ZWFkIG9m
IGVycm9yIG1lc3NhZ2VzIChjb25zdCBjaGFyKikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lv
biAyMjYxMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTk4MCwxMCArMTk4MCwxMCBAQCByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRl
ci5jcHAKIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAogCiByZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCityZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1
aWxkZXJGaXJzdExldHRlci5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRl
clRhYmxlLmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVQb3NpdGlvbi5jcHAKIHJl
bmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKLXJlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjYxMzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1NzgsNyArNDU3OCw3IEBACiAJCUU0N0MzOTJEMUZFNkUwRjMwMEJCQkM2QiAvKiBS
ZW5kZXJUcmVlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ3QzM5MkExRkU2RTBERTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyLmgg
Ki87IH07CiAJCUU0N0MzOTJFMUZFNkUwRjcwMEJCQkM2QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI0
MUZFNkUwREIwMEJCQkM2QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24uaCAqLzsgfTsKIAkJRTQ3QzM5
MkYxRkU2RTBGOTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyQzFGRTZFMERGMDBCQkJDNkIg
LyogUmVuZGVyVHJlZVVwZGF0ZXIuaCAqLzsgfTsKLQkJRTQ3QzM5MzAxRkU2RTBGRDAwQkJCQzZC
IC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI2MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5k
ZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmggKi87IH07CisJCUU0N0MzOTMwMUZFNkUwRkQwMEJC
QkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyog
UmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oICovOyB9OwogCQlFNDdDMzkzMTFGRTZFMTAy
MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyNTFGRTZFMERCMDBC
QkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggKi87IH07CiAJCUU0
N0MzOTMyMUZFNkUxMDUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyODFGRTZF
MEREMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oICovOyB9OwogCQlFNDdD
MzkzMzFGRTZFMTA4MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QzM5MjcxRkU2
RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uaCAqLzsgfTsKQEAg
LTEzOTA2LDEyICsxMzkwNiwxMiBAQAogCQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyogQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDdDMzkxRjFGRTZFMEQ4MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdDMzkyMDFGRTZFMEQ5MDBCQkJDNkIgLyog
UmVuZGVyVHJlZUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyVHJlZUJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlF
NDdDMzkyMTFGRTZFMERBMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRl
ckZpcnN0TGV0dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QzM5MjEx
RkU2RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExl
dHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0MzOTIyMUZFNkUwREEw
MEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRD
b250ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QzM5MjMxRkU2RTBE
QTAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0MzOTI0MUZFNkUwREIwMEJCQkM2
QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyVHJlZVBvc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
N0MzOTI1MUZFNkUwREIwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJH
ZW5lcmF0ZWRDb250ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0N0MzOTI2
MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QzM5MjYxRkU2RTBEQzAwQkJCQzZC
IC8qIFJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDdDMzkyNzFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVw
ZGF0ZXJNdWx0aUNvbHVtbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0N0MzOTI4MUZFNkUwREQwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0
ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QzM5MjkxRkU2RTBERTAwQkJC
QzZCIC8qIFJlbmRlclRyZWVQb3NpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJUcmVlUG9zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjQ1MTMsMTQgKzI0NTEzLDE0IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlFNDdD
MzkyMDFGRTZFMEQ5MDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXIuY3BwICovLAogCQkJCUU0
N0MzOTJBMUZFNkUwREUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlci5oICovLAorCQkJCUU0
N0MzOTIxMUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmNw
cCAqLywKKwkJCQlFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJG
aXJzdExldHRlci5oICovLAogCQkJCTExOTM0MDc2MUZFOEI5MjMwMDkzNUYxRSAvKiBSZW5kZXJU
cmVlQnVpbGRlclRhYmxlLmNwcCAqLywKIAkJCQkxMTkzNDA3NzFGRThCOTIzMDA5MzVGMUUgLyog
UmVuZGVyVHJlZUJ1aWxkZXJUYWJsZS5oICovLAogCQkJCUU0N0MzOTI5MUZFNkUwREUwMEJCQkM2
QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24uY3BwICovLAogCQkJCUU0N0MzOTI0MUZFNkUwREIwMEJC
QkM2QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24uaCAqLywKIAkJCQlFNDdDMzkxRjFGRTZFMEQ4MDBC
QkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXIuY3BwICovLAogCQkJCUU0N0MzOTJDMUZFNkUwREYw
MEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlci5oICovLAotCQkJCUU0N0MzOTIxMUZFNkUwREEw
MEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcCAqLywKLQkJCQlFNDdD
MzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oICov
LAogCQkJCUU0N0MzOTIyMUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVy
YXRlZENvbnRlbnQuY3BwICovLAogCQkJCUU0N0MzOTI1MUZFNkUwREIwMEJCQkM2QiAvKiBSZW5k
ZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaCAqLywKIAkJCQlFNDdDMzkyQjFGRTZFMERG
MDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5jcHAgKi8sCkBAIC0yNzIzOCw2
ICsyNzIzOCw3IEBACiAJCQkJOTc3QjM4NzgxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxUb2tlbml6
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDc1NjhDMTQyMjYyRDYwMDQxNDE2MSAvKiBIVE1M
VHJhY2tFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzcyNjEyMjg3MjE3MDBCODFG
RjggLyogSFRNTFRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDdDMzkzMDFGRTZF
MEZEMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThFQTc5RjIwQTE5MTZERjAwQThFRjVGIC8qIEhUTUxVTGlzdEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUFENDk5MTQzMThGMDgxNTEwMEJGMDA5MiAvKiBIVE1MVW5rbm93
bkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxM0FCMENENjMzMTAwMEZBREE3NSAv
KiBIVE1MVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI4OTI4LDcgKzI4OTI5LDYg
QEAKIAkJCQkxMTkzNDA3OTFGRThCOTIzMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJUYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MkUxRkU2RTBGNzAwQkJCQzZCIC8qIFJlbmRl
clRyZWVQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MkYxRkU2RTBGOTAwQkJC
QzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDdDMzkzMDFG
RTZFMEZEMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ3QzM5MzExRkU2RTEwMjAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVy
R2VuZXJhdGVkQ29udGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MzIxRkU2RTEwNTAw
QkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU0N0MzOTMzMUZFNkUxMDgwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1u
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0
b1NpemluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRB
dXRvU2l6aW5nLmNwcAkocmV2aXNpb24gMjI2MTM1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvU2l6aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAog
I2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0RnJhZ21lbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlci5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRh
dGVyRmlyc3RMZXR0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKIApAQCAtMTczLDggKzE3Myw3IEBAIGF1dG8gVGV4dEF1dG9TaXppbmdW
YWx1ZTo6YWRqdXN0VGV4dE5vZGUKICAgICAgICAgYXV0byogYmxvY2sgPSBkb3duY2FzdDxSZW5k
ZXJUZXh0RnJhZ21lbnQ+KHRleHRSZW5kZXJlcikuYmxvY2tGb3JBY2NvbXBhbnlpbmdGaXJzdExl
dHRlcigpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIC8vIEZJWE1FOiBBbGwgcmVuZGVyIHRyZWUgbXV0YXRpb25zIHNob3VsZCBiZSBkb25lIGJ5
IFJlbmRlclRyZWVVcGRhdGVyIGNvbW1pdC4KLSAgICAgICAgUmVuZGVyVHJlZVVwZGF0ZXI6OkZp
cnN0TGV0dGVyOjp1cGRhdGUoKmJsb2NrKTsKKyAgICAgICAgYnVpbGRlci51cGRhdGVBZnRlckRl
c2NlbmRhbnRzKCpibG9jayk7CiAgICAgfQogCiAgICAgcmV0dXJuIHN0aWxsSGFzTm9kZXM7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDIyNjEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDggKzMyLDggQEAKICNpbmNsdWRlICJSZW5kZXJSdWJ5UnVuLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVSb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVy
VHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyVGFi
bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQxLDYgKzQxLDcgQEAgUmVuZGVyVHJlZUJ1aWxkZXIqIFJlbmRlclRyZWVCdWls
ZGVyOjpzXwogCiBSZW5kZXJUcmVlQnVpbGRlcjo6UmVuZGVyVHJlZUJ1aWxkZXIoUmVuZGVyVmll
dyYgdmlldykKICAgICA6IG1fdmlldyh2aWV3KQorICAgICwgbV9maXJzdExldHRlckJ1aWxkZXIo
c3RkOjptYWtlX3VuaXF1ZTxGaXJzdExldHRlcj4oKnRoaXMpKQogICAgICwgbV90YWJsZUJ1aWxk
ZXIoc3RkOjptYWtlX3VuaXF1ZTxUYWJsZT4oKnRoaXMpKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFzX2N1cnJlbnQgfHwgJm1fdmlldyAhPSAmc19jdXJyZW50LT5tX3ZpZXcpOwpAQCAtNjMsNyAr
NjQsNyBAQCB2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGlsZChSZW5kCiAgICAgfQog
CiAgICAgaWYgKGlzPFJlbmRlclRhYmxlUm93PihwYXJlbnQpKSB7Ci0gICAgICAgIG1fdGFibGVC
dWlsZGVyLT5maW5kT3JDcmVhdGVQYXJlbnRGb3JDaGlsZChkb3duY2FzdDxSZW5kZXJUYWJsZVJv
dz4ocGFyZW50KSwgKmNoaWxkLCBiZWZvcmVDaGlsZCkuYWRkQ2hpbGQoKnRoaXMsIFdURk1vdmUo
Y2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHRhYmxlQnVpbGRlcigpLmZpbmRPckNyZWF0
ZVBhcmVudEZvckNoaWxkKGRvd25jYXN0PFJlbmRlclRhYmxlUm93PihwYXJlbnQpLCAqY2hpbGQs
IGJlZm9yZUNoaWxkKS5hZGRDaGlsZCgqdGhpcywgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODAsNiArODEsMTIgQEAgdm9pZCBSZW5k
ZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGQoUmVuZAogICAgIGluc2VydENoaWxkKHBvc2l0aW9u
LnBhcmVudCgpLCBXVEZNb3ZlKGNoaWxkKSwgcG9zaXRpb24ubmV4dFNpYmxpbmcoKSk7CiB9CiAK
K3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIpCit7CisgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikpCisg
ICAgICAgIGZpcnN0TGV0dGVyQnVpbGRlcigpLnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSk7Cit9CisKIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6
OnJ1YnlSdW5JbnNlcnRDaGlsZChSZW5kZXJSdWJ5UnVuJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGlmIChj
aGlsZC0+aXNSdWJ5VGV4dCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBk
YXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAkocmV2aXNpb24gMjI2MTM1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDIwICs0MCwyOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNl
cnRDaGlsZChSZW5kZXJFbGVtZW50JiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+LCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7CiAgICAgdm9pZCBpbnNlcnRDaGls
ZChSZW5kZXJUcmVlUG9zaXRpb24mLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0Pik7CiAKKyAgICB2
b2lkIHVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoUmVuZGVyRWxlbWVudCYpOworCiAgICAgLy8gVGhp
cyBhdm9pZHMgaGF2aW5nIHRvIGNvbnZlcnQgYWxsIHNpdGVzIHRoYXQgbmVlZCBSZW5kZXJUcmVl
QnVpbGRlciBpbiBvbmUgZ28uCiAgICAgLy8gRklYTUU6IFJlbW92ZS4KICAgICBzdGF0aWMgUmVu
ZGVyVHJlZUJ1aWxkZXIqIGN1cnJlbnQoKSB7IHJldHVybiBzX2N1cnJlbnQ7IH0KIAogcHJpdmF0
ZToKKyAgICBjbGFzcyBGaXJzdExldHRlcjsKICAgICBjbGFzcyBUYWJsZTsKIAogICAgIHZvaWQg
cnVieVJ1bkluc2VydENoaWxkKFJlbmRlclJ1YnlSdW4mLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0
PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAKKyAgICBGaXJzdExldHRlciYg
Zmlyc3RMZXR0ZXJCdWlsZGVyKCkgeyByZXR1cm4gKm1fZmlyc3RMZXR0ZXJCdWlsZGVyOyB9Cisg
ICAgVGFibGUmIHRhYmxlQnVpbGRlcigpIHsgcmV0dXJuICptX3RhYmxlQnVpbGRlcjsgfQorCiAg
ICAgUmVuZGVyVmlldyYgbV92aWV3OwogCiAgICAgUmVuZGVyVHJlZUJ1aWxkZXIqIG1fcHJldmlv
dXMgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRhYmxlPiBtX3RhYmxlQnVpbGRl
cjsKICAgICBzdGF0aWMgUmVuZGVyVHJlZUJ1aWxkZXIqIHNfY3VycmVudDsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxGaXJzdExldHRlcj4gbV9maXJzdExldHRlckJ1aWxkZXI7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFRhYmxlPiBtX3RhYmxlQnVpbGRlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZUJ1aWxkZXJGaXJzdExldHRlci5jcHAJKHJldmlzaW9uIDIyNjEzNSkJKGZyb20gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIu
Y3BwOjIyNjEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlQnVpbGRlckZpcnN0TGV0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAyMDA3IERhdmlkIFNtaXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20p
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmgiCisKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVyQnV0dG9uLmgiCisj
aW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyUnVieVJ1bi5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1
ZGUgIlJlbmRlclRhYmxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCisjaW5j
bHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgUmVuZGVyU3R5bGUgc3R5bGVGb3JGaXJzdExldHRlcihjb25zdCBSZW5kZXJCbG9jayYgZmly
c3RMZXR0ZXJCbG9jaywgY29uc3QgUmVuZGVyT2JqZWN0JiBmaXJzdExldHRlckNvbnRhaW5lcikK
K3sKKyAgICBhdXRvKiBjb250YWluZXJGaXJzdExldHRlclN0eWxlID0gZmlyc3RMZXR0ZXJCbG9j
ay5nZXRDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIsICZmaXJzdExldHRlckNvbnRhaW5l
ci5maXJzdExpbmVTdHlsZSgpKTsKKyAgICAvLyBGSVhNRTogVGhlcmUgYXBwZWFycyB0byBiZSBz
b21lIHBhdGggd2hlcmUgd2UgaGF2ZSBhIGZpcnN0IGxldHRlciByZW5kZXJlciB3aXRob3V0IGZp
cnN0IGxldHRlciBzdHlsZS4KKyAgICBBU1NFUlQoY29udGFpbmVyRmlyc3RMZXR0ZXJTdHlsZSk7
CisgICAgYXV0byBmaXJzdExldHRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGNvbnRhaW5l
ckZpcnN0TGV0dGVyU3R5bGUgPyAqY29udGFpbmVyRmlyc3RMZXR0ZXJTdHlsZSA6IGZpcnN0TGV0
dGVyQ29udGFpbmVyLmZpcnN0TGluZVN0eWxlKCkpOworCisgICAgLy8gSWYgd2UgaGF2ZSBhbiBp
bml0aWFsIGxldHRlciBkcm9wIHRoYXQgaXMgPj0gMSwgdGhlbiB3ZSBuZWVkIHRvIGZvcmNlIGZs
b2F0aW5nIHRvIGJlIG9uLgorICAgIGlmIChmaXJzdExldHRlclN0eWxlLmluaXRpYWxMZXR0ZXJE
cm9wKCkgPj0gMSAmJiAhZmlyc3RMZXR0ZXJTdHlsZS5pc0Zsb2F0aW5nKCkpCisgICAgICAgIGZp
cnN0TGV0dGVyU3R5bGUuc2V0RmxvYXRpbmcoZmlyc3RMZXR0ZXJTdHlsZS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBMZWZ0RmxvYXQgOiBSaWdodEZsb2F0KTsKKworICAgIC8vIFdlIGhhdmUg
dG8gY29tcHV0ZSB0aGUgY29ycmVjdCBmb250LXNpemUgZm9yIHRoZSBmaXJzdC1sZXR0ZXIgaWYg
aXQgaGFzIGFuIGluaXRpYWwgbGV0dGVyIGhlaWdodCBzZXQuCisgICAgYXV0byogcGFyYWdyYXBo
ID0gZmlyc3RMZXR0ZXJDb250YWluZXIuaXNSZW5kZXJCbG9ja0Zsb3coKSA/ICZmaXJzdExldHRl
ckNvbnRhaW5lciA6IGZpcnN0TGV0dGVyQ29udGFpbmVyLmNvbnRhaW5pbmdCbG9jaygpOworICAg
IGlmIChmaXJzdExldHRlclN0eWxlLmluaXRpYWxMZXR0ZXJIZWlnaHQoKSA+PSAxICYmIGZpcnN0
TGV0dGVyU3R5bGUuZm9udE1ldHJpY3MoKS5oYXNDYXBIZWlnaHQoKSAmJiBwYXJhZ3JhcGgtPnN0
eWxlKCkuZm9udE1ldHJpY3MoKS5oYXNDYXBIZWlnaHQoKSkgeworICAgICAgICAvLyBGSVhNRTog
Rm9yIGlkZW9ncmFwaGljIGJhc2VsaW5lcywgd2Ugd2FudCB0byBnbyBmcm9tIGxpbmUgZWRnZSB0
byBsaW5lIGVkZ2UuIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoTi0xKSpsaW5lLWhlaWdodCArIHRo
ZSBmb250IGhlaWdodC4KKyAgICAgICAgLy8gV2UgZG9uJ3QgeWV0IHN1cHBvcnQgaWRlb2dyYXBo
aWMgYmFzZWxpbmVzLgorICAgICAgICAvLyBGb3IgYW4gTi1saW5lIGZpcnN0LWxldHRlciBhbmQg
Zm9yIGFscGhhYmV0aWMgYmFzZWxpbmVzLCB0aGUgY2FwLWhlaWdodCBvZiB0aGUgZmlyc3QgbGV0
dGVyIG5lZWRzIHRvIGVxdWFsIChOLTEpKmxpbmUtaGVpZ2h0IG9mIHBhcmFncmFwaCBsaW5lcyAr
IGNhcC1oZWlnaHQgb2YgdGhlIHBhcmFncmFwaAorICAgICAgICAvLyBNYXRoZW1hdGljYWxseSB3
ZSBjYW4ndCByZWx5IG9uIGZvbnQtc2l6ZSwgc2luY2UgZm9udCgpLmhlaWdodCgpIGRvZXNuJ3Qg
bmVjZXNzYXJpbHkgbWF0Y2guIEZvciByZWxpYWJpbGl0eSwgdGhlIGJlc3QgYXBwcm9hY2ggaXMg
c2ltcGx5IHRvCisgICAgICAgIC8vIGNvbXBhcmUgdGhlIGZpbmFsIG1lYXN1cmVkIGNhcC1oZWln
aHRzIG9mIHRoZSB0d28gZm9udHMgaW4gb3JkZXIgdG8gZ2V0IHRvIHRoZSBjbG9zZXN0IHBvc3Np
YmxlIHZhbHVlLgorICAgICAgICBmaXJzdExldHRlclN0eWxlLnNldExpbmVCb3hDb250YWluKExp
bmVCb3hDb250YWluSW5pdGlhbExldHRlcik7CisgICAgICAgIGludCBsaW5lSGVpZ2h0ID0gcGFy
YWdyYXBoLT5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpOworCisgICAgICAgIC8vIFNldCB0
aGUgZm9udCB0byBiZSBvbmUgbGluZSB0b28gYmlnIGFuZCB0aGVuIHJhdGNoZXQgYmFjayB0byBn
ZXQgdG8gYSBwcmVjaXNlIGZpdC4gV2UgY2FuJ3QganVzdCBzZXQgdGhlIGRlc2lyZWQgZm9udCBz
aXplIGJhc2VkIG9mZiBmb250IGhlaWdodCBtZXRyaWNzCisgICAgICAgIC8vIGJlY2F1c2UgbWFu
eSBmb250cyBiYWtlIGFzY2VudCBpbnRvIHRoZSBmb250IG1ldHJpY3MuIFRoZXJlZm9yZSB3ZSBo
YXZlIHRvIGxvb2sgYXQgYWN0dWFsIG1lYXN1cmVkIGNhcCBoZWlnaHQgdmFsdWVzIGluIG9yZGVy
IHRvIGtub3cgd2hlbiB3ZSBoYXZlIGEgZ29vZCBmaXQuCisgICAgICAgIGF1dG8gbmV3Rm9udERl
c2NyaXB0aW9uID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAg
ZmxvYXQgY2FwUmF0aW8gPSBmaXJzdExldHRlclN0eWxlLmZvbnRNZXRyaWNzKCkuZmxvYXRDYXBI
ZWlnaHQoKSAvIGZpcnN0TGV0dGVyU3R5bGUuY29tcHV0ZWRGb250UGl4ZWxTaXplKCk7CisgICAg
ICAgIGZsb2F0IHN0YXJ0aW5nRm9udFNpemUgPSAoKGZpcnN0TGV0dGVyU3R5bGUuaW5pdGlhbExl
dHRlckhlaWdodCgpIC0gMSkgKiBsaW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCkuY2FwSGVpZ2h0KCkpIC8gY2FwUmF0aW87CisgICAgICAgIG5ld0ZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0YXJ0aW5nRm9udFNpemUpOworICAgICAgICBuZXdGb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0YXJ0aW5nRm9udFNpemUpOworICAgICAgICBm
aXJzdExldHRlclN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwor
ICAgICAgICBmaXJzdExldHRlclN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKGZpcnN0TGV0dGVy
U3R5bGUuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CisKKyAgICAgICAgaW50IGRlc2ly
ZWRDYXBIZWlnaHQgPSAoZmlyc3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0dGVySGVpZ2h0KCkgLSAx
KSAqIGxpbmVIZWlnaHQgKyBwYXJhZ3JhcGgtPnN0eWxlKCkuZm9udE1ldHJpY3MoKS5jYXBIZWln
aHQoKTsKKyAgICAgICAgaW50IGFjdHVhbENhcEhlaWdodCA9IGZpcnN0TGV0dGVyU3R5bGUuZm9u
dE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKKyAgICAgICAgd2hpbGUgKGFjdHVhbENhcEhlaWdodCA+
IGRlc2lyZWRDYXBIZWlnaHQpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0aW9u
ID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIG5ld0Zv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZp
ZWRTaXplKCkgLSAxKTsKKyAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpIC0xKTsKKyAgICAgICAgICAg
IGZpcnN0TGV0dGVyU3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7
CisgICAgICAgICAgICBmaXJzdExldHRlclN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKGZpcnN0
TGV0dGVyU3R5bGUuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICBh
Y3R1YWxDYXBIZWlnaHQgPSBmaXJzdExldHRlclN0eWxlLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGb3JjZSBpbmxpbmUgZGlzcGxheSAoZXhj
ZXB0IGZvciBmbG9hdGluZyBmaXJzdC1sZXR0ZXJzKS4KKyAgICBmaXJzdExldHRlclN0eWxlLnNl
dERpc3BsYXkoZmlyc3RMZXR0ZXJTdHlsZS5pc0Zsb2F0aW5nKCkgPyBCTE9DSyA6IElOTElORSk7
CisgICAgLy8gQ1NTMiBzYXlzIGZpcnN0LWxldHRlciBjYW4ndCBiZSBwb3NpdGlvbmVkLgorICAg
IGZpcnN0TGV0dGVyU3R5bGUuc2V0UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOworICAgIHJldHVy
biBmaXJzdExldHRlclN0eWxlOworfQorCisvLyBDU1MgMi4xIGh0dHA6Ly93d3cudzMub3JnL1RS
L0NTUzIxL3NlbGVjdG9yLmh0bWwjZmlyc3QtbGV0dGVyCisvLyAiUHVuY3R1YXRpb24gKGkuZSwg
Y2hhcmFjdGVycyBkZWZpbmVkIGluIFVuaWNvZGUgW1VOSUNPREVdIGluIHRoZSAib3BlbiIgKFBz
KSwgImNsb3NlIiAoUGUpLAorLy8gImluaXRpYWwiIChQaSkuICJmaW5hbCIgKFBmKSBhbmQgIm90
aGVyIiAoUG8pIHB1bmN0dWF0aW9uIGNsYXNzZXMpLCB0aGF0IHByZWNlZGVzIG9yIGZvbGxvd3Mg
dGhlIGZpcnN0IGxldHRlciBzaG91bGQgYmUgaW5jbHVkZWQiCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIFVfR0VU
X0dDX01BU0soYykgJiAoVV9HQ19QU19NQVNLIHwgVV9HQ19QRV9NQVNLIHwgVV9HQ19QSV9NQVNL
IHwgVV9HQ19QRl9NQVNLIHwgVV9HQ19QT19NQVNLKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IHNob3VsZFNraXBGb3JGaXJzdExldHRlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc1NwYWNl
T3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlIHx8IGlzUHVuY3R1YXRpb25Gb3JGaXJz
dExldHRlcihjKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXJTdHlsZShSZW5k
ZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0JiBjdXJyZW50Q2hpbGQpCit7
CisgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXIgPSBjdXJyZW50Q2hpbGQucGFyZW50KCk7
CisgICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0ZpcnN0TGV0dGVyKCkpOworCisgICAgUmVuZGVy
RWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBmaXJzdExldHRlci0+cGFyZW50KCk7Cisg
ICAgYXV0byBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9j
aywgKmZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKyAgICBBU1NFUlQoZmlyc3RMZXR0ZXItPmlzRmxv
YXRpbmcoKSB8fCBmaXJzdExldHRlci0+aXNJbmxpbmUoKSk7CisKKyAgICBpZiAoU3R5bGU6OmRl
dGVybWluZUNoYW5nZShmaXJzdExldHRlci0+c3R5bGUoKSwgcHNldWRvU3R5bGUpID09IFN0eWxl
OjpEZXRhY2gpIHsKKyAgICAgICAgLy8gVGhlIGZpcnN0LWxldHRlciByZW5kZXJlciBuZWVkcyB0
byBiZSByZXBsYWNlZC4gQ3JlYXRlIGEgbmV3IHJlbmRlcmVyIG9mIHRoZSByaWdodCB0eXBlLgor
ICAgICAgICBSZW5kZXJQdHI8UmVuZGVyQm94TW9kZWxPYmplY3Q+IG5ld0ZpcnN0TGV0dGVyOwor
ICAgICAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKKyAgICAgICAgICAg
IG5ld0ZpcnN0TGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVySW5saW5lPihmaXJzdExldHRl
ckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRvU3R5bGUpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zs
b3c+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOwor
ICAgICAgICBuZXdGaXJzdExldHRlci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgICAgIG5ld0Zp
cnN0TGV0dGVyLT5zZXRJc0ZpcnN0TGV0dGVyKCk7CisKKyAgICAgICAgLy8gTW92ZSB0aGUgZmly
c3QgbGV0dGVyIGludG8gdGhlIG5ldyByZW5kZXJlci4KKyAgICAgICAgd2hpbGUgKFJlbmRlck9i
amVjdCogY2hpbGQgPSBmaXJzdExldHRlci0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgICAgICBp
ZiAoaXM8UmVuZGVyVGV4dD4oKmNoaWxkKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJUZXh0PigqY2hpbGQpLnJlbW92ZUFuZERlc3Ryb3lUZXh0Qm94ZXMoKTsKKyAgICAgICAgICAg
IGF1dG8gdG9Nb3ZlID0gZmlyc3RMZXR0ZXItPnRha2VDaGlsZCgqY2hpbGQpOworICAgICAgICAg
ICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoKm5ld0ZpcnN0TGV0
dGVyLCBXVEZNb3ZlKHRvTW92ZSkpOworICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiBuZXh0U2libGluZyA9IGZpcnN0TGV0dGVyLT5uZXh0U2libGluZygpOworICAgICAgICBpZiAo
UmVuZGVyVGV4dEZyYWdtZW50KiByZW1haW5pbmdUZXh0ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9k
ZWxPYmplY3Q+KCpmaXJzdExldHRlcikuZmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChyZW1haW5pbmdUZXh0LT5pc0Fub255bW91cygpIHx8IHJlbWFpbmlu
Z1RleHQtPnRleHROb2RlKCktPnJlbmRlcmVyKCkgPT0gcmVtYWluaW5nVGV4dCk7CisgICAgICAg
ICAgICAvLyBSZXBsYWNlIHRoZSBvbGQgcmVuZGVyZXIgd2l0aCB0aGUgbmV3IG9uZS4KKyAgICAg
ICAgICAgIHJlbWFpbmluZ1RleHQtPnNldEZpcnN0TGV0dGVyKCpuZXdGaXJzdExldHRlcik7Cisg
ICAgICAgICAgICBuZXdGaXJzdExldHRlci0+c2V0Rmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KCpy
ZW1haW5pbmdUZXh0KTsKKyAgICAgICAgfQorICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+
cmVtb3ZlQW5kRGVzdHJveUNoaWxkKCpmaXJzdExldHRlcik7CisgICAgICAgIFJlbmRlclRyZWVC
dWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKCpmaXJzdExldHRlckNvbnRhaW5lciwgV1RG
TW92ZShuZXdGaXJzdExldHRlciksIG5leHRTaWJsaW5nKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
Zmlyc3RMZXR0ZXItPnNldFN0eWxlKFdURk1vdmUocHNldWRvU3R5bGUpKTsKK30KKworc3RhdGlj
IHZvaWQgY3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihSZW5kZXJCbG9jayYgZmlyc3RMZXR0ZXJC
bG9jaywgUmVuZGVyVGV4dCYgY3VycmVudFRleHRDaGlsZCkKK3sKKyAgICBSZW5kZXJFbGVtZW50
KiBmaXJzdExldHRlckNvbnRhaW5lciA9IGN1cnJlbnRUZXh0Q2hpbGQucGFyZW50KCk7CisgICAg
YXV0byBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywg
KmZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQm94TW9kZWxPYmpl
Y3Q+IG5ld0ZpcnN0TGV0dGVyOworICAgIGlmIChwc2V1ZG9TdHlsZS5kaXNwbGF5KCkgPT0gSU5M
SU5FKQorICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlcklubGlu
ZT4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7Cisg
ICAgZWxzZQorICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJs
b2NrRmxvdz4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxl
KSk7CisgICAgbmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIG5ld0ZpcnN0
TGV0dGVyLT5zZXRJc0ZpcnN0TGV0dGVyKCk7CisKKyAgICBhdXRvJiBmaXJzdExldHRlciA9ICpu
ZXdGaXJzdExldHRlcjsKKyAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRD
aGlsZCgqZmlyc3RMZXR0ZXJDb250YWluZXIsIFdURk1vdmUobmV3Rmlyc3RMZXR0ZXIpLCAmY3Vy
cmVudFRleHRDaGlsZCk7CisKKyAgICAvLyBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIGdvaW5nIHRv
IGJlIGVpdGhlciBhIGdlbmVyYXRlZCBjb250ZW50IHN0cmluZyBvciBhIERPTSBub2RlJ3MKKyAg
ICAvLyBzdHJpbmcuIFdlIHdhbnQgdGhlIG9yaWdpbmFsIHN0cmluZyBiZWZvcmUgaXQgZ290IHRy
YW5zZm9ybWVkIGluIGNhc2UgZmlyc3QtbGV0dGVyIGhhcworICAgIC8vIG5vIHRleHQtdHJhbnNm
b3JtIG9yIGEgZGlmZmVyZW50IHRleHQtdHJhbnNmb3JtIGFwcGxpZWQgdG8gaXQuCisgICAgU3Ry
aW5nIG9sZFRleHQgPSBjdXJyZW50VGV4dENoaWxkLm9yaWdpbmFsVGV4dCgpOworICAgIEFTU0VS
VCghb2xkVGV4dC5pc051bGwoKSk7CisKKyAgICBpZiAoIW9sZFRleHQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisKKyAgICAgICAgLy8gQWNjb3VudCBmb3IgbGVh
ZGluZyBzcGFjZXMgYW5kIHB1bmN0dWF0aW9uLgorICAgICAgICB3aGlsZSAobGVuZ3RoIDwgb2xk
VGV4dC5sZW5ndGgoKSAmJiBzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIob2xkVGV4dFtsZW5ndGhd
KSkKKyAgICAgICAgICAgIGxlbmd0aCsrOworCisgICAgICAgIC8vIEFjY291bnQgZm9yIGZpcnN0
IGdyYXBoZW1lIGNsdXN0ZXIuCisgICAgICAgIGxlbmd0aCArPSBudW1DaGFyYWN0ZXJzSW5HcmFw
aGVtZUNsdXN0ZXJzKFN0cmluZ1ZpZXcob2xkVGV4dCkuc3Vic3RyaW5nKGxlbmd0aCksIDEpOwor
CisgICAgICAgIC8vIEtlZXAgbG9va2luZyBmb3Igd2hpdGVzcGFjZSBhbmQgYWxsb3dlZCBwdW5j
dHVhdGlvbiwgYnV0IGF2b2lkCisgICAgICAgIC8vIGFjY3VtdWxhdGluZyBqdXN0IHdoaXRlc3Bh
Y2UgaW50byB0aGUgOmZpcnN0LWxldHRlci4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBzY2FuTGVu
Z3RoID0gbGVuZ3RoOyBzY2FuTGVuZ3RoIDwgb2xkVGV4dC5sZW5ndGgoKTsgKytzY2FuTGVuZ3Ro
KSB7CisgICAgICAgICAgICBVQ2hhciBjID0gb2xkVGV4dFtzY2FuTGVuZ3RoXTsKKworICAgICAg
ICAgICAgaWYgKCFzaG91bGRTa2lwRm9yRmlyc3RMZXR0ZXIoYykpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGlmIChpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoYykp
CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gc2Nhbkxlbmd0aCArIDE7CisgICAgICAgIH0KKwor
ICAgICAgICBhdXRvKiB0ZXh0Tm9kZSA9IGN1cnJlbnRUZXh0Q2hpbGQudGV4dE5vZGUoKTsKKyAg
ICAgICAgYXV0byogYmVmb3JlQ2hpbGQgPSBjdXJyZW50VGV4dENoaWxkLm5leHRTaWJsaW5nKCk7
CisgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5yZW1vdmVBbmREZXN0cm95Q2hpbGQoY3Vy
cmVudFRleHRDaGlsZCk7CisKKyAgICAgICAgLy8gQ29uc3RydWN0IGEgdGV4dCBmcmFnbWVudCBm
b3IgdGhlIHRleHQgYWZ0ZXIgdGhlIGZpcnN0IGxldHRlci4KKyAgICAgICAgLy8gVGhpcyB0ZXh0
IGZyYWdtZW50IG1pZ2h0IGJlIGVtcHR5LgorICAgICAgICBSZW5kZXJQdHI8UmVuZGVyVGV4dEZy
YWdtZW50PiBuZXdSZW1haW5pbmdUZXh0OworICAgICAgICBpZiAodGV4dE5vZGUpIHsKKyAgICAg
ICAgICAgIG5ld1JlbWFpbmluZ1RleHQgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21l
bnQ+KCp0ZXh0Tm9kZSwgb2xkVGV4dCwgbGVuZ3RoLCBvbGRUZXh0Lmxlbmd0aCgpIC0gbGVuZ3Ro
KTsKKyAgICAgICAgICAgIHRleHROb2RlLT5zZXRSZW5kZXJlcihuZXdSZW1haW5pbmdUZXh0Lmdl
dCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3Jl
YXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50
KCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7CisKKyAgICAg
ICAgUmVuZGVyVGV4dEZyYWdtZW50JiByZW1haW5pbmdUZXh0ID0gKm5ld1JlbWFpbmluZ1RleHQ7
CisgICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKCpmaXJz
dExldHRlckNvbnRhaW5lciwgV1RGTW92ZShuZXdSZW1haW5pbmdUZXh0KSwgYmVmb3JlQ2hpbGQp
OworICAgICAgICByZW1haW5pbmdUZXh0LnNldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyKTsKKyAg
ICAgICAgZmlyc3RMZXR0ZXIuc2V0Rmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KHJlbWFpbmluZ1Rl
eHQpOworCisgICAgICAgIC8vIGNvbnN0cnVjdCB0ZXh0IGZyYWdtZW50IGZvciB0aGUgZmlyc3Qg
bGV0dGVyCisgICAgICAgIGF1dG8gbGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZy
YWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRleHQsIDAsIGxlbmd0aCk7
CisKKyAgICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoZmly
c3RMZXR0ZXIsIFdURk1vdmUobGV0dGVyKSk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBzdXBw
b3J0c0ZpcnN0TGV0dGVyKFJlbmRlckJsb2NrJiBibG9jaykKK3sKKyAgICBpZiAoaXM8UmVuZGVy
QnV0dG9uPihibG9jaykpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghaXM8UmVuZGVy
QmxvY2tGbG93PihibG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXM8UmVu
ZGVyU1ZHVGV4dD4oYmxvY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzPFJl
bmRlclJ1YnlSdW4+KGJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBi
bG9jay5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKTsKK30KKwordm9pZCBSZW5kZXJUcmVlVXBk
YXRlcjo6Rmlyc3RMZXR0ZXI6OnVwZGF0ZShSZW5kZXJCbG9jayYgYmxvY2spCit7CisgICAgaWYg
KCFibG9jay5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXN1cHBvcnRzRmlyc3RMZXR0ZXIoYmxvY2spKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZCwgZmlyc3RMZXR0
ZXJDb250YWluZXIgaXMgbm90IG5lZWRlZC4KKyAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVy
UmVuZGVyZXI7CisgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXI7CisgICAg
YmxvY2suZ2V0Rmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJSZW5kZXJlciwgZmlyc3RMZXR0ZXJDb250
YWluZXIpOworCisgICAgaWYgKCFmaXJzdExldHRlclJlbmRlcmVyKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBPdGhlciBjb250YWluZXJzIGFyZSBoYW5kbGVkIHdoZW4gdXBkYXRpbmcgdGhl
aXIgcmVuZGVyZXJzLgorICAgIGlmICgmYmxvY2sgIT0gZmlyc3RMZXR0ZXJDb250YWluZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBjaGlsZCBhbHJlYWR5IGhhcyBzdHlsZSwg
dGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsIHNvIHdlIGp1c3Qgd2FudAorICAgIC8v
IHRvIHVwZGF0ZSBpdC4KKyAgICBpZiAoZmlyc3RMZXR0ZXJSZW5kZXJlci0+cGFyZW50KCktPnN0
eWxlKCkuc3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7CisgICAgICAgIHVwZGF0ZUZpcnN0
TGV0dGVyU3R5bGUoYmxvY2ssICpmaXJzdExldHRlclJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghaXM8UmVuZGVyVGV4dD4oZmlyc3RMZXR0ZXJSZW5kZXJlcikp
CisgICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoYmxvY2ss
IGRvd25jYXN0PFJlbmRlclRleHQ+KCpmaXJzdExldHRlclJlbmRlcmVyKSk7Cit9CisKK307Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJG
aXJzdExldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3BwCShyZXZpc2lvbiAyMjYxMzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJG
aXJzdExldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRl
ci5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaCIKIAogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKQEAgLTEwMSw3ICsx
MDEsNTcgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZFNraXBGb3JGaXJzdExldAogICAgIHJl
dHVybiBpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlIHx8IGlzUHVuY3R1
YXRpb25Gb3JGaXJzdExldHRlcihjKTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlRmlyc3RMZXR0
ZXJTdHlsZShSZW5kZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0JiBjdXJy
ZW50Q2hpbGQpCitzdGF0aWMgYm9vbCBzdXBwb3J0c0ZpcnN0TGV0dGVyKFJlbmRlckJsb2NrJiBi
bG9jaykKK3sKKyAgICBpZiAoaXM8UmVuZGVyQnV0dG9uPihibG9jaykpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93PihibG9jaykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoaXM8UmVuZGVyU1ZHVGV4dD4oYmxvY2spKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzPFJlbmRlclJ1YnlSdW4+KGJsb2NrKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBibG9jay5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4o
KTsKK30KKworUmVuZGVyVHJlZUJ1aWxkZXI6OkZpcnN0TGV0dGVyOjpGaXJzdExldHRlcihSZW5k
ZXJUcmVlQnVpbGRlciYgYnVpbGRlcikKKyAgICA6IG1fYnVpbGRlcihidWlsZGVyKQoreworfQor
Cit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpGaXJzdExldHRlcjo6dXBkYXRlQWZ0ZXJEZXNjZW5k
YW50cyhSZW5kZXJCbG9jayYgYmxvY2spCit7CisgICAgaWYgKCFibG9jay5zdHlsZSgpLmhhc1Bz
ZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN1cHBv
cnRzRmlyc3RMZXR0ZXIoYmxvY2spKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZCwgZmlyc3RMZXR0ZXJDb250YWluZXIgaXMgbm90IG5l
ZWRlZC4KKyAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyUmVuZGVyZXI7CisgICAgUmVuZGVy
RWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXI7CisgICAgYmxvY2suZ2V0Rmlyc3RMZXR0ZXIo
Zmlyc3RMZXR0ZXJSZW5kZXJlciwgZmlyc3RMZXR0ZXJDb250YWluZXIpOworCisgICAgaWYgKCFm
aXJzdExldHRlclJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdGhlciBjb250
YWluZXJzIGFyZSBoYW5kbGVkIHdoZW4gdXBkYXRpbmcgdGhlaXIgcmVuZGVyZXJzLgorICAgIGlm
ICgmYmxvY2sgIT0gZmlyc3RMZXR0ZXJDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIElmIHRoZSBjaGlsZCBhbHJlYWR5IGhhcyBzdHlsZSwgdGhlbiBpdCBoYXMgYWxyZWFkeSBi
ZWVuIGNyZWF0ZWQsIHNvIHdlIGp1c3Qgd2FudAorICAgIC8vIHRvIHVwZGF0ZSBpdC4KKyAgICBp
ZiAoZmlyc3RMZXR0ZXJSZW5kZXJlci0+cGFyZW50KCktPnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0g
RklSU1RfTEVUVEVSKSB7CisgICAgICAgIHVwZGF0ZVN0eWxlKGJsb2NrLCAqZmlyc3RMZXR0ZXJS
ZW5kZXJlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzPFJlbmRlclRl
eHQ+KGZpcnN0TGV0dGVyUmVuZGVyZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVhdGVS
ZW5kZXJlcnMoYmxvY2ssIGRvd25jYXN0PFJlbmRlclRleHQ+KCpmaXJzdExldHRlclJlbmRlcmVy
KSk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OkZpcnN0TGV0dGVyOjp1cGRhdGVTdHls
ZShSZW5kZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0JiBjdXJyZW50Q2hp
bGQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXIgPSBjdXJyZW50Q2hpbGQucGFy
ZW50KCk7CiAgICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0ZpcnN0TGV0dGVyKCkpOwpAQCAtMTI1
LDcgKzE3NSw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUoUmVuZGUKICAg
ICAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqY2hpbGQpKQogICAgICAgICAgICAgICAgIGRv
d25jYXN0PFJlbmRlclRleHQ+KCpjaGlsZCkucmVtb3ZlQW5kRGVzdHJveVRleHRCb3hlcygpOwog
ICAgICAgICAgICAgYXV0byB0b01vdmUgPSBmaXJzdExldHRlci0+dGFrZUNoaWxkKCpjaGlsZCk7
Ci0gICAgICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgq
bmV3Rmlyc3RMZXR0ZXIsIFdURk1vdmUodG9Nb3ZlKSk7CisgICAgICAgICAgICBtX2J1aWxkZXIu
aW5zZXJ0Q2hpbGQoKm5ld0ZpcnN0TGV0dGVyLCBXVEZNb3ZlKHRvTW92ZSkpOwogICAgICAgICB9
CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGZpcnN0TGV0dGVyLT5uZXh0
U2libGluZygpOwpAQCAtMTM2LDEyICsxODYsMTQgQEAgc3RhdGljIHZvaWQgdXBkYXRlRmlyc3RM
ZXR0ZXJTdHlsZShSZW5kZQogICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXItPnNldEZpcnN0TGV0
dGVyUmVtYWluaW5nVGV4dCgqcmVtYWluaW5nVGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgZmly
c3RMZXR0ZXJDb250YWluZXItPnJlbW92ZUFuZERlc3Ryb3lDaGlsZCgqZmlyc3RMZXR0ZXIpOwot
ICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqZmlyc3RM
ZXR0ZXJDb250YWluZXIsIFdURk1vdmUobmV3Rmlyc3RMZXR0ZXIpLCBuZXh0U2libGluZyk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGZpcnN0TGV0dGVyLT5zZXRTdHlsZShXVEZNb3ZlKHBzZXVkb1N0
eWxlKSk7CisgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250YWlu
ZXIsIFdURk1vdmUobmV3Rmlyc3RMZXR0ZXIpLCBuZXh0U2libGluZyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmaXJzdExldHRlci0+c2V0U3R5bGUoV1RGTW92ZShwc2V1ZG9TdHls
ZSkpOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKFJlbmRlckJs
b2NrJiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJUZXh0JiBjdXJyZW50VGV4dENoaWxkKQordm9p
ZCBSZW5kZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0ZXI6OmNyZWF0ZVJlbmRlcmVycyhSZW5kZXJC
bG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyVGV4dCYgY3VycmVudFRleHRDaGlsZCkKIHsK
ICAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRhaW5lciA9IGN1cnJlbnRUZXh0Q2hp
bGQucGFyZW50KCk7CiAgICAgYXV0byBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIo
Zmlyc3RMZXR0ZXJCbG9jaywgKmZpcnN0TGV0dGVyQ29udGFpbmVyKTsKQEAgLTE1NCw3ICsyMDYs
NyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKFJlCiAgICAgbmV3Rmly
c3RMZXR0ZXItPnNldElzRmlyc3RMZXR0ZXIoKTsKIAogICAgIGF1dG8mIGZpcnN0TGV0dGVyID0g
Km5ld0ZpcnN0TGV0dGVyOwotICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2Vy
dENoaWxkKCpmaXJzdExldHRlckNvbnRhaW5lciwgV1RGTW92ZShuZXdGaXJzdExldHRlciksICZj
dXJyZW50VGV4dENoaWxkKTsKKyAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQoKmZpcnN0TGV0dGVy
Q29udGFpbmVyLCBXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgJmN1cnJlbnRUZXh0Q2hpbGQpOwog
CiAgICAgLy8gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyBnb2luZyB0byBiZSBlaXRoZXIgYSBnZW5l
cmF0ZWQgY29udGVudCBzdHJpbmcgb3IgYSBET00gbm9kZSdzCiAgICAgLy8gc3RyaW5nLiBXZSB3
YW50IHRoZSBvcmlnaW5hbCBzdHJpbmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1lZCBpbiBjYXNl
IGZpcnN0LWxldHRlciBoYXMKQEAgLTE5OCw2MCArMjUwLDE1IEBAIHN0YXRpYyB2b2lkIGNyZWF0
ZUZpcnN0TGV0dGVyUmVuZGVyZXIoUmUKICAgICAgICAgICAgIG5ld1JlbWFpbmluZ1RleHQgPSBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1l
bnQoKSwgb2xkVGV4dCwgbGVuZ3RoLCBvbGRUZXh0Lmxlbmd0aCgpIC0gbGVuZ3RoKTsKIAogICAg
ICAgICBSZW5kZXJUZXh0RnJhZ21lbnQmIHJlbWFpbmluZ1RleHQgPSAqbmV3UmVtYWluaW5nVGV4
dDsKLSAgICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoKmZp
cnN0TGV0dGVyQ29udGFpbmVyLCBXVEZNb3ZlKG5ld1JlbWFpbmluZ1RleHQpLCBiZWZvcmVDaGls
ZCk7CisgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250YWluZXIs
IFdURk1vdmUobmV3UmVtYWluaW5nVGV4dCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmVtYWlu
aW5nVGV4dC5zZXRGaXJzdExldHRlcihmaXJzdExldHRlcik7CiAgICAgICAgIGZpcnN0TGV0dGVy
LnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsKIAogICAgICAgICAv
LyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3IgdGhlIGZpcnN0IGxldHRlcgogICAgICAgICBh
dXRvIGxldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRGcmFnbWVudD4oZmlyc3RMZXR0
ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOwogCi0gICAgICAgIFJlbmRl
clRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKGZpcnN0TGV0dGVyLCBXVEZNb3Zl
KGxldHRlcikpOworICAgICAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQoZmlyc3RMZXR0ZXIsIFdU
Rk1vdmUobGV0dGVyKSk7CiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBzdXBwb3J0c0ZpcnN0TGV0
dGVyKFJlbmRlckJsb2NrJiBibG9jaykKLXsKLSAgICBpZiAoaXM8UmVuZGVyQnV0dG9uPihibG9j
aykpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93Pihi
bG9jaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoaXM8UmVuZGVyU1ZHVGV4dD4o
YmxvY2spKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlzPFJlbmRlclJ1YnlSdW4+
KGJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBibG9jay5jYW5IYXZl
R2VuZXJhdGVkQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6Rmlyc3RM
ZXR0ZXI6OnVwZGF0ZShSZW5kZXJCbG9jayYgYmxvY2spCi17Ci0gICAgaWYgKCFibG9jay5zdHls
ZSgpLmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIXN1cHBvcnRzRmlyc3RMZXR0ZXIoYmxvY2spKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZCwgZmlyc3RMZXR0ZXJDb250YWluZXIg
aXMgbm90IG5lZWRlZC4KLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyUmVuZGVyZXI7Ci0g
ICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXI7Ci0gICAgYmxvY2suZ2V0Rmly
c3RMZXR0ZXIoZmlyc3RMZXR0ZXJSZW5kZXJlciwgZmlyc3RMZXR0ZXJDb250YWluZXIpOwotCi0g
ICAgaWYgKCFmaXJzdExldHRlclJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBP
dGhlciBjb250YWluZXJzIGFyZSBoYW5kbGVkIHdoZW4gdXBkYXRpbmcgdGhlaXIgcmVuZGVyZXJz
LgotICAgIGlmICgmYmxvY2sgIT0gZmlyc3RMZXR0ZXJDb250YWluZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIElmIHRoZSBjaGlsZCBhbHJlYWR5IGhhcyBzdHlsZSwgdGhlbiBpdCBoYXMg
YWxyZWFkeSBiZWVuIGNyZWF0ZWQsIHNvIHdlIGp1c3Qgd2FudAotICAgIC8vIHRvIHVwZGF0ZSBp
dC4KLSAgICBpZiAoZmlyc3RMZXR0ZXJSZW5kZXJlci0+cGFyZW50KCktPnN0eWxlKCkuc3R5bGVU
eXBlKCkgPT0gRklSU1RfTEVUVEVSKSB7Ci0gICAgICAgIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUo
YmxvY2ssICpmaXJzdExldHRlclJlbmRlcmVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghaXM8UmVuZGVyVGV4dD4oZmlyc3RMZXR0ZXJSZW5kZXJlcikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoYmxvY2ssIGRvd25jYXN0PFJl
bmRlclRleHQ+KCpmaXJzdExldHRlclJlbmRlcmVyKSk7Ci19Ci0KIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlQnVpbGRlckZpcnN0TGV0dGVyLmgJKHJldmlzaW9uIDIyNjEzNSkJKGZyb20gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaDoy
MjYxMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1
aWxkZXJGaXJzdExldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyQmxvY2s7CisKK2NsYXNzIFJlbmRl
clRyZWVVcGRhdGVyOjpGaXJzdExldHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgdXBk
YXRlKFJlbmRlckJsb2NrJik7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckZpcnN0
TGV0dGVyLmgJKHJldmlzaW9uIDIyNjEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDE1ICsyNSwyMyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlJlbmRlclRyZWVV
cGRhdGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBSZW5kZXJCbG9jazsKK2NsYXNzIFJlbmRlckVsZW1lbnQ7CiAKLWNs
YXNzIFJlbmRlclRyZWVVcGRhdGVyOjpGaXJzdExldHRlciB7CitjbGFzcyBSZW5kZXJUcmVlQnVp
bGRlcjo6Rmlyc3RMZXR0ZXIgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZShSZW5k
ZXJCbG9jayYpOworICAgIEZpcnN0TGV0dGVyKFJlbmRlclRyZWVCdWlsZGVyJik7CisKKyAgICB2
b2lkIHVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoUmVuZGVyQmxvY2smKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHVwZGF0ZVN0eWxlKFJlbmRlckJsb2NrJiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJP
YmplY3QmIGN1cnJlbnRDaGlsZCk7CisgICAgdm9pZCBjcmVhdGVSZW5kZXJlcnMoUmVuZGVyQmxv
Y2smIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlclRleHQmIGN1cnJlbnRUZXh0Q2hpbGQpOworCisg
ICAgUmVuZGVyVHJlZUJ1aWxkZXImIG1fYnVpbGRlcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVy
LmNwcAkocmV2aXNpb24gMjI2MTM1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0
aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QAogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUu
aCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRh
dGVyRmlyc3RMZXR0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVV
cGRhdGVyTXVsdGlDb2x1bW4uaCIKQEAgLTI3MSw5ICsyNzEsOSBAQCB2b2lkIFJlbmRlclRyZWVV
cGRhdGVyOjp1cGRhdGVBZnRlckRlc2NlCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0
dXJuOwogCisgICAgbV9idWlsZGVyLnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKnJlbmRlcmVyKTsK
KwogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBkbyByZW5kZXIgdHJlZSBtdXRhdGlvbnMgdGhhdCBy
ZXF1aXJlIGRlc2NlbmRhbnQgcmVuZGVyZXJzLgotICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKnJl
bmRlcmVyKSkKLSAgICAgICAgRmlyc3RMZXR0ZXI6OnVwZGF0ZShkb3duY2FzdDxSZW5kZXJCbG9j
az4oKnJlbmRlcmVyKSk7CiAgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPigqcmVuZGVyZXIpKQog
ICAgICAgICBMaXN0SXRlbTo6dXBkYXRlTWFya2VyKG1fYnVpbGRlciwgZG93bmNhc3Q8UmVuZGVy
TGlzdEl0ZW0+KCpyZW5kZXJlcikpOwogICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5k
ZXJlcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZVVwZGF0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZVVwZGF0ZXIuaAkocmV2aXNpb24gMjI2MTM1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duUmVuZGVy
ZXJzKEVsZW1lbnQmKTsKICAgICBzdGF0aWMgdm9pZCB0ZWFyRG93blJlbmRlcmVyKFRleHQmKTsK
IAotICAgIGNsYXNzIEZpcnN0TGV0dGVyOwogICAgIGNsYXNzIExpc3RJdGVtOwogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRh
dGVyRmlyc3RMZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcAkocmV2aXNpb24gMjI2
MTM1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRh
dGVyRmlyc3RMZXR0ZXIuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjU3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAg
ICAgICAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQotICogQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTEsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJl
ZVVwZGF0ZXJGaXJzdExldHRlci5oIgotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgotI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlclJ1YnlSdW4uaCIKLSNpbmNsdWRlICJS
ZW5kZXJTVkdUZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUYWJsZS5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgotI2luY2x1ZGUgIlJl
bmRlclRyZWVCdWlsZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJlbmRl
clN0eWxlIHN0eWxlRm9yRmlyc3RMZXR0ZXIoY29uc3QgUmVuZGVyQmxvY2smIGZpcnN0TGV0dGVy
QmxvY2ssIGNvbnN0IFJlbmRlck9iamVjdCYgZmlyc3RMZXR0ZXJDb250YWluZXIpCi17Ci0gICAg
YXV0byogY29udGFpbmVyRmlyc3RMZXR0ZXJTdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2suZ2V0Q2Fj
aGVkUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSLCAmZmlyc3RMZXR0ZXJDb250YWluZXIuZmlyc3RM
aW5lU3R5bGUoKSk7Ci0gICAgLy8gRklYTUU6IFRoZXJlIGFwcGVhcnMgdG8gYmUgc29tZSBwYXRo
IHdoZXJlIHdlIGhhdmUgYSBmaXJzdCBsZXR0ZXIgcmVuZGVyZXIgd2l0aG91dCBmaXJzdCBsZXR0
ZXIgc3R5bGUuCi0gICAgQVNTRVJUKGNvbnRhaW5lckZpcnN0TGV0dGVyU3R5bGUpOwotICAgIGF1
dG8gZmlyc3RMZXR0ZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShjb250YWluZXJGaXJzdExl
dHRlclN0eWxlID8gKmNvbnRhaW5lckZpcnN0TGV0dGVyU3R5bGUgOiBmaXJzdExldHRlckNvbnRh
aW5lci5maXJzdExpbmVTdHlsZSgpKTsKLQotICAgIC8vIElmIHdlIGhhdmUgYW4gaW5pdGlhbCBs
ZXR0ZXIgZHJvcCB0aGF0IGlzID49IDEsIHRoZW4gd2UgbmVlZCB0byBmb3JjZSBmbG9hdGluZyB0
byBiZSBvbi4KLSAgICBpZiAoZmlyc3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0dGVyRHJvcCgpID49
IDEgJiYgIWZpcnN0TGV0dGVyU3R5bGUuaXNGbG9hdGluZygpKQotICAgICAgICBmaXJzdExldHRl
clN0eWxlLnNldEZsb2F0aW5nKGZpcnN0TGV0dGVyU3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gTGVmdEZsb2F0IDogUmlnaHRGbG9hdCk7Ci0KLSAgICAvLyBXZSBoYXZlIHRvIGNvbXB1
dGUgdGhlIGNvcnJlY3QgZm9udC1zaXplIGZvciB0aGUgZmlyc3QtbGV0dGVyIGlmIGl0IGhhcyBh
biBpbml0aWFsIGxldHRlciBoZWlnaHQgc2V0LgotICAgIGF1dG8qIHBhcmFncmFwaCA9IGZpcnN0
TGV0dGVyQ29udGFpbmVyLmlzUmVuZGVyQmxvY2tGbG93KCkgPyAmZmlyc3RMZXR0ZXJDb250YWlu
ZXIgOiBmaXJzdExldHRlckNvbnRhaW5lci5jb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoZmly
c3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0dGVySGVpZ2h0KCkgPj0gMSAmJiBmaXJzdExldHRlclN0
eWxlLmZvbnRNZXRyaWNzKCkuaGFzQ2FwSGVpZ2h0KCkgJiYgcGFyYWdyYXBoLT5zdHlsZSgpLmZv
bnRNZXRyaWNzKCkuaGFzQ2FwSGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEZvciBpZGVv
Z3JhcGhpYyBiYXNlbGluZXMsIHdlIHdhbnQgdG8gZ28gZnJvbSBsaW5lIGVkZ2UgdG8gbGluZSBl
ZGdlLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKE4tMSkqbGluZS1oZWlnaHQgKyB0aGUgZm9udCBo
ZWlnaHQuCi0gICAgICAgIC8vIFdlIGRvbid0IHlldCBzdXBwb3J0IGlkZW9ncmFwaGljIGJhc2Vs
aW5lcy4KLSAgICAgICAgLy8gRm9yIGFuIE4tbGluZSBmaXJzdC1sZXR0ZXIgYW5kIGZvciBhbHBo
YWJldGljIGJhc2VsaW5lcywgdGhlIGNhcC1oZWlnaHQgb2YgdGhlIGZpcnN0IGxldHRlciBuZWVk
cyB0byBlcXVhbCAoTi0xKSpsaW5lLWhlaWdodCBvZiBwYXJhZ3JhcGggbGluZXMgKyBjYXAtaGVp
Z2h0IG9mIHRoZSBwYXJhZ3JhcGgKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgd2UgY2FuJ3Qg
cmVseSBvbiBmb250LXNpemUsIHNpbmNlIGZvbnQoKS5oZWlnaHQoKSBkb2Vzbid0IG5lY2Vzc2Fy
aWx5IG1hdGNoLiBGb3IgcmVsaWFiaWxpdHksIHRoZSBiZXN0IGFwcHJvYWNoIGlzIHNpbXBseSB0
bwotICAgICAgICAvLyBjb21wYXJlIHRoZSBmaW5hbCBtZWFzdXJlZCBjYXAtaGVpZ2h0cyBvZiB0
aGUgdHdvIGZvbnRzIGluIG9yZGVyIHRvIGdldCB0byB0aGUgY2xvc2VzdCBwb3NzaWJsZSB2YWx1
ZS4KLSAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29u
dGFpbkluaXRpYWxMZXR0ZXIpOwotICAgICAgICBpbnQgbGluZUhlaWdodCA9IHBhcmFncmFwaC0+
c3R5bGUoKS5jb21wdXRlZExpbmVIZWlnaHQoKTsKLQotICAgICAgICAvLyBTZXQgdGhlIGZvbnQg
dG8gYmUgb25lIGxpbmUgdG9vIGJpZyBhbmQgdGhlbiByYXRjaGV0IGJhY2sgdG8gZ2V0IHRvIGEg
cHJlY2lzZSBmaXQuIFdlIGNhbid0IGp1c3Qgc2V0IHRoZSBkZXNpcmVkIGZvbnQgc2l6ZSBiYXNl
ZCBvZmYgZm9udCBoZWlnaHQgbWV0cmljcwotICAgICAgICAvLyBiZWNhdXNlIG1hbnkgZm9udHMg
YmFrZSBhc2NlbnQgaW50byB0aGUgZm9udCBtZXRyaWNzLiBUaGVyZWZvcmUgd2UgaGF2ZSB0byBs
b29rIGF0IGFjdHVhbCBtZWFzdXJlZCBjYXAgaGVpZ2h0IHZhbHVlcyBpbiBvcmRlciB0byBrbm93
IHdoZW4gd2UgaGF2ZSBhIGdvb2QgZml0LgotICAgICAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlv
biA9IGZpcnN0TGV0dGVyU3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZsb2F0IGNh
cFJhdGlvID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmZsb2F0Q2FwSGVpZ2h0KCkg
LyBmaXJzdExldHRlclN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpOwotICAgICAgICBmbG9h
dCBzdGFydGluZ0ZvbnRTaXplID0gKChmaXJzdExldHRlclN0eWxlLmluaXRpYWxMZXR0ZXJIZWln
aHQoKSAtIDEpICogbGluZUhlaWdodCArIHBhcmFncmFwaC0+c3R5bGUoKS5mb250TWV0cmljcygp
LmNhcEhlaWdodCgpKSAvIGNhcFJhdGlvOwotICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0
U3BlY2lmaWVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKLSAgICAgICAgbmV3Rm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKLSAgICAgICAgZmlyc3RMZXR0
ZXJTdHlsZS5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAg
Zmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmaXJzdExldHRlclN0eWxlLmZv
bnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwotCi0gICAgICAgIGludCBkZXNpcmVkQ2FwSGVp
Z2h0ID0gKGZpcnN0TGV0dGVyU3R5bGUuaW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkgKiBsaW5l
SGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7Ci0g
ICAgICAgIGludCBhY3R1YWxDYXBIZWlnaHQgPSBmaXJzdExldHRlclN0eWxlLmZvbnRNZXRyaWNz
KCkuY2FwSGVpZ2h0KCk7Ci0gICAgICAgIHdoaWxlIChhY3R1YWxDYXBIZWlnaHQgPiBkZXNpcmVk
Q2FwSGVpZ2h0KSB7Ci0gICAgICAgICAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IGZpcnN0
TGV0dGVyU3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBuZXdGb250RGVzY3Jp
cHRpb24uc2V0U3BlY2lmaWVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgp
IC0gMSk7Ci0gICAgICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5l
d0ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAtMSk7Ci0gICAgICAgICAgICBmaXJzdExl
dHRlclN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwotICAgICAg
ICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmaXJzdExldHRlclN0
eWxlLmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCkpOwotICAgICAgICAgICAgYWN0dWFsQ2Fw
SGVpZ2h0ID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gRm9yY2UgaW5saW5lIGRpc3BsYXkgKGV4Y2VwdCBmb3Ig
ZmxvYXRpbmcgZmlyc3QtbGV0dGVycykuCi0gICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXREaXNwbGF5
KGZpcnN0TGV0dGVyU3R5bGUuaXNGbG9hdGluZygpID8gQkxPQ0sgOiBJTkxJTkUpOwotICAgIC8v
IENTUzIgc2F5cyBmaXJzdC1sZXR0ZXIgY2FuJ3QgYmUgcG9zaXRpb25lZC4KLSAgICBmaXJzdExl
dHRlclN0eWxlLnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKLSAgICByZXR1cm4gZmlyc3RM
ZXR0ZXJTdHlsZTsKLX0KLQotLy8gQ1NTIDIuMSBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9z
ZWxlY3Rvci5odG1sI2ZpcnN0LWxldHRlcgotLy8gIlB1bmN0dWF0aW9uIChpLmUsIGNoYXJhY3Rl
cnMgZGVmaW5lZCBpbiBVbmljb2RlIFtVTklDT0RFXSBpbiB0aGUgIm9wZW4iIChQcyksICJjbG9z
ZSIgKFBlKSwKLS8vICJpbml0aWFsIiAoUGkpLiAiZmluYWwiIChQZikgYW5kICJvdGhlciIgKFBv
KSBwdW5jdHVhdGlvbiBjbGFzc2VzKSwgdGhhdCBwcmVjZWRlcyBvciBmb2xsb3dzIHRoZSBmaXJz
dCBsZXR0ZXIgc2hvdWxkIGJlIGluY2x1ZGVkIgotc3RhdGljIGlubGluZSBib29sIGlzUHVuY3R1
YXRpb25Gb3JGaXJzdExldHRlcihVQ2hhciBjKQotewotICAgIHJldHVybiBVX0dFVF9HQ19NQVNL
KGMpICYgKFVfR0NfUFNfTUFTSyB8IFVfR0NfUEVfTUFTSyB8IFVfR0NfUElfTUFTSyB8IFVfR0Nf
UEZfTUFTSyB8IFVfR0NfUE9fTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRT
a2lwRm9yRmlyc3RMZXR0ZXIoVUNoYXIgYykKLXsKLSAgICByZXR1cm4gaXNTcGFjZU9yTmV3bGlu
ZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSB8fCBpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIo
Yyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUoUmVuZGVyQmxvY2sm
IGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlck9iamVjdCYgY3VycmVudENoaWxkKQotewotICAgIFJl
bmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyID0gY3VycmVudENoaWxkLnBhcmVudCgpOwotICAgIEFT
U0VSVChmaXJzdExldHRlci0+aXNGaXJzdExldHRlcigpKTsKLQotICAgIFJlbmRlckVsZW1lbnQq
IGZpcnN0TGV0dGVyQ29udGFpbmVyID0gZmlyc3RMZXR0ZXItPnBhcmVudCgpOwotICAgIGF1dG8g
cHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssICpmaXJz
dExldHRlckNvbnRhaW5lcik7Ci0gICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0Zsb2F0aW5nKCkg
fHwgZmlyc3RMZXR0ZXItPmlzSW5saW5lKCkpOwotCi0gICAgaWYgKFN0eWxlOjpkZXRlcm1pbmVD
aGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBzZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0YWNo
KSB7Ci0gICAgICAgIC8vIFRoZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgbmVlZHMgdG8gYmUgcmVw
bGFjZWQuIENyZWF0ZSBhIG5ldyByZW5kZXJlciBvZiB0aGUgcmlnaHQgdHlwZS4KLSAgICAgICAg
UmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBuZXdGaXJzdExldHRlcjsKLSAgICAgICAg
aWYgKHBzZXVkb1N0eWxlLmRpc3BsYXkoKSA9PSBJTkxJTkUpCi0gICAgICAgICAgICBuZXdGaXJz
dExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlcklubGluZT4oZmlyc3RMZXR0ZXJCbG9jay5k
b2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG5ld0ZpcnN0TGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93PihmaXJz
dExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRvU3R5bGUpKTsKLSAgICAgICAg
bmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgICAgICBuZXdGaXJzdExldHRl
ci0+c2V0SXNGaXJzdExldHRlcigpOwotCi0gICAgICAgIC8vIE1vdmUgdGhlIGZpcnN0IGxldHRl
ciBpbnRvIHRoZSBuZXcgcmVuZGVyZXIuCi0gICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNo
aWxkID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hpbGQoKSkgewotICAgICAgICAgICAgaWYgKGlzPFJl
bmRlclRleHQ+KCpjaGlsZCkpCi0gICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4o
KmNoaWxkKS5yZW1vdmVBbmREZXN0cm95VGV4dEJveGVzKCk7Ci0gICAgICAgICAgICBhdXRvIHRv
TW92ZSA9IGZpcnN0TGV0dGVyLT50YWtlQ2hpbGQoKmNoaWxkKTsKLSAgICAgICAgICAgIFJlbmRl
clRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKCpuZXdGaXJzdExldHRlciwgV1RG
TW92ZSh0b01vdmUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlck9iamVjdCogbmV4dFNp
YmxpbmcgPSBmaXJzdExldHRlci0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKFJlbmRlclRl
eHRGcmFnbWVudCogcmVtYWluaW5nVGV4dCA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0
PigqZmlyc3RMZXR0ZXIpLmZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dCgpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQocmVtYWluaW5nVGV4dC0+aXNBbm9ueW1vdXMoKSB8fCByZW1haW5pbmdUZXh0LT50
ZXh0Tm9kZSgpLT5yZW5kZXJlcigpID09IHJlbWFpbmluZ1RleHQpOwotICAgICAgICAgICAgLy8g
UmVwbGFjZSB0aGUgb2xkIHJlbmRlcmVyIHdpdGggdGhlIG5ldyBvbmUuCi0gICAgICAgICAgICBy
ZW1haW5pbmdUZXh0LT5zZXRGaXJzdExldHRlcigqbmV3Rmlyc3RMZXR0ZXIpOwotICAgICAgICAg
ICAgbmV3Rmlyc3RMZXR0ZXItPnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dCgqcmVtYWluaW5n
VGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmlyc3RMZXR0ZXJDb250YWluZXItPnJlbW92ZUFu
ZERlc3Ryb3lDaGlsZCgqZmlyc3RMZXR0ZXIpOwotICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6
Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250YWluZXIsIFdURk1vdmUobmV3
Rmlyc3RMZXR0ZXIpLCBuZXh0U2libGluZyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZpcnN0TGV0
dGVyLT5zZXRTdHlsZShXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNy
ZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoUmVuZGVyQmxvY2smIGZpcnN0TGV0dGVyQmxvY2ssIFJl
bmRlclRleHQmIGN1cnJlbnRUZXh0Q2hpbGQpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogZmlyc3RM
ZXR0ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENoaWxkLnBhcmVudCgpOwotICAgIGF1dG8gcHNl
dWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssICpmaXJzdExl
dHRlckNvbnRhaW5lcik7Ci0gICAgUmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBuZXdG
aXJzdExldHRlcjsKLSAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKLSAg
ICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJJbmxpbmU+KGZpcnN0
TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOwotICAgIGVsc2UK
LSAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+
KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOwotICAg
IG5ld0ZpcnN0TGV0dGVyLT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICBuZXdGaXJzdExldHRlci0+
c2V0SXNGaXJzdExldHRlcigpOwotCi0gICAgYXV0byYgZmlyc3RMZXR0ZXIgPSAqbmV3Rmlyc3RM
ZXR0ZXI7Ci0gICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoKmZp
cnN0TGV0dGVyQ29udGFpbmVyLCBXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgJmN1cnJlbnRUZXh0
Q2hpbGQpOwotCi0gICAgLy8gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyBnb2luZyB0byBiZSBlaXRo
ZXIgYSBnZW5lcmF0ZWQgY29udGVudCBzdHJpbmcgb3IgYSBET00gbm9kZSdzCi0gICAgLy8gc3Ry
aW5nLiBXZSB3YW50IHRoZSBvcmlnaW5hbCBzdHJpbmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1l
ZCBpbiBjYXNlIGZpcnN0LWxldHRlciBoYXMKLSAgICAvLyBubyB0ZXh0LXRyYW5zZm9ybSBvciBh
IGRpZmZlcmVudCB0ZXh0LXRyYW5zZm9ybSBhcHBsaWVkIHRvIGl0LgotICAgIFN0cmluZyBvbGRU
ZXh0ID0gY3VycmVudFRleHRDaGlsZC5vcmlnaW5hbFRleHQoKTsKLSAgICBBU1NFUlQoIW9sZFRl
eHQuaXNOdWxsKCkpOwotCi0gICAgaWYgKCFvbGRUZXh0LmlzRW1wdHkoKSkgewotICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSAwOwotCi0gICAgICAgIC8vIEFjY291bnQgZm9yIGxlYWRpbmcgc3Bh
Y2VzIGFuZCBwdW5jdHVhdGlvbi4KLSAgICAgICAgd2hpbGUgKGxlbmd0aCA8IG9sZFRleHQubGVu
Z3RoKCkgJiYgc2hvdWxkU2tpcEZvckZpcnN0TGV0dGVyKG9sZFRleHRbbGVuZ3RoXSkpCi0gICAg
ICAgICAgICBsZW5ndGgrKzsKLQotICAgICAgICAvLyBBY2NvdW50IGZvciBmaXJzdCBncmFwaGVt
ZSBjbHVzdGVyLgotICAgICAgICBsZW5ndGggKz0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVz
dGVycyhTdHJpbmdWaWV3KG9sZFRleHQpLnN1YnN0cmluZyhsZW5ndGgpLCAxKTsKLQotICAgICAg
ICAvLyBLZWVwIGxvb2tpbmcgZm9yIHdoaXRlc3BhY2UgYW5kIGFsbG93ZWQgcHVuY3R1YXRpb24s
IGJ1dCBhdm9pZAotICAgICAgICAvLyBhY2N1bXVsYXRpbmcganVzdCB3aGl0ZXNwYWNlIGludG8g
dGhlIDpmaXJzdC1sZXR0ZXIuCi0gICAgICAgIGZvciAodW5zaWduZWQgc2Nhbkxlbmd0aCA9IGxl
bmd0aDsgc2Nhbkxlbmd0aCA8IG9sZFRleHQubGVuZ3RoKCk7ICsrc2Nhbkxlbmd0aCkgewotICAg
ICAgICAgICAgVUNoYXIgYyA9IG9sZFRleHRbc2Nhbkxlbmd0aF07Ci0KLSAgICAgICAgICAgIGlm
ICghc2hvdWxkU2tpcEZvckZpcnN0TGV0dGVyKGMpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBpZiAoaXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKGMpKQotICAgICAg
ICAgICAgICAgIGxlbmd0aCA9IHNjYW5MZW5ndGggKyAxOwotICAgICAgICB9Ci0KLSAgICAgICAg
YXV0byogdGV4dE5vZGUgPSBjdXJyZW50VGV4dENoaWxkLnRleHROb2RlKCk7Ci0gICAgICAgIGF1
dG8qIGJlZm9yZUNoaWxkID0gY3VycmVudFRleHRDaGlsZC5uZXh0U2libGluZygpOwotICAgICAg
ICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKGN1cnJlbnRUZXh0
Q2hpbGQpOwotCi0gICAgICAgIC8vIENvbnN0cnVjdCBhIHRleHQgZnJhZ21lbnQgZm9yIHRoZSB0
ZXh0IGFmdGVyIHRoZSBmaXJzdCBsZXR0ZXIuCi0gICAgICAgIC8vIFRoaXMgdGV4dCBmcmFnbWVu
dCBtaWdodCBiZSBlbXB0eS4KLSAgICAgICAgUmVuZGVyUHRyPFJlbmRlclRleHRGcmFnbWVudD4g
bmV3UmVtYWluaW5nVGV4dDsKLSAgICAgICAgaWYgKHRleHROb2RlKSB7Ci0gICAgICAgICAgICBu
ZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PigqdGV4
dE5vZGUsIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7Ci0gICAg
ICAgICAgICB0ZXh0Tm9kZS0+c2V0UmVuZGVyZXIobmV3UmVtYWluaW5nVGV4dC5nZXQoKSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmV3UmVtYWluaW5nVGV4dCA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclRleHRGcmFnbWVudD4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRU
ZXh0LCBsZW5ndGgsIG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOwotCi0gICAgICAgIFJlbmRl
clRleHRGcmFnbWVudCYgcmVtYWluaW5nVGV4dCA9ICpuZXdSZW1haW5pbmdUZXh0OwotICAgICAg
ICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJD
b250YWluZXIsIFdURk1vdmUobmV3UmVtYWluaW5nVGV4dCksIGJlZm9yZUNoaWxkKTsKLSAgICAg
ICAgcmVtYWluaW5nVGV4dC5zZXRGaXJzdExldHRlcihmaXJzdExldHRlcik7Ci0gICAgICAgIGZp
cnN0TGV0dGVyLnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsKLQot
ICAgICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3IgdGhlIGZpcnN0IGxldHRlcgot
ICAgICAgICBhdXRvIGxldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRGcmFnbWVudD4o
Zmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOwotCi0gICAg
ICAgIFJlbmRlclRyZWVCdWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKGZpcnN0TGV0dGVy
LCBXVEZNb3ZlKGxldHRlcikpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgc3VwcG9ydHNGaXJz
dExldHRlcihSZW5kZXJCbG9jayYgYmxvY2spCi17Ci0gICAgaWYgKGlzPFJlbmRlckJ1dHRvbj4o
YmxvY2spKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxv
dz4oYmxvY2spKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlzPFJlbmRlclNWR1Rl
eHQ+KGJsb2NrKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChpczxSZW5kZXJSdWJ5
UnVuPihibG9jaykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYmxvY2suY2Fu
SGF2ZUdlbmVyYXRlZENoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OkZp
cnN0TGV0dGVyOjp1cGRhdGUoUmVuZGVyQmxvY2smIGJsb2NrKQotewotICAgIGlmICghYmxvY2su
c3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCFzdXBwb3J0c0ZpcnN0TGV0dGVyKGJsb2NrKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQsIGZpcnN0TGV0dGVyQ29udGFp
bmVyIGlzIG5vdCBuZWVkZWQuCi0gICAgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlclJlbmRlcmVy
OwotICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29udGFpbmVyOwotICAgIGJsb2NrLmdl
dEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyUmVuZGVyZXIsIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsK
LQotICAgIGlmICghZmlyc3RMZXR0ZXJSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gT3RoZXIgY29udGFpbmVycyBhcmUgaGFuZGxlZCB3aGVuIHVwZGF0aW5nIHRoZWlyIHJlbmRl
cmVycy4KLSAgICBpZiAoJmJsb2NrICE9IGZpcnN0TGV0dGVyQ29udGFpbmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgY2hpbGQgYWxyZWFkeSBoYXMgc3R5bGUsIHRoZW4gaXQg
aGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLCBzbyB3ZSBqdXN0IHdhbnQKLSAgICAvLyB0byB1cGRh
dGUgaXQuCi0gICAgaWYgKGZpcnN0TGV0dGVyUmVuZGVyZXItPnBhcmVudCgpLT5zdHlsZSgpLnN0
eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUikgewotICAgICAgICB1cGRhdGVGaXJzdExldHRlclN0
eWxlKGJsb2NrLCAqZmlyc3RMZXR0ZXJSZW5kZXJlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIWlzPFJlbmRlclRleHQ+KGZpcnN0TGV0dGVyUmVuZGVyZXIpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKGJsb2NrLCBkb3duY2Fz
dDxSZW5kZXJUZXh0PigqZmlyc3RMZXR0ZXJSZW5kZXJlcikpOwotfQotCi19OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVu
ZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oCShyZXZpc2lvbiAyMjYxMzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5o
CShub25leGlzdGVudCkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBSZW5kZXJCbG9jazsKLQotY2xhc3MgUmVuZGVyVHJlZVVwZGF0ZXI6OkZpcnN0
TGV0dGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGUoUmVuZGVyQmxvY2smKTsK
LX07Ci0KLX0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329840</attachid>
            <date>2017-12-19 15:18:22 -0800</date>
            <delta_ts>2017-12-19 17:44:41 -0800</delta_ts>
            <desc>patch</desc>
            <filename>rtb-updateafterdescendants-5.patch</filename>
            <type>text/plain</type>
            <size>54193</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNjE0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE3LTEyLTE5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGZpcnN0LWxldHRlciBi
dWlsZGluZyBjb2RlIHRvIFJlbmRlclRyZWVCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTIKKworICAgICAgICBSZXZpZXdlZCBieSBa
YWxhbiBCdWp0YXMuCisKKyAgICAgICAgQWxsIHNwZWNpYWwgY2FzZSB0cmVlIGJ1aWxkaW5nIGxv
Z2ljIHNob3VsZCBnbyB0byBSZW5kZXJUcmVlQnVpbGRlci4KKworICAgICAgICAtIFJlbmRlclRy
ZWVVcGRhdGVyOjpGaXJzdExldHRlciAtPiBSZW5kZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0ZXIK
KyAgICAgICAgLSBNYWtlIHRoZSBidWlsZGVyIG5vbi1zdGF0aWMgYW5kIHN0b3AgdXNpbmcgUmVu
ZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKSB0aGVyZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiByZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1
dG9TaXppbmdWYWx1ZTo6YWRqdXN0VGV4dE5vZGVTaXplcyk6CisgICAgICAgICogcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVCdWlsZGVyOjpSZW5kZXJUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJl
ZUJ1aWxkZXI6OnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMpOgorICAgICAgICAqIHJlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJl
ZUJ1aWxkZXI6OmZpcnN0TGV0dGVyQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
cmVlQnVpbGRlcjo6dGFibGVCdWlsZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5jcHA6IENvcGllZCBmcm9tIHJlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OnN1cHBvcnRzRmlyc3RMZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1
aWxkZXI6OkZpcnN0TGV0dGVyOjpGaXJzdExldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0ZXI6OnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OkZpcnN0TGV0dGVyOjp1cGRhdGVTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6Rmlyc3RMZXR0ZXI6OmNy
ZWF0ZVJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVGaXJzdExldHRlclN0eWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OkZpcnN0TGV0
dGVyOjp1cGRhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmg6IENvcGllZCBmcm9tIHJlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmguCisgICAgICAgICogcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRy
ZWVVcGRhdGVyOjp1cGRhdGVBZnRlckRlc2NlbmRhbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaDogUmVtb3Zl
ZC4KKwogMjAxNy0xMi0xOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBoYXRjaGVyLm5hbWU+
CiAKICAgICAgICAgQnVpbGQgZmFpbHVyZSBpbiBXZWJHTDIgd2hlbiBWaWRlbyBmZWF0dXJlIGlz
IGRpc2FibGVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI2MTQ3KQorKysgU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE5ODAsMTAgKzE5ODAsMTAg
QEAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCiByZW5kZXJpbmcvc3Zn
L1NWR1RleHRRdWVyeS5jcHAKIAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVy
LmNwcAorcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3Bw
CiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJUYWJsZS5jcHAKIHJlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlUG9zaXRpb24uY3BwCiByZW5kZXJpbmcvdXBkYXRpbmcvUmVu
ZGVyVHJlZVVwZGF0ZXIuY3BwCi1yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJG
aXJzdExldHRlci5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckdlbmVy
YXRlZENvbnRlbnQuY3BwCiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0
SXRlbS5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1u
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjI2MTQ3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTc4LDcgKzQ1Nzgs
NyBAQAogCQlFNDdDMzkyRDFGRTZFMEYzMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTJBMUZF
NkUwREUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlci5oICovOyB9OwogCQlFNDdDMzkyRTFG
RTZFMEY3MDBCQkJDNkIgLyogUmVuZGVyVHJlZVBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyNDFGRTZFMERCMDBCQkJDNkIgLyog
UmVuZGVyVHJlZVBvc2l0aW9uLmggKi87IH07CiAJCUU0N0MzOTJGMUZFNkUwRjkwMEJCQkM2QiAv
KiBSZW5kZXJUcmVlVXBkYXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ3QzM5MkMxRkU2RTBERjAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVy
LmggKi87IH07Ci0JCUU0N0MzOTMwMUZFNkUwRkQwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRl
ckZpcnN0TGV0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExl
dHRlci5oICovOyB9OworCQlFNDdDMzkzMDFGRTZFMEZEMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1
aWxkZXJGaXJzdExldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ3QzM5MjYxRkU2RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyRmly
c3RMZXR0ZXIuaCAqLzsgfTsKIAkJRTQ3QzM5MzExRkU2RTEwMjAwQkJCQzZCIC8qIFJlbmRlclRy
ZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ3QzM5MjUxRkU2RTBEQjAwQkJCQzZCIC8qIFJlbmRlclRyZWVV
cGRhdGVyR2VuZXJhdGVkQ29udGVudC5oICovOyB9OwogCQlFNDdDMzkzMjFGRTZFMTA1MDBCQkJD
NkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QzM5MjgxRkU2RTBERDAwQkJCQzZCIC8qIFJlbmRl
clRyZWVVcGRhdGVyTGlzdEl0ZW0uaCAqLzsgfTsKIAkJRTQ3QzM5MzMxRkU2RTEwODAwQkJCQzZC
IC8qIFJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI3MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5k
ZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmggKi87IH07CkBAIC0xMzkwNiwxMiArMTM5MDYsMTIg
QEAKIAkJRTQ3QjRCRTcwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJlc291cmNlSGFu
ZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QzM5MUYxRkU2RTBEODAw
QkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQ3QzM5MjAxRkU2RTBEOTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTQ3QzM5MjExRkU2RTBEQTAwQkJC
QzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0N0MzOTIxMUZFNkUwREEwMEJCQkM2QiAvKiBS
ZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDdDMzkyMjFGRTZFMERBMDBCQkJDNkIgLyogUmVuZGVyVHJl
ZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0MzOTIzMUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJU
cmVlVXBkYXRlck11bHRpQ29sdW1uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDdDMzkyNDFGRTZFMERCMDBCQkJDNkIgLyogUmVuZGVyVHJlZVBvc2l0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVQb3NpdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdDMzkyNTFGRTZFMERCMDBCQkJD
NkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyog
UmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUU0N0MzOTI2MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRl
ckZpcnN0TGV0dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRy
ZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3
QzM5MjcxRkU2RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNv
bHVtbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdDMzkyODFGRTZFMEREMDBC
QkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlckxpc3RJdGVtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0N0MzOTI5MUZFNkUwREUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlUG9z
aXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJl
ZVBvc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NTEzLDE0ICsy
NDUxMywxNCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRTQ3QzM5MjAxRkU2RTBEOTAwQkJCQzZC
IC8qIFJlbmRlclRyZWVCdWlsZGVyLmNwcCAqLywKIAkJCQlFNDdDMzkyQTFGRTZFMERFMDBCQkJD
NkIgLyogUmVuZGVyVHJlZUJ1aWxkZXIuaCAqLywKKwkJCQlFNDdDMzkyMTFGRTZFMERBMDBCQkJD
NkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5jcHAgKi8sCisJCQkJRTQ3QzM5MjYx
RkU2RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaCAqLywKIAkJ
CQkxMTkzNDA3NjFGRThCOTIzMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJUYWJsZS5jcHAg
Ki8sCiAJCQkJMTE5MzQwNzcxRkU4QjkyMzAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyVGFi
bGUuaCAqLywKIAkJCQlFNDdDMzkyOTFGRTZFMERFMDBCQkJDNkIgLyogUmVuZGVyVHJlZVBvc2l0
aW9uLmNwcCAqLywKIAkJCQlFNDdDMzkyNDFGRTZFMERCMDBCQkJDNkIgLyogUmVuZGVyVHJlZVBv
c2l0aW9uLmggKi8sCiAJCQkJRTQ3QzM5MUYxRkU2RTBEODAwQkJCQzZCIC8qIFJlbmRlclRyZWVV
cGRhdGVyLmNwcCAqLywKIAkJCQlFNDdDMzkyQzFGRTZFMERGMDBCQkJDNkIgLyogUmVuZGVyVHJl
ZVVwZGF0ZXIuaCAqLywKLQkJCQlFNDdDMzkyMTFGRTZFMERBMDBCQkJDNkIgLyogUmVuZGVyVHJl
ZVVwZGF0ZXJGaXJzdExldHRlci5jcHAgKi8sCi0JCQkJRTQ3QzM5MjYxRkU2RTBEQzAwQkJCQzZC
IC8qIFJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCAqLywKIAkJCQlFNDdDMzkyMjFGRTZF
MERBMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcCAqLywK
IAkJCQlFNDdDMzkyNTFGRTZFMERCMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0
ZWRDb250ZW50LmggKi8sCiAJCQkJRTQ3QzM5MkIxRkU2RTBERjAwQkJCQzZCIC8qIFJlbmRlclRy
ZWVVcGRhdGVyTGlzdEl0ZW0uY3BwICovLApAQCAtMjcyMzgsNiArMjcyMzgsNyBAQAogCQkJCTk3
N0IzODc4MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwNzA3NTY4QzE0MjI2MkQ2MDA0MTQxNjEgLyogSFRNTFRyYWNrRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTc3QjM3MjYxMjI4NzIxNzAwQjgxRkY4IC8qIEhUTUxUcmVlQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ3QzM5MzAxRkU2RTBGRDAwQkJCQzZCIC8qIFJlbmRl
clRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUYyMEEx
OTE2REYwMEE4RUY1RiAvKiBIVE1MVUxpc3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDQ5OTE0MzE4RjA4MTUxMDBCRjAwOTIgLyogSFRNTFVua25vd25FbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDQ2MTNBQjBDRDYzMzEwMDBGQURBNzUgLyogSFRNTFZpZGVvRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yODkyOCw3ICsyODkyOSw2IEBACiAJCQkJMTE5MzQwNzkxRkU4
QjkyMzAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyVGFibGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0N0MzOTJFMUZFNkUwRjcwMEJCQkM2QiAvKiBSZW5kZXJUcmVlUG9zaXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0N0MzOTJGMUZFNkUwRjkwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBk
YXRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ3QzM5MzAxRkU2RTBGRDAwQkJCQzZCIC8qIFJl
bmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0MzOTMx
MUZFNkUxMDIwMEJCQkM2QiAvKiBSZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0N0MzOTMyMUZFNkUxMDUwMEJCQkM2QiAvKiBSZW5kZXJUcmVl
VXBkYXRlckxpc3RJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDdDMzkzMzFGRTZFMTA4MDBC
QkJDNkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHJldmlz
aW9uIDIyNjE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJl
ZUJ1aWxkZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIgogI2luY2x1ZGUgIlJlbmRl
clRyZWVVcGRhdGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKQEAg
LTE3Myw4ICsxNzMsNyBAQCBhdXRvIFRleHRBdXRvU2l6aW5nVmFsdWU6OmFkanVzdFRleHROb2Rl
CiAgICAgICAgIGF1dG8qIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyVGV4dEZyYWdtZW50Pih0ZXh0
UmVuZGVyZXIpLmJsb2NrRm9yQWNjb21wYW55aW5nRmlyc3RMZXR0ZXIoKTsKICAgICAgICAgaWYg
KCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBGSVhNRTogQWxsIHJl
bmRlciB0cmVlIG11dGF0aW9ucyBzaG91bGQgYmUgZG9uZSBieSBSZW5kZXJUcmVlVXBkYXRlciBj
b21taXQuCi0gICAgICAgIFJlbmRlclRyZWVVcGRhdGVyOjpGaXJzdExldHRlcjo6dXBkYXRlKCpi
bG9jayk7CisgICAgICAgIGJ1aWxkZXIudXBkYXRlQWZ0ZXJEZXNjZW5kYW50cygqYmxvY2spOwog
ICAgIH0KIAogICAgIHJldHVybiBzdGlsbEhhc05vZGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCShy
ZXZpc2lvbiAyMjYxNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVu
ZGVyVHJlZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw4IEBACiAjaW5j
bHVkZSAiUmVuZGVyUnVieVJ1bi5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlclRhYmxlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVHJlZVVwZGF0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw2ICs0MSw3
IEBAIFJlbmRlclRyZWVCdWlsZGVyKiBSZW5kZXJUcmVlQnVpbGRlcjo6c18KIAogUmVuZGVyVHJl
ZUJ1aWxkZXI6OlJlbmRlclRyZWVCdWlsZGVyKFJlbmRlclZpZXcmIHZpZXcpCiAgICAgOiBtX3Zp
ZXcodmlldykKKyAgICAsIG1fZmlyc3RMZXR0ZXJCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8Rmly
c3RMZXR0ZXI+KCp0aGlzKSkKICAgICAsIG1fdGFibGVCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8
VGFibGU+KCp0aGlzKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghc19jdXJyZW50IHx8ICZtX3Zp
ZXcgIT0gJnNfY3VycmVudC0+bV92aWV3KTsKQEAgLTYzLDEyICs2NCwxMiBAQCB2b2lkIFJlbmRl
clRyZWVCdWlsZGVyOjppbnNlcnRDaGlsZChSZW5kCiAgICAgfQogCiAgICAgaWYgKGlzPFJlbmRl
clRhYmxlUm93PihwYXJlbnQpKSB7Ci0gICAgICAgIG1fdGFibGVCdWlsZGVyLT5maW5kT3JDcmVh
dGVQYXJlbnRGb3JDaGlsZChkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4ocGFyZW50KSwgKmNoaWxk
LCBiZWZvcmVDaGlsZCkuYWRkQ2hpbGQoKnRoaXMsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGls
ZCk7CisgICAgICAgIHRhYmxlQnVpbGRlcigpLmZpbmRPckNyZWF0ZVBhcmVudEZvckNoaWxkKGRv
d25jYXN0PFJlbmRlclRhYmxlUm93PihwYXJlbnQpLCAqY2hpbGQsIGJlZm9yZUNoaWxkKS5hZGRD
aGlsZCgqdGhpcywgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rpb24+KHBhcmVudCkpIHsKLSAg
ICAgICAgYXV0byYgcGFyZW50Q2FuZGlkYXRlID0gbV90YWJsZUJ1aWxkZXItPmZpbmRPckNyZWF0
ZVBhcmVudEZvckNoaWxkKGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4ocGFyZW50KSwgKmNo
aWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIGF1dG8mIHBhcmVudENhbmRpZGF0ZSA9IHRhYmxl
QnVpbGRlcigpLmZpbmRPckNyZWF0ZVBhcmVudEZvckNoaWxkKGRvd25jYXN0PFJlbmRlclRhYmxl
U2VjdGlvbj4ocGFyZW50KSwgKmNoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIGlmICgmcGFy
ZW50ICE9ICZwYXJlbnRDYW5kaWRhdGUpIHsKICAgICAgICAgICAgIGluc2VydENoaWxkKHBhcmVu
dENhbmRpZGF0ZSwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTkwLDYgKzkxLDEyIEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6Omluc2VydENo
aWxkKFJlbmQKICAgICBpbnNlcnRDaGlsZChwb3NpdGlvbi5wYXJlbnQoKSwgV1RGTW92ZShjaGls
ZCksIHBvc2l0aW9uLm5leHRTaWJsaW5nKCkpOwogfQogCit2b2lkIFJlbmRlclRyZWVCdWlsZGVy
Ojp1cGRhdGVBZnRlckRlc2NlbmRhbnRzKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQoreworICAg
IGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQorICAgICAgICBmaXJzdExldHRlckJ1aWxk
ZXIoKS51cGRhdGVBZnRlckRlc2NlbmRhbnRzKGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJl
cikpOworfQorCiB2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpydWJ5UnVuSW5zZXJ0Q2hpbGQoUmVu
ZGVyUnVieVJ1biYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBpZiAoY2hpbGQtPmlzUnVieVRleHQoKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVCdWlsZGVyLmgJKHJldmlzaW9uIDIyNjE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwy
MCArNDAsMjggQEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0Q2hpbGQoUmVuZGVyRWxlbWVudCYg
cGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IG51bGxwdHIpOwogICAgIHZvaWQgaW5zZXJ0Q2hpbGQoUmVuZGVyVHJlZVBvc2l0aW9uJiwg
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4pOwogCisgICAgdm9pZCB1cGRhdGVBZnRlckRlc2NlbmRh
bnRzKFJlbmRlckVsZW1lbnQmKTsKKwogICAgIC8vIFRoaXMgYXZvaWRzIGhhdmluZyB0byBjb252
ZXJ0IGFsbCBzaXRlcyB0aGF0IG5lZWQgUmVuZGVyVHJlZUJ1aWxkZXIgaW4gb25lIGdvLgogICAg
IC8vIEZJWE1FOiBSZW1vdmUuCiAgICAgc3RhdGljIFJlbmRlclRyZWVCdWlsZGVyKiBjdXJyZW50
KCkgeyByZXR1cm4gc19jdXJyZW50OyB9CiAKIHByaXZhdGU6CisgICAgY2xhc3MgRmlyc3RMZXR0
ZXI7CiAgICAgY2xhc3MgVGFibGU7CiAKICAgICB2b2lkIHJ1YnlSdW5JbnNlcnRDaGlsZChSZW5k
ZXJSdWJ5UnVuJiwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpOwogCisgICAgRmlyc3RMZXR0ZXImIGZpcnN0TGV0dGVyQnVpbGRlcigpIHsg
cmV0dXJuICptX2ZpcnN0TGV0dGVyQnVpbGRlcjsgfQorICAgIFRhYmxlJiB0YWJsZUJ1aWxkZXIo
KSB7IHJldHVybiAqbV90YWJsZUJ1aWxkZXI7IH0KKwogICAgIFJlbmRlclZpZXcmIG1fdmlldzsK
IAogICAgIFJlbmRlclRyZWVCdWlsZGVyKiBtX3ByZXZpb3VzIHsgbnVsbHB0ciB9OwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxUYWJsZT4gbV90YWJsZUJ1aWxkZXI7CiAgICAgc3RhdGljIFJlbmRlclRy
ZWVCdWlsZGVyKiBzX2N1cnJlbnQ7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmlyc3RMZXR0ZXI+
IG1fZmlyc3RMZXR0ZXJCdWlsZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gbV90YWJs
ZUJ1aWxkZXI7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIu
Y3BwCShyZXZpc2lvbiAyMjYxNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcDoyMjYxNDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNyBE
YXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAz
LTIwMTEsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXJGaXJzdExl
dHRlci5oIgorCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9j
ay5oIgorI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5o
IgorI2luY2x1ZGUgIlJlbmRlclJ1YnlSdW4uaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUZXh0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJlbmRlclN0eWxlIHN0eWxlRm9y
Rmlyc3RMZXR0ZXIoY29uc3QgUmVuZGVyQmxvY2smIGZpcnN0TGV0dGVyQmxvY2ssIGNvbnN0IFJl
bmRlck9iamVjdCYgZmlyc3RMZXR0ZXJDb250YWluZXIpCit7CisgICAgYXV0byogY29udGFpbmVy
Rmlyc3RMZXR0ZXJTdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2suZ2V0Q2FjaGVkUHNldWRvU3R5bGUo
RklSU1RfTEVUVEVSLCAmZmlyc3RMZXR0ZXJDb250YWluZXIuZmlyc3RMaW5lU3R5bGUoKSk7Cisg
ICAgLy8gRklYTUU6IFRoZXJlIGFwcGVhcnMgdG8gYmUgc29tZSBwYXRoIHdoZXJlIHdlIGhhdmUg
YSBmaXJzdCBsZXR0ZXIgcmVuZGVyZXIgd2l0aG91dCBmaXJzdCBsZXR0ZXIgc3R5bGUuCisgICAg
QVNTRVJUKGNvbnRhaW5lckZpcnN0TGV0dGVyU3R5bGUpOworICAgIGF1dG8gZmlyc3RMZXR0ZXJT
dHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShjb250YWluZXJGaXJzdExldHRlclN0eWxlID8gKmNv
bnRhaW5lckZpcnN0TGV0dGVyU3R5bGUgOiBmaXJzdExldHRlckNvbnRhaW5lci5maXJzdExpbmVT
dHlsZSgpKTsKKworICAgIC8vIElmIHdlIGhhdmUgYW4gaW5pdGlhbCBsZXR0ZXIgZHJvcCB0aGF0
IGlzID49IDEsIHRoZW4gd2UgbmVlZCB0byBmb3JjZSBmbG9hdGluZyB0byBiZSBvbi4KKyAgICBp
ZiAoZmlyc3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0dGVyRHJvcCgpID49IDEgJiYgIWZpcnN0TGV0
dGVyU3R5bGUuaXNGbG9hdGluZygpKQorICAgICAgICBmaXJzdExldHRlclN0eWxlLnNldEZsb2F0
aW5nKGZpcnN0TGV0dGVyU3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTGVmdEZsb2F0
IDogUmlnaHRGbG9hdCk7CisKKyAgICAvLyBXZSBoYXZlIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3Qg
Zm9udC1zaXplIGZvciB0aGUgZmlyc3QtbGV0dGVyIGlmIGl0IGhhcyBhbiBpbml0aWFsIGxldHRl
ciBoZWlnaHQgc2V0LgorICAgIGF1dG8qIHBhcmFncmFwaCA9IGZpcnN0TGV0dGVyQ29udGFpbmVy
LmlzUmVuZGVyQmxvY2tGbG93KCkgPyAmZmlyc3RMZXR0ZXJDb250YWluZXIgOiBmaXJzdExldHRl
ckNvbnRhaW5lci5jb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoZmlyc3RMZXR0ZXJTdHlsZS5p
bml0aWFsTGV0dGVySGVpZ2h0KCkgPj0gMSAmJiBmaXJzdExldHRlclN0eWxlLmZvbnRNZXRyaWNz
KCkuaGFzQ2FwSGVpZ2h0KCkgJiYgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuaGFz
Q2FwSGVpZ2h0KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEZvciBpZGVvZ3JhcGhpYyBiYXNlbGlu
ZXMsIHdlIHdhbnQgdG8gZ28gZnJvbSBsaW5lIGVkZ2UgdG8gbGluZSBlZGdlLiBUaGlzIGlzIGVx
dWl2YWxlbnQgdG8gKE4tMSkqbGluZS1oZWlnaHQgKyB0aGUgZm9udCBoZWlnaHQuCisgICAgICAg
IC8vIFdlIGRvbid0IHlldCBzdXBwb3J0IGlkZW9ncmFwaGljIGJhc2VsaW5lcy4KKyAgICAgICAg
Ly8gRm9yIGFuIE4tbGluZSBmaXJzdC1sZXR0ZXIgYW5kIGZvciBhbHBoYWJldGljIGJhc2VsaW5l
cywgdGhlIGNhcC1oZWlnaHQgb2YgdGhlIGZpcnN0IGxldHRlciBuZWVkcyB0byBlcXVhbCAoTi0x
KSpsaW5lLWhlaWdodCBvZiBwYXJhZ3JhcGggbGluZXMgKyBjYXAtaGVpZ2h0IG9mIHRoZSBwYXJh
Z3JhcGgKKyAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgd2UgY2FuJ3QgcmVseSBvbiBmb250LXNp
emUsIHNpbmNlIGZvbnQoKS5oZWlnaHQoKSBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1hdGNoLiBGb3Ig
cmVsaWFiaWxpdHksIHRoZSBiZXN0IGFwcHJvYWNoIGlzIHNpbXBseSB0bworICAgICAgICAvLyBj
b21wYXJlIHRoZSBmaW5hbCBtZWFzdXJlZCBjYXAtaGVpZ2h0cyBvZiB0aGUgdHdvIGZvbnRzIGlu
IG9yZGVyIHRvIGdldCB0byB0aGUgY2xvc2VzdCBwb3NzaWJsZSB2YWx1ZS4KKyAgICAgICAgZmly
c3RMZXR0ZXJTdHlsZS5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbkluaXRpYWxMZXR0
ZXIpOworICAgICAgICBpbnQgbGluZUhlaWdodCA9IHBhcmFncmFwaC0+c3R5bGUoKS5jb21wdXRl
ZExpbmVIZWlnaHQoKTsKKworICAgICAgICAvLyBTZXQgdGhlIGZvbnQgdG8gYmUgb25lIGxpbmUg
dG9vIGJpZyBhbmQgdGhlbiByYXRjaGV0IGJhY2sgdG8gZ2V0IHRvIGEgcHJlY2lzZSBmaXQuIFdl
IGNhbid0IGp1c3Qgc2V0IHRoZSBkZXNpcmVkIGZvbnQgc2l6ZSBiYXNlZCBvZmYgZm9udCBoZWln
aHQgbWV0cmljcworICAgICAgICAvLyBiZWNhdXNlIG1hbnkgZm9udHMgYmFrZSBhc2NlbnQgaW50
byB0aGUgZm9udCBtZXRyaWNzLiBUaGVyZWZvcmUgd2UgaGF2ZSB0byBsb29rIGF0IGFjdHVhbCBt
ZWFzdXJlZCBjYXAgaGVpZ2h0IHZhbHVlcyBpbiBvcmRlciB0byBrbm93IHdoZW4gd2UgaGF2ZSBh
IGdvb2QgZml0LgorICAgICAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IGZpcnN0TGV0dGVy
U3R5bGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZsb2F0IGNhcFJhdGlvID0gZmlyc3RM
ZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmZsb2F0Q2FwSGVpZ2h0KCkgLyBmaXJzdExldHRlclN0
eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpOworICAgICAgICBmbG9hdCBzdGFydGluZ0ZvbnRT
aXplID0gKChmaXJzdExldHRlclN0eWxlLmluaXRpYWxMZXR0ZXJIZWlnaHQoKSAtIDEpICogbGlu
ZUhlaWdodCArIHBhcmFncmFwaC0+c3R5bGUoKS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpKSAv
IGNhcFJhdGlvOworICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShz
dGFydGluZ0ZvbnRTaXplKTsKKyAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKKyAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRGb250
RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgZmlyc3RMZXR0ZXJTdHls
ZS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmaXJzdExldHRlclN0eWxlLmZvbnRDYXNjYWRlKCkuZm9u
dFNlbGVjdG9yKCkpOworCisgICAgICAgIGludCBkZXNpcmVkQ2FwSGVpZ2h0ID0gKGZpcnN0TGV0
dGVyU3R5bGUuaW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkgKiBsaW5lSGVpZ2h0ICsgcGFyYWdy
YXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7CisgICAgICAgIGludCBhY3R1
YWxDYXBIZWlnaHQgPSBmaXJzdExldHRlclN0eWxlLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7
CisgICAgICAgIHdoaWxlIChhY3R1YWxDYXBIZWlnaHQgPiBkZXNpcmVkQ2FwSGVpZ2h0KSB7Cisg
ICAgICAgICAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IGZpcnN0TGV0dGVyU3R5bGUuZm9u
dERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0U3BlY2lm
aWVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpIC0gMSk7CisgICAgICAg
ICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSAtMSk7CisgICAgICAgICAgICBmaXJzdExldHRlclN0eWxlLnNldEZv
bnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgZmlyc3RMZXR0
ZXJTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZShmaXJzdExldHRlclN0eWxlLmZvbnRDYXNjYWRl
KCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgYWN0dWFsQ2FwSGVpZ2h0ID0gZmlyc3RM
ZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gRm9yY2UgaW5saW5lIGRpc3BsYXkgKGV4Y2VwdCBmb3IgZmxvYXRpbmcgZmlyc3Qt
bGV0dGVycykuCisgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXREaXNwbGF5KGZpcnN0TGV0dGVyU3R5
bGUuaXNGbG9hdGluZygpID8gQkxPQ0sgOiBJTkxJTkUpOworICAgIC8vIENTUzIgc2F5cyBmaXJz
dC1sZXR0ZXIgY2FuJ3QgYmUgcG9zaXRpb25lZC4KKyAgICBmaXJzdExldHRlclN0eWxlLnNldFBv
c2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKKyAgICByZXR1cm4gZmlyc3RMZXR0ZXJTdHlsZTsKK30K
KworLy8gQ1NTIDIuMSBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zZWxlY3Rvci5odG1sI2Zp
cnN0LWxldHRlcgorLy8gIlB1bmN0dWF0aW9uIChpLmUsIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiBV
bmljb2RlIFtVTklDT0RFXSBpbiB0aGUgIm9wZW4iIChQcyksICJjbG9zZSIgKFBlKSwKKy8vICJp
bml0aWFsIiAoUGkpLiAiZmluYWwiIChQZikgYW5kICJvdGhlciIgKFBvKSBwdW5jdHVhdGlvbiBj
bGFzc2VzKSwgdGhhdCBwcmVjZWRlcyBvciBmb2xsb3dzIHRoZSBmaXJzdCBsZXR0ZXIgc2hvdWxk
IGJlIGluY2x1ZGVkIgorc3RhdGljIGlubGluZSBib29sIGlzUHVuY3R1YXRpb25Gb3JGaXJzdExl
dHRlcihVQ2hhciBjKQoreworICAgIHJldHVybiBVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfUFNf
TUFTSyB8IFVfR0NfUEVfTUFTSyB8IFVfR0NfUElfTUFTSyB8IFVfR0NfUEZfTUFTSyB8IFVfR0Nf
UE9fTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRTa2lwRm9yRmlyc3RMZXR0
ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gaXNTcGFjZU9yTmV3bGluZShjKSB8fCBjID09IG5v
QnJlYWtTcGFjZSB8fCBpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoYyk7Cit9CisKK3N0YXRp
YyB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUoUmVuZGVyQmxvY2smIGZpcnN0TGV0dGVyQmxv
Y2ssIFJlbmRlck9iamVjdCYgY3VycmVudENoaWxkKQoreworICAgIFJlbmRlckVsZW1lbnQqIGZp
cnN0TGV0dGVyID0gY3VycmVudENoaWxkLnBhcmVudCgpOworICAgIEFTU0VSVChmaXJzdExldHRl
ci0+aXNGaXJzdExldHRlcigpKTsKKworICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29u
dGFpbmVyID0gZmlyc3RMZXR0ZXItPnBhcmVudCgpOworICAgIGF1dG8gcHNldWRvU3R5bGUgPSBz
dHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssICpmaXJzdExldHRlckNvbnRhaW5l
cik7CisgICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0Zsb2F0aW5nKCkgfHwgZmlyc3RMZXR0ZXIt
PmlzSW5saW5lKCkpOworCisgICAgaWYgKFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2UoZmlyc3RMZXR0
ZXItPnN0eWxlKCksIHBzZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0YWNoKSB7CisgICAgICAgIC8v
IFRoZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgbmVlZHMgdG8gYmUgcmVwbGFjZWQuIENyZWF0ZSBh
IG5ldyByZW5kZXJlciBvZiB0aGUgcmlnaHQgdHlwZS4KKyAgICAgICAgUmVuZGVyUHRyPFJlbmRl
ckJveE1vZGVsT2JqZWN0PiBuZXdGaXJzdExldHRlcjsKKyAgICAgICAgaWYgKHBzZXVkb1N0eWxl
LmRpc3BsYXkoKSA9PSBJTkxJTkUpCisgICAgICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0
ZVJlbmRlcmVyPFJlbmRlcklubGluZT4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZN
b3ZlKHBzZXVkb1N0eWxlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0
dGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93PihmaXJzdExldHRlckJsb2NrLmRv
Y3VtZW50KCksIFdURk1vdmUocHNldWRvU3R5bGUpKTsKKyAgICAgICAgbmV3Rmlyc3RMZXR0ZXIt
PmluaXRpYWxpemVTdHlsZSgpOworICAgICAgICBuZXdGaXJzdExldHRlci0+c2V0SXNGaXJzdExl
dHRlcigpOworCisgICAgICAgIC8vIE1vdmUgdGhlIGZpcnN0IGxldHRlciBpbnRvIHRoZSBuZXcg
cmVuZGVyZXIuCisgICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RMZXR0
ZXItPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpjaGls
ZCkpCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKS5yZW1vdmVB
bmREZXN0cm95VGV4dEJveGVzKCk7CisgICAgICAgICAgICBhdXRvIHRvTW92ZSA9IGZpcnN0TGV0
dGVyLT50YWtlQ2hpbGQoKmNoaWxkKTsKKyAgICAgICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjpj
dXJyZW50KCktPmluc2VydENoaWxkKCpuZXdGaXJzdExldHRlciwgV1RGTW92ZSh0b01vdmUpKTsK
KyAgICAgICAgfQorCisgICAgICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcgPSBmaXJzdExl
dHRlci0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgaWYgKFJlbmRlclRleHRGcmFnbWVudCogcmVt
YWluaW5nVGV4dCA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqZmlyc3RMZXR0ZXIp
LmZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQocmVtYWlu
aW5nVGV4dC0+aXNBbm9ueW1vdXMoKSB8fCByZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpLT5yZW5k
ZXJlcigpID09IHJlbWFpbmluZ1RleHQpOworICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgb2xk
IHJlbmRlcmVyIHdpdGggdGhlIG5ldyBvbmUuCisgICAgICAgICAgICByZW1haW5pbmdUZXh0LT5z
ZXRGaXJzdExldHRlcigqbmV3Rmlyc3RMZXR0ZXIpOworICAgICAgICAgICAgbmV3Rmlyc3RMZXR0
ZXItPnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dCgqcmVtYWluaW5nVGV4dCk7CisgICAgICAg
IH0KKyAgICAgICAgZmlyc3RMZXR0ZXJDb250YWluZXItPnJlbW92ZUFuZERlc3Ryb3lDaGlsZCgq
Zmlyc3RMZXR0ZXIpOworICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNl
cnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250YWluZXIsIFdURk1vdmUobmV3Rmlyc3RMZXR0ZXIpLCBu
ZXh0U2libGluZyk7CisgICAgfSBlbHNlCisgICAgICAgIGZpcnN0TGV0dGVyLT5zZXRTdHlsZShX
VEZNb3ZlKHBzZXVkb1N0eWxlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUZpcnN0TGV0dGVy
UmVuZGVyZXIoUmVuZGVyQmxvY2smIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlclRleHQmIGN1cnJl
bnRUZXh0Q2hpbGQpCit7CisgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXIg
PSBjdXJyZW50VGV4dENoaWxkLnBhcmVudCgpOworICAgIGF1dG8gcHNldWRvU3R5bGUgPSBzdHls
ZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssICpmaXJzdExldHRlckNvbnRhaW5lcik7
CisgICAgUmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBuZXdGaXJzdExldHRlcjsKKyAg
ICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKKyAgICAgICAgbmV3Rmlyc3RM
ZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJJbmxpbmU+KGZpcnN0TGV0dGVyQmxvY2suZG9j
dW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgIGVsc2UKKyAgICAgICAgbmV3Rmly
c3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KGZpcnN0TGV0dGVyQmxv
Y2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgIG5ld0ZpcnN0TGV0dGVy
LT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICBuZXdGaXJzdExldHRlci0+c2V0SXNGaXJzdExldHRl
cigpOworCisgICAgYXV0byYgZmlyc3RMZXR0ZXIgPSAqbmV3Rmlyc3RMZXR0ZXI7CisgICAgUmVu
ZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoKmZpcnN0TGV0dGVyQ29udGFp
bmVyLCBXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgJmN1cnJlbnRUZXh0Q2hpbGQpOworCisgICAg
Ly8gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyBnb2luZyB0byBiZSBlaXRoZXIgYSBnZW5lcmF0ZWQg
Y29udGVudCBzdHJpbmcgb3IgYSBET00gbm9kZSdzCisgICAgLy8gc3RyaW5nLiBXZSB3YW50IHRo
ZSBvcmlnaW5hbCBzdHJpbmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1lZCBpbiBjYXNlIGZpcnN0
LWxldHRlciBoYXMKKyAgICAvLyBubyB0ZXh0LXRyYW5zZm9ybSBvciBhIGRpZmZlcmVudCB0ZXh0
LXRyYW5zZm9ybSBhcHBsaWVkIHRvIGl0LgorICAgIFN0cmluZyBvbGRUZXh0ID0gY3VycmVudFRl
eHRDaGlsZC5vcmlnaW5hbFRleHQoKTsKKyAgICBBU1NFUlQoIW9sZFRleHQuaXNOdWxsKCkpOwor
CisgICAgaWYgKCFvbGRUZXh0LmlzRW1wdHkoKSkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSAwOworCisgICAgICAgIC8vIEFjY291bnQgZm9yIGxlYWRpbmcgc3BhY2VzIGFuZCBwdW5jdHVh
dGlvbi4KKyAgICAgICAgd2hpbGUgKGxlbmd0aCA8IG9sZFRleHQubGVuZ3RoKCkgJiYgc2hvdWxk
U2tpcEZvckZpcnN0TGV0dGVyKG9sZFRleHRbbGVuZ3RoXSkpCisgICAgICAgICAgICBsZW5ndGgr
KzsKKworICAgICAgICAvLyBBY2NvdW50IGZvciBmaXJzdCBncmFwaGVtZSBjbHVzdGVyLgorICAg
ICAgICBsZW5ndGggKz0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhTdHJpbmdWaWV3
KG9sZFRleHQpLnN1YnN0cmluZyhsZW5ndGgpLCAxKTsKKworICAgICAgICAvLyBLZWVwIGxvb2tp
bmcgZm9yIHdoaXRlc3BhY2UgYW5kIGFsbG93ZWQgcHVuY3R1YXRpb24sIGJ1dCBhdm9pZAorICAg
ICAgICAvLyBhY2N1bXVsYXRpbmcganVzdCB3aGl0ZXNwYWNlIGludG8gdGhlIDpmaXJzdC1sZXR0
ZXIuCisgICAgICAgIGZvciAodW5zaWduZWQgc2Nhbkxlbmd0aCA9IGxlbmd0aDsgc2Nhbkxlbmd0
aCA8IG9sZFRleHQubGVuZ3RoKCk7ICsrc2Nhbkxlbmd0aCkgeworICAgICAgICAgICAgVUNoYXIg
YyA9IG9sZFRleHRbc2Nhbkxlbmd0aF07CisKKyAgICAgICAgICAgIGlmICghc2hvdWxkU2tpcEZv
ckZpcnN0TGV0dGVyKGMpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBp
ZiAoaXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKGMpKQorICAgICAgICAgICAgICAgIGxlbmd0
aCA9IHNjYW5MZW5ndGggKyAxOworICAgICAgICB9CisKKyAgICAgICAgYXV0byogdGV4dE5vZGUg
PSBjdXJyZW50VGV4dENoaWxkLnRleHROb2RlKCk7CisgICAgICAgIGF1dG8qIGJlZm9yZUNoaWxk
ID0gY3VycmVudFRleHRDaGlsZC5uZXh0U2libGluZygpOworICAgICAgICBmaXJzdExldHRlckNv
bnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKGN1cnJlbnRUZXh0Q2hpbGQpOworCisgICAg
ICAgIC8vIENvbnN0cnVjdCBhIHRleHQgZnJhZ21lbnQgZm9yIHRoZSB0ZXh0IGFmdGVyIHRoZSBm
aXJzdCBsZXR0ZXIuCisgICAgICAgIC8vIFRoaXMgdGV4dCBmcmFnbWVudCBtaWdodCBiZSBlbXB0
eS4KKyAgICAgICAgUmVuZGVyUHRyPFJlbmRlclRleHRGcmFnbWVudD4gbmV3UmVtYWluaW5nVGV4
dDsKKyAgICAgICAgaWYgKHRleHROb2RlKSB7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0
ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PigqdGV4dE5vZGUsIG9sZFRleHQs
IGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7CisgICAgICAgICAgICB0ZXh0Tm9k
ZS0+c2V0UmVuZGVyZXIobmV3UmVtYWluaW5nVGV4dC5nZXQoKSk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgbmV3UmVtYWluaW5nVGV4dCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRG
cmFnbWVudD4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRUZXh0LCBsZW5ndGgsIG9s
ZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOworCisgICAgICAgIFJlbmRlclRleHRGcmFnbWVudCYg
cmVtYWluaW5nVGV4dCA9ICpuZXdSZW1haW5pbmdUZXh0OworICAgICAgICBSZW5kZXJUcmVlQnVp
bGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250YWluZXIsIFdURk1v
dmUobmV3UmVtYWluaW5nVGV4dCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcmVtYWluaW5nVGV4
dC5zZXRGaXJzdExldHRlcihmaXJzdExldHRlcik7CisgICAgICAgIGZpcnN0TGV0dGVyLnNldEZp
cnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsKKworICAgICAgICAvLyBjb25z
dHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3IgdGhlIGZpcnN0IGxldHRlcgorICAgICAgICBhdXRvIGxl
dHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRGcmFnbWVudD4oZmlyc3RMZXR0ZXJCbG9j
ay5kb2N1bWVudCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOworCisgICAgICAgIFJlbmRlclRyZWVC
dWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKGZpcnN0TGV0dGVyLCBXVEZNb3ZlKGxldHRl
cikpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgc3VwcG9ydHNGaXJzdExldHRlcihSZW5kZXJC
bG9jayYgYmxvY2spCit7CisgICAgaWYgKGlzPFJlbmRlckJ1dHRvbj4oYmxvY2spKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oYmxvY2spKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzPFJlbmRlclNWR1RleHQ+KGJsb2NrKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpczxSZW5kZXJSdWJ5UnVuPihibG9jaykpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gYmxvY2suY2FuSGF2ZUdlbmVyYXRlZENo
aWxkcmVuKCk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OkZpcnN0TGV0dGVyOjp1cGRh
dGUoUmVuZGVyQmxvY2smIGJsb2NrKQoreworICAgIGlmICghYmxvY2suc3R5bGUoKS5oYXNQc2V1
ZG9TdHlsZShGSVJTVF9MRVRURVIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdXBwb3J0
c0ZpcnN0TGV0dGVyKGJsb2NrKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQsIGZpcnN0TGV0dGVyQ29udGFpbmVyIGlzIG5vdCBuZWVk
ZWQuCisgICAgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlclJlbmRlcmVyOworICAgIFJlbmRlckVs
ZW1lbnQqIGZpcnN0TGV0dGVyQ29udGFpbmVyOworICAgIGJsb2NrLmdldEZpcnN0TGV0dGVyKGZp
cnN0TGV0dGVyUmVuZGVyZXIsIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKworICAgIGlmICghZmly
c3RMZXR0ZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3RoZXIgY29udGFp
bmVycyBhcmUgaGFuZGxlZCB3aGVuIHVwZGF0aW5nIHRoZWlyIHJlbmRlcmVycy4KKyAgICBpZiAo
JmJsb2NrICE9IGZpcnN0TGV0dGVyQ29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBJZiB0aGUgY2hpbGQgYWxyZWFkeSBoYXMgc3R5bGUsIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVl
biBjcmVhdGVkLCBzbyB3ZSBqdXN0IHdhbnQKKyAgICAvLyB0byB1cGRhdGUgaXQuCisgICAgaWYg
KGZpcnN0TGV0dGVyUmVuZGVyZXItPnBhcmVudCgpLT5zdHlsZSgpLnN0eWxlVHlwZSgpID09IEZJ
UlNUX0xFVFRFUikgeworICAgICAgICB1cGRhdGVGaXJzdExldHRlclN0eWxlKGJsb2NrLCAqZmly
c3RMZXR0ZXJSZW5kZXJlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlz
PFJlbmRlclRleHQ+KGZpcnN0TGV0dGVyUmVuZGVyZXIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKGJsb2NrLCBkb3duY2FzdDxSZW5kZXJUZXh0Pigq
Zmlyc3RMZXR0ZXJSZW5kZXJlcikpOworfQorCit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRl
ckZpcnN0TGV0dGVyLmNwcAkocmV2aXNpb24gMjI2MTQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJU
cmVlQnVpbGRlckZpcnN0TGV0dGVyLmgiCiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrLmgiCkBAIC0xMDEsNyArMTAxLDU3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzaG91bGRTa2lwRm9yRmlyc3RMZXQKICAgICByZXR1cm4gaXNTcGFjZU9yTmV3bGluZShj
KSB8fCBjID09IG5vQnJlYWtTcGFjZSB8fCBpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoYyk7
CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUoUmVuZGVyQmxvY2smIGZp
cnN0TGV0dGVyQmxvY2ssIFJlbmRlck9iamVjdCYgY3VycmVudENoaWxkKQorc3RhdGljIGJvb2wg
c3VwcG9ydHNGaXJzdExldHRlcihSZW5kZXJCbG9jayYgYmxvY2spCit7CisgICAgaWYgKGlzPFJl
bmRlckJ1dHRvbj4oYmxvY2spKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWlzPFJl
bmRlckJsb2NrRmxvdz4oYmxvY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlz
PFJlbmRlclNWR1RleHQ+KGJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChp
czxSZW5kZXJSdWJ5UnVuPihibG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gYmxvY2suY2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCk7Cit9CisKK1JlbmRlclRyZWVCdWls
ZGVyOjpGaXJzdExldHRlcjo6Rmlyc3RMZXR0ZXIoUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIp
CisgICAgOiBtX2J1aWxkZXIoYnVpbGRlcikKK3sKK30KKwordm9pZCBSZW5kZXJUcmVlQnVpbGRl
cjo6Rmlyc3RMZXR0ZXI6OnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoUmVuZGVyQmxvY2smIGJsb2Nr
KQoreworICAgIGlmICghYmxvY2suc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdXBwb3J0c0ZpcnN0TGV0dGVyKGJsb2NrKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlZmFjdG9y
ZWQsIGZpcnN0TGV0dGVyQ29udGFpbmVyIGlzIG5vdCBuZWVkZWQuCisgICAgUmVuZGVyT2JqZWN0
KiBmaXJzdExldHRlclJlbmRlcmVyOworICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29u
dGFpbmVyOworICAgIGJsb2NrLmdldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyUmVuZGVyZXIsIGZp
cnN0TGV0dGVyQ29udGFpbmVyKTsKKworICAgIGlmICghZmlyc3RMZXR0ZXJSZW5kZXJlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gT3RoZXIgY29udGFpbmVycyBhcmUgaGFuZGxlZCB3aGVu
IHVwZGF0aW5nIHRoZWlyIHJlbmRlcmVycy4KKyAgICBpZiAoJmJsb2NrICE9IGZpcnN0TGV0dGVy
Q29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgY2hpbGQgYWxyZWFk
eSBoYXMgc3R5bGUsIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLCBzbyB3ZSBqdXN0
IHdhbnQKKyAgICAvLyB0byB1cGRhdGUgaXQuCisgICAgaWYgKGZpcnN0TGV0dGVyUmVuZGVyZXIt
PnBhcmVudCgpLT5zdHlsZSgpLnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUikgeworICAgICAg
ICB1cGRhdGVTdHlsZShibG9jaywgKmZpcnN0TGV0dGVyUmVuZGVyZXIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFpczxSZW5kZXJUZXh0PihmaXJzdExldHRlclJlbmRlcmVy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRlUmVuZGVyZXJzKGJsb2NrLCBkb3duY2Fz
dDxSZW5kZXJUZXh0PigqZmlyc3RMZXR0ZXJSZW5kZXJlcikpOworfQorCit2b2lkIFJlbmRlclRy
ZWVCdWlsZGVyOjpGaXJzdExldHRlcjo6dXBkYXRlU3R5bGUoUmVuZGVyQmxvY2smIGZpcnN0TGV0
dGVyQmxvY2ssIFJlbmRlck9iamVjdCYgY3VycmVudENoaWxkKQogewogICAgIFJlbmRlckVsZW1l
bnQqIGZpcnN0TGV0dGVyID0gY3VycmVudENoaWxkLnBhcmVudCgpOwogICAgIEFTU0VSVChmaXJz
dExldHRlci0+aXNGaXJzdExldHRlcigpKTsKQEAgLTEyNSw3ICsxNzUsNyBAQCBzdGF0aWMgdm9p
ZCB1cGRhdGVGaXJzdExldHRlclN0eWxlKFJlbmRlCiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVy
VGV4dD4oKmNoaWxkKSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PigqY2hp
bGQpLnJlbW92ZUFuZERlc3Ryb3lUZXh0Qm94ZXMoKTsKICAgICAgICAgICAgIGF1dG8gdG9Nb3Zl
ID0gZmlyc3RMZXR0ZXItPnRha2VDaGlsZCgqY2hpbGQpOwotICAgICAgICAgICAgUmVuZGVyVHJl
ZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoKm5ld0ZpcnN0TGV0dGVyLCBXVEZNb3Zl
KHRvTW92ZSkpOworICAgICAgICAgICAgbV9idWlsZGVyLmluc2VydENoaWxkKCpuZXdGaXJzdExl
dHRlciwgV1RGTW92ZSh0b01vdmUpKTsKICAgICAgICAgfQogCiAgICAgICAgIFJlbmRlck9iamVj
dCogbmV4dFNpYmxpbmcgPSBmaXJzdExldHRlci0+bmV4dFNpYmxpbmcoKTsKQEAgLTEzNiwxMiAr
MTg2LDE0IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUoUmVuZGUKICAgICAg
ICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5zZXRGaXJzdExldHRlclJlbWFpbmluZ1RleHQoKnJlbWFp
bmluZ1RleHQpOwogICAgICAgICB9CiAgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5yZW1v
dmVBbmREZXN0cm95Q2hpbGQoKmZpcnN0TGV0dGVyKTsKLSAgICAgICAgUmVuZGVyVHJlZUJ1aWxk
ZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoKmZpcnN0TGV0dGVyQ29udGFpbmVyLCBXVEZNb3Zl
KG5ld0ZpcnN0TGV0dGVyKSwgbmV4dFNpYmxpbmcpOwotICAgIH0gZWxzZQotICAgICAgICBmaXJz
dExldHRlci0+c2V0U3R5bGUoV1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgICAgICBtX2J1aWxk
ZXIuaW5zZXJ0Q2hpbGQoKmZpcnN0TGV0dGVyQ29udGFpbmVyLCBXVEZNb3ZlKG5ld0ZpcnN0TGV0
dGVyKSwgbmV4dFNpYmxpbmcpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZmlyc3RM
ZXR0ZXItPnNldFN0eWxlKFdURk1vdmUocHNldWRvU3R5bGUpKTsKIH0KIAotc3RhdGljIHZvaWQg
Y3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihSZW5kZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywg
UmVuZGVyVGV4dCYgY3VycmVudFRleHRDaGlsZCkKK3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OkZp
cnN0TGV0dGVyOjpjcmVhdGVSZW5kZXJlcnMoUmVuZGVyQmxvY2smIGZpcnN0TGV0dGVyQmxvY2ss
IFJlbmRlclRleHQmIGN1cnJlbnRUZXh0Q2hpbGQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmly
c3RMZXR0ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENoaWxkLnBhcmVudCgpOwogICAgIGF1dG8g
cHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssICpmaXJz
dExldHRlckNvbnRhaW5lcik7CkBAIC0xNTQsNyArMjA2LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRl
Rmlyc3RMZXR0ZXJSZW5kZXJlcihSZQogICAgIG5ld0ZpcnN0TGV0dGVyLT5zZXRJc0ZpcnN0TGV0
dGVyKCk7CiAKICAgICBhdXRvJiBmaXJzdExldHRlciA9ICpuZXdGaXJzdExldHRlcjsKLSAgICBS
ZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5pbnNlcnRDaGlsZCgqZmlyc3RMZXR0ZXJDb250
YWluZXIsIFdURk1vdmUobmV3Rmlyc3RMZXR0ZXIpLCAmY3VycmVudFRleHRDaGlsZCk7CisgICAg
bV9idWlsZGVyLmluc2VydENoaWxkKCpmaXJzdExldHRlckNvbnRhaW5lciwgV1RGTW92ZShuZXdG
aXJzdExldHRlciksICZjdXJyZW50VGV4dENoaWxkKTsKIAogICAgIC8vIFRoZSBvcmlnaW5hbCBz
dHJpbmcgaXMgZ29pbmcgdG8gYmUgZWl0aGVyIGEgZ2VuZXJhdGVkIGNvbnRlbnQgc3RyaW5nIG9y
IGEgRE9NIG5vZGUncwogICAgIC8vIHN0cmluZy4gV2Ugd2FudCB0aGUgb3JpZ2luYWwgc3RyaW5n
IGJlZm9yZSBpdCBnb3QgdHJhbnNmb3JtZWQgaW4gY2FzZSBmaXJzdC1sZXR0ZXIgaGFzCkBAIC0x
OTgsNjAgKzI1MCwxNSBAQCBzdGF0aWMgdm9pZCBjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKFJl
CiAgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4
dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRleHQsIGxlbmd0aCwg
b2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7CiAKICAgICAgICAgUmVuZGVyVGV4dEZyYWdtZW50
JiByZW1haW5pbmdUZXh0ID0gKm5ld1JlbWFpbmluZ1RleHQ7Ci0gICAgICAgIFJlbmRlclRyZWVC
dWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKCpmaXJzdExldHRlckNvbnRhaW5lciwgV1RG
TW92ZShuZXdSZW1haW5pbmdUZXh0KSwgYmVmb3JlQ2hpbGQpOworICAgICAgICBtX2J1aWxkZXIu
aW5zZXJ0Q2hpbGQoKmZpcnN0TGV0dGVyQ29udGFpbmVyLCBXVEZNb3ZlKG5ld1JlbWFpbmluZ1Rl
eHQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJlbWFpbmluZ1RleHQuc2V0Rmlyc3RMZXR0ZXIo
Zmlyc3RMZXR0ZXIpOwogICAgICAgICBmaXJzdExldHRlci5zZXRGaXJzdExldHRlclJlbWFpbmlu
Z1RleHQocmVtYWluaW5nVGV4dCk7CiAKICAgICAgICAgLy8gY29uc3RydWN0IHRleHQgZnJhZ21l
bnQgZm9yIHRoZSBmaXJzdCBsZXR0ZXIKICAgICAgICAgYXV0byBsZXR0ZXIgPSBjcmVhdGVSZW5k
ZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgb2xk
VGV4dCwgMCwgbGVuZ3RoKTsKIAotICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgp
LT5pbnNlcnRDaGlsZChmaXJzdExldHRlciwgV1RGTW92ZShsZXR0ZXIpKTsKKyAgICAgICAgbV9i
dWlsZGVyLmluc2VydENoaWxkKGZpcnN0TGV0dGVyLCBXVEZNb3ZlKGxldHRlcikpOwogICAgIH0K
IH0KIAotc3RhdGljIGJvb2wgc3VwcG9ydHNGaXJzdExldHRlcihSZW5kZXJCbG9jayYgYmxvY2sp
Ci17Ci0gICAgaWYgKGlzPFJlbmRlckJ1dHRvbj4oYmxvY2spKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oYmxvY2spKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKGlzPFJlbmRlclNWR1RleHQ+KGJsb2NrKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChpczxSZW5kZXJSdWJ5UnVuPihibG9jaykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gYmxvY2suY2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCk7Ci19
Ci0KLXZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OkZpcnN0TGV0dGVyOjp1cGRhdGUoUmVuZGVyQmxv
Y2smIGJsb2NrKQotewotICAgIGlmICghYmxvY2suc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShGSVJT
VF9MRVRURVIpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFzdXBwb3J0c0ZpcnN0TGV0dGVy
KGJsb2NrKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IHJlZmFjdG9yZWQsIGZpcnN0TGV0dGVyQ29udGFpbmVyIGlzIG5vdCBuZWVkZWQuCi0gICAgUmVu
ZGVyT2JqZWN0KiBmaXJzdExldHRlclJlbmRlcmVyOwotICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0
TGV0dGVyQ29udGFpbmVyOwotICAgIGJsb2NrLmdldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyUmVu
ZGVyZXIsIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKLQotICAgIGlmICghZmlyc3RMZXR0ZXJSZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3RoZXIgY29udGFpbmVycyBhcmUgaGFu
ZGxlZCB3aGVuIHVwZGF0aW5nIHRoZWlyIHJlbmRlcmVycy4KLSAgICBpZiAoJmJsb2NrICE9IGZp
cnN0TGV0dGVyQ29udGFpbmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgY2hp
bGQgYWxyZWFkeSBoYXMgc3R5bGUsIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLCBz
byB3ZSBqdXN0IHdhbnQKLSAgICAvLyB0byB1cGRhdGUgaXQuCi0gICAgaWYgKGZpcnN0TGV0dGVy
UmVuZGVyZXItPnBhcmVudCgpLT5zdHlsZSgpLnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUikg
ewotICAgICAgICB1cGRhdGVGaXJzdExldHRlclN0eWxlKGJsb2NrLCAqZmlyc3RMZXR0ZXJSZW5k
ZXJlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWlzPFJlbmRlclRleHQ+
KGZpcnN0TGV0dGVyUmVuZGVyZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVGaXJz
dExldHRlclJlbmRlcmVyKGJsb2NrLCBkb3duY2FzdDxSZW5kZXJUZXh0PigqZmlyc3RMZXR0ZXJS
ZW5kZXJlcikpOwotfQotCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0
aW5nL1JlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5o
CShyZXZpc2lvbiAyMjYxNDcpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmg6MjI2MTQ3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFJlbmRlckJsb2NrOworCitjbGFzcyBSZW5kZXJUcmVlVXBkYXRlcjo6Rmlyc3RMZXR0
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHVwZGF0ZShSZW5kZXJCbG9jayYpOworfTsK
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVC
dWlsZGVyRmlyc3RMZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oCShyZXZpc2lvbiAyMjYx
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXJGaXJzdExldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNSArMjUsMjMgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgorI2luY2x1ZGUgIlJl
bmRlclRyZWVCdWlsZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVy
QmxvY2s7CitjbGFzcyBSZW5kZXJFbGVtZW50OwogCi1jbGFzcyBSZW5kZXJUcmVlVXBkYXRlcjo6
Rmlyc3RMZXR0ZXIgeworY2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXI6OkZpcnN0TGV0dGVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGUoUmVuZGVyQmxvY2smKTsKKyAgICBGaXJzdExl
dHRlcihSZW5kZXJUcmVlQnVpbGRlciYpOworCisgICAgdm9pZCB1cGRhdGVBZnRlckRlc2NlbmRh
bnRzKFJlbmRlckJsb2NrJik7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVTdHlsZShSZW5k
ZXJCbG9jayYgZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0JiBjdXJyZW50Q2hpbGQpOwor
ICAgIHZvaWQgY3JlYXRlUmVuZGVyZXJzKFJlbmRlckJsb2NrJiBmaXJzdExldHRlckJsb2NrLCBS
ZW5kZXJUZXh0JiBjdXJyZW50VGV4dENoaWxkKTsKKworICAgIFJlbmRlclRyZWVCdWlsZGVyJiBt
X2J1aWxkZXI7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHJldmlzaW9uIDIyNjE0NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJGdWxs
U2NyZWVuLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlz
dEl0ZW0uaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIgogI2luY2x1ZGUgIlJlbmRlclRy
ZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVy
TGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmgiCkBA
IC0yNzEsOSArMjcxLDkgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dXBkYXRlQWZ0ZXJEZXNj
ZQogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIG1fYnVpbGRlci51
cGRhdGVBZnRlckRlc2NlbmRhbnRzKCpyZW5kZXJlcik7CisKICAgICAvLyBUaGVzZSBmdW5jdGlv
bnMgZG8gcmVuZGVyIHRyZWUgbXV0YXRpb25zIHRoYXQgcmVxdWlyZSBkZXNjZW5kYW50IHJlbmRl
cmVycy4KLSAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikpCi0gICAgICAgIEZpcnN0
TGV0dGVyOjp1cGRhdGUoZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpyZW5kZXJlcikpOwogICAgIGlm
IChpczxSZW5kZXJMaXN0SXRlbT4oKnJlbmRlcmVyKSkKICAgICAgICAgTGlzdEl0ZW06OnVwZGF0
ZU1hcmtlcihtX2J1aWxkZXIsIGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPigqcmVuZGVyZXIpKTsK
ICAgICBpZiAoaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmgJ
KHJldmlzaW9uIDIyNjE0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlVXBkYXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCB0ZWFyRG93blJlbmRlcmVycyhFbGVtZW50Jik7CiAgICAgc3Rh
dGljIHZvaWQgdGVhckRvd25SZW5kZXJlcihUZXh0Jik7CiAKLSAgICBjbGFzcyBGaXJzdExldHRl
cjsKICAgICBjbGFzcyBMaXN0SXRlbTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVw
ZGF0ZXJGaXJzdExldHRlci5jcHAJKHJldmlzaW9uIDIyNjE0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDI1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDcgRGF2aWQgU21p
dGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDExLCAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaCIK
LQotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNp
bmNsdWRlICJSZW5kZXJCdXR0b24uaCIKLSNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNs
dWRlICJSZW5kZXJSdWJ5UnVuLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgotI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJUZXh0RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZW5kZXJTdHlsZSBzdHlsZUZvckZpcnN0TGV0
dGVyKGNvbnN0IFJlbmRlckJsb2NrJiBmaXJzdExldHRlckJsb2NrLCBjb25zdCBSZW5kZXJPYmpl
Y3QmIGZpcnN0TGV0dGVyQ29udGFpbmVyKQotewotICAgIGF1dG8qIGNvbnRhaW5lckZpcnN0TGV0
dGVyU3R5bGUgPSBmaXJzdExldHRlckJsb2NrLmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xF
VFRFUiwgJmZpcnN0TGV0dGVyQ29udGFpbmVyLmZpcnN0TGluZVN0eWxlKCkpOwotICAgIC8vIEZJ
WE1FOiBUaGVyZSBhcHBlYXJzIHRvIGJlIHNvbWUgcGF0aCB3aGVyZSB3ZSBoYXZlIGEgZmlyc3Qg
bGV0dGVyIHJlbmRlcmVyIHdpdGhvdXQgZmlyc3QgbGV0dGVyIHN0eWxlLgotICAgIEFTU0VSVChj
b250YWluZXJGaXJzdExldHRlclN0eWxlKTsKLSAgICBhdXRvIGZpcnN0TGV0dGVyU3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y2xvbmUoY29udGFpbmVyRmlyc3RMZXR0ZXJTdHlsZSA/ICpjb250YWluZXJG
aXJzdExldHRlclN0eWxlIDogZmlyc3RMZXR0ZXJDb250YWluZXIuZmlyc3RMaW5lU3R5bGUoKSk7
Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGFuIGluaXRpYWwgbGV0dGVyIGRyb3AgdGhhdCBpcyA+PSAx
LCB0aGVuIHdlIG5lZWQgdG8gZm9yY2UgZmxvYXRpbmcgdG8gYmUgb24uCi0gICAgaWYgKGZpcnN0
TGV0dGVyU3R5bGUuaW5pdGlhbExldHRlckRyb3AoKSA+PSAxICYmICFmaXJzdExldHRlclN0eWxl
LmlzRmxvYXRpbmcoKSkKLSAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRGbG9hdGluZyhmaXJz
dExldHRlclN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExlZnRGbG9hdCA6IFJpZ2h0
RmxvYXQpOwotCi0gICAgLy8gV2UgaGF2ZSB0byBjb21wdXRlIHRoZSBjb3JyZWN0IGZvbnQtc2l6
ZSBmb3IgdGhlIGZpcnN0LWxldHRlciBpZiBpdCBoYXMgYW4gaW5pdGlhbCBsZXR0ZXIgaGVpZ2h0
IHNldC4KLSAgICBhdXRvKiBwYXJhZ3JhcGggPSBmaXJzdExldHRlckNvbnRhaW5lci5pc1JlbmRl
ckJsb2NrRmxvdygpID8gJmZpcnN0TGV0dGVyQ29udGFpbmVyIDogZmlyc3RMZXR0ZXJDb250YWlu
ZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGZpcnN0TGV0dGVyU3R5bGUuaW5pdGlhbExl
dHRlckhlaWdodCgpID49IDEgJiYgZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmhhc0Nh
cEhlaWdodCgpICYmIHBhcmFncmFwaC0+c3R5bGUoKS5mb250TWV0cmljcygpLmhhc0NhcEhlaWdo
dCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBGb3IgaWRlb2dyYXBoaWMgYmFzZWxpbmVzLCB3ZSB3
YW50IHRvIGdvIGZyb20gbGluZSBlZGdlIHRvIGxpbmUgZWRnZS4gVGhpcyBpcyBlcXVpdmFsZW50
IHRvIChOLTEpKmxpbmUtaGVpZ2h0ICsgdGhlIGZvbnQgaGVpZ2h0LgotICAgICAgICAvLyBXZSBk
b24ndCB5ZXQgc3VwcG9ydCBpZGVvZ3JhcGhpYyBiYXNlbGluZXMuCi0gICAgICAgIC8vIEZvciBh
biBOLWxpbmUgZmlyc3QtbGV0dGVyIGFuZCBmb3IgYWxwaGFiZXRpYyBiYXNlbGluZXMsIHRoZSBj
YXAtaGVpZ2h0IG9mIHRoZSBmaXJzdCBsZXR0ZXIgbmVlZHMgdG8gZXF1YWwgKE4tMSkqbGluZS1o
ZWlnaHQgb2YgcGFyYWdyYXBoIGxpbmVzICsgY2FwLWhlaWdodCBvZiB0aGUgcGFyYWdyYXBoCi0g
ICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IHdlIGNhbid0IHJlbHkgb24gZm9udC1zaXplLCBzaW5j
ZSBmb250KCkuaGVpZ2h0KCkgZG9lc24ndCBuZWNlc3NhcmlseSBtYXRjaC4gRm9yIHJlbGlhYmls
aXR5LCB0aGUgYmVzdCBhcHByb2FjaCBpcyBzaW1wbHkgdG8KLSAgICAgICAgLy8gY29tcGFyZSB0
aGUgZmluYWwgbWVhc3VyZWQgY2FwLWhlaWdodHMgb2YgdGhlIHR3byBmb250cyBpbiBvcmRlciB0
byBnZXQgdG8gdGhlIGNsb3Nlc3QgcG9zc2libGUgdmFsdWUuCi0gICAgICAgIGZpcnN0TGV0dGVy
U3R5bGUuc2V0TGluZUJveENvbnRhaW4oTGluZUJveENvbnRhaW5Jbml0aWFsTGV0dGVyKTsKLSAg
ICAgICAgaW50IGxpbmVIZWlnaHQgPSBwYXJhZ3JhcGgtPnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVp
Z2h0KCk7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBmb250IHRvIGJlIG9uZSBsaW5lIHRvbyBiaWcg
YW5kIHRoZW4gcmF0Y2hldCBiYWNrIHRvIGdldCB0byBhIHByZWNpc2UgZml0LiBXZSBjYW4ndCBq
dXN0IHNldCB0aGUgZGVzaXJlZCBmb250IHNpemUgYmFzZWQgb2ZmIGZvbnQgaGVpZ2h0IG1ldHJp
Y3MKLSAgICAgICAgLy8gYmVjYXVzZSBtYW55IGZvbnRzIGJha2UgYXNjZW50IGludG8gdGhlIGZv
bnQgbWV0cmljcy4gVGhlcmVmb3JlIHdlIGhhdmUgdG8gbG9vayBhdCBhY3R1YWwgbWVhc3VyZWQg
Y2FwIGhlaWdodCB2YWx1ZXMgaW4gb3JkZXIgdG8ga25vdyB3aGVuIHdlIGhhdmUgYSBnb29kIGZp
dC4KLSAgICAgICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBmaXJzdExldHRlclN0eWxlLmZv
bnREZXNjcmlwdGlvbigpOwotICAgICAgICBmbG9hdCBjYXBSYXRpbyA9IGZpcnN0TGV0dGVyU3R5
bGUuZm9udE1ldHJpY3MoKS5mbG9hdENhcEhlaWdodCgpIC8gZmlyc3RMZXR0ZXJTdHlsZS5jb21w
dXRlZEZvbnRQaXhlbFNpemUoKTsKLSAgICAgICAgZmxvYXQgc3RhcnRpbmdGb250U2l6ZSA9ICgo
Zmlyc3RMZXR0ZXJTdHlsZS5pbml0aWFsTGV0dGVySGVpZ2h0KCkgLSAxKSAqIGxpbmVIZWlnaHQg
KyBwYXJhZ3JhcGgtPnN0eWxlKCkuZm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKSkgLyBjYXBSYXRp
bzsKLSAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc3RhcnRpbmdG
b250U2l6ZSk7Ci0gICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc3Rh
cnRpbmdGb250U2l6ZSk7Ci0gICAgICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0Rm9udERlc2NyaXB0
aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIGZpcnN0TGV0dGVyU3R5bGUuZm9udENh
c2NhZGUoKS51cGRhdGUoZmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3Rv
cigpKTsKLQotICAgICAgICBpbnQgZGVzaXJlZENhcEhlaWdodCA9IChmaXJzdExldHRlclN0eWxl
LmluaXRpYWxMZXR0ZXJIZWlnaHQoKSAtIDEpICogbGluZUhlaWdodCArIHBhcmFncmFwaC0+c3R5
bGUoKS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwotICAgICAgICBpbnQgYWN0dWFsQ2FwSGVp
Z2h0ID0gZmlyc3RMZXR0ZXJTdHlsZS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwotICAgICAg
ICB3aGlsZSAoYWN0dWFsQ2FwSGVpZ2h0ID4gZGVzaXJlZENhcEhlaWdodCkgewotICAgICAgICAg
ICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBmaXJzdExldHRlclN0eWxlLmZvbnREZXNjcmlw
dGlvbigpOwotICAgICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUo
bmV3Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSAtIDEpOwotICAgICAgICAgICAgbmV3
Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uY29tcHV0
ZWRTaXplKCkgLTEpOwotICAgICAgICAgICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRGb250RGVzY3Jp
cHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIGZpcnN0TGV0dGVyU3R5bGUu
Zm9udENhc2NhZGUoKS51cGRhdGUoZmlyc3RMZXR0ZXJTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRT
ZWxlY3RvcigpKTsKLSAgICAgICAgICAgIGFjdHVhbENhcEhlaWdodCA9IGZpcnN0TGV0dGVyU3R5
bGUuZm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IEZvcmNlIGlubGluZSBkaXNwbGF5IChleGNlcHQgZm9yIGZsb2F0aW5nIGZpcnN0LWxldHRlcnMp
LgotICAgIGZpcnN0TGV0dGVyU3R5bGUuc2V0RGlzcGxheShmaXJzdExldHRlclN0eWxlLmlzRmxv
YXRpbmcoKSA/IEJMT0NLIDogSU5MSU5FKTsKLSAgICAvLyBDU1MyIHNheXMgZmlyc3QtbGV0dGVy
IGNhbid0IGJlIHBvc2l0aW9uZWQuCi0gICAgZmlyc3RMZXR0ZXJTdHlsZS5zZXRQb3NpdGlvbihT
dGF0aWNQb3NpdGlvbik7Ci0gICAgcmV0dXJuIGZpcnN0TGV0dGVyU3R5bGU7Ci19Ci0KLS8vIENT
UyAyLjEgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc2VsZWN0b3IuaHRtbCNmaXJzdC1sZXR0
ZXIKLS8vICJQdW5jdHVhdGlvbiAoaS5lLCBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gVW5pY29kZSBb
VU5JQ09ERV0gaW4gdGhlICJvcGVuIiAoUHMpLCAiY2xvc2UiIChQZSksCi0vLyAiaW5pdGlhbCIg
KFBpKS4gImZpbmFsIiAoUGYpIGFuZCAib3RoZXIiIChQbykgcHVuY3R1YXRpb24gY2xhc3Nlcyks
IHRoYXQgcHJlY2VkZXMgb3IgZm9sbG93cyB0aGUgZmlyc3QgbGV0dGVyIHNob3VsZCBiZSBpbmNs
dWRlZCIKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1B1bmN0dWF0aW9uRm9yRmlyc3RMZXR0ZXIoVUNo
YXIgYykKLXsKLSAgICByZXR1cm4gVV9HRVRfR0NfTUFTSyhjKSAmIChVX0dDX1BTX01BU0sgfCBV
X0dDX1BFX01BU0sgfCBVX0dDX1BJX01BU0sgfCBVX0dDX1BGX01BU0sgfCBVX0dDX1BPX01BU0sp
OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkU2tpcEZvckZpcnN0TGV0dGVyKFVDaGFy
IGMpCi17Ci0gICAgcmV0dXJuIGlzU3BhY2VPck5ld2xpbmUoYykgfHwgYyA9PSBub0JyZWFrU3Bh
Y2UgfHwgaXNQdW5jdHVhdGlvbkZvckZpcnN0TGV0dGVyKGMpOwotfQotCi1zdGF0aWMgdm9pZCB1
cGRhdGVGaXJzdExldHRlclN0eWxlKFJlbmRlckJsb2NrJiBmaXJzdExldHRlckJsb2NrLCBSZW5k
ZXJPYmplY3QmIGN1cnJlbnRDaGlsZCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRl
ciA9IGN1cnJlbnRDaGlsZC5wYXJlbnQoKTsKLSAgICBBU1NFUlQoZmlyc3RMZXR0ZXItPmlzRmly
c3RMZXR0ZXIoKSk7Ci0KLSAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRhaW5lciA9
IGZpcnN0TGV0dGVyLT5wYXJlbnQoKTsKLSAgICBhdXRvIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JG
aXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCAqZmlyc3RMZXR0ZXJDb250YWluZXIpOwotICAg
IEFTU0VSVChmaXJzdExldHRlci0+aXNGbG9hdGluZygpIHx8IGZpcnN0TGV0dGVyLT5pc0lubGlu
ZSgpKTsKLQotICAgIGlmIChTdHlsZTo6ZGV0ZXJtaW5lQ2hhbmdlKGZpcnN0TGV0dGVyLT5zdHls
ZSgpLCBwc2V1ZG9TdHlsZSkgPT0gU3R5bGU6OkRldGFjaCkgewotICAgICAgICAvLyBUaGUgZmly
c3QtbGV0dGVyIHJlbmRlcmVyIG5lZWRzIHRvIGJlIHJlcGxhY2VkLiBDcmVhdGUgYSBuZXcgcmVu
ZGVyZXIgb2YgdGhlIHJpZ2h0IHR5cGUuCi0gICAgICAgIFJlbmRlclB0cjxSZW5kZXJCb3hNb2Rl
bE9iamVjdD4gbmV3Rmlyc3RMZXR0ZXI7Ci0gICAgICAgIGlmIChwc2V1ZG9TdHlsZS5kaXNwbGF5
KCkgPT0gSU5MSU5FKQotICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJJbmxpbmU+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1
ZG9TdHlsZSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdGaXJzdExldHRlciA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgp
LCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7Ci0gICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5pbml0aWFs
aXplU3R5bGUoKTsKLSAgICAgICAgbmV3Rmlyc3RMZXR0ZXItPnNldElzRmlyc3RMZXR0ZXIoKTsK
LQotICAgICAgICAvLyBNb3ZlIHRoZSBmaXJzdCBsZXR0ZXIgaW50byB0aGUgbmV3IHJlbmRlcmVy
LgotICAgICAgICB3aGlsZSAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0TGV0dGVyLT5maXJz
dENoaWxkKCkpIHsKLSAgICAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqY2hpbGQpKQotICAg
ICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+KCpjaGlsZCkucmVtb3ZlQW5kRGVzdHJv
eVRleHRCb3hlcygpOwotICAgICAgICAgICAgYXV0byB0b01vdmUgPSBmaXJzdExldHRlci0+dGFr
ZUNoaWxkKCpjaGlsZCk7Ci0gICAgICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgp
LT5pbnNlcnRDaGlsZCgqbmV3Rmlyc3RMZXR0ZXIsIFdURk1vdmUodG9Nb3ZlKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0gZmlyc3RMZXR0ZXItPm5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChSZW5kZXJUZXh0RnJhZ21lbnQqIHJlbWFpbmluZ1Rl
eHQgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKmZpcnN0TGV0dGVyKS5maXJzdExl
dHRlclJlbWFpbmluZ1RleHQoKSkgewotICAgICAgICAgICAgQVNTRVJUKHJlbWFpbmluZ1RleHQt
PmlzQW5vbnltb3VzKCkgfHwgcmVtYWluaW5nVGV4dC0+dGV4dE5vZGUoKS0+cmVuZGVyZXIoKSA9
PSByZW1haW5pbmdUZXh0KTsKLSAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG9sZCByZW5kZXJl
ciB3aXRoIHRoZSBuZXcgb25lLgotICAgICAgICAgICAgcmVtYWluaW5nVGV4dC0+c2V0Rmlyc3RM
ZXR0ZXIoKm5ld0ZpcnN0TGV0dGVyKTsKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5zZXRG
aXJzdExldHRlclJlbWFpbmluZ1RleHQoKnJlbWFpbmluZ1RleHQpOwotICAgICAgICB9Ci0gICAg
ICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5yZW1vdmVBbmREZXN0cm95Q2hpbGQoKmZpcnN0TGV0
dGVyKTsKLSAgICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+aW5zZXJ0Q2hpbGQo
KmZpcnN0TGV0dGVyQ29udGFpbmVyLCBXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgbmV4dFNpYmxp
bmcpOwotICAgIH0gZWxzZQotICAgICAgICBmaXJzdExldHRlci0+c2V0U3R5bGUoV1RGTW92ZShw
c2V1ZG9TdHlsZSkpOwotfQotCi1zdGF0aWMgdm9pZCBjcmVhdGVGaXJzdExldHRlclJlbmRlcmVy
KFJlbmRlckJsb2NrJiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJUZXh0JiBjdXJyZW50VGV4dENo
aWxkKQotewotICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29udGFpbmVyID0gY3VycmVu
dFRleHRDaGlsZC5wYXJlbnQoKTsKLSAgICBhdXRvIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJz
dExldHRlcihmaXJzdExldHRlckJsb2NrLCAqZmlyc3RMZXR0ZXJDb250YWluZXIpOwotICAgIFJl
bmRlclB0cjxSZW5kZXJCb3hNb2RlbE9iamVjdD4gbmV3Rmlyc3RMZXR0ZXI7Ci0gICAgaWYgKHBz
ZXVkb1N0eWxlLmRpc3BsYXkoKSA9PSBJTkxJTkUpCi0gICAgICAgIG5ld0ZpcnN0TGV0dGVyID0g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVySW5saW5lPihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCks
IFdURk1vdmUocHNldWRvU3R5bGUpKTsKLSAgICBlbHNlCi0gICAgICAgIG5ld0ZpcnN0TGV0dGVy
ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93PihmaXJzdExldHRlckJsb2NrLmRvY3Vt
ZW50KCksIFdURk1vdmUocHNldWRvU3R5bGUpKTsKLSAgICBuZXdGaXJzdExldHRlci0+aW5pdGlh
bGl6ZVN0eWxlKCk7Ci0gICAgbmV3Rmlyc3RMZXR0ZXItPnNldElzRmlyc3RMZXR0ZXIoKTsKLQot
ICAgIGF1dG8mIGZpcnN0TGV0dGVyID0gKm5ld0ZpcnN0TGV0dGVyOwotICAgIFJlbmRlclRyZWVC
dWlsZGVyOjpjdXJyZW50KCktPmluc2VydENoaWxkKCpmaXJzdExldHRlckNvbnRhaW5lciwgV1RG
TW92ZShuZXdGaXJzdExldHRlciksICZjdXJyZW50VGV4dENoaWxkKTsKLQotICAgIC8vIFRoZSBv
cmlnaW5hbCBzdHJpbmcgaXMgZ29pbmcgdG8gYmUgZWl0aGVyIGEgZ2VuZXJhdGVkIGNvbnRlbnQg
c3RyaW5nIG9yIGEgRE9NIG5vZGUncwotICAgIC8vIHN0cmluZy4gV2Ugd2FudCB0aGUgb3JpZ2lu
YWwgc3RyaW5nIGJlZm9yZSBpdCBnb3QgdHJhbnNmb3JtZWQgaW4gY2FzZSBmaXJzdC1sZXR0ZXIg
aGFzCi0gICAgLy8gbm8gdGV4dC10cmFuc2Zvcm0gb3IgYSBkaWZmZXJlbnQgdGV4dC10cmFuc2Zv
cm0gYXBwbGllZCB0byBpdC4KLSAgICBTdHJpbmcgb2xkVGV4dCA9IGN1cnJlbnRUZXh0Q2hpbGQu
b3JpZ2luYWxUZXh0KCk7Ci0gICAgQVNTRVJUKCFvbGRUZXh0LmlzTnVsbCgpKTsKLQotICAgIGlm
ICghb2xkVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLQot
ICAgICAgICAvLyBBY2NvdW50IGZvciBsZWFkaW5nIHNwYWNlcyBhbmQgcHVuY3R1YXRpb24uCi0g
ICAgICAgIHdoaWxlIChsZW5ndGggPCBvbGRUZXh0Lmxlbmd0aCgpICYmIHNob3VsZFNraXBGb3JG
aXJzdExldHRlcihvbGRUZXh0W2xlbmd0aF0pKQotICAgICAgICAgICAgbGVuZ3RoKys7Ci0KLSAg
ICAgICAgLy8gQWNjb3VudCBmb3IgZmlyc3QgZ3JhcGhlbWUgY2x1c3Rlci4KLSAgICAgICAgbGVu
Z3RoICs9IG51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nVmlldyhvbGRUZXh0
KS5zdWJzdHJpbmcobGVuZ3RoKSwgMSk7Ci0KLSAgICAgICAgLy8gS2VlcCBsb29raW5nIGZvciB3
aGl0ZXNwYWNlIGFuZCBhbGxvd2VkIHB1bmN0dWF0aW9uLCBidXQgYXZvaWQKLSAgICAgICAgLy8g
YWNjdW11bGF0aW5nIGp1c3Qgd2hpdGVzcGFjZSBpbnRvIHRoZSA6Zmlyc3QtbGV0dGVyLgotICAg
ICAgICBmb3IgKHVuc2lnbmVkIHNjYW5MZW5ndGggPSBsZW5ndGg7IHNjYW5MZW5ndGggPCBvbGRU
ZXh0Lmxlbmd0aCgpOyArK3NjYW5MZW5ndGgpIHsKLSAgICAgICAgICAgIFVDaGFyIGMgPSBvbGRU
ZXh0W3NjYW5MZW5ndGhdOwotCi0gICAgICAgICAgICBpZiAoIXNob3VsZFNraXBGb3JGaXJzdExl
dHRlcihjKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaWYgKGlzUHVu
Y3R1YXRpb25Gb3JGaXJzdExldHRlcihjKSkKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBzY2Fu
TGVuZ3RoICsgMTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIHRleHROb2RlID0gY3VycmVu
dFRleHRDaGlsZC50ZXh0Tm9kZSgpOwotICAgICAgICBhdXRvKiBiZWZvcmVDaGlsZCA9IGN1cnJl
bnRUZXh0Q2hpbGQubmV4dFNpYmxpbmcoKTsKLSAgICAgICAgZmlyc3RMZXR0ZXJDb250YWluZXIt
PnJlbW92ZUFuZERlc3Ryb3lDaGlsZChjdXJyZW50VGV4dENoaWxkKTsKLQotICAgICAgICAvLyBD
b25zdHJ1Y3QgYSB0ZXh0IGZyYWdtZW50IGZvciB0aGUgdGV4dCBhZnRlciB0aGUgZmlyc3QgbGV0
dGVyLgotICAgICAgICAvLyBUaGlzIHRleHQgZnJhZ21lbnQgbWlnaHQgYmUgZW1wdHkuCi0gICAg
ICAgIFJlbmRlclB0cjxSZW5kZXJUZXh0RnJhZ21lbnQ+IG5ld1JlbWFpbmluZ1RleHQ7Ci0gICAg
ICAgIGlmICh0ZXh0Tm9kZSkgewotICAgICAgICAgICAgbmV3UmVtYWluaW5nVGV4dCA9IGNyZWF0
ZVJlbmRlcmVyPFJlbmRlclRleHRGcmFnbWVudD4oKnRleHROb2RlLCBvbGRUZXh0LCBsZW5ndGgs
IG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOwotICAgICAgICAgICAgdGV4dE5vZGUtPnNldFJl
bmRlcmVyKG5ld1JlbWFpbmluZ1RleHQuZ2V0KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG5ld1JlbWFpbmluZ1RleHQgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+
KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgb2xkVGV4dCwgbGVuZ3RoLCBvbGRUZXh0Lmxl
bmd0aCgpIC0gbGVuZ3RoKTsKLQotICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQmIHJlbWFpbmlu
Z1RleHQgPSAqbmV3UmVtYWluaW5nVGV4dDsKLSAgICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6OmN1
cnJlbnQoKS0+aW5zZXJ0Q2hpbGQoKmZpcnN0TGV0dGVyQ29udGFpbmVyLCBXVEZNb3ZlKG5ld1Jl
bWFpbmluZ1RleHQpLCBiZWZvcmVDaGlsZCk7Ci0gICAgICAgIHJlbWFpbmluZ1RleHQuc2V0Rmly
c3RMZXR0ZXIoZmlyc3RMZXR0ZXIpOwotICAgICAgICBmaXJzdExldHRlci5zZXRGaXJzdExldHRl
clJlbWFpbmluZ1RleHQocmVtYWluaW5nVGV4dCk7Ci0KLSAgICAgICAgLy8gY29uc3RydWN0IHRl
eHQgZnJhZ21lbnQgZm9yIHRoZSBmaXJzdCBsZXR0ZXIKLSAgICAgICAgYXV0byBsZXR0ZXIgPSBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1l
bnQoKSwgb2xkVGV4dCwgMCwgbGVuZ3RoKTsKLQotICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6
Y3VycmVudCgpLT5pbnNlcnRDaGlsZChmaXJzdExldHRlciwgV1RGTW92ZShsZXR0ZXIpKTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBib29sIHN1cHBvcnRzRmlyc3RMZXR0ZXIoUmVuZGVyQmxvY2smIGJs
b2NrKQotewotICAgIGlmIChpczxSZW5kZXJCdXR0b24+KGJsb2NrKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zsb3c+KGJsb2NrKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChpczxSZW5kZXJTVkdUZXh0PihibG9jaykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoaXM8UmVuZGVyUnVieVJ1bj4oYmxvY2spKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGJsb2NrLmNhbkhhdmVHZW5lcmF0ZWRDaGlsZHJlbigp
OwotfQotCi12b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpGaXJzdExldHRlcjo6dXBkYXRlKFJlbmRl
ckJsb2NrJiBibG9jaykKLXsKLSAgICBpZiAoIWJsb2NrLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUo
RklSU1RfTEVUVEVSKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghc3VwcG9ydHNGaXJzdExl
dHRlcihibG9jaykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSByZWZhY3RvcmVkLCBmaXJzdExldHRlckNvbnRhaW5lciBpcyBub3QgbmVlZGVkLgotICAg
IFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJSZW5kZXJlcjsKLSAgICBSZW5kZXJFbGVtZW50KiBm
aXJzdExldHRlckNvbnRhaW5lcjsKLSAgICBibG9jay5nZXRGaXJzdExldHRlcihmaXJzdExldHRl
clJlbmRlcmVyLCBmaXJzdExldHRlckNvbnRhaW5lcik7Ci0KLSAgICBpZiAoIWZpcnN0TGV0dGVy
UmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE90aGVyIGNvbnRhaW5lcnMgYXJl
IGhhbmRsZWQgd2hlbiB1cGRhdGluZyB0aGVpciByZW5kZXJlcnMuCi0gICAgaWYgKCZibG9jayAh
PSBmaXJzdExldHRlckNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhl
IGNoaWxkIGFscmVhZHkgaGFzIHN0eWxlLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRl
ZCwgc28gd2UganVzdCB3YW50Ci0gICAgLy8gdG8gdXBkYXRlIGl0LgotICAgIGlmIChmaXJzdExl
dHRlclJlbmRlcmVyLT5wYXJlbnQoKS0+c3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBGSVJTVF9MRVRU
RVIpIHsKLSAgICAgICAgdXBkYXRlRmlyc3RMZXR0ZXJTdHlsZShibG9jaywgKmZpcnN0TGV0dGVy
UmVuZGVyZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFpczxSZW5kZXJU
ZXh0PihmaXJzdExldHRlclJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRl
Rmlyc3RMZXR0ZXJSZW5kZXJlcihibG9jaywgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmZpcnN0TGV0
dGVyUmVuZGVyZXIpKTsKLX0KLQotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0
ZXIuaAkocmV2aXNpb24gMjI2MTQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0
aW5nL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlclRy
ZWVVcGRhdGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyQmxvY2s7
Ci0KLWNsYXNzIFJlbmRlclRyZWVVcGRhdGVyOjpGaXJzdExldHRlciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgdXBkYXRlKFJlbmRlckJsb2NrJik7Ci19OwotCi19Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>