<?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>201076</bug_id>
          
          <creation_ts>2019-08-23 05:52:53 -0700</creation_ts>
          <short_desc>Implement layout system independent text box iterator</short_desc>
          <delta_ts>2019-08-26 10:58:51 -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>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>ggaren</cc>
    
    <cc>sam</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>1564442</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-23 05:52:53 -0700</bug_when>
    <thetext>Add a generic way to traverse line layout without caring about the details of the underlying layout system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564444</commentid>
    <comment_count>1</comment_count>
      <attachid>377124</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-23 06:00:35 -0700</bug_when>
    <thetext>Created attachment 377124
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564445</commentid>
    <comment_count>2</comment_count>
      <attachid>377125</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-23 06:19:50 -0700</bug_when>
    <thetext>Created attachment 377125
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564515</commentid>
    <comment_count>3</comment_count>
      <attachid>377125</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-08-23 11:13:56 -0700</bug_when>
    <thetext>Comment on attachment 377125
patch

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

&gt; Source/WebCore/rendering/line/DisplayAccessTextBoxes.h:39
&gt; +namespace DisplayAccess {

I don&apos;t like this name for two reasons. First, &quot;Display&quot; can be read as a verb. Second you&apos;re not accessing displays.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564546</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-23 12:01:53 -0700</bug_when>
    <thetext>Display as in &quot;display tree&quot;. But suggestions are welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564578</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-23 13:43:53 -0700</bug_when>
    <thetext>I think I&apos;ll go with &apos;LineInterface&apos; for the namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564607</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-23 14:35:06 -0700</bug_when>
    <thetext>Can you help me understand what a LineInterface::TextBox (or DisplayAccess::TextBox) is supposed to represent. With both of those names, I can&apos;t quite wrap my head around it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564613</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-23 14:54:00 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #6)
&gt; Can you help me understand what a LineInterface::TextBox (or
&gt; DisplayAccess::TextBox) is supposed to represent. With both of those names,
&gt; I can&apos;t quite wrap my head around it.

It is an interface for accessing (layout generated) text box properties that hides the underlying data structures. There will be similar interfaces for other inline box types. Note that TextBox itself is just a temporary generated by the iterator, it is not an interesting type in itself.

The goal is be able to write code that accesses line layout without having to write multiple versions for different paths (we have two and a third one on the way).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564773</commentid>
    <comment_count>8</comment_count>
      <attachid>377204</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-23 23:33:52 -0700</bug_when>
    <thetext>Created attachment 377204
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564774</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-08-23 23:35:09 -0700</bug_when>
    <thetext>Called it LineLayoutInterface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564805</commentid>
    <comment_count>10</comment_count>
      <attachid>377204</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-24 06:31:56 -0700</bug_when>
    <thetext>Comment on attachment 377204
patch

Clearing flags on attachment: 377204

Committed r249084: &lt;https://trac.webkit.org/changeset/249084&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564806</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-24 06:31:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564808</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-24 06:32:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/54670697&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565012</commentid>
    <comment_count>13</comment_count>
      <attachid>377204</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-08-26 10:58:51 -0700</bug_when>
    <thetext>Comment on attachment 377204
patch

I would prefer we avoid &quot;interface&quot; in names. See VideoFullscreenInterface, for which I can never grok the meaning of &quot;interface&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377124</attachid>
            <date>2019-08-23 06:00:35 -0700</date>
            <delta_ts>2019-08-23 06:19:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>displayaccess-textbox-2.patch</filename>
            <type>text/plain</type>
            <size>21674</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlZTI2MWYwYjFiMy4uMDg2Yjc5YjM2YzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOS0wOC0yMyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgSW1wbGVtZW50IGxheW91dCBzeXN0ZW0gaW5kZXBlbmRlbnQgdGV4dCBib3gg
aXRlcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMTA3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIGdlbmVyaWMgd2F5IHRvIHRyYXZlcnNlIGxpbmUgbGF5b3V0IHdpdGhvdXQgY2FyaW5n
IGFib3V0IHRoZSBkZXRhaWxzIG9mIHRoZSB1bmRlcmx5aW5nIGxheW91dCBzeXN0ZW0uCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIGJhc2ljIHN1cHBvcnQgZm9yIHRyYXZlcnNpbmcgdGV4dCBi
b3hlcyBhbmQgdXNlcyBpdCB0byByZW1vdmUgbGF5b3V0IHBhdGggc3BlY2lmaWMgYnJhbmNoZXMg
aW4gUmVuZGVyVHJlZUFzVGV4dC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0
Ojp3cml0ZVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRleHRCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUZXh0UnVu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU2ltcGxlTGluZSk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUFjY2Vzczo6VGV4dEJveDo6cmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94Ojpsb2dpY2FsUmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94OjpoYXNI
eXBoZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUFjY2Vzczo6VGV4dEJveDo6
aXNMZWZ0VG9SaWdodERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
QWNjZXNzOjpUZXh0Qm94OjpkaXJPdmVycmlkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5QWNjZXNzOjpUZXh0Qm94Ojp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlBY2Nlc3M6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlBY2Nlc3M6OlRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlBY2Nlc3M6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpzaW1wbGVMaW5l
UnVuUmVzb2x2ZXJGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlBY2Nlc3M6OnJh
bmdlRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94UmFu
Z2U6OlRleHRCb3hSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjp0ZXh0
Qm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0Rpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94OjpUZXh0
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlBY2Nlc3M6OlRleHRCb3hJdGVyYXRvcjo6
b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94SXRl
cmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUFjY2Vz
czo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUFjY2Vzczo6VGV4dEJveFJhbmdlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94UmFuZ2U6OmVuZCBjb25zdCk6CisKIDIwMTktMDgt
MjIgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIENhcHR1cmVE
ZXZpY2VNYW5hZ2VyIGRvZXMgbm90IG5lZWQgdG8gYmUgQ2FuTWFrZVdlYWtQdHIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggMGEzOGRkNDZjN2QuLjRmMmI4MjcyYjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjE1
MCw2ICsyMTUwLDcgQEAgcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAogcmVuZGVyaW5nL1Rl
eHRQYWludGVyLmNwcAogcmVuZGVyaW5nL1RyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5jcHAK
IAorcmVuZGVyaW5nL2xpbmUvRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5jcHAKIHJlbmRlcmluZy9s
aW5lL0xpbmVCcmVha2VyLmNwcAogcmVuZGVyaW5nL2xpbmUvTGluZUluZm8uY3BwCiByZW5kZXJp
bmcvbGluZS9MaW5lV2lkdGguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzg1MmQzZDM5MzcuLjYyNjdiNTJmYmY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00Nzg5LDYgKzQ3ODksNyBAQAogCQlFNDdDMzkzMzFGRTZFMTA4MDBCQkJDNkIgLyogUmVuZGVy
VHJlZUJ1aWxkZXJNdWx0aUNvbHVtbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ3QzM5MjcxRkU2RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWls
ZGVyTXVsdGlDb2x1bW4uaCAqLzsgfTsKIAkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8qIEV4
dGVuc2lvblN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVl
dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
NDgxMzdCOTFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVWYWxpZGl0eS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJG
IC8qIFN0eWxlVmFsaWRpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlFNDg0QTMzRTIzMDU1MzI1MDA5QURFNkEgLyogRGlzcGxheUFjY2Vzc1Rl
eHRCb3hlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ4NEEzM0IyMzA1NTMwMzAwOUFERTZBIC8qIERpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMuaCAqLzsg
fTsKIAkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEExMTgwQjU3
RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5MTZGRjcxOTVERjZBMDAwNUFCMzQ5IC8qIExh
eWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90
dGxlU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDk0NkVBRDE1NkU2NERE
MDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0OTUxLDYgKzE0OTUyLDggQEAKIAkJRTQ3RTI3NjQx
NjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHls
ZVNoZWV0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNp
b25TdHlsZVNoZWV0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODEzN0I4
MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0eWxlVmFsaWRpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ4NEEzM0IyMzA1NTMwMzAwOUFERTZBIC8qIERpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDg0QTMzRDIzMDU1MzAzMDA5QURFNkEg
LyogRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEaXNwbGF5QWNjZXNzVGV4dEJveGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ4OTQ0QTAxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODk0NEExMTgwQjU3RDgwMEYx
NjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNpbXBsZUxpbmVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5
MTZGRjYxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODE3Miw2ICsyODE3NSw4IEBACiAJCQkJRkZC
Njk4Q0QxODMzRjE3NjAwMTU4QTMxIC8qIExpbmVJbmZvLmNwcCAqLywKIAkJCQlGRkI2OThDRTE4
MzNGMTc2MDAxNThBMzEgLyogTGluZUluZm8uaCAqLywKIAkJCQlGRkVGQUIyRDE4M0JDQjZGMDA1
MTQ1MzQgLyogTGluZUlubGluZUhlYWRlcnMuaCAqLywKKwkJCQlFNDg0QTMzRDIzMDU1MzAzMDA5
QURFNkEgLyogRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5jcHAgKi8sCisJCQkJRTQ4NEEzM0IyMzA1
NTMwMzAwOUFERTZBIC8qIERpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMuaCAqLywKIAkJCQlGRkVGQUIy
OTE4MzgwREEwMDA1MTQ1MzQgLyogTGluZUxheW91dFN0YXRlLmggKi8sCiAJCQkJRkZEQkMwNDYx
ODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5jcHAgKi8sCiAJCQkJRkZEQkMwNDUxODNEMjdC
NzAwNDA3MTA5IC8qIExpbmVXaWR0aC5oICovLApAQCAtMzE5MTcsNiArMzE5MjIsNyBAQAogCQkJ
CUIyQzNEQTNFMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNMYXRpbjEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU3RUY1RTYwMUQyMEM4MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNDAwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRD
b2RlY1VzZXJEZWZpbmVkLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDg0QTMzRTIzMDU1MzI1MDA5
QURFNkEgLyogRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJD
M0RBNDIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzQzQ0I4MjEyRjI1RTUxMDAzM0M1RUUgLyogVGV4dENvZGVjVVRGOC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQyQjk3Q0ExMzEzODk0MzAwOEJFRjRCIC8qIFRleHRDb250cm9sSW5uZXJF
bGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggY2ZkZDVhZGE4OTkuLmIxM2JjNGYxYTU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogCiAjaW5jbHVkZSAiQ2xpcFJl
Y3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5QWNjZXNzVGV4dEJveGVzLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgi
CkBAIC02Myw3ICs2NCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRl
ICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMu
aCIKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtMjAyLDcgKzIwMiw4IEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmpl
Y3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywKICAgICAgICAgLy8gbWFu
eSB0ZXN0IHJlc3VsdHMuCiAgICAgICAgIGNvbnN0IFJlbmRlclRleHQmIHRleHQgPSBkb3duY2Fz
dDxSZW5kZXJUZXh0PihvKTsKICAgICAgICAgciA9IEludFJlY3QodGV4dC5maXJzdFJ1bkxvY2F0
aW9uKCksIHRleHQubGluZXNCb3VuZGluZ0JveCgpLnNpemUoKSk7Ci0gICAgICAgIGlmICghdGV4
dC5maXJzdFRleHRCb3goKSAmJiAhdGV4dC5zaW1wbGVMaW5lTGF5b3V0KCkpCisgICAgICAgIGF1
dG8gdGV4dEJveGVzID0gRGlzcGxheUFjY2Vzczo6dGV4dEJveGVzKHRleHQpOworICAgICAgICBp
ZiAodGV4dEJveGVzLmJlZ2luKCkgPT0gdGV4dEJveGVzLmVuZCgpKQogICAgICAgICAgICAgYWRq
dXN0Rm9yVGFibGVDZWxscyA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoby5pc0JSKCkpIHsKICAg
ICAgICAgY29uc3QgUmVuZGVyTGluZUJyZWFrJiBiciA9IGRvd25jYXN0PFJlbmRlckxpbmVCcmVh
az4obyk7CkBAIC00NzcsNDggKzQ3OCwzNCBAQCB2b2lkIHdyaXRlRGVidWdJbmZvKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgT3B0aW9uU2V0PFJlbmRlcgogICAg
IH0KIH0KIAotc3RhdGljIHZvaWQgd3JpdGVUZXh0UnVuKFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
ZW5kZXJUZXh0JiBvLCBjb25zdCBJbmxpbmVUZXh0Qm94JiBydW4pCitzdGF0aWMgdm9pZCB3cml0
ZVRleHRCb3goVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0IERpc3Bs
YXlBY2Nlc3M6OlRleHRCb3gmIHRleHRCb3gpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBub3cgdXNl
IGFuICJlbmNsb3NpbmdJbnRSZWN0IiBtb2RlbCBmb3IgeCwgeSBhbmQgbG9naWNhbFdpZHRoLCBh
bHRob3VnaCB0aGlzIG1ha2VzIGl0IGhhcmRlcgotICAgIC8vIHRvIGRldGVjdCBhbnkgY2hhbmdl
cyBjYXVzZWQgYnkgdGhlIGNvbnZlcnNpb24gdG8gZmxvYXRpbmcgcG9pbnQuIDooCi0gICAgaW50
IHggPSBydW4ueCgpOwotICAgIGludCB5ID0gcnVuLnkoKTsKLSAgICBpbnQgbG9naWNhbFdpZHRo
ID0gY2VpbGYocnVuLmxlZnQoKSArIHJ1bi5sb2dpY2FsV2lkdGgoKSkgLSB4OworICAgIGF1dG8g
cmVjdCA9IHRleHRCb3gucmVjdCgpOworICAgIGF1dG8gbG9naWNhbFJlY3QgPSB0ZXh0Qm94Lmxv
Z2ljYWxSZWN0KCk7CisKKyAgICBpbnQgeCA9IHJlY3QueCgpOworICAgIGludCB5ID0gcmVjdC55
KCk7CisKKyAgICAvLyBGSVhNRTogTWl4aW5nIGxvZ2ljYWwgYW5kIHBoeXNpY2FsIGhlcmUgZG9l
c24ndCBtYWtlIHNlbnNlLgorICAgIGludCBsb2dpY2FsV2lkdGggPSBjZWlsZihyZWN0LngoKSAr
IGxvZ2ljYWxSZWN0LndpZHRoKCkpIC0geDsKIAogICAgIC8vIEZJWE1FOiBUYWJsZSBjZWxsIGFk
anVzdG1lbnQgaXMgdGVtcG9yYXJ5IHVudGlsIHJlc3VsdHMgY2FuIGJlIHVwZGF0ZWQuCiAgICAg
aWYgKGlzPFJlbmRlclRhYmxlQ2VsbD4oKm8uY29udGFpbmluZ0Jsb2NrKCkpKQogICAgICAgICB5
IC09IGZsb29yVG9JbnQoZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqby5jb250YWluaW5nQmxv
Y2soKSkuaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKICAgICAgICAgCiAgICAgdHMgPDwgInRl
eHQgcnVuIGF0ICgiIDw8IHggPDwgIiwiIDw8IHkgPDwgIikgd2lkdGggIiA8PCBsb2dpY2FsV2lk
dGg7Ci0gICAgaWYgKCFydW4uaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IHJ1bi5kaXJPdmVy
cmlkZSgpKSB7Ci0gICAgICAgIHRzIDw8ICghcnVuLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
ICIgUlRMIiA6ICIgTFRSIik7Ci0gICAgICAgIGlmIChydW4uZGlyT3ZlcnJpZGUoKSkKKyAgICBp
ZiAoIXRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IHRleHRCb3guZGlyT3ZlcnJp
ZGUoKSkgeworICAgICAgICB0cyA8PCAoIXRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gIiBSVEwiIDogIiBMVFIiKTsKKyAgICAgICAgaWYgKHRleHRCb3guZGlyT3ZlcnJpZGUoKSkK
ICAgICAgICAgICAgIHRzIDw8ICIgb3ZlcnJpZGUiOwogICAgIH0KICAgICB0cyA8PCAiOiAiCi0g
ICAgICAgIDw8IHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhTdHJpbmcoby50ZXh0KCkpLnN1
YnN0cmluZyhydW4uc3RhcnQoKSwgcnVuLmxlbigpKSk7Ci0gICAgaWYgKHJ1bi5oYXNIeXBoZW4o
KSkKKyAgICAgICAgPDwgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKHRleHRCb3gudGV4dCgp
KTsKKyAgICBpZiAodGV4dEJveC5oYXNIeXBoZW4oKSkKICAgICAgICAgdHMgPDwgIiArIGh5cGhl
biBzdHJpbmcgIiA8PCBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMoby5zdHlsZSgpLmh5cGhl
blN0cmluZygpLnN0cmluZygpKTsKICAgICB0cyA8PCAiXG4iOwogfQogCi1zdGF0aWMgdm9pZCB3
cml0ZVNpbXBsZUxpbmUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlclRl
eHQsIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpSdW4mIHJ1bikKLXsKLSAg
ICBhdXRvIHJlY3QgPSBydW4ucmVjdCgpOwotICAgIGludCB4ID0gcmVjdC54KCk7Ci0gICAgaW50
IHkgPSByZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbFdpZHRoID0gY2VpbGYocmVjdC54KCkgKyBy
ZWN0LndpZHRoKCkpIC0geDsKLQotICAgIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KCpyZW5kZXJU
ZXh0LmNvbnRhaW5pbmdCbG9jaygpKSkKLSAgICAgICAgeSAtPSBmbG9vclRvSW50KGRvd25jYXN0
PFJlbmRlclRhYmxlQ2VsbD4oKnJlbmRlclRleHQuY29udGFpbmluZ0Jsb2NrKCkpLmludHJpbnNp
Y1BhZGRpbmdCZWZvcmUoKSk7Ci0KLSAgICB0cyA8PCAidGV4dCBydW4gYXQgKCIgPDwgeCA8PCAi
LCIgPDwgeSA8PCAiKSB3aWR0aCAiIDw8IGxvZ2ljYWxXaWR0aDsKLSAgICB0cyA8PCAiOiAiIDw8
IHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhydW4udGV4dCgpKTsKLSAgICBpZiAocnVuLmhh
c0h5cGhlbigpKQotICAgICAgICB0cyA8PCAiICsgaHlwaGVuIHN0cmluZyAiIDw8IHF1b3RlQW5k
RXNjYXBlTm9uUHJpbnRhYmxlcyhyZW5kZXJUZXh0LnN0eWxlKCkuaHlwaGVuU3RyaW5nKCkuc3Ry
aW5nKCkpOwotICAgIHRzIDw8ICJcbiI7Ci19Ci0KIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlck9iamVjdCYgbywgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+IGJlaGF2
aW9yKQogewogICAgIGlmIChpczxSZW5kZXJTVkdTaGFwZT4obykpIHsKQEAgLTU2MywyMCArNTUw
LDEwIEBAIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywg
T3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+IGJlCiAKICAgICBpZiAoaXM8UmVuZGVyVGV4dD4o
bykpIHsKICAgICAgICAgYXV0byYgdGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KG8pOwotICAg
ICAgICBpZiAoYXV0byBsYXlvdXQgPSB0ZXh0LnNpbXBsZUxpbmVMYXlvdXQoKSkgewotICAgICAg
ICAgICAgQVNTRVJUKCF0ZXh0LmZpcnN0VGV4dEJveCgpKTsKLSAgICAgICAgICAgIGF1dG8gcmVz
b2x2ZXIgPSBydW5SZXNvbHZlcihkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCp0ZXh0LnBhcmVu
dCgpKSwgKmxheW91dCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gcnVuIDogcmVzb2x2ZXIucmFu
Z2VGb3JSZW5kZXJlcih0ZXh0KSkgewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudDsKLSAg
ICAgICAgICAgICAgICB3cml0ZVNpbXBsZUxpbmUodHMsIHRleHQsIHJ1bik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGJveCA9IHRleHQu
Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAg
ICAgICAgICAgdHMgPDwgaW5kZW50OwotICAgICAgICAgICAgICAgIHdyaXRlVGV4dFJ1bih0cywg
dGV4dCwgKmJveCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byB0ZXh0Qm94IDog
RGlzcGxheUFjY2Vzczo6dGV4dEJveGVzKHRleHQpKSB7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQ7CisgICAgICAgICAgICB3cml0ZVRleHRCb3godHMsIHRleHQsIHRleHRCb3gpOwogICAgICAg
ICB9Ci0KICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50PihvKSkpIHsKICAgICAg
ICAgICAgIGlmIChjaGlsZC5oYXNMYXllcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9EaXNwbGF5QWNjZXNzVGV4dEJveGVzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDlmOWM5MjAxYjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9EaXNwbGF5QWNjZXNzVGV4dEJveGVzLmNw
cApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEaXNwbGF5QWNjZXNzVGV4dEJveGVzLmgiCisKKyNpbmNsdWRlICJJbmxpbmVUZXh0
Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlv
dXRSZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUFj
Y2VzcyB7CisKK0Zsb2F0UmVjdCBUZXh0Qm94OjpyZWN0KCkgY29uc3QKK3sKKyAgICBhdXRvIHNp
bXBsZSA9IFtdKGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBz
aW1wbGVMaW5lSXRlcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuICgqc2ltcGxlTGluZUl0ZXJhdG9y
KS5yZWN0KCk7CisgICAgfTsKKworICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IElubGluZVRl
eHRCb3gqIGlubGluZVRleHRCb3gpIHsKKyAgICAgICAgcmV0dXJuIGlubGluZVRleHRCb3gtPmZy
YW1lUmVjdCgpOworICAgIH07CisKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2l0ZXJhdG9y
Lm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7Cit9CisKK0Zsb2F0UmVjdCBUZXh0Qm94
Ojpsb2dpY2FsUmVjdCgpIGNvbnN0Cit7CisgICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCBTaW1w
bGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3Igc2ltcGxlTGluZUl0ZXJhdG9yKSB7
CisgICAgICAgIHJldHVybiAoKnNpbXBsZUxpbmVJdGVyYXRvcikucmVjdCgpOworICAgIH07CisK
KyAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94
KSB7CisgICAgICAgIHJldHVybiBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsRnJhbWVSZWN0KCk7Cisg
ICAgfTsKKworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1faXRlcmF0b3IubV9wYXRoVmFyaWFu
dCwgc2ltcGxlLCBjb21wbGV4KTsKK30KKworYm9vbCBUZXh0Qm94OjpoYXNIeXBoZW4oKSBjb25z
dAoreworICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuUmVz
b2x2ZXI6Okl0ZXJhdG9yIHNpbXBsZUxpbmVJdGVyYXRvcikgeworICAgICAgICByZXR1cm4gKCpz
aW1wbGVMaW5lSXRlcmF0b3IpLmhhc0h5cGhlbigpOworICAgIH07CisKKyAgICBhdXRvIGNvbXBs
ZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJl
dHVybiBpbmxpbmVUZXh0Qm94LT5oYXNIeXBoZW4oKTsKKyAgICB9OworCisgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9pdGVyYXRvci5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOwor
fQorCitib29sIFRleHRCb3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdAoreworICAg
IGF1dG8gc2ltcGxlID0gW10oY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0
ZXJhdG9yKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICBhdXRvIGNvbXBs
ZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJl
dHVybiBpbmxpbmVUZXh0Qm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgfTsKKwor
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1faXRlcmF0b3IubV9wYXRoVmFyaWFudCwgc2ltcGxl
LCBjb21wbGV4KTsKK30KKworYm9vbCBUZXh0Qm94OjpkaXJPdmVycmlkZSgpIGNvbnN0Cit7Cisg
ICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6
SXRlcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBhdXRvIGNv
bXBsZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAg
IHJldHVybiBpbmxpbmVUZXh0Qm94LT5kaXJPdmVycmlkZSgpOworICAgIH07CisKKyAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihtX2l0ZXJhdG9yLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxl
eCk7Cit9CisKK1N0cmluZ1ZpZXcgVGV4dEJveDo6dGV4dCgpIGNvbnN0Cit7CisgICAgYXV0byBz
aW1wbGUgPSBbXShjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3Ig
c2ltcGxlTGluZUl0ZXJhdG9yKSB7CisgICAgICAgIHJldHVybiAoKnNpbXBsZUxpbmVJdGVyYXRv
cikudGV4dCgpOworICAgIH07CisKKyAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCBJbmxpbmVU
ZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJldHVybiBTdHJpbmdWaWV3KGlubGlu
ZVRleHRCb3gtPnJlbmRlcmVyKCkudGV4dCgpKS5zdWJzdHJpbmcoaW5saW5lVGV4dEJveC0+c3Rh
cnQoKSwgaW5saW5lVGV4dEJveC0+bGVuKCkpOworICAgIH07CisKKyAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX2l0ZXJhdG9yLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7Cit9CisK
K1RleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKElubGluZVRleHRCb3gqIGlubGluZVRl
eHRCb3gpCisgICAgOiBtX3BhdGhWYXJpYW50KGlubGluZVRleHRCb3gpCit7Cit9CisKK1RleHRC
b3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVy
OjpJdGVyYXRvciBzaW1wbGVMaW5lSXRlcmF0b3IpCisgICAgOiBtX3BhdGhWYXJpYW50KHNpbXBs
ZUxpbmVJdGVyYXRvcikKK3sKK30KKworVGV4dEJveEl0ZXJhdG9yJiBUZXh0Qm94SXRlcmF0b3I6
OnRyYXZlcnNlTmV4dCgpCit7CisgICAgYXV0byBzaW1wbGUgPSBbXShTaW1wbGVMaW5lTGF5b3V0
OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3ImIHNpbXBsZUxpbmVJdGVyYXRvcikgeworICAgICAgICAr
K3NpbXBsZUxpbmVJdGVyYXRvcjsKKyAgICB9OworCisgICAgYXV0byBjb21wbGV4ID0gW10oSW5s
aW5lVGV4dEJveComIGlubGluZVRleHRCb3gpIHsKKyAgICAgICAgaW5saW5lVGV4dEJveCA9IGlu
bGluZVRleHRCb3gtPm5leHRUZXh0Qm94KCk7CisgICAgfTsKKworICAgIFdURjo6c3dpdGNoT24o
bV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKworICAgIHJldHVybiAqdGhpczsKK30K
KworYm9vbCBUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9wYXRoVmFyaWFudC5pbmRleCgpICE9IG90aGVy
Lm1fcGF0aFZhcmlhbnQuaW5kZXgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBzaW1wbGUgPSBbJl0oY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yIHNpbXBsZUxpbmVJdGVyYXRvcikgeworICAgICAgICByZXR1cm4gc2ltcGxlTGluZUl0ZXJh
dG9yID09IFdURjo6Z2V0PFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvcj4o
b3RoZXIubV9wYXRoVmFyaWFudCk7CisgICAgfTsKKworICAgIGF1dG8gY29tcGxleCA9IFsmXShj
b25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJldHVybiBpbmxp
bmVUZXh0Qm94ID09IFdURjo6Z2V0PElubGluZVRleHRCb3gqPihvdGhlci5tX3BhdGhWYXJpYW50
KTsKKyAgICB9OworCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgc2lt
cGxlLCBjb21wbGV4KTsKK30KKworc3RhdGljIE9wdGlvbmFsPFNpbXBsZUxpbmVMYXlvdXQ6OlJ1
blJlc29sdmVyPiBzaW1wbGVMaW5lUnVuUmVzb2x2ZXJGb3JUZXh0KGNvbnN0IFJlbmRlclRleHQm
IHRleHQpCit7CisgICAgaWYgKCF0ZXh0LnNpbXBsZUxpbmVMYXlvdXQoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gU2ltcGxlTGluZUxheW91dDo6cnVuUmVzb2x2
ZXIoZG93bmNhc3Q8Y29uc3QgUmVuZGVyQmxvY2tGbG93PigqdGV4dC5wYXJlbnQoKSksICp0ZXh0
LnNpbXBsZUxpbmVMYXlvdXQoKSk7Cit9CisKK3N0YXRpYyBhdXRvIHJhbmdlRm9yVGV4dChjb25z
dCBSZW5kZXJUZXh0JiB0ZXh0LCBPcHRpb25hbDxTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZl
cj4mIHNpbXBsZUxpbmVSdW5SZXNvbHZlcikKK3sKKyAgICBpZiAoc2ltcGxlTGluZVJ1blJlc29s
dmVyKSB7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBzaW1wbGVMaW5lUnVuUmVzb2x2ZXItPnJhbmdl
Rm9yUmVuZGVyZXIodGV4dCk7CisgICAgICAgIHJldHVybiBXVEY6Om1ha2VJdGVyYXRvclJhbmdl
KFRleHRCb3hJdGVyYXRvcihyYW5nZS5iZWdpbigpKSwgVGV4dEJveEl0ZXJhdG9yKHJhbmdlLmVu
ZCgpKSk7CisgICAgfQorICAgIHJldHVybiBXVEY6Om1ha2VJdGVyYXRvclJhbmdlKFRleHRCb3hJ
dGVyYXRvcih0ZXh0LmZpcnN0VGV4dEJveCgpKSwgVGV4dEJveEl0ZXJhdG9yKG51bGxwdHIpKTsK
K30KKworVGV4dEJveFJhbmdlOjpUZXh0Qm94UmFuZ2UoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkK
KyAgICA6IG1fc2ltcGxlTGluZVJ1blJlc29sdmVyKHNpbXBsZUxpbmVSdW5SZXNvbHZlckZvclRl
eHQodGV4dCkpCisgICAgLCBtX3JhbmdlKHJhbmdlRm9yVGV4dCh0ZXh0LCBtX3NpbXBsZUxpbmVS
dW5SZXNvbHZlcikpCit7Cit9CisKK1RleHRCb3hSYW5nZSB0ZXh0Qm94ZXMoY29uc3QgUmVuZGVy
VGV4dCYgdGV4dCkKK3sKKyAgICByZXR1cm4geyB0ZXh0IH07Cit9CisKK30KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0Rpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0Rpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzFjODM2MTQzYzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9EaXNwbGF5QWNj
ZXNzVGV4dEJveGVzLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRS
ZXNvbHZlci5oIgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRvclJhbmdlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZhcmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSW5saW5lVGV4dEJveDsKK2NsYXNzIFJlbmRlclRleHQ7CisK
K25hbWVzcGFjZSBEaXNwbGF5QWNjZXNzIHsKKworY2xhc3MgVGV4dEJveENvbnRleHQ7CitjbGFz
cyBUZXh0Qm94SXRlcmF0b3I7CisKK2NsYXNzIFRleHRCb3ggeworcHVibGljOgorICAgIFRleHRC
b3goY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBpdGVyYXRvcikKKyAgICAgICAgOiBtX2l0ZXJhdG9y
KGl0ZXJhdG9yKQorICAgIHsgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdDsKKyAgICBG
bG9hdFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSHlwaGVuKCkgY29u
c3Q7CisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBk
aXJPdmVycmlkZSgpIGNvbnN0OworCisgICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBtX2l0ZXJhdG9yOworfTsKKworY2xh
c3MgVGV4dEJveEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94SXRlcmF0b3IoSW5saW5l
VGV4dEJveCopOworICAgIFRleHRCb3hJdGVyYXRvcihTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNv
bHZlcjo6SXRlcmF0b3IpOworCisgICAgVGV4dEJveEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyBy
ZXR1cm4gdHJhdmVyc2VOZXh0KCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0
Qm94SXRlcmF0b3ImKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGV4dEJveEl0
ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAg
IFRleHRCb3ggb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcyB9OyB9CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFRleHRCb3g7CisKKyAgICBUZXh0Qm94SXRlcmF0b3ImIHRy
YXZlcnNlTmV4dCgpOworCisgICAgVmFyaWFudDxTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZl
cjo6SXRlcmF0b3IsIElubGluZVRleHRCb3gqPiBtX3BhdGhWYXJpYW50OworfTsKKworY2xhc3Mg
VGV4dEJveFJhbmdlIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94UmFuZ2UoY29uc3QgUmVuZGVyVGV4
dCYpOworCisgICAgVGV4dEJveEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9yYW5n
ZS5iZWdpbigpOyB9CisgICAgVGV4dEJveEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFuZ2UuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgVGV4dEJveEl0ZXJh
dG9yOworCisgICAgT3B0aW9uYWw8U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI+IG1fc2lt
cGxlTGluZVJ1blJlc29sdmVyOworICAgIFdURjo6SXRlcmF0b3JSYW5nZTxUZXh0Qm94SXRlcmF0
b3I+IG1fcmFuZ2U7Cit9OworCitUZXh0Qm94UmFuZ2UgdGV4dEJveGVzKGNvbnN0IFJlbmRlclRl
eHQmKTsKKworfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377125</attachid>
            <date>2019-08-23 06:19:50 -0700</date>
            <delta_ts>2019-08-23 23:33:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>displayaccess-textbox-3.patch</filename>
            <type>text/plain</type>
            <size>21674</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlZTI2MWYwYjFiMy4uMDg2Yjc5YjM2YzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOS0wOC0yMyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgSW1wbGVtZW50IGxheW91dCBzeXN0ZW0gaW5kZXBlbmRlbnQgdGV4dCBib3gg
aXRlcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMTA3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIGdlbmVyaWMgd2F5IHRvIHRyYXZlcnNlIGxpbmUgbGF5b3V0IHdpdGhvdXQgY2FyaW5n
IGFib3V0IHRoZSBkZXRhaWxzIG9mIHRoZSB1bmRlcmx5aW5nIGxheW91dCBzeXN0ZW0uCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIGJhc2ljIHN1cHBvcnQgZm9yIHRyYXZlcnNpbmcgdGV4dCBi
b3hlcyBhbmQgdXNlcyBpdCB0byByZW1vdmUgbGF5b3V0IHBhdGggc3BlY2lmaWMgYnJhbmNoZXMg
aW4gUmVuZGVyVHJlZUFzVGV4dC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0
Ojp3cml0ZVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRleHRCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUZXh0UnVu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU2ltcGxlTGluZSk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUFjY2Vzczo6VGV4dEJveDo6cmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94Ojpsb2dpY2FsUmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94OjpoYXNI
eXBoZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUFjY2Vzczo6VGV4dEJveDo6
aXNMZWZ0VG9SaWdodERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
QWNjZXNzOjpUZXh0Qm94OjpkaXJPdmVycmlkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5QWNjZXNzOjpUZXh0Qm94Ojp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlBY2Nlc3M6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlBY2Nlc3M6OlRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlBY2Nlc3M6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpzaW1wbGVMaW5l
UnVuUmVzb2x2ZXJGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlBY2Nlc3M6OnJh
bmdlRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94UmFu
Z2U6OlRleHRCb3hSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjp0ZXh0
Qm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0Rpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94OjpUZXh0
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlBY2Nlc3M6OlRleHRCb3hJdGVyYXRvcjo6
b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94SXRl
cmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUFjY2Vz
czo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUFjY2Vzczo6VGV4dEJveFJhbmdlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5QWNjZXNzOjpUZXh0Qm94UmFuZ2U6OmVuZCBjb25zdCk6CisKIDIwMTktMDgt
MjIgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIENhcHR1cmVE
ZXZpY2VNYW5hZ2VyIGRvZXMgbm90IG5lZWQgdG8gYmUgQ2FuTWFrZVdlYWtQdHIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKaW5kZXggMGEzOGRkNDZjN2QuLjRmMmI4MjcyYjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjE1
MCw2ICsyMTUwLDcgQEAgcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAogcmVuZGVyaW5nL1Rl
eHRQYWludGVyLmNwcAogcmVuZGVyaW5nL1RyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5jcHAK
IAorcmVuZGVyaW5nL2xpbmUvRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5jcHAKIHJlbmRlcmluZy9s
aW5lL0xpbmVCcmVha2VyLmNwcAogcmVuZGVyaW5nL2xpbmUvTGluZUluZm8uY3BwCiByZW5kZXJp
bmcvbGluZS9MaW5lV2lkdGguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzg1MmQzZDM5MzcuLjYyNjdiNTJmYmY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00Nzg5LDYgKzQ3ODksNyBAQAogCQlFNDdDMzkzMzFGRTZFMTA4MDBCQkJDNkIgLyogUmVuZGVy
VHJlZUJ1aWxkZXJNdWx0aUNvbHVtbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ3QzM5MjcxRkU2RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWls
ZGVyTXVsdGlDb2x1bW4uaCAqLzsgfTsKIAkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8qIEV4
dGVuc2lvblN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVl
dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
NDgxMzdCOTFEQjNCNTI2MDA1QzU5QkYgLyogU3R5bGVWYWxpZGl0eS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJG
IC8qIFN0eWxlVmFsaWRpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlFNDg0QTMzRTIzMDU1MzI1MDA5QURFNkEgLyogRGlzcGxheUFjY2Vzc1Rl
eHRCb3hlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ4NEEzM0IyMzA1NTMwMzAwOUFERTZBIC8qIERpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMuaCAqLzsg
fTsKIAkJRTQ4OTQ0QTMxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODk0NEExMTgwQjU3
RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ5MTZGRjcxOTVERjZBMDAwNUFCMzQ5IC8qIExh
eWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90
dGxlU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDk0NkVBRDE1NkU2NERE
MDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0OTUxLDYgKzE0OTUyLDggQEAKIAkJRTQ3RTI3NjQx
NjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0N0UyNzY3MTYwMzZFREMwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHls
ZVNoZWV0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNp
b25TdHlsZVNoZWV0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODEzN0I4
MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0eWxlVmFsaWRpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTQ4NEEzM0IyMzA1NTMwMzAwOUFERTZBIC8qIERpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDg0QTMzRDIzMDU1MzAzMDA5QURFNkEg
LyogRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEaXNwbGF5QWNjZXNzVGV4dEJveGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTQ4OTQ0QTAxODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0ODk0NEExMTgwQjU3RDgwMEYx
NjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNpbXBsZUxpbmVMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5
MTZGRjYxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheWVyRmx1c2hUaHJvdHRsZVN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODE3Miw2ICsyODE3NSw4IEBACiAJCQkJRkZC
Njk4Q0QxODMzRjE3NjAwMTU4QTMxIC8qIExpbmVJbmZvLmNwcCAqLywKIAkJCQlGRkI2OThDRTE4
MzNGMTc2MDAxNThBMzEgLyogTGluZUluZm8uaCAqLywKIAkJCQlGRkVGQUIyRDE4M0JDQjZGMDA1
MTQ1MzQgLyogTGluZUlubGluZUhlYWRlcnMuaCAqLywKKwkJCQlFNDg0QTMzRDIzMDU1MzAzMDA5
QURFNkEgLyogRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5jcHAgKi8sCisJCQkJRTQ4NEEzM0IyMzA1
NTMwMzAwOUFERTZBIC8qIERpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMuaCAqLywKIAkJCQlGRkVGQUIy
OTE4MzgwREEwMDA1MTQ1MzQgLyogTGluZUxheW91dFN0YXRlLmggKi8sCiAJCQkJRkZEQkMwNDYx
ODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5jcHAgKi8sCiAJCQkJRkZEQkMwNDUxODNEMjdC
NzAwNDA3MTA5IC8qIExpbmVXaWR0aC5oICovLApAQCAtMzE5MTcsNiArMzE5MjIsNyBAQAogCQkJ
CUIyQzNEQTNFMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNMYXRpbjEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU3RUY1RTYwMUQyMEM4MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNDAwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRD
b2RlY1VzZXJEZWZpbmVkLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDg0QTMzRTIzMDU1MzI1MDA5
QURFNkEgLyogRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJD
M0RBNDIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzQzQ0I4MjEyRjI1RTUxMDAzM0M1RUUgLyogVGV4dENvZGVjVVRGOC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQyQjk3Q0ExMzEzODk0MzAwOEJFRjRCIC8qIFRleHRDb250cm9sSW5uZXJF
bGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggY2ZkZDVhZGE4OTkuLmIxM2JjNGYxYTU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogCiAjaW5jbHVkZSAiQ2xpcFJl
Y3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5QWNjZXNzVGV4dEJveGVzLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgi
CkBAIC02Myw3ICs2NCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRl
ICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMu
aCIKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtMjAyLDcgKzIwMiw4IEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmpl
Y3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywKICAgICAgICAgLy8gbWFu
eSB0ZXN0IHJlc3VsdHMuCiAgICAgICAgIGNvbnN0IFJlbmRlclRleHQmIHRleHQgPSBkb3duY2Fz
dDxSZW5kZXJUZXh0PihvKTsKICAgICAgICAgciA9IEludFJlY3QodGV4dC5maXJzdFJ1bkxvY2F0
aW9uKCksIHRleHQubGluZXNCb3VuZGluZ0JveCgpLnNpemUoKSk7Ci0gICAgICAgIGlmICghdGV4
dC5maXJzdFRleHRCb3goKSAmJiAhdGV4dC5zaW1wbGVMaW5lTGF5b3V0KCkpCisgICAgICAgIGF1
dG8gdGV4dEJveGVzID0gRGlzcGxheUFjY2Vzczo6dGV4dEJveGVzKHRleHQpOworICAgICAgICBp
ZiAodGV4dEJveGVzLmJlZ2luKCkgPT0gdGV4dEJveGVzLmVuZCgpKQogICAgICAgICAgICAgYWRq
dXN0Rm9yVGFibGVDZWxscyA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoby5pc0JSKCkpIHsKICAg
ICAgICAgY29uc3QgUmVuZGVyTGluZUJyZWFrJiBiciA9IGRvd25jYXN0PFJlbmRlckxpbmVCcmVh
az4obyk7CkBAIC00NzcsNDggKzQ3OCwzNCBAQCB2b2lkIHdyaXRlRGVidWdJbmZvKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgT3B0aW9uU2V0PFJlbmRlcgogICAg
IH0KIH0KIAotc3RhdGljIHZvaWQgd3JpdGVUZXh0UnVuKFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
ZW5kZXJUZXh0JiBvLCBjb25zdCBJbmxpbmVUZXh0Qm94JiBydW4pCitzdGF0aWMgdm9pZCB3cml0
ZVRleHRCb3goVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0IERpc3Bs
YXlBY2Nlc3M6OlRleHRCb3gmIHRleHRCb3gpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBub3cgdXNl
IGFuICJlbmNsb3NpbmdJbnRSZWN0IiBtb2RlbCBmb3IgeCwgeSBhbmQgbG9naWNhbFdpZHRoLCBh
bHRob3VnaCB0aGlzIG1ha2VzIGl0IGhhcmRlcgotICAgIC8vIHRvIGRldGVjdCBhbnkgY2hhbmdl
cyBjYXVzZWQgYnkgdGhlIGNvbnZlcnNpb24gdG8gZmxvYXRpbmcgcG9pbnQuIDooCi0gICAgaW50
IHggPSBydW4ueCgpOwotICAgIGludCB5ID0gcnVuLnkoKTsKLSAgICBpbnQgbG9naWNhbFdpZHRo
ID0gY2VpbGYocnVuLmxlZnQoKSArIHJ1bi5sb2dpY2FsV2lkdGgoKSkgLSB4OworICAgIGF1dG8g
cmVjdCA9IHRleHRCb3gucmVjdCgpOworICAgIGF1dG8gbG9naWNhbFJlY3QgPSB0ZXh0Qm94Lmxv
Z2ljYWxSZWN0KCk7CisKKyAgICBpbnQgeCA9IHJlY3QueCgpOworICAgIGludCB5ID0gcmVjdC55
KCk7CisKKyAgICAvLyBGSVhNRTogTWl4aW5nIGxvZ2ljYWwgYW5kIHBoeXNpY2FsIGhlcmUgZG9l
c24ndCBtYWtlIHNlbnNlLgorICAgIGludCBsb2dpY2FsV2lkdGggPSBjZWlsZihyZWN0LngoKSAr
IGxvZ2ljYWxSZWN0LndpZHRoKCkpIC0geDsKIAogICAgIC8vIEZJWE1FOiBUYWJsZSBjZWxsIGFk
anVzdG1lbnQgaXMgdGVtcG9yYXJ5IHVudGlsIHJlc3VsdHMgY2FuIGJlIHVwZGF0ZWQuCiAgICAg
aWYgKGlzPFJlbmRlclRhYmxlQ2VsbD4oKm8uY29udGFpbmluZ0Jsb2NrKCkpKQogICAgICAgICB5
IC09IGZsb29yVG9JbnQoZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqby5jb250YWluaW5nQmxv
Y2soKSkuaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKICAgICAgICAgCiAgICAgdHMgPDwgInRl
eHQgcnVuIGF0ICgiIDw8IHggPDwgIiwiIDw8IHkgPDwgIikgd2lkdGggIiA8PCBsb2dpY2FsV2lk
dGg7Ci0gICAgaWYgKCFydW4uaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IHJ1bi5kaXJPdmVy
cmlkZSgpKSB7Ci0gICAgICAgIHRzIDw8ICghcnVuLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
ICIgUlRMIiA6ICIgTFRSIik7Ci0gICAgICAgIGlmIChydW4uZGlyT3ZlcnJpZGUoKSkKKyAgICBp
ZiAoIXRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IHRleHRCb3guZGlyT3ZlcnJp
ZGUoKSkgeworICAgICAgICB0cyA8PCAoIXRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gIiBSVEwiIDogIiBMVFIiKTsKKyAgICAgICAgaWYgKHRleHRCb3guZGlyT3ZlcnJpZGUoKSkK
ICAgICAgICAgICAgIHRzIDw8ICIgb3ZlcnJpZGUiOwogICAgIH0KICAgICB0cyA8PCAiOiAiCi0g
ICAgICAgIDw8IHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhTdHJpbmcoby50ZXh0KCkpLnN1
YnN0cmluZyhydW4uc3RhcnQoKSwgcnVuLmxlbigpKSk7Ci0gICAgaWYgKHJ1bi5oYXNIeXBoZW4o
KSkKKyAgICAgICAgPDwgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKHRleHRCb3gudGV4dCgp
KTsKKyAgICBpZiAodGV4dEJveC5oYXNIeXBoZW4oKSkKICAgICAgICAgdHMgPDwgIiArIGh5cGhl
biBzdHJpbmcgIiA8PCBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMoby5zdHlsZSgpLmh5cGhl
blN0cmluZygpLnN0cmluZygpKTsKICAgICB0cyA8PCAiXG4iOwogfQogCi1zdGF0aWMgdm9pZCB3
cml0ZVNpbXBsZUxpbmUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlclRl
eHQsIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpSdW4mIHJ1bikKLXsKLSAg
ICBhdXRvIHJlY3QgPSBydW4ucmVjdCgpOwotICAgIGludCB4ID0gcmVjdC54KCk7Ci0gICAgaW50
IHkgPSByZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbFdpZHRoID0gY2VpbGYocmVjdC54KCkgKyBy
ZWN0LndpZHRoKCkpIC0geDsKLQotICAgIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KCpyZW5kZXJU
ZXh0LmNvbnRhaW5pbmdCbG9jaygpKSkKLSAgICAgICAgeSAtPSBmbG9vclRvSW50KGRvd25jYXN0
PFJlbmRlclRhYmxlQ2VsbD4oKnJlbmRlclRleHQuY29udGFpbmluZ0Jsb2NrKCkpLmludHJpbnNp
Y1BhZGRpbmdCZWZvcmUoKSk7Ci0KLSAgICB0cyA8PCAidGV4dCBydW4gYXQgKCIgPDwgeCA8PCAi
LCIgPDwgeSA8PCAiKSB3aWR0aCAiIDw8IGxvZ2ljYWxXaWR0aDsKLSAgICB0cyA8PCAiOiAiIDw8
IHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhydW4udGV4dCgpKTsKLSAgICBpZiAocnVuLmhh
c0h5cGhlbigpKQotICAgICAgICB0cyA8PCAiICsgaHlwaGVuIHN0cmluZyAiIDw8IHF1b3RlQW5k
RXNjYXBlTm9uUHJpbnRhYmxlcyhyZW5kZXJUZXh0LnN0eWxlKCkuaHlwaGVuU3RyaW5nKCkuc3Ry
aW5nKCkpOwotICAgIHRzIDw8ICJcbiI7Ci19Ci0KIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlck9iamVjdCYgbywgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+IGJlaGF2
aW9yKQogewogICAgIGlmIChpczxSZW5kZXJTVkdTaGFwZT4obykpIHsKQEAgLTU2MywyMCArNTUw
LDEwIEBAIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywg
T3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+IGJlCiAKICAgICBpZiAoaXM8UmVuZGVyVGV4dD4o
bykpIHsKICAgICAgICAgYXV0byYgdGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KG8pOwotICAg
ICAgICBpZiAoYXV0byBsYXlvdXQgPSB0ZXh0LnNpbXBsZUxpbmVMYXlvdXQoKSkgewotICAgICAg
ICAgICAgQVNTRVJUKCF0ZXh0LmZpcnN0VGV4dEJveCgpKTsKLSAgICAgICAgICAgIGF1dG8gcmVz
b2x2ZXIgPSBydW5SZXNvbHZlcihkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCp0ZXh0LnBhcmVu
dCgpKSwgKmxheW91dCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gcnVuIDogcmVzb2x2ZXIucmFu
Z2VGb3JSZW5kZXJlcih0ZXh0KSkgewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudDsKLSAg
ICAgICAgICAgICAgICB3cml0ZVNpbXBsZUxpbmUodHMsIHRleHQsIHJ1bik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGJveCA9IHRleHQu
Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAg
ICAgICAgICAgdHMgPDwgaW5kZW50OwotICAgICAgICAgICAgICAgIHdyaXRlVGV4dFJ1bih0cywg
dGV4dCwgKmJveCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byB0ZXh0Qm94IDog
RGlzcGxheUFjY2Vzczo6dGV4dEJveGVzKHRleHQpKSB7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQ7CisgICAgICAgICAgICB3cml0ZVRleHRCb3godHMsIHRleHQsIHRleHRCb3gpOwogICAgICAg
ICB9Ci0KICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5P
ZlR5cGU8UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50PihvKSkpIHsKICAgICAg
ICAgICAgIGlmIChjaGlsZC5oYXNMYXllcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvRGlzcGxheUFjY2Vzc1RleHRCb3hlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9EaXNwbGF5QWNjZXNzVGV4dEJveGVzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDlmOWM5MjAxYjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9EaXNwbGF5QWNjZXNzVGV4dEJveGVzLmNw
cApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEaXNwbGF5QWNjZXNzVGV4dEJveGVzLmgiCisKKyNpbmNsdWRlICJJbmxpbmVUZXh0
Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlv
dXRSZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUFj
Y2VzcyB7CisKK0Zsb2F0UmVjdCBUZXh0Qm94OjpyZWN0KCkgY29uc3QKK3sKKyAgICBhdXRvIHNp
bXBsZSA9IFtdKGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBz
aW1wbGVMaW5lSXRlcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuICgqc2ltcGxlTGluZUl0ZXJhdG9y
KS5yZWN0KCk7CisgICAgfTsKKworICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IElubGluZVRl
eHRCb3gqIGlubGluZVRleHRCb3gpIHsKKyAgICAgICAgcmV0dXJuIGlubGluZVRleHRCb3gtPmZy
YW1lUmVjdCgpOworICAgIH07CisKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2l0ZXJhdG9y
Lm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7Cit9CisKK0Zsb2F0UmVjdCBUZXh0Qm94
Ojpsb2dpY2FsUmVjdCgpIGNvbnN0Cit7CisgICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCBTaW1w
bGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3Igc2ltcGxlTGluZUl0ZXJhdG9yKSB7
CisgICAgICAgIHJldHVybiAoKnNpbXBsZUxpbmVJdGVyYXRvcikucmVjdCgpOworICAgIH07CisK
KyAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94
KSB7CisgICAgICAgIHJldHVybiBpbmxpbmVUZXh0Qm94LT5sb2dpY2FsRnJhbWVSZWN0KCk7Cisg
ICAgfTsKKworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1faXRlcmF0b3IubV9wYXRoVmFyaWFu
dCwgc2ltcGxlLCBjb21wbGV4KTsKK30KKworYm9vbCBUZXh0Qm94OjpoYXNIeXBoZW4oKSBjb25z
dAoreworICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuUmVz
b2x2ZXI6Okl0ZXJhdG9yIHNpbXBsZUxpbmVJdGVyYXRvcikgeworICAgICAgICByZXR1cm4gKCpz
aW1wbGVMaW5lSXRlcmF0b3IpLmhhc0h5cGhlbigpOworICAgIH07CisKKyAgICBhdXRvIGNvbXBs
ZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJl
dHVybiBpbmxpbmVUZXh0Qm94LT5oYXNIeXBoZW4oKTsKKyAgICB9OworCisgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9pdGVyYXRvci5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOwor
fQorCitib29sIFRleHRCb3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdAoreworICAg
IGF1dG8gc2ltcGxlID0gW10oY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0
ZXJhdG9yKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICBhdXRvIGNvbXBs
ZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJl
dHVybiBpbmxpbmVUZXh0Qm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgfTsKKwor
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1faXRlcmF0b3IubV9wYXRoVmFyaWFudCwgc2ltcGxl
LCBjb21wbGV4KTsKK30KKworYm9vbCBUZXh0Qm94OjpkaXJPdmVycmlkZSgpIGNvbnN0Cit7Cisg
ICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6
SXRlcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBhdXRvIGNv
bXBsZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAg
IHJldHVybiBpbmxpbmVUZXh0Qm94LT5kaXJPdmVycmlkZSgpOworICAgIH07CisKKyAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihtX2l0ZXJhdG9yLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxl
eCk7Cit9CisKK1N0cmluZ1ZpZXcgVGV4dEJveDo6dGV4dCgpIGNvbnN0Cit7CisgICAgYXV0byBz
aW1wbGUgPSBbXShjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3Ig
c2ltcGxlTGluZUl0ZXJhdG9yKSB7CisgICAgICAgIHJldHVybiAoKnNpbXBsZUxpbmVJdGVyYXRv
cikudGV4dCgpOworICAgIH07CisKKyAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCBJbmxpbmVU
ZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJldHVybiBTdHJpbmdWaWV3KGlubGlu
ZVRleHRCb3gtPnJlbmRlcmVyKCkudGV4dCgpKS5zdWJzdHJpbmcoaW5saW5lVGV4dEJveC0+c3Rh
cnQoKSwgaW5saW5lVGV4dEJveC0+bGVuKCkpOworICAgIH07CisKKyAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX2l0ZXJhdG9yLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7Cit9CisK
K1RleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKElubGluZVRleHRCb3gqIGlubGluZVRl
eHRCb3gpCisgICAgOiBtX3BhdGhWYXJpYW50KGlubGluZVRleHRCb3gpCit7Cit9CisKK1RleHRC
b3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVy
OjpJdGVyYXRvciBzaW1wbGVMaW5lSXRlcmF0b3IpCisgICAgOiBtX3BhdGhWYXJpYW50KHNpbXBs
ZUxpbmVJdGVyYXRvcikKK3sKK30KKworVGV4dEJveEl0ZXJhdG9yJiBUZXh0Qm94SXRlcmF0b3I6
OnRyYXZlcnNlTmV4dCgpCit7CisgICAgYXV0byBzaW1wbGUgPSBbXShTaW1wbGVMaW5lTGF5b3V0
OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3ImIHNpbXBsZUxpbmVJdGVyYXRvcikgeworICAgICAgICAr
K3NpbXBsZUxpbmVJdGVyYXRvcjsKKyAgICB9OworCisgICAgYXV0byBjb21wbGV4ID0gW10oSW5s
aW5lVGV4dEJveComIGlubGluZVRleHRCb3gpIHsKKyAgICAgICAgaW5saW5lVGV4dEJveCA9IGlu
bGluZVRleHRCb3gtPm5leHRUZXh0Qm94KCk7CisgICAgfTsKKworICAgIFdURjo6c3dpdGNoT24o
bV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKworICAgIHJldHVybiAqdGhpczsKK30K
KworYm9vbCBUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9wYXRoVmFyaWFudC5pbmRleCgpICE9IG90aGVy
Lm1fcGF0aFZhcmlhbnQuaW5kZXgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBzaW1wbGUgPSBbJl0oY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yIHNpbXBsZUxpbmVJdGVyYXRvcikgeworICAgICAgICByZXR1cm4gc2ltcGxlTGluZUl0ZXJh
dG9yID09IFdURjo6Z2V0PFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvcj4o
b3RoZXIubV9wYXRoVmFyaWFudCk7CisgICAgfTsKKworICAgIGF1dG8gY29tcGxleCA9IFsmXShj
b25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJldHVybiBpbmxp
bmVUZXh0Qm94ID09IFdURjo6Z2V0PElubGluZVRleHRCb3gqPihvdGhlci5tX3BhdGhWYXJpYW50
KTsKKyAgICB9OworCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgc2lt
cGxlLCBjb21wbGV4KTsKK30KKworc3RhdGljIE9wdGlvbmFsPFNpbXBsZUxpbmVMYXlvdXQ6OlJ1
blJlc29sdmVyPiBzaW1wbGVMaW5lUnVuUmVzb2x2ZXJGb3JUZXh0KGNvbnN0IFJlbmRlclRleHQm
IHRleHQpCit7CisgICAgaWYgKCF0ZXh0LnNpbXBsZUxpbmVMYXlvdXQoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gU2ltcGxlTGluZUxheW91dDo6cnVuUmVzb2x2
ZXIoZG93bmNhc3Q8Y29uc3QgUmVuZGVyQmxvY2tGbG93PigqdGV4dC5wYXJlbnQoKSksICp0ZXh0
LnNpbXBsZUxpbmVMYXlvdXQoKSk7Cit9CisKK3N0YXRpYyBhdXRvIHJhbmdlRm9yVGV4dChjb25z
dCBSZW5kZXJUZXh0JiB0ZXh0LCBPcHRpb25hbDxTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZl
cj4mIHNpbXBsZUxpbmVSdW5SZXNvbHZlcikKK3sKKyAgICBpZiAoc2ltcGxlTGluZVJ1blJlc29s
dmVyKSB7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBzaW1wbGVMaW5lUnVuUmVzb2x2ZXItPnJhbmdl
Rm9yUmVuZGVyZXIodGV4dCk7CisgICAgICAgIHJldHVybiBXVEY6Om1ha2VJdGVyYXRvclJhbmdl
KFRleHRCb3hJdGVyYXRvcihyYW5nZS5iZWdpbigpKSwgVGV4dEJveEl0ZXJhdG9yKHJhbmdlLmVu
ZCgpKSk7CisgICAgfQorICAgIHJldHVybiBXVEY6Om1ha2VJdGVyYXRvclJhbmdlKFRleHRCb3hJ
dGVyYXRvcih0ZXh0LmZpcnN0VGV4dEJveCgpKSwgVGV4dEJveEl0ZXJhdG9yKG51bGxwdHIpKTsK
K30KKworVGV4dEJveFJhbmdlOjpUZXh0Qm94UmFuZ2UoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkK
KyAgICA6IG1fc2ltcGxlTGluZVJ1blJlc29sdmVyKHNpbXBsZUxpbmVSdW5SZXNvbHZlckZvclRl
eHQodGV4dCkpCisgICAgLCBtX3JhbmdlKHJhbmdlRm9yVGV4dCh0ZXh0LCBtX3NpbXBsZUxpbmVS
dW5SZXNvbHZlcikpCit7Cit9CisKK1RleHRCb3hSYW5nZSB0ZXh0Qm94ZXMoY29uc3QgUmVuZGVy
VGV4dCYgdGV4dCkKK3sKKyAgICByZXR1cm4geyB0ZXh0IH07Cit9CisKK30KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0Rpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0Rpc3BsYXlBY2Nlc3NUZXh0Qm94ZXMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzFjODM2MTQzYzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9EaXNwbGF5QWNj
ZXNzVGV4dEJveGVzLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRS
ZXNvbHZlci5oIgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRvclJhbmdlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZhcmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSW5saW5lVGV4dEJveDsKK2NsYXNzIFJlbmRlclRleHQ7CisK
K25hbWVzcGFjZSBEaXNwbGF5QWNjZXNzIHsKKworY2xhc3MgVGV4dEJveENvbnRleHQ7CitjbGFz
cyBUZXh0Qm94SXRlcmF0b3I7CisKK2NsYXNzIFRleHRCb3ggeworcHVibGljOgorICAgIFRleHRC
b3goY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBpdGVyYXRvcikKKyAgICAgICAgOiBtX2l0ZXJhdG9y
KGl0ZXJhdG9yKQorICAgIHsgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdDsKKyAgICBG
bG9hdFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSHlwaGVuKCkgY29u
c3Q7CisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBk
aXJPdmVycmlkZSgpIGNvbnN0OworCisgICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBtX2l0ZXJhdG9yOworfTsKKworY2xh
c3MgVGV4dEJveEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94SXRlcmF0b3IoSW5saW5l
VGV4dEJveCopOworICAgIFRleHRCb3hJdGVyYXRvcihTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNv
bHZlcjo6SXRlcmF0b3IpOworCisgICAgVGV4dEJveEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyBy
ZXR1cm4gdHJhdmVyc2VOZXh0KCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0
Qm94SXRlcmF0b3ImKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGV4dEJveEl0
ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAg
IFRleHRCb3ggb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcyB9OyB9CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFRleHRCb3g7CisKKyAgICBUZXh0Qm94SXRlcmF0b3ImIHRy
YXZlcnNlTmV4dCgpOworCisgICAgVmFyaWFudDxTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZl
cjo6SXRlcmF0b3IsIElubGluZVRleHRCb3gqPiBtX3BhdGhWYXJpYW50OworfTsKKworY2xhc3Mg
VGV4dEJveFJhbmdlIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94UmFuZ2UoY29uc3QgUmVuZGVyVGV4
dCYpOworCisgICAgVGV4dEJveEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9yYW5n
ZS5iZWdpbigpOyB9CisgICAgVGV4dEJveEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFuZ2UuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgVGV4dEJveEl0ZXJh
dG9yOworCisgICAgT3B0aW9uYWw8U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI+IG1fc2lt
cGxlTGluZVJ1blJlc29sdmVyOworICAgIFdURjo6SXRlcmF0b3JSYW5nZTxUZXh0Qm94SXRlcmF0
b3I+IG1fcmFuZ2U7Cit9OworCitUZXh0Qm94UmFuZ2UgdGV4dEJveGVzKGNvbnN0IFJlbmRlclRl
eHQmKTsKKworfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377204</attachid>
            <date>2019-08-23 23:33:52 -0700</date>
            <delta_ts>2019-08-24 06:31:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>displayaccess-textbox-4.patch</filename>
            <type>text/plain</type>
            <size>21980</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlZTI2MWYwYjFiMy4uYTg1ZGVkNWZmZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOS0wOC0yMyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgSW1wbGVtZW50IGxheW91dCBzeXN0ZW0gaW5kZXBlbmRlbnQgdGV4dCBib3gg
aXRlcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMTA3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIGdlbmVyaWMgd2F5IHRvIHRyYXZlcnNlIGxpbmUgbGF5b3V0IHdpdGhvdXQgY2FyaW5n
IGFib3V0IHRoZSBkZXRhaWxzIG9mIHRoZSB1bmRlcmx5aW5nIGxheW91dCBzeXN0ZW0uCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIGJhc2ljIHN1cHBvcnQgZm9yIHRyYXZlcnNpbmcgdGV4dCBi
b3hlcyBhbmQgdXNlcyBpdCB0byByZW1vdmUgbGF5b3V0IHBhdGggc3BlY2lmaWMgYnJhbmNoZXMg
aW4gUmVuZGVyVHJlZUFzVGV4dC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0
Ojp3cml0ZVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRleHRCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUZXh0UnVu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU2ltcGxlTGluZSk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dEludGVyZmFjZVRleHRCb3hlcy5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dEludGVyZmFjZTo6VGV4dEJv
eDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0SW50ZXJmYWNlOjpU
ZXh0Qm94Ojpsb2dpY2FsUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0
SW50ZXJmYWNlOjpUZXh0Qm94OjpoYXNIeXBoZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGluZUxheW91dEludGVyZmFjZTo6VGV4dEJveDo6aXNMZWZ0VG9SaWdodERpcmVjdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0SW50ZXJmYWNlOjpUZXh0Qm94OjpkaXJP
dmVycmlkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0SW50ZXJmYWNlOjpU
ZXh0Qm94Ojp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRJbnRlcmZh
Y2U6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmVMYXlvdXRJbnRlcmZhY2U6OlRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRJbnRlcmZhY2U6OlRleHRCb3hJdGVyYXRvcjo6b3Bl
cmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0SW50ZXJmYWNlOjpz
aW1wbGVMaW5lUnVuUmVzb2x2ZXJGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlv
dXRJbnRlcmZhY2U6OnJhbmdlRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0
SW50ZXJmYWNlOjpUZXh0Qm94UmFuZ2U6OlRleHRCb3hSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0SW50ZXJmYWNlOjp0ZXh0Qm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9s
aW5lL0xpbmVMYXlvdXRJbnRlcmZhY2VUZXh0Qm94ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpMaW5lTGF5b3V0SW50ZXJmYWNlOjpUZXh0Qm94OjpUZXh0Qm94KToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVMYXlvdXRJbnRlcmZhY2U6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3IrKyk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0SW50ZXJmYWNlOjpUZXh0Qm94SXRlcmF0b3I6
Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dEludGVyZmFj
ZTo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGluZUxheW91dEludGVyZmFjZTo6VGV4dEJveFJhbmdlOjpiZWdpbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lTGF5b3V0SW50ZXJmYWNlOjpUZXh0Qm94UmFuZ2U6OmVuZCBjb25zdCk6
CisKIDIwMTktMDgtMjIgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAg
ICAgIENhcHR1cmVEZXZpY2VNYW5hZ2VyIGRvZXMgbm90IG5lZWQgdG8gYmUgQ2FuTWFrZVdlYWtQ
dHIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggMGEzOGRkNDZjN2QuLmE1YWI3OGZiNGQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dApAQCAtMjE1Miw2ICsyMTUyLDcgQEAgcmVuZGVyaW5nL1RyYWlsaW5nRmxvYXRzUm9vdElu
bGluZUJveC5jcHAKIAogcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwCiByZW5kZXJpbmcv
bGluZS9MaW5lSW5mby5jcHAKK3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRJbnRlcmZhY2VUZXh0
Qm94ZXMuY3BwCiByZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguY3BwCiByZW5kZXJpbmcvbGluZS9U
cmFpbGluZ09iamVjdHMuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzODUyZDNkMzkzNy4uZjdiZTc0YmVkMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQ3ODksNiArNDc4OSw3IEBACiAJCUU0N0MzOTMzMUZFNkUxMDgwMEJCQkM2QiAvKiBSZW5kZXJU
cmVlQnVpbGRlck11bHRpQ29sdW1uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDdDMzkyNzFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxk
ZXJNdWx0aUNvbHVtbi5oICovOyB9OwogCQlFNDdFMjc2NTE2MDM2RUQyMDBFRTJBRkIgLyogRXh0
ZW5zaW9uU3R5bGVTaGVldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0N0UyNzY0MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0
ODEzN0I5MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDgxMzdCODFEQjNCNTI2MDA1QzU5QkYg
LyogU3R5bGVWYWxpZGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUU0ODRBMzNFMjMwNTUzMjUwMDlBREU2QSAvKiBMaW5lTGF5b3V0SW50ZXJm
YWNlVGV4dEJveGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDg0QTMzQjIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxheW91dEludGVyZmFjZVRleHRC
b3hlcy5oICovOyB9OwogCQlFNDg5NDRBMzE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxh
eW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4
OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDkxNkZGNzE5NURGNkEwMDA1
QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OTE2RkY2MTk1REY2QTAwMDVBQjM0OSAvKiBMYXll
ckZsdXNoVGhyb3R0bGVTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUU0OTQ2RUFGMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBv
cnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OTQ2
RUFEMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ5NTEsNiArMTQ5NTIsOCBAQAog
CQlFNDdFMjc2NDE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uU3R5bGVTaGVldHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIEV4
dGVuc2lvblN0eWxlU2hlZXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV4dGVuc2lvblN0eWxlU2hlZXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ4MTM3QjgxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVWYWxpZGl0eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFNDg0QTMzQjIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxheW91dEludGVy
ZmFjZVRleHRCb3hlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5lTGF5
b3V0SW50ZXJmYWNlVGV4dEJveGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0
ODRBMzNEMjMwNTUzMDMwMDlBREU2QSAvKiBMaW5lTGF5b3V0SW50ZXJmYWNlVGV4dEJveGVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmVMYXlvdXRJbnRlcmZh
Y2VUZXh0Qm94ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5NDRBMDE4
MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlv
dXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDkxNkZGNjE5NURGNkEwMDA1QUIzNDkg
LyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI4MTcyLDYgKzI4MTc1LDggQEAKIAkJCQlGRkI2OThDRDE4MzNGMTc2MDAxNThBMzEg
LyogTGluZUluZm8uY3BwICovLAogCQkJCUZGQjY5OENFMTgzM0YxNzYwMDE1OEEzMSAvKiBMaW5l
SW5mby5oICovLAogCQkJCUZGRUZBQjJEMTgzQkNCNkYwMDUxNDUzNCAvKiBMaW5lSW5saW5lSGVh
ZGVycy5oICovLAorCQkJCUU0ODRBMzNEMjMwNTUzMDMwMDlBREU2QSAvKiBMaW5lTGF5b3V0SW50
ZXJmYWNlVGV4dEJveGVzLmNwcCAqLywKKwkJCQlFNDg0QTMzQjIzMDU1MzAzMDA5QURFNkEgLyog
TGluZUxheW91dEludGVyZmFjZVRleHRCb3hlcy5oICovLAogCQkJCUZGRUZBQjI5MTgzODBEQTAw
MDUxNDUzNCAvKiBMaW5lTGF5b3V0U3RhdGUuaCAqLywKIAkJCQlGRkRCQzA0NjE4M0QyN0I3MDA0
MDcxMDkgLyogTGluZVdpZHRoLmNwcCAqLywKIAkJCQlGRkRCQzA0NTE4M0QyN0I3MDA0MDcxMDkg
LyogTGluZVdpZHRoLmggKi8sCkBAIC0zMTkxNyw2ICszMTkyMiw3IEBACiAJCQkJQjJDM0RBM0Uw
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGluMS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTdFRjVFNjAxRDIwQzgzOTAwMTcxRTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkMzREE0MDBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVXNlckRl
ZmluZWQuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0ODRBMzNFMjMwNTUzMjUwMDlBREU2QSAvKiBM
aW5lTGF5b3V0SW50ZXJmYWNlVGV4dEJveGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE0
MjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzNDNDQjgyMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29kZWNVVEY4LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDJCOTdDQTEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAppbmRleCBjZmRkNWFkYTg5OS4uYTA3YzRkMDQxOTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MU3BhbkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTGluZUxheW91dEludGVyZmFj
ZVRleHRCb3hlcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQcmludENvbnRl
eHQuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCkBAIC02Myw3ICs2NCw2IEBACiAjaW5j
bHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgog
I2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlIDx3dGYvSGV4TnVt
YmVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjAyLDcgKzIwMiw4IEBAIHZvaWQg
UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlck9iamVjdCYgbywKICAgICAgICAgLy8gbWFueSB0ZXN0IHJlc3VsdHMuCiAgICAgICAg
IGNvbnN0IFJlbmRlclRleHQmIHRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PihvKTsKICAgICAg
ICAgciA9IEludFJlY3QodGV4dC5maXJzdFJ1bkxvY2F0aW9uKCksIHRleHQubGluZXNCb3VuZGlu
Z0JveCgpLnNpemUoKSk7Ci0gICAgICAgIGlmICghdGV4dC5maXJzdFRleHRCb3goKSAmJiAhdGV4
dC5zaW1wbGVMaW5lTGF5b3V0KCkpCisgICAgICAgIGF1dG8gdGV4dEJveGVzID0gTGluZUxheW91
dEludGVyZmFjZTo6dGV4dEJveGVzKHRleHQpOworICAgICAgICBpZiAodGV4dEJveGVzLmJlZ2lu
KCkgPT0gdGV4dEJveGVzLmVuZCgpKQogICAgICAgICAgICAgYWRqdXN0Rm9yVGFibGVDZWxscyA9
IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoby5pc0JSKCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVy
TGluZUJyZWFrJiBiciA9IGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4obyk7CkBAIC00NzcsNDgg
KzQ3OCwzNCBAQCB2b2lkIHdyaXRlRGVidWdJbmZvKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJPYmplY3QmIG9iamVjdCwgT3B0aW9uU2V0PFJlbmRlcgogICAgIH0KIH0KIAotc3RhdGljIHZv
aWQgd3JpdGVUZXh0UnVuKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJUZXh0JiBvLCBjb25z
dCBJbmxpbmVUZXh0Qm94JiBydW4pCitzdGF0aWMgdm9pZCB3cml0ZVRleHRCb3goVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0IExpbmVMYXlvdXRJbnRlcmZhY2U6OlRl
eHRCb3gmIHRleHRCb3gpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBub3cgdXNlIGFuICJlbmNsb3Np
bmdJbnRSZWN0IiBtb2RlbCBmb3IgeCwgeSBhbmQgbG9naWNhbFdpZHRoLCBhbHRob3VnaCB0aGlz
IG1ha2VzIGl0IGhhcmRlcgotICAgIC8vIHRvIGRldGVjdCBhbnkgY2hhbmdlcyBjYXVzZWQgYnkg
dGhlIGNvbnZlcnNpb24gdG8gZmxvYXRpbmcgcG9pbnQuIDooCi0gICAgaW50IHggPSBydW4ueCgp
OwotICAgIGludCB5ID0gcnVuLnkoKTsKLSAgICBpbnQgbG9naWNhbFdpZHRoID0gY2VpbGYocnVu
LmxlZnQoKSArIHJ1bi5sb2dpY2FsV2lkdGgoKSkgLSB4OworICAgIGF1dG8gcmVjdCA9IHRleHRC
b3gucmVjdCgpOworICAgIGF1dG8gbG9naWNhbFJlY3QgPSB0ZXh0Qm94LmxvZ2ljYWxSZWN0KCk7
CisKKyAgICBpbnQgeCA9IHJlY3QueCgpOworICAgIGludCB5ID0gcmVjdC55KCk7CisKKyAgICAv
LyBGSVhNRTogTWl4aW5nIGxvZ2ljYWwgYW5kIHBoeXNpY2FsIGhlcmUgZG9lc24ndCBtYWtlIHNl
bnNlLgorICAgIGludCBsb2dpY2FsV2lkdGggPSBjZWlsZihyZWN0LngoKSArIGxvZ2ljYWxSZWN0
LndpZHRoKCkpIC0geDsKIAogICAgIC8vIEZJWE1FOiBUYWJsZSBjZWxsIGFkanVzdG1lbnQgaXMg
dGVtcG9yYXJ5IHVudGlsIHJlc3VsdHMgY2FuIGJlIHVwZGF0ZWQuCiAgICAgaWYgKGlzPFJlbmRl
clRhYmxlQ2VsbD4oKm8uY29udGFpbmluZ0Jsb2NrKCkpKQogICAgICAgICB5IC09IGZsb29yVG9J
bnQoZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqby5jb250YWluaW5nQmxvY2soKSkuaW50cmlu
c2ljUGFkZGluZ0JlZm9yZSgpKTsKICAgICAgICAgCiAgICAgdHMgPDwgInRleHQgcnVuIGF0ICgi
IDw8IHggPDwgIiwiIDw8IHkgPDwgIikgd2lkdGggIiA8PCBsb2dpY2FsV2lkdGg7Ci0gICAgaWYg
KCFydW4uaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IHJ1bi5kaXJPdmVycmlkZSgpKSB7Ci0g
ICAgICAgIHRzIDw8ICghcnVuLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/ICIgUlRMIiA6ICIg
TFRSIik7Ci0gICAgICAgIGlmIChydW4uZGlyT3ZlcnJpZGUoKSkKKyAgICBpZiAoIXRleHRCb3gu
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8IHRleHRCb3guZGlyT3ZlcnJpZGUoKSkgeworICAg
ICAgICB0cyA8PCAoIXRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gIiBSVEwiIDog
IiBMVFIiKTsKKyAgICAgICAgaWYgKHRleHRCb3guZGlyT3ZlcnJpZGUoKSkKICAgICAgICAgICAg
IHRzIDw8ICIgb3ZlcnJpZGUiOwogICAgIH0KICAgICB0cyA8PCAiOiAiCi0gICAgICAgIDw8IHF1
b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhTdHJpbmcoby50ZXh0KCkpLnN1YnN0cmluZyhydW4u
c3RhcnQoKSwgcnVuLmxlbigpKSk7Ci0gICAgaWYgKHJ1bi5oYXNIeXBoZW4oKSkKKyAgICAgICAg
PDwgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKHRleHRCb3gudGV4dCgpKTsKKyAgICBpZiAo
dGV4dEJveC5oYXNIeXBoZW4oKSkKICAgICAgICAgdHMgPDwgIiArIGh5cGhlbiBzdHJpbmcgIiA8
PCBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMoby5zdHlsZSgpLmh5cGhlblN0cmluZygpLnN0
cmluZygpKTsKICAgICB0cyA8PCAiXG4iOwogfQogCi1zdGF0aWMgdm9pZCB3cml0ZVNpbXBsZUxp
bmUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlclRleHQsIGNvbnN0IFNp
bXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpSdW4mIHJ1bikKLXsKLSAgICBhdXRvIHJlY3Qg
PSBydW4ucmVjdCgpOwotICAgIGludCB4ID0gcmVjdC54KCk7Ci0gICAgaW50IHkgPSByZWN0Lnko
KTsKLSAgICBpbnQgbG9naWNhbFdpZHRoID0gY2VpbGYocmVjdC54KCkgKyByZWN0LndpZHRoKCkp
IC0geDsKLQotICAgIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KCpyZW5kZXJUZXh0LmNvbnRhaW5p
bmdCbG9jaygpKSkKLSAgICAgICAgeSAtPSBmbG9vclRvSW50KGRvd25jYXN0PFJlbmRlclRhYmxl
Q2VsbD4oKnJlbmRlclRleHQuY29udGFpbmluZ0Jsb2NrKCkpLmludHJpbnNpY1BhZGRpbmdCZWZv
cmUoKSk7Ci0KLSAgICB0cyA8PCAidGV4dCBydW4gYXQgKCIgPDwgeCA8PCAiLCIgPDwgeSA8PCAi
KSB3aWR0aCAiIDw8IGxvZ2ljYWxXaWR0aDsKLSAgICB0cyA8PCAiOiAiIDw8IHF1b3RlQW5kRXNj
YXBlTm9uUHJpbnRhYmxlcyhydW4udGV4dCgpKTsKLSAgICBpZiAocnVuLmhhc0h5cGhlbigpKQot
ICAgICAgICB0cyA8PCAiICsgaHlwaGVuIHN0cmluZyAiIDw8IHF1b3RlQW5kRXNjYXBlTm9uUHJp
bnRhYmxlcyhyZW5kZXJUZXh0LnN0eWxlKCkuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCkpOwotICAg
IHRzIDw8ICJcbiI7Ci19Ci0KIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+IGJlaGF2aW9yKQogewogICAg
IGlmIChpczxSZW5kZXJTVkdTaGFwZT4obykpIHsKQEAgLTU2MywyMCArNTUwLDEwIEBAIHZvaWQg
d3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgT3B0aW9uU2V0PFJl
bmRlckFzVGV4dEZsYWc+IGJlCiAKICAgICBpZiAoaXM8UmVuZGVyVGV4dD4obykpIHsKICAgICAg
ICAgYXV0byYgdGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KG8pOwotICAgICAgICBpZiAoYXV0
byBsYXlvdXQgPSB0ZXh0LnNpbXBsZUxpbmVMYXlvdXQoKSkgewotICAgICAgICAgICAgQVNTRVJU
KCF0ZXh0LmZpcnN0VGV4dEJveCgpKTsKLSAgICAgICAgICAgIGF1dG8gcmVzb2x2ZXIgPSBydW5S
ZXNvbHZlcihkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCp0ZXh0LnBhcmVudCgpKSwgKmxheW91
dCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gcnVuIDogcmVzb2x2ZXIucmFuZ2VGb3JSZW5kZXJl
cih0ZXh0KSkgewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudDsKLSAgICAgICAgICAgICAg
ICB3cml0ZVNpbXBsZUxpbmUodHMsIHRleHQsIHJ1bik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGJveCA9IHRleHQuZmlyc3RUZXh0Qm94
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgICAgICAgICAgdHMg
PDwgaW5kZW50OwotICAgICAgICAgICAgICAgIHdyaXRlVGV4dFJ1bih0cywgdGV4dCwgKmJveCk7
Ci0gICAgICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byB0ZXh0Qm94IDogTGluZUxheW91dElu
dGVyZmFjZTo6dGV4dEJveGVzKHRleHQpKSB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQ7Cisg
ICAgICAgICAgICB3cml0ZVRleHRCb3godHMsIHRleHQsIHRleHRCb3gpOwogICAgICAgICB9Ci0K
ICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8
UmVuZGVyT2JqZWN0Pihkb3duY2FzdDxSZW5kZXJFbGVtZW50PihvKSkpIHsKICAgICAgICAgICAg
IGlmIChjaGlsZC5oYXNMYXllcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL2xpbmUvTGluZUxheW91dEludGVyZmFjZVRleHRCb3hlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0SW50ZXJmYWNlVGV4dEJveGVzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGFhODYzYjFjZGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0SW50ZXJmYWNl
VGV4dEJveGVzLmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJMaW5lTGF5b3V0SW50ZXJmYWNlVGV4dEJveGVzLmgiCisKKyNp
bmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1
ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgTGluZUxheW91dEludGVyZmFjZSB7CisKK0Zsb2F0UmVjdCBUZXh0Qm94OjpyZWN0
KCkgY29uc3QKK3sKKyAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6
OlJ1blJlc29sdmVyOjpJdGVyYXRvciBzaW1wbGVMaW5lSXRlcmF0b3IpIHsKKyAgICAgICAgcmV0
dXJuICgqc2ltcGxlTGluZUl0ZXJhdG9yKS5yZWN0KCk7CisgICAgfTsKKworICAgIGF1dG8gY29t
cGxleCA9IFtdKGNvbnN0IElubGluZVRleHRCb3gqIGlubGluZVRleHRCb3gpIHsKKyAgICAgICAg
cmV0dXJuIGlubGluZVRleHRCb3gtPmZyYW1lUmVjdCgpOworICAgIH07CisKKyAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX2l0ZXJhdG9yLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7
Cit9CisKK0Zsb2F0UmVjdCBUZXh0Qm94Ojpsb2dpY2FsUmVjdCgpIGNvbnN0Cit7CisgICAgYXV0
byBzaW1wbGUgPSBbXShjb25zdCBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0
b3Igc2ltcGxlTGluZUl0ZXJhdG9yKSB7CisgICAgICAgIHJldHVybiAoKnNpbXBsZUxpbmVJdGVy
YXRvcikucmVjdCgpOworICAgIH07CisKKyAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCBJbmxp
bmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJldHVybiBpbmxpbmVUZXh0Qm94
LT5sb2dpY2FsRnJhbWVSZWN0KCk7CisgICAgfTsKKworICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1faXRlcmF0b3IubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKK30KKworYm9vbCBU
ZXh0Qm94OjpoYXNIeXBoZW4oKSBjb25zdAoreworICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3Qg
U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIHNpbXBsZUxpbmVJdGVyYXRv
cikgeworICAgICAgICByZXR1cm4gKCpzaW1wbGVMaW5lSXRlcmF0b3IpLmhhc0h5cGhlbigpOwor
ICAgIH07CisKKyAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxp
bmVUZXh0Qm94KSB7CisgICAgICAgIHJldHVybiBpbmxpbmVUZXh0Qm94LT5oYXNIeXBoZW4oKTsK
KyAgICB9OworCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9pdGVyYXRvci5tX3BhdGhWYXJp
YW50LCBzaW1wbGUsIGNvbXBsZXgpOworfQorCitib29sIFRleHRCb3g6OmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSBjb25zdAoreworICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgU2ltcGxlTGlu
ZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yKSB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH07CisKKyAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxp
bmVUZXh0Qm94KSB7CisgICAgICAgIHJldHVybiBpbmxpbmVUZXh0Qm94LT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCk7CisgICAgfTsKKworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1faXRlcmF0
b3IubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKK30KKworYm9vbCBUZXh0Qm94Ojpk
aXJPdmVycmlkZSgpIGNvbnN0Cit7CisgICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCBTaW1wbGVM
aW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH07CisKKyAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBp
bmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJldHVybiBpbmxpbmVUZXh0Qm94LT5kaXJPdmVycmlk
ZSgpOworICAgIH07CisKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2l0ZXJhdG9yLm1fcGF0
aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7Cit9CisKK1N0cmluZ1ZpZXcgVGV4dEJveDo6dGV4
dCgpIGNvbnN0Cit7CisgICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCBTaW1wbGVMaW5lTGF5b3V0
OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3Igc2ltcGxlTGluZUl0ZXJhdG9yKSB7CisgICAgICAgIHJl
dHVybiAoKnNpbXBsZUxpbmVJdGVyYXRvcikudGV4dCgpOworICAgIH07CisKKyAgICBhdXRvIGNv
bXBsZXggPSBbXShjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAg
IHJldHVybiBTdHJpbmdWaWV3KGlubGluZVRleHRCb3gtPnJlbmRlcmVyKCkudGV4dCgpKS5zdWJz
dHJpbmcoaW5saW5lVGV4dEJveC0+c3RhcnQoKSwgaW5saW5lVGV4dEJveC0+bGVuKCkpOworICAg
IH07CisKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2l0ZXJhdG9yLm1fcGF0aFZhcmlhbnQs
IHNpbXBsZSwgY29tcGxleCk7Cit9CisKK1RleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9y
KGNvbnN0IElubGluZVRleHRCb3gqIGlubGluZVRleHRCb3gpCisgICAgOiBtX3BhdGhWYXJpYW50
KGlubGluZVRleHRCb3gpCit7Cit9CisKK1RleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9y
KFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBzaW1wbGVMaW5lSXRlcmF0
b3IpCisgICAgOiBtX3BhdGhWYXJpYW50KHNpbXBsZUxpbmVJdGVyYXRvcikKK3sKK30KKworVGV4
dEJveEl0ZXJhdG9yJiBUZXh0Qm94SXRlcmF0b3I6OnRyYXZlcnNlTmV4dCgpCit7CisgICAgYXV0
byBzaW1wbGUgPSBbXShTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3ImIHNp
bXBsZUxpbmVJdGVyYXRvcikgeworICAgICAgICArK3NpbXBsZUxpbmVJdGVyYXRvcjsKKyAgICB9
OworCisgICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgSW5saW5lVGV4dEJveComIGlubGluZVRl
eHRCb3gpIHsKKyAgICAgICAgaW5saW5lVGV4dEJveCA9IGlubGluZVRleHRCb3gtPm5leHRUZXh0
Qm94KCk7CisgICAgfTsKKworICAgIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgc2ltcGxl
LCBjb21wbGV4KTsKKworICAgIHJldHVybiAqdGhpczsKK30KKworYm9vbCBUZXh0Qm94SXRlcmF0
b3I6Om9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAobV9wYXRoVmFyaWFudC5pbmRleCgpICE9IG90aGVyLm1fcGF0aFZhcmlhbnQuaW5kZXgo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBzaW1wbGUgPSBbJl0oY29uc3Qg
U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIHNpbXBsZUxpbmVJdGVyYXRv
cikgeworICAgICAgICByZXR1cm4gc2ltcGxlTGluZUl0ZXJhdG9yID09IFdURjo6Z2V0PFNpbXBs
ZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvcj4ob3RoZXIubV9wYXRoVmFyaWFudCk7
CisgICAgfTsKKworICAgIGF1dG8gY29tcGxleCA9IFsmXShjb25zdCBJbmxpbmVUZXh0Qm94KiBp
bmxpbmVUZXh0Qm94KSB7CisgICAgICAgIHJldHVybiBpbmxpbmVUZXh0Qm94ID09IFdURjo6Z2V0
PGNvbnN0IElubGluZVRleHRCb3gqPihvdGhlci5tX3BhdGhWYXJpYW50KTsKKyAgICB9OworCisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsK
K30KKworc3RhdGljIE9wdGlvbmFsPFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyPiBzaW1w
bGVMaW5lUnVuUmVzb2x2ZXJGb3JUZXh0KGNvbnN0IFJlbmRlclRleHQmIHRleHQpCit7CisgICAg
aWYgKCF0ZXh0LnNpbXBsZUxpbmVMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICByZXR1cm4gU2ltcGxlTGluZUxheW91dDo6cnVuUmVzb2x2ZXIoZG93bmNhc3Q8Y29u
c3QgUmVuZGVyQmxvY2tGbG93PigqdGV4dC5wYXJlbnQoKSksICp0ZXh0LnNpbXBsZUxpbmVMYXlv
dXQoKSk7Cit9CisKK3N0YXRpYyBhdXRvIHJhbmdlRm9yVGV4dChjb25zdCBSZW5kZXJUZXh0JiB0
ZXh0LCBPcHRpb25hbDxTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcj4mIHNpbXBsZUxpbmVS
dW5SZXNvbHZlcikKK3sKKyAgICBpZiAoc2ltcGxlTGluZVJ1blJlc29sdmVyKSB7CisgICAgICAg
IGF1dG8gcmFuZ2UgPSBzaW1wbGVMaW5lUnVuUmVzb2x2ZXItPnJhbmdlRm9yUmVuZGVyZXIodGV4
dCk7CisgICAgICAgIHJldHVybiBXVEY6Om1ha2VJdGVyYXRvclJhbmdlKFRleHRCb3hJdGVyYXRv
cihyYW5nZS5iZWdpbigpKSwgVGV4dEJveEl0ZXJhdG9yKHJhbmdlLmVuZCgpKSk7CisgICAgfQor
ICAgIHJldHVybiBXVEY6Om1ha2VJdGVyYXRvclJhbmdlKFRleHRCb3hJdGVyYXRvcih0ZXh0LmZp
cnN0VGV4dEJveCgpKSwgVGV4dEJveEl0ZXJhdG9yKG51bGxwdHIpKTsKK30KKworVGV4dEJveFJh
bmdlOjpUZXh0Qm94UmFuZ2UoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKKyAgICA6IG1fc2ltcGxl
TGluZVJ1blJlc29sdmVyKHNpbXBsZUxpbmVSdW5SZXNvbHZlckZvclRleHQodGV4dCkpCisgICAg
LCBtX3JhbmdlKHJhbmdlRm9yVGV4dCh0ZXh0LCBtX3NpbXBsZUxpbmVSdW5SZXNvbHZlcikpCit7
Cit9CisKK1RleHRCb3hSYW5nZSB0ZXh0Qm94ZXMoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKK3sK
KyAgICByZXR1cm4geyB0ZXh0IH07Cit9CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRJbnRlcmZhY2VUZXh0Qm94ZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRJbnRlcmZhY2VUZXh0Qm94ZXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDY0YzIyYTczZmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0SW50
ZXJmYWNlVGV4dEJveGVzLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlv
dXRSZXNvbHZlci5oIgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRvclJhbmdlLmg+CisjaW5jbHVkZSA8
d3RmL1ZhcmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5saW5lVGV4dEJveDsKK2NsYXNzIFJlbmRlclRleHQ7
CisKK25hbWVzcGFjZSBMaW5lTGF5b3V0SW50ZXJmYWNlIHsKKworY2xhc3MgVGV4dEJveENvbnRl
eHQ7CitjbGFzcyBUZXh0Qm94SXRlcmF0b3I7CisKK2NsYXNzIFRleHRCb3ggeworcHVibGljOgor
ICAgIFRleHRCb3goY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBpdGVyYXRvcikKKyAgICAgICAgOiBt
X2l0ZXJhdG9yKGl0ZXJhdG9yKQorICAgIHsgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25z
dDsKKyAgICBGbG9hdFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSHlw
aGVuKCkgY29uc3Q7CisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3Q7Cisg
ICAgYm9vbCBkaXJPdmVycmlkZSgpIGNvbnN0OworCisgICAgU3RyaW5nVmlldyB0ZXh0KCkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBtX2l0ZXJhdG9yOwor
fTsKKworY2xhc3MgVGV4dEJveEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94SXRlcmF0
b3IoY29uc3QgSW5saW5lVGV4dEJveCopOworICAgIFRleHRCb3hJdGVyYXRvcihTaW1wbGVMaW5l
TGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IpOworCisgICAgVGV4dEJveEl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0KCk7IH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7IH0KKworICAgIFRleHRCb3ggb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4geyAqdGhp
cyB9OyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFRleHRCb3g7CisKKyAgICBUZXh0
Qm94SXRlcmF0b3ImIHRyYXZlcnNlTmV4dCgpOworCisgICAgVmFyaWFudDxTaW1wbGVMaW5lTGF5
b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IsIGNvbnN0IElubGluZVRleHRCb3gqPiBtX3BhdGhW
YXJpYW50OworfTsKKworY2xhc3MgVGV4dEJveFJhbmdlIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94
UmFuZ2UoY29uc3QgUmVuZGVyVGV4dCYpOworCisgICAgVGV4dEJveEl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9yYW5nZS5iZWdpbigpOyB9CisgICAgVGV4dEJveEl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgVGV4dEJveEl0ZXJhdG9yOworCisgICAgT3B0aW9uYWw8U2ltcGxlTGluZUxheW91
dDo6UnVuUmVzb2x2ZXI+IG1fc2ltcGxlTGluZVJ1blJlc29sdmVyOworICAgIFdURjo6SXRlcmF0
b3JSYW5nZTxUZXh0Qm94SXRlcmF0b3I+IG1fcmFuZ2U7Cit9OworCitUZXh0Qm94UmFuZ2UgdGV4
dEJveGVzKGNvbnN0IFJlbmRlclRleHQmKTsKKworfQorfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>