<?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>142429</bug_id>
          
          <creation_ts>2015-03-06 20:47:04 -0800</creation_ts>
          <short_desc>Merge TrivialAtom and CharacterSet into a Term abstraction, prepare Term for composition</short_desc>
          <delta_ts>2015-03-09 14:13:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1075222</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-06 20:47:04 -0800</bug_when>
    <thetext>Merge TrivialAtom and CharacterSet into a Term abstraction, prepare Term for composition</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075225</commentid>
    <comment_count>1</comment_count>
      <attachid>248139</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-06 20:53:17 -0800</bug_when>
    <thetext>Created attachment 248139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075226</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-06 20:55:02 -0800</bug_when>
    <thetext>Attachment 248139 did not pass style-queue:


ERROR: Source/WebCore/contentextensions/URLFilterParser.cpp:487:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075271</commentid>
    <comment_count>3</comment_count>
      <attachid>248139</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-03-07 09:24:33 -0800</bug_when>
    <thetext>Comment on attachment 248139
Patch

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

&gt; Source/WebCore/contentextensions/URLFilterParser.cpp:51
&gt; +    enum class TermType : uint8_t {
&gt; +        Empty,
&gt; +        Deleted,
&gt; +        CharacterSet
&gt; +    };

This private enum can be in the private: section. There’s no need to have it at the top of the class.

&gt; Source/WebCore/contentextensions/URLFilterParser.cpp:55
&gt; +    Term()
&gt; +    {
&gt; +    }

Why are all the function bodies in the class? To me this seems to make the class harder to read.

&gt; Source/WebCore/contentextensions/URLFilterParser.cpp:281
&gt; +        ~AtomData()
&gt; +        {
&gt; +        }

Is this explicit definition of the destructor needed? If so, why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075744</commentid>
    <comment_count>4</comment_count>
      <attachid>248139</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-09 14:06:01 -0700</bug_when>
    <thetext>Comment on attachment 248139
Patch

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

&gt; Source/WebCore/contentextensions/URLFilterParser.cpp:261
&gt; +        BitVector characters { 128 };

If I understand this correctly, the whole point of using a union, placement new, and explicitly calling destructors is to avoid allocating and deallocating a BitVector for empty/deleted slots in a hash table.  Won&apos;t this all be excessive if we switch to using two uint64_t&apos;s?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075745</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-09 14:07:44 -0700</bug_when>
    <thetext>Committed r181282: &lt;http://trac.webkit.org/changeset/181282&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075747</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-09 14:08:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 248139 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248139&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/contentextensions/URLFilterParser.cpp:261
&gt; &gt; +        BitVector characters { 128 };
&gt; 
&gt; If I understand this correctly, the whole point of using a union, placement
&gt; new, and explicitly calling destructors is to avoid allocating and
&gt; deallocating a BitVector for empty/deleted slots in a hash table.  Won&apos;t
&gt; this all be excessive if we switch to using two uint64_t&apos;s?

The union is there to support other terms without rewriting everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075752</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-09 14:13:37 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 248139 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248139&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/contentextensions/URLFilterParser.cpp:51
&gt; &gt; +    enum class TermType : uint8_t {
&gt; &gt; +        Empty,
&gt; &gt; +        Deleted,
&gt; &gt; +        CharacterSet
&gt; &gt; +    };
&gt; 
&gt; This private enum can be in the private: section. There’s no need to have it
&gt; at the top of the class.

IIRC, some compiler complained about it when it was at the end of the file. Clang seems fine with it, let&apos;s try again.

&gt; &gt; Source/WebCore/contentextensions/URLFilterParser.cpp:55
&gt; &gt; +    Term()
&gt; &gt; +    {
&gt; &gt; +    }
&gt; 
&gt; Why are all the function bodies in the class? To me this seems to make the
&gt; class harder to read.

JavaScriptCore users that style for private generators so I copied that here.

&gt; &gt; Source/WebCore/contentextensions/URLFilterParser.cpp:281
&gt; &gt; +        ~AtomData()
&gt; &gt; +        {
&gt; &gt; +        }
&gt; 
&gt; Is this explicit definition of the destructor needed? If so, why?

It is. The union has non trivial destructor so they need to be invoked explicitly. In this case, the destructor ignore the cleanup and the destroy() function takes care of it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248139</attachid>
            <date>2015-03-06 20:53:17 -0800</date>
            <delta_ts>2015-03-07 09:24:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142429-20150306205256.patch</filename>
            <type>text/plain</type>
            <size>34173</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU0ZmFkNWI5MjQyOWEx
MjBlZmViMjJjNWI2MzQ4ZTdjNzhmZmFhOC4uOTFjODQ0M2QzNDVkYmZkOGQyZjE0M2FiOWQzZWQ4
YTRiNWVmYjAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE1LTAzLTA2ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFRyaXZp
YWxBdG9tIGFuZCBDaGFyYWN0ZXJTZXQgaW50byBhIFRlcm0gYWJzdHJhY3Rpb24sIHByZXBhcmUg
VGVybSBmb3IgY29tcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MjQyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWVyZ2VzIENoYXJhY3RlclNldCBhbmQgVHJpdmlhbCBh
dG9tIGludG8gYSBuZXcgY2xhc3M6IFRlcm0uIEEgVGVybSBpcworICAgICAgICBhIGNvbWJpbmF0
aW9uIG9mIGFuIEF0b20gYW5kIG9uZSBRdWFudGlmaWVyLgorCisgICAgICAgIFdpdGggdGVybSBi
ZWluZyB0aGUgYmFzaWMgYmxvY2ssIHdlIGNhbiB1c2UgdGhlIFByZWZpeFRyZWUgZm9yIGFueSBj
b25zdHJ1Y3QsCisgICAgICAgIGdyZWF0bHkgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIE5GQSBn
cmFwaC4KKworICAgICAgICBUZXJtIGlzIGJ1aWx0IG9uIHRvcCBvZiBhbiB1bmlvbiBob2xkaW5n
IHRoZSBBdG9tIHN0b3JhZ2UuIFRoaXMgaXMgZG9uZSBpbiBwcmVwYXJhdGlvbgorICAgICAgICBm
b3IgbW9yZSBjb21wbGljYXRlZCBBdG9tcyBsaWtlIGEgZGlzanVuY3Rpb24uCisKKyAgICAgICAg
RXZlcnl0aGluZyBlbHNlIGlzIHByZXR0eSBtdWNoIHRoZSBzYW1lLiBCdWlsZE1vZGUgaXMgZ29u
ZSBzaW5jZSB3ZSB1c2UgdGhlIHByZWZpeAorICAgICAgICB0cmVlIGZvciBldmVyeXRoaW5nLiBG
bG9hdGluZ0F0b21UeXBlIGlzIGdvbmUsIGEgVHJpdmlhbEF0b20gaXMgbm93IHJlcHJlc2VudGVk
CisgICAgICAgIGJ5IGEgc2luZ2xlIGNoYXJhY3RlciBDaGFyYWN0ZXJTZXQgKG9yIHR3byBmb3Ig
Y2FzZSBpbnNlbnNpdGl2ZSkuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpwYXJzZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ORkEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5GQTo6YWRkUnVsZUlkKToKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OlRlcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06On5UZXJtKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpUZXJtOjppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpUZXJtOjphZGRDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OlRlcm06OnF1YW50aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpUZXJtOjpxdWFudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpUZXJtOjppc1VuaXZlcnNhbFRyYW5zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OnZpc2l0U2ltcGxlVHJhbnNpdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6aGFzaCk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6aXNFbXB0eVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjppc0RlbGV0ZWRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6ZGVzdHJveSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6Q2hhcmFjdGVyU2V0OjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpDaGFy
YWN0ZXJTZXQ6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRl
cm1IYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJt
SGFzaDo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkdyYXBo
QnVpbGRlcjo6R3JhcGhCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpHcmFwaEJ1aWxkZXI6OmZpbmFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpHcmFwaEJ1aWxkZXI6OmF0b21QYXR0ZXJuQ2hhcmFjdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpHcmFwaEJ1aWxkZXI6OmF0b21CdWlsdEluQ2hh
cmFjdGVyQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkdyYXBo
QnVpbGRlcjo6cXVhbnRpZnlBdG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpHcmFwaEJ1aWxkZXI6OmF0b21DaGFyYWN0ZXJDbGFzc0JlZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpHcmFwaEJ1aWxkZXI6OmF0b21DaGFyYWN0ZXJDbGFz
c0F0b20pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkdyYXBoQnVpbGRl
cjo6YXRvbUNoYXJhY3RlckNsYXNzUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkdyYXBoQnVpbGRlcjo6YWRkVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkdyYXBoQnVpbGRlcjo6c2lua0Zsb2F0aW5nVGVybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6R3JhcGhCdWlsZGVyOjpzaW5rRmxv
YXRpbmdUZXJtSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OlVSTEZpbHRlclBhcnNlcjo6VVJMRmlsdGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6On5VUkxGaWx0ZXJQYXJzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlcjo6YWRk
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6dHJpdmlhbEF0
b21Gcm9tQVNDSUlDaGFyYWN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OnF1YW50aWZ5VHJpdmlhbEF0b20pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnRyaXZpYWxBdG9tUXVhbnRpZmllcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6dHJpdmlhbEF0b21Gb3JOZXds
aW5lQ2xhc3NJREJ1aWx0aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkdyYXBoQnVpbGRlcjo6c2lua0F0b20pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkdyYXBoQnVpbGRlcjo6Z2VuZXJhdGVUcmFuc2l0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpHcmFwaEJ1
aWxkZXI6OnNpbmtUcml2aWFsQXRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6R3JhcGhCdWlsZGVyOjpzaW5rQ2hhcmFjdGVyU2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpHcmFwaEJ1aWxkZXI6OnNpbmtQ
ZW5kaW5nQXRvbUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9VUkxGaWx0ZXJQYXJzZXIuaDoKKwogMjAxNS0wMy0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIE1vdmUgY29tcGlsaW5n
IG9mIGNvbnRlbnQgZXh0ZW5zaW9ucyB0byB0aGUgVUlQcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIu
Y3BwCmluZGV4IDVlM2MzNGJiNTViZWNjYzEyODI0NTg0MTBlMzllY2E1YjVjYzI5YzguLjc0ZDRl
YTFjYTYyYjUwNmUyZTI2NjFkMzkwOWE5NDJkODFmYzY5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIu
Y3BwCkBAIC0xODgsNyArMTg4LDcgQEAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBwYXJz
ZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYgcnVsZXMpCiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNf
UEVSRk9STUFOQ0VfUkVQT1JUSU5HCiAgICAgZG91YmxlIGxvYWRFeHRlbnNpb25FbmRUaW1lID0g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAgZGF0YUxvZ0YoIlRpbWUgc3BlbnQg
bG9hZGluZyBleHRlbnNpb24gJXM6ICVmXG4iLCBpZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIChs
b2FkRXh0ZW5zaW9uRW5kVGltZSAtIGxvYWRFeHRlbnNpb25TdGFydFRpbWUpKTsKKyAgICBkYXRh
TG9nRigiVGltZSBzcGVudCBsb2FkaW5nIGV4dGVuc2lvbiAlZlxuIiwgKGxvYWRFeHRlbnNpb25F
bmRUaW1lIC0gbG9hZEV4dGVuc2lvblN0YXJ0VGltZSkpOwogI2VuZGlmCiAKICAgICByZXR1cm4g
cnVsZUxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9O
RkEuY3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcAppbmRleCA1
M2ExMGI2NDdkMWUzNWNmNzBmNGUyNDY0YjNkMDJlNTU5MmNlMTM2Li5jNzkxYmI0MzQ2OGI0ZGZk
NDEwODk1MWNlYjhhODdiMWVhNmUxZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ORkEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL05GQS5jcHAKQEAgLTEwNSw4ICsxMDUsOCBAQCB2b2lkIE5GQTo6cmVzdG9yZVRvR3JhcGhT
aXplKHVuc2lnbmVkIHNpemUpCiAKIHZvaWQgTkZBOjphZGRSdWxlSWQodW5zaWduZWQgbm9kZSwg
dWludDY0X3QgcnVsZUlkKQogewotICAgIEFTU0VSVCghbV9ub2Rlc1tub2RlXS5ydWxlSWRzLmNv
bnRhaW5zKHJ1bGVJZCkpOwotICAgIG1fbm9kZXNbbm9kZV0ucnVsZUlkcy5hcHBlbmQocnVsZUlk
KTsKKyAgICBpZiAoIW1fbm9kZXNbbm9kZV0ucnVsZUlkcy5jb250YWlucyhydWxlSWQpKQorICAg
ICAgICBtX25vZGVzW25vZGVdLnJ1bGVJZHMuYXBwZW5kKHJ1bGVJZCk7CiB9CiAKIHN0YXRpYyB2
b2lkIHByaW50UmFuZ2UoYm9vbCBmaXJzdFJhbmdlLCB1aW50MTZfdCByYW5nZVN0YXJ0LCB1aW50
MTZfdCByYW5nZUVuZCwgdWludDE2X3QgZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVVJMRmlsdGVyUGFyc2VyLmNw
cAppbmRleCBlYzk2N2Y1YTk4OGE4NTNjODUwNjQ4M2E5ZjFjNTQwOWMzOWFmZTliLi43ZGY0Mjk5
NmFkNzg5OTIyOThiZDY3NzllMjVjMzk5ZGNiNzZjNjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1VSTEZpbHRlclBhcnNlci5jcHAKQEAgLTM2LDY4ICsz
NiwyNzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMgewogCi1jb25zdCB1aW50MTZfdCBoYXNOb25DaGFyYWN0ZXJNYXNrID0gMHgwMDgwOwotY29u
c3QgdWludDE2X3QgY2hhcmFjdGVyTWFzayA9IDB4MDAwN0Y7Ci1jb25zdCB1aW50MTZfdCBuZXds
aW5lQ2xhc3NJREJ1aWx0aW5NYXNrID0gMHgxMDA7Ci1jb25zdCB1aW50MTZfdCBjYXNlSW5zZW5z
aXRpdmVNYXNrID0gMHgyMDA7CitlbnVtIGNsYXNzIEF0b21RdWFudGlmaWVyIDogdWludDhfdCB7
CisgICAgT25lLAorICAgIFplcm9Pck9uZSwKKyAgICBaZXJvT3JNb3JlLAorICAgIE9uZU9yTW9y
ZQorfTsKIAotc3RhdGljIFRyaXZpYWxBdG9tIHRyaXZpYWxBdG9tRnJvbUFTQ0lJQ2hhcmFjdGVy
KGNoYXIgY2hhcmFjdGVyLCBib29sIGNhc2VTZW5zaXRpdmUpCi17Ci0gICAgQVNTRVJUKGlzQVND
SUkoY2hhcmFjdGVyKSk7CitjbGFzcyBUZXJtIHsKKyAgICBlbnVtIGNsYXNzIFRlcm1UeXBlIDog
dWludDhfdCB7CisgICAgICAgIEVtcHR5LAorICAgICAgICBEZWxldGVkLAorICAgICAgICBDaGFy
YWN0ZXJTZXQKKyAgICB9OworcHVibGljOgorICAgIFRlcm0oKQorICAgIHsKKyAgICB9CiAKLSAg
ICBpZiAoY2FzZVNlbnNpdGl2ZSB8fCAhaXNBU0NJSUFscGhhKGNoYXJhY3RlcikpCi0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oY2hhcmFjdGVyKTsKKyAgICBUZXJtKGNoYXIg
Y2hhcmFjdGVyLCBib29sIGlzQ2FzZVNlbnNpdGl2ZSkKKyAgICAgICAgOiBtX3Rlcm1UeXBlKFRl
cm1UeXBlOjpDaGFyYWN0ZXJTZXQpCisgICAgeworICAgICAgICBuZXcgKE5vdE51bGwsICZtX2F0
b21EYXRhLmNoYXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KCk7CisgICAgICAgIGFkZENoYXJhY3Rl
cihjaGFyYWN0ZXIsIGlzQ2FzZVNlbnNpdGl2ZSk7CisgICAgfQogCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVpbnQxNl90Pih0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKSkgfCBjYXNlSW5zZW5zaXRp
dmVNYXNrOwotfQorICAgIGVudW0gVW5pdmVyc2FsVHJhbnNpdGlvblRhZyB7IFVuaXZlcnNhbFRy
YW5zaXRpb24gfTsKKyAgICBleHBsaWNpdCBUZXJtKFVuaXZlcnNhbFRyYW5zaXRpb25UYWcpCisg
ICAgICAgIDogbV90ZXJtVHlwZShUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0KQorICAgIHsKKyAgICAg
ICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQpIENoYXJhY3RlclNldCgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTI4OyArK2kpCisgICAgICAgICAg
ICBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNldChpKTsKKyAgICB9CiAKLWVu
dW0gY2xhc3MgQXRvbVF1YW50aWZpZXIgOiB1aW50MTZfdCB7Ci0gICAgT25lID0gMCwKLSAgICBa
ZXJvT3JPbmUgPSAweDEwMDAsCi0gICAgWmVyb09yTW9yZSA9IDB4MjAwMCwKLSAgICBPbmVPck1v
cmUgPSAweDQwMDAKLX07CisgICAgZW51bSBDaGFyYWN0ZXJTZXRUZXJtVGFnIHsgQ2hhcmFjdGVy
U2V0VGVybSB9OworICAgIFRlcm0oQ2hhcmFjdGVyU2V0VGVybVRhZywgYm9vbCBpc0ludmVydGVk
KQorICAgICAgICA6IG1fdGVybVR5cGUoVGVybVR5cGU6OkNoYXJhY3RlclNldCkKKyAgICB7Cisg
ICAgICAgIG5ldyAoTm90TnVsbCwgJm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0KSBDaGFyYWN0ZXJT
ZXQoKTsKKyAgICAgICAgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuaW52ZXJ0ZWQgPSBpc0ludmVy
dGVkOworICAgIH0KIAotc3RhdGljIHZvaWQgcXVhbnRpZnlUcml2aWFsQXRvbShUcml2aWFsQXRv
bSYgdHJpdmlhbEF0b20sIEF0b21RdWFudGlmaWVyIHF1YW50aWZpZXIpCi17Ci0gICAgQVNTRVJU
KHRyaXZpYWxBdG9tICYgKGhhc05vbkNoYXJhY3Rlck1hc2sgfCBjaGFyYWN0ZXJNYXNrKSk7Ci0g
ICAgQVNTRVJUKCEodHJpdmlhbEF0b20gJiAweGYwMDApKTsKLSAgICB0cml2aWFsQXRvbSB8PSBz
dGF0aWNfY2FzdDx1aW50MTZfdD4ocXVhbnRpZmllcik7Ci19CisgICAgVGVybShjb25zdCBUZXJt
JiBvdGhlcikKKyAgICAgICAgOiBtX3Rlcm1UeXBlKG90aGVyLm1fdGVybVR5cGUpCisgICAgICAg
ICwgbV9xdWFudGlmaWVyKG90aGVyLm1fcXVhbnRpZmllcikKKyAgICB7CisgICAgICAgIHN3aXRj
aCAobV90ZXJtVHlwZSkgeworICAgICAgICBjYXNlIFRlcm1UeXBlOjpFbXB0eToKKyAgICAgICAg
Y2FzZSBUZXJtVHlwZTo6RGVsZXRlZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQ6CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsICZtX2F0
b21EYXRhLmNoYXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KG90aGVyLm1fYXRvbURhdGEuY2hhcmFj
dGVyU2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogCi1zdGF0aWMg
QXRvbVF1YW50aWZpZXIgdHJpdmlhbEF0b21RdWFudGlmaWVyKFRyaXZpYWxBdG9tIHRyaXZpYWxB
dG9tKQotewotICAgIHN3aXRjaCAodHJpdmlhbEF0b20gJiAweGYwMDApIHsKLSAgICBjYXNlIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihBdG9tUXVhbnRpZmllcjo6T25lKToKLSAgICAgICAgcmV0dXJu
IEF0b21RdWFudGlmaWVyOjpPbmU7Ci0gICAgY2FzZSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQXRv
bVF1YW50aWZpZXI6Olplcm9Pck9uZSk6Ci0gICAgICAgIHJldHVybiBBdG9tUXVhbnRpZmllcjo6
WmVyb09yT25lOwotICAgIGNhc2Ugc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEF0b21RdWFudGlmaWVy
OjpaZXJvT3JNb3JlKToKLSAgICAgICAgcmV0dXJuIEF0b21RdWFudGlmaWVyOjpaZXJvT3JNb3Jl
OwotICAgIGNhc2Ugc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEF0b21RdWFudGlmaWVyOjpPbmVPck1v
cmUpOgotICAgICAgICByZXR1cm4gQXRvbVF1YW50aWZpZXI6Ok9uZU9yTW9yZTsKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEF0b21RdWFudGlmaWVyOjpPbmU7
Ci19CisgICAgVGVybShUZXJtJiYgb3RoZXIpCisgICAgICAgIDogbV90ZXJtVHlwZShXVEY6Om1v
dmUob3RoZXIubV90ZXJtVHlwZSkpCisgICAgICAgICwgbV9xdWFudGlmaWVyKFdURjo6bW92ZShv
dGhlci5tX3F1YW50aWZpZXIpKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7
CisgICAgICAgIGNhc2UgVGVybVR5cGU6OkVtcHR5OgorICAgICAgICBjYXNlIFRlcm1UeXBlOjpE
ZWxldGVkOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVybVR5cGU6OkNoYXJh
Y3RlclNldDoKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1fYXRvbURhdGEuY2hhcmFjdGVy
U2V0KSBDaGFyYWN0ZXJTZXQoV1RGOjptb3ZlKG90aGVyLm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBvdGhlci5kZXN0cm95
KCk7CisgICAgfQogCi1zdGF0aWMgVHJpdmlhbEF0b20gdHJpdmlhbEF0b21Gb3JOZXdsaW5lQ2xh
c3NJREJ1aWx0aW4oKQotewotICAgIHJldHVybiBoYXNOb25DaGFyYWN0ZXJNYXNrIHwgbmV3bGlu
ZUNsYXNzSURCdWlsdGluTWFzazsKLX0KKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZh
bHVlIH07CisgICAgVGVybShFbXB0eVZhbHVlVGFnKQorICAgICAgICA6IG1fdGVybVR5cGUoVGVy
bVR5cGU6OkVtcHR5KQorICAgIHsKKyAgICB9CiAKLWNsYXNzIEdyYXBoQnVpbGRlciB7Ci0gICAg
c3RydWN0IEJvdW5kZWRTdWJHcmFwaCB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0OwotICAgICAg
ICB1bnNpZ25lZCBlbmQ7CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUg
fTsKKyAgICBUZXJtKERlbGV0ZWRWYWx1ZVRhZykKKyAgICAgICAgOiBtX3Rlcm1UeXBlKFRlcm1U
eXBlOjpEZWxldGVkKQorICAgIHsKKyAgICB9CisKKyAgICB+VGVybSgpCisgICAgeworICAgICAg
ICBkZXN0cm95KCk7CisgICAgfQorCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3Rlcm1UeXBlICE9IFRlcm1UeXBlOjpFbXB0eSAmJiBtX3Rlcm1UeXBl
ICE9IFRlcm1UeXBlOjpEZWxldGVkOworICAgIH0KKworICAgIHZvaWQgYWRkQ2hhcmFjdGVyKFVD
aGFyIGNoYXJhY3RlciwgYm9vbCBpc0Nhc2VTZW5zaXRpdmUpCisgICAgeworICAgICAgICBBU1NF
UlQoaXNBU0NJSShjaGFyYWN0ZXIpKTsKKworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihtX3Rlcm1UeXBlID09IFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQpOworICAgICAg
ICBpZiAobV90ZXJtVHlwZSAhPSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChpc0Nhc2VTZW5zaXRpdmUgfHwgIWlzQVNDSUlBbHBoYShj
aGFyYWN0ZXIpKQorICAgICAgICAgICAgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVy
cy5zZXQoY2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2F0b21EYXRh
LmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNldCh0b0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSk7Cisg
ICAgICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNldCh0b0FTQ0lJ
TG93ZXIoY2hhcmFjdGVyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHF1YW50aWZ5
KGNvbnN0IEF0b21RdWFudGlmaWVyJiBxdWFudGlmaWVyKQorICAgIHsKKyAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShtX3F1YW50aWZpZXIgPT0gQXRvbVF1YW50aWZpZXI6Ok9uZSwgIlRyYW5z
aXRpb24gdG8gcXVhbnRpZmllZCB0ZXJtIHNob3VsZCBvbmx5IGhhcHBlbiBvbmNlLiIpOworICAg
ICAgICBtX3F1YW50aWZpZXIgPSBxdWFudGlmaWVyOworICAgIH0KKworICAgIEF0b21RdWFudGlm
aWVyIHF1YW50aWZpZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcXVhbnRpZmll
cjsKKyAgICB9CisKKyAgICBib29sIGlzVW5pdmVyc2FsVHJhbnNpdGlvbigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV90ZXJtVHlwZSA9PSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0Cisg
ICAgICAgICAgICAmJiAoKG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmludmVydGVkICYmICFtX2F0
b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLmJpdENvdW50KCkpCisgICAgICAgICAgICAg
ICAgfHwgKCFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5pbnZlcnRlZCAmJiBtX2F0b21EYXRhLmNo
YXJhY3RlclNldC5jaGFyYWN0ZXJzLmJpdENvdW50KCkgPT0gMTI4KSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdFNpbXBsZVRyYW5zaXRpb25zKHN0ZDo6ZnVuY3Rpb248dm9pZChjaGFyKT4gdmlz
aXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKG1fdGVybVR5cGUgPT0gVGVybVR5cGU6OkNoYXJhY3RlclNldCk7CisgICAgICAgIGlmICht
X3Rlcm1UeXBlICE9IFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKCFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5pbnZlcnRlZCkgeworICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjaGFyYWN0ZXJJdGVyYXRvciA6IG1fYXRvbURhdGEu
Y2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuc2V0Qml0cygpKQorICAgICAgICAgICAgICAgIHZpc2l0
b3Ioc3RhdGljX2Nhc3Q8Y2hhcj4oY2hhcmFjdGVySXRlcmF0b3IpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2F0b21EYXRhLmNoYXJh
Y3RlclNldC5jaGFyYWN0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1f
YXRvbURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuZ2V0KGkpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB2aXNpdG9yKHN0YXRpY19jYXN0PGNoYXI+
KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFRlcm0mIG9wZXJh
dG9yPShjb25zdCBUZXJtJiBvdGhlcikKKyAgICB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAg
ICAgbmV3IChOb3ROdWxsLCB0aGlzKSBUZXJtKG90aGVyKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIFRlcm0mIG9wZXJhdG9yPShUZXJtJiYgb3RoZXIpCisgICAgeworICAg
ICAgICBkZXN0cm95KCk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgdGhpcykgVGVybShXVEY6Om1v
dmUob3RoZXIpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBUZXJtJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChvdGhl
ci5tX3Rlcm1UeXBlICE9IG1fdGVybVR5cGUgfHwgb3RoZXIubV9xdWFudGlmaWVyICE9IG1fcXVh
bnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzd2l0Y2ggKG1f
dGVybVR5cGUpIHsKKyAgICAgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6CisgICAgICAgIGNhc2Ug
VGVybVR5cGU6OkRlbGV0ZWQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2Fz
ZSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0OgorICAgICAgICAgICAgcmV0dXJuIG1fYXRvbURhdGEu
Y2hhcmFjdGVyU2V0ID09IG90aGVyLm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0OworICAgICAgICB9
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25l
ZCBwcmltYXJ5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdGVybVR5cGUpIDw8IDE2IHwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fcXVhbnRpZmllcik7CisgICAgICAgIHVuc2lnbmVkIHNlY29u
ZGFyeSA9IDA7CisgICAgICAgIHN3aXRjaCAobV90ZXJtVHlwZSkgeworICAgICAgICBjYXNlIFRl
cm1UeXBlOjpFbXB0eToKKyAgICAgICAgICAgIHNlY29uZGFyeSA9IDUyMTg0MzkzOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVybVR5cGU6OkRlbGV0ZWQ6CisgICAgICAgICAg
ICBzZWNvbmRhcnkgPSA0MDM0Mjk4ODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQ6CisgICAgICAgICAgICBzZWNvbmRhcnkgPSBtX2F0b21E
YXRhLmNoYXJhY3RlclNldC5oYXNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChwcmltYXJ5LCBzZWNvbmRhcnkpOworICAg
IH0KKworICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3Rlcm1UeXBlID09IFRlcm1UeXBlOjpFbXB0eTsKKyAgICB9CisKKyAgICBib29sIGlzRGVs
ZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Rlcm1UeXBlID09IFRl
cm1UeXBlOjpEZWxldGVkOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGRlc3Ryb3koKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7CisgICAgICAgIGNhc2UgVGVybVR5
cGU6OkVtcHR5OgorICAgICAgICBjYXNlIFRlcm1UeXBlOjpEZWxldGVkOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDoKKyAgICAgICAgICAg
IG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0Ln5DaGFyYWN0ZXJTZXQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIG1fdGVybVR5cGUgPSBUZXJtVHlwZTo6RGVsZXRlZDsK
KyAgICB9CisKKyAgICBUZXJtVHlwZSBtX3Rlcm1UeXBlIHsgVGVybVR5cGU6OkVtcHR5IH07Cisg
ICAgQXRvbVF1YW50aWZpZXIgbV9xdWFudGlmaWVyIHsgQXRvbVF1YW50aWZpZXI6Ok9uZSB9Owor
CisgICAgc3RydWN0IENoYXJhY3RlclNldCB7CisgICAgICAgIGJvb2wgaW52ZXJ0ZWQgeyBmYWxz
ZSB9OworICAgICAgICBCaXRWZWN0b3IgY2hhcmFjdGVycyB7IDEyOCB9OworCisgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDaGFyYWN0ZXJTZXQmIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gb3RoZXIuaW52ZXJ0ZWQgPT0gaW52ZXJ0ZWQgJiYgb3RoZXIu
Y2hhcmFjdGVycyA9PSBjaGFyYWN0ZXJzOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRI
YXNoKGludmVydGVkLCBjaGFyYWN0ZXJzLmhhc2goKSk7CisgICAgICAgIH0KICAgICB9OwogCisg
ICAgdW5pb24gQXRvbURhdGEgeworICAgICAgICBBdG9tRGF0YSgpCisgICAgICAgICAgICA6IGlu
dmFsaWRUZXJtKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB+QXRvbURhdGEoKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjaGFyIGludmFsaWRUZXJtOworICAgICAg
ICBDaGFyYWN0ZXJTZXQgY2hhcmFjdGVyU2V0OworICAgIH0gbV9hdG9tRGF0YTsKK307CisKK3N0
cnVjdCBUZXJtSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVGVybSYgdGVy
bSkgeyByZXR1cm4gdGVybS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBU
ZXJtJiBhLCBjb25zdCBUZXJtJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCitzdHJ1
Y3QgVGVybUhhc2hUcmFpdHMgOiBwdWJsaWMgV1RGOjpDdXN0b21IYXNoVHJhaXRzPFRlcm0+IHsg
fTsKKworc3RydWN0IFByZWZpeFRyZWVFbnRyeSB7CisgICAgdW5zaWduZWQgbmZhTm9kZTsKKyAg
ICBIYXNoTWFwPFRlcm0sIHN0ZDo6dW5pcXVlX3B0cjxQcmVmaXhUcmVlRW50cnk+LCBUZXJtSGFz
aCwgVGVybUhhc2hUcmFpdHM+IG5leHRQYXR0ZXJuOworfTsKKworY2xhc3MgR3JhcGhCdWlsZGVy
IHsKIHB1YmxpYzoKICAgICBHcmFwaEJ1aWxkZXIoTkZBJiBuZmEsIFByZWZpeFRyZWVFbnRyeSYg
cHJlZml4VHJlZVJvb3QsIGJvb2wgcGF0dGVybklzQ2FzZVNlbnNpdGl2ZSwgdWludDY0X3QgcGF0
dGVybklkKQogICAgICAgICA6IG1fbmZhKG5mYSkKICAgICAgICAgLCBtX3BhdHRlcm5Jc0Nhc2VT
ZW5zaXRpdmUocGF0dGVybklzQ2FzZVNlbnNpdGl2ZSkKICAgICAgICAgLCBtX3BhdHRlcm5JZChw
YXR0ZXJuSWQpCi0gICAgICAgICwgbV9hY3RpdmVHcm91cCh7IG5mYS5yb290KCksIG5mYS5yb290
KCkgfSkKKyAgICAgICAgLCBtX3N1YnRyZWVTdGFydChuZmEucm9vdCgpKQorICAgICAgICAsIG1f
c3VidHJlZUVuZChuZmEucm9vdCgpKQogICAgICAgICAsIG1fbGFzdFByZWZpeFRyZWVFbnRyeSgm
cHJlZml4VHJlZVJvb3QpCiAgICAgewogICAgIH0KQEAgLTEwNywxMCArMzE1LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgc2lua1BlbmRpbmdBdG9tSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgc2lua0Zsb2F0aW5nVGVy
bUlmTmVjZXNzYXJ5KCk7CiAKLSAgICAgICAgaWYgKG1fYWN0aXZlR3JvdXAuc3RhcnQgIT0gbV9h
Y3RpdmVHcm91cC5lbmQpCi0gICAgICAgICAgICBtX25mYS5zZXRGaW5hbChtX2FjdGl2ZUdyb3Vw
LmVuZCwgbV9wYXR0ZXJuSWQpOworICAgICAgICBpZiAobV9zdWJ0cmVlU3RhcnQgIT0gbV9zdWJ0
cmVlRW5kKQorICAgICAgICAgICAgbV9uZmEuc2V0RmluYWwobV9zdWJ0cmVlRW5kLCBtX3BhdHRl
cm5JZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZhaWwoQVNDSUlMaXRlcmFsKCJUaGUg
cGF0dGVybiBjYW5ub3QgbWF0Y2ggYW55dGhpbmcuIikpOwogICAgIH0KQEAgLTEzMCwxMyArMzM4
LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IHNpbmtQZW5kaW5nQXRvbUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIEFTU0VSVChtX2Zsb2F0aW5n
QXRvbVR5cGUgPT0gRmxvYXRpbmdBdG9tVHlwZTo6SW52YWxpZCk7Ci0gICAgICAgIEFTU0VSVCgh
bV9wZW5kaW5nVHJpdmlhbEF0b20pOworICAgICAgICBzaW5rRmxvYXRpbmdUZXJtSWZOZWNlc3Nh
cnkoKTsKKyAgICAgICAgQVNTRVJUKCFtX2Zsb2F0aW5nVGVybS5pc1ZhbGlkKCkpOwogCiAgICAg
ICAgIGNoYXIgYXNjaWlDaGFyYXJhY3RlciA9IHN0YXRpY19jYXN0PGNoYXI+KGNoYXJhY3Rlcik7
Ci0gICAgICAgIG1fcGVuZGluZ1RyaXZpYWxBdG9tID0gdHJpdmlhbEF0b21Gcm9tQVNDSUlDaGFy
YWN0ZXIoYXNjaWlDaGFyYXJhY3RlciwgbV9wYXR0ZXJuSXNDYXNlU2Vuc2l0aXZlKTsKLSAgICAg
ICAgbV9mbG9hdGluZ0F0b21UeXBlID0gRmxvYXRpbmdBdG9tVHlwZTo6VHJpdmlhbDsKKyAgICAg
ICAgbV9mbG9hdGluZ1Rlcm0gPSBUZXJtKGFzY2lpQ2hhcmFyYWN0ZXIsIG1fcGF0dGVybklzQ2Fz
ZVNlbnNpdGl2ZSk7CiAgICAgfQogCiAgICAgdm9pZCBhdG9tQnVpbHRJbkNoYXJhY3RlckNsYXNz
KEpTQzo6WWFycjo6QnVpbHRJbkNoYXJhY3RlckNsYXNzSUQgYnVpbHRJbkNoYXJhY3RlckNsYXNz
SUQsIGJvb2wgaW52ZXJ0ZWQpCkBAIC0xNDQsMTQgKzM1MCwxMiBAQCBwdWJsaWM6CiAgICAgICAg
IGlmIChoYXNFcnJvcigpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHNpbmtQZW5k
aW5nQXRvbUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIEFTU0VSVChtX2Zsb2F0aW5nQXRvbVR5cGUg
PT0gRmxvYXRpbmdBdG9tVHlwZTo6SW52YWxpZCk7Ci0gICAgICAgIEFTU0VSVCghbV9wZW5kaW5n
VHJpdmlhbEF0b20pOworICAgICAgICBzaW5rRmxvYXRpbmdUZXJtSWZOZWNlc3NhcnkoKTsKKyAg
ICAgICAgQVNTRVJUKCFtX2Zsb2F0aW5nVGVybS5pc1ZhbGlkKCkpOwogCi0gICAgICAgIGlmIChi
dWlsdEluQ2hhcmFjdGVyQ2xhc3NJRCA9PSBKU0M6OllhcnI6Ok5ld2xpbmVDbGFzc0lEICYmIGlu
dmVydGVkKSB7Ci0gICAgICAgICAgICBtX3BlbmRpbmdUcml2aWFsQXRvbSA9IHRyaXZpYWxBdG9t
Rm9yTmV3bGluZUNsYXNzSURCdWlsdGluKCk7Ci0gICAgICAgICAgICBtX2Zsb2F0aW5nQXRvbVR5
cGUgPSBGbG9hdGluZ0F0b21UeXBlOjpUcml2aWFsOwotICAgICAgICB9IGVsc2UKKyAgICAgICAg
aWYgKGJ1aWx0SW5DaGFyYWN0ZXJDbGFzc0lEID09IEpTQzo6WWFycjo6TmV3bGluZUNsYXNzSUQg
JiYgaW52ZXJ0ZWQpCisgICAgICAgICAgICBtX2Zsb2F0aW5nVGVybSA9IFRlcm0oVGVybTo6VW5p
dmVyc2FsVHJhbnNpdGlvbik7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZhaWwoQVNDSUlM
aXRlcmFsKCJDaGFyYWN0ZXIgY2xhc3MgaXMgbm90IHN1cHBvcnRlZC4iKSk7CiAgICAgfQogCkBA
IC0xNjAsMzQgKzM2NCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChoYXNFcnJvcigpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHN3aXRjaCAobV9mbG9hdGluZ0F0b21UeXBlKSB7
Ci0gICAgICAgIGNhc2UgRmxvYXRpbmdBdG9tVHlwZTo6SW52YWxpZDoKLSAgICAgICAgICAgIGZh
aWwoQVNDSUlMaXRlcmFsKCJRdWFudGlmaWVyIHdpdGhvdXQgY29ycmVzcG9uZGluZyBhdG9tIHRv
IHF1YW50aWZ5LiIpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIW1fZmxvYXRp
bmdUZXJtLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGZhaWwoQVNDSUlMaXRlcmFsKCJRdWFudGlm
aWVyIHdpdGhvdXQgY29ycmVzcG9uZGluZyB0ZXJtIHRvIHF1YW50aWZ5LiIpKTsKIAotICAgICAg
ICBjYXNlIEZsb2F0aW5nQXRvbVR5cGU6OlRyaXZpYWw6Ci0gICAgICAgICAgICBpZiAoIW1pbmlt
dW0gJiYgbWF4aW11bSA9PSAxKQotICAgICAgICAgICAgICAgIHF1YW50aWZ5VHJpdmlhbEF0b20o
bV9wZW5kaW5nVHJpdmlhbEF0b20sIEF0b21RdWFudGlmaWVyOjpaZXJvT3JPbmUpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoIW1pbmltdW0gJiYgbWF4aW11bSA9PSBKU0M6OllhcnI6OnF1YW50aWZ5
SW5maW5pdGUpCi0gICAgICAgICAgICAgICAgcXVhbnRpZnlUcml2aWFsQXRvbShtX3BlbmRpbmdU
cml2aWFsQXRvbSwgQXRvbVF1YW50aWZpZXI6Olplcm9Pck1vcmUpOwotICAgICAgICAgICAgZWxz
ZSBpZiAobWluaW11bSA9PSAxICYmIG1heGltdW0gPT0gSlNDOjpZYXJyOjpxdWFudGlmeUluZmlu
aXRlKQotICAgICAgICAgICAgICAgIHF1YW50aWZ5VHJpdmlhbEF0b20obV9wZW5kaW5nVHJpdmlh
bEF0b20sIEF0b21RdWFudGlmaWVyOjpPbmVPck1vcmUpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZhaWwoQVNDSUlMaXRlcmFsKCJBcmJpdHJhcnkgYXRvbSByZXBldGl0aW9u
cyBhcmUgbm90IHN1cHBvcnRlZC4iKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBGbG9hdGluZ0F0b21UeXBlOjpDaGFyYWN0ZXJTZXQ6IHsKLSAgICAgICAgICAgIEFTU0VSVCht
X2NoYXJhY3RlclNldFF1YW50aWZpZXIgPT0gQXRvbVF1YW50aWZpZXI6Ok9uZSk7Ci0gICAgICAg
ICAgICBpZiAoIW1pbmltdW0gJiYgbWF4aW11bSA9PSAxKQotICAgICAgICAgICAgICAgIG1fY2hh
cmFjdGVyU2V0UXVhbnRpZmllciA9IEF0b21RdWFudGlmaWVyOjpaZXJvT3JPbmU7Ci0gICAgICAg
ICAgICBlbHNlIGlmICghbWluaW11bSAmJiBtYXhpbXVtID09IEpTQzo6WWFycjo6cXVhbnRpZnlJ
bmZpbml0ZSkKLSAgICAgICAgICAgICAgICBtX2NoYXJhY3RlclNldFF1YW50aWZpZXIgPSBBdG9t
UXVhbnRpZmllcjo6WmVyb09yTW9yZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1pbmltdW0gPT0g
MSAmJiBtYXhpbXVtID09IEpTQzo6WWFycjo6cXVhbnRpZnlJbmZpbml0ZSkKLSAgICAgICAgICAg
ICAgICBtX2NoYXJhY3RlclNldFF1YW50aWZpZXIgPSBBdG9tUXVhbnRpZmllcjo6T25lT3JNb3Jl
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhaWwoQVNDSUlMaXRlcmFsKCJB
cmJpdHJhcnkgY2hhcmFjdGVyIHNldCByZXBldGl0aW9ucyBhcmUgbm90IHN1cHBvcnRlZC4iKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGlmICgh
bWluaW11bSAmJiBtYXhpbXVtID09IDEpCisgICAgICAgICAgICBtX2Zsb2F0aW5nVGVybS5xdWFu
dGlmeShBdG9tUXVhbnRpZmllcjo6WmVyb09yT25lKTsKKyAgICAgICAgZWxzZSBpZiAoIW1pbmlt
dW0gJiYgbWF4aW11bSA9PSBKU0M6OllhcnI6OnF1YW50aWZ5SW5maW5pdGUpCisgICAgICAgICAg
ICBtX2Zsb2F0aW5nVGVybS5xdWFudGlmeShBdG9tUXVhbnRpZmllcjo6WmVyb09yTW9yZSk7Cisg
ICAgICAgIGVsc2UgaWYgKG1pbmltdW0gPT0gMSAmJiBtYXhpbXVtID09IEpTQzo6WWFycjo6cXVh
bnRpZnlJbmZpbml0ZSkKKyAgICAgICAgICAgIG1fZmxvYXRpbmdUZXJtLnF1YW50aWZ5KEF0b21R
dWFudGlmaWVyOjpPbmVPck1vcmUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmYWlsKEFT
Q0lJTGl0ZXJhbCgiQXJiaXRyYXJ5IGF0b20gcmVwZXRpdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQu
IikpOwogICAgIH0KIAogICAgIHZvaWQgYXRvbUJhY2tSZWZlcmVuY2UodW5zaWduZWQpCkBAIC0y
MTUsMTYgKzQwMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChoYXNFcnJvcigpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIHNpbmtQZW5kaW5nQXRvbUlmTmVjZXNzYXJ5KCk7Cisg
ICAgICAgIHNpbmtGbG9hdGluZ1Rlcm1JZk5lY2Vzc2FyeSgpOworICAgICAgICBBU1NFUlQoIW1f
ZmxvYXRpbmdUZXJtLmlzVmFsaWQoKSk7CiAKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgh
bV9wZW5kaW5nQ2hhcmFjdGVyU2V0LmJpdENvdW50KCksICJXZSBzaG91bGQgbm90IGhhdmUgbmVz
dGVkIGNoYXJhY3RlciBjbGFzc2VzLiIpOwotICAgICAgICBBU1NFUlQobV9mbG9hdGluZ0F0b21U
eXBlID09IEZsb2F0aW5nQXRvbVR5cGU6OkludmFsaWQpOwotCi0gICAgICAgIG1fYnVpbGRNb2Rl
ID0gQnVpbGRNb2RlOjpEaXJlY3RHZW5lcmF0aW9uOwotICAgICAgICBtX2xhc3RQcmVmaXhUcmVl
RW50cnkgPSBudWxscHRyOwotCi0gICAgICAgIG1faXNJbnZlcnRlZENoYXJhY3RlclNldCA9IGlu
dmVydGVkOwotICAgICAgICBtX2Zsb2F0aW5nQXRvbVR5cGUgPSBGbG9hdGluZ0F0b21UeXBlOjpD
aGFyYWN0ZXJTZXQ7CisgICAgICAgIG1fZmxvYXRpbmdUZXJtID0gVGVybShUZXJtOjpDaGFyYWN0
ZXJTZXRUZXJtLCBpbnZlcnRlZCk7CiAgICAgfQogCiAgICAgdm9pZCBhdG9tQ2hhcmFjdGVyQ2xh
c3NBdG9tKFVDaGFyIGNoYXJhY3RlcikKQEAgLTIzMiwxMyArNDEzLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQVNT
RVJUKG1fZmxvYXRpbmdBdG9tVHlwZSA9PSBGbG9hdGluZ0F0b21UeXBlOjpDaGFyYWN0ZXJTZXQp
OwotCiAgICAgICAgIGlmICghaXNBU0NJSShjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICBmYWls
KEFTQ0lJTGl0ZXJhbCgiTm9uIEFTQ0lJIENoYXJhY3RlciBpbiBhIGNoYXJhY3RlciBzZXQuIikp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fcGVuZGluZ0NoYXJh
Y3RlclNldC5zZXQoY2hhcmFjdGVyKTsKKworICAgICAgICBtX2Zsb2F0aW5nVGVybS5hZGRDaGFy
YWN0ZXIoY2hhcmFjdGVyLCBtX3BhdHRlcm5Jc0Nhc2VTZW5zaXRpdmUpOwogICAgIH0KIAogICAg
IHZvaWQgYXRvbUNoYXJhY3RlckNsYXNzUmFuZ2UoVUNoYXIgYSwgVUNoYXIgYikKQEAgLTI0Niwx
NCArNDI2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGhhc0Vycm9yKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgQVNTRVJUKG1fZmxvYXRpbmdBdG9tVHlwZSA9PSBGbG9hdGlu
Z0F0b21UeXBlOjpDaGFyYWN0ZXJTZXQpOwotCiAgICAgICAgIGlmICghYSB8fCAhYiB8fCAhaXNB
U0NJSShhKSB8fCAhaXNBU0NJSShiKSkgewogICAgICAgICAgICAgZmFpbChBU0NJSUxpdGVyYWwo
Ik5vbiBBU0NJSSBDaGFyYWN0ZXIgaW4gYSBjaGFyYWN0ZXIgcmFuZ2Ugb2YgYSBjaGFyYWN0ZXIg
c2V0LiIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGE7IGkgPD0gYjsgKytpKQotICAgICAgICAgICAgbV9wZW5kaW5nQ2hhcmFj
dGVyU2V0LnNldChpKTsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdUZXJtLmFkZENoYXJhY3Rlcihz
dGF0aWNfY2FzdDxVQ2hhcj4oaSksIG1fcGF0dGVybklzQ2FzZVNlbnNpdGl2ZSk7CiAgICAgfQog
CiAgICAgdm9pZCBhdG9tQ2hhcmFjdGVyQ2xhc3NFbmQoKQpAQCAtMzAzLDIwICs0ODIsMzEgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CiAgICAgfQog
Ci0gICAgQm91bmRlZFN1YkdyYXBoIHNpbmtBdG9tKHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25l
ZCwgdW5zaWduZWQpPiB0cmFuc2l0aW9uRnVuY3Rpb24sIEF0b21RdWFudGlmaWVyIHF1YW50aWZp
ZXIsIHVuc2lnbmVkIHN0YXJ0KQorICAgIHZvaWQgYWRkVHJhbnNpdGlvbnModW5zaWduZWQgc291
cmNlLCB1bnNpZ25lZCB0YXJnZXQpCisgICAgeworICAgICAgICBhdXRvIHZpc2l0b3IgPSBbdGhp
cywgc291cmNlLCB0YXJnZXRdKGNoYXIgY2hhcmFjdGVyKSB7CisgICAgICAgICAgICBpZiAobV9m
bG9hdGluZ1Rlcm0uaXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkpCisgICAgICAgICAgICAgICAgbV9u
ZmEuYWRkVHJhbnNpdGlvbnNPbkFueUNoYXJhY3Rlcihzb3VyY2UsIHRhcmdldCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9uZmEuYWRkVHJhbnNpdGlvbihzb3VyY2UsIHRh
cmdldCwgY2hhcmFjdGVyKTsKKyAgICAgICAgfTsKKyAgICAgICAgbV9mbG9hdGluZ1Rlcm0udmlz
aXRTaW1wbGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaW5r
RmxvYXRpbmdUZXJtKHVuc2lnbmVkIHN0YXJ0KQogICAgIHsKLSAgICAgICAgc3dpdGNoIChxdWFu
dGlmaWVyKSB7CisgICAgICAgIHN3aXRjaCAobV9mbG9hdGluZ1Rlcm0ucXVhbnRpZmllcigpKSB7
CiAgICAgICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Ok9uZTogewogICAgICAgICAgICAgdW5zaWdu
ZWQgbmV3RW5kID0gbV9uZmEuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgbV9uZmEuYWRkUnVs
ZUlkKG5ld0VuZCwgbV9wYXR0ZXJuSWQpOwotICAgICAgICAgICAgdHJhbnNpdGlvbkZ1bmN0aW9u
KHN0YXJ0LCBuZXdFbmQpOwotICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQsIG5ld0VuZCB9Owor
ICAgICAgICAgICAgYWRkVHJhbnNpdGlvbnMoc3RhcnQsIG5ld0VuZCk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3RW5kOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Olpl
cm9Pck9uZTogewogICAgICAgICAgICAgdW5zaWduZWQgbmV3RW5kID0gbV9uZmEuY3JlYXRlTm9k
ZSgpOwogICAgICAgICAgICAgbV9uZmEuYWRkUnVsZUlkKG5ld0VuZCwgbV9wYXR0ZXJuSWQpOwot
ICAgICAgICAgICAgdHJhbnNpdGlvbkZ1bmN0aW9uKHN0YXJ0LCBuZXdFbmQpOwotICAgICAgICAg
ICAgcmV0dXJuIHsgc3RhcnQsIG5ld0VuZCB9OworICAgICAgICAgICAgYWRkVHJhbnNpdGlvbnMo
c3RhcnQsIG5ld0VuZCk7CisgICAgICAgICAgICByZXR1cm4gbmV3RW5kOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Olplcm9Pck1vcmU6IHsKICAgICAgICAgICAgIHVu
c2lnbmVkIHJlcGVhdFN0YXJ0ID0gbV9uZmEuY3JlYXRlTm9kZSgpOwpAQCAtMzI0LDcgKzUxNCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRFbmQgPSBtX25mYS5jcmVh
dGVOb2RlKCk7CiAgICAgICAgICAgICBtX25mYS5hZGRSdWxlSWQocmVwZWF0RW5kLCBtX3BhdHRl
cm5JZCk7CiAKLSAgICAgICAgICAgIHRyYW5zaXRpb25GdW5jdGlvbihyZXBlYXRTdGFydCwgcmVw
ZWF0RW5kKTsKKyAgICAgICAgICAgIGFkZFRyYW5zaXRpb25zKHJlcGVhdFN0YXJ0LCByZXBlYXRF
bmQpOwogICAgICAgICAgICAgbV9uZmEuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0RW5kLCBy
ZXBlYXRTdGFydCk7CiAKICAgICAgICAgICAgIG1fbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHN0
YXJ0LCByZXBlYXRTdGFydCk7CkBAIC0zMzMsNyArNTIzLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fbmZhLmFkZFJ1bGVJZChrbGVlbkVuZCwgbV9wYXR0ZXJuSWQpOwogICAgICAgICAgICAg
bV9uZmEuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0RW5kLCBrbGVlbkVuZCk7CiAgICAgICAg
ICAgICBtX25mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihzdGFydCwga2xlZW5FbmQpOwotICAgICAg
ICAgICAgcmV0dXJuIHsgc3RhcnQsIGtsZWVuRW5kIH07CisgICAgICAgICAgICByZXR1cm4ga2xl
ZW5FbmQ7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBdG9tUXVhbnRpZmllcjo6T25lT3JNb3Jl
OiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRTdGFydCA9IG1fbmZhLmNyZWF0ZU5vZGUo
KTsKQEAgLTM0MSw3ICs1MzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgdW5zaWduZWQgcmVw
ZWF0RW5kID0gbV9uZmEuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgbV9uZmEuYWRkUnVsZUlk
KHJlcGVhdEVuZCwgbV9wYXR0ZXJuSWQpOwogCi0gICAgICAgICAgICB0cmFuc2l0aW9uRnVuY3Rp
b24ocmVwZWF0U3RhcnQsIHJlcGVhdEVuZCk7CisgICAgICAgICAgICBhZGRUcmFuc2l0aW9ucyhy
ZXBlYXRTdGFydCwgcmVwZWF0RW5kKTsKICAgICAgICAgICAgIG1fbmZhLmFkZEVwc2lsb25UcmFu
c2l0aW9uKHJlcGVhdEVuZCwgcmVwZWF0U3RhcnQpOwogCiAgICAgICAgICAgICBtX25mYS5hZGRF
cHNpbG9uVHJhbnNpdGlvbihzdGFydCwgcmVwZWF0U3RhcnQpOwpAQCAtMzQ5LDE3MiArNTM5LDY5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1bnNpZ25lZCBhZnRlclJlcGVhdCA9IG1fbmZhLmNy
ZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIG1fbmZhLmFkZFJ1bGVJZChhZnRlclJlcGVhdCwgbV9w
YXR0ZXJuSWQpOwogICAgICAgICAgICAgbV9uZmEuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0
RW5kLCBhZnRlclJlcGVhdCk7Ci0gICAgICAgICAgICByZXR1cm4geyBzdGFydCwgYWZ0ZXJSZXBl
YXQgfTsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBnZW5lcmF0ZVRy
YW5zaXRpb24oVHJpdmlhbEF0b20gdHJpdmlhbEF0b20sIHVuc2lnbmVkIHNvdXJjZSwgdW5zaWdu
ZWQgdGFyZ2V0KQotICAgIHsKLSAgICAgICAgaWYgKHRyaXZpYWxBdG9tICYgaGFzTm9uQ2hhcmFj
dGVyTWFzaykgewotICAgICAgICAgICAgQVNTRVJUKHRyaXZpYWxBdG9tICYgbmV3bGluZUNsYXNz
SURCdWlsdGluTWFzayk7Ci0gICAgICAgICAgICBtX25mYS5hZGRUcmFuc2l0aW9uc09uQW55Q2hh
cmFjdGVyKHNvdXJjZSwgdGFyZ2V0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
ICh0cml2aWFsQXRvbSAmIGNhc2VJbnNlbnNpdGl2ZU1hc2spIHsKLSAgICAgICAgICAgICAgICBj
aGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PGNoYXI+KHRyaXZpYWxBdG9tICYgY2hhcmFjdGVy
TWFzayk7Ci0gICAgICAgICAgICAgICAgbV9uZmEuYWRkVHJhbnNpdGlvbihzb3VyY2UsIHRhcmdl
dCwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBtX25mYS5hZGRUcmFuc2l0aW9uKHNvdXJj
ZSwgdGFyZ2V0LCB0b0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBtX25mYS5hZGRUcmFuc2l0aW9uKHNvdXJjZSwgdGFyZ2V0LCBzdGF0
aWNfY2FzdDxjaGFyPih0cml2aWFsQXRvbSAmIGNoYXJhY3Rlck1hc2spKTsKKyAgICAgICAgICAg
IHJldHVybiBhZnRlclJlcGVhdDsKICAgICAgICAgfQotICAgIH0KLQotICAgIEJvdW5kZWRTdWJH
cmFwaCBzaW5rVHJpdmlhbEF0b20oVHJpdmlhbEF0b20gdHJpdmlhbEF0b20sIHVuc2lnbmVkIHN0
YXJ0KQotICAgIHsKLSAgICAgICAgYXV0byB0cmFuc2l0aW9uRnVuY3Rpb24gPSBbdGhpcywgdHJp
dmlhbEF0b21dKHVuc2lnbmVkIHNvdXJjZSwgdW5zaWduZWQgdGFyZ2V0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBnZW5lcmF0ZVRyYW5zaXRpb24odHJpdmlhbEF0b20sIHNvdXJjZSwgdGFyZ2V0
KTsKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIHNpbmtBdG9tKHRyYW5zaXRpb25GdW5jdGlv
biwgdHJpdmlhbEF0b21RdWFudGlmaWVyKHRyaXZpYWxBdG9tKSwgc3RhcnQpOwotICAgIH0KLQot
ICAgIHZvaWQgZ2VuZXJhdGVUcmFuc2l0aW9uKGNvbnN0IEJpdFZlY3RvciYgY2hhcmFjdGVyU2V0
LCBib29sIGlzSW52ZXJ0ZWQsIHVuc2lnbmVkIHNvdXJjZSwgdW5zaWduZWQgdGFyZ2V0KQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGNoYXJhY3RlclNldC5iaXRDb3VudCgpKTsKLSAgICAgICAgaWYg
KCFpc0ludmVydGVkKSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYXJhY3Rlckl0
ZXJhdG9yIDogY2hhcmFjdGVyU2V0LnNldEJpdHMoKSkgewotICAgICAgICAgICAgICAgIGNoYXIg
Y2hhcmFjdGVyID0gc3RhdGljX2Nhc3Q8Y2hhcj4oY2hhcmFjdGVySXRlcmF0b3IpOwotICAgICAg
ICAgICAgICAgIGlmICghbV9wYXR0ZXJuSXNDYXNlU2Vuc2l0aXZlICYmIGlzQVNDSUlBbHBoYShj
aGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbmZhLmFkZFRyYW5zaXRpb24oc291
cmNlLCB0YXJnZXQsIHRvQVNDSUlVcHBlcihjaGFyYWN0ZXIpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9uZmEuYWRkVHJhbnNpdGlvbihzb3VyY2UsIHRhcmdldCwgdG9BU0NJSUxvd2VyKGNoYXJh
Y3RlcikpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX25m
YS5hZGRUcmFuc2l0aW9uKHNvdXJjZSwgdGFyZ2V0LCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IGNoYXJhY3RlclNldC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0
ZXJTZXQuZ2V0KGkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICBjaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PGNoYXI+KGkpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFtX3BhdHRlcm5Jc0Nhc2VTZW5zaXRpdmUgJiYgKGNoYXJhY3RlclNldC5nZXQo
dG9BU0NJSVVwcGVyKGNoYXJhY3RlcikpIHx8IGNoYXJhY3RlclNldC5nZXQodG9BU0NJSUxvd2Vy
KGNoYXJhY3RlcikpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgICAgICBtX25mYS5hZGRUcmFuc2l0aW9uKHNvdXJjZSwgdGFyZ2V0LCBjaGFyYWN0ZXIpOwot
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgQm91bmRlZFN1YkdyYXBoIHNp
bmtDaGFyYWN0ZXJTZXQoY29uc3QgQml0VmVjdG9yJiBjaGFyYWN0ZXJTZXQsIGJvb2wgaXNJbnZl
cnRlZCwgdW5zaWduZWQgc3RhcnQpCi0gICAgewotICAgICAgICBhdXRvIHRyYW5zaXRpb25GdW5j
dGlvbiA9IFt0aGlzLCAmY2hhcmFjdGVyU2V0LCBpc0ludmVydGVkXSh1bnNpZ25lZCBzb3VyY2Us
IHVuc2lnbmVkIHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2VuZXJhdGVUcmFuc2l0
aW9uKGNoYXJhY3RlclNldCwgaXNJbnZlcnRlZCwgc291cmNlLCB0YXJnZXQpOwotICAgICAgICB9
OwotICAgICAgICByZXR1cm4gc2lua0F0b20odHJhbnNpdGlvbkZ1bmN0aW9uLCBtX2NoYXJhY3Rl
clNldFF1YW50aWZpZXIsIHN0YXJ0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNpbmtQZW5kaW5nQXRv
bUlmTmVjZXNzYXJ5KCkKKyAgICB2b2lkIHNpbmtGbG9hdGluZ1Rlcm1JZk5lY2Vzc2FyeSgpCiAg
ICAgewotICAgICAgICBpZiAobV9mbG9hdGluZ0F0b21UeXBlID09IEZsb2F0aW5nQXRvbVR5cGU6
OkludmFsaWQpCisgICAgICAgIGlmICghbV9mbG9hdGluZ1Rlcm0uaXNWYWxpZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIHN3aXRjaCAobV9idWlsZE1vZGUpIHsKLSAgICAgICAg
Y2FzZSBCdWlsZE1vZGU6OlByZWZpeFRyZWU6IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2xhc3RQ
cmVmaXhUcmVlRW50cnkpOwotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2Zsb2F0
aW5nQXRvbVR5cGUgPT0gRmxvYXRpbmdBdG9tVHlwZTo6VHJpdmlhbCwgIk9ubHkgdHJpdmlhbCBh
dG9tcyBhcmUgaGFuZGxlZCB3aXRoIGEgcHJlZml4IHRyZWUuIik7CisgICAgICAgIEFTU0VSVCht
X2xhc3RQcmVmaXhUcmVlRW50cnkpOwogCi0gICAgICAgICAgICBhdXRvIG5leHRFbnRyeSA9IG1f
bGFzdFByZWZpeFRyZWVFbnRyeS0+bmV4dFBhdHRlcm4uZmluZChtX3BlbmRpbmdUcml2aWFsQXRv
bSk7Ci0gICAgICAgICAgICBpZiAobmV4dEVudHJ5ICE9IG1fbGFzdFByZWZpeFRyZWVFbnRyeS0+
bmV4dFBhdHRlcm4uZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBtX2xhc3RQcmVmaXhUcmVlRW50
cnkgPSBuZXh0RW50cnktPnZhbHVlLmdldCgpOwotICAgICAgICAgICAgICAgIG1fbmZhLmFkZFJ1
bGVJZChtX2xhc3RQcmVmaXhUcmVlRW50cnktPm5mYU5vZGUsIG1fcGF0dGVybklkKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRy
ZWVFbnRyeT4gbmV4dFByZWZpeFRyZWVFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8UHJlZml4VHJl
ZUVudHJ5PigpOwotCi0gICAgICAgICAgICAgICAgQm91bmRlZFN1YkdyYXBoIG5ld1N1YkdyYXBo
ID0gc2lua1RyaXZpYWxBdG9tKG1fcGVuZGluZ1RyaXZpYWxBdG9tLCBtX2xhc3RQcmVmaXhUcmVl
RW50cnktPm5mYU5vZGUpOwotICAgICAgICAgICAgICAgIG5leHRQcmVmaXhUcmVlRW50cnktPm5m
YU5vZGUgPSBuZXdTdWJHcmFwaC5lbmQ7CisgICAgICAgIGF1dG8gbmV4dEVudHJ5ID0gbV9sYXN0
UHJlZml4VHJlZUVudHJ5LT5uZXh0UGF0dGVybi5maW5kKG1fZmxvYXRpbmdUZXJtKTsKKyAgICAg
ICAgaWYgKG5leHRFbnRyeSAhPSBtX2xhc3RQcmVmaXhUcmVlRW50cnktPm5leHRQYXR0ZXJuLmVu
ZCgpKSB7CisgICAgICAgICAgICBtX2xhc3RQcmVmaXhUcmVlRW50cnkgPSBuZXh0RW50cnktPnZh
bHVlLmdldCgpOworICAgICAgICAgICAgbV9uZmEuYWRkUnVsZUlkKG1fbGFzdFByZWZpeFRyZWVF
bnRyeS0+bmZhTm9kZSwgbV9wYXR0ZXJuSWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRyZWVFbnRyeT4gbmV4dFByZWZpeFRyZWVFbnRyeSA9
IHN0ZDo6bWFrZV91bmlxdWU8UHJlZml4VHJlZUVudHJ5PigpOwogCi0gICAgICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX2xhc3RQcmVmaXhUcmVlRW50cnktPm5leHRQYXR0ZXJuLnNldCht
X3BlbmRpbmdUcml2aWFsQXRvbSwgV1RGOjptb3ZlKG5leHRQcmVmaXhUcmVlRW50cnkpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAg
dW5zaWduZWQgbmV3RW5kID0gc2lua0Zsb2F0aW5nVGVybShtX2xhc3RQcmVmaXhUcmVlRW50cnkt
Pm5mYU5vZGUpOworICAgICAgICAgICAgbmV4dFByZWZpeFRyZWVFbnRyeS0+bmZhTm9kZSA9IG5l
d0VuZDsKIAotICAgICAgICAgICAgICAgIGlmICghbV9uZXdQcmVmaXhTdWJ0cmVlUm9vdCkgewot
ICAgICAgICAgICAgICAgICAgICBtX25ld1ByZWZpeFN1YnRyZWVSb290ID0gbV9sYXN0UHJlZml4
VHJlZUVudHJ5OwotICAgICAgICAgICAgICAgICAgICBtX25ld1ByZWZpeFN0YXJpbmdQb2ludCA9
IG1fcGVuZGluZ1RyaXZpYWxBdG9tOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9sYXN0UHJlZml4VHJlZUVudHJ5LT5uZXh0UGF0dGVybi5zZXQobV9m
bG9hdGluZ1Rlcm0sIFdURjo6bW92ZShuZXh0UHJlZml4VHJlZUVudHJ5KSk7CisgICAgICAgICAg
ICBBU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogCi0gICAgICAgICAgICAgICAgbV9sYXN0
UHJlZml4VHJlZUVudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fYWN0aXZlR3JvdXAuZW5kID0gbV9sYXN0UHJlZml4VHJl
ZUVudHJ5LT5uZmFOb2RlOwotICAgICAgICAgICAgQVNTRVJUKG1fbGFzdFByZWZpeFRyZWVFbnRy
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEJ1aWxkTW9k
ZTo6RGlyZWN0R2VuZXJhdGlvbjogewotICAgICAgICAgICAgQVNTRVJUKCFtX2xhc3RQcmVmaXhU
cmVlRW50cnkpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG1fZmxvYXRpbmdBdG9tVHlwZSkgewot
ICAgICAgICAgICAgY2FzZSBGbG9hdGluZ0F0b21UeXBlOjpJbnZhbGlkOgotICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBGbG9hdGluZ0F0b21UeXBlOjpUcml2aWFsOiB7Ci0gICAgICAgICAgICAgICAg
Qm91bmRlZFN1YkdyYXBoIG5ld1N1YkdyYXBoID0gc2lua1RyaXZpYWxBdG9tKG1fcGVuZGluZ1Ry
aXZpYWxBdG9tLCBtX2FjdGl2ZUdyb3VwLmVuZCk7Ci0gICAgICAgICAgICAgICAgbV9hY3RpdmVH
cm91cC5lbmQgPSBuZXdTdWJHcmFwaC5lbmQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEZsb2F0aW5nQXRvbVR5cGU6OkNoYXJhY3RlclNl
dDoKLSAgICAgICAgICAgICAgICBpZiAoIW1fcGVuZGluZ0NoYXJhY3RlclNldC5iaXRDb3VudCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWwoQVNDSUlMaXRlcmFsKCJFbXB0eSBjaGFyYWN0
ZXIgc2V0LiIpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBCb3VuZGVkU3ViR3JhcGggbmV3U3ViR3JhcGggPSBzaW5rQ2hh
cmFjdGVyU2V0KG1fcGVuZGluZ0NoYXJhY3RlclNldCwgbV9pc0ludmVydGVkQ2hhcmFjdGVyU2V0
LCBtX2FjdGl2ZUdyb3VwLmVuZCk7Ci0gICAgICAgICAgICAgICAgbV9hY3RpdmVHcm91cC5lbmQg
PSBuZXdTdWJHcmFwaC5lbmQ7Ci0KLSAgICAgICAgICAgICAgICBtX2lzSW52ZXJ0ZWRDaGFyYWN0
ZXJTZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBtX2NoYXJhY3RlclNldFF1YW50aWZpZXIg
PSBBdG9tUXVhbnRpZmllcjo6T25lOwotICAgICAgICAgICAgICAgIG1fcGVuZGluZ0NoYXJhY3Rl
clNldC5jbGVhckFsbCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIW1fbmV3UHJlZml4U3VidHJlZVJv
b3QpIHsKKyAgICAgICAgICAgICAgICBtX25ld1ByZWZpeFN1YnRyZWVSb290ID0gbV9sYXN0UHJl
Zml4VHJlZUVudHJ5OworICAgICAgICAgICAgICAgIG1fbmV3UHJlZml4U3RhcmluZ1BvaW50ID0g
bV9mbG9hdGluZ1Rlcm07CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fbGFzdFByZWZp
eFRyZWVFbnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIH0K
KyAgICAgICAgbV9zdWJ0cmVlRW5kID0gbV9sYXN0UHJlZml4VHJlZUVudHJ5LT5uZmFOb2RlOwog
Ci0gICAgICAgIG1fcGVuZGluZ1RyaXZpYWxBdG9tID0gMDsKLSAgICAgICAgbV9mbG9hdGluZ0F0
b21UeXBlID0gRmxvYXRpbmdBdG9tVHlwZTo6SW52YWxpZDsKKyAgICAgICAgbV9mbG9hdGluZ1Rl
cm0gPSBUZXJtKCk7CisgICAgICAgIEFTU0VSVChtX2xhc3RQcmVmaXhUcmVlRW50cnkpOwogICAg
IH0KIAogICAgIE5GQSYgbV9uZmE7CiAgICAgYm9vbCBtX3BhdHRlcm5Jc0Nhc2VTZW5zaXRpdmU7
CiAgICAgY29uc3QgdWludDY0X3QgbV9wYXR0ZXJuSWQ7CiAKLSAgICBCb3VuZGVkU3ViR3JhcGgg
bV9hY3RpdmVHcm91cDsKKyAgICB1bnNpZ25lZCBtX3N1YnRyZWVTdGFydCB7IDAgfTsKKyAgICB1
bnNpZ25lZCBtX3N1YnRyZWVFbmQgeyAwIH07CiAKICAgICBQcmVmaXhUcmVlRW50cnkqIG1fbGFz
dFByZWZpeFRyZWVFbnRyeTsKLSAgICBlbnVtIGNsYXNzIEZsb2F0aW5nQXRvbVR5cGUgewotICAg
ICAgICBJbnZhbGlkLAotICAgICAgICBUcml2aWFsLAotICAgICAgICBDaGFyYWN0ZXJTZXQKLSAg
ICB9OwotICAgIEZsb2F0aW5nQXRvbVR5cGUgbV9mbG9hdGluZ0F0b21UeXBlIHsgRmxvYXRpbmdB
dG9tVHlwZTo6SW52YWxpZCB9OwotICAgIFRyaXZpYWxBdG9tIG1fcGVuZGluZ1RyaXZpYWxBdG9t
ID0gMDsKLQotICAgIGJvb2wgbV9pc0ludmVydGVkQ2hhcmFjdGVyU2V0IHsgZmFsc2UgfTsKLSAg
ICBCaXRWZWN0b3IgbV9wZW5kaW5nQ2hhcmFjdGVyU2V0IHsgMTI4IH07Ci0gICAgQXRvbVF1YW50
aWZpZXIgbV9jaGFyYWN0ZXJTZXRRdWFudGlmaWVyIHsgQXRvbVF1YW50aWZpZXI6Ok9uZSB9Owot
Ci0gICAgZW51bSBjbGFzcyBCdWlsZE1vZGUgewotICAgICAgICBQcmVmaXhUcmVlLAotICAgICAg
ICBEaXJlY3RHZW5lcmF0aW9uCi0gICAgfTsKLSAgICBCdWlsZE1vZGUgbV9idWlsZE1vZGUgeyBC
dWlsZE1vZGU6OlByZWZpeFRyZWUgfTsKKyAgICBUZXJtIG1fZmxvYXRpbmdUZXJtOwogCiAgICAg
UHJlZml4VHJlZUVudHJ5KiBtX25ld1ByZWZpeFN1YnRyZWVSb290ID0gbnVsbHB0cjsKLSAgICBU
cml2aWFsQXRvbSBtX25ld1ByZWZpeFN0YXJpbmdQb2ludCA9IDA7CisgICAgVGVybSBtX25ld1By
ZWZpeFN0YXJpbmdQb2ludDsKIAogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKIH07CiAKIFVS
TEZpbHRlclBhcnNlcjo6VVJMRmlsdGVyUGFyc2VyKE5GQSYgbmZhKQogICAgIDogbV9uZmEobmZh
KQorICAgICwgbV9wcmVmaXhUcmVlUm9vdChzdGQ6Om1ha2VfdW5pcXVlPFByZWZpeFRyZWVFbnRy
eT4oKSkKK3sKKyAgICBtX3ByZWZpeFRyZWVSb290LT5uZmFOb2RlID0gbmZhLnJvb3QoKTsKK30K
KworVVJMRmlsdGVyUGFyc2VyOjp+VVJMRmlsdGVyUGFyc2VyKCkKIHsKLSAgICBtX3ByZWZpeFRy
ZWVSb290Lm5mYU5vZGUgPSBuZmEucm9vdCgpOwogfQogCiBTdHJpbmcgVVJMRmlsdGVyUGFyc2Vy
OjphZGRQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgYm9vbCBwYXR0ZXJuSXNDYXNlU2Vu
c2l0aXZlLCB1aW50NjRfdCBwYXR0ZXJuSWQpCkBAIC01MzAsNyArNjE3LDcgQEAgU3RyaW5nIFVS
TEZpbHRlclBhcnNlcjo6YWRkUGF0dGVybihjb25zdCBTdHJpbmcmIHBhdHRlcm4sIGJvb2wgcGF0
dGVybklzQ2FzZVNlbnMKIAogICAgIFN0cmluZyBlcnJvcjsKIAotICAgIEdyYXBoQnVpbGRlciBn
cmFwaEJ1aWxkZXIobV9uZmEsIG1fcHJlZml4VHJlZVJvb3QsIHBhdHRlcm5Jc0Nhc2VTZW5zaXRp
dmUsIHBhdHRlcm5JZCk7CisgICAgR3JhcGhCdWlsZGVyIGdyYXBoQnVpbGRlcihtX25mYSwgKm1f
cHJlZml4VHJlZVJvb3QsIHBhdHRlcm5Jc0Nhc2VTZW5zaXRpdmUsIHBhdHRlcm5JZCk7CiAgICAg
ZXJyb3IgPSBTdHJpbmcoSlNDOjpZYXJyOjpwYXJzZShncmFwaEJ1aWxkZXIsIHBhdHRlcm4sIDAp
KTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIGdyYXBoQnVpbGRlci5maW5hbGl6
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVVJMRmls
dGVyUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQ
YXJzZXIuaAppbmRleCA1YmZiM2YxN2RhZjNjMDI0NDQzNmQ0MDhiYWFjYjA4YTExYTE2OGEzLi5l
NzUxOGVmNmFiOTQwZWNiYWE2ODg0YzAzODk4ZTEyMGJkZDA0NWE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0ZXJQYXJzZXIuaApAQCAtMzcsMjIg
KzM3LDE3IEBAIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKIGNsYXNzIE5GQTsKIAot
dHlwZWRlZiB1aW50MTZfdCBUcml2aWFsQXRvbTsKLQotc3RydWN0IFByZWZpeFRyZWVFbnRyeSB7
Ci0gICAgdW5zaWduZWQgbmZhTm9kZTsKLSAgICBIYXNoTWFwPFRyaXZpYWxBdG9tLCBzdGQ6OnVu
aXF1ZV9wdHI8UHJlZml4VHJlZUVudHJ5Pj4gbmV4dFBhdHRlcm47Ci19OwotCitzdHJ1Y3QgUHJl
Zml4VHJlZUVudHJ5OwogCiBjbGFzcyBVUkxGaWx0ZXJQYXJzZXIgewogcHVibGljOgogICAgIGV4
cGxpY2l0IFVSTEZpbHRlclBhcnNlcihORkEmKTsKKyAgICB+VVJMRmlsdGVyUGFyc2VyKCk7CiAg
ICAgU3RyaW5nIGFkZFBhdHRlcm4oY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBib29sIHBhdHRlcm5J
c0Nhc2VTZW5zaXRpdmUsIHVpbnQ2NF90IHBhdHRlcm5JZCk7CiAKIHByaXZhdGU6CiAgICAgTkZB
JiBtX25mYTsKLSAgICBQcmVmaXhUcmVlRW50cnkgbV9wcmVmaXhUcmVlUm9vdDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UHJlZml4VHJlZUVudHJ5PiBtX3ByZWZpeFRyZWVSb290OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMK
</data>
<flag name="review"
          id="273056"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>