<?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>155866</bug_id>
          
          <creation_ts>2016-03-24 20:01:48 -0700</creation_ts>
          <short_desc>bmalloc: small and large objects should share memory</short_desc>
          <delta_ts>2016-03-25 11:07:31 -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>bmalloc</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1177859</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-24 20:01:48 -0700</bug_when>
    <thetext>bmalloc: small and large objects should share memory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177861</commentid>
    <comment_count>1</comment_count>
      <attachid>274876</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-24 20:20:15 -0700</bug_when>
    <thetext>Created attachment 274876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177862</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-24 20:23:04 -0700</bug_when>
    <thetext>Memory:

~/OpenSource/PerformanceTests/MallocBench&gt; ./run-malloc-benchmarks --memory_warning Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
                                                                                     
                                                                Baseline                               Patch                                   Δ
Peak Memory:
    reddit_memory_warning --runs 0                              13,064kB                            13,152kB                      ! 1.01x bigger
    flickr_memory_warning --runs 0                              24,264kB                            23,528kB                     ^ 1.03x smaller
    theverge_memory_warning --runs 0                            26,080kB                            25,488kB                     ^ 1.02x smaller

    &lt;geometric mean&gt;                                            20,220kB                            19,905kB                     ^ 1.02x smaller
    &lt;arithmetic mean&gt;                                           21,136kB                            20,723kB                     ^ 1.02x smaller
    &lt;harmonic mean&gt;                                             19,218kB                            19,015kB                     ^ 1.01x smaller

Memory at End:
    reddit_memory_warning --runs 0                               8,720kB                             8,708kB                      ^ 1.0x smaller
    flickr_memory_warning --runs 0                              11,772kB                            11,860kB                      ! 1.01x bigger
    theverge_memory_warning --runs 0                            20,652kB                            20,644kB                      ^ 1.0x smaller

    &lt;geometric mean&gt;                                            12,846kB                            12,871kB                       ! 1.0x bigger
    &lt;arithmetic mean&gt;                                           13,715kB                            13,737kB                       ! 1.0x bigger
    &lt;harmonic mean&gt;                                             12,094kB                            12,117kB                       ! 1.0x bigger

~/OpenSource/PerformanceTests/MallocBench&gt; ./run-malloc-benchmarks --memory Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
                                                                                
                                  Baseline                Patch                    Δ
Peak Memory:
    facebook                      73,008kB             74,000kB       ! 1.01x bigger
    reddit                        13,116kB             13,236kB       ! 1.01x bigger
    flickr                        24,584kB             23,384kB      ^ 1.05x smaller
    theverge                      26,112kB             25,544kB      ^ 1.02x smaller

    &lt;geometric mean&gt;              28,001kB             27,657kB      ^ 1.01x smaller
    &lt;arithmetic mean&gt;             34,205kB             34,041kB       ^ 1.0x smaller
    &lt;harmonic mean&gt;               23,681kB             23,395kB      ^ 1.01x smaller

Memory at End:
    facebook                       2,716kB              3,328kB       ! 1.23x bigger
    reddit                         1,732kB              1,780kB       ! 1.03x bigger
    flickr                         2,744kB              2,808kB       ! 1.02x bigger
    theverge                       2,800kB              2,896kB       ! 1.03x bigger

    &lt;geometric mean&gt;               2,452kB              2,635kB       ! 1.07x bigger
    &lt;arithmetic mean&gt;              2,498kB              2,703kB       ! 1.08x bigger
    &lt;harmonic mean&gt;                2,399kB              2,558kB       ! 1.07x bigger

Memory at end goes up because of our extra metadata. (We don&apos;t free metadata.)

I think this is worth it because of the other benefits in this patch -- but I&apos;m going to try to reduce or free metadata in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177863</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-24 20:23:18 -0700</bug_when>
    <thetext>Throughput:

~/OpenSource/PerformanceTests/MallocBench&gt; ./run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
                                                                                
                                                      Baseline                          Patch                              Δ
Execution Time:
    churn                                                 76ms                           74ms                 ^ 1.03x faster
    list_allocate                                         71ms                           70ms                 ^ 1.01x faster
    tree_allocate                                         72ms                           73ms                 ! 1.01x slower
    tree_churn                                            79ms                           80ms                 ! 1.01x slower
    fragment                                             131ms                          132ms                 ! 1.01x slower
    fragment_iterate                                      76ms                           76ms                               
    medium                                               191ms                          174ms                  ^ 1.1x faster
    big                                                  138ms                          137ms                 ^ 1.01x faster
    facebook                                             221ms                          231ms                 ! 1.05x slower
    reddit                                               111ms                          114ms                 ! 1.03x slower
    flickr                                               115ms                          119ms                 ! 1.03x slower
    theverge                                             144ms                          147ms                 ! 1.02x slower
    nimlang                                              118ms                          122ms                 ! 1.03x slower
    message_one                                          205ms                          209ms                 ! 1.02x slower
    message_many                                         113ms                          113ms                               
    churn --parallel                                      37ms                           36ms                 ^ 1.03x faster
    list_allocate --parallel                              65ms                           62ms                 ^ 1.05x faster
    tree_allocate --parallel                              75ms                           76ms                 ! 1.01x slower
    tree_churn --parallel                                 85ms                           83ms                 ^ 1.02x faster
    fragment --parallel                                   94ms                           94ms                               
    fragment_iterate --parallel                           31ms                           31ms                               
    medium --parallel                                    182ms                          177ms                 ^ 1.03x faster
    big --parallel                                       129ms                          130ms                 ! 1.01x slower

    &lt;geometric mean&gt;                                     100ms                          100ms                  ^ 1.0x faster
    &lt;arithmetic mean&gt;                                    111ms                          111ms                  ! 1.0x slower
    &lt;harmonic mean&gt;                                       88ms                           87ms                  ^ 1.0x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177865</commentid>
    <comment_count>4</comment_count>
      <attachid>274877</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-24 20:26:31 -0700</bug_when>
    <thetext>Created attachment 274877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177866</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-24 20:28:15 -0700</bug_when>
    <thetext>Some stress tests are hit particularly hard by the extra metadata:

Memory at End:
    medium                                             4,600kB                       15,076kB                 ! 3.28x bigger
    big                                                4,584kB                       15,024kB                 ! 3.28x bigger
    fragment --parallel                                  880kB                        1,956kB                 ! 2.22x bigger
    medium --parallel                                  4,712kB                       19,856kB                 ! 4.21x bigger
    big --parallel                                     4,700kB                       38,284kB                 ! 8.15x bigger

medium and big start out with 1GB heaps and then shrink to 0, so they&apos;re more of a stress test than a benchmark of memory use in the mean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177867</commentid>
    <comment_count>6</comment_count>
      <attachid>274878</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-24 20:30:08 -0700</bug_when>
    <thetext>Created attachment 274878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177976</commentid>
    <comment_count>7</comment_count>
      <attachid>274909</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-25 09:08:32 -0700</bug_when>
    <thetext>Created attachment 274909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177979</commentid>
    <comment_count>8</comment_count>
      <attachid>274909</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-03-25 09:24:14 -0700</bug_when>
    <thetext>Comment on attachment 274909
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178023</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-25 11:07:31 -0700</bug_when>
    <thetext>Committed r198675: &lt;http://trac.webkit.org/changeset/198675&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274876</attachid>
            <date>2016-03-24 20:20:15 -0700</date>
            <delta_ts>2016-03-24 20:26:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155866-20160324202016.patch</filename>
            <type>text/plain</type>
            <size>53561</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODY1OCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OCBAQAorMjAxNi0wMy0yNCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IHNtYWxsIGFu
ZCBsYXJnZSBvYmplY3RzIHNob3VsZCBzaGFyZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTg2NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY3V0cyBvdXIgVk0gZm9vdHBy
aW50IGluIGhhbGYuIChWTSBmb290cHJpbnQgdXN1YWxseSBkb2Vzbid0CisgICAgICAgIG1hdHRl
ciwgYnV0IG9uIGlPUyB0aGVyZSdzIGFuIGFydGlmaWNpYWwgVk0gbGltaXQgYXJvdW5kIDcwME1C
LCBhbmQgaWYKKyAgICAgICAgeW91IGhpdCBpdCB5b3UgamV0c2FtIC8gY3Jhc2guKQorCisgICAg
ICAgIEl0J3MgYWxzbyBhIHN0ZXAgdG93YXJkIGhvbm9yaW5nIHRoZSBoYXJkd2FyZSBwYWdlIHNp
emUgYXQgcnVudGltZSwKKyAgICAgICAgd2hpY2ggd2lsbCByZWR1Y2UgbWVtb3J5IHVzYWdlIG9u
IGlPUy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGEgc21hbGwgaW1wcm92ZW1lbnQgaW4gcGVh
ayBtZW1vcnkgdXNhZ2UgYmVjYXVzZSBpdCBhbGxvd3MKKyAgICAgICAgc21hbGwgYW5kIGxhcmdl
IG9iamVjdHMgdG8gcmVjeWNsZSBlYWNoIG90aGVyJ3MgbWVtb3J5LiBUaGUgdHJhZGVvZmYgaXMK
KyAgICAgICAgdGhhdCB3ZSByZXF1aXJlIG1vcmUgbWV0YWRhdGEsIHdoaWNoIGNhdXNlcyBtb3Jl
IG1lbW9yeSB1c2FnZSB1bmRlciBzb21lCisgICAgICAgIGNvbmRpdGlvbnMgLS0gYWx0aG91Z2gg
d2Ugc3RpbGwgYSBtZW1vcnkgd2luIGluIHRoZSBtZWFuLgorCisgICAgICAgICogYm1hbGxvYy54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBSZW1vdmVkIFN1cGVyQ2h1bmsuCisKKyAgICAgICAg
KiBibWFsbG9jL0FsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJl
YWxsb2NhdGUpOiBBZG9wdCBhIG5ldyBIZWFwIEFQSSBmb3Igc2hyaW5raW5nCisgICAgICAgIGxh
cmdlIG9iamVjdHMgYmVjYXVzZSBpdCdzIGEgbGl0dGxlIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBp
dCB1c2VkIHRvIGJlLgorCisgICAgICAgIERvbid0IGNoZWNrIGZvciBlcXVhbGl0eSBpbiB0aGUg
WExhcmdlIGNhc2UgYmVjYXVzZSB3ZSBkb24ndCBkbyBpdCBpbgorICAgICAgICBvdGhlciBjYXNl
cywgYW5kIGl0J3MgdW5saWtlbHkgdGhhdCB3ZSdsbCBiZSBjYWxsZWQgZm9yIG5vIHJlYXNvbi4K
KworICAgICAgICAqIGJtYWxsb2MvQnVtcEFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6
QnVtcEFsbG9jYXRvcjo6YWxsb2NhdGUpOiBEb24ndCBBU1NFUlQgaXNTbWFsbCBiZWNhdXNlIHRo
YXQncworICAgICAgICBhbiBvbGQgY29uY2VwdCBmcm9tIHdoZW4gc21hbGwgYW5kIGxhcmdlIG9i
amVjdHMgd2VyZSBpbiBkaXN0aW5jdCBtZW1vcnkKKyAgICAgICAgcmVnaW9ucy4KKworICAgICAg
ICAqIGJtYWxsb2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0
b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSk6IExhcmdlIG9iamVjdHMgYXJlIG5vdAorICAgICAgICBz
ZWdyZWdhdGVkIGFueW1vcmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpkZWFs
bG9jYXRlTGFyZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5o
OgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSk6IERv
bid0IEFTU0VSVCBpc1NtYWxsKCkuIFNlZQorICAgICAgICBhYm92ZS4KKworICAgICAgICAqIGJt
YWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZSk6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZXMpOiBOZXcgaGVscGVycyBmb3IgcmV0dXJuaW5nIGNh
Y2hlZAorICAgICAgICBzbWFsbCBwYWdlcyB0byB0aGUgbGFyZ2Ugb2JqZWN0IGhlYXAuCisKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKTogQWxsb2NhdGUgc21hbGwg
cGFnZXMgZnJvbSB0aGUgbGFyZ2UKKyAgICAgICAgb2JqZWN0IGhlYXAuIFRoaXMgaXMgaG93IHdl
IGFjY29tcGxpc2ggc2hhcmluZy4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0
ZVNtYWxsTGluZSk6IEhhbmRsZSBsYXJnZSBvYmplY3RzIHNpbmNlIHdlIGNhbgorICAgICAgICBl
bmNvdW50ZXIgdGhlbSBvbiB0aGlzIGNvZGUgcGF0aCBub3cuCisKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OnNwbGl0QW5kQWxsb2NhdGUpOiBGaXhlZCBhIGJ1ZyB3aGVyZSB3ZSB3b3VsZCBzb21l
dGltZXMKKyAgICAgICAgbm90IHNwbGl0IGV2ZW4gdGhvdWdoIHdlIGNvdWxkLgorCisgICAgICAg
IEFsbG9jYXRpbmcgYSBsYXJnZSBvYmplY3QgYWxzbyByZXF1aXJlcyByZWYnaW5nIGl0cyBzbWFs
bCBsaW5lIHNvIHRoYXQKKyAgICAgICAgd2UgY2FuIGFsaWFzIG1lbW9yeSBiZXR3ZWVuIHNtYWxs
IGFuZCBsYXJnZSBvYmplY3RzLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxh
cmdlKTogUmV0dXJuIGNhY2hlZCBzbWFsbCBwYWdlcyBiZWZvcmUKKyAgICAgICAgYWxsb2NhdGlu
ZyBhIGxhcmdlIG9iamVjdCB0aGF0IHdvdWxkIGZpdCBpbiBhIGNhY2hlZCBzbWFsbCBwYWdlLiBU
aGlzCisgICAgICAgIGFsbG93cyBzb21lIGxhcmdlIGFsbG9jYXRpb25zIHRvIHJldXNlIHNtYWxs
IG9iamVjdCBtZW1vcnkuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKTog
TmV3IGhlbHBlci4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKTog
RGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorCisgICAgICAgICogYm1hbGxv
Yy9MYXJnZUNodW5rLmg6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpwYWdlQmVnaW4p
OgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6cGFnZUVuZCk6CisgICAgICAgIChibWFs
bG9jOjpMYXJnZUNodW5rOjpsaW5lcyk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpw
YWdlcyk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpiZWdpbik6CisgICAgICAgIChi
bWFsbG9jOjpMYXJnZUNodW5rOjplbmQpOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6
TGFyZ2VDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpnZXQpOgorICAgICAg
ICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6ZW5kVGFnKToKKyAgICAgICAgKGJtYWxsb2M6Okxhcmdl
Q2h1bms6Om9mZnNldCk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpvYmplY3QpOgor
ICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6cGFnZSk6CisgICAgICAgIChibWFsbG9jOjpM
YXJnZUNodW5rOjpsaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsTGluZTo6YmVnaW4pOgor
ICAgICAgICAoYm1hbGxvYzo6U21hbGxMaW5lOjplbmQpOgorICAgICAgICAoYm1hbGxvYzo6U21h
bGxQYWdlOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpPYmplY3Q6Ok9iamVjdCk6CisgICAgICAgIChibWFsbG9jOjpPYmplY3Q6
OmJlZ2luKToKKyAgICAgICAgKGJtYWxsb2M6Ok9iamVjdDo6cGFnZUJlZ2luKToKKyAgICAgICAg
KGJtYWxsb2M6Ok9iamVjdDo6bGluZSk6CisgICAgICAgIChibWFsbG9jOjpPYmplY3Q6OnBhZ2Up
OiBJIG1lcmdlZCBhbGwgdGhlIFNtYWxsQ2h1bmsgbWV0YWRhdGEgYW5kIGNvZGUKKyAgICAgICAg
aW50byBMYXJnZUNodW5rLiBOb3cgd2UgdXNlIGEgc2luZ2xlIGNsYXNzIHRvIHRyYWNrIGJvdGgg
c21hbGwgYW5kIGxhcmdlCisgICAgICAgIG1ldGFkYXRhLCBzbyB3ZSBjYW4gc2hhcmUgbWVtb3J5
IGJldHdlZW4gc21hbGwgYW5kIGxhcmdlIG9iamVjdHMuCisKKyAgICAgICAgSSdtIGdvaW5nIHRv
IHJlbmFtZSB0aGlzIGNsYXNzIHRvIENodW5rIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisgICAg
ICAgICogYm1hbGxvYy9PYmplY3QuaDoKKyAgICAgICAgKGJtYWxsb2M6Ok9iamVjdDo6Y2h1bmsp
OiBVcGRhdGVkIGZvciBMYXJnZUNodW5rIHRyYW5zaXRpb24uCisKKyAgICAgICAgKiBibWFsbG9j
L09iamVjdFR5cGUuY3BwOgorICAgICAgICAoYm1hbGxvYzo6b2JqZWN0VHlwZSk6CisgICAgICAg
ICogYm1hbGxvYy9PYmplY3RUeXBlLmg6CisgICAgICAgIChibWFsbG9jOjppc1hMYXJnZSk6Cisg
ICAgICAgIChibWFsbG9jOjppc1NtYWxsKTogRGVsZXRlZC4gVGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biBzbWFsbCBhbmQgbGFyZ2UKKyAgICAgICAgb2JqZWN0cyBpcyBub3cgc3RvcmVkIGluIG1ldGFk
YXRhIGFuZCBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGVpcgorICAgICAgICB2aXJ0dWFsIGFkZHJl
c3MgcmFuZ2UuCisKKyAgICAgICAgKiBibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oOiBPbmUg
bW9yZSBlbnRyeSBiZWNhdXNlIHdlIGNvdmVyIGFsbCBvZgorICAgICAgICB3aGF0IHVzZWQgdG8g
YmUgdGhlIHN1cGVyIGNodW5rIGluIGEgbGFyZ2UgY2h1bmsgbm93LgorCisgICAgICAgICogYm1h
bGxvYy9TaXplcy5oOiBSZW1vdmVkIGJpdCBtYXNraW5nIGhlbHBlcnMgYmVjYXVzZSB3ZSBkb24n
dCB1c2UKKyAgICAgICAgYWRkcmVzcyBtYXNrcyB0byBkaXN0aW5ndWlzaCBzbWFsbCB2cyBsYXJn
ZSBvYmplY3QgdHlwZSBhbnltb3JlLgorCisgICAgICAgICogYm1hbGxvYy9TbWFsbENodW5rLmg6
IFJlbW92ZWQuCisKKyAgICAgICAgKiBibWFsbG9jL1NtYWxsUGFnZS5oOgorICAgICAgICAoYm1h
bGxvYzo6U21hbGxQYWdlOjpTbWFsbFBhZ2UpOiBTdG9yZSBvYmplY3QgdHlwZSBwZXIgcGFnZSBi
ZWNhdXNlIGFueQorICAgICAgICBnaXZlbiBwYWdlIGNhbiBiZSB1c2VkIGZvciBsYXJnZSBvYmpl
Y3RzIG9yIHNtYWxsIG9iamVjdHMuCisKKyAgICAgICAgKiBibWFsbG9jL1N1cGVyQ2h1bmsuaDog
UmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvVk1IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxs
b2M6OlZNSGVhcDo6Vk1IZWFwKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVM
YXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTbWFsbENodW5r
KTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTdXBlckNodW5r
KTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5oOgorICAgICAgICAoYm1hbGxv
Yzo6Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVh
cDo6ZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxs
b2NhdGVTbWFsbFBhZ2UpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFs
bG9jYXRlU21hbGxQYWdlKTogRGVsZXRlZC4gUmVtb3ZlZCBzdXBlciBjaHVuayBhbmQKKyAgICAg
ICAgc21hbGwgY2h1bmsgc3VwcG9ydC4KKworICAgICAgICAqIGJtYWxsb2MvWm9uZS5jcHA6Cisg
ICAgICAgIChibWFsbG9jOjplbnVtZXJhdG9yKToKKyAgICAgICAgKiBibWFsbG9jL1pvbmUuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlpvbmU6OmxhcmdlQ2h1bmtzKToKKyAgICAgICAgKGJtYWxsb2M6
OlpvbmU6OmFkZExhcmdlQ2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6Wm9uZTo6c3VwZXJDaHVu
a3MpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Wm9uZTo6YWRkU3VwZXJDaHVuayk6IERl
bGV0ZWQuIFJlbW92ZWQgc3VwZXIgY2h1bmsgYW5kCisgICAgICAgIHNtYWxsIGNodW5rIHN1cHBv
cnQuCisKIDIwMTYtMDMtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBibWFsbG9jOiBBZGRlZCBhbiBPYmplY3QgaGVscGVyIGNsYXNzCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3LDcgKzE3LDYgQEAKIAkJMTQzQ0I4MUQxOTAy
MkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNDQjgxQjE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0
ZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDNFRjlBRjFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRUY5QUQxQTlGQUJGNjAwNEY1Qzc3IC8q
IEZyZWVMaXN0LmNwcCAqLzsgfTsKIAkJMTQzRUY5QjAxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNF
RjlBRTFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDQwQUZDOTFBOTUxNDI0MDA4MzdGQUEgLyog
U3VwZXJDaHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ0MEFGQzgxQTk1MTQyNDAwODM3RkFBIC8qIFN1cGVyQ2h1bmsuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDQjFBOTUyNjExMDA4
MzdGQUEgLyogWm9uZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ0MEFGQ0ExQTk1MjYxMTAwODM3RkFBIC8qIFpvbmUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDRDFBOTUyN0FGMDA4MzdG
QUEgLyogWm9uZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDQwQUZDQzFBOTUyN0FGMDA4MzdGQUEgLyogWm9uZS5jcHAgKi87IH07CiAJCTE0NDhD
MzAwMThGMzc1NDYwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ4QzJGRjE4RjM3NTQzMDA1MDI4MzkgLyogbWJt
YWxsb2MuY3BwICovOyB9OwpAQCAtNDIsNyArNDEsNiBAQAogCQkxNERENzg5OTE4RjQ4RDRBMDA5
NTA3MDIgLyogQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NDQ2OUU1MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNoZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODlBMThGNDhENEEwMDk1
MDcwMiAvKiBEZWFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OUMx
OEY0OEQ0QTAwOTUwNzAyIC8qIEJ1bXBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1w
QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMTRERDc4QkIxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsQ2h1bmsuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0N0FBQThDMThDRDM2QTcwMDIy
MDFFNCAvKiBTbWFsbENodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTRERDc4QkMxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsTGluZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1MjQ3ODYxOEJD
NzU3QzAwRjgwMDk4IC8qIFNtYWxsTGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OEJEMThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbFBh
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Uy
OUVEMThDQUU5MDUwMEZFOEEwRiAvKiBTbWFsbFBhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDNTE4RjQ4RDc1MDA5NTA3MDIgLyog
QWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDIxQTg3NzE4RUU0NjJBMDBCNERENjggLyogQWxnb3JpdGhtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk1LDcgKzkzLDYgQEAKIAkJMTQz
RTI5RUQxOENBRTkwNTAwRkU4QTBGIC8qIFNtYWxsUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBTbWFsbFBhZ2UuaDsgcGF0aCA9IGJtYWxsb2MvU21hbGxQYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0VGOUFEMUE5RkFCRjYwMDRGNUM3NyAvKiBG
cmVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGcmVlTGlz
dC5jcHA7IHBhdGggPSBibWFsbG9jL0ZyZWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZyZWVMaXN0Lmg7IHBhdGggPSBibWFsbG9jL0ZyZWVM
aXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NDBBRkM4MUE5NTE0MjQwMDgz
N0ZBQSAvKiBTdXBlckNodW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN1
cGVyQ2h1bmsuaDsgcGF0aCA9IGJtYWxsb2MvU3VwZXJDaHVuay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDQwQUZDQTFBOTUyNjExMDA4MzdGQUEgLyogWm9uZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBab25lLmg7IHBhdGggPSBibWFsbG9jL1pvbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MEFGQ0MxQTk1MjdBRjAwODM3RkFBIC8q
IFpvbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWm9uZS5jcHA7
IHBhdGggPSBibWFsbG9jL1pvbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDQ0NjlFNDE3QTQ2QkZFMDBGOUVBMUQgLyogQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IENhY2hlLmNwcDsgcGF0aCA9IGJtYWxs
b2MvQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNh
dGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKQEAgLTEyMyw3ICsxMjAsNiBAQAog
CQkxNDc5RTIxMjE3QTFBMjU1MDA2RDRFOUQgLyogVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2Mv
VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9u
SWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDc5RTIxNDE3QTFBNjNFMDA2
RDRFOUQgLyogVk1BbGxvY2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRp
bmcgPSAwOyBuYW1lID0gVk1BbGxvY2F0ZS5oOyBwYXRoID0gYm1hbGxvYy9WTUFsbG9jYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmll
ciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDdBQUE4ODE4Q0QxN0NFMDAyMjAxRTQgLyog
TGFyZ2VDaHVuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMYXJnZUNodW5r
Lmg7IHBhdGggPSBibWFsbG9jL0xhcmdlQ2h1bmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTQ3QUFBOEMxOENEMzZBNzAwMjIwMUU0IC8qIFNtYWxsQ2h1bmsuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU21hbGxDaHVuay5oOyBwYXRoID0gYm1hbGxvYy9TbWFs
bENodW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODU2NTVFMThBNDNBRjkw
MEVENjk0MiAvKiBCb3VuZGFyeVRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCb3VuZGFyeVRhZy5oOyBwYXRoID0gYm1hbGxvYy9Cb3VuZGFyeVRhZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg1NjU2MDE4QTQzREJBMDBFRDY5NDIgLyogT2JqZWN0VHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPYmplY3RUeXBlLmg7IHBhdGgg
PSBibWFsbG9jL09iamVjdFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4
OTVEOEYxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEVudmlyb25tZW50LmNwcDsgcGF0aCA9IGJtYWxsb2MvRW52
aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA4LDcgKzIwNCw2
IEBACiAJCTE0N0FBQTlBMThDRTVGRDMwMDIyMDFFNCAvKiBoZWFwOiBzbWFsbCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMTQ3QUFBOEMxOENEMzZBNzAw
MjIwMUU0IC8qIFNtYWxsQ2h1bmsuaCAqLywKIAkJCQkxNDUyNDc4NjE4QkM3NTdDMDBGODAwOTgg
LyogU21hbGxMaW5lLmggKi8sCiAJCQkJMTQzRTI5RUQxOENBRTkwNTAwRkU4QTBGIC8qIFNtYWxs
UGFnZS5oICovLAogCQkJKTsKQEAgLTI3MCw3ICsyNjUsNiBAQAogCQkJCTE0MTA1RTgzMThFMTQz
NzQwMDNBMTA2RSAvKiBPYmplY3RUeXBlLmNwcCAqLywKIAkJCQkxNDg1NjU2MDE4QTQzREJBMDBF
RDY5NDIgLyogT2JqZWN0VHlwZS5oICovLAogCQkJCTE0NUY2ODc0MTc5REY4NDEwMEQ2NTU5OCAv
KiBTaXplcy5oICovLAotCQkJCTE0NDBBRkM4MUE5NTE0MjQwMDgzN0ZBQSAvKiBTdXBlckNodW5r
LmggKi8sCiAJCQkJMTQ0RjdCRkIxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5jcHAgKi8sCiAJ
CQkJMTQ0RjdCRkMxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5oICovLAogCQkJCTE0NDBBRkNB
MUE5NTI2MTEwMDgzN0ZBQSAvKiBab25lLmggKi8sCkBAIC0zMzksMTEgKzMzMyw5IEBACiAJCQkJ
MTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0REQ3OEQwMThGNDhENzUwMDk1MDcwMiAvKiBWTUFsbG9jYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNEVCNzlFQTFDN0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFuZ2UuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTE0NDBBRkM5MUE5NTE0MjQwMDgzN0ZBQSAvKiBTdXBlckNodW5rLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDNFRjlCMDFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REQ3OENFMThGNDhENzUwMDk1MDcwMiAvKiBTeXNjYWxsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNERENzhDNjE4RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxNERENzhCQjE4RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxDaHVu
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIElubGlu
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4OTVEOTIxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmly
b25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAwMjc0QTE4Rjg5QzIzMDAxMTVDOTcgLyog
Vk1IZWFwLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDQwICsxMTQsMzMgQEAgdm9pZCogQWxsb2Nh
dG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdAogCiAgICAgc2l6ZV90IG9sZFNpemUgPSAwOwog
ICAgIHN3aXRjaCAob2JqZWN0VHlwZShvYmplY3QpKSB7Ci0gICAgY2FzZSBTbWFsbDogeworICAg
IGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6IHsKICAgICAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE9i
amVjdChvYmplY3QpLnBhZ2UoKS0+c2l6ZUNsYXNzKCk7CiAgICAgICAgIG9sZFNpemUgPSBvYmpl
Y3RTaXplKHNpemVDbGFzcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIExhcmdl
OiB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2Vz
czxIZWFwPjo6bXV0ZXgoKSk7CisgICAgY2FzZSBPYmplY3RUeXBlOjpMYXJnZTogewogICAgICAg
ICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChvYmplY3QpOwogICAgICAgICBvbGRTaXplID0gbGFy
Z2VPYmplY3Quc2l6ZSgpOwogCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdT
aXplID4gc21hbGxNYXgpIHsKLSAgICAgICAgICAgIG5ld1NpemUgPSByb3VuZFVwVG9NdWx0aXBs
ZU9mPGxhcmdlQWxpZ25tZW50PihuZXdTaXplKTsKICAgICAgICAgICAgIGlmIChvbGRTaXplIC0g
bmV3U2l6ZSA+PSBsYXJnZU1pbikgewotICAgICAgICAgICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9i
amVjdCwgTGFyZ2VPYmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQobmV3U2l6ZSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAgICAg
ICAgICAgICBtX2RlYWxsb2NhdG9yLmRlYWxsb2NhdGUoc3BsaXQuc2Vjb25kLmJlZ2luKCkpOwot
ICAgICAgICAgICAgICAgIGxvY2subG9jaygpOworICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICAg
ICAgICAgICAgICBuZXdTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4o
bmV3U2l6ZSk7CisgICAgICAgICAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2Uo
KS0+c2hyaW5rTGFyZ2UobG9jaywgbGFyZ2VPYmplY3QsIG5ld1NpemUpOworICAgICAgICAgICAg
ICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIFhMYXJnZTog
ewotICAgICAgICBCQVNTRVJUKG9iamVjdFR5cGUobnVsbHB0cikgPT0gWExhcmdlKTsKKyAgICBj
YXNlIE9iamVjdFR5cGU6OlhMYXJnZTogeworICAgICAgICBCQVNTRVJUKG9iamVjdFR5cGUobnVs
bHB0cikgPT0gT2JqZWN0VHlwZTo6WExhcmdlKTsKICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBs
b2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwogICAgICAgICBvbGRTaXplID0gUGVyUHJv
Y2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+eExhcmdlU2l6ZShsb2NrLCBvYmplY3QpOwogCi0g
ICAgICAgIGlmIChuZXdTaXplID09IG9sZFNpemUpCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0
OwotCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXplID4gbGFyZ2VNYXgp
IHsKICAgICAgICAgICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnNocmlua1hM
YXJnZShsb2NrLCBSYW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKICAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3Iu
aAkocmV2aXNpb24gMTk4NjU1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CdW1wQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgaW5saW5lIHZvaWQqIEJ1bXBB
bGxvY2F0b3I6OmFsbG9jYXRlKCkKICAgICAtLW1fcmVtYWluaW5nOwogICAgIGNoYXIqIHJlc3Vs
dCA9IG1fcHRyOwogICAgIG1fcHRyICs9IG1fc2l6ZTsKLSAgICBCQVNTRVJUKGlzU21hbGwocmVz
dWx0KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9EZWFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvRGVhbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAj
aW5jbHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGVyUHJv
Y2Vzcy5oIgotI2luY2x1ZGUgIlNtYWxsQ2h1bmsuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgpAQCAtNjAsMTIgKzU5LDYg
QEAgdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogICAgICAgICBwcm9jZXNzT2JqZWN0TG9n
KCk7CiB9CiAKLXZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVMYXJnZSh2b2lkKiBvYmplY3Qp
Ci17Ci0gICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVh
cD46Om11dGV4KCkpOwotICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmRlYWxs
b2NhdGVMYXJnZShsb2NrLCBvYmplY3QpOwotfQotCiB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9j
YXRlWExhcmdlKHZvaWQqIG9iamVjdCkKIHsKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011
dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwpAQCAtOTcsMjAgKzkwLDE1IEBA
IHZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2kKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEJBU1NFUlQob2JqZWN0VHlwZShudWxscHRyKSA9PSBYTGFyZ2UpOwog
ICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaXNTbWFsbChvYmpl
Y3QpKSB7Ci0gICAgICAgIHByb2Nlc3NPYmplY3RMb2coKTsKLSAgICAgICAgbV9vYmplY3RMb2cu
cHVzaChvYmplY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpc1hMYXJnZShv
YmplY3QpKQorICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZVhMYXJnZShvYmplY3QpOwogCi0gICAg
aWYgKCFpc1hMYXJnZShvYmplY3QpKQotICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZUxhcmdlKG9i
amVjdCk7Ci0gICAgCi0gICAgcmV0dXJuIGRlYWxsb2NhdGVYTGFyZ2Uob2JqZWN0KTsKKyAgICBC
QVNTRVJUKG1fb2JqZWN0TG9nLnNpemUoKSA9PSBtX29iamVjdExvZy5jYXBhY2l0eSgpKTsKKyAg
ICBwcm9jZXNzT2JqZWN0TG9nKCk7CisgICAgbV9vYmplY3RMb2cucHVzaChvYmplY3QpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Rl
YWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9j
YXRvci5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAgcHJpdmF0ZToKICAgICBi
b29sIGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7CiAgICAgdm9pZCBkZWFsbG9jYXRlU2xvd0Nh
c2Uodm9pZCopOwogCi0gICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2Uodm9pZCopOwogICAgIHZvaWQg
ZGVhbGxvY2F0ZVhMYXJnZSh2b2lkKik7CiAKICAgICBGaXhlZFZlY3Rvcjx2b2lkKiwgZGVhbGxv
Y2F0b3JMb2dDYXBhY2l0eT4gbV9vYmplY3RMb2c7CkBAIC02MCwxMSArNTksMTAgQEAgcHJpdmF0
ZToKIAogaW5saW5lIGJvb2wgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKiBv
YmplY3QpCiB7Ci0gICAgaWYgKCFpc1NtYWxsKG9iamVjdCkpCisgICAgQkFTU0VSVChpc1hMYXJn
ZShudWxscHRyKSk7CisgICAgaWYgKGlzWExhcmdlKG9iamVjdCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEJBU1NFUlQob2JqZWN0KTsKLQogICAgIGlmIChtX29iamVjdExvZy5zaXpl
KCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAK
ICNpbmNsdWRlICJMYXJnZUNodW5rLmgiCiAjaW5jbHVkZSAiTGFyZ2VPYmplY3QuaCIKICNpbmNs
dWRlICJQZXJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiU21hbGxDaHVuay5oIgogI2luY2x1ZGUgIlNt
YWxsTGluZS5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgPHRocmVhZD4KQEAg
LTg0LDE5ICs4MywzNCBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3Rh
CiB7CiAgICAgd2FpdFVudGlsRmFsc2UobG9jaywgc2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRp
bmdQYWdlcyk7CiAKLSAgICBzY2F2ZW5nZVNtYWxsUGFnZXMobG9jaywgc2xlZXBEdXJhdGlvbik7
CisgICAgbG9jay51bmxvY2soKTsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICAgICAgc2NhdmVu
Z2VTbWFsbFBhZ2VzKGxvY2spOworICAgIH0KKyAgICBsb2NrLmxvY2soKTsKKwogICAgIHNjYXZl
bmdlTGFyZ2VPYmplY3RzKGxvY2ssIHNsZWVwRHVyYXRpb24pOwogICAgIHNjYXZlbmdlWExhcmdl
T2JqZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9uKTsKIAogICAgIHNsZWVwKGxvY2ssIHNsZWVwRHVy
YXRpb24pOwogfQogCi12b2lkIEhlYXA6OnNjYXZlbmdlU21hbGxQYWdlcyhzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiYgbG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVlcER1
cmF0aW9uKQordm9pZCBIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiBsb2NrKQogewotICAgIHdoaWxlICghbV9zbWFsbFBhZ2VzLmlzRW1wdHkoKSkg
ewotICAgICAgICBtX3ZtSGVhcC5kZWFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIG1fc21hbGxQYWdl
cy5wb3AoKSk7Ci0gICAgICAgIHdhaXRVbnRpbEZhbHNlKGxvY2ssIHNsZWVwRHVyYXRpb24sIG1f
aXNBbGxvY2F0aW5nUGFnZXMpOwotICAgIH0KKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3NtYWxs
UGFnZXMucG9wKCk7CisKKyAgICAvLyBUcmFuc2Zvcm0gc21hbGwgb2JqZWN0IHBhZ2UgYmFjayBp
bnRvIGEgbGFyZ2Ugb2JqZWN0LgorICAgIHBhZ2UtPnNldE9iamVjdFR5cGUoT2JqZWN0VHlwZTo6
TGFyZ2UpOworCisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QocGFnZS0+YmVnaW4oKS0+YmVn
aW4oKSk7CisgICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIGxhcmdlT2JqZWN0KTsKK30KKwordm9p
ZCBIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYg
bG9jaykKK3sKKyAgICB3aGlsZSAoIW1fc21hbGxQYWdlcy5pc0VtcHR5KCkpCisgICAgICAgIHNj
YXZlbmdlU21hbGxQYWdlKGxvY2spOwogfQogCiB2b2lkIEhlYXA6OnNjYXZlbmdlTGFyZ2VPYmpl
Y3RzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzIHNsZWVwRHVyYXRpb24pCkBAIC0xNzksMjYgKzE5MywzNCBAQCBTbWFsbFBhZ2Uq
IEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6CiB7CiAgICAgaWYgKCFtX3NtYWxsUGFnZXNX
aXRoRnJlZUxpbmVzW3NpemVDbGFzc10uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9zbWFs
bFBhZ2VzV2l0aEZyZWVMaW5lc1tzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgCisgICAgaWYg
KCFtX3NtYWxsUGFnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNtYWxsUGFnZSogcGFnZSA9IG1f
c21hbGxQYWdlcy5wb3AoKTsKKyAgICAgICAgcGFnZS0+c2V0U2l6ZUNsYXNzKHNpemVDbGFzcyk7
CisgICAgICAgIHJldHVybiBwYWdlOworICAgIH0KIAotICAgIFNtYWxsUGFnZSogcGFnZSA9IFt0
aGlzLCAmbG9ja10oKSB7Ci0gICAgICAgIGlmICghbV9zbWFsbFBhZ2VzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBtX3NtYWxsUGFnZXMucG9wKCk7CisgICAgc2l6ZV90IHVuYWxpZ25l
ZFNpemUgPSBsYXJnZU1pbiArIHZtUGFnZVNpemUgLSBsYXJnZUFsaWdubWVudCArIHZtUGFnZVNp
emU7CisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBhbGxvY2F0ZUxhcmdlKGxvY2ssIHZt
UGFnZVNpemUsIHZtUGFnZVNpemUsIHVuYWxpZ25lZFNpemUpOwogCi0gICAgICAgIG1faXNBbGxv
Y2F0aW5nUGFnZXMgPSB0cnVlOwotICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3ZtSGVhcC5h
bGxvY2F0ZVNtYWxsUGFnZShsb2NrKTsKLSAgICAgICAgcmV0dXJuIHBhZ2U7Ci0gICAgfSgpOwor
ICAgIC8vIFRyYW5zZm9ybSBvdXIgbGFyZ2Ugb2JqZWN0IGludG8gYSBzbWFsbCBvYmplY3QgcGFn
ZS4gV2UgZGVyZWYgaGVyZQorICAgIC8vIGJlY2F1c2Ugb3VyIHNtYWxsIG9iamVjdHMgd2lsbCBr
ZWVwIHRoZWlyIG93biByZWZjb3VudHMgb24gdGhlIGxpbmUuCisgICAgT2JqZWN0IG9iamVjdChs
YXJnZU9iamVjdC5iZWdpbigpKTsKKyAgICBvYmplY3QubGluZSgpLT5kZXJlZihsb2NrKTsKKyAg
ICBvYmplY3QucGFnZSgpLT5zZXRPYmplY3RUeXBlKE9iamVjdFR5cGU6OlNtYWxsKTsKIAotICAg
IHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOwotICAgIHJldHVybiBwYWdlOworICAgIG9i
amVjdC5wYWdlKCktPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOworICAgIHJldHVybiBvYmplY3Qu
cGFnZSgpOwogfQogCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYgbG9jaywgT2JqZWN0IG9iamVjdCkKIHsKICAgICBCQVNTRVJUKCFv
YmplY3QubGluZSgpLT5yZWZDb3VudChsb2NrKSk7CiAgICAgU21hbGxQYWdlKiBwYWdlID0gb2Jq
ZWN0LnBhZ2UoKTsKLSAgICBwYWdlLT5kZXJlZihsb2NrKTsKKyAgICBpZiAocGFnZS0+b2JqZWN0
VHlwZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKQorICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZUxh
cmdlKGxvY2ssIExhcmdlT2JqZWN0KG9iamVjdC5iZWdpbigpKSk7CiAKKyAgICBwYWdlLT5kZXJl
Zihsb2NrKTsKICAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSkgewogICAgICAgICBw
YWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7CiAgICAgICAgIG1fc21hbGxQYWdlc1dp
dGhGcmVlTGluZXNbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CkBAIC0yMTUsMTkgKzIz
NywyMiBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrCiAgICAgbV9z
Y2F2ZW5nZXIucnVuKCk7CiB9CiAKLWlubGluZSBMYXJnZU9iamVjdCYgSGVhcDo6c3BsaXRBbmRB
bGxvY2F0ZShMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBzaXplKQoraW5saW5lIExh
cmdlT2JqZWN0JiBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCwgc2l6ZV90IHNpemUpCiB7CiAg
ICAgQkFTU0VSVChsYXJnZU9iamVjdC5pc0ZyZWUoKSk7CiAKICAgICBMYXJnZU9iamVjdCBuZXh0
TGFyZ2VPYmplY3Q7CiAKLSAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+IGxhcmdl
TWluKSB7CisgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPj0gbGFyZ2VNaW4pIHsK
ICAgICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gc3BsaXQgPSBsYXJn
ZU9iamVjdC5zcGxpdChzaXplKTsKICAgICAgICAgbGFyZ2VPYmplY3QgPSBzcGxpdC5maXJzdDsK
ICAgICAgICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwogICAgIH0KIAogICAgIGxh
cmdlT2JqZWN0LnNldEZyZWUoZmFsc2UpOworICAgIE9iamVjdCBvYmplY3QobGFyZ2VPYmplY3Qu
YmVnaW4oKSk7CisgICAgb2JqZWN0LmxpbmUoKS0+cmVmKGxvY2spOworICAgIEJBU1NFUlQob2Jq
ZWN0LnBhZ2UoKS0+b2JqZWN0VHlwZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKTsKIAogICAgIGlm
IChuZXh0TGFyZ2VPYmplY3QpIHsKICAgICAgICAgQkFTU0VSVCghbmV4dExhcmdlT2JqZWN0Lm5l
eHRDYW5NZXJnZSgpKTsKQEAgLTIzNyw3ICsyNjIsNyBAQCBpbmxpbmUgTGFyZ2VPYmplY3QmIEhl
YXA6OnNwbGl0QW5kQWxsb2NhCiAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwogfQogCi1pbmxpbmUg
TGFyZ2VPYmplY3QmIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmIGxhcmdlT2Jq
ZWN0LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK2lubGluZSBMYXJnZU9iamVjdCYg
SGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2Nr
LCBMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KQogewogICAgIExhcmdlT2JqZWN0IHByZXZMYXJnZU9iamVjdDsKICAgICBMYXJnZU9iamVjdCBu
ZXh0TGFyZ2VPYmplY3Q7CkBAIC0yNTIsMTMgKzI3NywxNiBAQCBpbmxpbmUgTGFyZ2VPYmplY3Qm
IEhlYXA6OnNwbGl0QW5kQWxsb2NhCiAKICAgICBCQVNTRVJUKGxhcmdlT2JqZWN0LmlzRnJlZSgp
KTsKIAotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBzaXplID4gbGFyZ2VNaW4pIHsKKyAg
ICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+PSBsYXJnZU1pbikgewogICAgICAgICBz
dGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNw
bGl0KHNpemUpOwogICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OwogICAgICAgICBu
ZXh0TGFyZ2VPYmplY3QgPSBzcGxpdC5zZWNvbmQ7CiAgICAgfQogCiAgICAgbGFyZ2VPYmplY3Qu
c2V0RnJlZShmYWxzZSk7CisgICAgT2JqZWN0IG9iamVjdChsYXJnZU9iamVjdC5iZWdpbigpKTsK
KyAgICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7CisgICAgQkFTU0VSVChvYmplY3QucGFnZSgp
LT5vYmplY3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2UpOwogCiAgICAgaWYgKHByZXZMYXJn
ZU9iamVjdCkgewogICAgICAgICBMYXJnZU9iamVjdCBtZXJnZWQgPSBwcmV2TGFyZ2VPYmplY3Qu
bWVyZ2UoKTsKQEAgLTI3OCw2ICszMDYsOSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyCiAgICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKICAgICBCQVNTRVJU
KHNpemUgPj0gbGFyZ2VNaW4pOwogICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBs
ZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKSk7CisgICAgCisgICAgaWYgKHNpemUgPD0gdm1QYWdl
U2l6ZSkKKyAgICAgICAgc2NhdmVuZ2VTbWFsbFBhZ2VzKGxvY2spOwogCiAgICAgTGFyZ2VPYmpl
Y3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOwogICAgIGlmICghbGFy
Z2VPYmplY3QpCkBAIC0yOTAsNyArMzIxLDcgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShz
dGQ6OmxvY2tfZ3VhcgogICAgICAgICBsYXJnZU9iamVjdC5zZXRWTVN0YXRlKFZNU3RhdGU6OlBo
eXNpY2FsKTsKICAgICB9CiAKLSAgICBsYXJnZU9iamVjdCA9IHNwbGl0QW5kQWxsb2NhdGUobGFy
Z2VPYmplY3QsIHNpemUpOworICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShsb2Nr
LCBsYXJnZU9iamVjdCwgc2l6ZSk7CiAKICAgICByZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsK
IH0KQEAgLTMwNyw2ICszMzgsOSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9j
a19ndWFyCiAgICAgQkFTU0VSVChhbGlnbm1lbnQgPj0gbGFyZ2VBbGlnbm1lbnQpOwogICAgIEJB
U1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCisgICAgaWYgKHNpemUgPD0gdm1QYWdl
U2l6ZSkKKyAgICAgICAgc2NhdmVuZ2VTbWFsbFBhZ2VzKGxvY2spOworCiAgICAgTGFyZ2VPYmpl
Y3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5h
bGlnbmVkU2l6ZSk7CiAgICAgaWYgKCFsYXJnZU9iamVjdCkKICAgICAgICAgbGFyZ2VPYmplY3Qg
PSBtX3ZtSGVhcC5hbGxvY2F0ZUxhcmdlT2JqZWN0KGxvY2ssIGFsaWdubWVudCwgc2l6ZSwgdW5h
bGlnbmVkU2l6ZSk7CkBAIC0zMTgsMTQgKzM1MiwyMSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxh
cmdlKHN0ZDo6bG9ja19ndWFyCiAgICAgICAgIGxhcmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0
ZTo6UGh5c2ljYWwpOwogICAgIH0KIAotICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0
ZShsYXJnZU9iamVjdCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICBsYXJnZU9iamVjdCA9IHNwbGl0
QW5kQWxsb2NhdGUobG9jaywgbGFyZ2VPYmplY3QsIGFsaWdubWVudCwgc2l6ZSk7CiAKICAgICBy
ZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsKIH0KIAordm9pZCBIZWFwOjpzaHJpbmtMYXJnZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBMYXJnZU9iamVjdCYgbGFyZ2VPYmpl
Y3QsIHNpemVfdCBuZXdTaXplKQoreworICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VP
YmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQobmV3U2l6ZSk7CisgICAgZGVhbGxvY2F0
ZUxhcmdlKGxvY2ssIHNwbGl0LnNlY29uZCk7Cit9CisKIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxh
cmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9iamVjdCYgbGFy
Z2VPYmplY3QpCiB7CiAgICAgQkFTU0VSVCghbGFyZ2VPYmplY3QuaXNGcmVlKCkpOworICAgIEJB
U1NFUlQoT2JqZWN0KGxhcmdlT2JqZWN0LmJlZ2luKCkpLnBhZ2UoKS0+b2JqZWN0VHlwZSgpID09
IE9iamVjdFR5cGU6OkxhcmdlKTsKICAgICBsYXJnZU9iamVjdC5zZXRGcmVlKHRydWUpOwogICAg
IAogICAgIExhcmdlT2JqZWN0IG1lcmdlZCA9IGxhcmdlT2JqZWN0Lm1lcmdlKCk7CkBAIC0zMzMs
MTIgKzM3NCw2IEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWEKICAg
ICBtX3NjYXZlbmdlci5ydW4oKTsKIH0KIAotdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgdm9pZCogb2JqZWN0KQotewotICAgIExh
cmdlT2JqZWN0IGxhcmdlT2JqZWN0KG9iamVjdCk7Ci0gICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ss
IGxhcmdlT2JqZWN0KTsKLX0KLQogdm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUp
CiB7CiAgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50
LCBzaXplKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NiBAQAogI2luY2x1ZGUgIk11dGV4LmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2VncmVnYXRlZEZyZWVMaXN0LmgiCi0jaW5jbHVkZSAiU21hbGxDaHVuay5oIgogI2luY2x1ZGUg
IlNtYWxsTGluZS5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgIlZNSGVhcC5o
IgpAQCAtNTksNyArNTgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRl
TGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCwgc2l6ZV90IHVuYWxpZ25lZFNpemUpOwotICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisgICAgdm9pZCBzaHJpbmtMYXJn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTGFyZ2VPYmplY3QmLCBzaXplX3QpOwog
CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYs
IHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CkBAIC04MCw4ICs3OSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mLCBPYmplY3QpOwogICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9iamVjdCYpOwogCi0gICAgTGFyZ2VPYmpl
Y3QmIHNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmLCBzaXplX3QpOwotICAgIExhcmdlT2Jq
ZWN0JiBzcGxpdEFuZEFsbG9jYXRlKExhcmdlT2JqZWN0Jiwgc2l6ZV90LCBzaXplX3QpOworICAg
IExhcmdlT2JqZWN0JiBzcGxpdEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCBMYXJnZU9iamVjdCYsIHNpemVfdCk7CisgICAgTGFyZ2VPYmplY3QmIHNwbGl0QW5kQWxs
b2NhdGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0Jiwgc2l6ZV90
LCBzaXplX3QpOwogICAgIHZvaWQgbWVyZ2VMYXJnZShCZWdpblRhZyomLCBFbmRUYWcqJiwgUmFu
Z2UmKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VMZWZ0KEVuZFRhZyomLCBCZWdpblRhZyomLCBSYW5n
ZSYsIGJvb2wmIGluVk1IZWFwKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VSaWdodChFbmRUYWcqJiwg
QmVnaW5UYWcqJiwgUmFuZ2UmLCBib29sJiBpblZNSGVhcCk7CkBAIC04OSw3ICs4OCw4IEBAIHBy
aXZhdGU6CiAgICAgWExhcmdlUmFuZ2Ugc3BsaXRBbmRBbGxvY2F0ZShYTGFyZ2VSYW5nZSYsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAKICAgICB2b2lkIGNvbmN1cnJlbnRTY2F2ZW5nZSgp
OwotICAgIHZvaWQgc2NhdmVuZ2VTbWFsbFBhZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CisgICAgdm9pZCBzY2F2ZW5nZVNtYWxs
UGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CisgICAgdm9pZCBzY2F2ZW5nZVNt
YWxsUGFnZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIHZvaWQgc2NhdmVu
Z2VMYXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzKTsKICAgICB2b2lkIHNjYXZlbmdlWExhcmdlT2JqZWN0cyhzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlQ2h1bmsuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlQ2h1bmsuaAkocmV2aXNpb24gMTk4NjU1KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZUNodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDExIEBACiAKICNpbmNsdWRlICJCZWdpblRhZy5oIgogI2luY2x1ZGUgIkVuZFRhZy5o
IgorI2luY2x1ZGUgIk9iamVjdC5oIgogI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKICNpbmNsdWRl
ICJTaXplcy5oIgorI2luY2x1ZGUgIlNtYWxsTGluZS5oIgorI2luY2x1ZGUgIlNtYWxsUGFnZS5o
IgogI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKICNpbmNsdWRlIDxhcnJheT4KIApAQCAtMzcsMTIg
KzQwLDI1IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgTGFyZ2VDaHVuayB7CiBwdWJs
aWM6Ci0gICAgTGFyZ2VDaHVuaygpOwogICAgIHN0YXRpYyBMYXJnZUNodW5rKiBnZXQodm9pZCop
OwogCiAgICAgc3RhdGljIEJlZ2luVGFnKiBiZWdpblRhZyh2b2lkKik7CiAgICAgc3RhdGljIEVu
ZFRhZyogZW5kVGFnKHZvaWQqLCBzaXplX3QpOwogCisgICAgTGFyZ2VDaHVuayhzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+Jik7CisKKyAgICBzaXplX3Qgb2Zmc2V0KHZvaWQqKTsKKworICAg
IHZvaWQqIG9iamVjdChzaXplX3Qgb2Zmc2V0KTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2Uoc2l6ZV90
IG9mZnNldCk7CisgICAgU21hbGxMaW5lKiBsaW5lKHNpemVfdCBvZmZzZXQpOworCisgICAgU21h
bGxQYWdlKiBwYWdlQmVnaW4oKSB7IHJldHVybiBPYmplY3QobV9tZW1vcnkpLnBhZ2UoKTsgfQor
ICAgIFNtYWxsUGFnZSogcGFnZUVuZCgpIHsgcmV0dXJuIG1fcGFnZXMuZW5kKCk7IH0KKyAgICAK
KyAgICBTbWFsbExpbmUqIGxpbmVzKCkgeyByZXR1cm4gbV9saW5lcy5iZWdpbigpOyB9CisgICAg
U21hbGxQYWdlKiBwYWdlcygpIHsgcmV0dXJuIG1fcGFnZXMuYmVnaW4oKTsgfQorCiAgICAgY2hh
ciogYmVnaW4oKSB7IHJldHVybiBtX21lbW9yeTsgfQogICAgIGNoYXIqIGVuZCgpIHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgbGFyZ2VDaHVua1NpemU7IH0KIApAQCAt
NjQsMTQgKzgwLDE5IEBAIHByaXZhdGU6CiAgICAgLy8KICAgICAvLyBXZSB1c2UgdGhlIFgncyBm
b3IgYm91bmRhcnkgdGFncyBhbmQgdGhlIE8ncyBmb3IgZWRnZSBzZW50aW5lbHMuCiAKKyAgICBz
dGQ6OmFycmF5PFNtYWxsTGluZSwgbGFyZ2VDaHVua1NpemUgLyBzbWFsbExpbmVTaXplPiBtX2xp
bmVzOworICAgIHN0ZDo6YXJyYXk8U21hbGxQYWdlLCBsYXJnZUNodW5rU2l6ZSAvIHZtUGFnZVNp
emU+IG1fcGFnZXM7CiAgICAgc3RkOjphcnJheTxCb3VuZGFyeVRhZywgYm91bmRhcnlUYWdDb3Vu
dD4gbV9ib3VuZGFyeVRhZ3M7Ci0gICAgY2hhciBtX21lbW9yeVtdIF9fYXR0cmlidXRlX18oKGFs
aWduZWQobGFyZ2VBbGlnbm1lbnQrMCkpKTsKKyAgICBjaGFyIG1fbWVtb3J5W10gX19hdHRyaWJ1
dGVfXygoYWxpZ25lZCgyICogc21hbGxNYXggKyAwKSkpOwogfTsKIAogc3RhdGljX2Fzc2VydChs
YXJnZUNodW5rTWV0YWRhdGFTaXplID09IHNpemVvZihMYXJnZUNodW5rKSwgIk91ciBsYXJnZUNo
dW5rTWV0YWRhdGFTaXplIG1hdGggaW4gU2l6ZXMuaCBpcyB3cm9uZyIpOwogc3RhdGljX2Fzc2Vy
dChsYXJnZUNodW5rTWV0YWRhdGFTaXplICsgbGFyZ2VPYmplY3RNYXggPT0gbGFyZ2VDaHVua1Np
emUsICJsYXJnZU9iamVjdE1heCBpcyB0b28gc21hbGwgb3IgdG9vIGJpZyIpOworc3RhdGljX2Fz
c2VydCgKKyAgICBzaXplb2YoTGFyZ2VDaHVuaykgJSB2bVBhZ2VTaXplICsgMiAqIHNtYWxsTWF4
IDw9IHZtUGFnZVNpemUsCisgICAgInRoZSBmaXJzdCBwYWdlIG9mIG9iamVjdCBtZW1vcnkgaW4g
YSBzbWFsbCBjaHVuayBtdXN0IGJlIGFibGUgdG8gYWxsb2NhdGUgc21hbGxNYXgiKTsKIAotaW5s
aW5lIExhcmdlQ2h1bms6OkxhcmdlQ2h1bmsoKQoraW5saW5lIExhcmdlQ2h1bms6OkxhcmdlQ2h1
bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKIHsKICAgICBSYW5nZSByYW5n
ZShiZWdpbigpLCBlbmQoKSAtIGJlZ2luKCkpOwogICAgIEJBU1NFUlQocmFuZ2Uuc2l6ZSgpID09
IGxhcmdlT2JqZWN0TWF4KTsKQEAgLTk3LDExICsxMTgsMTcgQEAgaW5saW5lIExhcmdlQ2h1bms6
OkxhcmdlQ2h1bmsoKQogICAgIEJBU1NFUlQocmlnaHRTZW50aW5lbCA+PSBtX2JvdW5kYXJ5VGFn
cy5iZWdpbigpKTsKICAgICBCQVNTRVJUKHJpZ2h0U2VudGluZWwgPCBtX2JvdW5kYXJ5VGFncy5l
bmQoKSk7CiAgICAgcmlnaHRTZW50aW5lbC0+aW5pdFNlbnRpbmVsKCk7CisKKyAgICAvLyBUcmFj
ayB0aGUgbWVtb3J5IHVzZWQgZm9yIG1ldGFkYXRhIGJ5IGFsbG9jYXRpbmcgaW1hZ2luYXJ5IG9i
amVjdHMuCisgICAgZm9yIChjaGFyKiBpdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
OyBpdCA8IG1fbWVtb3J5OyBpdCArPSBzbWFsbExpbmVTaXplKSB7CisgICAgICAgIE9iamVjdCBv
YmplY3QoaXQpOworICAgICAgICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7CisgICAgICAgIG9i
amVjdC5wYWdlKCktPnJlZihsb2NrKTsKKyAgICB9CiB9CiAKIGlubGluZSBMYXJnZUNodW5rKiBM
YXJnZUNodW5rOjpnZXQodm9pZCogb2JqZWN0KQogewotICAgIEJBU1NFUlQoIWlzU21hbGwob2Jq
ZWN0KSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExhcmdlQ2h1bmsqPihtYXNrKG9iamVjdCwg
bGFyZ2VDaHVua01hc2spKTsKIH0KIApAQCAtMTE0LDggKzE0MSw2IEBAIGlubGluZSBCZWdpblRh
ZyogTGFyZ2VDaHVuazo6YmVnaW5UYWcodm8KIAogaW5saW5lIEVuZFRhZyogTGFyZ2VDaHVuazo6
ZW5kVGFnKHZvaWQqIG9iamVjdCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgQkFTU0VSVCghaXNTbWFs
bChvYmplY3QpKTsKLQogICAgIExhcmdlQ2h1bmsqIGNodW5rID0gZ2V0KG9iamVjdCk7CiAgICAg
Y2hhciogZW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgKyBzaXplOwogCkBAIC0xMjcs
NiArMTUyLDg5IEBAIGlubGluZSBFbmRUYWcqIExhcmdlQ2h1bms6OmVuZFRhZyh2b2lkKiAKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RW5kVGFnKj4oJmNodW5rLT5tX2JvdW5kYXJ5VGFnc1tib3Vu
ZGFyeVRhZ051bWJlcl0pOwogfQogCitpbmxpbmUgc2l6ZV90IExhcmdlQ2h1bms6Om9mZnNldCh2
b2lkKiBvYmplY3QpCit7CisgICAgQkFTU0VSVChvYmplY3QgPj0gdGhpcyk7CisgICAgQkFTU0VS
VChvYmplY3QgPCByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIGxhcmdlQ2h1bmtTaXpl
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSByZWludGVycHJldF9j
YXN0PGNoYXIqPih0aGlzKTsKK30KKworaW5saW5lIHZvaWQqIExhcmdlQ2h1bms6Om9iamVjdChz
aXplX3Qgb2Zmc2V0KQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlz
KSArIG9mZnNldDsKK30KKworaW5saW5lIFNtYWxsUGFnZSogTGFyZ2VDaHVuazo6cGFnZShzaXpl
X3Qgb2Zmc2V0KQoreworICAgIHNpemVfdCBwYWdlTnVtYmVyID0gb2Zmc2V0IC8gdm1QYWdlU2l6
ZTsKKyAgICByZXR1cm4gJm1fcGFnZXNbcGFnZU51bWJlcl07Cit9CisKK2lubGluZSBTbWFsbExp
bmUqIExhcmdlQ2h1bms6OmxpbmUoc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzaXplX3QgbGluZU51
bWJlciA9IG9mZnNldCAvIHNtYWxsTGluZVNpemU7CisgICAgcmV0dXJuICZtX2xpbmVzW2xpbmVO
dW1iZXJdOworfQorCitpbmxpbmUgY2hhciogU21hbGxMaW5lOjpiZWdpbigpCit7CisgICAgTGFy
Z2VDaHVuayogY2h1bmsgPSBMYXJnZUNodW5rOjpnZXQodGhpcyk7CisgICAgc2l6ZV90IGxpbmVO
dW1iZXIgPSB0aGlzIC0gY2h1bmstPmxpbmVzKCk7CisgICAgc2l6ZV90IG9mZnNldCA9IGxpbmVO
dW1iZXIgKiBzbWFsbExpbmVTaXplOworICAgIHJldHVybiAmcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oY2h1bmspW29mZnNldF07Cit9CisKK2lubGluZSBjaGFyKiBTbWFsbExpbmU6OmVuZCgpCit7
CisgICAgcmV0dXJuIGJlZ2luKCkgKyBzbWFsbExpbmVTaXplOworfQorCitpbmxpbmUgU21hbGxM
aW5lKiBTbWFsbFBhZ2U6OmJlZ2luKCkKK3sKKyAgICBMYXJnZUNodW5rKiBjaHVuayA9IExhcmdl
Q2h1bms6OmdldCh0aGlzKTsKKyAgICBzaXplX3QgcGFnZU51bWJlciA9IHRoaXMgLSBjaHVuay0+
cGFnZXMoKTsKKyAgICBzaXplX3QgbGluZU51bWJlciA9IHBhZ2VOdW1iZXIgKiBzbWFsbExpbmVD
b3VudDsKKyAgICByZXR1cm4gJmNodW5rLT5saW5lcygpW2xpbmVOdW1iZXJdOworfQorCitpbmxp
bmUgU21hbGxMaW5lKiBTbWFsbFBhZ2U6OmVuZCgpCit7CisgICAgcmV0dXJuIGJlZ2luKCkgKyBz
bWFsbExpbmVDb3VudDsKK30KKworaW5saW5lIE9iamVjdDo6T2JqZWN0KHZvaWQqIG9iamVjdCkK
KyAgICA6IG1fY2h1bmsoTGFyZ2VDaHVuazo6Z2V0KG9iamVjdCkpCisgICAgLCBtX29mZnNldCht
X2NodW5rLT5vZmZzZXQob2JqZWN0KSkKK3sKK30KKworaW5saW5lIE9iamVjdDo6T2JqZWN0KExh
cmdlQ2h1bmsqIGNodW5rLCB2b2lkKiBvYmplY3QpCisgICAgOiBtX2NodW5rKGNodW5rKQorICAg
ICwgbV9vZmZzZXQobV9jaHVuay0+b2Zmc2V0KG9iamVjdCkpCit7CisgICAgQkFTU0VSVChjaHVu
ayA9PSBMYXJnZUNodW5rOjpnZXQob2JqZWN0KSk7Cit9CisKK2lubGluZSB2b2lkKiBPYmplY3Q6
OmJlZ2luKCkKK3sKKyAgICByZXR1cm4gbV9jaHVuay0+b2JqZWN0KG1fb2Zmc2V0KTsKK30KKwor
aW5saW5lIHZvaWQqIE9iamVjdDo6cGFnZUJlZ2luKCkKK3sKKyAgICByZXR1cm4gbV9jaHVuay0+
b2JqZWN0KHJvdW5kRG93blRvTXVsdGlwbGVPZih2bVBhZ2VTaXplLCBtX29mZnNldCkpOworfQor
CitpbmxpbmUgU21hbGxMaW5lKiBPYmplY3Q6OmxpbmUoKQoreworICAgIHJldHVybiBtX2NodW5r
LT5saW5lKG1fb2Zmc2V0KTsKK30KKworaW5saW5lIFNtYWxsUGFnZSogT2JqZWN0OjpwYWdlKCkK
K3sKKyAgICByZXR1cm4gbV9jaHVuay0+cGFnZShtX29mZnNldCk7Cit9CisKIH07IC8vIG5hbWVz
cGFjZSBibWFsbG9jCiAKICNlbmRpZiAvLyBMYXJnZUNodW5rCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
T2JqZWN0LmgJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIyICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgYm1h
bGxvYyB7CiAKLWNsYXNzIFNtYWxsQ2h1bms7CitjbGFzcyBMYXJnZUNodW5rOwogY2xhc3MgU21h
bGxMaW5lOwogY2xhc3MgU21hbGxQYWdlOwogCiBjbGFzcyBPYmplY3QgewogcHVibGljOgogICAg
IE9iamVjdCh2b2lkKik7Ci0gICAgT2JqZWN0KFNtYWxsQ2h1bmsqLCB2b2lkKik7CisgICAgT2Jq
ZWN0KExhcmdlQ2h1bmsqLCB2b2lkKik7CiAgICAgCi0gICAgU21hbGxDaHVuayogY2h1bmsoKSB7
IHJldHVybiBtX2NodW5rOyB9CisgICAgTGFyZ2VDaHVuayogY2h1bmsoKSB7IHJldHVybiBtX2No
dW5rOyB9CisgICAgdm9pZCogYmVnaW4oKTsKKyAgICB2b2lkKiBwYWdlQmVnaW4oKTsKIAogICAg
IFNtYWxsTGluZSogbGluZSgpOwogICAgIFNtYWxsUGFnZSogcGFnZSgpOwogCiBwcml2YXRlOgot
ICAgIFNtYWxsQ2h1bmsqIG1fY2h1bms7CisgICAgTGFyZ2VDaHVuayogbV9jaHVuazsKICAgICBz
aXplX3QgbV9vZmZzZXQ7CiB9OwogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVj
dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlw
ZS5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIwICsyMywxOSBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2luY2x1ZGUgIkxhcmdlQ2h1bmsuaCIKICNpbmNsdWRlICJPYmplY3RUeXBl
LmgiCiAKKyNpbmNsdWRlICJMYXJnZUNodW5rLmgiCisjaW5jbHVkZSAiT2JqZWN0LmgiCisKIG5h
bWVzcGFjZSBibWFsbG9jIHsKIAogT2JqZWN0VHlwZSBvYmplY3RUeXBlKHZvaWQqIG9iamVjdCkK
IHsKLSAgICBpZiAoaXNTbWFsbChvYmplY3QpKQotICAgICAgICByZXR1cm4gU21hbGw7Ci0gICAg
Ci0gICAgaWYgKCFpc1hMYXJnZShvYmplY3QpKQotICAgICAgICByZXR1cm4gTGFyZ2U7CisgICAg
aWYgKGlzWExhcmdlKG9iamVjdCkpCisgICAgICAgIHJldHVybiBPYmplY3RUeXBlOjpYTGFyZ2U7
CiAgICAgCi0gICAgcmV0dXJuIFhMYXJnZTsKKyAgICByZXR1cm4gT2JqZWN0KG9iamVjdCkucGFn
ZSgpLT5vYmplY3RUeXBlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMx
LDEwIEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAotZW51bSBPYmplY3RUeXBlIHsgU21hbGws
IExhcmdlLCBYTGFyZ2UgfTsKK2VudW0gY2xhc3MgT2JqZWN0VHlwZSA6IHVuc2lnbmVkIGNoYXIg
eyBTbWFsbCwgTGFyZ2UsIFhMYXJnZSB9OwogCiBPYmplY3RUeXBlIG9iamVjdFR5cGUodm9pZCop
OwogCi1pbmxpbmUgYm9vbCBpc1NtYWxsKHZvaWQqIG9iamVjdCkKLXsKLSAgICByZXR1cm4gdGVz
dChvYmplY3QsIHNtYWxsTWFzayk7Ci19Ci0KIGlubGluZSBib29sIGlzWExhcmdlKHZvaWQqIG9i
amVjdCkKIHsKICAgICByZXR1cm4gIXRlc3Qob2JqZWN0LCB+eExhcmdlTWFzayk7CkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgJKHJldmlzaW9uIDE5
ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBGcmVlTGlzdCYgc2Vs
ZWN0KHNpemVfdCk7CiAKICAgICBWTVN0YXRlOjpIYXNQaHlzaWNhbCBtX2hhc1BoeXNpY2FsOwot
ICAgIHN0ZDo6YXJyYXk8RnJlZUxpc3QsIDE1PiBtX2ZyZWVMaXN0czsKKyAgICBzdGQ6OmFycmF5
PEZyZWVMaXN0LCAxNj4gbV9mcmVlTGlzdHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9j
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDQwICs1MywyOCBA
QCBuYW1lc3BhY2UgU2l6ZXMgewogI2VuZGlmCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB2bVBh
Z2VNYXNrID0gfih2bVBhZ2VTaXplIC0gMSk7CiAgICAgCi0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzdXBlckNodW5rU2l6ZSA9IDIgKiBNQjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1cGVy
Q2h1bmtNYXNrID0gfihzdXBlckNodW5rU2l6ZSAtIDEpOwotCi0gICAgc3RhdGljIGNvbnN0IHNp
emVfdCBzbWFsbENodW5rU2l6ZSA9IHN1cGVyQ2h1bmtTaXplIC8gMjsKLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IHNtYWxsQ2h1bmtPZmZzZXQgPSBzdXBlckNodW5rU2l6ZSAvIDI7Ci0gICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzbWFsbENodW5rTWFzayA9IH4oc21hbGxDaHVua1NpemUgLSAxdWwp
OwotCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVTaXplID0gMjU2OwogICAgIHN0
YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5lQ291bnQgPSB2bVBhZ2VTaXplIC8gc21hbGxMaW5l
U2l6ZTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxNYXggPSAxICoga0I7CiAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBtYXNrU2l6ZUNsYXNzTWF4ID0gNTEyOwogCi0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBsYXJnZUNodW5rU2l6ZSA9IHN1cGVyQ2h1bmtTaXplIC8gMjsKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQ2h1bmtPZmZzZXQgPSAwOworICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgbGFyZ2VDaHVua1NpemUgPSAyICogTUI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBsYXJnZUNodW5rTWFzayA9IH4obGFyZ2VDaHVua1NpemUgLSAxdWwpOwogCiAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBsYXJnZUFsaWdubWVudCA9IDY0OwogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgbGFyZ2VNaW4gPSBzbWFsbE1heDsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQ2h1
bmtNZXRhZGF0YVNpemUgPSA0ICoga0I7IC8vIHNpemVvZihMYXJnZUNodW5rKQorICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgbGFyZ2VDaHVua01ldGFkYXRhU2l6ZSA9IDI4ICoga0I7IC8vIHNpemVv
ZihMYXJnZUNodW5rKQogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VPYmplY3RNYXggPSBs
YXJnZUNodW5rU2l6ZSAtIGxhcmdlQ2h1bmtNZXRhZGF0YVNpemU7CiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBsYXJnZU1heCA9IGxhcmdlT2JqZWN0TWF4IC8gMjsKIAotICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgeExhcmdlQWxpZ25tZW50ID0gc3VwZXJDaHVua1NpemU7CisgICAgc3RhdGljIGNv
bnN0IHNpemVfdCB4TGFyZ2VBbGlnbm1lbnQgPSBsYXJnZUNodW5rU2l6ZTsKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHhMYXJnZU1hc2sgPSB+KHhMYXJnZUFsaWdubWVudCAtIDEpOwogICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgeExhcmdlTWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSAtIHhMYXJnZUFsaWdubWVudDsgLy8gTWFrZSBzdXJlIHRoYXQgcm91bmRpbmcgdXAg
dG8geExhcmdlQWxpZ25tZW50IGRvZXMgbm90IG92ZXJmbG93LgogCiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBmcmVlTGlzdFNlYXJjaERlcHRoID0gMTY7CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBmcmVlTGlzdEdyb3dGYWN0b3IgPSAyOwogCi0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCB0
eXBlTWFzayA9IChzdXBlckNodW5rU2l6ZSAtIDEpICYgfigoc3VwZXJDaHVua1NpemUgLyAyKSAt
IDEpOyAvLyAyIHRhZ2dhYmxlIGNodW5rcwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbGFy
Z2VNYXNrID0gdHlwZU1hc2sgJiAoc3VwZXJDaHVua1NpemUgKyBsYXJnZUNodW5rT2Zmc2V0KTsK
LSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHNtYWxsTWFzayA9IHR5cGVNYXNrICYgKHN1cGVy
Q2h1bmtTaXplICsgc21hbGxDaHVua09mZnNldCk7Ci0KICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHkgPSAyNTY7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBi
dW1wUmFuZ2VDYWNoZUNhcGFjaXR5ID0gMzsKICAgICAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU21hbGxDaHVuay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
U21hbGxDaHVuay5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1NtYWxsQ2h1bmsuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU21hbGxD
aHVua19oCi0jZGVmaW5lIFNtYWxsQ2h1bmtfaAotCi0jaW5jbHVkZSAiT2JqZWN0LmgiCi0jaW5j
bHVkZSAiU2l6ZXMuaCIKLSNpbmNsdWRlICJTbWFsbExpbmUuaCIKLSNpbmNsdWRlICJTbWFsbFBh
Z2UuaCIKLSNpbmNsdWRlICJWTUFsbG9jYXRlLmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQot
Y2xhc3MgU21hbGxDaHVuayB7Ci1wdWJsaWM6Ci0gICAgU21hbGxDaHVuayhzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+Jik7Ci0KLSAgICBzdGF0aWMgU21hbGxDaHVuayogZ2V0KHZvaWQqKTsK
LSAgICBzaXplX3Qgb2Zmc2V0KHZvaWQqKTsKLQotICAgIHZvaWQqIG9iamVjdChzaXplX3Qgb2Zm
c2V0KTsKLSAgICBTbWFsbFBhZ2UqIHBhZ2Uoc2l6ZV90IG9mZnNldCk7Ci0gICAgU21hbGxMaW5l
KiBsaW5lKHNpemVfdCBvZmZzZXQpOwotCi0gICAgU21hbGxQYWdlKiBiZWdpbigpIHsgcmV0dXJu
IE9iamVjdChtX21lbW9yeSkucGFnZSgpOyB9Ci0gICAgU21hbGxQYWdlKiBlbmQoKSB7IHJldHVy
biBtX3BhZ2VzLmVuZCgpOyB9Ci0gICAgCi0gICAgU21hbGxMaW5lKiBsaW5lcygpIHsgcmV0dXJu
IG1fbGluZXMuYmVnaW4oKTsgfQotICAgIFNtYWxsUGFnZSogcGFnZXMoKSB7IHJldHVybiBtX3Bh
Z2VzLmJlZ2luKCk7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgc3RkOjphcnJheTxTbWFsbExpbmUs
IHNtYWxsQ2h1bmtTaXplIC8gc21hbGxMaW5lU2l6ZT4gbV9saW5lczsKLSAgICBzdGQ6OmFycmF5
PFNtYWxsUGFnZSwgc21hbGxDaHVua1NpemUgLyB2bVBhZ2VTaXplPiBtX3BhZ2VzOwotICAgIGNo
YXIgbV9tZW1vcnlbXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDIgKiBzbWFsbE1heCArIDApKSk7
Ci19OwotCi1zdGF0aWNfYXNzZXJ0KCEodm1QYWdlU2l6ZSAlIHNtYWxsTGluZVNpemUpLCAidm1Q
YWdlU2l6ZSBtdXN0IGJlIGFuIGV2ZW4gbXVsdGlwbGUgb2YgbGluZSBzaXplIik7Ci1zdGF0aWNf
YXNzZXJ0KCEoc21hbGxDaHVua1NpemUgJSBzbWFsbExpbmVTaXplKSwgImNodW5rIHNpemUgbXVz
dCBiZSBhbiBldmVuIG11bHRpcGxlIG9mIGxpbmUgc2l6ZSIpOwotc3RhdGljX2Fzc2VydCgKLSAg
ICBzaXplb2YoU21hbGxDaHVuaykgJSB2bVBhZ2VTaXplICsgMiAqIHNtYWxsTWF4IDw9IHZtUGFn
ZVNpemUsCi0gICAgInRoZSBmaXJzdCBwYWdlIG9mIG9iamVjdCBtZW1vcnkgaW4gYSBzbWFsbCBj
aHVuayBtdXN0IGJlIGFibGUgdG8gYWxsb2NhdGUgc21hbGxNYXgiKTsKLQotaW5saW5lIFNtYWxs
Q2h1bms6OlNtYWxsQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKLXsK
LSAgICAvLyBUcmFjayB0aGUgbWVtb3J5IHVzZWQgZm9yIG1ldGFkYXRhIGJ5IGFsbG9jYXRpbmcg
aW1hZ2luYXJ5IG9iamVjdHMuCi0gICAgZm9yIChjaGFyKiBpdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpOyBpdCA8IG1fbWVtb3J5OyBpdCArPSBzbWFsbExpbmVTaXplKSB7Ci0gICAg
ICAgIE9iamVjdCBvYmplY3QoaXQpOwotICAgICAgICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7
Ci0gICAgICAgIG9iamVjdC5wYWdlKCktPnJlZihsb2NrKTsKLSAgICB9Ci19Ci0KLWlubGluZSBT
bWFsbENodW5rKiBTbWFsbENodW5rOjpnZXQodm9pZCogb2JqZWN0KQotewotICAgIEJBU1NFUlQo
aXNTbWFsbChvYmplY3QpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U21hbGxDaHVuayo+KG1h
c2sob2JqZWN0LCBzbWFsbENodW5rTWFzaykpOwotfQotCi1pbmxpbmUgc2l6ZV90IFNtYWxsQ2h1
bms6Om9mZnNldCh2b2lkKiBvYmplY3QpCi17Ci0gICAgQkFTU0VSVChvYmplY3QgPj0gdGhpcyk7
Ci0gICAgQkFTU0VSVChvYmplY3QgPCByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHNt
YWxsQ2h1bmtTaXplKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsKLX0KLQotaW5saW5lIHZvaWQqIFNtYWxsQ2h1
bms6Om9iamVjdChzaXplX3Qgb2Zmc2V0KQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPih0aGlzKSArIG9mZnNldDsKLX0KLQotaW5saW5lIFNtYWxsUGFnZSogU21hbGxDaHVu
azo6cGFnZShzaXplX3Qgb2Zmc2V0KQotewotICAgIHNpemVfdCBwYWdlTnVtYmVyID0gb2Zmc2V0
IC8gdm1QYWdlU2l6ZTsKLSAgICByZXR1cm4gJm1fcGFnZXNbcGFnZU51bWJlcl07Ci19Ci0KLWlu
bGluZSBTbWFsbExpbmUqIFNtYWxsQ2h1bms6OmxpbmUoc2l6ZV90IG9mZnNldCkKLXsKLSAgICBz
aXplX3QgbGluZU51bWJlciA9IG9mZnNldCAvIHNtYWxsTGluZVNpemU7Ci0gICAgcmV0dXJuICZt
X2xpbmVzW2xpbmVOdW1iZXJdOwotfQotCi1pbmxpbmUgY2hhciogU21hbGxMaW5lOjpiZWdpbigp
Ci17Ci0gICAgU21hbGxDaHVuayogY2h1bmsgPSBTbWFsbENodW5rOjpnZXQodGhpcyk7Ci0gICAg
c2l6ZV90IGxpbmVOdW1iZXIgPSB0aGlzIC0gY2h1bmstPmxpbmVzKCk7Ci0gICAgc2l6ZV90IG9m
ZnNldCA9IGxpbmVOdW1iZXIgKiBzbWFsbExpbmVTaXplOwotICAgIHJldHVybiAmcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oY2h1bmspW29mZnNldF07Ci19Ci0KLWlubGluZSBjaGFyKiBTbWFsbExp
bmU6OmVuZCgpCi17Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBzbWFsbExpbmVTaXplOwotfQotCi1p
bmxpbmUgU21hbGxMaW5lKiBTbWFsbFBhZ2U6OmJlZ2luKCkKLXsKLSAgICBTbWFsbENodW5rKiBj
aHVuayA9IFNtYWxsQ2h1bms6OmdldCh0aGlzKTsKLSAgICBzaXplX3QgcGFnZU51bWJlciA9IHRo
aXMgLSBjaHVuay0+cGFnZXMoKTsKLSAgICBzaXplX3QgbGluZU51bWJlciA9IHBhZ2VOdW1iZXIg
KiBzbWFsbExpbmVDb3VudDsKLSAgICByZXR1cm4gJmNodW5rLT5saW5lcygpW2xpbmVOdW1iZXJd
OwotfQotCi1pbmxpbmUgU21hbGxMaW5lKiBTbWFsbFBhZ2U6OmVuZCgpCi17Ci0gICAgcmV0dXJu
IGJlZ2luKCkgKyBzbWFsbExpbmVDb3VudDsKLX0KLQotaW5saW5lIE9iamVjdDo6T2JqZWN0KHZv
aWQqIG9iamVjdCkKLSAgICA6IG1fY2h1bmsoU21hbGxDaHVuazo6Z2V0KG9iamVjdCkpCi0gICAg
LCBtX29mZnNldChtX2NodW5rLT5vZmZzZXQob2JqZWN0KSkKLXsKLX0KLQotaW5saW5lIE9iamVj
dDo6T2JqZWN0KFNtYWxsQ2h1bmsqIGNodW5rLCB2b2lkKiBvYmplY3QpCi0gICAgOiBtX2NodW5r
KGNodW5rKQotICAgICwgbV9vZmZzZXQobV9jaHVuay0+b2Zmc2V0KG9iamVjdCkpCi17Ci0gICAg
QkFTU0VSVChjaHVuayA9PSBTbWFsbENodW5rOjpnZXQob2JqZWN0KSk7Ci19Ci0KLWlubGluZSBT
bWFsbExpbmUqIE9iamVjdDo6bGluZSgpCi17Ci0gICAgcmV0dXJuIG1fY2h1bmstPmxpbmUobV9v
ZmZzZXQpOwotfQotCi1pbmxpbmUgU21hbGxQYWdlKiBPYmplY3Q6OnBhZ2UoKQotewotICAgIHJl
dHVybiBtX2NodW5rLT5wYWdlKG1fb2Zmc2V0KTsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIGJtYWxs
b2MKLQotI2VuZGlmIC8vIENodW5rCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxs
UGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgJ
KHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgU21hbGxQYWdlIDogcHVibGlj
IExpc3ROb2RlPFNtYWxsUAogcHVibGljOgogICAgIFNtYWxsUGFnZSgpCiAgICAgICAgIDogbV9o
YXNGcmVlTGluZXModHJ1ZSkKKyAgICAgICAgLCBtX29iamVjdFR5cGUoT2JqZWN0VHlwZTo6TGFy
Z2UpCiAgICAgewogICAgIH0KIApAQCAtNDgsNiArNDksOSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90
IHNpemVDbGFzcygpIHsgcmV0dXJuIG1fc2l6ZUNsYXNzOyB9CiAgICAgdm9pZCBzZXRTaXplQ2xh
c3Moc2l6ZV90IHNpemVDbGFzcykgeyBtX3NpemVDbGFzcyA9IHNpemVDbGFzczsgfQogICAgIAor
ICAgIE9iamVjdFR5cGUgb2JqZWN0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0VHlwZTsg
fQorICAgIHZvaWQgc2V0T2JqZWN0VHlwZShPYmplY3RUeXBlIG9iamVjdFR5cGUpIHsgbV9vYmpl
Y3RUeXBlID0gb2JqZWN0VHlwZTsgfQorCiAgICAgYm9vbCBoYXNGcmVlTGluZXMoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYpIGNvbnN0IHsgcmV0dXJuIG1faGFzRnJlZUxpbmVzOyB9CiAg
ICAgdm9pZCBzZXRIYXNGcmVlTGluZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIGJv
b2wgaGFzRnJlZUxpbmVzKSB7IG1faGFzRnJlZUxpbmVzID0gaGFzRnJlZUxpbmVzOyB9CiAgICAg
CkBAIC01OCw2ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgY2hhciBtX2hhc0ZyZWVM
aW5lczogMTsKICAgICB1bnNpZ25lZCBjaGFyIG1fcmVmQ291bnQ6IDc7CiAgICAgdW5zaWduZWQg
Y2hhciBtX3NpemVDbGFzczsKKyAgICBPYmplY3RUeXBlIG1fb2JqZWN0VHlwZTsKIAogc3RhdGlj
X2Fzc2VydCgKICAgICBzaXplQ2xhc3NDb3VudCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0
eXBlKG1fc2l6ZUNsYXNzKT46Om1heCgpLApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9T
dXBlckNodW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TdXBlckNo
dW5rLmgJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3VwZXJD
aHVuay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTdXBlckNodW5rX2gKLSNkZWZp
bmUgU3VwZXJDaHVua19oCi0KLSNpbmNsdWRlICJMYXJnZUNodW5rLmgiCi0jaW5jbHVkZSAiU21h
bGxDaHVuay5oIgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLWNsYXNzIFN1cGVyQ2h1bmsgewot
cHVibGljOgotICAgIFN1cGVyQ2h1bmsoKTsKLQotICAgIHZvaWQqIHNtYWxsQ2h1bmsoKTsKLSAg
ICB2b2lkKiBsYXJnZUNodW5rKCk7Ci19OwotCi1pbmxpbmUgU3VwZXJDaHVuazo6U3VwZXJDaHVu
aygpCi17Ci0gICAgQkFTU0VSVCghdGVzdCh0aGlzLCB+c3VwZXJDaHVua01hc2spKTsKLSAgICBC
QVNTRVJUKCF0ZXN0KHNtYWxsQ2h1bmsoKSwgfnNtYWxsQ2h1bmtNYXNrKSk7Ci0gICAgQkFTU0VS
VCghdGVzdChsYXJnZUNodW5rKCksIH5sYXJnZUNodW5rTWFzaykpOwotfQotCi1pbmxpbmUgdm9p
ZCogU3VwZXJDaHVuazo6c21hbGxDaHVuaygpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHRoaXMpICsgc21hbGxDaHVua09mZnNldDsKLX0KLQotaW5saW5lIHZvaWQqIFN1
cGVyQ2h1bms6OmxhcmdlQ2h1bmsoKQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPih0aGlzKSArIGxhcmdlQ2h1bmtPZmZzZXQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxs
b2MKLQotI2VuZGlmIC8vIFN1cGVyQ2h1bmtfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9WTUhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFw
LmNwcAkocmV2aXNpb24gMTk4NjU1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJMYXJnZU9i
amVjdC5oIgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKLSNpbmNsdWRlICJTdXBlckNodW5rLmgi
CiAjaW5jbHVkZSAiVk1IZWFwLmgiCiAjaW5jbHVkZSA8dGhyZWFkPgogCkBAIC0zNiwzNiArMzUs
MTYgQEAgVk1IZWFwOjpWTUhlYXAoKQogewogfQogCi12b2lkIFZNSGVhcDo6YWxsb2NhdGVTbWFs
bENodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2spCi17Ci0gICAgaWYgKCFt
X3NtYWxsQ2h1bmtzLnNpemUoKSkKLSAgICAgICAgYWxsb2NhdGVTdXBlckNodW5rKGxvY2spOwot
Ci0gICAgLy8gV2UgaW5pdGlhbGl6ZSBjaHVua3MgbGF6aWx5IHRvIGF2b2lkIGRpcnR5aW5nIHRo
ZWlyIG1ldGFkYXRhIHBhZ2VzLgotICAgIFNtYWxsQ2h1bmsqIHNtYWxsQ2h1bmsgPSBuZXcgKG1f
c21hbGxDaHVua3MucG9wKCktPnNtYWxsQ2h1bmsoKSkgU21hbGxDaHVuayhsb2NrKTsKLSAgICBm
b3IgKGF1dG8qIGl0ID0gc21hbGxDaHVuay0+YmVnaW4oKTsgaXQgPCBzbWFsbENodW5rLT5lbmQo
KTsgKytpdCkKLSAgICAgICAgbV9zbWFsbFBhZ2VzLnB1c2goaXQpOwotfQotCiBMYXJnZU9iamVj
dCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JiBsb2NrKQogewotICAgIGlmICghbV9sYXJnZUNodW5rcy5zaXplKCkpCi0gICAgICAgIGFsbG9j
YXRlU3VwZXJDaHVuayhsb2NrKTsKLQotICAgIC8vIFdlIGluaXRpYWxpemUgY2h1bmtzIGxhemls
eSB0byBhdm9pZCBkaXJ0eWluZyB0aGVpciBtZXRhZGF0YSBwYWdlcy4KLSAgICBMYXJnZUNodW5r
KiBsYXJnZUNodW5rID0gbmV3IChtX2xhcmdlQ2h1bmtzLnBvcCgpLT5sYXJnZUNodW5rKCkpIExh
cmdlQ2h1bms7Ci0gICAgcmV0dXJuIExhcmdlT2JqZWN0KGxhcmdlQ2h1bmstPmJlZ2luKCkpOwot
fQorICAgIExhcmdlQ2h1bmsqIGxhcmdlQ2h1bmsgPQorICAgICAgICBuZXcgKHZtQWxsb2NhdGUo
bGFyZ2VDaHVua1NpemUsIGxhcmdlQ2h1bmtTaXplKSkgTGFyZ2VDaHVuayhsb2NrKTsKIAotdm9p
ZCBWTUhlYXA6OmFsbG9jYXRlU3VwZXJDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JikKLXsKLSAgICBTdXBlckNodW5rKiBzdXBlckNodW5rID0KLSAgICAgICAgbmV3ICh2bUFsbG9j
YXRlKHN1cGVyQ2h1bmtTaXplLCBzdXBlckNodW5rU2l6ZSkpIFN1cGVyQ2h1bms7Ci0gICAgbV9z
bWFsbENodW5rcy5wdXNoKHN1cGVyQ2h1bmspOwotICAgIG1fbGFyZ2VDaHVua3MucHVzaChzdXBl
ckNodW5rKTsKICNpZiBCT1MoREFSV0lOKQotICAgIG1fem9uZS5hZGRTdXBlckNodW5rKHN1cGVy
Q2h1bmspOworICAgIG1fem9uZS5hZGRMYXJnZUNodW5rKGxhcmdlQ2h1bmspOwogI2VuZGlmCisK
KyAgICByZXR1cm4gTGFyZ2VPYmplY3QobGFyZ2VDaHVuay0+YmVnaW4oKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAkocmV2aXNpb24g
MTk4NjU1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkxhcmdlT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UmFuZ2UuaCIKICNpbmNsdWRlICJTZWdyZWdhdGVkRnJlZUxpc3QuaCIKLSNpbmNsdWRlICJTbWFs
bENodW5rLmgiCiAjaW5jbHVkZSAiVk1TdGF0ZS5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogI2lm
IEJPUyhEQVJXSU4pCkBAIC00NCw0NSArNDMsMjYgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogY2xh
c3MgQmVnaW5UYWc7CiBjbGFzcyBFbmRUYWc7CiBjbGFzcyBIZWFwOwotY2xhc3MgU3VwZXJDaHVu
azsKIAogY2xhc3MgVk1IZWFwIHsKIHB1YmxpYzoKICAgICBWTUhlYXAoKTsKIAotICAgIFNtYWxs
UGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwog
ICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIHNpemVfdCk7CiAgICAgTGFyZ2VPYmplY3QgYWxsb2NhdGVMYXJnZU9iamVjdChz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90LCBzaXplX3QsIHNpemVfdCk7CiAK
LSAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRl
eD4mLCBTbWFsbFBhZ2UqKTsKICAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0KTsKICAgICAKIHByaXZhdGU6Ci0g
ICAgdm9pZCBhbGxvY2F0ZVNtYWxsQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYp
OwogICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+Jik7Ci0gICAgdm9pZCBhbGxvY2F0ZVN1cGVyQ2h1bmsoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYpOwogCi0gICAgTGlzdDxTbWFsbFBhZ2U+IG1fc21hbGxQYWdlczsKICAg
ICBTZWdyZWdhdGVkRnJlZUxpc3QgbV9sYXJnZU9iamVjdHM7CiAKLSAgICBWZWN0b3I8U3VwZXJD
aHVuayo+IG1fc21hbGxDaHVua3M7Ci0gICAgVmVjdG9yPFN1cGVyQ2h1bmsqPiBtX2xhcmdlQ2h1
bmtzOwotCiAjaWYgQk9TKERBUldJTikKICAgICBab25lIG1fem9uZTsKICNlbmRpZgogfTsKIAot
aW5saW5lIFNtYWxsUGFnZSogVk1IZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQotewotICAgIGlmIChtX3NtYWxsUGFnZXMuaXNFbXB0eSgp
KQotICAgICAgICBhbGxvY2F0ZVNtYWxsQ2h1bmsobG9jayk7Ci0KLSAgICBTbWFsbFBhZ2UqIHBh
Z2UgPSBtX3NtYWxsUGFnZXMucG9wKCk7Ci0gICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXMocGFn
ZS0+YmVnaW4oKS0+YmVnaW4oKSwgdm1QYWdlU2l6ZSk7Ci0gICAgcmV0dXJuIHBhZ2U7Ci19Ci0K
IGlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKExhcmdl
T2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShzaXplKSkKQEAgLTEwMSwx
NSArODEsNiBAQCBpbmxpbmUgTGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlCiAgICAg
cmV0dXJuIGFsbG9jYXRlTGFyZ2VDaHVuayhsb2NrKTsKIH0KIAotaW5saW5lIHZvaWQgVk1IZWFw
OjpkZWFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2Nr
LCBTbWFsbFBhZ2UqIHBhZ2UpCi17Ci0gICAgbG9jay51bmxvY2soKTsKLSAgICB2bURlYWxsb2Nh
dGVQaHlzaWNhbFBhZ2VzKHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHZtUGFnZVNpemUpOwotICAg
IGxvY2subG9jaygpOwotICAgIAotICAgIG1fc21hbGxQYWdlcy5wdXNoKHBhZ2UpOwotfQotCiBp
bmxpbmUgdm9pZCBWTUhlYXA6OmRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2Nr
PFN0YXRpY011dGV4PiYgbG9jaywgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QpCiB7CiAgICAgLy8g
TXVsdGlwbGUgdGhyZWFkcyBtaWdodCBzY2F2ZW5nZSBjb25jdXJyZW50bHksIG1lYW5pbmcgdGhh
dCBuZXcgbWVyZ2luZyBvcHBvcnR1bml0aWVzCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1pvbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWm9uZS5jcHAJ
KHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWm9uZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDggQEAgc3RhdGljIHNpemVfdCB6b25lU2l6ZShtYWxs
b2Nfem9uZV90KiwgYwogc3RhdGljIGtlcm5fcmV0dXJuX3QgZW51bWVyYXRvcih0YXNrX3QgdGFz
aywgdm9pZCogY29udGV4dCwgdW5zaWduZWQgdHlwZV9tYXNrLCB2bV9hZGRyZXNzX3Qgem9uZV9h
ZGRyZXNzLCBtZW1vcnlfcmVhZGVyX3QgcmVhZGVyLCB2bV9yYW5nZV9yZWNvcmRlcl90IHJlY29y
ZGVyKQogewogICAgIFpvbmUgcmVtb3RlWm9uZSh0YXNrLCByZWFkZXIsIHpvbmVfYWRkcmVzcyk7
Ci0gICAgZm9yIChhdXRvKiBzdXBlckNodW5rIDogcmVtb3RlWm9uZS5zdXBlckNodW5rcygpKSB7
Ci0gICAgICAgIHZtX3JhbmdlX3QgcmFuZ2UgPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVz
c190PihzdXBlckNodW5rKSwgc3VwZXJDaHVua1NpemUgfTsKKyAgICBmb3IgKGF1dG8qIGxhcmdl
Q2h1bmsgOiByZW1vdGVab25lLmxhcmdlQ2h1bmtzKCkpIHsKKyAgICAgICAgdm1fcmFuZ2VfdCBy
YW5nZSA9IHsgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGxhcmdlQ2h1bmspLCBsYXJn
ZUNodW5rU2l6ZSB9OwogCiAgICAgICAgIGlmICgodHlwZV9tYXNrICYgTUFMTE9DX1BUUl9SRUdJ
T05fUkFOR0VfVFlQRSkpCiAgICAgICAgICAgICAoKnJlY29yZGVyKSh0YXNrLCBjb250ZXh0LCBN
QUxMT0NfUFRSX1JFR0lPTl9SQU5HRV9UWVBFLCAmcmFuZ2UsIDEpOwpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9ab25lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9ab25lLmgJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWm9u
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBibWFsbG9j
IHsKIAotY2xhc3MgU3VwZXJDaHVuazsKK2NsYXNzIExhcmdlQ2h1bms7CiAKIGNsYXNzIFpvbmUg
OiBwdWJsaWMgbWFsbG9jX3pvbmVfdCB7CiBwdWJsaWM6CkBAIC00MSwzMCArNDEsMzAgQEAgcHVi
bGljOgogICAgIFpvbmUoKTsKICAgICBab25lKHRhc2tfdCwgbWVtb3J5X3JlYWRlcl90LCB2bV9h
ZGRyZXNzX3QpOwogCi0gICAgdm9pZCBhZGRTdXBlckNodW5rKFN1cGVyQ2h1bmsqKTsKLSAgICBG
aXhlZFZlY3RvcjxTdXBlckNodW5rKiwgY2FwYWNpdHk+JiBzdXBlckNodW5rcygpIHsgcmV0dXJu
IG1fc3VwZXJDaHVua3M7IH0KKyAgICB2b2lkIGFkZExhcmdlQ2h1bmsoTGFyZ2VDaHVuayopOwor
ICAgIEZpeGVkVmVjdG9yPExhcmdlQ2h1bmsqLCBjYXBhY2l0eT4mIGxhcmdlQ2h1bmtzKCkgeyBy
ZXR1cm4gbV9sYXJnZUNodW5rczsgfQogICAgIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIHZlY3Rv
ciBoYXMgdHdvIHB1cnBvc2VzOgotICAgIC8vICAgICAoMSkgSXQgc3RvcmVzIHRoZSBsaXN0IG9m
IFN1cGVyQ2h1bmtzIHNvIHRoYXQgd2UgY2FuIGVudW1lcmF0ZQotICAgIC8vICAgICAgICAgZWFj
aCBTdXBlckNodW5rIGFuZCByZXF1ZXN0IHRoYXQgaXQgYmUgc2Nhbm5lZCBpZiByZWFjaGFibGUu
Ci0gICAgLy8gICAgICgyKSBJdCByb290cyBhIHBvaW50ZXIgdG8gZWFjaCBTdXBlckNodW5rIGlu
IGEgZ2xvYmFsIG5vbi1tYWxsb2MKLSAgICAvLyAgICAgICAgIFZNIHJlZ2lvbiwgbWFraW5nIGVh
Y2ggU3VwZXJDaHVuayBhcHBlYXIgcmVhY2hhYmxlLCBhbmQgdGhlcmVmb3JlCisgICAgLy8gICAg
ICgxKSBJdCBzdG9yZXMgdGhlIGxpc3Qgb2YgTGFyZ2VDaHVua3Mgc28gdGhhdCB3ZSBjYW4gZW51
bWVyYXRlCisgICAgLy8gICAgICAgICBlYWNoIExhcmdlQ2h1bmsgYW5kIHJlcXVlc3QgdGhhdCBp
dCBiZSBzY2FubmVkIGlmIHJlYWNoYWJsZS4KKyAgICAvLyAgICAgKDIpIEl0IHJvb3RzIGEgcG9p
bnRlciB0byBlYWNoIExhcmdlQ2h1bmsgaW4gYSBnbG9iYWwgbm9uLW1hbGxvYworICAgIC8vICAg
ICAgICAgVk0gcmVnaW9uLCBtYWtpbmcgZWFjaCBMYXJnZUNodW5rIGFwcGVhciByZWFjaGFibGUs
IGFuZCB0aGVyZWZvcmUKICAgICAvLyAgICAgICAgIGVuc3VyaW5nIHRoYXQgdGhlIGxlYWtzIHRv
b2wgd2lsbCBzY2FuIGl0LiAoVGhlIGxlYWtzIHRvb2wKICAgICAvLyAgICAgICAgIGNvbnNlcnZh
dGl2ZWx5IHNjYW5zIGFsbCB3cml0ZWFibGUgVk0gcmVnaW9ucyB0aGF0IGFyZSBub3QgbWFsbG9j
CiAgICAgLy8gICAgICAgICByZWdpb25zLCBhbmQgdGhlbiBzY2FucyBtYWxsb2MgcmVnaW9ucyB1
c2luZyB0aGUgaW50cm9zcGVjdGlvbiBBUEkuKQogICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGxl
YWtzIHRvb2wgZnJvbSByZXBvcnRpbmcgZmFsc2UgcG9zaXRpdmUgbGVha3MgZm9yCiAgICAgLy8g
b2JqZWN0cyBwb2ludGVkIHRvIGZyb20gYm1hbGxvYyBtZW1vcnkgLS0gdGhvdWdoIGl0IGFsc28g
cHJldmVudHMgdGhlCiAgICAgLy8gbGVha3MgdG9vbCBmcm9tIGZpbmRpbmcgYW55IGxlYWtzIGlu
IGJtYWxsb2MgbWVtb3J5LgotICAgIEZpeGVkVmVjdG9yPFN1cGVyQ2h1bmsqLCBjYXBhY2l0eT4g
bV9zdXBlckNodW5rczsKKyAgICBGaXhlZFZlY3RvcjxMYXJnZUNodW5rKiwgY2FwYWNpdHk+IG1f
bGFyZ2VDaHVua3M7CiB9OwogCi1pbmxpbmUgdm9pZCBab25lOjphZGRTdXBlckNodW5rKFN1cGVy
Q2h1bmsqIHN1cGVyQ2h1bmspCitpbmxpbmUgdm9pZCBab25lOjphZGRMYXJnZUNodW5rKExhcmdl
Q2h1bmsqIGxhcmdlQ2h1bmspCiB7Ci0gICAgaWYgKG1fc3VwZXJDaHVua3Muc2l6ZSgpID09IG1f
c3VwZXJDaHVua3MuY2FwYWNpdHkoKSkKKyAgICBpZiAobV9sYXJnZUNodW5rcy5zaXplKCkgPT0g
bV9sYXJnZUNodW5rcy5jYXBhY2l0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9z
dXBlckNodW5rcy5wdXNoKHN1cGVyQ2h1bmspOworICAgIG1fbGFyZ2VDaHVua3MucHVzaChsYXJn
ZUNodW5rKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274877</attachid>
            <date>2016-03-24 20:26:31 -0700</date>
            <delta_ts>2016-03-24 20:30:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155866-20160324202632.patch</filename>
            <type>text/plain</type>
            <size>53679</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODY1OCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OCBAQAorMjAxNi0wMy0yNCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IHNtYWxsIGFu
ZCBsYXJnZSBvYmplY3RzIHNob3VsZCBzaGFyZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTg2NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY3V0cyBvdXIgVk0gZm9vdHBy
aW50IGluIGhhbGYuIChWTSBmb290cHJpbnQgdXN1YWxseSBkb2Vzbid0CisgICAgICAgIG1hdHRl
ciwgYnV0IG9uIGlPUyB0aGVyZSdzIGFuIGFydGlmaWNpYWwgVk0gbGltaXQgYXJvdW5kIDcwME1C
LCBhbmQgaWYKKyAgICAgICAgeW91IGhpdCBpdCB5b3UgamV0c2FtIC8gY3Jhc2guKQorCisgICAg
ICAgIEl0J3MgYWxzbyBhIHN0ZXAgdG93YXJkIGhvbm9yaW5nIHRoZSBoYXJkd2FyZSBwYWdlIHNp
emUgYXQgcnVudGltZSwKKyAgICAgICAgd2hpY2ggd2lsbCByZWR1Y2UgbWVtb3J5IHVzYWdlIG9u
IGlPUy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGEgc21hbGwgaW1wcm92ZW1lbnQgaW4gcGVh
ayBtZW1vcnkgdXNhZ2UgYmVjYXVzZSBpdCBhbGxvd3MKKyAgICAgICAgc21hbGwgYW5kIGxhcmdl
IG9iamVjdHMgdG8gcmVjeWNsZSBlYWNoIG90aGVyJ3MgbWVtb3J5LiBUaGUgdHJhZGVvZmYgaXMK
KyAgICAgICAgdGhhdCB3ZSByZXF1aXJlIG1vcmUgbWV0YWRhdGEsIHdoaWNoIGNhdXNlcyBtb3Jl
IG1lbW9yeSB1c2FnZSB1bmRlciBzb21lCisgICAgICAgIGNvbmRpdGlvbnMgLS0gYWx0aG91Z2gg
d2Ugc3RpbGwgYSBtZW1vcnkgd2luIGluIHRoZSBtZWFuLgorCisgICAgICAgICogYm1hbGxvYy54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBSZW1vdmVkIFN1cGVyQ2h1bmsuCisKKyAgICAgICAg
KiBibWFsbG9jL0FsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJl
YWxsb2NhdGUpOiBBZG9wdCBhIG5ldyBIZWFwIEFQSSBmb3Igc2hyaW5raW5nCisgICAgICAgIGxh
cmdlIG9iamVjdHMgYmVjYXVzZSBpdCdzIGEgbGl0dGxlIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBp
dCB1c2VkIHRvIGJlLgorCisgICAgICAgIERvbid0IGNoZWNrIGZvciBlcXVhbGl0eSBpbiB0aGUg
WExhcmdlIGNhc2UgYmVjYXVzZSB3ZSBkb24ndCBkbyBpdCBpbgorICAgICAgICBvdGhlciBjYXNl
cywgYW5kIGl0J3MgdW5saWtlbHkgdGhhdCB3ZSdsbCBiZSBjYWxsZWQgZm9yIG5vIHJlYXNvbi4K
KworICAgICAgICAqIGJtYWxsb2MvQnVtcEFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6
QnVtcEFsbG9jYXRvcjo6YWxsb2NhdGUpOiBEb24ndCBBU1NFUlQgaXNTbWFsbCBiZWNhdXNlIHRo
YXQncworICAgICAgICBhbiBvbGQgY29uY2VwdCBmcm9tIHdoZW4gc21hbGwgYW5kIGxhcmdlIG9i
amVjdHMgd2VyZSBpbiBkaXN0aW5jdCBtZW1vcnkKKyAgICAgICAgcmVnaW9ucy4KKworICAgICAg
ICAqIGJtYWxsb2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0
b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSk6IExhcmdlIG9iamVjdHMgYXJlIG5vdAorICAgICAgICBz
ZWdyZWdhdGVkIGFueW1vcmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpkZWFs
bG9jYXRlTGFyZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5o
OgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSk6IERv
bid0IEFTU0VSVCBpc1NtYWxsKCkuIFNlZQorICAgICAgICBhYm92ZS4KKworICAgICAgICAqIGJt
YWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZSk6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZXMpOiBOZXcgaGVscGVycyBmb3IgcmV0dXJuaW5nIGNh
Y2hlZAorICAgICAgICBzbWFsbCBwYWdlcyB0byB0aGUgbGFyZ2Ugb2JqZWN0IGhlYXAuCisKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKTogQWxsb2NhdGUgc21hbGwg
cGFnZXMgZnJvbSB0aGUgbGFyZ2UKKyAgICAgICAgb2JqZWN0IGhlYXAuIFRoaXMgaXMgaG93IHdl
IGFjY29tcGxpc2ggc2hhcmluZy4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0
ZVNtYWxsTGluZSk6IEhhbmRsZSBsYXJnZSBvYmplY3RzIHNpbmNlIHdlIGNhbgorICAgICAgICBl
bmNvdW50ZXIgdGhlbSBvbiB0aGlzIGNvZGUgcGF0aCBub3cuCisKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OnNwbGl0QW5kQWxsb2NhdGUpOiBGaXhlZCBhIGJ1ZyB3aGVyZSB3ZSB3b3VsZCBzb21l
dGltZXMKKyAgICAgICAgbm90IHNwbGl0IGV2ZW4gdGhvdWdoIHdlIGNvdWxkLgorCisgICAgICAg
IEFsbG9jYXRpbmcgYSBsYXJnZSBvYmplY3QgYWxzbyByZXF1aXJlcyByZWYnaW5nIGl0cyBzbWFs
bCBsaW5lIHNvIHRoYXQKKyAgICAgICAgd2UgY2FuIGFsaWFzIG1lbW9yeSBiZXR3ZWVuIHNtYWxs
IGFuZCBsYXJnZSBvYmplY3RzLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxh
cmdlKTogUmV0dXJuIGNhY2hlZCBzbWFsbCBwYWdlcyBiZWZvcmUKKyAgICAgICAgYWxsb2NhdGlu
ZyBhIGxhcmdlIG9iamVjdCB0aGF0IHdvdWxkIGZpdCBpbiBhIGNhY2hlZCBzbWFsbCBwYWdlLiBU
aGlzCisgICAgICAgIGFsbG93cyBzb21lIGxhcmdlIGFsbG9jYXRpb25zIHRvIHJldXNlIHNtYWxs
IG9iamVjdCBtZW1vcnkuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKTog
TmV3IGhlbHBlci4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKTog
RGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorCisgICAgICAgICogYm1hbGxv
Yy9MYXJnZUNodW5rLmg6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpwYWdlQmVnaW4p
OgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6cGFnZUVuZCk6CisgICAgICAgIChibWFs
bG9jOjpMYXJnZUNodW5rOjpsaW5lcyk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpw
YWdlcyk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpiZWdpbik6CisgICAgICAgIChi
bWFsbG9jOjpMYXJnZUNodW5rOjplbmQpOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6
TGFyZ2VDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpnZXQpOgorICAgICAg
ICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6ZW5kVGFnKToKKyAgICAgICAgKGJtYWxsb2M6Okxhcmdl
Q2h1bms6Om9mZnNldCk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpvYmplY3QpOgor
ICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6cGFnZSk6CisgICAgICAgIChibWFsbG9jOjpM
YXJnZUNodW5rOjpsaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsTGluZTo6YmVnaW4pOgor
ICAgICAgICAoYm1hbGxvYzo6U21hbGxMaW5lOjplbmQpOgorICAgICAgICAoYm1hbGxvYzo6U21h
bGxQYWdlOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpPYmplY3Q6Ok9iamVjdCk6CisgICAgICAgIChibWFsbG9jOjpPYmplY3Q6
OmJlZ2luKToKKyAgICAgICAgKGJtYWxsb2M6Ok9iamVjdDo6cGFnZUJlZ2luKToKKyAgICAgICAg
KGJtYWxsb2M6Ok9iamVjdDo6bGluZSk6CisgICAgICAgIChibWFsbG9jOjpPYmplY3Q6OnBhZ2Up
OiBJIG1lcmdlZCBhbGwgdGhlIFNtYWxsQ2h1bmsgbWV0YWRhdGEgYW5kIGNvZGUKKyAgICAgICAg
aW50byBMYXJnZUNodW5rLiBOb3cgd2UgdXNlIGEgc2luZ2xlIGNsYXNzIHRvIHRyYWNrIGJvdGgg
c21hbGwgYW5kIGxhcmdlCisgICAgICAgIG1ldGFkYXRhLCBzbyB3ZSBjYW4gc2hhcmUgbWVtb3J5
IGJldHdlZW4gc21hbGwgYW5kIGxhcmdlIG9iamVjdHMuCisKKyAgICAgICAgSSdtIGdvaW5nIHRv
IHJlbmFtZSB0aGlzIGNsYXNzIHRvIENodW5rIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisgICAg
ICAgICogYm1hbGxvYy9PYmplY3QuaDoKKyAgICAgICAgKGJtYWxsb2M6Ok9iamVjdDo6Y2h1bmsp
OiBVcGRhdGVkIGZvciBMYXJnZUNodW5rIHRyYW5zaXRpb24uCisKKyAgICAgICAgKiBibWFsbG9j
L09iamVjdFR5cGUuY3BwOgorICAgICAgICAoYm1hbGxvYzo6b2JqZWN0VHlwZSk6CisgICAgICAg
ICogYm1hbGxvYy9PYmplY3RUeXBlLmg6CisgICAgICAgIChibWFsbG9jOjppc1hMYXJnZSk6Cisg
ICAgICAgIChibWFsbG9jOjppc1NtYWxsKTogRGVsZXRlZC4gVGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biBzbWFsbCBhbmQgbGFyZ2UKKyAgICAgICAgb2JqZWN0cyBpcyBub3cgc3RvcmVkIGluIG1ldGFk
YXRhIGFuZCBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGVpcgorICAgICAgICB2aXJ0dWFsIGFkZHJl
c3MgcmFuZ2UuCisKKyAgICAgICAgKiBibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oOiBPbmUg
bW9yZSBlbnRyeSBiZWNhdXNlIHdlIGNvdmVyIGFsbCBvZgorICAgICAgICB3aGF0IHVzZWQgdG8g
YmUgdGhlIHN1cGVyIGNodW5rIGluIGEgbGFyZ2UgY2h1bmsgbm93LgorCisgICAgICAgICogYm1h
bGxvYy9TaXplcy5oOiBSZW1vdmVkIGJpdCBtYXNraW5nIGhlbHBlcnMgYmVjYXVzZSB3ZSBkb24n
dCB1c2UKKyAgICAgICAgYWRkcmVzcyBtYXNrcyB0byBkaXN0aW5ndWlzaCBzbWFsbCB2cyBsYXJn
ZSBvYmplY3QgdHlwZSBhbnltb3JlLgorCisgICAgICAgICogYm1hbGxvYy9TbWFsbENodW5rLmg6
IFJlbW92ZWQuCisKKyAgICAgICAgKiBibWFsbG9jL1NtYWxsUGFnZS5oOgorICAgICAgICAoYm1h
bGxvYzo6U21hbGxQYWdlOjpTbWFsbFBhZ2UpOiBTdG9yZSBvYmplY3QgdHlwZSBwZXIgcGFnZSBi
ZWNhdXNlIGFueQorICAgICAgICBnaXZlbiBwYWdlIGNhbiBiZSB1c2VkIGZvciBsYXJnZSBvYmpl
Y3RzIG9yIHNtYWxsIG9iamVjdHMuCisKKyAgICAgICAgKiBibWFsbG9jL1N1cGVyQ2h1bmsuaDog
UmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvVk1IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxs
b2M6OlZNSGVhcDo6Vk1IZWFwKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVM
YXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTbWFsbENodW5r
KTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTdXBlckNodW5r
KTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5oOgorICAgICAgICAoYm1hbGxv
Yzo6Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVh
cDo6ZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxs
b2NhdGVTbWFsbFBhZ2UpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFs
bG9jYXRlU21hbGxQYWdlKTogRGVsZXRlZC4gUmVtb3ZlZCBzdXBlciBjaHVuayBhbmQKKyAgICAg
ICAgc21hbGwgY2h1bmsgc3VwcG9ydC4KKworICAgICAgICAqIGJtYWxsb2MvWm9uZS5jcHA6Cisg
ICAgICAgIChibWFsbG9jOjplbnVtZXJhdG9yKToKKyAgICAgICAgKiBibWFsbG9jL1pvbmUuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlpvbmU6OmxhcmdlQ2h1bmtzKToKKyAgICAgICAgKGJtYWxsb2M6
OlpvbmU6OmFkZExhcmdlQ2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6Wm9uZTo6c3VwZXJDaHVu
a3MpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Wm9uZTo6YWRkU3VwZXJDaHVuayk6IERl
bGV0ZWQuIFJlbW92ZWQgc3VwZXIgY2h1bmsgYW5kCisgICAgICAgIHNtYWxsIGNodW5rIHN1cHBv
cnQuCisKIDIwMTYtMDMtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBibWFsbG9jOiBBZGRlZCBhbiBPYmplY3QgaGVscGVyIGNsYXNzCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3LDcgKzE3LDYgQEAKIAkJMTQzQ0I4MUQxOTAy
MkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNDQjgxQjE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0
ZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDNFRjlBRjFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRUY5QUQxQTlGQUJGNjAwNEY1Qzc3IC8q
IEZyZWVMaXN0LmNwcCAqLzsgfTsKIAkJMTQzRUY5QjAxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNF
RjlBRTFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDQwQUZDOTFBOTUxNDI0MDA4MzdGQUEgLyog
U3VwZXJDaHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ0MEFGQzgxQTk1MTQyNDAwODM3RkFBIC8qIFN1cGVyQ2h1bmsuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDQjFBOTUyNjExMDA4
MzdGQUEgLyogWm9uZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ0MEFGQ0ExQTk1MjYxMTAwODM3RkFBIC8qIFpvbmUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDRDFBOTUyN0FGMDA4MzdG
QUEgLyogWm9uZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDQwQUZDQzFBOTUyN0FGMDA4MzdGQUEgLyogWm9uZS5jcHAgKi87IH07CiAJCTE0NDhD
MzAwMThGMzc1NDYwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ4QzJGRjE4RjM3NTQzMDA1MDI4MzkgLyogbWJt
YWxsb2MuY3BwICovOyB9OwpAQCAtNDIsNyArNDEsNiBAQAogCQkxNERENzg5OTE4RjQ4RDRBMDA5
NTA3MDIgLyogQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NDQ2OUU1MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNoZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODlBMThGNDhENEEwMDk1
MDcwMiAvKiBEZWFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OUMx
OEY0OEQ0QTAwOTUwNzAyIC8qIEJ1bXBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1w
QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMTRERDc4QkIxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsQ2h1bmsuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0N0FBQThDMThDRDM2QTcwMDIy
MDFFNCAvKiBTbWFsbENodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTRERDc4QkMxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsTGluZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1MjQ3ODYxOEJD
NzU3QzAwRjgwMDk4IC8qIFNtYWxsTGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OEJEMThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbFBh
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Uy
OUVEMThDQUU5MDUwMEZFOEEwRiAvKiBTbWFsbFBhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDNTE4RjQ4RDc1MDA5NTA3MDIgLyog
QWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDIxQTg3NzE4RUU0NjJBMDBCNERENjggLyogQWxnb3JpdGhtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk1LDcgKzkzLDYgQEAKIAkJMTQz
RTI5RUQxOENBRTkwNTAwRkU4QTBGIC8qIFNtYWxsUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBTbWFsbFBhZ2UuaDsgcGF0aCA9IGJtYWxsb2MvU21hbGxQYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0VGOUFEMUE5RkFCRjYwMDRGNUM3NyAvKiBG
cmVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGcmVlTGlz
dC5jcHA7IHBhdGggPSBibWFsbG9jL0ZyZWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZyZWVMaXN0Lmg7IHBhdGggPSBibWFsbG9jL0ZyZWVM
aXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NDBBRkM4MUE5NTE0MjQwMDgz
N0ZBQSAvKiBTdXBlckNodW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN1
cGVyQ2h1bmsuaDsgcGF0aCA9IGJtYWxsb2MvU3VwZXJDaHVuay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDQwQUZDQTFBOTUyNjExMDA4MzdGQUEgLyogWm9uZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBab25lLmg7IHBhdGggPSBibWFsbG9jL1pvbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MEFGQ0MxQTk1MjdBRjAwODM3RkFBIC8q
IFpvbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWm9uZS5jcHA7
IHBhdGggPSBibWFsbG9jL1pvbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDQ0NjlFNDE3QTQ2QkZFMDBGOUVBMUQgLyogQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IENhY2hlLmNwcDsgcGF0aCA9IGJtYWxs
b2MvQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNh
dGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKQEAgLTEyMyw3ICsxMjAsNiBAQAog
CQkxNDc5RTIxMjE3QTFBMjU1MDA2RDRFOUQgLyogVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2Mv
VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9u
SWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDc5RTIxNDE3QTFBNjNFMDA2
RDRFOUQgLyogVk1BbGxvY2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRp
bmcgPSAwOyBuYW1lID0gVk1BbGxvY2F0ZS5oOyBwYXRoID0gYm1hbGxvYy9WTUFsbG9jYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmll
ciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDdBQUE4ODE4Q0QxN0NFMDAyMjAxRTQgLyog
TGFyZ2VDaHVuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMYXJnZUNodW5r
Lmg7IHBhdGggPSBibWFsbG9jL0xhcmdlQ2h1bmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTQ3QUFBOEMxOENEMzZBNzAwMjIwMUU0IC8qIFNtYWxsQ2h1bmsuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU21hbGxDaHVuay5oOyBwYXRoID0gYm1hbGxvYy9TbWFs
bENodW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODU2NTVFMThBNDNBRjkw
MEVENjk0MiAvKiBCb3VuZGFyeVRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCb3VuZGFyeVRhZy5oOyBwYXRoID0gYm1hbGxvYy9Cb3VuZGFyeVRhZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg1NjU2MDE4QTQzREJBMDBFRDY5NDIgLyogT2JqZWN0VHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPYmplY3RUeXBlLmg7IHBhdGgg
PSBibWFsbG9jL09iamVjdFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4
OTVEOEYxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEVudmlyb25tZW50LmNwcDsgcGF0aCA9IGJtYWxsb2MvRW52
aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA4LDcgKzIwNCw2
IEBACiAJCTE0N0FBQTlBMThDRTVGRDMwMDIyMDFFNCAvKiBoZWFwOiBzbWFsbCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMTQ3QUFBOEMxOENEMzZBNzAw
MjIwMUU0IC8qIFNtYWxsQ2h1bmsuaCAqLywKIAkJCQkxNDUyNDc4NjE4QkM3NTdDMDBGODAwOTgg
LyogU21hbGxMaW5lLmggKi8sCiAJCQkJMTQzRTI5RUQxOENBRTkwNTAwRkU4QTBGIC8qIFNtYWxs
UGFnZS5oICovLAogCQkJKTsKQEAgLTI3MCw3ICsyNjUsNiBAQAogCQkJCTE0MTA1RTgzMThFMTQz
NzQwMDNBMTA2RSAvKiBPYmplY3RUeXBlLmNwcCAqLywKIAkJCQkxNDg1NjU2MDE4QTQzREJBMDBF
RDY5NDIgLyogT2JqZWN0VHlwZS5oICovLAogCQkJCTE0NUY2ODc0MTc5REY4NDEwMEQ2NTU5OCAv
KiBTaXplcy5oICovLAotCQkJCTE0NDBBRkM4MUE5NTE0MjQwMDgzN0ZBQSAvKiBTdXBlckNodW5r
LmggKi8sCiAJCQkJMTQ0RjdCRkIxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5jcHAgKi8sCiAJ
CQkJMTQ0RjdCRkMxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5oICovLAogCQkJCTE0NDBBRkNB
MUE5NTI2MTEwMDgzN0ZBQSAvKiBab25lLmggKi8sCkBAIC0zMzksMTEgKzMzMyw5IEBACiAJCQkJ
MTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0REQ3OEQwMThGNDhENzUwMDk1MDcwMiAvKiBWTUFsbG9jYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNEVCNzlFQTFDN0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFuZ2UuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTE0NDBBRkM5MUE5NTE0MjQwMDgzN0ZBQSAvKiBTdXBlckNodW5rLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDNFRjlCMDFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REQ3OENFMThGNDhENzUwMDk1MDcwMiAvKiBTeXNjYWxsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNERENzhDNjE4RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxNERENzhCQjE4RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxDaHVu
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIElubGlu
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4OTVEOTIxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmly
b25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAwMjc0QTE4Rjg5QzIzMDAxMTVDOTcgLyog
Vk1IZWFwLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDQwICsxMTQsMzMgQEAgdm9pZCogQWxsb2Nh
dG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdAogCiAgICAgc2l6ZV90IG9sZFNpemUgPSAwOwog
ICAgIHN3aXRjaCAob2JqZWN0VHlwZShvYmplY3QpKSB7Ci0gICAgY2FzZSBTbWFsbDogeworICAg
IGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6IHsKICAgICAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE9i
amVjdChvYmplY3QpLnBhZ2UoKS0+c2l6ZUNsYXNzKCk7CiAgICAgICAgIG9sZFNpemUgPSBvYmpl
Y3RTaXplKHNpemVDbGFzcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIExhcmdl
OiB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2Vz
czxIZWFwPjo6bXV0ZXgoKSk7CisgICAgY2FzZSBPYmplY3RUeXBlOjpMYXJnZTogewogICAgICAg
ICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChvYmplY3QpOwogICAgICAgICBvbGRTaXplID0gbGFy
Z2VPYmplY3Quc2l6ZSgpOwogCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdT
aXplID4gc21hbGxNYXgpIHsKLSAgICAgICAgICAgIG5ld1NpemUgPSByb3VuZFVwVG9NdWx0aXBs
ZU9mPGxhcmdlQWxpZ25tZW50PihuZXdTaXplKTsKICAgICAgICAgICAgIGlmIChvbGRTaXplIC0g
bmV3U2l6ZSA+PSBsYXJnZU1pbikgewotICAgICAgICAgICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9i
amVjdCwgTGFyZ2VPYmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQobmV3U2l6ZSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAgICAg
ICAgICAgICBtX2RlYWxsb2NhdG9yLmRlYWxsb2NhdGUoc3BsaXQuc2Vjb25kLmJlZ2luKCkpOwot
ICAgICAgICAgICAgICAgIGxvY2subG9jaygpOworICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICAg
ICAgICAgICAgICBuZXdTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4o
bmV3U2l6ZSk7CisgICAgICAgICAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2Uo
KS0+c2hyaW5rTGFyZ2UobG9jaywgbGFyZ2VPYmplY3QsIG5ld1NpemUpOworICAgICAgICAgICAg
ICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIFhMYXJnZTog
ewotICAgICAgICBCQVNTRVJUKG9iamVjdFR5cGUobnVsbHB0cikgPT0gWExhcmdlKTsKKyAgICBj
YXNlIE9iamVjdFR5cGU6OlhMYXJnZTogeworICAgICAgICBCQVNTRVJUKG9iamVjdFR5cGUobnVs
bHB0cikgPT0gT2JqZWN0VHlwZTo6WExhcmdlKTsKICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBs
b2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwogICAgICAgICBvbGRTaXplID0gUGVyUHJv
Y2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+eExhcmdlU2l6ZShsb2NrLCBvYmplY3QpOwogCi0g
ICAgICAgIGlmIChuZXdTaXplID09IG9sZFNpemUpCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0
OwotCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXplID4gbGFyZ2VNYXgp
IHsKICAgICAgICAgICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnNocmlua1hM
YXJnZShsb2NrLCBSYW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKICAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3Iu
aAkocmV2aXNpb24gMTk4NjU1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CdW1wQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgaW5saW5lIHZvaWQqIEJ1bXBB
bGxvY2F0b3I6OmFsbG9jYXRlKCkKICAgICAtLW1fcmVtYWluaW5nOwogICAgIGNoYXIqIHJlc3Vs
dCA9IG1fcHRyOwogICAgIG1fcHRyICs9IG1fc2l6ZTsKLSAgICBCQVNTRVJUKGlzU21hbGwocmVz
dWx0KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9EZWFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvRGVhbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAj
aW5jbHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGVyUHJv
Y2Vzcy5oIgotI2luY2x1ZGUgIlNtYWxsQ2h1bmsuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgpAQCAtNjAsMTIgKzU5LDYg
QEAgdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogICAgICAgICBwcm9jZXNzT2JqZWN0TG9n
KCk7CiB9CiAKLXZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVMYXJnZSh2b2lkKiBvYmplY3Qp
Ci17Ci0gICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVh
cD46Om11dGV4KCkpOwotICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmRlYWxs
b2NhdGVMYXJnZShsb2NrLCBvYmplY3QpOwotfQotCiB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9j
YXRlWExhcmdlKHZvaWQqIG9iamVjdCkKIHsKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011
dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwpAQCAtOTcsMjAgKzkwLDE1IEBA
IHZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2kKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEJBU1NFUlQob2JqZWN0VHlwZShudWxscHRyKSA9PSBYTGFyZ2UpOwog
ICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaXNTbWFsbChvYmpl
Y3QpKSB7Ci0gICAgICAgIHByb2Nlc3NPYmplY3RMb2coKTsKLSAgICAgICAgbV9vYmplY3RMb2cu
cHVzaChvYmplY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpc1hMYXJnZShv
YmplY3QpKQorICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZVhMYXJnZShvYmplY3QpOwogCi0gICAg
aWYgKCFpc1hMYXJnZShvYmplY3QpKQotICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZUxhcmdlKG9i
amVjdCk7Ci0gICAgCi0gICAgcmV0dXJuIGRlYWxsb2NhdGVYTGFyZ2Uob2JqZWN0KTsKKyAgICBC
QVNTRVJUKG1fb2JqZWN0TG9nLnNpemUoKSA9PSBtX29iamVjdExvZy5jYXBhY2l0eSgpKTsKKyAg
ICBwcm9jZXNzT2JqZWN0TG9nKCk7CisgICAgbV9vYmplY3RMb2cucHVzaChvYmplY3QpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Rl
YWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9j
YXRvci5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAgcHJpdmF0ZToKICAgICBi
b29sIGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7CiAgICAgdm9pZCBkZWFsbG9jYXRlU2xvd0Nh
c2Uodm9pZCopOwogCi0gICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2Uodm9pZCopOwogICAgIHZvaWQg
ZGVhbGxvY2F0ZVhMYXJnZSh2b2lkKik7CiAKICAgICBGaXhlZFZlY3Rvcjx2b2lkKiwgZGVhbGxv
Y2F0b3JMb2dDYXBhY2l0eT4gbV9vYmplY3RMb2c7CkBAIC02MCwxMSArNTksMTAgQEAgcHJpdmF0
ZToKIAogaW5saW5lIGJvb2wgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKiBv
YmplY3QpCiB7Ci0gICAgaWYgKCFpc1NtYWxsKG9iamVjdCkpCisgICAgQkFTU0VSVChpc1hMYXJn
ZShudWxscHRyKSk7CisgICAgaWYgKGlzWExhcmdlKG9iamVjdCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEJBU1NFUlQob2JqZWN0KTsKLQogICAgIGlmIChtX29iamVjdExvZy5zaXpl
KCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAK
ICNpbmNsdWRlICJMYXJnZUNodW5rLmgiCiAjaW5jbHVkZSAiTGFyZ2VPYmplY3QuaCIKICNpbmNs
dWRlICJQZXJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiU21hbGxDaHVuay5oIgogI2luY2x1ZGUgIlNt
YWxsTGluZS5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgPHRocmVhZD4KQEAg
LTg0LDE5ICs4MywzNCBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3Rh
CiB7CiAgICAgd2FpdFVudGlsRmFsc2UobG9jaywgc2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRp
bmdQYWdlcyk7CiAKLSAgICBzY2F2ZW5nZVNtYWxsUGFnZXMobG9jaywgc2xlZXBEdXJhdGlvbik7
CisgICAgbG9jay51bmxvY2soKTsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICAgICAgc2NhdmVu
Z2VTbWFsbFBhZ2VzKGxvY2spOworICAgIH0KKyAgICBsb2NrLmxvY2soKTsKKwogICAgIHNjYXZl
bmdlTGFyZ2VPYmplY3RzKGxvY2ssIHNsZWVwRHVyYXRpb24pOwogICAgIHNjYXZlbmdlWExhcmdl
T2JqZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9uKTsKIAogICAgIHNsZWVwKGxvY2ssIHNsZWVwRHVy
YXRpb24pOwogfQogCi12b2lkIEhlYXA6OnNjYXZlbmdlU21hbGxQYWdlcyhzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiYgbG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVlcER1
cmF0aW9uKQordm9pZCBIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiBsb2NrKQogewotICAgIHdoaWxlICghbV9zbWFsbFBhZ2VzLmlzRW1wdHkoKSkg
ewotICAgICAgICBtX3ZtSGVhcC5kZWFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIG1fc21hbGxQYWdl
cy5wb3AoKSk7Ci0gICAgICAgIHdhaXRVbnRpbEZhbHNlKGxvY2ssIHNsZWVwRHVyYXRpb24sIG1f
aXNBbGxvY2F0aW5nUGFnZXMpOwotICAgIH0KKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3NtYWxs
UGFnZXMucG9wKCk7CisKKyAgICAvLyBUcmFuc2Zvcm0gc21hbGwgb2JqZWN0IHBhZ2UgYmFjayBp
bnRvIGEgbGFyZ2Ugb2JqZWN0LgorICAgIHBhZ2UtPnNldE9iamVjdFR5cGUoT2JqZWN0VHlwZTo6
TGFyZ2UpOworCisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QocGFnZS0+YmVnaW4oKS0+YmVn
aW4oKSk7CisgICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIGxhcmdlT2JqZWN0KTsKK30KKwordm9p
ZCBIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYg
bG9jaykKK3sKKyAgICB3aGlsZSAoIW1fc21hbGxQYWdlcy5pc0VtcHR5KCkpCisgICAgICAgIHNj
YXZlbmdlU21hbGxQYWdlKGxvY2spOwogfQogCiB2b2lkIEhlYXA6OnNjYXZlbmdlTGFyZ2VPYmpl
Y3RzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzIHNsZWVwRHVyYXRpb24pCkBAIC0xNzksMjYgKzE5MywzNCBAQCBTbWFsbFBhZ2Uq
IEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6CiB7CiAgICAgaWYgKCFtX3NtYWxsUGFnZXNX
aXRoRnJlZUxpbmVzW3NpemVDbGFzc10uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9zbWFs
bFBhZ2VzV2l0aEZyZWVMaW5lc1tzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgCisgICAgaWYg
KCFtX3NtYWxsUGFnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNtYWxsUGFnZSogcGFnZSA9IG1f
c21hbGxQYWdlcy5wb3AoKTsKKyAgICAgICAgcGFnZS0+c2V0U2l6ZUNsYXNzKHNpemVDbGFzcyk7
CisgICAgICAgIHJldHVybiBwYWdlOworICAgIH0KIAotICAgIFNtYWxsUGFnZSogcGFnZSA9IFt0
aGlzLCAmbG9ja10oKSB7Ci0gICAgICAgIGlmICghbV9zbWFsbFBhZ2VzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBtX3NtYWxsUGFnZXMucG9wKCk7CisgICAgc2l6ZV90IHVuYWxpZ25l
ZFNpemUgPSBsYXJnZU1pbiArIHZtUGFnZVNpemUgLSBsYXJnZUFsaWdubWVudCArIHZtUGFnZVNp
emU7CisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBhbGxvY2F0ZUxhcmdlKGxvY2ssIHZt
UGFnZVNpemUsIHZtUGFnZVNpemUsIHVuYWxpZ25lZFNpemUpOwogCi0gICAgICAgIG1faXNBbGxv
Y2F0aW5nUGFnZXMgPSB0cnVlOwotICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3ZtSGVhcC5h
bGxvY2F0ZVNtYWxsUGFnZShsb2NrKTsKLSAgICAgICAgcmV0dXJuIHBhZ2U7Ci0gICAgfSgpOwor
ICAgIC8vIFRyYW5zZm9ybSBvdXIgbGFyZ2Ugb2JqZWN0IGludG8gYSBzbWFsbCBvYmplY3QgcGFn
ZS4gV2UgZGVyZWYgaGVyZQorICAgIC8vIGJlY2F1c2Ugb3VyIHNtYWxsIG9iamVjdHMgd2lsbCBr
ZWVwIHRoZWlyIG93biByZWZjb3VudHMgb24gdGhlIGxpbmUuCisgICAgT2JqZWN0IG9iamVjdChs
YXJnZU9iamVjdC5iZWdpbigpKTsKKyAgICBvYmplY3QubGluZSgpLT5kZXJlZihsb2NrKTsKKyAg
ICBvYmplY3QucGFnZSgpLT5zZXRPYmplY3RUeXBlKE9iamVjdFR5cGU6OlNtYWxsKTsKIAotICAg
IHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOwotICAgIHJldHVybiBwYWdlOworICAgIG9i
amVjdC5wYWdlKCktPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOworICAgIHJldHVybiBvYmplY3Qu
cGFnZSgpOwogfQogCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYgbG9jaywgT2JqZWN0IG9iamVjdCkKIHsKICAgICBCQVNTRVJUKCFv
YmplY3QubGluZSgpLT5yZWZDb3VudChsb2NrKSk7CiAgICAgU21hbGxQYWdlKiBwYWdlID0gb2Jq
ZWN0LnBhZ2UoKTsKLSAgICBwYWdlLT5kZXJlZihsb2NrKTsKKyAgICBpZiAocGFnZS0+b2JqZWN0
VHlwZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKQorICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZUxh
cmdlKGxvY2ssIExhcmdlT2JqZWN0KG9iamVjdC5iZWdpbigpKSk7CiAKKyAgICBwYWdlLT5kZXJl
Zihsb2NrKTsKICAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSkgewogICAgICAgICBw
YWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7CiAgICAgICAgIG1fc21hbGxQYWdlc1dp
dGhGcmVlTGluZXNbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CkBAIC0yMTUsMTkgKzIz
NywyMiBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrCiAgICAgbV9z
Y2F2ZW5nZXIucnVuKCk7CiB9CiAKLWlubGluZSBMYXJnZU9iamVjdCYgSGVhcDo6c3BsaXRBbmRB
bGxvY2F0ZShMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBzaXplKQoraW5saW5lIExh
cmdlT2JqZWN0JiBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCwgc2l6ZV90IHNpemUpCiB7CiAg
ICAgQkFTU0VSVChsYXJnZU9iamVjdC5pc0ZyZWUoKSk7CiAKICAgICBMYXJnZU9iamVjdCBuZXh0
TGFyZ2VPYmplY3Q7CiAKLSAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+IGxhcmdl
TWluKSB7CisgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPj0gbGFyZ2VNaW4pIHsK
ICAgICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gc3BsaXQgPSBsYXJn
ZU9iamVjdC5zcGxpdChzaXplKTsKICAgICAgICAgbGFyZ2VPYmplY3QgPSBzcGxpdC5maXJzdDsK
ICAgICAgICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwogICAgIH0KIAogICAgIGxh
cmdlT2JqZWN0LnNldEZyZWUoZmFsc2UpOworICAgIE9iamVjdCBvYmplY3QobGFyZ2VPYmplY3Qu
YmVnaW4oKSk7CisgICAgb2JqZWN0LmxpbmUoKS0+cmVmKGxvY2spOworICAgIEJBU1NFUlQob2Jq
ZWN0LnBhZ2UoKS0+b2JqZWN0VHlwZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKTsKIAogICAgIGlm
IChuZXh0TGFyZ2VPYmplY3QpIHsKICAgICAgICAgQkFTU0VSVCghbmV4dExhcmdlT2JqZWN0Lm5l
eHRDYW5NZXJnZSgpKTsKQEAgLTIzNyw3ICsyNjIsNyBAQCBpbmxpbmUgTGFyZ2VPYmplY3QmIEhl
YXA6OnNwbGl0QW5kQWxsb2NhCiAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwogfQogCi1pbmxpbmUg
TGFyZ2VPYmplY3QmIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmIGxhcmdlT2Jq
ZWN0LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK2lubGluZSBMYXJnZU9iamVjdCYg
SGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2Nr
LCBMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KQogewogICAgIExhcmdlT2JqZWN0IHByZXZMYXJnZU9iamVjdDsKICAgICBMYXJnZU9iamVjdCBu
ZXh0TGFyZ2VPYmplY3Q7CkBAIC0yNTIsMTMgKzI3NywxNiBAQCBpbmxpbmUgTGFyZ2VPYmplY3Qm
IEhlYXA6OnNwbGl0QW5kQWxsb2NhCiAKICAgICBCQVNTRVJUKGxhcmdlT2JqZWN0LmlzRnJlZSgp
KTsKIAotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBzaXplID4gbGFyZ2VNaW4pIHsKKyAg
ICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+PSBsYXJnZU1pbikgewogICAgICAgICBz
dGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNw
bGl0KHNpemUpOwogICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OwogICAgICAgICBu
ZXh0TGFyZ2VPYmplY3QgPSBzcGxpdC5zZWNvbmQ7CiAgICAgfQogCiAgICAgbGFyZ2VPYmplY3Qu
c2V0RnJlZShmYWxzZSk7CisgICAgT2JqZWN0IG9iamVjdChsYXJnZU9iamVjdC5iZWdpbigpKTsK
KyAgICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7CisgICAgQkFTU0VSVChvYmplY3QucGFnZSgp
LT5vYmplY3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2UpOwogCiAgICAgaWYgKHByZXZMYXJn
ZU9iamVjdCkgewogICAgICAgICBMYXJnZU9iamVjdCBtZXJnZWQgPSBwcmV2TGFyZ2VPYmplY3Qu
bWVyZ2UoKTsKQEAgLTI3OCw2ICszMDYsOSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyCiAgICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKICAgICBCQVNTRVJU
KHNpemUgPj0gbGFyZ2VNaW4pOwogICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBs
ZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKSk7CisgICAgCisgICAgaWYgKHNpemUgPD0gdm1QYWdl
U2l6ZSkKKyAgICAgICAgc2NhdmVuZ2VTbWFsbFBhZ2VzKGxvY2spOwogCiAgICAgTGFyZ2VPYmpl
Y3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOwogICAgIGlmICghbGFy
Z2VPYmplY3QpCkBAIC0yOTAsNyArMzIxLDcgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShz
dGQ6OmxvY2tfZ3VhcgogICAgICAgICBsYXJnZU9iamVjdC5zZXRWTVN0YXRlKFZNU3RhdGU6OlBo
eXNpY2FsKTsKICAgICB9CiAKLSAgICBsYXJnZU9iamVjdCA9IHNwbGl0QW5kQWxsb2NhdGUobGFy
Z2VPYmplY3QsIHNpemUpOworICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShsb2Nr
LCBsYXJnZU9iamVjdCwgc2l6ZSk7CiAKICAgICByZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsK
IH0KQEAgLTMwNyw2ICszMzgsOSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9j
a19ndWFyCiAgICAgQkFTU0VSVChhbGlnbm1lbnQgPj0gbGFyZ2VBbGlnbm1lbnQpOwogICAgIEJB
U1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCisgICAgaWYgKHNpemUgPD0gdm1QYWdl
U2l6ZSkKKyAgICAgICAgc2NhdmVuZ2VTbWFsbFBhZ2VzKGxvY2spOworCiAgICAgTGFyZ2VPYmpl
Y3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5h
bGlnbmVkU2l6ZSk7CiAgICAgaWYgKCFsYXJnZU9iamVjdCkKICAgICAgICAgbGFyZ2VPYmplY3Qg
PSBtX3ZtSGVhcC5hbGxvY2F0ZUxhcmdlT2JqZWN0KGxvY2ssIGFsaWdubWVudCwgc2l6ZSwgdW5h
bGlnbmVkU2l6ZSk7CkBAIC0zMTgsMTQgKzM1MiwyMSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxh
cmdlKHN0ZDo6bG9ja19ndWFyCiAgICAgICAgIGxhcmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0
ZTo6UGh5c2ljYWwpOwogICAgIH0KIAotICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0
ZShsYXJnZU9iamVjdCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICBsYXJnZU9iamVjdCA9IHNwbGl0
QW5kQWxsb2NhdGUobG9jaywgbGFyZ2VPYmplY3QsIGFsaWdubWVudCwgc2l6ZSk7CiAKICAgICBy
ZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsKIH0KIAordm9pZCBIZWFwOjpzaHJpbmtMYXJnZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBMYXJnZU9iamVjdCYgbGFyZ2VPYmpl
Y3QsIHNpemVfdCBuZXdTaXplKQoreworICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VP
YmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQobmV3U2l6ZSk7CisgICAgZGVhbGxvY2F0
ZUxhcmdlKGxvY2ssIHNwbGl0LnNlY29uZCk7Cit9CisKIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxh
cmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9iamVjdCYgbGFy
Z2VPYmplY3QpCiB7CiAgICAgQkFTU0VSVCghbGFyZ2VPYmplY3QuaXNGcmVlKCkpOworICAgIEJB
U1NFUlQoT2JqZWN0KGxhcmdlT2JqZWN0LmJlZ2luKCkpLnBhZ2UoKS0+b2JqZWN0VHlwZSgpID09
IE9iamVjdFR5cGU6OkxhcmdlKTsKICAgICBsYXJnZU9iamVjdC5zZXRGcmVlKHRydWUpOwogICAg
IAogICAgIExhcmdlT2JqZWN0IG1lcmdlZCA9IGxhcmdlT2JqZWN0Lm1lcmdlKCk7CkBAIC0zMzMs
MTIgKzM3NCw2IEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWEKICAg
ICBtX3NjYXZlbmdlci5ydW4oKTsKIH0KIAotdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgdm9pZCogb2JqZWN0KQotewotICAgIExh
cmdlT2JqZWN0IGxhcmdlT2JqZWN0KG9iamVjdCk7Ci0gICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ss
IGxhcmdlT2JqZWN0KTsKLX0KLQogdm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUp
CiB7CiAgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50
LCBzaXplKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NiBAQAogI2luY2x1ZGUgIk11dGV4LmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2VncmVnYXRlZEZyZWVMaXN0LmgiCi0jaW5jbHVkZSAiU21hbGxDaHVuay5oIgogI2luY2x1ZGUg
IlNtYWxsTGluZS5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgIlZNSGVhcC5o
IgpAQCAtNTksNyArNTgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRl
TGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCwgc2l6ZV90IHVuYWxpZ25lZFNpemUpOwotICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisgICAgdm9pZCBzaHJpbmtMYXJn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTGFyZ2VPYmplY3QmLCBzaXplX3QpOwog
CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYs
IHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CkBAIC04MCw4ICs3OSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mLCBPYmplY3QpOwogICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9iamVjdCYpOwogCi0gICAgTGFyZ2VPYmpl
Y3QmIHNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmLCBzaXplX3QpOwotICAgIExhcmdlT2Jq
ZWN0JiBzcGxpdEFuZEFsbG9jYXRlKExhcmdlT2JqZWN0Jiwgc2l6ZV90LCBzaXplX3QpOworICAg
IExhcmdlT2JqZWN0JiBzcGxpdEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCBMYXJnZU9iamVjdCYsIHNpemVfdCk7CisgICAgTGFyZ2VPYmplY3QmIHNwbGl0QW5kQWxs
b2NhdGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0Jiwgc2l6ZV90
LCBzaXplX3QpOwogICAgIHZvaWQgbWVyZ2VMYXJnZShCZWdpblRhZyomLCBFbmRUYWcqJiwgUmFu
Z2UmKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VMZWZ0KEVuZFRhZyomLCBCZWdpblRhZyomLCBSYW5n
ZSYsIGJvb2wmIGluVk1IZWFwKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VSaWdodChFbmRUYWcqJiwg
QmVnaW5UYWcqJiwgUmFuZ2UmLCBib29sJiBpblZNSGVhcCk7CkBAIC04OSw3ICs4OCw4IEBAIHBy
aXZhdGU6CiAgICAgWExhcmdlUmFuZ2Ugc3BsaXRBbmRBbGxvY2F0ZShYTGFyZ2VSYW5nZSYsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAKICAgICB2b2lkIGNvbmN1cnJlbnRTY2F2ZW5nZSgp
OwotICAgIHZvaWQgc2NhdmVuZ2VTbWFsbFBhZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CisgICAgdm9pZCBzY2F2ZW5nZVNtYWxs
UGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CisgICAgdm9pZCBzY2F2ZW5nZVNt
YWxsUGFnZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIHZvaWQgc2NhdmVu
Z2VMYXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzKTsKICAgICB2b2lkIHNjYXZlbmdlWExhcmdlT2JqZWN0cyhzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlQ2h1bmsuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlQ2h1bmsuaAkocmV2aXNpb24gMTk4NjU1KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZUNodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDExIEBACiAKICNpbmNsdWRlICJCZWdpblRhZy5oIgogI2luY2x1ZGUgIkVuZFRhZy5o
IgorI2luY2x1ZGUgIk9iamVjdC5oIgogI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKICNpbmNsdWRl
ICJTaXplcy5oIgorI2luY2x1ZGUgIlNtYWxsTGluZS5oIgorI2luY2x1ZGUgIlNtYWxsUGFnZS5o
IgogI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKICNpbmNsdWRlIDxhcnJheT4KIApAQCAtMzcsMTIg
KzQwLDI1IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgTGFyZ2VDaHVuayB7CiBwdWJs
aWM6Ci0gICAgTGFyZ2VDaHVuaygpOwogICAgIHN0YXRpYyBMYXJnZUNodW5rKiBnZXQodm9pZCop
OwogCiAgICAgc3RhdGljIEJlZ2luVGFnKiBiZWdpblRhZyh2b2lkKik7CiAgICAgc3RhdGljIEVu
ZFRhZyogZW5kVGFnKHZvaWQqLCBzaXplX3QpOwogCisgICAgTGFyZ2VDaHVuayhzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+Jik7CisKKyAgICBzaXplX3Qgb2Zmc2V0KHZvaWQqKTsKKworICAg
IHZvaWQqIG9iamVjdChzaXplX3Qgb2Zmc2V0KTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2Uoc2l6ZV90
IG9mZnNldCk7CisgICAgU21hbGxMaW5lKiBsaW5lKHNpemVfdCBvZmZzZXQpOworCisgICAgU21h
bGxQYWdlKiBwYWdlQmVnaW4oKSB7IHJldHVybiBPYmplY3QobV9tZW1vcnkpLnBhZ2UoKTsgfQor
ICAgIFNtYWxsUGFnZSogcGFnZUVuZCgpIHsgcmV0dXJuIG1fcGFnZXMuZW5kKCk7IH0KKyAgICAK
KyAgICBTbWFsbExpbmUqIGxpbmVzKCkgeyByZXR1cm4gbV9saW5lcy5iZWdpbigpOyB9CisgICAg
U21hbGxQYWdlKiBwYWdlcygpIHsgcmV0dXJuIG1fcGFnZXMuYmVnaW4oKTsgfQorCiAgICAgY2hh
ciogYmVnaW4oKSB7IHJldHVybiBtX21lbW9yeTsgfQogICAgIGNoYXIqIGVuZCgpIHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgbGFyZ2VDaHVua1NpemU7IH0KIApAQCAt
NjQsMTQgKzgwLDE4IEBAIHByaXZhdGU6CiAgICAgLy8KICAgICAvLyBXZSB1c2UgdGhlIFgncyBm
b3IgYm91bmRhcnkgdGFncyBhbmQgdGhlIE8ncyBmb3IgZWRnZSBzZW50aW5lbHMuCiAKKyAgICBz
dGQ6OmFycmF5PFNtYWxsTGluZSwgbGFyZ2VDaHVua1NpemUgLyBzbWFsbExpbmVTaXplPiBtX2xp
bmVzOworICAgIHN0ZDo6YXJyYXk8U21hbGxQYWdlLCBsYXJnZUNodW5rU2l6ZSAvIHZtUGFnZVNp
emU+IG1fcGFnZXM7CiAgICAgc3RkOjphcnJheTxCb3VuZGFyeVRhZywgYm91bmRhcnlUYWdDb3Vu
dD4gbV9ib3VuZGFyeVRhZ3M7Ci0gICAgY2hhciBtX21lbW9yeVtdIF9fYXR0cmlidXRlX18oKGFs
aWduZWQobGFyZ2VBbGlnbm1lbnQrMCkpKTsKKyAgICBjaGFyIG1fbWVtb3J5W10gX19hdHRyaWJ1
dGVfXygoYWxpZ25lZCgyICogc21hbGxNYXggKyAwKSkpOwogfTsKIAotc3RhdGljX2Fzc2VydChs
YXJnZUNodW5rTWV0YWRhdGFTaXplID09IHNpemVvZihMYXJnZUNodW5rKSwgIk91ciBsYXJnZUNo
dW5rTWV0YWRhdGFTaXplIG1hdGggaW4gU2l6ZXMuaCBpcyB3cm9uZyIpOwotc3RhdGljX2Fzc2Vy
dChsYXJnZUNodW5rTWV0YWRhdGFTaXplICsgbGFyZ2VPYmplY3RNYXggPT0gbGFyZ2VDaHVua1Np
emUsICJsYXJnZU9iamVjdE1heCBpcyB0b28gc21hbGwgb3IgdG9vIGJpZyIpOworc3RhdGljX2Fz
c2VydChzaXplb2YoTGFyZ2VDaHVuaykgKyBsYXJnZU1heCA8PSBsYXJnZUNodW5rU2l6ZSwgImxh
cmdlTWF4IGlzIHRvbyBiaWciKTsKK3N0YXRpY19hc3NlcnQoCisgICAgc2l6ZW9mKExhcmdlQ2h1
bmspICUgdm1QYWdlU2l6ZSArIDIgKiBzbWFsbE1heCA8PSB2bVBhZ2VTaXplLAorICAgICJ0aGUg
Zmlyc3QgcGFnZSBvZiBvYmplY3QgbWVtb3J5IGluIGEgc21hbGwgY2h1bmsgbXVzdCBiZSBhYmxl
IHRvIGFsbG9jYXRlIHNtYWxsTWF4Iik7CiAKLWlubGluZSBMYXJnZUNodW5rOjpMYXJnZUNodW5r
KCkKK2lubGluZSBMYXJnZUNodW5rOjpMYXJnZUNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2spCiB7CiAgICAgUmFuZ2UgcmFuZ2UoYmVnaW4oKSwgZW5kKCkgLSBiZWdpbigp
KTsKICAgICBCQVNTRVJUKHJhbmdlLnNpemUoKSA9PSBsYXJnZU9iamVjdE1heCk7CkBAIC05Nywx
MSArMTE3LDE3IEBAIGlubGluZSBMYXJnZUNodW5rOjpMYXJnZUNodW5rKCkKICAgICBCQVNTRVJU
KHJpZ2h0U2VudGluZWwgPj0gbV9ib3VuZGFyeVRhZ3MuYmVnaW4oKSk7CiAgICAgQkFTU0VSVChy
aWdodFNlbnRpbmVsIDwgbV9ib3VuZGFyeVRhZ3MuZW5kKCkpOwogICAgIHJpZ2h0U2VudGluZWwt
PmluaXRTZW50aW5lbCgpOworCisgICAgLy8gVHJhY2sgdGhlIG1lbW9yeSB1c2VkIGZvciBtZXRh
ZGF0YSBieSBhbGxvY2F0aW5nIGltYWdpbmFyeSBvYmplY3RzLgorICAgIGZvciAoY2hhciogaXQg
PSByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKTsgaXQgPCBtX21lbW9yeTsgaXQgKz0gc21h
bGxMaW5lU2l6ZSkgeworICAgICAgICBPYmplY3Qgb2JqZWN0KGl0KTsKKyAgICAgICAgb2JqZWN0
LmxpbmUoKS0+cmVmKGxvY2spOworICAgICAgICBvYmplY3QucGFnZSgpLT5yZWYobG9jayk7Cisg
ICAgfQogfQogCiBpbmxpbmUgTGFyZ2VDaHVuayogTGFyZ2VDaHVuazo6Z2V0KHZvaWQqIG9iamVj
dCkKIHsKLSAgICBCQVNTRVJUKCFpc1NtYWxsKG9iamVjdCkpOwogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxMYXJnZUNodW5rKj4obWFzayhvYmplY3QsIGxhcmdlQ2h1bmtNYXNrKSk7CiB9CiAKQEAg
LTExNCw4ICsxNDAsNiBAQCBpbmxpbmUgQmVnaW5UYWcqIExhcmdlQ2h1bms6OmJlZ2luVGFnKHZv
CiAKIGlubGluZSBFbmRUYWcqIExhcmdlQ2h1bms6OmVuZFRhZyh2b2lkKiBvYmplY3QsIHNpemVf
dCBzaXplKQogewotICAgIEJBU1NFUlQoIWlzU21hbGwob2JqZWN0KSk7Ci0KICAgICBMYXJnZUNo
dW5rKiBjaHVuayA9IGdldChvYmplY3QpOwogICAgIGNoYXIqIGVuZCA9IHN0YXRpY19jYXN0PGNo
YXIqPihvYmplY3QpICsgc2l6ZTsKIApAQCAtMTI3LDYgKzE1MSw4OSBAQCBpbmxpbmUgRW5kVGFn
KiBMYXJnZUNodW5rOjplbmRUYWcodm9pZCogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVuZFRh
Zyo+KCZjaHVuay0+bV9ib3VuZGFyeVRhZ3NbYm91bmRhcnlUYWdOdW1iZXJdKTsKIH0KIAoraW5s
aW5lIHNpemVfdCBMYXJnZUNodW5rOjpvZmZzZXQodm9pZCogb2JqZWN0KQoreworICAgIEJBU1NF
UlQob2JqZWN0ID49IHRoaXMpOworICAgIEJBU1NFUlQob2JqZWN0IDwgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4odGhpcykgKyBsYXJnZUNodW5rU2l6ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNoYXIqPihvYmplY3QpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyk7Cit9CisKK2lu
bGluZSB2b2lkKiBMYXJnZUNodW5rOjpvYmplY3Qoc2l6ZV90IG9mZnNldCkKK3sKKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXQ7Cit9CisKK2lubGluZSBT
bWFsbFBhZ2UqIExhcmdlQ2h1bms6OnBhZ2Uoc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzaXplX3Qg
cGFnZU51bWJlciA9IG9mZnNldCAvIHZtUGFnZVNpemU7CisgICAgcmV0dXJuICZtX3BhZ2VzW3Bh
Z2VOdW1iZXJdOworfQorCitpbmxpbmUgU21hbGxMaW5lKiBMYXJnZUNodW5rOjpsaW5lKHNpemVf
dCBvZmZzZXQpCit7CisgICAgc2l6ZV90IGxpbmVOdW1iZXIgPSBvZmZzZXQgLyBzbWFsbExpbmVT
aXplOworICAgIHJldHVybiAmbV9saW5lc1tsaW5lTnVtYmVyXTsKK30KKworaW5saW5lIGNoYXIq
IFNtYWxsTGluZTo6YmVnaW4oKQoreworICAgIExhcmdlQ2h1bmsqIGNodW5rID0gTGFyZ2VDaHVu
azo6Z2V0KHRoaXMpOworICAgIHNpemVfdCBsaW5lTnVtYmVyID0gdGhpcyAtIGNodW5rLT5saW5l
cygpOworICAgIHNpemVfdCBvZmZzZXQgPSBsaW5lTnVtYmVyICogc21hbGxMaW5lU2l6ZTsKKyAg
ICByZXR1cm4gJnJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNodW5rKVtvZmZzZXRdOworfQorCitp
bmxpbmUgY2hhciogU21hbGxMaW5lOjplbmQoKQoreworICAgIHJldHVybiBiZWdpbigpICsgc21h
bGxMaW5lU2l6ZTsKK30KKworaW5saW5lIFNtYWxsTGluZSogU21hbGxQYWdlOjpiZWdpbigpCit7
CisgICAgTGFyZ2VDaHVuayogY2h1bmsgPSBMYXJnZUNodW5rOjpnZXQodGhpcyk7CisgICAgc2l6
ZV90IHBhZ2VOdW1iZXIgPSB0aGlzIC0gY2h1bmstPnBhZ2VzKCk7CisgICAgc2l6ZV90IGxpbmVO
dW1iZXIgPSBwYWdlTnVtYmVyICogc21hbGxMaW5lQ291bnQ7CisgICAgcmV0dXJuICZjaHVuay0+
bGluZXMoKVtsaW5lTnVtYmVyXTsKK30KKworaW5saW5lIFNtYWxsTGluZSogU21hbGxQYWdlOjpl
bmQoKQoreworICAgIHJldHVybiBiZWdpbigpICsgc21hbGxMaW5lQ291bnQ7Cit9CisKK2lubGlu
ZSBPYmplY3Q6Ok9iamVjdCh2b2lkKiBvYmplY3QpCisgICAgOiBtX2NodW5rKExhcmdlQ2h1bms6
OmdldChvYmplY3QpKQorICAgICwgbV9vZmZzZXQobV9jaHVuay0+b2Zmc2V0KG9iamVjdCkpCit7
Cit9CisKK2lubGluZSBPYmplY3Q6Ok9iamVjdChMYXJnZUNodW5rKiBjaHVuaywgdm9pZCogb2Jq
ZWN0KQorICAgIDogbV9jaHVuayhjaHVuaykKKyAgICAsIG1fb2Zmc2V0KG1fY2h1bmstPm9mZnNl
dChvYmplY3QpKQoreworICAgIEJBU1NFUlQoY2h1bmsgPT0gTGFyZ2VDaHVuazo6Z2V0KG9iamVj
dCkpOworfQorCitpbmxpbmUgdm9pZCogT2JqZWN0OjpiZWdpbigpCit7CisgICAgcmV0dXJuIG1f
Y2h1bmstPm9iamVjdChtX29mZnNldCk7Cit9CisKK2lubGluZSB2b2lkKiBPYmplY3Q6OnBhZ2VC
ZWdpbigpCit7CisgICAgcmV0dXJuIG1fY2h1bmstPm9iamVjdChyb3VuZERvd25Ub011bHRpcGxl
T2Yodm1QYWdlU2l6ZSwgbV9vZmZzZXQpKTsKK30KKworaW5saW5lIFNtYWxsTGluZSogT2JqZWN0
OjpsaW5lKCkKK3sKKyAgICByZXR1cm4gbV9jaHVuay0+bGluZShtX29mZnNldCk7Cit9CisKK2lu
bGluZSBTbWFsbFBhZ2UqIE9iamVjdDo6cGFnZSgpCit7CisgICAgcmV0dXJuIG1fY2h1bmstPnBh
Z2UobV9vZmZzZXQpOworfQorCiB9OyAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCiAjZW5kaWYgLy8g
TGFyZ2VDaHVuawpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdC5oCShyZXZpc2lvbiAxOTg2NTUp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwyMiArMjgsMjQgQEAKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi1jbGFzcyBTbWFsbENodW5r
OworY2xhc3MgTGFyZ2VDaHVuazsKIGNsYXNzIFNtYWxsTGluZTsKIGNsYXNzIFNtYWxsUGFnZTsK
IAogY2xhc3MgT2JqZWN0IHsKIHB1YmxpYzoKICAgICBPYmplY3Qodm9pZCopOwotICAgIE9iamVj
dChTbWFsbENodW5rKiwgdm9pZCopOworICAgIE9iamVjdChMYXJnZUNodW5rKiwgdm9pZCopOwog
ICAgIAotICAgIFNtYWxsQ2h1bmsqIGNodW5rKCkgeyByZXR1cm4gbV9jaHVuazsgfQorICAgIExh
cmdlQ2h1bmsqIGNodW5rKCkgeyByZXR1cm4gbV9jaHVuazsgfQorICAgIHZvaWQqIGJlZ2luKCk7
CisgICAgdm9pZCogcGFnZUJlZ2luKCk7CiAKICAgICBTbWFsbExpbmUqIGxpbmUoKTsKICAgICBT
bWFsbFBhZ2UqIHBhZ2UoKTsKIAogcHJpdmF0ZToKLSAgICBTbWFsbENodW5rKiBtX2NodW5rOwor
ICAgIExhcmdlQ2h1bmsqIG1fY2h1bms7CiAgICAgc2l6ZV90IG1fb2Zmc2V0OwogfTsKIApJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuY3BwCShyZXZpc2lvbiAxOTg2NTUpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMywyMCArMjMsMTkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbmNsdWRlICJMYXJn
ZUNodW5rLmgiCiAjaW5jbHVkZSAiT2JqZWN0VHlwZS5oIgogCisjaW5jbHVkZSAiTGFyZ2VDaHVu
ay5oIgorI2luY2x1ZGUgIk9iamVjdC5oIgorCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIE9iamVj
dFR5cGUgb2JqZWN0VHlwZSh2b2lkKiBvYmplY3QpCiB7Ci0gICAgaWYgKGlzU21hbGwob2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIFNtYWxsOwotICAgIAotICAgIGlmICghaXNYTGFyZ2Uob2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIExhcmdlOworICAgIGlmIChpc1hMYXJnZShvYmplY3QpKQorICAg
ICAgICByZXR1cm4gT2JqZWN0VHlwZTo6WExhcmdlOwogICAgIAotICAgIHJldHVybiBYTGFyZ2U7
CisgICAgcmV0dXJuIE9iamVjdChvYmplY3QpLnBhZ2UoKS0+b2JqZWN0VHlwZSgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVj
dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUu
aAkocmV2aXNpb24gMTk4NjU1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxMCBAQAogCiBuYW1lc3BhY2UgYm1hbGxv
YyB7CiAKLWVudW0gT2JqZWN0VHlwZSB7IFNtYWxsLCBMYXJnZSwgWExhcmdlIH07CitlbnVtIGNs
YXNzIE9iamVjdFR5cGUgOiB1bnNpZ25lZCBjaGFyIHsgU21hbGwsIExhcmdlLCBYTGFyZ2UgfTsK
IAogT2JqZWN0VHlwZSBvYmplY3RUeXBlKHZvaWQqKTsKIAotaW5saW5lIGJvb2wgaXNTbWFsbCh2
b2lkKiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIHRlc3Qob2JqZWN0LCBzbWFsbE1hc2spOwotfQot
CiBpbmxpbmUgYm9vbCBpc1hMYXJnZSh2b2lkKiBvYmplY3QpCiB7CiAgICAgcmV0dXJuICF0ZXN0
KG9iamVjdCwgfnhMYXJnZU1hc2spOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TZWdy
ZWdhdGVkRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Nl
Z3JlZ2F0ZWRGcmVlTGlzdC5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3
IEBAIHByaXZhdGU6CiAgICAgRnJlZUxpc3QmIHNlbGVjdChzaXplX3QpOwogCiAgICAgVk1TdGF0
ZTo6SGFzUGh5c2ljYWwgbV9oYXNQaHlzaWNhbDsKLSAgICBzdGQ6OmFycmF5PEZyZWVMaXN0LCAx
NT4gbV9mcmVlTGlzdHM7CisgICAgc3RkOjphcnJheTxGcmVlTGlzdCwgMTY+IG1fZnJlZUxpc3Rz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9TaXplcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMu
aAkocmV2aXNpb24gMTk4NjU1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw0MiArNTEsMjggQEAgbmFtZXNwYWNlIFNpemVzIHsKICNlbHNl
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB2bVBhZ2VTaXplID0gNCAqIGtCOwogI2VuZGlmCi0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCB2bVBhZ2VNYXNrID0gfih2bVBhZ2VTaXplIC0gMSk7CiAg
ICAgCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzdXBlckNodW5rU2l6ZSA9IDIgKiBNQjsKLSAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1cGVyQ2h1bmtNYXNrID0gfihzdXBlckNodW5rU2l6ZSAt
IDEpOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbENodW5rU2l6ZSA9IHN1cGVyQ2h1
bmtTaXplIC8gMjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsQ2h1bmtPZmZzZXQgPSBz
dXBlckNodW5rU2l6ZSAvIDI7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbENodW5rTWFz
ayA9IH4oc21hbGxDaHVua1NpemUgLSAxdWwpOwotCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
bWFsbExpbmVTaXplID0gMjU2OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5lQ291
bnQgPSB2bVBhZ2VTaXplIC8gc21hbGxMaW5lU2l6ZTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qgc21hbGxNYXggPSAxICoga0I7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXNrU2l6ZUNs
YXNzTWF4ID0gNTEyOwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUNodW5rU2l6ZSA9
IHN1cGVyQ2h1bmtTaXplIC8gMjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQ2h1bmtP
ZmZzZXQgPSAwOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VDaHVua1NpemUgPSAyICog
TUI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUNodW5rTWFzayA9IH4obGFyZ2VDaHVu
a1NpemUgLSAxdWwpOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUFsaWdubWVudCA9
IDY0OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VNaW4gPSBzbWFsbE1heDsKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQ2h1bmtNZXRhZGF0YVNpemUgPSA0ICoga0I7IC8vIHNp
emVvZihMYXJnZUNodW5rKQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VPYmplY3RNYXgg
PSBsYXJnZUNodW5rU2l6ZSAtIGxhcmdlQ2h1bmtNZXRhZGF0YVNpemU7CisgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBsYXJnZU9iamVjdE1heCA9IGxhcmdlQ2h1bmtTaXplOwogICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgbGFyZ2VNYXggPSBsYXJnZU9iamVjdE1heCAvIDI7CiAKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHhMYXJnZUFsaWdubWVudCA9IHN1cGVyQ2h1bmtTaXplOworICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgeExhcmdlQWxpZ25tZW50ID0gbGFyZ2VDaHVua1NpemU7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCB4TGFyZ2VNYXNrID0gfih4TGFyZ2VBbGlnbm1lbnQgLSAxKTsKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZU1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkgLSB4TGFyZ2VBbGlnbm1lbnQ7IC8vIE1ha2Ugc3VyZSB0aGF0IHJvdW5kaW5n
IHVwIHRvIHhMYXJnZUFsaWdubWVudCBkb2VzIG5vdCBvdmVyZmxvdy4KIAogICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgZnJlZUxpc3RTZWFyY2hEZXB0aCA9IDE2OwogICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgZnJlZUxpc3RHcm93RmFjdG9yID0gMjsKIAotICAgIHN0YXRpYyBjb25zdCB1aW50cHRy
X3QgdHlwZU1hc2sgPSAoc3VwZXJDaHVua1NpemUgLSAxKSAmIH4oKHN1cGVyQ2h1bmtTaXplIC8g
MikgLSAxKTsgLy8gMiB0YWdnYWJsZSBjaHVua3MKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90
IGxhcmdlTWFzayA9IHR5cGVNYXNrICYgKHN1cGVyQ2h1bmtTaXplICsgbGFyZ2VDaHVua09mZnNl
dCk7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBzbWFsbE1hc2sgPSB0eXBlTWFzayAmIChz
dXBlckNodW5rU2l6ZSArIHNtYWxsQ2h1bmtPZmZzZXQpOwotCiAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBkZWFsbG9jYXRvckxvZ0NhcGFjaXR5ID0gMjU2OwogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgYnVtcFJhbmdlQ2FjaGVDYXBhY2l0eSA9IDM7CiAgICAgCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1NtYWxsQ2h1bmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1NtYWxsQ2h1bmsuaAkocmV2aXNpb24gMTk4NjU1KQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9TbWFsbENodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNt
YWxsQ2h1bmtfaAotI2RlZmluZSBTbWFsbENodW5rX2gKLQotI2luY2x1ZGUgIk9iamVjdC5oIgot
I2luY2x1ZGUgIlNpemVzLmgiCi0jaW5jbHVkZSAiU21hbGxMaW5lLmgiCi0jaW5jbHVkZSAiU21h
bGxQYWdlLmgiCi0jaW5jbHVkZSAiVk1BbGxvY2F0ZS5oIgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7
Ci0KLWNsYXNzIFNtYWxsQ2h1bmsgewotcHVibGljOgotICAgIFNtYWxsQ2h1bmsoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYpOwotCi0gICAgc3RhdGljIFNtYWxsQ2h1bmsqIGdldCh2b2lk
Kik7Ci0gICAgc2l6ZV90IG9mZnNldCh2b2lkKik7Ci0KLSAgICB2b2lkKiBvYmplY3Qoc2l6ZV90
IG9mZnNldCk7Ci0gICAgU21hbGxQYWdlKiBwYWdlKHNpemVfdCBvZmZzZXQpOwotICAgIFNtYWxs
TGluZSogbGluZShzaXplX3Qgb2Zmc2V0KTsKLQotICAgIFNtYWxsUGFnZSogYmVnaW4oKSB7IHJl
dHVybiBPYmplY3QobV9tZW1vcnkpLnBhZ2UoKTsgfQotICAgIFNtYWxsUGFnZSogZW5kKCkgeyBy
ZXR1cm4gbV9wYWdlcy5lbmQoKTsgfQotICAgIAotICAgIFNtYWxsTGluZSogbGluZXMoKSB7IHJl
dHVybiBtX2xpbmVzLmJlZ2luKCk7IH0KLSAgICBTbWFsbFBhZ2UqIHBhZ2VzKCkgeyByZXR1cm4g
bV9wYWdlcy5iZWdpbigpOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHN0ZDo6YXJyYXk8U21hbGxM
aW5lLCBzbWFsbENodW5rU2l6ZSAvIHNtYWxsTGluZVNpemU+IG1fbGluZXM7Ci0gICAgc3RkOjph
cnJheTxTbWFsbFBhZ2UsIHNtYWxsQ2h1bmtTaXplIC8gdm1QYWdlU2l6ZT4gbV9wYWdlczsKLSAg
ICBjaGFyIG1fbWVtb3J5W10gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyICogc21hbGxNYXggKyAw
KSkpOwotfTsKLQotc3RhdGljX2Fzc2VydCghKHZtUGFnZVNpemUgJSBzbWFsbExpbmVTaXplKSwg
InZtUGFnZVNpemUgbXVzdCBiZSBhbiBldmVuIG11bHRpcGxlIG9mIGxpbmUgc2l6ZSIpOwotc3Rh
dGljX2Fzc2VydCghKHNtYWxsQ2h1bmtTaXplICUgc21hbGxMaW5lU2l6ZSksICJjaHVuayBzaXpl
IG11c3QgYmUgYW4gZXZlbiBtdWx0aXBsZSBvZiBsaW5lIHNpemUiKTsKLXN0YXRpY19hc3NlcnQo
Ci0gICAgc2l6ZW9mKFNtYWxsQ2h1bmspICUgdm1QYWdlU2l6ZSArIDIgKiBzbWFsbE1heCA8PSB2
bVBhZ2VTaXplLAotICAgICJ0aGUgZmlyc3QgcGFnZSBvZiBvYmplY3QgbWVtb3J5IGluIGEgc21h
bGwgY2h1bmsgbXVzdCBiZSBhYmxlIHRvIGFsbG9jYXRlIHNtYWxsTWF4Iik7Ci0KLWlubGluZSBT
bWFsbENodW5rOjpTbWFsbENodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2sp
Ci17Ci0gICAgLy8gVHJhY2sgdGhlIG1lbW9yeSB1c2VkIGZvciBtZXRhZGF0YSBieSBhbGxvY2F0
aW5nIGltYWdpbmFyeSBvYmplY3RzLgotICAgIGZvciAoY2hhciogaXQgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPih0aGlzKTsgaXQgPCBtX21lbW9yeTsgaXQgKz0gc21hbGxMaW5lU2l6ZSkgewot
ICAgICAgICBPYmplY3Qgb2JqZWN0KGl0KTsKLSAgICAgICAgb2JqZWN0LmxpbmUoKS0+cmVmKGxv
Y2spOwotICAgICAgICBvYmplY3QucGFnZSgpLT5yZWYobG9jayk7Ci0gICAgfQotfQotCi1pbmxp
bmUgU21hbGxDaHVuayogU21hbGxDaHVuazo6Z2V0KHZvaWQqIG9iamVjdCkKLXsKLSAgICBCQVNT
RVJUKGlzU21hbGwob2JqZWN0KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNtYWxsQ2h1bmsq
PihtYXNrKG9iamVjdCwgc21hbGxDaHVua01hc2spKTsKLX0KLQotaW5saW5lIHNpemVfdCBTbWFs
bENodW5rOjpvZmZzZXQodm9pZCogb2JqZWN0KQotewotICAgIEJBU1NFUlQob2JqZWN0ID49IHRo
aXMpOwotICAgIEJBU1NFUlQob2JqZWN0IDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykg
KyBzbWFsbENodW5rU2l6ZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3Qp
IC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyk7Ci19Ci0KLWlubGluZSB2b2lkKiBTbWFs
bENodW5rOjpvYmplY3Qoc2l6ZV90IG9mZnNldCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXQ7Ci19Ci0KLWlubGluZSBTbWFsbFBhZ2UqIFNtYWxs
Q2h1bms6OnBhZ2Uoc2l6ZV90IG9mZnNldCkKLXsKLSAgICBzaXplX3QgcGFnZU51bWJlciA9IG9m
ZnNldCAvIHZtUGFnZVNpemU7Ci0gICAgcmV0dXJuICZtX3BhZ2VzW3BhZ2VOdW1iZXJdOwotfQot
Ci1pbmxpbmUgU21hbGxMaW5lKiBTbWFsbENodW5rOjpsaW5lKHNpemVfdCBvZmZzZXQpCi17Ci0g
ICAgc2l6ZV90IGxpbmVOdW1iZXIgPSBvZmZzZXQgLyBzbWFsbExpbmVTaXplOwotICAgIHJldHVy
biAmbV9saW5lc1tsaW5lTnVtYmVyXTsKLX0KLQotaW5saW5lIGNoYXIqIFNtYWxsTGluZTo6YmVn
aW4oKQotewotICAgIFNtYWxsQ2h1bmsqIGNodW5rID0gU21hbGxDaHVuazo6Z2V0KHRoaXMpOwot
ICAgIHNpemVfdCBsaW5lTnVtYmVyID0gdGhpcyAtIGNodW5rLT5saW5lcygpOwotICAgIHNpemVf
dCBvZmZzZXQgPSBsaW5lTnVtYmVyICogc21hbGxMaW5lU2l6ZTsKLSAgICByZXR1cm4gJnJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNodW5rKVtvZmZzZXRdOwotfQotCi1pbmxpbmUgY2hhciogU21h
bGxMaW5lOjplbmQoKQotewotICAgIHJldHVybiBiZWdpbigpICsgc21hbGxMaW5lU2l6ZTsKLX0K
LQotaW5saW5lIFNtYWxsTGluZSogU21hbGxQYWdlOjpiZWdpbigpCi17Ci0gICAgU21hbGxDaHVu
ayogY2h1bmsgPSBTbWFsbENodW5rOjpnZXQodGhpcyk7Ci0gICAgc2l6ZV90IHBhZ2VOdW1iZXIg
PSB0aGlzIC0gY2h1bmstPnBhZ2VzKCk7Ci0gICAgc2l6ZV90IGxpbmVOdW1iZXIgPSBwYWdlTnVt
YmVyICogc21hbGxMaW5lQ291bnQ7Ci0gICAgcmV0dXJuICZjaHVuay0+bGluZXMoKVtsaW5lTnVt
YmVyXTsKLX0KLQotaW5saW5lIFNtYWxsTGluZSogU21hbGxQYWdlOjplbmQoKQotewotICAgIHJl
dHVybiBiZWdpbigpICsgc21hbGxMaW5lQ291bnQ7Ci19Ci0KLWlubGluZSBPYmplY3Q6Ok9iamVj
dCh2b2lkKiBvYmplY3QpCi0gICAgOiBtX2NodW5rKFNtYWxsQ2h1bms6OmdldChvYmplY3QpKQot
ICAgICwgbV9vZmZzZXQobV9jaHVuay0+b2Zmc2V0KG9iamVjdCkpCi17Ci19Ci0KLWlubGluZSBP
YmplY3Q6Ok9iamVjdChTbWFsbENodW5rKiBjaHVuaywgdm9pZCogb2JqZWN0KQotICAgIDogbV9j
aHVuayhjaHVuaykKLSAgICAsIG1fb2Zmc2V0KG1fY2h1bmstPm9mZnNldChvYmplY3QpKQotewot
ICAgIEJBU1NFUlQoY2h1bmsgPT0gU21hbGxDaHVuazo6Z2V0KG9iamVjdCkpOwotfQotCi1pbmxp
bmUgU21hbGxMaW5lKiBPYmplY3Q6OmxpbmUoKQotewotICAgIHJldHVybiBtX2NodW5rLT5saW5l
KG1fb2Zmc2V0KTsKLX0KLQotaW5saW5lIFNtYWxsUGFnZSogT2JqZWN0OjpwYWdlKCkKLXsKLSAg
ICByZXR1cm4gbV9jaHVuay0+cGFnZShtX29mZnNldCk7Ci19Ci0KLX07IC8vIG5hbWVzcGFjZSBi
bWFsbG9jCi0KLSNlbmRpZiAvLyBDaHVuawpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9T
bWFsbFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFn
ZS5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIFNtYWxsUGFnZSA6IHB1
YmxpYyBMaXN0Tm9kZTxTbWFsbFAKIHB1YmxpYzoKICAgICBTbWFsbFBhZ2UoKQogICAgICAgICA6
IG1faGFzRnJlZUxpbmVzKHRydWUpCisgICAgICAgICwgbV9vYmplY3RUeXBlKE9iamVjdFR5cGU6
OkxhcmdlKQogICAgIHsKICAgICB9CiAKQEAgLTQ4LDYgKzQ5LDkgQEAgcHVibGljOgogICAgIHNp
emVfdCBzaXplQ2xhc3MoKSB7IHJldHVybiBtX3NpemVDbGFzczsgfQogICAgIHZvaWQgc2V0U2l6
ZUNsYXNzKHNpemVfdCBzaXplQ2xhc3MpIHsgbV9zaXplQ2xhc3MgPSBzaXplQ2xhc3M7IH0KICAg
ICAKKyAgICBPYmplY3RUeXBlIG9iamVjdFR5cGUoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFR5
cGU7IH0KKyAgICB2b2lkIHNldE9iamVjdFR5cGUoT2JqZWN0VHlwZSBvYmplY3RUeXBlKSB7IG1f
b2JqZWN0VHlwZSA9IG9iamVjdFR5cGU7IH0KKwogICAgIGJvb2wgaGFzRnJlZUxpbmVzKHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKSBjb25zdCB7IHJldHVybiBtX2hhc0ZyZWVMaW5lczsg
fQogICAgIHZvaWQgc2V0SGFzRnJlZUxpbmVzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
LCBib29sIGhhc0ZyZWVMaW5lcykgeyBtX2hhc0ZyZWVMaW5lcyA9IGhhc0ZyZWVMaW5lczsgfQog
ICAgIApAQCAtNTgsNiArNjIsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIGNoYXIgbV9oYXNG
cmVlTGluZXM6IDE7CiAgICAgdW5zaWduZWQgY2hhciBtX3JlZkNvdW50OiA3OwogICAgIHVuc2ln
bmVkIGNoYXIgbV9zaXplQ2xhc3M7CisgICAgT2JqZWN0VHlwZSBtX29iamVjdFR5cGU7CiAKIHN0
YXRpY19hc3NlcnQoCiAgICAgc2l6ZUNsYXNzQ291bnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czxk
ZWNsdHlwZShtX3NpemVDbGFzcyk+OjptYXgoKSwKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvU3VwZXJDaHVuay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3Vw
ZXJDaHVuay5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N1
cGVyQ2h1bmsuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU3VwZXJDaHVua19oCi0j
ZGVmaW5lIFN1cGVyQ2h1bmtfaAotCi0jaW5jbHVkZSAiTGFyZ2VDaHVuay5oIgotI2luY2x1ZGUg
IlNtYWxsQ2h1bmsuaCIKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1jbGFzcyBTdXBlckNodW5r
IHsKLXB1YmxpYzoKLSAgICBTdXBlckNodW5rKCk7Ci0KLSAgICB2b2lkKiBzbWFsbENodW5rKCk7
Ci0gICAgdm9pZCogbGFyZ2VDaHVuaygpOwotfTsKLQotaW5saW5lIFN1cGVyQ2h1bms6OlN1cGVy
Q2h1bmsoKQotewotICAgIEJBU1NFUlQoIXRlc3QodGhpcywgfnN1cGVyQ2h1bmtNYXNrKSk7Ci0g
ICAgQkFTU0VSVCghdGVzdChzbWFsbENodW5rKCksIH5zbWFsbENodW5rTWFzaykpOwotICAgIEJB
U1NFUlQoIXRlc3QobGFyZ2VDaHVuaygpLCB+bGFyZ2VDaHVua01hc2spKTsKLX0KLQotaW5saW5l
IHZvaWQqIFN1cGVyQ2h1bms6OnNtYWxsQ2h1bmsoKQotewotICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPih0aGlzKSArIHNtYWxsQ2h1bmtPZmZzZXQ7Ci19Ci0KLWlubGluZSB2b2lk
KiBTdXBlckNodW5rOjpsYXJnZUNodW5rKCkKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4odGhpcykgKyBsYXJnZUNodW5rT2Zmc2V0OwotfQotCi19IC8vIG5hbWVzcGFjZSBi
bWFsbG9jCi0KLSNlbmRpZiAvLyBTdXBlckNodW5rX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvVk1IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZN
SGVhcC5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1I
ZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiTGFy
Z2VPYmplY3QuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiU3VwZXJDaHVu
ay5oIgogI2luY2x1ZGUgIlZNSGVhcC5oIgogI2luY2x1ZGUgPHRocmVhZD4KIApAQCAtMzYsMzYg
KzM1LDE2IEBAIFZNSGVhcDo6Vk1IZWFwKCkKIHsKIH0KIAotdm9pZCBWTUhlYXA6OmFsbG9jYXRl
U21hbGxDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQotewotICAgIGlm
ICghbV9zbWFsbENodW5rcy5zaXplKCkpCi0gICAgICAgIGFsbG9jYXRlU3VwZXJDaHVuayhsb2Nr
KTsKLQotICAgIC8vIFdlIGluaXRpYWxpemUgY2h1bmtzIGxhemlseSB0byBhdm9pZCBkaXJ0eWlu
ZyB0aGVpciBtZXRhZGF0YSBwYWdlcy4KLSAgICBTbWFsbENodW5rKiBzbWFsbENodW5rID0gbmV3
IChtX3NtYWxsQ2h1bmtzLnBvcCgpLT5zbWFsbENodW5rKCkpIFNtYWxsQ2h1bmsobG9jayk7Ci0g
ICAgZm9yIChhdXRvKiBpdCA9IHNtYWxsQ2h1bmstPmJlZ2luKCk7IGl0IDwgc21hbGxDaHVuay0+
ZW5kKCk7ICsraXQpCi0gICAgICAgIG1fc21hbGxQYWdlcy5wdXNoKGl0KTsKLX0KLQogTGFyZ2VP
YmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYgbG9jaykKIHsKLSAgICBpZiAoIW1fbGFyZ2VDaHVua3Muc2l6ZSgpKQotICAgICAgICBh
bGxvY2F0ZVN1cGVyQ2h1bmsobG9jayk7Ci0KLSAgICAvLyBXZSBpbml0aWFsaXplIGNodW5rcyBs
YXppbHkgdG8gYXZvaWQgZGlydHlpbmcgdGhlaXIgbWV0YWRhdGEgcGFnZXMuCi0gICAgTGFyZ2VD
aHVuayogbGFyZ2VDaHVuayA9IG5ldyAobV9sYXJnZUNodW5rcy5wb3AoKS0+bGFyZ2VDaHVuaygp
KSBMYXJnZUNodW5rOwotICAgIHJldHVybiBMYXJnZU9iamVjdChsYXJnZUNodW5rLT5iZWdpbigp
KTsKLX0KKyAgICBMYXJnZUNodW5rKiBsYXJnZUNodW5rID0KKyAgICAgICAgbmV3ICh2bUFsbG9j
YXRlKGxhcmdlQ2h1bmtTaXplLCBsYXJnZUNodW5rU2l6ZSkpIExhcmdlQ2h1bmsobG9jayk7CiAK
LXZvaWQgVk1IZWFwOjphbGxvY2F0ZVN1cGVyQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYpCi17Ci0gICAgU3VwZXJDaHVuayogc3VwZXJDaHVuayA9Ci0gICAgICAgIG5ldyAodm1B
bGxvY2F0ZShzdXBlckNodW5rU2l6ZSwgc3VwZXJDaHVua1NpemUpKSBTdXBlckNodW5rOwotICAg
IG1fc21hbGxDaHVua3MucHVzaChzdXBlckNodW5rKTsKLSAgICBtX2xhcmdlQ2h1bmtzLnB1c2go
c3VwZXJDaHVuayk7CiAjaWYgQk9TKERBUldJTikKLSAgICBtX3pvbmUuYWRkU3VwZXJDaHVuayhz
dXBlckNodW5rKTsKKyAgICBtX3pvbmUuYWRkTGFyZ2VDaHVuayhsYXJnZUNodW5rKTsKICNlbmRp
ZgorCisgICAgcmV0dXJuIExhcmdlT2JqZWN0KGxhcmdlQ2h1bmstPmJlZ2luKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVh
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgJKHJldmlz
aW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJMYXJnZU9iamVjdC5oIgogI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2VncmVnYXRlZEZyZWVMaXN0LmgiCi0jaW5jbHVkZSAi
U21hbGxDaHVuay5oIgogI2luY2x1ZGUgIlZNU3RhdGUuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIK
ICNpZiBCT1MoREFSV0lOKQpAQCAtNDQsNDUgKzQzLDI2IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsK
IGNsYXNzIEJlZ2luVGFnOwogY2xhc3MgRW5kVGFnOwogY2xhc3MgSGVhcDsKLWNsYXNzIFN1cGVy
Q2h1bms7CiAKIGNsYXNzIFZNSGVhcCB7CiBwdWJsaWM6CiAgICAgVk1IZWFwKCk7CiAKLSAgICBT
bWFsbFBhZ2UqIGFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
KTsKICAgICBMYXJnZU9iamVjdCBhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCBzaXplX3QpOwogICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlTGFyZ2VPYmpl
Y3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCwgc2l6ZV90LCBzaXplX3Qp
OwogCi0gICAgdm9pZCBkZWFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGlj
TXV0ZXg+JiwgU21hbGxQYWdlKik7CiAgICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2VPYmplY3Qoc3Rk
Ojp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBMYXJnZU9iamVjdCk7CiAgICAgCiBwcml2YXRl
OgotICAgIHZvaWQgYWxsb2NhdGVTbWFsbENodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mKTsKICAgICBMYXJnZU9iamVjdCBhbGxvY2F0ZUxhcmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYpOwotICAgIHZvaWQgYWxsb2NhdGVTdXBlckNodW5rKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mKTsKIAotICAgIExpc3Q8U21hbGxQYWdlPiBtX3NtYWxsUGFnZXM7
CiAgICAgU2VncmVnYXRlZEZyZWVMaXN0IG1fbGFyZ2VPYmplY3RzOwogCi0gICAgVmVjdG9yPFN1
cGVyQ2h1bmsqPiBtX3NtYWxsQ2h1bmtzOwotICAgIFZlY3RvcjxTdXBlckNodW5rKj4gbV9sYXJn
ZUNodW5rczsKLQogI2lmIEJPUyhEQVJXSU4pCiAgICAgWm9uZSBtX3pvbmU7CiAjZW5kaWYKIH07
CiAKLWlubGluZSBTbWFsbFBhZ2UqIFZNSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKLXsKLSAgICBpZiAobV9zbWFsbFBhZ2VzLmlzRW1w
dHkoKSkKLSAgICAgICAgYWxsb2NhdGVTbWFsbENodW5rKGxvY2spOwotCi0gICAgU21hbGxQYWdl
KiBwYWdlID0gbV9zbWFsbFBhZ2VzLnBvcCgpOwotICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2Vz
KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHZtUGFnZVNpemUpOwotICAgIHJldHVybiBwYWdlOwot
fQotCiBpbmxpbmUgTGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQogewogICAgIGlmIChM
YXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2Uoc2l6ZSkpCkBAIC0x
MDEsMTUgKzgxLDYgQEAgaW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJnZQog
ICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlQ2h1bmsobG9jayk7CiB9CiAKLWlubGluZSB2b2lkIFZN
SGVhcDo6ZGVhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYg
bG9jaywgU21hbGxQYWdlKiBwYWdlKQotewotICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgdm1EZWFs
bG9jYXRlUGh5c2ljYWxQYWdlcyhwYWdlLT5iZWdpbigpLT5iZWdpbigpLCB2bVBhZ2VTaXplKTsK
LSAgICBsb2NrLmxvY2soKTsKLSAgICAKLSAgICBtX3NtYWxsUGFnZXMucHVzaChwYWdlKTsKLX0K
LQogaW5saW5lIHZvaWQgVk1IZWFwOjpkZWFsbG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjp1bmlxdWVf
bG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KQogewogICAg
IC8vIE11bHRpcGxlIHRocmVhZHMgbWlnaHQgc2NhdmVuZ2UgY29uY3VycmVudGx5LCBtZWFuaW5n
IHRoYXQgbmV3IG1lcmdpbmcgb3Bwb3J0dW5pdGllcwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9ab25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1pvbmUu
Y3BwCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1pvbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCw4IEBAIHN0YXRpYyBzaXplX3Qgem9uZVNpemUo
bWFsbG9jX3pvbmVfdCosIGMKIHN0YXRpYyBrZXJuX3JldHVybl90IGVudW1lcmF0b3IodGFza190
IHRhc2ssIHZvaWQqIGNvbnRleHQsIHVuc2lnbmVkIHR5cGVfbWFzaywgdm1fYWRkcmVzc190IHpv
bmVfYWRkcmVzcywgbWVtb3J5X3JlYWRlcl90IHJlYWRlciwgdm1fcmFuZ2VfcmVjb3JkZXJfdCBy
ZWNvcmRlcikKIHsKICAgICBab25lIHJlbW90ZVpvbmUodGFzaywgcmVhZGVyLCB6b25lX2FkZHJl
c3MpOwotICAgIGZvciAoYXV0byogc3VwZXJDaHVuayA6IHJlbW90ZVpvbmUuc3VwZXJDaHVua3Mo
KSkgewotICAgICAgICB2bV9yYW5nZV90IHJhbmdlID0geyByZWludGVycHJldF9jYXN0PHZtX2Fk
ZHJlc3NfdD4oc3VwZXJDaHVuayksIHN1cGVyQ2h1bmtTaXplIH07CisgICAgZm9yIChhdXRvKiBs
YXJnZUNodW5rIDogcmVtb3RlWm9uZS5sYXJnZUNodW5rcygpKSB7CisgICAgICAgIHZtX3Jhbmdl
X3QgcmFuZ2UgPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihsYXJnZUNodW5rKSwg
bGFyZ2VDaHVua1NpemUgfTsKIAogICAgICAgICBpZiAoKHR5cGVfbWFzayAmIE1BTExPQ19QVFJf
UkVHSU9OX1JBTkdFX1RZUEUpKQogICAgICAgICAgICAgKCpyZWNvcmRlcikodGFzaywgY29udGV4
dCwgTUFMTE9DX1BUUl9SRUdJT05fUkFOR0VfVFlQRSwgJnJhbmdlLCAxKTsKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvWm9uZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvWm9uZS5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1pvbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgYm1h
bGxvYyB7CiAKLWNsYXNzIFN1cGVyQ2h1bms7CitjbGFzcyBMYXJnZUNodW5rOwogCiBjbGFzcyBa
b25lIDogcHVibGljIG1hbGxvY196b25lX3QgewogcHVibGljOgpAQCAtNDEsMzAgKzQxLDMwIEBA
IHB1YmxpYzoKICAgICBab25lKCk7CiAgICAgWm9uZSh0YXNrX3QsIG1lbW9yeV9yZWFkZXJfdCwg
dm1fYWRkcmVzc190KTsKIAotICAgIHZvaWQgYWRkU3VwZXJDaHVuayhTdXBlckNodW5rKik7Ci0g
ICAgRml4ZWRWZWN0b3I8U3VwZXJDaHVuayosIGNhcGFjaXR5PiYgc3VwZXJDaHVua3MoKSB7IHJl
dHVybiBtX3N1cGVyQ2h1bmtzOyB9CisgICAgdm9pZCBhZGRMYXJnZUNodW5rKExhcmdlQ2h1bmsq
KTsKKyAgICBGaXhlZFZlY3RvcjxMYXJnZUNodW5rKiwgY2FwYWNpdHk+JiBsYXJnZUNodW5rcygp
IHsgcmV0dXJuIG1fbGFyZ2VDaHVua3M7IH0KICAgICAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyB2
ZWN0b3IgaGFzIHR3byBwdXJwb3NlczoKLSAgICAvLyAgICAgKDEpIEl0IHN0b3JlcyB0aGUgbGlz
dCBvZiBTdXBlckNodW5rcyBzbyB0aGF0IHdlIGNhbiBlbnVtZXJhdGUKLSAgICAvLyAgICAgICAg
IGVhY2ggU3VwZXJDaHVuayBhbmQgcmVxdWVzdCB0aGF0IGl0IGJlIHNjYW5uZWQgaWYgcmVhY2hh
YmxlLgotICAgIC8vICAgICAoMikgSXQgcm9vdHMgYSBwb2ludGVyIHRvIGVhY2ggU3VwZXJDaHVu
ayBpbiBhIGdsb2JhbCBub24tbWFsbG9jCi0gICAgLy8gICAgICAgICBWTSByZWdpb24sIG1ha2lu
ZyBlYWNoIFN1cGVyQ2h1bmsgYXBwZWFyIHJlYWNoYWJsZSwgYW5kIHRoZXJlZm9yZQorICAgIC8v
ICAgICAoMSkgSXQgc3RvcmVzIHRoZSBsaXN0IG9mIExhcmdlQ2h1bmtzIHNvIHRoYXQgd2UgY2Fu
IGVudW1lcmF0ZQorICAgIC8vICAgICAgICAgZWFjaCBMYXJnZUNodW5rIGFuZCByZXF1ZXN0IHRo
YXQgaXQgYmUgc2Nhbm5lZCBpZiByZWFjaGFibGUuCisgICAgLy8gICAgICgyKSBJdCByb290cyBh
IHBvaW50ZXIgdG8gZWFjaCBMYXJnZUNodW5rIGluIGEgZ2xvYmFsIG5vbi1tYWxsb2MKKyAgICAv
LyAgICAgICAgIFZNIHJlZ2lvbiwgbWFraW5nIGVhY2ggTGFyZ2VDaHVuayBhcHBlYXIgcmVhY2hh
YmxlLCBhbmQgdGhlcmVmb3JlCiAgICAgLy8gICAgICAgICBlbnN1cmluZyB0aGF0IHRoZSBsZWFr
cyB0b29sIHdpbGwgc2NhbiBpdC4gKFRoZSBsZWFrcyB0b29sCiAgICAgLy8gICAgICAgICBjb25z
ZXJ2YXRpdmVseSBzY2FucyBhbGwgd3JpdGVhYmxlIFZNIHJlZ2lvbnMgdGhhdCBhcmUgbm90IG1h
bGxvYwogICAgIC8vICAgICAgICAgcmVnaW9ucywgYW5kIHRoZW4gc2NhbnMgbWFsbG9jIHJlZ2lv
bnMgdXNpbmcgdGhlIGludHJvc3BlY3Rpb24gQVBJLikKICAgICAvLyBUaGlzIHByZXZlbnRzIHRo
ZSBsZWFrcyB0b29sIGZyb20gcmVwb3J0aW5nIGZhbHNlIHBvc2l0aXZlIGxlYWtzIGZvcgogICAg
IC8vIG9iamVjdHMgcG9pbnRlZCB0byBmcm9tIGJtYWxsb2MgbWVtb3J5IC0tIHRob3VnaCBpdCBh
bHNvIHByZXZlbnRzIHRoZQogICAgIC8vIGxlYWtzIHRvb2wgZnJvbSBmaW5kaW5nIGFueSBsZWFr
cyBpbiBibWFsbG9jIG1lbW9yeS4KLSAgICBGaXhlZFZlY3RvcjxTdXBlckNodW5rKiwgY2FwYWNp
dHk+IG1fc3VwZXJDaHVua3M7CisgICAgRml4ZWRWZWN0b3I8TGFyZ2VDaHVuayosIGNhcGFjaXR5
PiBtX2xhcmdlQ2h1bmtzOwogfTsKIAotaW5saW5lIHZvaWQgWm9uZTo6YWRkU3VwZXJDaHVuayhT
dXBlckNodW5rKiBzdXBlckNodW5rKQoraW5saW5lIHZvaWQgWm9uZTo6YWRkTGFyZ2VDaHVuayhM
YXJnZUNodW5rKiBsYXJnZUNodW5rKQogewotICAgIGlmIChtX3N1cGVyQ2h1bmtzLnNpemUoKSA9
PSBtX3N1cGVyQ2h1bmtzLmNhcGFjaXR5KCkpCisgICAgaWYgKG1fbGFyZ2VDaHVua3Muc2l6ZSgp
ID09IG1fbGFyZ2VDaHVua3MuY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IG1fc3VwZXJDaHVua3MucHVzaChzdXBlckNodW5rKTsKKyAgICBtX2xhcmdlQ2h1bmtzLnB1c2go
bGFyZ2VDaHVuayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274878</attachid>
            <date>2016-03-24 20:30:08 -0700</date>
            <delta_ts>2016-03-25 09:08:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155866-20160324203008.patch</filename>
            <type>text/plain</type>
            <size>53822</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODY1OCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OCBAQAorMjAxNi0wMy0yNCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IHNtYWxsIGFu
ZCBsYXJnZSBvYmplY3RzIHNob3VsZCBzaGFyZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTg2NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY3V0cyBvdXIgVk0gZm9vdHBy
aW50IGluIGhhbGYuIChWTSBmb290cHJpbnQgdXN1YWxseSBkb2Vzbid0CisgICAgICAgIG1hdHRl
ciwgYnV0IG9uIGlPUyB0aGVyZSdzIGFuIGFydGlmaWNpYWwgVk0gbGltaXQgYXJvdW5kIDcwME1C
LCBhbmQgaWYKKyAgICAgICAgeW91IGhpdCBpdCB5b3UgamV0c2FtIC8gY3Jhc2guKQorCisgICAg
ICAgIEl0J3MgYWxzbyBhIHN0ZXAgdG93YXJkIGhvbm9yaW5nIHRoZSBoYXJkd2FyZSBwYWdlIHNp
emUgYXQgcnVudGltZSwKKyAgICAgICAgd2hpY2ggd2lsbCByZWR1Y2UgbWVtb3J5IHVzYWdlIG9u
IGlPUy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGEgc21hbGwgaW1wcm92ZW1lbnQgaW4gcGVh
ayBtZW1vcnkgdXNhZ2UgYmVjYXVzZSBpdCBhbGxvd3MKKyAgICAgICAgc21hbGwgYW5kIGxhcmdl
IG9iamVjdHMgdG8gcmVjeWNsZSBlYWNoIG90aGVyJ3MgbWVtb3J5LiBUaGUgdHJhZGVvZmYgaXMK
KyAgICAgICAgdGhhdCB3ZSByZXF1aXJlIG1vcmUgbWV0YWRhdGEsIHdoaWNoIGNhdXNlcyBtb3Jl
IG1lbW9yeSB1c2FnZSB1bmRlciBzb21lCisgICAgICAgIGNvbmRpdGlvbnMgLS0gYWx0aG91Z2gg
d2Ugc3RpbGwgYSBtZW1vcnkgd2luIGluIHRoZSBtZWFuLgorCisgICAgICAgICogYm1hbGxvYy54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBSZW1vdmVkIFN1cGVyQ2h1bmsuCisKKyAgICAgICAg
KiBibWFsbG9jL0FsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJl
YWxsb2NhdGUpOiBBZG9wdCBhIG5ldyBIZWFwIEFQSSBmb3Igc2hyaW5raW5nCisgICAgICAgIGxh
cmdlIG9iamVjdHMgYmVjYXVzZSBpdCdzIGEgbGl0dGxlIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBp
dCB1c2VkIHRvIGJlLgorCisgICAgICAgIERvbid0IGNoZWNrIGZvciBlcXVhbGl0eSBpbiB0aGUg
WExhcmdlIGNhc2UgYmVjYXVzZSB3ZSBkb24ndCBkbyBpdCBpbgorICAgICAgICBvdGhlciBjYXNl
cywgYW5kIGl0J3MgdW5saWtlbHkgdGhhdCB3ZSdsbCBiZSBjYWxsZWQgZm9yIG5vIHJlYXNvbi4K
KworICAgICAgICAqIGJtYWxsb2MvQnVtcEFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6
QnVtcEFsbG9jYXRvcjo6YWxsb2NhdGUpOiBEb24ndCBBU1NFUlQgaXNTbWFsbCBiZWNhdXNlIHRo
YXQncworICAgICAgICBhbiBvbGQgY29uY2VwdCBmcm9tIHdoZW4gc21hbGwgYW5kIGxhcmdlIG9i
amVjdHMgd2VyZSBpbiBkaXN0aW5jdCBtZW1vcnkKKyAgICAgICAgcmVnaW9ucy4KKworICAgICAg
ICAqIGJtYWxsb2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0
b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSk6IExhcmdlIG9iamVjdHMgYXJlIG5vdAorICAgICAgICBz
ZWdyZWdhdGVkIGFueW1vcmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpkZWFs
bG9jYXRlTGFyZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5o
OgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSk6IERv
bid0IEFTU0VSVCBpc1NtYWxsKCkuIFNlZQorICAgICAgICBhYm92ZS4KKworICAgICAgICAqIGJt
YWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZSk6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZXMpOiBOZXcgaGVscGVycyBmb3IgcmV0dXJuaW5nIGNh
Y2hlZAorICAgICAgICBzbWFsbCBwYWdlcyB0byB0aGUgbGFyZ2Ugb2JqZWN0IGhlYXAuCisKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKTogQWxsb2NhdGUgc21hbGwg
cGFnZXMgZnJvbSB0aGUgbGFyZ2UKKyAgICAgICAgb2JqZWN0IGhlYXAuIFRoaXMgaXMgaG93IHdl
IGFjY29tcGxpc2ggc2hhcmluZy4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0
ZVNtYWxsTGluZSk6IEhhbmRsZSBsYXJnZSBvYmplY3RzIHNpbmNlIHdlIGNhbgorICAgICAgICBl
bmNvdW50ZXIgdGhlbSBvbiB0aGlzIGNvZGUgcGF0aCBub3cuCisKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OnNwbGl0QW5kQWxsb2NhdGUpOiBGaXhlZCBhIGJ1ZyB3aGVyZSB3ZSB3b3VsZCBzb21l
dGltZXMKKyAgICAgICAgbm90IHNwbGl0IGV2ZW4gdGhvdWdoIHdlIGNvdWxkLgorCisgICAgICAg
IEFsbG9jYXRpbmcgYSBsYXJnZSBvYmplY3QgYWxzbyByZXF1aXJlcyByZWYnaW5nIGl0cyBzbWFs
bCBsaW5lIHNvIHRoYXQKKyAgICAgICAgd2UgY2FuIGFsaWFzIG1lbW9yeSBiZXR3ZWVuIHNtYWxs
IGFuZCBsYXJnZSBvYmplY3RzLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxh
cmdlKTogUmV0dXJuIGNhY2hlZCBzbWFsbCBwYWdlcyBiZWZvcmUKKyAgICAgICAgYWxsb2NhdGlu
ZyBhIGxhcmdlIG9iamVjdCB0aGF0IHdvdWxkIGZpdCBpbiBhIGNhY2hlZCBzbWFsbCBwYWdlLiBU
aGlzCisgICAgICAgIGFsbG93cyBzb21lIGxhcmdlIGFsbG9jYXRpb25zIHRvIHJldXNlIHNtYWxs
IG9iamVjdCBtZW1vcnkuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKTog
TmV3IGhlbHBlci4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKTog
RGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorCisgICAgICAgICogYm1hbGxv
Yy9MYXJnZUNodW5rLmg6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpwYWdlQmVnaW4p
OgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6cGFnZUVuZCk6CisgICAgICAgIChibWFs
bG9jOjpMYXJnZUNodW5rOjpsaW5lcyk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpw
YWdlcyk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpiZWdpbik6CisgICAgICAgIChi
bWFsbG9jOjpMYXJnZUNodW5rOjplbmQpOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6
TGFyZ2VDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpnZXQpOgorICAgICAg
ICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6ZW5kVGFnKToKKyAgICAgICAgKGJtYWxsb2M6Okxhcmdl
Q2h1bms6Om9mZnNldCk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpvYmplY3QpOgor
ICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6cGFnZSk6CisgICAgICAgIChibWFsbG9jOjpM
YXJnZUNodW5rOjpsaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsTGluZTo6YmVnaW4pOgor
ICAgICAgICAoYm1hbGxvYzo6U21hbGxMaW5lOjplbmQpOgorICAgICAgICAoYm1hbGxvYzo6U21h
bGxQYWdlOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpPYmplY3Q6Ok9iamVjdCk6CisgICAgICAgIChibWFsbG9jOjpPYmplY3Q6
OmJlZ2luKToKKyAgICAgICAgKGJtYWxsb2M6Ok9iamVjdDo6cGFnZUJlZ2luKToKKyAgICAgICAg
KGJtYWxsb2M6Ok9iamVjdDo6bGluZSk6CisgICAgICAgIChibWFsbG9jOjpPYmplY3Q6OnBhZ2Up
OiBJIG1lcmdlZCBhbGwgdGhlIFNtYWxsQ2h1bmsgbWV0YWRhdGEgYW5kIGNvZGUKKyAgICAgICAg
aW50byBMYXJnZUNodW5rLiBOb3cgd2UgdXNlIGEgc2luZ2xlIGNsYXNzIHRvIHRyYWNrIGJvdGgg
c21hbGwgYW5kIGxhcmdlCisgICAgICAgIG1ldGFkYXRhLCBzbyB3ZSBjYW4gc2hhcmUgbWVtb3J5
IGJldHdlZW4gc21hbGwgYW5kIGxhcmdlIG9iamVjdHMuCisKKyAgICAgICAgSSdtIGdvaW5nIHRv
IHJlbmFtZSB0aGlzIGNsYXNzIHRvIENodW5rIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisgICAg
ICAgICogYm1hbGxvYy9PYmplY3QuaDoKKyAgICAgICAgKGJtYWxsb2M6Ok9iamVjdDo6Y2h1bmsp
OiBVcGRhdGVkIGZvciBMYXJnZUNodW5rIHRyYW5zaXRpb24uCisKKyAgICAgICAgKiBibWFsbG9j
L09iamVjdFR5cGUuY3BwOgorICAgICAgICAoYm1hbGxvYzo6b2JqZWN0VHlwZSk6CisgICAgICAg
ICogYm1hbGxvYy9PYmplY3RUeXBlLmg6CisgICAgICAgIChibWFsbG9jOjppc1hMYXJnZSk6Cisg
ICAgICAgIChibWFsbG9jOjppc1NtYWxsKTogRGVsZXRlZC4gVGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biBzbWFsbCBhbmQgbGFyZ2UKKyAgICAgICAgb2JqZWN0cyBpcyBub3cgc3RvcmVkIGluIG1ldGFk
YXRhIGFuZCBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGVpcgorICAgICAgICB2aXJ0dWFsIGFkZHJl
c3MgcmFuZ2UuCisKKyAgICAgICAgKiBibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oOiBPbmUg
bW9yZSBlbnRyeSBiZWNhdXNlIHdlIGNvdmVyIGFsbCBvZgorICAgICAgICB3aGF0IHVzZWQgdG8g
YmUgdGhlIHN1cGVyIGNodW5rIGluIGEgbGFyZ2UgY2h1bmsgbm93LgorCisgICAgICAgICogYm1h
bGxvYy9TaXplcy5oOiBSZW1vdmVkIGJpdCBtYXNraW5nIGhlbHBlcnMgYmVjYXVzZSB3ZSBkb24n
dCB1c2UKKyAgICAgICAgYWRkcmVzcyBtYXNrcyB0byBkaXN0aW5ndWlzaCBzbWFsbCB2cyBsYXJn
ZSBvYmplY3QgdHlwZSBhbnltb3JlLgorCisgICAgICAgICogYm1hbGxvYy9TbWFsbENodW5rLmg6
IFJlbW92ZWQuCisKKyAgICAgICAgKiBibWFsbG9jL1NtYWxsUGFnZS5oOgorICAgICAgICAoYm1h
bGxvYzo6U21hbGxQYWdlOjpTbWFsbFBhZ2UpOiBTdG9yZSBvYmplY3QgdHlwZSBwZXIgcGFnZSBi
ZWNhdXNlIGFueQorICAgICAgICBnaXZlbiBwYWdlIGNhbiBiZSB1c2VkIGZvciBsYXJnZSBvYmpl
Y3RzIG9yIHNtYWxsIG9iamVjdHMuCisKKyAgICAgICAgKiBibWFsbG9jL1N1cGVyQ2h1bmsuaDog
UmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvVk1IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxs
b2M6OlZNSGVhcDo6Vk1IZWFwKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVM
YXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTbWFsbENodW5r
KTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTdXBlckNodW5r
KTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5oOgorICAgICAgICAoYm1hbGxv
Yzo6Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVh
cDo6ZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxs
b2NhdGVTbWFsbFBhZ2UpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFs
bG9jYXRlU21hbGxQYWdlKTogRGVsZXRlZC4gUmVtb3ZlZCBzdXBlciBjaHVuayBhbmQKKyAgICAg
ICAgc21hbGwgY2h1bmsgc3VwcG9ydC4KKworICAgICAgICAqIGJtYWxsb2MvWm9uZS5jcHA6Cisg
ICAgICAgIChibWFsbG9jOjplbnVtZXJhdG9yKToKKyAgICAgICAgKiBibWFsbG9jL1pvbmUuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlpvbmU6OmxhcmdlQ2h1bmtzKToKKyAgICAgICAgKGJtYWxsb2M6
OlpvbmU6OmFkZExhcmdlQ2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6Wm9uZTo6c3VwZXJDaHVu
a3MpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Wm9uZTo6YWRkU3VwZXJDaHVuayk6IERl
bGV0ZWQuIFJlbW92ZWQgc3VwZXIgY2h1bmsgYW5kCisgICAgICAgIHNtYWxsIGNodW5rIHN1cHBv
cnQuCisKIDIwMTYtMDMtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBibWFsbG9jOiBBZGRlZCBhbiBPYmplY3QgaGVscGVyIGNsYXNzCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3LDcgKzE3LDYgQEAKIAkJMTQzQ0I4MUQxOTAy
MkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNDQjgxQjE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0
ZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDNFRjlBRjFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRUY5QUQxQTlGQUJGNjAwNEY1Qzc3IC8q
IEZyZWVMaXN0LmNwcCAqLzsgfTsKIAkJMTQzRUY5QjAxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNF
RjlBRTFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDQwQUZDOTFBOTUxNDI0MDA4MzdGQUEgLyog
U3VwZXJDaHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ0MEFGQzgxQTk1MTQyNDAwODM3RkFBIC8qIFN1cGVyQ2h1bmsuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDQjFBOTUyNjExMDA4
MzdGQUEgLyogWm9uZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ0MEFGQ0ExQTk1MjYxMTAwODM3RkFBIC8qIFpvbmUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDRDFBOTUyN0FGMDA4MzdG
QUEgLyogWm9uZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDQwQUZDQzFBOTUyN0FGMDA4MzdGQUEgLyogWm9uZS5jcHAgKi87IH07CiAJCTE0NDhD
MzAwMThGMzc1NDYwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ4QzJGRjE4RjM3NTQzMDA1MDI4MzkgLyogbWJt
YWxsb2MuY3BwICovOyB9OwpAQCAtNDIsNyArNDEsNiBAQAogCQkxNERENzg5OTE4RjQ4RDRBMDA5
NTA3MDIgLyogQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NDQ2OUU1MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNoZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODlBMThGNDhENEEwMDk1
MDcwMiAvKiBEZWFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OUMx
OEY0OEQ0QTAwOTUwNzAyIC8qIEJ1bXBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1w
QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMTRERDc4QkIxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsQ2h1bmsuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0N0FBQThDMThDRDM2QTcwMDIy
MDFFNCAvKiBTbWFsbENodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTRERDc4QkMxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsTGluZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1MjQ3ODYxOEJD
NzU3QzAwRjgwMDk4IC8qIFNtYWxsTGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OEJEMThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbFBh
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Uy
OUVEMThDQUU5MDUwMEZFOEEwRiAvKiBTbWFsbFBhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDNTE4RjQ4RDc1MDA5NTA3MDIgLyog
QWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDIxQTg3NzE4RUU0NjJBMDBCNERENjggLyogQWxnb3JpdGhtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk1LDcgKzkzLDYgQEAKIAkJMTQz
RTI5RUQxOENBRTkwNTAwRkU4QTBGIC8qIFNtYWxsUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBTbWFsbFBhZ2UuaDsgcGF0aCA9IGJtYWxsb2MvU21hbGxQYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0VGOUFEMUE5RkFCRjYwMDRGNUM3NyAvKiBG
cmVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGcmVlTGlz
dC5jcHA7IHBhdGggPSBibWFsbG9jL0ZyZWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZyZWVMaXN0Lmg7IHBhdGggPSBibWFsbG9jL0ZyZWVM
aXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NDBBRkM4MUE5NTE0MjQwMDgz
N0ZBQSAvKiBTdXBlckNodW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN1
cGVyQ2h1bmsuaDsgcGF0aCA9IGJtYWxsb2MvU3VwZXJDaHVuay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDQwQUZDQTFBOTUyNjExMDA4MzdGQUEgLyogWm9uZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBab25lLmg7IHBhdGggPSBibWFsbG9jL1pvbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MEFGQ0MxQTk1MjdBRjAwODM3RkFBIC8q
IFpvbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWm9uZS5jcHA7
IHBhdGggPSBibWFsbG9jL1pvbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDQ0NjlFNDE3QTQ2QkZFMDBGOUVBMUQgLyogQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IENhY2hlLmNwcDsgcGF0aCA9IGJtYWxs
b2MvQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNh
dGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKQEAgLTEyMyw3ICsxMjAsNiBAQAog
CQkxNDc5RTIxMjE3QTFBMjU1MDA2RDRFOUQgLyogVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2Mv
VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9u
SWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDc5RTIxNDE3QTFBNjNFMDA2
RDRFOUQgLyogVk1BbGxvY2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRp
bmcgPSAwOyBuYW1lID0gVk1BbGxvY2F0ZS5oOyBwYXRoID0gYm1hbGxvYy9WTUFsbG9jYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmll
ciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDdBQUE4ODE4Q0QxN0NFMDAyMjAxRTQgLyog
TGFyZ2VDaHVuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMYXJnZUNodW5r
Lmg7IHBhdGggPSBibWFsbG9jL0xhcmdlQ2h1bmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTQ3QUFBOEMxOENEMzZBNzAwMjIwMUU0IC8qIFNtYWxsQ2h1bmsuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU21hbGxDaHVuay5oOyBwYXRoID0gYm1hbGxvYy9TbWFs
bENodW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODU2NTVFMThBNDNBRjkw
MEVENjk0MiAvKiBCb3VuZGFyeVRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCb3VuZGFyeVRhZy5oOyBwYXRoID0gYm1hbGxvYy9Cb3VuZGFyeVRhZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg1NjU2MDE4QTQzREJBMDBFRDY5NDIgLyogT2JqZWN0VHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPYmplY3RUeXBlLmg7IHBhdGgg
PSBibWFsbG9jL09iamVjdFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4
OTVEOEYxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEVudmlyb25tZW50LmNwcDsgcGF0aCA9IGJtYWxsb2MvRW52
aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA4LDcgKzIwNCw2
IEBACiAJCTE0N0FBQTlBMThDRTVGRDMwMDIyMDFFNCAvKiBoZWFwOiBzbWFsbCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMTQ3QUFBOEMxOENEMzZBNzAw
MjIwMUU0IC8qIFNtYWxsQ2h1bmsuaCAqLywKIAkJCQkxNDUyNDc4NjE4QkM3NTdDMDBGODAwOTgg
LyogU21hbGxMaW5lLmggKi8sCiAJCQkJMTQzRTI5RUQxOENBRTkwNTAwRkU4QTBGIC8qIFNtYWxs
UGFnZS5oICovLAogCQkJKTsKQEAgLTI3MCw3ICsyNjUsNiBAQAogCQkJCTE0MTA1RTgzMThFMTQz
NzQwMDNBMTA2RSAvKiBPYmplY3RUeXBlLmNwcCAqLywKIAkJCQkxNDg1NjU2MDE4QTQzREJBMDBF
RDY5NDIgLyogT2JqZWN0VHlwZS5oICovLAogCQkJCTE0NUY2ODc0MTc5REY4NDEwMEQ2NTU5OCAv
KiBTaXplcy5oICovLAotCQkJCTE0NDBBRkM4MUE5NTE0MjQwMDgzN0ZBQSAvKiBTdXBlckNodW5r
LmggKi8sCiAJCQkJMTQ0RjdCRkIxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5jcHAgKi8sCiAJ
CQkJMTQ0RjdCRkMxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5oICovLAogCQkJCTE0NDBBRkNB
MUE5NTI2MTEwMDgzN0ZBQSAvKiBab25lLmggKi8sCkBAIC0zMzksMTEgKzMzMyw5IEBACiAJCQkJ
MTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0REQ3OEQwMThGNDhENzUwMDk1MDcwMiAvKiBWTUFsbG9jYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNEVCNzlFQTFDN0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFuZ2UuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTE0NDBBRkM5MUE5NTE0MjQwMDgzN0ZBQSAvKiBTdXBlckNodW5rLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDNFRjlCMDFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REQ3OENFMThGNDhENzUwMDk1MDcwMiAvKiBTeXNjYWxsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNERENzhDNjE4RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxNERENzhCQjE4RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxDaHVu
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIElubGlu
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4OTVEOTIxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmly
b25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAwMjc0QTE4Rjg5QzIzMDAxMTVDOTcgLyog
Vk1IZWFwLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDQwICsxMTQsMzMgQEAgdm9pZCogQWxsb2Nh
dG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdAogCiAgICAgc2l6ZV90IG9sZFNpemUgPSAwOwog
ICAgIHN3aXRjaCAob2JqZWN0VHlwZShvYmplY3QpKSB7Ci0gICAgY2FzZSBTbWFsbDogeworICAg
IGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6IHsKICAgICAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE9i
amVjdChvYmplY3QpLnBhZ2UoKS0+c2l6ZUNsYXNzKCk7CiAgICAgICAgIG9sZFNpemUgPSBvYmpl
Y3RTaXplKHNpemVDbGFzcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIExhcmdl
OiB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2Vz
czxIZWFwPjo6bXV0ZXgoKSk7CisgICAgY2FzZSBPYmplY3RUeXBlOjpMYXJnZTogewogICAgICAg
ICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChvYmplY3QpOwogICAgICAgICBvbGRTaXplID0gbGFy
Z2VPYmplY3Quc2l6ZSgpOwogCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdT
aXplID4gc21hbGxNYXgpIHsKLSAgICAgICAgICAgIG5ld1NpemUgPSByb3VuZFVwVG9NdWx0aXBs
ZU9mPGxhcmdlQWxpZ25tZW50PihuZXdTaXplKTsKICAgICAgICAgICAgIGlmIChvbGRTaXplIC0g
bmV3U2l6ZSA+PSBsYXJnZU1pbikgewotICAgICAgICAgICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9i
amVjdCwgTGFyZ2VPYmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQobmV3U2l6ZSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAgICAg
ICAgICAgICBtX2RlYWxsb2NhdG9yLmRlYWxsb2NhdGUoc3BsaXQuc2Vjb25kLmJlZ2luKCkpOwot
ICAgICAgICAgICAgICAgIGxvY2subG9jaygpOworICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICAg
ICAgICAgICAgICBuZXdTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4o
bmV3U2l6ZSk7CisgICAgICAgICAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2Uo
KS0+c2hyaW5rTGFyZ2UobG9jaywgbGFyZ2VPYmplY3QsIG5ld1NpemUpOworICAgICAgICAgICAg
ICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIFhMYXJnZTog
ewotICAgICAgICBCQVNTRVJUKG9iamVjdFR5cGUobnVsbHB0cikgPT0gWExhcmdlKTsKKyAgICBj
YXNlIE9iamVjdFR5cGU6OlhMYXJnZTogeworICAgICAgICBCQVNTRVJUKG9iamVjdFR5cGUobnVs
bHB0cikgPT0gT2JqZWN0VHlwZTo6WExhcmdlKTsKICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBs
b2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwogICAgICAgICBvbGRTaXplID0gUGVyUHJv
Y2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+eExhcmdlU2l6ZShsb2NrLCBvYmplY3QpOwogCi0g
ICAgICAgIGlmIChuZXdTaXplID09IG9sZFNpemUpCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0
OwotCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXplID4gbGFyZ2VNYXgp
IHsKICAgICAgICAgICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnNocmlua1hM
YXJnZShsb2NrLCBSYW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKICAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3Iu
aAkocmV2aXNpb24gMTk4NjU1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CdW1wQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgaW5saW5lIHZvaWQqIEJ1bXBB
bGxvY2F0b3I6OmFsbG9jYXRlKCkKICAgICAtLW1fcmVtYWluaW5nOwogICAgIGNoYXIqIHJlc3Vs
dCA9IG1fcHRyOwogICAgIG1fcHRyICs9IG1fc2l6ZTsKLSAgICBCQVNTRVJUKGlzU21hbGwocmVz
dWx0KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9EZWFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvRGVhbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAj
aW5jbHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGVyUHJv
Y2Vzcy5oIgotI2luY2x1ZGUgIlNtYWxsQ2h1bmsuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgpAQCAtNjAsMTIgKzU5LDYg
QEAgdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogICAgICAgICBwcm9jZXNzT2JqZWN0TG9n
KCk7CiB9CiAKLXZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVMYXJnZSh2b2lkKiBvYmplY3Qp
Ci17Ci0gICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVh
cD46Om11dGV4KCkpOwotICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmRlYWxs
b2NhdGVMYXJnZShsb2NrLCBvYmplY3QpOwotfQotCiB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9j
YXRlWExhcmdlKHZvaWQqIG9iamVjdCkKIHsKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011
dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwpAQCAtOTcsMjAgKzkwLDE1IEBA
IHZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2kKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEJBU1NFUlQob2JqZWN0VHlwZShudWxscHRyKSA9PSBYTGFyZ2UpOwog
ICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaXNTbWFsbChvYmpl
Y3QpKSB7Ci0gICAgICAgIHByb2Nlc3NPYmplY3RMb2coKTsKLSAgICAgICAgbV9vYmplY3RMb2cu
cHVzaChvYmplY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpc1hMYXJnZShv
YmplY3QpKQorICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZVhMYXJnZShvYmplY3QpOwogCi0gICAg
aWYgKCFpc1hMYXJnZShvYmplY3QpKQotICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZUxhcmdlKG9i
amVjdCk7Ci0gICAgCi0gICAgcmV0dXJuIGRlYWxsb2NhdGVYTGFyZ2Uob2JqZWN0KTsKKyAgICBC
QVNTRVJUKG1fb2JqZWN0TG9nLnNpemUoKSA9PSBtX29iamVjdExvZy5jYXBhY2l0eSgpKTsKKyAg
ICBwcm9jZXNzT2JqZWN0TG9nKCk7CisgICAgbV9vYmplY3RMb2cucHVzaChvYmplY3QpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Rl
YWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9j
YXRvci5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAgcHJpdmF0ZToKICAgICBi
b29sIGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7CiAgICAgdm9pZCBkZWFsbG9jYXRlU2xvd0Nh
c2Uodm9pZCopOwogCi0gICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2Uodm9pZCopOwogICAgIHZvaWQg
ZGVhbGxvY2F0ZVhMYXJnZSh2b2lkKik7CiAKICAgICBGaXhlZFZlY3Rvcjx2b2lkKiwgZGVhbGxv
Y2F0b3JMb2dDYXBhY2l0eT4gbV9vYmplY3RMb2c7CkBAIC02MCwxMSArNTksMTAgQEAgcHJpdmF0
ZToKIAogaW5saW5lIGJvb2wgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKiBv
YmplY3QpCiB7Ci0gICAgaWYgKCFpc1NtYWxsKG9iamVjdCkpCisgICAgQkFTU0VSVChpc1hMYXJn
ZShudWxscHRyKSk7CisgICAgaWYgKGlzWExhcmdlKG9iamVjdCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEJBU1NFUlQob2JqZWN0KTsKLQogICAgIGlmIChtX29iamVjdExvZy5zaXpl
KCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAK
ICNpbmNsdWRlICJMYXJnZUNodW5rLmgiCiAjaW5jbHVkZSAiTGFyZ2VPYmplY3QuaCIKICNpbmNs
dWRlICJQZXJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiU21hbGxDaHVuay5oIgogI2luY2x1ZGUgIlNt
YWxsTGluZS5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgPHRocmVhZD4KQEAg
LTg0LDE5ICs4MywzNCBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3Rh
CiB7CiAgICAgd2FpdFVudGlsRmFsc2UobG9jaywgc2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRp
bmdQYWdlcyk7CiAKLSAgICBzY2F2ZW5nZVNtYWxsUGFnZXMobG9jaywgc2xlZXBEdXJhdGlvbik7
CisgICAgbG9jay51bmxvY2soKTsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICAgICAgc2NhdmVu
Z2VTbWFsbFBhZ2VzKGxvY2spOworICAgIH0KKyAgICBsb2NrLmxvY2soKTsKKwogICAgIHNjYXZl
bmdlTGFyZ2VPYmplY3RzKGxvY2ssIHNsZWVwRHVyYXRpb24pOwogICAgIHNjYXZlbmdlWExhcmdl
T2JqZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9uKTsKIAogICAgIHNsZWVwKGxvY2ssIHNsZWVwRHVy
YXRpb24pOwogfQogCi12b2lkIEhlYXA6OnNjYXZlbmdlU21hbGxQYWdlcyhzdGQ6OnVuaXF1ZV9s
b2NrPFN0YXRpY011dGV4PiYgbG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVlcER1
cmF0aW9uKQordm9pZCBIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiBsb2NrKQogewotICAgIHdoaWxlICghbV9zbWFsbFBhZ2VzLmlzRW1wdHkoKSkg
ewotICAgICAgICBtX3ZtSGVhcC5kZWFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIG1fc21hbGxQYWdl
cy5wb3AoKSk7Ci0gICAgICAgIHdhaXRVbnRpbEZhbHNlKGxvY2ssIHNsZWVwRHVyYXRpb24sIG1f
aXNBbGxvY2F0aW5nUGFnZXMpOwotICAgIH0KKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3NtYWxs
UGFnZXMucG9wKCk7CisKKyAgICAvLyBUcmFuc2Zvcm0gc21hbGwgb2JqZWN0IHBhZ2UgYmFjayBp
bnRvIGEgbGFyZ2Ugb2JqZWN0LgorICAgIHBhZ2UtPnNldE9iamVjdFR5cGUoT2JqZWN0VHlwZTo6
TGFyZ2UpOworCisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QocGFnZS0+YmVnaW4oKS0+YmVn
aW4oKSk7CisgICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIGxhcmdlT2JqZWN0KTsKK30KKwordm9p
ZCBIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYg
bG9jaykKK3sKKyAgICB3aGlsZSAoIW1fc21hbGxQYWdlcy5pc0VtcHR5KCkpCisgICAgICAgIHNj
YXZlbmdlU21hbGxQYWdlKGxvY2spOwogfQogCiB2b2lkIEhlYXA6OnNjYXZlbmdlTGFyZ2VPYmpl
Y3RzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzIHNsZWVwRHVyYXRpb24pCkBAIC0xNzksMjYgKzE5MywzNCBAQCBTbWFsbFBhZ2Uq
IEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6CiB7CiAgICAgaWYgKCFtX3NtYWxsUGFnZXNX
aXRoRnJlZUxpbmVzW3NpemVDbGFzc10uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9zbWFs
bFBhZ2VzV2l0aEZyZWVMaW5lc1tzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgCisgICAgaWYg
KCFtX3NtYWxsUGFnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNtYWxsUGFnZSogcGFnZSA9IG1f
c21hbGxQYWdlcy5wb3AoKTsKKyAgICAgICAgcGFnZS0+c2V0U2l6ZUNsYXNzKHNpemVDbGFzcyk7
CisgICAgICAgIHJldHVybiBwYWdlOworICAgIH0KIAotICAgIFNtYWxsUGFnZSogcGFnZSA9IFt0
aGlzLCAmbG9ja10oKSB7Ci0gICAgICAgIGlmICghbV9zbWFsbFBhZ2VzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBtX3NtYWxsUGFnZXMucG9wKCk7CisgICAgc2l6ZV90IHVuYWxpZ25l
ZFNpemUgPSBsYXJnZU1pbiArIHZtUGFnZVNpemUgLSBsYXJnZUFsaWdubWVudCArIHZtUGFnZVNp
emU7CisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBhbGxvY2F0ZUxhcmdlKGxvY2ssIHZt
UGFnZVNpemUsIHZtUGFnZVNpemUsIHVuYWxpZ25lZFNpemUpOwogCi0gICAgICAgIG1faXNBbGxv
Y2F0aW5nUGFnZXMgPSB0cnVlOwotICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3ZtSGVhcC5h
bGxvY2F0ZVNtYWxsUGFnZShsb2NrKTsKLSAgICAgICAgcmV0dXJuIHBhZ2U7Ci0gICAgfSgpOwor
ICAgIC8vIFRyYW5zZm9ybSBvdXIgbGFyZ2Ugb2JqZWN0IGludG8gYSBzbWFsbCBvYmplY3QgcGFn
ZS4gV2UgZGVyZWYgaGVyZQorICAgIC8vIGJlY2F1c2Ugb3VyIHNtYWxsIG9iamVjdHMgd2lsbCBr
ZWVwIHRoZWlyIG93biByZWZjb3VudHMgb24gdGhlIGxpbmUuCisgICAgT2JqZWN0IG9iamVjdChs
YXJnZU9iamVjdC5iZWdpbigpKTsKKyAgICBvYmplY3QubGluZSgpLT5kZXJlZihsb2NrKTsKKyAg
ICBvYmplY3QucGFnZSgpLT5zZXRPYmplY3RUeXBlKE9iamVjdFR5cGU6OlNtYWxsKTsKIAotICAg
IHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOwotICAgIHJldHVybiBwYWdlOworICAgIG9i
amVjdC5wYWdlKCktPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOworICAgIHJldHVybiBvYmplY3Qu
cGFnZSgpOwogfQogCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYgbG9jaywgT2JqZWN0IG9iamVjdCkKIHsKICAgICBCQVNTRVJUKCFv
YmplY3QubGluZSgpLT5yZWZDb3VudChsb2NrKSk7CiAgICAgU21hbGxQYWdlKiBwYWdlID0gb2Jq
ZWN0LnBhZ2UoKTsKLSAgICBwYWdlLT5kZXJlZihsb2NrKTsKKyAgICBpZiAocGFnZS0+b2JqZWN0
VHlwZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKQorICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZUxh
cmdlKGxvY2ssIExhcmdlT2JqZWN0KG9iamVjdC5iZWdpbigpKSk7CiAKKyAgICBwYWdlLT5kZXJl
Zihsb2NrKTsKICAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSkgewogICAgICAgICBw
YWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7CiAgICAgICAgIG1fc21hbGxQYWdlc1dp
dGhGcmVlTGluZXNbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CkBAIC0yMTUsMTkgKzIz
NywyMiBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrCiAgICAgbV9z
Y2F2ZW5nZXIucnVuKCk7CiB9CiAKLWlubGluZSBMYXJnZU9iamVjdCYgSGVhcDo6c3BsaXRBbmRB
bGxvY2F0ZShMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBzaXplKQoraW5saW5lIExh
cmdlT2JqZWN0JiBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCwgc2l6ZV90IHNpemUpCiB7CiAg
ICAgQkFTU0VSVChsYXJnZU9iamVjdC5pc0ZyZWUoKSk7CiAKICAgICBMYXJnZU9iamVjdCBuZXh0
TGFyZ2VPYmplY3Q7CiAKLSAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+IGxhcmdl
TWluKSB7CisgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPj0gbGFyZ2VNaW4pIHsK
ICAgICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gc3BsaXQgPSBsYXJn
ZU9iamVjdC5zcGxpdChzaXplKTsKICAgICAgICAgbGFyZ2VPYmplY3QgPSBzcGxpdC5maXJzdDsK
ICAgICAgICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwogICAgIH0KIAogICAgIGxh
cmdlT2JqZWN0LnNldEZyZWUoZmFsc2UpOworICAgIE9iamVjdCBvYmplY3QobGFyZ2VPYmplY3Qu
YmVnaW4oKSk7CisgICAgb2JqZWN0LmxpbmUoKS0+cmVmKGxvY2spOworICAgIEJBU1NFUlQob2Jq
ZWN0LnBhZ2UoKS0+b2JqZWN0VHlwZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKTsKIAogICAgIGlm
IChuZXh0TGFyZ2VPYmplY3QpIHsKICAgICAgICAgQkFTU0VSVCghbmV4dExhcmdlT2JqZWN0Lm5l
eHRDYW5NZXJnZSgpKTsKQEAgLTIzNyw3ICsyNjIsNyBAQCBpbmxpbmUgTGFyZ2VPYmplY3QmIEhl
YXA6OnNwbGl0QW5kQWxsb2NhCiAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwogfQogCi1pbmxpbmUg
TGFyZ2VPYmplY3QmIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmIGxhcmdlT2Jq
ZWN0LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK2lubGluZSBMYXJnZU9iamVjdCYg
SGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2Nr
LCBMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KQogewogICAgIExhcmdlT2JqZWN0IHByZXZMYXJnZU9iamVjdDsKICAgICBMYXJnZU9iamVjdCBu
ZXh0TGFyZ2VPYmplY3Q7CkBAIC0yNTIsMTMgKzI3NywxNiBAQCBpbmxpbmUgTGFyZ2VPYmplY3Qm
IEhlYXA6OnNwbGl0QW5kQWxsb2NhCiAKICAgICBCQVNTRVJUKGxhcmdlT2JqZWN0LmlzRnJlZSgp
KTsKIAotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBzaXplID4gbGFyZ2VNaW4pIHsKKyAg
ICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+PSBsYXJnZU1pbikgewogICAgICAgICBz
dGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNw
bGl0KHNpemUpOwogICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OwogICAgICAgICBu
ZXh0TGFyZ2VPYmplY3QgPSBzcGxpdC5zZWNvbmQ7CiAgICAgfQogCiAgICAgbGFyZ2VPYmplY3Qu
c2V0RnJlZShmYWxzZSk7CisgICAgT2JqZWN0IG9iamVjdChsYXJnZU9iamVjdC5iZWdpbigpKTsK
KyAgICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7CisgICAgQkFTU0VSVChvYmplY3QucGFnZSgp
LT5vYmplY3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2UpOwogCiAgICAgaWYgKHByZXZMYXJn
ZU9iamVjdCkgewogICAgICAgICBMYXJnZU9iamVjdCBtZXJnZWQgPSBwcmV2TGFyZ2VPYmplY3Qu
bWVyZ2UoKTsKQEAgLTI3OCw2ICszMDYsOSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyCiAgICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKICAgICBCQVNTRVJU
KHNpemUgPj0gbGFyZ2VNaW4pOwogICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBs
ZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKSk7CisgICAgCisgICAgaWYgKHNpemUgPD0gdm1QYWdl
U2l6ZSkKKyAgICAgICAgc2NhdmVuZ2VTbWFsbFBhZ2VzKGxvY2spOwogCiAgICAgTGFyZ2VPYmpl
Y3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOwogICAgIGlmICghbGFy
Z2VPYmplY3QpCkBAIC0yOTAsNyArMzIxLDcgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShz
dGQ6OmxvY2tfZ3VhcgogICAgICAgICBsYXJnZU9iamVjdC5zZXRWTVN0YXRlKFZNU3RhdGU6OlBo
eXNpY2FsKTsKICAgICB9CiAKLSAgICBsYXJnZU9iamVjdCA9IHNwbGl0QW5kQWxsb2NhdGUobGFy
Z2VPYmplY3QsIHNpemUpOworICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShsb2Nr
LCBsYXJnZU9iamVjdCwgc2l6ZSk7CiAKICAgICByZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsK
IH0KQEAgLTMwNyw2ICszMzgsOSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9j
a19ndWFyCiAgICAgQkFTU0VSVChhbGlnbm1lbnQgPj0gbGFyZ2VBbGlnbm1lbnQpOwogICAgIEJB
U1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCisgICAgaWYgKHNpemUgPD0gdm1QYWdl
U2l6ZSkKKyAgICAgICAgc2NhdmVuZ2VTbWFsbFBhZ2VzKGxvY2spOworCiAgICAgTGFyZ2VPYmpl
Y3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5h
bGlnbmVkU2l6ZSk7CiAgICAgaWYgKCFsYXJnZU9iamVjdCkKICAgICAgICAgbGFyZ2VPYmplY3Qg
PSBtX3ZtSGVhcC5hbGxvY2F0ZUxhcmdlT2JqZWN0KGxvY2ssIGFsaWdubWVudCwgc2l6ZSwgdW5h
bGlnbmVkU2l6ZSk7CkBAIC0zMTgsMTQgKzM1MiwyMSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxh
cmdlKHN0ZDo6bG9ja19ndWFyCiAgICAgICAgIGxhcmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0
ZTo6UGh5c2ljYWwpOwogICAgIH0KIAotICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0
ZShsYXJnZU9iamVjdCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICBsYXJnZU9iamVjdCA9IHNwbGl0
QW5kQWxsb2NhdGUobG9jaywgbGFyZ2VPYmplY3QsIGFsaWdubWVudCwgc2l6ZSk7CiAKICAgICBy
ZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsKIH0KIAordm9pZCBIZWFwOjpzaHJpbmtMYXJnZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBMYXJnZU9iamVjdCYgbGFyZ2VPYmpl
Y3QsIHNpemVfdCBuZXdTaXplKQoreworICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VP
YmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQobmV3U2l6ZSk7CisgICAgZGVhbGxvY2F0
ZUxhcmdlKGxvY2ssIHNwbGl0LnNlY29uZCk7Cit9CisKIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxh
cmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9iamVjdCYgbGFy
Z2VPYmplY3QpCiB7CiAgICAgQkFTU0VSVCghbGFyZ2VPYmplY3QuaXNGcmVlKCkpOworICAgIEJB
U1NFUlQoT2JqZWN0KGxhcmdlT2JqZWN0LmJlZ2luKCkpLnBhZ2UoKS0+b2JqZWN0VHlwZSgpID09
IE9iamVjdFR5cGU6OkxhcmdlKTsKICAgICBsYXJnZU9iamVjdC5zZXRGcmVlKHRydWUpOwogICAg
IAogICAgIExhcmdlT2JqZWN0IG1lcmdlZCA9IGxhcmdlT2JqZWN0Lm1lcmdlKCk7CkBAIC0zMzMs
MTIgKzM3NCw2IEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWEKICAg
ICBtX3NjYXZlbmdlci5ydW4oKTsKIH0KIAotdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgdm9pZCogb2JqZWN0KQotewotICAgIExh
cmdlT2JqZWN0IGxhcmdlT2JqZWN0KG9iamVjdCk7Ci0gICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ss
IGxhcmdlT2JqZWN0KTsKLX0KLQogdm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUp
CiB7CiAgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50
LCBzaXplKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NiBAQAogI2luY2x1ZGUgIk11dGV4LmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2VncmVnYXRlZEZyZWVMaXN0LmgiCi0jaW5jbHVkZSAiU21hbGxDaHVuay5oIgogI2luY2x1ZGUg
IlNtYWxsTGluZS5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgIlZNSGVhcC5o
IgpAQCAtNTksNyArNTgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRl
TGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCwgc2l6ZV90IHVuYWxpZ25lZFNpemUpOwotICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisgICAgdm9pZCBzaHJpbmtMYXJn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTGFyZ2VPYmplY3QmLCBzaXplX3QpOwog
CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYs
IHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CkBAIC04MCw4ICs3OSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mLCBPYmplY3QpOwogICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9iamVjdCYpOwogCi0gICAgTGFyZ2VPYmpl
Y3QmIHNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmLCBzaXplX3QpOwotICAgIExhcmdlT2Jq
ZWN0JiBzcGxpdEFuZEFsbG9jYXRlKExhcmdlT2JqZWN0Jiwgc2l6ZV90LCBzaXplX3QpOworICAg
IExhcmdlT2JqZWN0JiBzcGxpdEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCBMYXJnZU9iamVjdCYsIHNpemVfdCk7CisgICAgTGFyZ2VPYmplY3QmIHNwbGl0QW5kQWxs
b2NhdGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0Jiwgc2l6ZV90
LCBzaXplX3QpOwogICAgIHZvaWQgbWVyZ2VMYXJnZShCZWdpblRhZyomLCBFbmRUYWcqJiwgUmFu
Z2UmKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VMZWZ0KEVuZFRhZyomLCBCZWdpblRhZyomLCBSYW5n
ZSYsIGJvb2wmIGluVk1IZWFwKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VSaWdodChFbmRUYWcqJiwg
QmVnaW5UYWcqJiwgUmFuZ2UmLCBib29sJiBpblZNSGVhcCk7CkBAIC04OSw3ICs4OCw4IEBAIHBy
aXZhdGU6CiAgICAgWExhcmdlUmFuZ2Ugc3BsaXRBbmRBbGxvY2F0ZShYTGFyZ2VSYW5nZSYsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAKICAgICB2b2lkIGNvbmN1cnJlbnRTY2F2ZW5nZSgp
OwotICAgIHZvaWQgc2NhdmVuZ2VTbWFsbFBhZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CisgICAgdm9pZCBzY2F2ZW5nZVNtYWxs
UGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CisgICAgdm9pZCBzY2F2ZW5nZVNt
YWxsUGFnZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIHZvaWQgc2NhdmVu
Z2VMYXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzKTsKICAgICB2b2lkIHNjYXZlbmdlWExhcmdlT2JqZWN0cyhzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlQ2h1bmsuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlQ2h1bmsuaAkocmV2aXNpb24gMTk4NjU1KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZUNodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDExIEBACiAKICNpbmNsdWRlICJCZWdpblRhZy5oIgogI2luY2x1ZGUgIkVuZFRhZy5o
IgorI2luY2x1ZGUgIk9iamVjdC5oIgogI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKICNpbmNsdWRl
ICJTaXplcy5oIgorI2luY2x1ZGUgIlNtYWxsTGluZS5oIgorI2luY2x1ZGUgIlNtYWxsUGFnZS5o
IgogI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKICNpbmNsdWRlIDxhcnJheT4KIApAQCAtMzcsMTIg
KzQwLDI1IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgTGFyZ2VDaHVuayB7CiBwdWJs
aWM6Ci0gICAgTGFyZ2VDaHVuaygpOwogICAgIHN0YXRpYyBMYXJnZUNodW5rKiBnZXQodm9pZCop
OwogCiAgICAgc3RhdGljIEJlZ2luVGFnKiBiZWdpblRhZyh2b2lkKik7CiAgICAgc3RhdGljIEVu
ZFRhZyogZW5kVGFnKHZvaWQqLCBzaXplX3QpOwogCisgICAgTGFyZ2VDaHVuayhzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+Jik7CisKKyAgICBzaXplX3Qgb2Zmc2V0KHZvaWQqKTsKKworICAg
IHZvaWQqIG9iamVjdChzaXplX3Qgb2Zmc2V0KTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2Uoc2l6ZV90
IG9mZnNldCk7CisgICAgU21hbGxMaW5lKiBsaW5lKHNpemVfdCBvZmZzZXQpOworCisgICAgU21h
bGxQYWdlKiBwYWdlQmVnaW4oKSB7IHJldHVybiBPYmplY3QobV9tZW1vcnkpLnBhZ2UoKTsgfQor
ICAgIFNtYWxsUGFnZSogcGFnZUVuZCgpIHsgcmV0dXJuIG1fcGFnZXMuZW5kKCk7IH0KKyAgICAK
KyAgICBTbWFsbExpbmUqIGxpbmVzKCkgeyByZXR1cm4gbV9saW5lcy5iZWdpbigpOyB9CisgICAg
U21hbGxQYWdlKiBwYWdlcygpIHsgcmV0dXJuIG1fcGFnZXMuYmVnaW4oKTsgfQorCiAgICAgY2hh
ciogYmVnaW4oKSB7IHJldHVybiBtX21lbW9yeTsgfQogICAgIGNoYXIqIGVuZCgpIHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgbGFyZ2VDaHVua1NpemU7IH0KIApAQCAt
NjQsMTcgKzgwLDIxIEBAIHByaXZhdGU6CiAgICAgLy8KICAgICAvLyBXZSB1c2UgdGhlIFgncyBm
b3IgYm91bmRhcnkgdGFncyBhbmQgdGhlIE8ncyBmb3IgZWRnZSBzZW50aW5lbHMuCiAKKyAgICBz
dGQ6OmFycmF5PFNtYWxsTGluZSwgbGFyZ2VDaHVua1NpemUgLyBzbWFsbExpbmVTaXplPiBtX2xp
bmVzOworICAgIHN0ZDo6YXJyYXk8U21hbGxQYWdlLCBsYXJnZUNodW5rU2l6ZSAvIHZtUGFnZVNp
emU+IG1fcGFnZXM7CiAgICAgc3RkOjphcnJheTxCb3VuZGFyeVRhZywgYm91bmRhcnlUYWdDb3Vu
dD4gbV9ib3VuZGFyeVRhZ3M7Ci0gICAgY2hhciBtX21lbW9yeVtdIF9fYXR0cmlidXRlX18oKGFs
aWduZWQobGFyZ2VBbGlnbm1lbnQrMCkpKTsKKyAgICBjaGFyIG1fbWVtb3J5W10gX19hdHRyaWJ1
dGVfXygoYWxpZ25lZCgyICogc21hbGxNYXggKyAwKSkpOwogfTsKIAotc3RhdGljX2Fzc2VydChs
YXJnZUNodW5rTWV0YWRhdGFTaXplID09IHNpemVvZihMYXJnZUNodW5rKSwgIk91ciBsYXJnZUNo
dW5rTWV0YWRhdGFTaXplIG1hdGggaW4gU2l6ZXMuaCBpcyB3cm9uZyIpOwotc3RhdGljX2Fzc2Vy
dChsYXJnZUNodW5rTWV0YWRhdGFTaXplICsgbGFyZ2VPYmplY3RNYXggPT0gbGFyZ2VDaHVua1Np
emUsICJsYXJnZU9iamVjdE1heCBpcyB0b28gc21hbGwgb3IgdG9vIGJpZyIpOworc3RhdGljX2Fz
c2VydChzaXplb2YoTGFyZ2VDaHVuaykgKyBsYXJnZU1heCA8PSBsYXJnZUNodW5rU2l6ZSwgImxh
cmdlTWF4IGlzIHRvbyBiaWciKTsKK3N0YXRpY19hc3NlcnQoCisgICAgc2l6ZW9mKExhcmdlQ2h1
bmspICUgdm1QYWdlU2l6ZSArIDIgKiBzbWFsbE1heCA8PSB2bVBhZ2VTaXplLAorICAgICJ0aGUg
Zmlyc3QgcGFnZSBvZiBvYmplY3QgbWVtb3J5IGluIGEgc21hbGwgY2h1bmsgbXVzdCBiZSBhYmxl
IHRvIGFsbG9jYXRlIHNtYWxsTWF4Iik7CiAKLWlubGluZSBMYXJnZUNodW5rOjpMYXJnZUNodW5r
KCkKK2lubGluZSBMYXJnZUNodW5rOjpMYXJnZUNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2spCiB7CiAgICAgUmFuZ2UgcmFuZ2UoYmVnaW4oKSwgZW5kKCkgLSBiZWdpbigp
KTsKLSAgICBCQVNTRVJUKHJhbmdlLnNpemUoKSA9PSBsYXJnZU9iamVjdE1heCk7CisgICAgQkFT
U0VSVChyYW5nZS5zaXplKCkgPD0gbGFyZ2VPYmplY3RNYXgpOwogCiAgICAgQmVnaW5UYWcqIGJl
Z2luVGFnID0gTGFyZ2VDaHVuazo6YmVnaW5UYWcocmFuZ2UuYmVnaW4oKSk7CiAgICAgYmVnaW5U
YWctPnNldFJhbmdlKHJhbmdlKTsKQEAgLTk3LDExICsxMTcsMTcgQEAgaW5saW5lIExhcmdlQ2h1
bms6OkxhcmdlQ2h1bmsoKQogICAgIEJBU1NFUlQocmlnaHRTZW50aW5lbCA+PSBtX2JvdW5kYXJ5
VGFncy5iZWdpbigpKTsKICAgICBCQVNTRVJUKHJpZ2h0U2VudGluZWwgPCBtX2JvdW5kYXJ5VGFn
cy5lbmQoKSk7CiAgICAgcmlnaHRTZW50aW5lbC0+aW5pdFNlbnRpbmVsKCk7CisKKyAgICAvLyBU
cmFjayB0aGUgbWVtb3J5IHVzZWQgZm9yIG1ldGFkYXRhIGJ5IGFsbG9jYXRpbmcgaW1hZ2luYXJ5
IG9iamVjdHMuCisgICAgZm9yIChjaGFyKiBpdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRo
aXMpOyBpdCA8IG1fbWVtb3J5OyBpdCArPSBzbWFsbExpbmVTaXplKSB7CisgICAgICAgIE9iamVj
dCBvYmplY3QoaXQpOworICAgICAgICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7CisgICAgICAg
IG9iamVjdC5wYWdlKCktPnJlZihsb2NrKTsKKyAgICB9CiB9CiAKIGlubGluZSBMYXJnZUNodW5r
KiBMYXJnZUNodW5rOjpnZXQodm9pZCogb2JqZWN0KQogewotICAgIEJBU1NFUlQoIWlzU21hbGwo
b2JqZWN0KSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExhcmdlQ2h1bmsqPihtYXNrKG9iamVj
dCwgbGFyZ2VDaHVua01hc2spKTsKIH0KIApAQCAtMTE0LDggKzE0MCw2IEBAIGlubGluZSBCZWdp
blRhZyogTGFyZ2VDaHVuazo6YmVnaW5UYWcodm8KIAogaW5saW5lIEVuZFRhZyogTGFyZ2VDaHVu
azo6ZW5kVGFnKHZvaWQqIG9iamVjdCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgQkFTU0VSVCghaXNT
bWFsbChvYmplY3QpKTsKLQogICAgIExhcmdlQ2h1bmsqIGNodW5rID0gZ2V0KG9iamVjdCk7CiAg
ICAgY2hhciogZW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgKyBzaXplOwogCkBAIC0x
MjcsNiArMTUxLDg5IEBAIGlubGluZSBFbmRUYWcqIExhcmdlQ2h1bms6OmVuZFRhZyh2b2lkKiAK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RW5kVGFnKj4oJmNodW5rLT5tX2JvdW5kYXJ5VGFnc1ti
b3VuZGFyeVRhZ051bWJlcl0pOwogfQogCitpbmxpbmUgc2l6ZV90IExhcmdlQ2h1bms6Om9mZnNl
dCh2b2lkKiBvYmplY3QpCit7CisgICAgQkFTU0VSVChvYmplY3QgPj0gdGhpcyk7CisgICAgQkFT
U0VSVChvYmplY3QgPCByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIGxhcmdlQ2h1bmtT
aXplKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSByZWludGVycHJl
dF9jYXN0PGNoYXIqPih0aGlzKTsKK30KKworaW5saW5lIHZvaWQqIExhcmdlQ2h1bms6Om9iamVj
dChzaXplX3Qgb2Zmc2V0KQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0
aGlzKSArIG9mZnNldDsKK30KKworaW5saW5lIFNtYWxsUGFnZSogTGFyZ2VDaHVuazo6cGFnZShz
aXplX3Qgb2Zmc2V0KQoreworICAgIHNpemVfdCBwYWdlTnVtYmVyID0gb2Zmc2V0IC8gdm1QYWdl
U2l6ZTsKKyAgICByZXR1cm4gJm1fcGFnZXNbcGFnZU51bWJlcl07Cit9CisKK2lubGluZSBTbWFs
bExpbmUqIExhcmdlQ2h1bms6OmxpbmUoc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzaXplX3QgbGlu
ZU51bWJlciA9IG9mZnNldCAvIHNtYWxsTGluZVNpemU7CisgICAgcmV0dXJuICZtX2xpbmVzW2xp
bmVOdW1iZXJdOworfQorCitpbmxpbmUgY2hhciogU21hbGxMaW5lOjpiZWdpbigpCit7CisgICAg
TGFyZ2VDaHVuayogY2h1bmsgPSBMYXJnZUNodW5rOjpnZXQodGhpcyk7CisgICAgc2l6ZV90IGxp
bmVOdW1iZXIgPSB0aGlzIC0gY2h1bmstPmxpbmVzKCk7CisgICAgc2l6ZV90IG9mZnNldCA9IGxp
bmVOdW1iZXIgKiBzbWFsbExpbmVTaXplOworICAgIHJldHVybiAmcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oY2h1bmspW29mZnNldF07Cit9CisKK2lubGluZSBjaGFyKiBTbWFsbExpbmU6OmVuZCgp
Cit7CisgICAgcmV0dXJuIGJlZ2luKCkgKyBzbWFsbExpbmVTaXplOworfQorCitpbmxpbmUgU21h
bGxMaW5lKiBTbWFsbFBhZ2U6OmJlZ2luKCkKK3sKKyAgICBMYXJnZUNodW5rKiBjaHVuayA9IExh
cmdlQ2h1bms6OmdldCh0aGlzKTsKKyAgICBzaXplX3QgcGFnZU51bWJlciA9IHRoaXMgLSBjaHVu
ay0+cGFnZXMoKTsKKyAgICBzaXplX3QgbGluZU51bWJlciA9IHBhZ2VOdW1iZXIgKiBzbWFsbExp
bmVDb3VudDsKKyAgICByZXR1cm4gJmNodW5rLT5saW5lcygpW2xpbmVOdW1iZXJdOworfQorCitp
bmxpbmUgU21hbGxMaW5lKiBTbWFsbFBhZ2U6OmVuZCgpCit7CisgICAgcmV0dXJuIGJlZ2luKCkg
KyBzbWFsbExpbmVDb3VudDsKK30KKworaW5saW5lIE9iamVjdDo6T2JqZWN0KHZvaWQqIG9iamVj
dCkKKyAgICA6IG1fY2h1bmsoTGFyZ2VDaHVuazo6Z2V0KG9iamVjdCkpCisgICAgLCBtX29mZnNl
dChtX2NodW5rLT5vZmZzZXQob2JqZWN0KSkKK3sKK30KKworaW5saW5lIE9iamVjdDo6T2JqZWN0
KExhcmdlQ2h1bmsqIGNodW5rLCB2b2lkKiBvYmplY3QpCisgICAgOiBtX2NodW5rKGNodW5rKQor
ICAgICwgbV9vZmZzZXQobV9jaHVuay0+b2Zmc2V0KG9iamVjdCkpCit7CisgICAgQkFTU0VSVChj
aHVuayA9PSBMYXJnZUNodW5rOjpnZXQob2JqZWN0KSk7Cit9CisKK2lubGluZSB2b2lkKiBPYmpl
Y3Q6OmJlZ2luKCkKK3sKKyAgICByZXR1cm4gbV9jaHVuay0+b2JqZWN0KG1fb2Zmc2V0KTsKK30K
KworaW5saW5lIHZvaWQqIE9iamVjdDo6cGFnZUJlZ2luKCkKK3sKKyAgICByZXR1cm4gbV9jaHVu
ay0+b2JqZWN0KHJvdW5kRG93blRvTXVsdGlwbGVPZih2bVBhZ2VTaXplLCBtX29mZnNldCkpOwor
fQorCitpbmxpbmUgU21hbGxMaW5lKiBPYmplY3Q6OmxpbmUoKQoreworICAgIHJldHVybiBtX2No
dW5rLT5saW5lKG1fb2Zmc2V0KTsKK30KKworaW5saW5lIFNtYWxsUGFnZSogT2JqZWN0OjpwYWdl
KCkKK3sKKyAgICByZXR1cm4gbV9jaHVuay0+cGFnZShtX29mZnNldCk7Cit9CisKIH07IC8vIG5h
bWVzcGFjZSBibWFsbG9jCiAKICNlbmRpZiAvLyBMYXJnZUNodW5rCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvT2JqZWN0LmgJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIyICsyOCwyNCBAQAogCiBuYW1lc3BhY2Ug
Ym1hbGxvYyB7CiAKLWNsYXNzIFNtYWxsQ2h1bms7CitjbGFzcyBMYXJnZUNodW5rOwogY2xhc3Mg
U21hbGxMaW5lOwogY2xhc3MgU21hbGxQYWdlOwogCiBjbGFzcyBPYmplY3QgewogcHVibGljOgog
ICAgIE9iamVjdCh2b2lkKik7Ci0gICAgT2JqZWN0KFNtYWxsQ2h1bmsqLCB2b2lkKik7CisgICAg
T2JqZWN0KExhcmdlQ2h1bmsqLCB2b2lkKik7CiAgICAgCi0gICAgU21hbGxDaHVuayogY2h1bmso
KSB7IHJldHVybiBtX2NodW5rOyB9CisgICAgTGFyZ2VDaHVuayogY2h1bmsoKSB7IHJldHVybiBt
X2NodW5rOyB9CisgICAgdm9pZCogYmVnaW4oKTsKKyAgICB2b2lkKiBwYWdlQmVnaW4oKTsKIAog
ICAgIFNtYWxsTGluZSogbGluZSgpOwogICAgIFNtYWxsUGFnZSogcGFnZSgpOwogCiBwcml2YXRl
OgotICAgIFNtYWxsQ2h1bmsqIG1fY2h1bms7CisgICAgTGFyZ2VDaHVuayogbV9jaHVuazsKICAg
ICBzaXplX3QgbV9vZmZzZXQ7CiB9OwogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09i
amVjdFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0
VHlwZS5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2Jq
ZWN0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIwICsyMywxOSBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2luY2x1ZGUgIkxhcmdlQ2h1bmsuaCIKICNpbmNsdWRlICJPYmplY3RU
eXBlLmgiCiAKKyNpbmNsdWRlICJMYXJnZUNodW5rLmgiCisjaW5jbHVkZSAiT2JqZWN0LmgiCisK
IG5hbWVzcGFjZSBibWFsbG9jIHsKIAogT2JqZWN0VHlwZSBvYmplY3RUeXBlKHZvaWQqIG9iamVj
dCkKIHsKLSAgICBpZiAoaXNTbWFsbChvYmplY3QpKQotICAgICAgICByZXR1cm4gU21hbGw7Ci0g
ICAgCi0gICAgaWYgKCFpc1hMYXJnZShvYmplY3QpKQotICAgICAgICByZXR1cm4gTGFyZ2U7Cisg
ICAgaWYgKGlzWExhcmdlKG9iamVjdCkpCisgICAgICAgIHJldHVybiBPYmplY3RUeXBlOjpYTGFy
Z2U7CiAgICAgCi0gICAgcmV0dXJuIFhMYXJnZTsKKyAgICByZXR1cm4gT2JqZWN0KG9iamVjdCku
cGFnZSgpLT5vYmplY3RUeXBlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUg
KzMxLDEwIEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAotZW51bSBPYmplY3RUeXBlIHsgU21h
bGwsIExhcmdlLCBYTGFyZ2UgfTsKK2VudW0gY2xhc3MgT2JqZWN0VHlwZSA6IHVuc2lnbmVkIGNo
YXIgeyBTbWFsbCwgTGFyZ2UsIFhMYXJnZSB9OwogCiBPYmplY3RUeXBlIG9iamVjdFR5cGUodm9p
ZCopOwogCi1pbmxpbmUgYm9vbCBpc1NtYWxsKHZvaWQqIG9iamVjdCkKLXsKLSAgICByZXR1cm4g
dGVzdChvYmplY3QsIHNtYWxsTWFzayk7Ci19Ci0KIGlubGluZSBib29sIGlzWExhcmdlKHZvaWQq
IG9iamVjdCkKIHsKICAgICByZXR1cm4gIXRlc3Qob2JqZWN0LCB+eExhcmdlTWFzayk7CkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgJKHJldmlzaW9u
IDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBGcmVlTGlzdCYg
c2VsZWN0KHNpemVfdCk7CiAKICAgICBWTVN0YXRlOjpIYXNQaHlzaWNhbCBtX2hhc1BoeXNpY2Fs
OwotICAgIHN0ZDo6YXJyYXk8RnJlZUxpc3QsIDE1PiBtX2ZyZWVMaXN0czsKKyAgICBzdGQ6OmFy
cmF5PEZyZWVMaXN0LCAxNj4gbV9mcmVlTGlzdHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBibWFs
bG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDQyICs1MSwy
OCBAQCBuYW1lc3BhY2UgU2l6ZXMgewogI2Vsc2UKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZt
UGFnZVNpemUgPSA0ICoga0I7CiAjZW5kaWYKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZtUGFn
ZU1hc2sgPSB+KHZtUGFnZVNpemUgLSAxKTsKICAgICAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IHN1cGVyQ2h1bmtTaXplID0gMiAqIE1COwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VwZXJD
aHVua01hc2sgPSB+KHN1cGVyQ2h1bmtTaXplIC0gMSk7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHNtYWxsQ2h1bmtTaXplID0gc3VwZXJDaHVua1NpemUgLyAyOwotICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qgc21hbGxDaHVua09mZnNldCA9IHN1cGVyQ2h1bmtTaXplIC8gMjsKLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IHNtYWxsQ2h1bmtNYXNrID0gfihzbWFsbENodW5rU2l6ZSAtIDF1bCk7
Ci0KICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsTGluZVNpemUgPSAyNTY7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVDb3VudCA9IHZtUGFnZVNpemUgLyBzbWFsbExpbmVT
aXplOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbE1heCA9IDEgKiBrQjsKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1hc2tTaXplQ2xhc3NNYXggPSA1MTI7CiAKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGxhcmdlQ2h1bmtTaXplID0gc3VwZXJDaHVua1NpemUgLyAyOwotICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VDaHVua09mZnNldCA9IDA7CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBsYXJnZUNodW5rU2l6ZSA9IDIgKiBNQjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGxhcmdlQ2h1bmtNYXNrID0gfihsYXJnZUNodW5rU2l6ZSAtIDF1bCk7CiAKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGxhcmdlQWxpZ25tZW50ID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBsYXJnZU1pbiA9IHNtYWxsTWF4OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VDaHVu
a01ldGFkYXRhU2l6ZSA9IDQgKiBrQjsgLy8gc2l6ZW9mKExhcmdlQ2h1bmspCi0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBsYXJnZU9iamVjdE1heCA9IGxhcmdlQ2h1bmtTaXplIC0gbGFyZ2VDaHVu
a01ldGFkYXRhU2l6ZTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlT2JqZWN0TWF4ID0g
bGFyZ2VDaHVua1NpemU7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZU1heCA9IGxhcmdl
T2JqZWN0TWF4IC8gMjsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdlQWxpZ25tZW50
ID0gc3VwZXJDaHVua1NpemU7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB4TGFyZ2VBbGlnbm1l
bnQgPSBsYXJnZUNodW5rU2l6ZTsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZU1hc2sg
PSB+KHhMYXJnZUFsaWdubWVudCAtIDEpOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdl
TWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIHhMYXJnZUFsaWdubWVu
dDsgLy8gTWFrZSBzdXJlIHRoYXQgcm91bmRpbmcgdXAgdG8geExhcmdlQWxpZ25tZW50IGRvZXMg
bm90IG92ZXJmbG93LgogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBmcmVlTGlzdFNlYXJjaERl
cHRoID0gMTY7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBmcmVlTGlzdEdyb3dGYWN0b3IgPSAy
OwogCi0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCB0eXBlTWFzayA9IChzdXBlckNodW5rU2l6
ZSAtIDEpICYgfigoc3VwZXJDaHVua1NpemUgLyAyKSAtIDEpOyAvLyAyIHRhZ2dhYmxlIGNodW5r
cwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbGFyZ2VNYXNrID0gdHlwZU1hc2sgJiAoc3Vw
ZXJDaHVua1NpemUgKyBsYXJnZUNodW5rT2Zmc2V0KTsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0
cl90IHNtYWxsTWFzayA9IHR5cGVNYXNrICYgKHN1cGVyQ2h1bmtTaXplICsgc21hbGxDaHVua09m
ZnNldCk7Ci0KICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHkg
PSAyNTY7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBidW1wUmFuZ2VDYWNoZUNhcGFjaXR5ID0g
MzsKICAgICAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxDaHVuay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxDaHVuay5oCShyZXZpc2lvbiAx
OTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsQ2h1bmsuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU21hbGxDaHVua19oCi0jZGVmaW5lIFNtYWxsQ2h1
bmtfaAotCi0jaW5jbHVkZSAiT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2l6ZXMuaCIKLSNpbmNsdWRl
ICJTbWFsbExpbmUuaCIKLSNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKLSNpbmNsdWRlICJWTUFsbG9j
YXRlLmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgU21hbGxDaHVuayB7Ci1wdWJs
aWM6Ci0gICAgU21hbGxDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0KLSAg
ICBzdGF0aWMgU21hbGxDaHVuayogZ2V0KHZvaWQqKTsKLSAgICBzaXplX3Qgb2Zmc2V0KHZvaWQq
KTsKLQotICAgIHZvaWQqIG9iamVjdChzaXplX3Qgb2Zmc2V0KTsKLSAgICBTbWFsbFBhZ2UqIHBh
Z2Uoc2l6ZV90IG9mZnNldCk7Ci0gICAgU21hbGxMaW5lKiBsaW5lKHNpemVfdCBvZmZzZXQpOwot
Ci0gICAgU21hbGxQYWdlKiBiZWdpbigpIHsgcmV0dXJuIE9iamVjdChtX21lbW9yeSkucGFnZSgp
OyB9Ci0gICAgU21hbGxQYWdlKiBlbmQoKSB7IHJldHVybiBtX3BhZ2VzLmVuZCgpOyB9Ci0gICAg
Ci0gICAgU21hbGxMaW5lKiBsaW5lcygpIHsgcmV0dXJuIG1fbGluZXMuYmVnaW4oKTsgfQotICAg
IFNtYWxsUGFnZSogcGFnZXMoKSB7IHJldHVybiBtX3BhZ2VzLmJlZ2luKCk7IH0KLSAgICAKLXBy
aXZhdGU6Ci0gICAgc3RkOjphcnJheTxTbWFsbExpbmUsIHNtYWxsQ2h1bmtTaXplIC8gc21hbGxM
aW5lU2l6ZT4gbV9saW5lczsKLSAgICBzdGQ6OmFycmF5PFNtYWxsUGFnZSwgc21hbGxDaHVua1Np
emUgLyB2bVBhZ2VTaXplPiBtX3BhZ2VzOwotICAgIGNoYXIgbV9tZW1vcnlbXSBfX2F0dHJpYnV0
ZV9fKChhbGlnbmVkKDIgKiBzbWFsbE1heCArIDApKSk7Ci19OwotCi1zdGF0aWNfYXNzZXJ0KCEo
dm1QYWdlU2l6ZSAlIHNtYWxsTGluZVNpemUpLCAidm1QYWdlU2l6ZSBtdXN0IGJlIGFuIGV2ZW4g
bXVsdGlwbGUgb2YgbGluZSBzaXplIik7Ci1zdGF0aWNfYXNzZXJ0KCEoc21hbGxDaHVua1NpemUg
JSBzbWFsbExpbmVTaXplKSwgImNodW5rIHNpemUgbXVzdCBiZSBhbiBldmVuIG11bHRpcGxlIG9m
IGxpbmUgc2l6ZSIpOwotc3RhdGljX2Fzc2VydCgKLSAgICBzaXplb2YoU21hbGxDaHVuaykgJSB2
bVBhZ2VTaXplICsgMiAqIHNtYWxsTWF4IDw9IHZtUGFnZVNpemUsCi0gICAgInRoZSBmaXJzdCBw
YWdlIG9mIG9iamVjdCBtZW1vcnkgaW4gYSBzbWFsbCBjaHVuayBtdXN0IGJlIGFibGUgdG8gYWxs
b2NhdGUgc21hbGxNYXgiKTsKLQotaW5saW5lIFNtYWxsQ2h1bms6OlNtYWxsQ2h1bmsoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKLXsKLSAgICAvLyBUcmFjayB0aGUgbWVtb3J5
IHVzZWQgZm9yIG1ldGFkYXRhIGJ5IGFsbG9jYXRpbmcgaW1hZ2luYXJ5IG9iamVjdHMuCi0gICAg
Zm9yIChjaGFyKiBpdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpOyBpdCA8IG1fbWVt
b3J5OyBpdCArPSBzbWFsbExpbmVTaXplKSB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QoaXQpOwot
ICAgICAgICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7Ci0gICAgICAgIG9iamVjdC5wYWdlKCkt
PnJlZihsb2NrKTsKLSAgICB9Ci19Ci0KLWlubGluZSBTbWFsbENodW5rKiBTbWFsbENodW5rOjpn
ZXQodm9pZCogb2JqZWN0KQotewotICAgIEJBU1NFUlQoaXNTbWFsbChvYmplY3QpKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8U21hbGxDaHVuayo+KG1hc2sob2JqZWN0LCBzbWFsbENodW5rTWFz
aykpOwotfQotCi1pbmxpbmUgc2l6ZV90IFNtYWxsQ2h1bms6Om9mZnNldCh2b2lkKiBvYmplY3Qp
Ci17Ci0gICAgQkFTU0VSVChvYmplY3QgPj0gdGhpcyk7Ci0gICAgQkFTU0VSVChvYmplY3QgPCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHNtYWxsQ2h1bmtTaXplKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPih0
aGlzKTsKLX0KLQotaW5saW5lIHZvaWQqIFNtYWxsQ2h1bms6Om9iamVjdChzaXplX3Qgb2Zmc2V0
KQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldDsK
LX0KLQotaW5saW5lIFNtYWxsUGFnZSogU21hbGxDaHVuazo6cGFnZShzaXplX3Qgb2Zmc2V0KQot
ewotICAgIHNpemVfdCBwYWdlTnVtYmVyID0gb2Zmc2V0IC8gdm1QYWdlU2l6ZTsKLSAgICByZXR1
cm4gJm1fcGFnZXNbcGFnZU51bWJlcl07Ci19Ci0KLWlubGluZSBTbWFsbExpbmUqIFNtYWxsQ2h1
bms6OmxpbmUoc2l6ZV90IG9mZnNldCkKLXsKLSAgICBzaXplX3QgbGluZU51bWJlciA9IG9mZnNl
dCAvIHNtYWxsTGluZVNpemU7Ci0gICAgcmV0dXJuICZtX2xpbmVzW2xpbmVOdW1iZXJdOwotfQot
Ci1pbmxpbmUgY2hhciogU21hbGxMaW5lOjpiZWdpbigpCi17Ci0gICAgU21hbGxDaHVuayogY2h1
bmsgPSBTbWFsbENodW5rOjpnZXQodGhpcyk7Ci0gICAgc2l6ZV90IGxpbmVOdW1iZXIgPSB0aGlz
IC0gY2h1bmstPmxpbmVzKCk7Ci0gICAgc2l6ZV90IG9mZnNldCA9IGxpbmVOdW1iZXIgKiBzbWFs
bExpbmVTaXplOwotICAgIHJldHVybiAmcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2h1bmspW29m
ZnNldF07Ci19Ci0KLWlubGluZSBjaGFyKiBTbWFsbExpbmU6OmVuZCgpCi17Ci0gICAgcmV0dXJu
IGJlZ2luKCkgKyBzbWFsbExpbmVTaXplOwotfQotCi1pbmxpbmUgU21hbGxMaW5lKiBTbWFsbFBh
Z2U6OmJlZ2luKCkKLXsKLSAgICBTbWFsbENodW5rKiBjaHVuayA9IFNtYWxsQ2h1bms6OmdldCh0
aGlzKTsKLSAgICBzaXplX3QgcGFnZU51bWJlciA9IHRoaXMgLSBjaHVuay0+cGFnZXMoKTsKLSAg
ICBzaXplX3QgbGluZU51bWJlciA9IHBhZ2VOdW1iZXIgKiBzbWFsbExpbmVDb3VudDsKLSAgICBy
ZXR1cm4gJmNodW5rLT5saW5lcygpW2xpbmVOdW1iZXJdOwotfQotCi1pbmxpbmUgU21hbGxMaW5l
KiBTbWFsbFBhZ2U6OmVuZCgpCi17Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBzbWFsbExpbmVDb3Vu
dDsKLX0KLQotaW5saW5lIE9iamVjdDo6T2JqZWN0KHZvaWQqIG9iamVjdCkKLSAgICA6IG1fY2h1
bmsoU21hbGxDaHVuazo6Z2V0KG9iamVjdCkpCi0gICAgLCBtX29mZnNldChtX2NodW5rLT5vZmZz
ZXQob2JqZWN0KSkKLXsKLX0KLQotaW5saW5lIE9iamVjdDo6T2JqZWN0KFNtYWxsQ2h1bmsqIGNo
dW5rLCB2b2lkKiBvYmplY3QpCi0gICAgOiBtX2NodW5rKGNodW5rKQotICAgICwgbV9vZmZzZXQo
bV9jaHVuay0+b2Zmc2V0KG9iamVjdCkpCi17Ci0gICAgQkFTU0VSVChjaHVuayA9PSBTbWFsbENo
dW5rOjpnZXQob2JqZWN0KSk7Ci19Ci0KLWlubGluZSBTbWFsbExpbmUqIE9iamVjdDo6bGluZSgp
Ci17Ci0gICAgcmV0dXJuIG1fY2h1bmstPmxpbmUobV9vZmZzZXQpOwotfQotCi1pbmxpbmUgU21h
bGxQYWdlKiBPYmplY3Q6OnBhZ2UoKQotewotICAgIHJldHVybiBtX2NodW5rLT5wYWdlKG1fb2Zm
c2V0KTsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIENodW5rCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDcgQEAgY2xhc3MgU21hbGxQYWdlIDogcHVibGljIExpc3ROb2RlPFNtYWxsUAogcHVibGlj
OgogICAgIFNtYWxsUGFnZSgpCiAgICAgICAgIDogbV9oYXNGcmVlTGluZXModHJ1ZSkKKyAgICAg
ICAgLCBtX29iamVjdFR5cGUoT2JqZWN0VHlwZTo6TGFyZ2UpCiAgICAgewogICAgIH0KIApAQCAt
NDgsNiArNDksOSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemVDbGFzcygpIHsgcmV0dXJuIG1f
c2l6ZUNsYXNzOyB9CiAgICAgdm9pZCBzZXRTaXplQ2xhc3Moc2l6ZV90IHNpemVDbGFzcykgeyBt
X3NpemVDbGFzcyA9IHNpemVDbGFzczsgfQogICAgIAorICAgIE9iamVjdFR5cGUgb2JqZWN0VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0VHlwZTsgfQorICAgIHZvaWQgc2V0T2JqZWN0VHlw
ZShPYmplY3RUeXBlIG9iamVjdFR5cGUpIHsgbV9vYmplY3RUeXBlID0gb2JqZWN0VHlwZTsgfQor
CiAgICAgYm9vbCBoYXNGcmVlTGluZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRnJlZUxpbmVzOyB9CiAgICAgdm9pZCBzZXRIYXNGcmVlTGluZXMo
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIGJvb2wgaGFzRnJlZUxpbmVzKSB7IG1faGFz
RnJlZUxpbmVzID0gaGFzRnJlZUxpbmVzOyB9CiAgICAgCkBAIC01OCw2ICs2Miw3IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgY2hhciBtX2hhc0ZyZWVMaW5lczogMTsKICAgICB1bnNpZ25lZCBj
aGFyIG1fcmVmQ291bnQ6IDc7CiAgICAgdW5zaWduZWQgY2hhciBtX3NpemVDbGFzczsKKyAgICBP
YmplY3RUeXBlIG1fb2JqZWN0VHlwZTsKIAogc3RhdGljX2Fzc2VydCgKICAgICBzaXplQ2xhc3ND
b3VudCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1fc2l6ZUNsYXNzKT46Om1heCgp
LApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TdXBlckNodW5rLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TdXBlckNodW5rLmgJKHJldmlzaW9uIDE5ODY1NSkK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3VwZXJDaHVuay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBTdXBlckNodW5rX2gKLSNkZWZpbmUgU3VwZXJDaHVua19oCi0KLSNpbmNs
dWRlICJMYXJnZUNodW5rLmgiCi0jaW5jbHVkZSAiU21hbGxDaHVuay5oIgotCi1uYW1lc3BhY2Ug
Ym1hbGxvYyB7Ci0KLWNsYXNzIFN1cGVyQ2h1bmsgewotcHVibGljOgotICAgIFN1cGVyQ2h1bmso
KTsKLQotICAgIHZvaWQqIHNtYWxsQ2h1bmsoKTsKLSAgICB2b2lkKiBsYXJnZUNodW5rKCk7Ci19
OwotCi1pbmxpbmUgU3VwZXJDaHVuazo6U3VwZXJDaHVuaygpCi17Ci0gICAgQkFTU0VSVCghdGVz
dCh0aGlzLCB+c3VwZXJDaHVua01hc2spKTsKLSAgICBCQVNTRVJUKCF0ZXN0KHNtYWxsQ2h1bmso
KSwgfnNtYWxsQ2h1bmtNYXNrKSk7Ci0gICAgQkFTU0VSVCghdGVzdChsYXJnZUNodW5rKCksIH5s
YXJnZUNodW5rTWFzaykpOwotfQotCi1pbmxpbmUgdm9pZCogU3VwZXJDaHVuazo6c21hbGxDaHVu
aygpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc21hbGxD
aHVua09mZnNldDsKLX0KLQotaW5saW5lIHZvaWQqIFN1cGVyQ2h1bms6OmxhcmdlQ2h1bmsoKQot
ewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIGxhcmdlQ2h1bmtP
ZmZzZXQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIFN1cGVyQ2h1
bmtfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmNwcAkocmV2aXNpb24gMTk4NjU1KQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJMYXJnZU9iamVjdC5oIgogI2luY2x1ZGUgIlBlclBy
b2Nlc3MuaCIKLSNpbmNsdWRlICJTdXBlckNodW5rLmgiCiAjaW5jbHVkZSAiVk1IZWFwLmgiCiAj
aW5jbHVkZSA8dGhyZWFkPgogCkBAIC0zNiwzNiArMzUsMTYgQEAgVk1IZWFwOjpWTUhlYXAoKQog
ewogfQogCi12b2lkIFZNSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mIGxvY2spCi17Ci0gICAgaWYgKCFtX3NtYWxsQ2h1bmtzLnNpemUoKSkKLSAg
ICAgICAgYWxsb2NhdGVTdXBlckNodW5rKGxvY2spOwotCi0gICAgLy8gV2UgaW5pdGlhbGl6ZSBj
aHVua3MgbGF6aWx5IHRvIGF2b2lkIGRpcnR5aW5nIHRoZWlyIG1ldGFkYXRhIHBhZ2VzLgotICAg
IFNtYWxsQ2h1bmsqIHNtYWxsQ2h1bmsgPSBuZXcgKG1fc21hbGxDaHVua3MucG9wKCktPnNtYWxs
Q2h1bmsoKSkgU21hbGxDaHVuayhsb2NrKTsKLSAgICBmb3IgKGF1dG8qIGl0ID0gc21hbGxDaHVu
ay0+YmVnaW4oKTsgaXQgPCBzbWFsbENodW5rLT5lbmQoKTsgKytpdCkKLSAgICAgICAgbV9zbWFs
bFBhZ2VzLnB1c2goaXQpOwotfQotCiBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VD
aHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQogewotICAgIGlmICghbV9s
YXJnZUNodW5rcy5zaXplKCkpCi0gICAgICAgIGFsbG9jYXRlU3VwZXJDaHVuayhsb2NrKTsKLQot
ICAgIC8vIFdlIGluaXRpYWxpemUgY2h1bmtzIGxhemlseSB0byBhdm9pZCBkaXJ0eWluZyB0aGVp
ciBtZXRhZGF0YSBwYWdlcy4KLSAgICBMYXJnZUNodW5rKiBsYXJnZUNodW5rID0gbmV3IChtX2xh
cmdlQ2h1bmtzLnBvcCgpLT5sYXJnZUNodW5rKCkpIExhcmdlQ2h1bms7Ci0gICAgcmV0dXJuIExh
cmdlT2JqZWN0KGxhcmdlQ2h1bmstPmJlZ2luKCkpOwotfQorICAgIExhcmdlQ2h1bmsqIGxhcmdl
Q2h1bmsgPQorICAgICAgICBuZXcgKHZtQWxsb2NhdGUobGFyZ2VDaHVua1NpemUsIGxhcmdlQ2h1
bmtTaXplKSkgTGFyZ2VDaHVuayhsb2NrKTsKIAotdm9pZCBWTUhlYXA6OmFsbG9jYXRlU3VwZXJD
aHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikKLXsKLSAgICBTdXBlckNodW5rKiBz
dXBlckNodW5rID0KLSAgICAgICAgbmV3ICh2bUFsbG9jYXRlKHN1cGVyQ2h1bmtTaXplLCBzdXBl
ckNodW5rU2l6ZSkpIFN1cGVyQ2h1bms7Ci0gICAgbV9zbWFsbENodW5rcy5wdXNoKHN1cGVyQ2h1
bmspOwotICAgIG1fbGFyZ2VDaHVua3MucHVzaChzdXBlckNodW5rKTsKICNpZiBCT1MoREFSV0lO
KQotICAgIG1fem9uZS5hZGRTdXBlckNodW5rKHN1cGVyQ2h1bmspOworICAgIG1fem9uZS5hZGRM
YXJnZUNodW5rKGxhcmdlQ2h1bmspOwogI2VuZGlmCisKKyAgICByZXR1cm4gTGFyZ2VPYmplY3Qo
bGFyZ2VDaHVuay0+YmVnaW4oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9WTUhlYXAuaAkocmV2aXNpb24gMTk4NjU1KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9WTUhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2lu
Y2x1ZGUgIkxhcmdlT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTZWdy
ZWdhdGVkRnJlZUxpc3QuaCIKLSNpbmNsdWRlICJTbWFsbENodW5rLmgiCiAjaW5jbHVkZSAiVk1T
dGF0ZS5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogI2lmIEJPUyhEQVJXSU4pCkBAIC00NCw0NSAr
NDMsMjYgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogY2xhc3MgQmVnaW5UYWc7CiBjbGFzcyBFbmRU
YWc7CiBjbGFzcyBIZWFwOwotY2xhc3MgU3VwZXJDaHVuazsKIAogY2xhc3MgVk1IZWFwIHsKIHB1
YmxpYzoKICAgICBWTUhlYXAoKTsKIAotICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uo
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIExhcmdlT2JqZWN0IGFsbG9jYXRl
TGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7CiAgICAg
TGFyZ2VPYmplY3QgYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+Jiwgc2l6ZV90LCBzaXplX3QsIHNpemVfdCk7CiAKLSAgICB2b2lkIGRlYWxsb2NhdGVTbWFs
bFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBTbWFsbFBhZ2UqKTsKICAgICB2
b2lkIGRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYs
IExhcmdlT2JqZWN0KTsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBhbGxvY2F0ZVNtYWxsQ2h1
bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIExhcmdlT2JqZWN0IGFsbG9j
YXRlTGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0gICAgdm9pZCBh
bGxvY2F0ZVN1cGVyQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogCi0gICAg
TGlzdDxTbWFsbFBhZ2U+IG1fc21hbGxQYWdlczsKICAgICBTZWdyZWdhdGVkRnJlZUxpc3QgbV9s
YXJnZU9iamVjdHM7CiAKLSAgICBWZWN0b3I8U3VwZXJDaHVuayo+IG1fc21hbGxDaHVua3M7Ci0g
ICAgVmVjdG9yPFN1cGVyQ2h1bmsqPiBtX2xhcmdlQ2h1bmtzOwotCiAjaWYgQk9TKERBUldJTikK
ICAgICBab25lIG1fem9uZTsKICNlbmRpZgogfTsKIAotaW5saW5lIFNtYWxsUGFnZSogVk1IZWFw
OjphbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQot
ewotICAgIGlmIChtX3NtYWxsUGFnZXMuaXNFbXB0eSgpKQotICAgICAgICBhbGxvY2F0ZVNtYWxs
Q2h1bmsobG9jayk7Ci0KLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3NtYWxsUGFnZXMucG9wKCk7
Ci0gICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXMocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgdm1Q
YWdlU2l6ZSk7Ci0gICAgcmV0dXJuIHBhZ2U7Ci19Ci0KIGlubGluZSBMYXJnZU9iamVjdCBWTUhl
YXA6OmFsbG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9j
aywgc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9s
YXJnZU9iamVjdHMudGFrZShzaXplKSkKQEAgLTEwMSwxNSArODEsNiBAQCBpbmxpbmUgTGFyZ2VP
YmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlCiAgICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2VDaHVu
ayhsb2NrKTsKIH0KIAotaW5saW5lIHZvaWQgVk1IZWFwOjpkZWFsbG9jYXRlU21hbGxQYWdlKHN0
ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBTbWFsbFBhZ2UqIHBhZ2UpCi17Ci0g
ICAgbG9jay51bmxvY2soKTsKLSAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKHBhZ2UtPmJl
Z2luKCktPmJlZ2luKCksIHZtUGFnZVNpemUpOwotICAgIGxvY2subG9jaygpOwotICAgIAotICAg
IG1fc21hbGxQYWdlcy5wdXNoKHBhZ2UpOwotfQotCiBpbmxpbmUgdm9pZCBWTUhlYXA6OmRlYWxs
b2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYgbG9jaywgTGFy
Z2VPYmplY3QgbGFyZ2VPYmplY3QpCiB7CiAgICAgLy8gTXVsdGlwbGUgdGhyZWFkcyBtaWdodCBz
Y2F2ZW5nZSBjb25jdXJyZW50bHksIG1lYW5pbmcgdGhhdCBuZXcgbWVyZ2luZyBvcHBvcnR1bml0
aWVzCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1pvbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWm9uZS5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvWm9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4
LDggQEAgc3RhdGljIHNpemVfdCB6b25lU2l6ZShtYWxsb2Nfem9uZV90KiwgYwogc3RhdGljIGtl
cm5fcmV0dXJuX3QgZW51bWVyYXRvcih0YXNrX3QgdGFzaywgdm9pZCogY29udGV4dCwgdW5zaWdu
ZWQgdHlwZV9tYXNrLCB2bV9hZGRyZXNzX3Qgem9uZV9hZGRyZXNzLCBtZW1vcnlfcmVhZGVyX3Qg
cmVhZGVyLCB2bV9yYW5nZV9yZWNvcmRlcl90IHJlY29yZGVyKQogewogICAgIFpvbmUgcmVtb3Rl
Wm9uZSh0YXNrLCByZWFkZXIsIHpvbmVfYWRkcmVzcyk7Ci0gICAgZm9yIChhdXRvKiBzdXBlckNo
dW5rIDogcmVtb3RlWm9uZS5zdXBlckNodW5rcygpKSB7Ci0gICAgICAgIHZtX3JhbmdlX3QgcmFu
Z2UgPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihzdXBlckNodW5rKSwgc3VwZXJD
aHVua1NpemUgfTsKKyAgICBmb3IgKGF1dG8qIGxhcmdlQ2h1bmsgOiByZW1vdGVab25lLmxhcmdl
Q2h1bmtzKCkpIHsKKyAgICAgICAgdm1fcmFuZ2VfdCByYW5nZSA9IHsgcmVpbnRlcnByZXRfY2Fz
dDx2bV9hZGRyZXNzX3Q+KGxhcmdlQ2h1bmspLCBsYXJnZUNodW5rU2l6ZSB9OwogCiAgICAgICAg
IGlmICgodHlwZV9tYXNrICYgTUFMTE9DX1BUUl9SRUdJT05fUkFOR0VfVFlQRSkpCiAgICAgICAg
ICAgICAoKnJlY29yZGVyKSh0YXNrLCBjb250ZXh0LCBNQUxMT0NfUFRSX1JFR0lPTl9SQU5HRV9U
WVBFLCAmcmFuZ2UsIDEpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ab25lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ab25lLmgJKHJldmlzaW9uIDE5ODY1
NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWm9uZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAotY2xhc3MgU3VwZXJDaHVuazsK
K2NsYXNzIExhcmdlQ2h1bms7CiAKIGNsYXNzIFpvbmUgOiBwdWJsaWMgbWFsbG9jX3pvbmVfdCB7
CiBwdWJsaWM6CkBAIC00MSwzMCArNDEsMzAgQEAgcHVibGljOgogICAgIFpvbmUoKTsKICAgICBa
b25lKHRhc2tfdCwgbWVtb3J5X3JlYWRlcl90LCB2bV9hZGRyZXNzX3QpOwogCi0gICAgdm9pZCBh
ZGRTdXBlckNodW5rKFN1cGVyQ2h1bmsqKTsKLSAgICBGaXhlZFZlY3RvcjxTdXBlckNodW5rKiwg
Y2FwYWNpdHk+JiBzdXBlckNodW5rcygpIHsgcmV0dXJuIG1fc3VwZXJDaHVua3M7IH0KKyAgICB2
b2lkIGFkZExhcmdlQ2h1bmsoTGFyZ2VDaHVuayopOworICAgIEZpeGVkVmVjdG9yPExhcmdlQ2h1
bmsqLCBjYXBhY2l0eT4mIGxhcmdlQ2h1bmtzKCkgeyByZXR1cm4gbV9sYXJnZUNodW5rczsgfQog
ICAgIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIHZlY3RvciBoYXMgdHdvIHB1cnBvc2VzOgotICAg
IC8vICAgICAoMSkgSXQgc3RvcmVzIHRoZSBsaXN0IG9mIFN1cGVyQ2h1bmtzIHNvIHRoYXQgd2Ug
Y2FuIGVudW1lcmF0ZQotICAgIC8vICAgICAgICAgZWFjaCBTdXBlckNodW5rIGFuZCByZXF1ZXN0
IHRoYXQgaXQgYmUgc2Nhbm5lZCBpZiByZWFjaGFibGUuCi0gICAgLy8gICAgICgyKSBJdCByb290
cyBhIHBvaW50ZXIgdG8gZWFjaCBTdXBlckNodW5rIGluIGEgZ2xvYmFsIG5vbi1tYWxsb2MKLSAg
ICAvLyAgICAgICAgIFZNIHJlZ2lvbiwgbWFraW5nIGVhY2ggU3VwZXJDaHVuayBhcHBlYXIgcmVh
Y2hhYmxlLCBhbmQgdGhlcmVmb3JlCisgICAgLy8gICAgICgxKSBJdCBzdG9yZXMgdGhlIGxpc3Qg
b2YgTGFyZ2VDaHVua3Mgc28gdGhhdCB3ZSBjYW4gZW51bWVyYXRlCisgICAgLy8gICAgICAgICBl
YWNoIExhcmdlQ2h1bmsgYW5kIHJlcXVlc3QgdGhhdCBpdCBiZSBzY2FubmVkIGlmIHJlYWNoYWJs
ZS4KKyAgICAvLyAgICAgKDIpIEl0IHJvb3RzIGEgcG9pbnRlciB0byBlYWNoIExhcmdlQ2h1bmsg
aW4gYSBnbG9iYWwgbm9uLW1hbGxvYworICAgIC8vICAgICAgICAgVk0gcmVnaW9uLCBtYWtpbmcg
ZWFjaCBMYXJnZUNodW5rIGFwcGVhciByZWFjaGFibGUsIGFuZCB0aGVyZWZvcmUKICAgICAvLyAg
ICAgICAgIGVuc3VyaW5nIHRoYXQgdGhlIGxlYWtzIHRvb2wgd2lsbCBzY2FuIGl0LiAoVGhlIGxl
YWtzIHRvb2wKICAgICAvLyAgICAgICAgIGNvbnNlcnZhdGl2ZWx5IHNjYW5zIGFsbCB3cml0ZWFi
bGUgVk0gcmVnaW9ucyB0aGF0IGFyZSBub3QgbWFsbG9jCiAgICAgLy8gICAgICAgICByZWdpb25z
LCBhbmQgdGhlbiBzY2FucyBtYWxsb2MgcmVnaW9ucyB1c2luZyB0aGUgaW50cm9zcGVjdGlvbiBB
UEkuKQogICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGxlYWtzIHRvb2wgZnJvbSByZXBvcnRpbmcg
ZmFsc2UgcG9zaXRpdmUgbGVha3MgZm9yCiAgICAgLy8gb2JqZWN0cyBwb2ludGVkIHRvIGZyb20g
Ym1hbGxvYyBtZW1vcnkgLS0gdGhvdWdoIGl0IGFsc28gcHJldmVudHMgdGhlCiAgICAgLy8gbGVh
a3MgdG9vbCBmcm9tIGZpbmRpbmcgYW55IGxlYWtzIGluIGJtYWxsb2MgbWVtb3J5LgotICAgIEZp
eGVkVmVjdG9yPFN1cGVyQ2h1bmsqLCBjYXBhY2l0eT4gbV9zdXBlckNodW5rczsKKyAgICBGaXhl
ZFZlY3RvcjxMYXJnZUNodW5rKiwgY2FwYWNpdHk+IG1fbGFyZ2VDaHVua3M7CiB9OwogCi1pbmxp
bmUgdm9pZCBab25lOjphZGRTdXBlckNodW5rKFN1cGVyQ2h1bmsqIHN1cGVyQ2h1bmspCitpbmxp
bmUgdm9pZCBab25lOjphZGRMYXJnZUNodW5rKExhcmdlQ2h1bmsqIGxhcmdlQ2h1bmspCiB7Ci0g
ICAgaWYgKG1fc3VwZXJDaHVua3Muc2l6ZSgpID09IG1fc3VwZXJDaHVua3MuY2FwYWNpdHkoKSkK
KyAgICBpZiAobV9sYXJnZUNodW5rcy5zaXplKCkgPT0gbV9sYXJnZUNodW5rcy5jYXBhY2l0eSgp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9zdXBlckNodW5rcy5wdXNoKHN1cGVyQ2h1
bmspOworICAgIG1fbGFyZ2VDaHVua3MucHVzaChsYXJnZUNodW5rKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgYm1hbGxvYwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274909</attachid>
            <date>2016-03-25 09:08:32 -0700</date>
            <delta_ts>2016-03-25 09:24:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155866-20160325090834.patch</filename>
            <type>text/plain</type>
            <size>53933</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODY1OCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MCBAQAorMjAxNi0wMy0yNCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IHNtYWxsIGFu
ZCBsYXJnZSBvYmplY3RzIHNob3VsZCBzaGFyZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTg2NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY3V0cyBvdXIgVk0gZm9vdHBy
aW50IGluIGhhbGYuIChWTSBmb290cHJpbnQgdXN1YWxseSBkb2Vzbid0CisgICAgICAgIG1hdHRl
ciwgYnV0IG9uIGlPUyB0aGVyZSdzIGFuIGFydGlmaWNpYWwgVk0gbGltaXQgYXJvdW5kIDcwME1C
LCBhbmQgaWYKKyAgICAgICAgeW91IGhpdCBpdCB5b3UgamV0c2FtIC8gY3Jhc2guKQorCisgICAg
ICAgIEl0J3MgYWxzbyBhIHN0ZXAgdG93YXJkIGhvbm9yaW5nIHRoZSBoYXJkd2FyZSBwYWdlIHNp
emUgYXQgcnVudGltZSwKKyAgICAgICAgd2hpY2ggd2lsbCByZWR1Y2UgbWVtb3J5IHVzYWdlIG9u
IGlPUy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGEgc21hbGwgaW1wcm92ZW1lbnQgaW4gcGVh
ayBtZW1vcnkgdXNhZ2UgYmVjYXVzZSBpdCBhbGxvd3MKKyAgICAgICAgc21hbGwgYW5kIGxhcmdl
IG9iamVjdHMgdG8gcmVjeWNsZSBlYWNoIG90aGVyJ3MgbWVtb3J5LiBUaGUgdHJhZGVvZmYgaXMK
KyAgICAgICAgdGhhdCB3ZSByZXF1aXJlIG1vcmUgbWV0YWRhdGEsIHdoaWNoIGNhdXNlcyBtb3Jl
IG1lbW9yeSB1c2FnZSBhZnRlcgorICAgICAgICBzaHJpbmtpbmcgZG93biBmcm9tIHBlYWsgbWVt
b3J5IHVzYWdlLiBJbiB0aGUgZW5kLCB3ZSBoYXZlIHNvbWUgbWVtb3J5CisgICAgICAgIHdpbnMg
YW5kIHNvbWUgbG9zc2VzLCBhbmQgYSBzbWFsbCB3aW4gaW4gdGhlIG1lYW4gb24gb3VyIHN0YW5k
YXJkIG1lbW9yeQorICAgICAgICBiZW5jaG1hcmtzLgorCisgICAgICAgICogYm1hbGxvYy54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOiBSZW1vdmVkIFN1cGVyQ2h1bmsuCisKKyAgICAgICAgKiBi
bWFsbG9jL0FsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnJlYWxs
b2NhdGUpOiBBZG9wdCBhIG5ldyBIZWFwIEFQSSBmb3Igc2hyaW5raW5nCisgICAgICAgIGxhcmdl
IG9iamVjdHMgYmVjYXVzZSBpdCdzIGEgbGl0dGxlIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBpdCB1
c2VkIHRvIGJlLgorCisgICAgICAgIERvbid0IGNoZWNrIGZvciBlcXVhbGl0eSBpbiB0aGUgWExh
cmdlIGNhc2UgYmVjYXVzZSB3ZSBkb24ndCBkbyBpdCBpbgorICAgICAgICBvdGhlciBjYXNlcywg
YW5kIGl0J3MgdW5saWtlbHkgdGhhdCB3ZSdsbCBiZSBjYWxsZWQgZm9yIG5vIHJlYXNvbi4KKwor
ICAgICAgICAqIGJtYWxsb2MvQnVtcEFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6QnVt
cEFsbG9jYXRvcjo6YWxsb2NhdGUpOiBEb24ndCBBU1NFUlQgaXNTbWFsbCBiZWNhdXNlIHRoYXQn
cworICAgICAgICBhbiBvbGQgY29uY2VwdCBmcm9tIHdoZW4gc21hbGwgYW5kIGxhcmdlIG9iamVj
dHMgd2VyZSBpbiBkaXN0aW5jdCBtZW1vcnkKKyAgICAgICAgcmVnaW9ucy4KKworICAgICAgICAq
IGJtYWxsb2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6
OmRlYWxsb2NhdGVTbG93Q2FzZSk6IExhcmdlIG9iamVjdHMgYXJlIG5vdAorICAgICAgICBzZWdy
ZWdhdGVkIGFueW1vcmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpkZWFsbG9j
YXRlTGFyZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5oOgor
ICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSk6IERvbid0
IEFTU0VSVCBpc1NtYWxsKCkuIFNlZQorICAgICAgICBhYm92ZS4KKworICAgICAgICAqIGJtYWxs
b2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZSk6CisgICAgICAg
IChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZXMpOiBOZXcgaGVscGVycyBmb3IgcmV0dXJuaW5nIGNhY2hl
ZAorICAgICAgICBzbWFsbCBwYWdlcyB0byB0aGUgbGFyZ2Ugb2JqZWN0IGhlYXAuCisKKyAgICAg
ICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKTogQWxsb2NhdGUgc21hbGwgcGFn
ZXMgZnJvbSB0aGUgbGFyZ2UKKyAgICAgICAgb2JqZWN0IGhlYXAuIFRoaXMgaXMgaG93IHdlIGFj
Y29tcGxpc2ggc2hhcmluZy4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZVNt
YWxsTGluZSk6IEhhbmRsZSBsYXJnZSBvYmplY3RzIHNpbmNlIHdlIGNhbgorICAgICAgICBlbmNv
dW50ZXIgdGhlbSBvbiB0aGlzIGNvZGUgcGF0aCBub3cuCisKKyAgICAgICAgKGJtYWxsb2M6Okhl
YXA6OnNwbGl0QW5kQWxsb2NhdGUpOiBGaXhlZCBhIGJ1ZyB3aGVyZSB3ZSB3b3VsZCBzb21ldGlt
ZXMKKyAgICAgICAgbm90IHNwbGl0IGV2ZW4gdGhvdWdoIHdlIGNvdWxkLgorCisgICAgICAgIEFs
bG9jYXRpbmcgYSBsYXJnZSBvYmplY3QgYWxzbyByZXF1aXJlcyByZWYnaW5nIGl0cyBzbWFsbCBs
aW5lIHNvIHRoYXQKKyAgICAgICAgd2UgY2FuIGFsaWFzIG1lbW9yeSBiZXR3ZWVuIHNtYWxsIGFu
ZCBsYXJnZSBvYmplY3RzLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxhcmdl
KTogUmV0dXJuIGNhY2hlZCBzbWFsbCBwYWdlcyBiZWZvcmUKKyAgICAgICAgYWxsb2NhdGluZyBh
IGxhcmdlIG9iamVjdCB0aGF0IHdvdWxkIGZpdCBpbiBhIGNhY2hlZCBzbWFsbCBwYWdlLiBUaGlz
CisgICAgICAgIGFsbG93cyBzb21lIGxhcmdlIGFsbG9jYXRpb25zIHRvIHJldXNlIHNtYWxsIG9i
amVjdCBtZW1vcnkuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKTogTmV3
IGhlbHBlci4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKTogRGVs
ZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorCisgICAgICAgICogYm1hbGxvYy9M
YXJnZUNodW5rLmg6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpwYWdlQmVnaW4pOgor
ICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6cGFnZUVuZCk6CisgICAgICAgIChibWFsbG9j
OjpMYXJnZUNodW5rOjpsaW5lcyk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpwYWdl
cyk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpiZWdpbik6CisgICAgICAgIChibWFs
bG9jOjpMYXJnZUNodW5rOjplbmQpOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6TGFy
Z2VDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpnZXQpOgorICAgICAgICAo
Ym1hbGxvYzo6TGFyZ2VDaHVuazo6ZW5kVGFnKToKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlQ2h1
bms6Om9mZnNldCk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZUNodW5rOjpvYmplY3QpOgorICAg
ICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6cGFnZSk6CisgICAgICAgIChibWFsbG9jOjpMYXJn
ZUNodW5rOjpsaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OlNtYWxsTGluZTo6YmVnaW4pOgorICAg
ICAgICAoYm1hbGxvYzo6U21hbGxMaW5lOjplbmQpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQ
YWdlOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpTbWFsbFBhZ2U6OmVuZCk6CisgICAgICAg
IChibWFsbG9jOjpPYmplY3Q6Ok9iamVjdCk6CisgICAgICAgIChibWFsbG9jOjpPYmplY3Q6OmJl
Z2luKToKKyAgICAgICAgKGJtYWxsb2M6Ok9iamVjdDo6cGFnZUJlZ2luKToKKyAgICAgICAgKGJt
YWxsb2M6Ok9iamVjdDo6bGluZSk6CisgICAgICAgIChibWFsbG9jOjpPYmplY3Q6OnBhZ2UpOiBJ
IG1lcmdlZCBhbGwgdGhlIFNtYWxsQ2h1bmsgbWV0YWRhdGEgYW5kIGNvZGUKKyAgICAgICAgaW50
byBMYXJnZUNodW5rLiBOb3cgd2UgdXNlIGEgc2luZ2xlIGNsYXNzIHRvIHRyYWNrIGJvdGggc21h
bGwgYW5kIGxhcmdlCisgICAgICAgIG1ldGFkYXRhLCBzbyB3ZSBjYW4gc2hhcmUgbWVtb3J5IGJl
dHdlZW4gc21hbGwgYW5kIGxhcmdlIG9iamVjdHMuCisKKyAgICAgICAgSSdtIGdvaW5nIHRvIHJl
bmFtZSB0aGlzIGNsYXNzIHRvIENodW5rIGluIGEgZm9sbG93LXVwIHBhdGNoLgorCisgICAgICAg
ICogYm1hbGxvYy9PYmplY3QuaDoKKyAgICAgICAgKGJtYWxsb2M6Ok9iamVjdDo6Y2h1bmspOiBV
cGRhdGVkIGZvciBMYXJnZUNodW5rIHRyYW5zaXRpb24uCisKKyAgICAgICAgKiBibWFsbG9jL09i
amVjdFR5cGUuY3BwOgorICAgICAgICAoYm1hbGxvYzo6b2JqZWN0VHlwZSk6CisgICAgICAgICog
Ym1hbGxvYy9PYmplY3RUeXBlLmg6CisgICAgICAgIChibWFsbG9jOjppc1hMYXJnZSk6CisgICAg
ICAgIChibWFsbG9jOjppc1NtYWxsKTogRGVsZXRlZC4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBz
bWFsbCBhbmQgbGFyZ2UKKyAgICAgICAgb2JqZWN0cyBpcyBub3cgc3RvcmVkIGluIG1ldGFkYXRh
IGFuZCBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGVpcgorICAgICAgICB2aXJ0dWFsIGFkZHJlc3Mg
cmFuZ2UuCisKKyAgICAgICAgKiBibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oOiBPbmUgbW9y
ZSBlbnRyeSBiZWNhdXNlIHdlIGNvdmVyIGFsbCBvZgorICAgICAgICB3aGF0IHVzZWQgdG8gYmUg
dGhlIHN1cGVyIGNodW5rIGluIGEgbGFyZ2UgY2h1bmsgbm93LgorCisgICAgICAgICogYm1hbGxv
Yy9TaXplcy5oOiBSZW1vdmVkIGJpdCBtYXNraW5nIGhlbHBlcnMgYmVjYXVzZSB3ZSBkb24ndCB1
c2UKKyAgICAgICAgYWRkcmVzcyBtYXNrcyB0byBkaXN0aW5ndWlzaCBzbWFsbCB2cyBsYXJnZSBv
YmplY3QgdHlwZSBhbnltb3JlLgorCisgICAgICAgICogYm1hbGxvYy9TbWFsbENodW5rLmg6IFJl
bW92ZWQuCisKKyAgICAgICAgKiBibWFsbG9jL1NtYWxsUGFnZS5oOgorICAgICAgICAoYm1hbGxv
Yzo6U21hbGxQYWdlOjpTbWFsbFBhZ2UpOiBTdG9yZSBvYmplY3QgdHlwZSBwZXIgcGFnZSBiZWNh
dXNlIGFueQorICAgICAgICBnaXZlbiBwYWdlIGNhbiBiZSB1c2VkIGZvciBsYXJnZSBvYmplY3Rz
IG9yIHNtYWxsIG9iamVjdHMuCisKKyAgICAgICAgKiBibWFsbG9jL1N1cGVyQ2h1bmsuaDogUmVt
b3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvVk1IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6
OlZNSGVhcDo6Vk1IZWFwKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVMYXJn
ZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKTog
RGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTdXBlckNodW5rKTog
RGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5oOgorICAgICAgICAoYm1hbGxvYzo6
Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6
ZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2Nh
dGVTbWFsbFBhZ2UpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFsbG9j
YXRlU21hbGxQYWdlKTogRGVsZXRlZC4gUmVtb3ZlZCBzdXBlciBjaHVuayBhbmQKKyAgICAgICAg
c21hbGwgY2h1bmsgc3VwcG9ydC4KKworICAgICAgICAqIGJtYWxsb2MvWm9uZS5jcHA6CisgICAg
ICAgIChibWFsbG9jOjplbnVtZXJhdG9yKToKKyAgICAgICAgKiBibWFsbG9jL1pvbmUuaDoKKyAg
ICAgICAgKGJtYWxsb2M6OlpvbmU6OmxhcmdlQ2h1bmtzKToKKyAgICAgICAgKGJtYWxsb2M6Olpv
bmU6OmFkZExhcmdlQ2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6Wm9uZTo6c3VwZXJDaHVua3Mp
OiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Wm9uZTo6YWRkU3VwZXJDaHVuayk6IERlbGV0
ZWQuIFJlbW92ZWQgc3VwZXIgY2h1bmsgYW5kCisgICAgICAgIHNtYWxsIGNodW5rIHN1cHBvcnQu
CisKIDIwMTYtMDMtMjMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBibWFsbG9jOiBBZGRlZCBhbiBPYmplY3QgaGVscGVyIGNsYXNzCkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3LDcgKzE3LDYgQEAKIAkJMTQzQ0I4MUQxOTAyMkJD
OTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDNDQjgxQjE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXgu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDNF
RjlBRjFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRUY5QUQxQTlGQUJGNjAwNEY1Qzc3IC8qIEZy
ZWVMaXN0LmNwcCAqLzsgfTsKIAkJMTQzRUY5QjAxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNFRjlB
RTFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDQwQUZDOTFBOTUxNDI0MDA4MzdGQUEgLyogU3Vw
ZXJDaHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ0MEFGQzgxQTk1MTQyNDAwODM3RkFBIC8qIFN1cGVyQ2h1bmsuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDQjFBOTUyNjExMDA4MzdG
QUEgLyogWm9uZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ0MEFGQ0ExQTk1MjYxMTAwODM3RkFBIC8qIFpvbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDRDFBOTUyN0FGMDA4MzdGQUEg
LyogWm9uZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDQwQUZDQzFBOTUyN0FGMDA4MzdGQUEgLyogWm9uZS5jcHAgKi87IH07CiAJCTE0NDhDMzAw
MThGMzc1NDYwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ4QzJGRjE4RjM3NTQzMDA1MDI4MzkgLyogbWJtYWxs
b2MuY3BwICovOyB9OwpAQCAtNDIsNyArNDEsNiBAQAogCQkxNERENzg5OTE4RjQ4RDRBMDA5NTA3
MDIgLyogQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0NDQ2OUU1MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODlBMThGNDhENEEwMDk1MDcw
MiAvKiBEZWFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OUMxOEY0
OEQ0QTAwOTUwNzAyIC8qIEJ1bXBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1wQWxs
b2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMTRERDc4QkIxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsQ2h1bmsuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0N0FBQThDMThDRDM2QTcwMDIyMDFF
NCAvKiBTbWFsbENodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMTRERDc4QkMxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsTGluZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1MjQ3ODYxOEJDNzU3
QzAwRjgwMDk4IC8qIFNtYWxsTGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0REQ3OEJEMThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbFBhZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0UyOUVE
MThDQUU5MDUwMEZFOEEwRiAvKiBTbWFsbFBhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDNTE4RjQ4RDc1MDA5NTA3MDIgLyogQWxn
b3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDIxQTg3NzE4RUU0NjJBMDBCNERENjggLyogQWxnb3JpdGhtLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk1LDcgKzkzLDYgQEAKIAkJMTQzRTI5
RUQxOENBRTkwNTAwRkU4QTBGIC8qIFNtYWxsUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBTbWFsbFBhZ2UuaDsgcGF0aCA9IGJtYWxsb2MvU21hbGxQYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0VGOUFEMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVl
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGcmVlTGlzdC5j
cHA7IHBhdGggPSBibWFsbG9jL0ZyZWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZyZWVMaXN0Lmg7IHBhdGggPSBibWFsbG9jL0ZyZWVMaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NDBBRkM4MUE5NTE0MjQwMDgzN0ZB
QSAvKiBTdXBlckNodW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN1cGVy
Q2h1bmsuaDsgcGF0aCA9IGJtYWxsb2MvU3VwZXJDaHVuay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDQwQUZDQTFBOTUyNjExMDA4MzdGQUEgLyogWm9uZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBab25lLmg7IHBhdGggPSBibWFsbG9jL1pvbmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MEFGQ0MxQTk1MjdBRjAwODM3RkFBIC8qIFpv
bmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWm9uZS5jcHA7IHBh
dGggPSBibWFsbG9jL1pvbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ0
NjlFNDE3QTQ2QkZFMDBGOUVBMUQgLyogQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IENhY2hlLmNwcDsgcGF0aCA9IGJtYWxsb2Mv
Q2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlv
bklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKQEAgLTEyMyw3ICsxMjAsNiBAQAogCQkx
NDc5RTIxMjE3QTFBMjU1MDA2RDRFOUQgLyogVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvVmVj
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRl
bnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDc5RTIxNDE3QTFBNjNFMDA2RDRF
OUQgLyogVk1BbGxvY2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcg
PSAwOyBuYW1lID0gVk1BbGxvY2F0ZS5oOyBwYXRoID0gYm1hbGxvYy9WTUFsbG9jYXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9
IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDdBQUE4ODE4Q0QxN0NFMDAyMjAxRTQgLyogTGFy
Z2VDaHVuay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMYXJnZUNodW5rLmg7
IHBhdGggPSBibWFsbG9jL0xhcmdlQ2h1bmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMTQ3QUFBOEMxOENEMzZBNzAwMjIwMUU0IC8qIFNtYWxsQ2h1bmsuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gU21hbGxDaHVuay5oOyBwYXRoID0gYm1hbGxvYy9TbWFsbENo
dW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODU2NTVFMThBNDNBRjkwMEVE
Njk0MiAvKiBCb3VuZGFyeVRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
b3VuZGFyeVRhZy5oOyBwYXRoID0gYm1hbGxvYy9Cb3VuZGFyeVRhZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDg1NjU2MDE4QTQzREJBMDBFRDY5NDIgLyogT2JqZWN0VHlwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPYmplY3RUeXBlLmg7IHBhdGggPSBi
bWFsbG9jL09iamVjdFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4OTVE
OEYxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEVudmlyb25tZW50LmNwcDsgcGF0aCA9IGJtYWxsb2MvRW52aXJv
bm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA4LDcgKzIwNCw2IEBA
CiAJCTE0N0FBQTlBMThDRTVGRDMwMDIyMDFFNCAvKiBoZWFwOiBzbWFsbCAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMTQ3QUFBOEMxOENEMzZBNzAwMjIw
MUU0IC8qIFNtYWxsQ2h1bmsuaCAqLywKIAkJCQkxNDUyNDc4NjE4QkM3NTdDMDBGODAwOTggLyog
U21hbGxMaW5lLmggKi8sCiAJCQkJMTQzRTI5RUQxOENBRTkwNTAwRkU4QTBGIC8qIFNtYWxsUGFn
ZS5oICovLAogCQkJKTsKQEAgLTI3MCw3ICsyNjUsNiBAQAogCQkJCTE0MTA1RTgzMThFMTQzNzQw
MDNBMTA2RSAvKiBPYmplY3RUeXBlLmNwcCAqLywKIAkJCQkxNDg1NjU2MDE4QTQzREJBMDBFRDY5
NDIgLyogT2JqZWN0VHlwZS5oICovLAogCQkJCTE0NUY2ODc0MTc5REY4NDEwMEQ2NTU5OCAvKiBT
aXplcy5oICovLAotCQkJCTE0NDBBRkM4MUE5NTE0MjQwMDgzN0ZBQSAvKiBTdXBlckNodW5rLmgg
Ki8sCiAJCQkJMTQ0RjdCRkIxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5jcHAgKi8sCiAJCQkJ
MTQ0RjdCRkMxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5oICovLAogCQkJCTE0NDBBRkNBMUE5
NTI2MTEwMDgzN0ZBQSAvKiBab25lLmggKi8sCkBAIC0zMzksMTEgKzMzMyw5IEBACiAJCQkJMTRE
RDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
REQ3OEQwMThGNDhENzUwMDk1MDcwMiAvKiBWTUFsbG9jYXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNEVCNzlFQTFDN0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFuZ2UuaCBpbiBIZWFkZXJzICov
LAotCQkJCTE0NDBBRkM5MUE5NTE0MjQwMDgzN0ZBQSAvKiBTdXBlckNodW5rLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDNFRjlCMDFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0REQ3OENFMThGNDhENzUwMDk1MDcwMiAvKiBTeXNjYWxsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNERENzhDNjE4RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmggaW4g
SGVhZGVycyAqLywKLQkJCQkxNERENzhCQjE4RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxDaHVuay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIElubGluZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4OTVEOTIxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAwMjc0QTE4Rjg5QzIzMDAxMTVDOTcgLyogVk1I
ZWFwLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDQwICsxMTQsMzMgQEAgdm9pZCogQWxsb2NhdG9y
OjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdAogCiAgICAgc2l6ZV90IG9sZFNpemUgPSAwOwogICAg
IHN3aXRjaCAob2JqZWN0VHlwZShvYmplY3QpKSB7Ci0gICAgY2FzZSBTbWFsbDogeworICAgIGNh
c2UgT2JqZWN0VHlwZTo6U21hbGw6IHsKICAgICAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE9iamVj
dChvYmplY3QpLnBhZ2UoKS0+c2l6ZUNsYXNzKCk7CiAgICAgICAgIG9sZFNpemUgPSBvYmplY3RT
aXplKHNpemVDbGFzcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIExhcmdlOiB7
Ci0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxI
ZWFwPjo6bXV0ZXgoKSk7CisgICAgY2FzZSBPYmplY3RUeXBlOjpMYXJnZTogewogICAgICAgICBM
YXJnZU9iamVjdCBsYXJnZU9iamVjdChvYmplY3QpOwogICAgICAgICBvbGRTaXplID0gbGFyZ2VP
YmplY3Quc2l6ZSgpOwogCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXpl
ID4gc21hbGxNYXgpIHsKLSAgICAgICAgICAgIG5ld1NpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9m
PGxhcmdlQWxpZ25tZW50PihuZXdTaXplKTsKICAgICAgICAgICAgIGlmIChvbGRTaXplIC0gbmV3
U2l6ZSA+PSBsYXJnZU1pbikgewotICAgICAgICAgICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVj
dCwgTGFyZ2VPYmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQobmV3U2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbG9jay51bmxvY2soKTsKLSAgICAgICAgICAg
ICAgICBtX2RlYWxsb2NhdG9yLmRlYWxsb2NhdGUoc3BsaXQuc2Vjb25kLmJlZ2luKCkpOwotICAg
ICAgICAgICAgICAgIGxvY2subG9jaygpOworICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICAgICAg
ICAgICAgICBuZXdTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4obmV3
U2l6ZSk7CisgICAgICAgICAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+
c2hyaW5rTGFyZ2UobG9jaywgbGFyZ2VPYmplY3QsIG5ld1NpemUpOworICAgICAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIFhMYXJnZTogewot
ICAgICAgICBCQVNTRVJUKG9iamVjdFR5cGUobnVsbHB0cikgPT0gWExhcmdlKTsKKyAgICBjYXNl
IE9iamVjdFR5cGU6OlhMYXJnZTogeworICAgICAgICBCQVNTRVJUKG9iamVjdFR5cGUobnVsbHB0
cikgPT0gT2JqZWN0VHlwZTo6WExhcmdlKTsKICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2Nr
KFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwogICAgICAgICBvbGRTaXplID0gUGVyUHJvY2Vz
czxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+eExhcmdlU2l6ZShsb2NrLCBvYmplY3QpOwogCi0gICAg
ICAgIGlmIChuZXdTaXplID09IG9sZFNpemUpCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0Owot
CiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXplID4gbGFyZ2VNYXgpIHsK
ICAgICAgICAgICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnNocmlua1hMYXJn
ZShsb2NrLCBSYW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKICAgICAgICAgICAgIHJl
dHVybiBvYmplY3Q7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3IuaAko
cmV2aXNpb24gMTk4NjU1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CdW1wQWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgaW5saW5lIHZvaWQqIEJ1bXBBbGxv
Y2F0b3I6OmFsbG9jYXRlKCkKICAgICAtLW1fcmVtYWluaW5nOwogICAgIGNoYXIqIHJlc3VsdCA9
IG1fcHRyOwogICAgIG1fcHRyICs9IG1fc2l6ZTsKLSAgICBCQVNTRVJUKGlzU21hbGwocmVzdWx0
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9E
ZWFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvRGVhbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5j
bHVkZSAiSW5saW5lLmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGVyUHJvY2Vz
cy5oIgotI2luY2x1ZGUgIlNtYWxsQ2h1bmsuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5j
bHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgpAQCAtNjAsMTIgKzU5LDYgQEAg
dm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKCk7
CiB9CiAKLXZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVMYXJnZSh2b2lkKiBvYmplY3QpCi17
Ci0gICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46
Om11dGV4KCkpOwotICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmRlYWxsb2Nh
dGVMYXJnZShsb2NrLCBvYmplY3QpOwotfQotCiB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRl
WExhcmdlKHZvaWQqIG9iamVjdCkKIHsKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4
PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwpAQCAtOTcsMjAgKzkwLDE1IEBAIHZv
aWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2kKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEJBU1NFUlQob2JqZWN0VHlwZShudWxscHRyKSA9PSBYTGFyZ2UpOwogICAg
IGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaXNTbWFsbChvYmplY3Qp
KSB7Ci0gICAgICAgIHByb2Nlc3NPYmplY3RMb2coKTsKLSAgICAgICAgbV9vYmplY3RMb2cucHVz
aChvYmplY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpc1hMYXJnZShvYmpl
Y3QpKQorICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZVhMYXJnZShvYmplY3QpOwogCi0gICAgaWYg
KCFpc1hMYXJnZShvYmplY3QpKQotICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZUxhcmdlKG9iamVj
dCk7Ci0gICAgCi0gICAgcmV0dXJuIGRlYWxsb2NhdGVYTGFyZ2Uob2JqZWN0KTsKKyAgICBCQVNT
RVJUKG1fb2JqZWN0TG9nLnNpemUoKSA9PSBtX29iamVjdExvZy5jYXBhY2l0eSgpKTsKKyAgICBw
cm9jZXNzT2JqZWN0TG9nKCk7CisgICAgbV9vYmplY3RMb2cucHVzaChvYmplY3QpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxs
b2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRv
ci5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAgcHJpdmF0ZToKICAgICBib29s
IGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7CiAgICAgdm9pZCBkZWFsbG9jYXRlU2xvd0Nhc2Uo
dm9pZCopOwogCi0gICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2Uodm9pZCopOwogICAgIHZvaWQgZGVh
bGxvY2F0ZVhMYXJnZSh2b2lkKik7CiAKICAgICBGaXhlZFZlY3Rvcjx2b2lkKiwgZGVhbGxvY2F0
b3JMb2dDYXBhY2l0eT4gbV9vYmplY3RMb2c7CkBAIC02MCwxMSArNTksMTAgQEAgcHJpdmF0ZToK
IAogaW5saW5lIGJvb2wgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKiBvYmpl
Y3QpCiB7Ci0gICAgaWYgKCFpc1NtYWxsKG9iamVjdCkpCisgICAgQkFTU0VSVChpc1hMYXJnZShu
dWxscHRyKSk7CisgICAgaWYgKGlzWExhcmdlKG9iamVjdCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEJBU1NFUlQob2JqZWN0KTsKLQogICAgIGlmIChtX29iamVjdExvZy5zaXplKCkg
PT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNp
bmNsdWRlICJMYXJnZUNodW5rLmgiCiAjaW5jbHVkZSAiTGFyZ2VPYmplY3QuaCIKICNpbmNsdWRl
ICJQZXJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiU21hbGxDaHVuay5oIgogI2luY2x1ZGUgIlNtYWxs
TGluZS5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgPHRocmVhZD4KQEAgLTg0
LDE5ICs4MywzNCBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhCiB7
CiAgICAgd2FpdFVudGlsRmFsc2UobG9jaywgc2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRpbmdQ
YWdlcyk7CiAKLSAgICBzY2F2ZW5nZVNtYWxsUGFnZXMobG9jaywgc2xlZXBEdXJhdGlvbik7Cisg
ICAgbG9jay51bmxvY2soKTsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICAgICAgc2NhdmVuZ2VT
bWFsbFBhZ2VzKGxvY2spOworICAgIH0KKyAgICBsb2NrLmxvY2soKTsKKwogICAgIHNjYXZlbmdl
TGFyZ2VPYmplY3RzKGxvY2ssIHNsZWVwRHVyYXRpb24pOwogICAgIHNjYXZlbmdlWExhcmdlT2Jq
ZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9uKTsKIAogICAgIHNsZWVwKGxvY2ssIHNsZWVwRHVyYXRp
b24pOwogfQogCi12b2lkIEhlYXA6OnNjYXZlbmdlU21hbGxQYWdlcyhzdGQ6OnVuaXF1ZV9sb2Nr
PFN0YXRpY011dGV4PiYgbG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVlcER1cmF0
aW9uKQordm9pZCBIZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+JiBsb2NrKQogewotICAgIHdoaWxlICghbV9zbWFsbFBhZ2VzLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX3ZtSGVhcC5kZWFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIG1fc21hbGxQYWdlcy5w
b3AoKSk7Ci0gICAgICAgIHdhaXRVbnRpbEZhbHNlKGxvY2ssIHNsZWVwRHVyYXRpb24sIG1faXNB
bGxvY2F0aW5nUGFnZXMpOwotICAgIH0KKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3NtYWxsUGFn
ZXMucG9wKCk7CisKKyAgICAvLyBUcmFuc2Zvcm0gc21hbGwgb2JqZWN0IHBhZ2UgYmFjayBpbnRv
IGEgbGFyZ2Ugb2JqZWN0LgorICAgIHBhZ2UtPnNldE9iamVjdFR5cGUoT2JqZWN0VHlwZTo6TGFy
Z2UpOworCisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QocGFnZS0+YmVnaW4oKS0+YmVnaW4o
KSk7CisgICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIGxhcmdlT2JqZWN0KTsKK30KKwordm9pZCBI
ZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9j
aykKK3sKKyAgICB3aGlsZSAoIW1fc21hbGxQYWdlcy5pc0VtcHR5KCkpCisgICAgICAgIHNjYXZl
bmdlU21hbGxQYWdlKGxvY2spOwogfQogCiB2b2lkIEhlYXA6OnNjYXZlbmdlTGFyZ2VPYmplY3Rz
KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHNsZWVwRHVyYXRpb24pCkBAIC0xNzksMjYgKzE5MywzNCBAQCBTbWFsbFBhZ2UqIEhl
YXA6OmFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6CiB7CiAgICAgaWYgKCFtX3NtYWxsUGFnZXNXaXRo
RnJlZUxpbmVzW3NpemVDbGFzc10uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9zbWFsbFBh
Z2VzV2l0aEZyZWVMaW5lc1tzaXplQ2xhc3NdLnBvcEZyb250KCk7CisgICAgCisgICAgaWYgKCFt
X3NtYWxsUGFnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIFNtYWxsUGFnZSogcGFnZSA9IG1fc21h
bGxQYWdlcy5wb3AoKTsKKyAgICAgICAgcGFnZS0+c2V0U2l6ZUNsYXNzKHNpemVDbGFzcyk7Cisg
ICAgICAgIHJldHVybiBwYWdlOworICAgIH0KIAotICAgIFNtYWxsUGFnZSogcGFnZSA9IFt0aGlz
LCAmbG9ja10oKSB7Ci0gICAgICAgIGlmICghbV9zbWFsbFBhZ2VzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBtX3NtYWxsUGFnZXMucG9wKCk7CisgICAgc2l6ZV90IHVuYWxpZ25lZFNp
emUgPSBsYXJnZU1pbiArIHZtUGFnZVNpemUgLSBsYXJnZUFsaWdubWVudCArIHZtUGFnZVNpemU7
CisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBhbGxvY2F0ZUxhcmdlKGxvY2ssIHZtUGFn
ZVNpemUsIHZtUGFnZVNpemUsIHVuYWxpZ25lZFNpemUpOwogCi0gICAgICAgIG1faXNBbGxvY2F0
aW5nUGFnZXMgPSB0cnVlOwotICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3ZtSGVhcC5hbGxv
Y2F0ZVNtYWxsUGFnZShsb2NrKTsKLSAgICAgICAgcmV0dXJuIHBhZ2U7Ci0gICAgfSgpOworICAg
IC8vIFRyYW5zZm9ybSBvdXIgbGFyZ2Ugb2JqZWN0IGludG8gYSBzbWFsbCBvYmplY3QgcGFnZS4g
V2UgZGVyZWYgaGVyZQorICAgIC8vIGJlY2F1c2Ugb3VyIHNtYWxsIG9iamVjdHMgd2lsbCBrZWVw
IHRoZWlyIG93biByZWZjb3VudHMgb24gdGhlIGxpbmUuCisgICAgT2JqZWN0IG9iamVjdChsYXJn
ZU9iamVjdC5iZWdpbigpKTsKKyAgICBvYmplY3QubGluZSgpLT5kZXJlZihsb2NrKTsKKyAgICBv
YmplY3QucGFnZSgpLT5zZXRPYmplY3RUeXBlKE9iamVjdFR5cGU6OlNtYWxsKTsKIAotICAgIHBh
Z2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOwotICAgIHJldHVybiBwYWdlOworICAgIG9iamVj
dC5wYWdlKCktPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOworICAgIHJldHVybiBvYmplY3QucGFn
ZSgpOwogfQogCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYgbG9jaywgT2JqZWN0IG9iamVjdCkKIHsKICAgICBCQVNTRVJUKCFvYmpl
Y3QubGluZSgpLT5yZWZDb3VudChsb2NrKSk7CiAgICAgU21hbGxQYWdlKiBwYWdlID0gb2JqZWN0
LnBhZ2UoKTsKLSAgICBwYWdlLT5kZXJlZihsb2NrKTsKKyAgICBpZiAocGFnZS0+b2JqZWN0VHlw
ZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKQorICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZUxhcmdl
KGxvY2ssIExhcmdlT2JqZWN0KG9iamVjdC5iZWdpbigpKSk7CiAKKyAgICBwYWdlLT5kZXJlZihs
b2NrKTsKICAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSkgewogICAgICAgICBwYWdl
LT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7CiAgICAgICAgIG1fc21hbGxQYWdlc1dpdGhG
cmVlTGluZXNbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CkBAIC0yMTUsMTkgKzIzNywy
MiBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrCiAgICAgbV9zY2F2
ZW5nZXIucnVuKCk7CiB9CiAKLWlubGluZSBMYXJnZU9iamVjdCYgSGVhcDo6c3BsaXRBbmRBbGxv
Y2F0ZShMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBzaXplKQoraW5saW5lIExhcmdl
T2JqZWN0JiBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mIGxvY2ssIExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCwgc2l6ZV90IHNpemUpCiB7CiAgICAg
QkFTU0VSVChsYXJnZU9iamVjdC5pc0ZyZWUoKSk7CiAKICAgICBMYXJnZU9iamVjdCBuZXh0TGFy
Z2VPYmplY3Q7CiAKLSAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+IGxhcmdlTWlu
KSB7CisgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPj0gbGFyZ2VNaW4pIHsKICAg
ICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gc3BsaXQgPSBsYXJnZU9i
amVjdC5zcGxpdChzaXplKTsKICAgICAgICAgbGFyZ2VPYmplY3QgPSBzcGxpdC5maXJzdDsKICAg
ICAgICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwogICAgIH0KIAogICAgIGxhcmdl
T2JqZWN0LnNldEZyZWUoZmFsc2UpOworICAgIE9iamVjdCBvYmplY3QobGFyZ2VPYmplY3QuYmVn
aW4oKSk7CisgICAgb2JqZWN0LmxpbmUoKS0+cmVmKGxvY2spOworICAgIEJBU1NFUlQob2JqZWN0
LnBhZ2UoKS0+b2JqZWN0VHlwZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKTsKIAogICAgIGlmIChu
ZXh0TGFyZ2VPYmplY3QpIHsKICAgICAgICAgQkFTU0VSVCghbmV4dExhcmdlT2JqZWN0Lm5leHRD
YW5NZXJnZSgpKTsKQEAgLTIzNyw3ICsyNjIsNyBAQCBpbmxpbmUgTGFyZ2VPYmplY3QmIEhlYXA6
OnNwbGl0QW5kQWxsb2NhCiAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwogfQogCi1pbmxpbmUgTGFy
Z2VPYmplY3QmIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0
LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK2lubGluZSBMYXJnZU9iamVjdCYgSGVh
cDo6c3BsaXRBbmRBbGxvY2F0ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBM
YXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQog
ewogICAgIExhcmdlT2JqZWN0IHByZXZMYXJnZU9iamVjdDsKICAgICBMYXJnZU9iamVjdCBuZXh0
TGFyZ2VPYmplY3Q7CkBAIC0yNTIsMTMgKzI3NywxNiBAQCBpbmxpbmUgTGFyZ2VPYmplY3QmIEhl
YXA6OnNwbGl0QW5kQWxsb2NhCiAKICAgICBCQVNTRVJUKGxhcmdlT2JqZWN0LmlzRnJlZSgpKTsK
IAotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBzaXplID4gbGFyZ2VNaW4pIHsKKyAgICBp
ZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+PSBsYXJnZU1pbikgewogICAgICAgICBzdGQ6
OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNwbGl0
KHNpemUpOwogICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OwogICAgICAgICBuZXh0
TGFyZ2VPYmplY3QgPSBzcGxpdC5zZWNvbmQ7CiAgICAgfQogCiAgICAgbGFyZ2VPYmplY3Quc2V0
RnJlZShmYWxzZSk7CisgICAgT2JqZWN0IG9iamVjdChsYXJnZU9iamVjdC5iZWdpbigpKTsKKyAg
ICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7CisgICAgQkFTU0VSVChvYmplY3QucGFnZSgpLT5v
YmplY3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2UpOwogCiAgICAgaWYgKHByZXZMYXJnZU9i
amVjdCkgewogICAgICAgICBMYXJnZU9iamVjdCBtZXJnZWQgPSBwcmV2TGFyZ2VPYmplY3QubWVy
Z2UoKTsKQEAgLTI3OCw2ICszMDYsOSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6
bG9ja19ndWFyCiAgICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKICAgICBCQVNTRVJUKHNp
emUgPj0gbGFyZ2VNaW4pOwogICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBsZU9m
PGxhcmdlQWxpZ25tZW50PihzaXplKSk7CisgICAgCisgICAgaWYgKHNpemUgPD0gdm1QYWdlU2l6
ZSkKKyAgICAgICAgc2NhdmVuZ2VTbWFsbFBhZ2VzKGxvY2spOwogCiAgICAgTGFyZ2VPYmplY3Qg
bGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOwogICAgIGlmICghbGFyZ2VP
YmplY3QpCkBAIC0yOTAsNyArMzIxLDcgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6
OmxvY2tfZ3VhcgogICAgICAgICBsYXJnZU9iamVjdC5zZXRWTVN0YXRlKFZNU3RhdGU6OlBoeXNp
Y2FsKTsKICAgICB9CiAKLSAgICBsYXJnZU9iamVjdCA9IHNwbGl0QW5kQWxsb2NhdGUobGFyZ2VP
YmplY3QsIHNpemUpOworICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShsb2NrLCBs
YXJnZU9iamVjdCwgc2l6ZSk7CiAKICAgICByZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsKIH0K
QEAgLTMwNyw2ICszMzgsOSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19n
dWFyCiAgICAgQkFTU0VSVChhbGlnbm1lbnQgPj0gbGFyZ2VBbGlnbm1lbnQpOwogICAgIEJBU1NF
UlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCisgICAgaWYgKHNpemUgPD0gdm1QYWdlU2l6
ZSkKKyAgICAgICAgc2NhdmVuZ2VTbWFsbFBhZ2VzKGxvY2spOworCiAgICAgTGFyZ2VPYmplY3Qg
bGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGln
bmVkU2l6ZSk7CiAgICAgaWYgKCFsYXJnZU9iamVjdCkKICAgICAgICAgbGFyZ2VPYmplY3QgPSBt
X3ZtSGVhcC5hbGxvY2F0ZUxhcmdlT2JqZWN0KGxvY2ssIGFsaWdubWVudCwgc2l6ZSwgdW5hbGln
bmVkU2l6ZSk7CkBAIC0zMTgsMTQgKzM1MiwyMSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdl
KHN0ZDo6bG9ja19ndWFyCiAgICAgICAgIGxhcmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6
UGh5c2ljYWwpOwogICAgIH0KIAotICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShs
YXJnZU9iamVjdCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICBsYXJnZU9iamVjdCA9IHNwbGl0QW5k
QWxsb2NhdGUobG9jaywgbGFyZ2VPYmplY3QsIGFsaWdubWVudCwgc2l6ZSk7CiAKICAgICByZXR1
cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsKIH0KIAordm9pZCBIZWFwOjpzaHJpbmtMYXJnZShzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3Qs
IHNpemVfdCBuZXdTaXplKQoreworICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VPYmpl
Y3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQobmV3U2l6ZSk7CisgICAgZGVhbGxvY2F0ZUxh
cmdlKGxvY2ssIHNwbGl0LnNlY29uZCk7Cit9CisKIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxhcmdl
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9iamVjdCYgbGFyZ2VP
YmplY3QpCiB7CiAgICAgQkFTU0VSVCghbGFyZ2VPYmplY3QuaXNGcmVlKCkpOworICAgIEJBU1NF
UlQoT2JqZWN0KGxhcmdlT2JqZWN0LmJlZ2luKCkpLnBhZ2UoKS0+b2JqZWN0VHlwZSgpID09IE9i
amVjdFR5cGU6OkxhcmdlKTsKICAgICBsYXJnZU9iamVjdC5zZXRGcmVlKHRydWUpOwogICAgIAog
ICAgIExhcmdlT2JqZWN0IG1lcmdlZCA9IGxhcmdlT2JqZWN0Lm1lcmdlKCk7CkBAIC0zMzMsMTIg
KzM3NCw2IEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWEKICAgICBt
X3NjYXZlbmdlci5ydW4oKTsKIH0KIAotdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgdm9pZCogb2JqZWN0KQotewotICAgIExhcmdl
T2JqZWN0IGxhcmdlT2JqZWN0KG9iamVjdCk7Ci0gICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIGxh
cmdlT2JqZWN0KTsKLX0KLQogdm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7
CiAgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50LCBz
aXplKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBA
QAogI2luY2x1ZGUgIk11dGV4LmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2Vn
cmVnYXRlZEZyZWVMaXN0LmgiCi0jaW5jbHVkZSAiU21hbGxDaHVuay5oIgogI2luY2x1ZGUgIlNt
YWxsTGluZS5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1ZGUgIlZNSGVhcC5oIgpA
QCAtNTksNyArNTgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlTGFy
Z2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCwgc2l6ZV90IHVuYWxpZ25lZFNpemUpOwotICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisgICAgdm9pZCBzaHJpbmtMYXJnZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTGFyZ2VPYmplY3QmLCBzaXplX3QpOwogCiAg
ICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNp
emVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CkBAIC04MCw4ICs3OSw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mLCBPYmplY3QpOwogICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9iamVjdCYpOwogCi0gICAgTGFyZ2VPYmplY3Qm
IHNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VPYmplY3QmLCBzaXplX3QpOwotICAgIExhcmdlT2JqZWN0
JiBzcGxpdEFuZEFsbG9jYXRlKExhcmdlT2JqZWN0Jiwgc2l6ZV90LCBzaXplX3QpOworICAgIExh
cmdlT2JqZWN0JiBzcGxpdEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
LCBMYXJnZU9iamVjdCYsIHNpemVfdCk7CisgICAgTGFyZ2VPYmplY3QmIHNwbGl0QW5kQWxsb2Nh
dGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0Jiwgc2l6ZV90LCBz
aXplX3QpOwogICAgIHZvaWQgbWVyZ2VMYXJnZShCZWdpblRhZyomLCBFbmRUYWcqJiwgUmFuZ2Um
KTsKICAgICB2b2lkIG1lcmdlTGFyZ2VMZWZ0KEVuZFRhZyomLCBCZWdpblRhZyomLCBSYW5nZSYs
IGJvb2wmIGluVk1IZWFwKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VSaWdodChFbmRUYWcqJiwgQmVn
aW5UYWcqJiwgUmFuZ2UmLCBib29sJiBpblZNSGVhcCk7CkBAIC04OSw3ICs4OCw4IEBAIHByaXZh
dGU6CiAgICAgWExhcmdlUmFuZ2Ugc3BsaXRBbmRBbGxvY2F0ZShYTGFyZ2VSYW5nZSYsIHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCk7CiAKICAgICB2b2lkIGNvbmN1cnJlbnRTY2F2ZW5nZSgpOwot
ICAgIHZvaWQgc2NhdmVuZ2VTbWFsbFBhZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CisgICAgdm9pZCBzY2F2ZW5nZVNtYWxsUGFn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CisgICAgdm9pZCBzY2F2ZW5nZVNtYWxs
UGFnZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIHZvaWQgc2NhdmVuZ2VM
YXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzKTsKICAgICB2b2lkIHNjYXZlbmdlWExhcmdlT2JqZWN0cyhzdGQ6OnVuaXF1
ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogCkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlQ2h1bmsuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlQ2h1bmsuaAkocmV2aXNpb24gMTk4NjU1KQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZUNodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDgg
KzI4LDExIEBACiAKICNpbmNsdWRlICJCZWdpblRhZy5oIgogI2luY2x1ZGUgIkVuZFRhZy5oIgor
I2luY2x1ZGUgIk9iamVjdC5oIgogI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKICNpbmNsdWRlICJT
aXplcy5oIgorI2luY2x1ZGUgIlNtYWxsTGluZS5oIgorI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgog
I2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKICNpbmNsdWRlIDxhcnJheT4KIApAQCAtMzcsMTIgKzQw
LDI1IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgTGFyZ2VDaHVuayB7CiBwdWJsaWM6
Ci0gICAgTGFyZ2VDaHVuaygpOwogICAgIHN0YXRpYyBMYXJnZUNodW5rKiBnZXQodm9pZCopOwog
CiAgICAgc3RhdGljIEJlZ2luVGFnKiBiZWdpblRhZyh2b2lkKik7CiAgICAgc3RhdGljIEVuZFRh
ZyogZW5kVGFnKHZvaWQqLCBzaXplX3QpOwogCisgICAgTGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+Jik7CisKKyAgICBzaXplX3Qgb2Zmc2V0KHZvaWQqKTsKKworICAgIHZv
aWQqIG9iamVjdChzaXplX3Qgb2Zmc2V0KTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2Uoc2l6ZV90IG9m
ZnNldCk7CisgICAgU21hbGxMaW5lKiBsaW5lKHNpemVfdCBvZmZzZXQpOworCisgICAgU21hbGxQ
YWdlKiBwYWdlQmVnaW4oKSB7IHJldHVybiBPYmplY3QobV9tZW1vcnkpLnBhZ2UoKTsgfQorICAg
IFNtYWxsUGFnZSogcGFnZUVuZCgpIHsgcmV0dXJuIG1fcGFnZXMuZW5kKCk7IH0KKyAgICAKKyAg
ICBTbWFsbExpbmUqIGxpbmVzKCkgeyByZXR1cm4gbV9saW5lcy5iZWdpbigpOyB9CisgICAgU21h
bGxQYWdlKiBwYWdlcygpIHsgcmV0dXJuIG1fcGFnZXMuYmVnaW4oKTsgfQorCiAgICAgY2hhciog
YmVnaW4oKSB7IHJldHVybiBtX21lbW9yeTsgfQogICAgIGNoYXIqIGVuZCgpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgbGFyZ2VDaHVua1NpemU7IH0KIApAQCAtNjQs
MTcgKzgwLDIxIEBAIHByaXZhdGU6CiAgICAgLy8KICAgICAvLyBXZSB1c2UgdGhlIFgncyBmb3Ig
Ym91bmRhcnkgdGFncyBhbmQgdGhlIE8ncyBmb3IgZWRnZSBzZW50aW5lbHMuCiAKKyAgICBzdGQ6
OmFycmF5PFNtYWxsTGluZSwgbGFyZ2VDaHVua1NpemUgLyBzbWFsbExpbmVTaXplPiBtX2xpbmVz
OworICAgIHN0ZDo6YXJyYXk8U21hbGxQYWdlLCBsYXJnZUNodW5rU2l6ZSAvIHZtUGFnZVNpemU+
IG1fcGFnZXM7CiAgICAgc3RkOjphcnJheTxCb3VuZGFyeVRhZywgYm91bmRhcnlUYWdDb3VudD4g
bV9ib3VuZGFyeVRhZ3M7Ci0gICAgY2hhciBtX21lbW9yeVtdIF9fYXR0cmlidXRlX18oKGFsaWdu
ZWQobGFyZ2VBbGlnbm1lbnQrMCkpKTsKKyAgICBjaGFyIG1fbWVtb3J5W10gX19hdHRyaWJ1dGVf
XygoYWxpZ25lZCgyICogc21hbGxNYXggKyAwKSkpOwogfTsKIAotc3RhdGljX2Fzc2VydChsYXJn
ZUNodW5rTWV0YWRhdGFTaXplID09IHNpemVvZihMYXJnZUNodW5rKSwgIk91ciBsYXJnZUNodW5r
TWV0YWRhdGFTaXplIG1hdGggaW4gU2l6ZXMuaCBpcyB3cm9uZyIpOwotc3RhdGljX2Fzc2VydChs
YXJnZUNodW5rTWV0YWRhdGFTaXplICsgbGFyZ2VPYmplY3RNYXggPT0gbGFyZ2VDaHVua1NpemUs
ICJsYXJnZU9iamVjdE1heCBpcyB0b28gc21hbGwgb3IgdG9vIGJpZyIpOworc3RhdGljX2Fzc2Vy
dChzaXplb2YoTGFyZ2VDaHVuaykgKyBsYXJnZU1heCA8PSBsYXJnZUNodW5rU2l6ZSwgImxhcmdl
TWF4IGlzIHRvbyBiaWciKTsKK3N0YXRpY19hc3NlcnQoCisgICAgc2l6ZW9mKExhcmdlQ2h1bmsp
ICUgdm1QYWdlU2l6ZSArIDIgKiBzbWFsbE1heCA8PSB2bVBhZ2VTaXplLAorICAgICJ0aGUgZmly
c3QgcGFnZSBvZiBvYmplY3QgbWVtb3J5IGluIGEgc21hbGwgY2h1bmsgbXVzdCBiZSBhYmxlIHRv
IGFsbG9jYXRlIHNtYWxsTWF4Iik7CiAKLWlubGluZSBMYXJnZUNodW5rOjpMYXJnZUNodW5rKCkK
K2lubGluZSBMYXJnZUNodW5rOjpMYXJnZUNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mIGxvY2spCiB7CiAgICAgUmFuZ2UgcmFuZ2UoYmVnaW4oKSwgZW5kKCkgLSBiZWdpbigpKTsK
LSAgICBCQVNTRVJUKHJhbmdlLnNpemUoKSA9PSBsYXJnZU9iamVjdE1heCk7CisgICAgQkFTU0VS
VChyYW5nZS5zaXplKCkgPD0gbGFyZ2VPYmplY3RNYXgpOwogCiAgICAgQmVnaW5UYWcqIGJlZ2lu
VGFnID0gTGFyZ2VDaHVuazo6YmVnaW5UYWcocmFuZ2UuYmVnaW4oKSk7CiAgICAgYmVnaW5UYWct
PnNldFJhbmdlKHJhbmdlKTsKQEAgLTk3LDExICsxMTcsMTcgQEAgaW5saW5lIExhcmdlQ2h1bms6
OkxhcmdlQ2h1bmsoKQogICAgIEJBU1NFUlQocmlnaHRTZW50aW5lbCA+PSBtX2JvdW5kYXJ5VGFn
cy5iZWdpbigpKTsKICAgICBCQVNTRVJUKHJpZ2h0U2VudGluZWwgPCBtX2JvdW5kYXJ5VGFncy5l
bmQoKSk7CiAgICAgcmlnaHRTZW50aW5lbC0+aW5pdFNlbnRpbmVsKCk7CisKKyAgICAvLyBUcmFj
ayB0aGUgbWVtb3J5IHVzZWQgZm9yIG1ldGFkYXRhIGJ5IGFsbG9jYXRpbmcgaW1hZ2luYXJ5IG9i
amVjdHMuCisgICAgZm9yIChjaGFyKiBpdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
OyBpdCA8IG1fbWVtb3J5OyBpdCArPSBzbWFsbExpbmVTaXplKSB7CisgICAgICAgIE9iamVjdCBv
YmplY3QoaXQpOworICAgICAgICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7CisgICAgICAgIG9i
amVjdC5wYWdlKCktPnJlZihsb2NrKTsKKyAgICB9CiB9CiAKIGlubGluZSBMYXJnZUNodW5rKiBM
YXJnZUNodW5rOjpnZXQodm9pZCogb2JqZWN0KQogewotICAgIEJBU1NFUlQoIWlzU21hbGwob2Jq
ZWN0KSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExhcmdlQ2h1bmsqPihtYXNrKG9iamVjdCwg
bGFyZ2VDaHVua01hc2spKTsKIH0KIApAQCAtMTE0LDggKzE0MCw2IEBAIGlubGluZSBCZWdpblRh
ZyogTGFyZ2VDaHVuazo6YmVnaW5UYWcodm8KIAogaW5saW5lIEVuZFRhZyogTGFyZ2VDaHVuazo6
ZW5kVGFnKHZvaWQqIG9iamVjdCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgQkFTU0VSVCghaXNTbWFs
bChvYmplY3QpKTsKLQogICAgIExhcmdlQ2h1bmsqIGNodW5rID0gZ2V0KG9iamVjdCk7CiAgICAg
Y2hhciogZW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgKyBzaXplOwogCkBAIC0xMjcs
NiArMTUxLDg5IEBAIGlubGluZSBFbmRUYWcqIExhcmdlQ2h1bms6OmVuZFRhZyh2b2lkKiAKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RW5kVGFnKj4oJmNodW5rLT5tX2JvdW5kYXJ5VGFnc1tib3Vu
ZGFyeVRhZ051bWJlcl0pOwogfQogCitpbmxpbmUgc2l6ZV90IExhcmdlQ2h1bms6Om9mZnNldCh2
b2lkKiBvYmplY3QpCit7CisgICAgQkFTU0VSVChvYmplY3QgPj0gdGhpcyk7CisgICAgQkFTU0VS
VChvYmplY3QgPCByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIGxhcmdlQ2h1bmtTaXpl
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSByZWludGVycHJldF9j
YXN0PGNoYXIqPih0aGlzKTsKK30KKworaW5saW5lIHZvaWQqIExhcmdlQ2h1bms6Om9iamVjdChz
aXplX3Qgb2Zmc2V0KQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlz
KSArIG9mZnNldDsKK30KKworaW5saW5lIFNtYWxsUGFnZSogTGFyZ2VDaHVuazo6cGFnZShzaXpl
X3Qgb2Zmc2V0KQoreworICAgIHNpemVfdCBwYWdlTnVtYmVyID0gb2Zmc2V0IC8gdm1QYWdlU2l6
ZTsKKyAgICByZXR1cm4gJm1fcGFnZXNbcGFnZU51bWJlcl07Cit9CisKK2lubGluZSBTbWFsbExp
bmUqIExhcmdlQ2h1bms6OmxpbmUoc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzaXplX3QgbGluZU51
bWJlciA9IG9mZnNldCAvIHNtYWxsTGluZVNpemU7CisgICAgcmV0dXJuICZtX2xpbmVzW2xpbmVO
dW1iZXJdOworfQorCitpbmxpbmUgY2hhciogU21hbGxMaW5lOjpiZWdpbigpCit7CisgICAgTGFy
Z2VDaHVuayogY2h1bmsgPSBMYXJnZUNodW5rOjpnZXQodGhpcyk7CisgICAgc2l6ZV90IGxpbmVO
dW1iZXIgPSB0aGlzIC0gY2h1bmstPmxpbmVzKCk7CisgICAgc2l6ZV90IG9mZnNldCA9IGxpbmVO
dW1iZXIgKiBzbWFsbExpbmVTaXplOworICAgIHJldHVybiAmcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oY2h1bmspW29mZnNldF07Cit9CisKK2lubGluZSBjaGFyKiBTbWFsbExpbmU6OmVuZCgpCit7
CisgICAgcmV0dXJuIGJlZ2luKCkgKyBzbWFsbExpbmVTaXplOworfQorCitpbmxpbmUgU21hbGxM
aW5lKiBTbWFsbFBhZ2U6OmJlZ2luKCkKK3sKKyAgICBMYXJnZUNodW5rKiBjaHVuayA9IExhcmdl
Q2h1bms6OmdldCh0aGlzKTsKKyAgICBzaXplX3QgcGFnZU51bWJlciA9IHRoaXMgLSBjaHVuay0+
cGFnZXMoKTsKKyAgICBzaXplX3QgbGluZU51bWJlciA9IHBhZ2VOdW1iZXIgKiBzbWFsbExpbmVD
b3VudDsKKyAgICByZXR1cm4gJmNodW5rLT5saW5lcygpW2xpbmVOdW1iZXJdOworfQorCitpbmxp
bmUgU21hbGxMaW5lKiBTbWFsbFBhZ2U6OmVuZCgpCit7CisgICAgcmV0dXJuIGJlZ2luKCkgKyBz
bWFsbExpbmVDb3VudDsKK30KKworaW5saW5lIE9iamVjdDo6T2JqZWN0KHZvaWQqIG9iamVjdCkK
KyAgICA6IG1fY2h1bmsoTGFyZ2VDaHVuazo6Z2V0KG9iamVjdCkpCisgICAgLCBtX29mZnNldCht
X2NodW5rLT5vZmZzZXQob2JqZWN0KSkKK3sKK30KKworaW5saW5lIE9iamVjdDo6T2JqZWN0KExh
cmdlQ2h1bmsqIGNodW5rLCB2b2lkKiBvYmplY3QpCisgICAgOiBtX2NodW5rKGNodW5rKQorICAg
ICwgbV9vZmZzZXQobV9jaHVuay0+b2Zmc2V0KG9iamVjdCkpCit7CisgICAgQkFTU0VSVChjaHVu
ayA9PSBMYXJnZUNodW5rOjpnZXQob2JqZWN0KSk7Cit9CisKK2lubGluZSB2b2lkKiBPYmplY3Q6
OmJlZ2luKCkKK3sKKyAgICByZXR1cm4gbV9jaHVuay0+b2JqZWN0KG1fb2Zmc2V0KTsKK30KKwor
aW5saW5lIHZvaWQqIE9iamVjdDo6cGFnZUJlZ2luKCkKK3sKKyAgICByZXR1cm4gbV9jaHVuay0+
b2JqZWN0KHJvdW5kRG93blRvTXVsdGlwbGVPZih2bVBhZ2VTaXplLCBtX29mZnNldCkpOworfQor
CitpbmxpbmUgU21hbGxMaW5lKiBPYmplY3Q6OmxpbmUoKQoreworICAgIHJldHVybiBtX2NodW5r
LT5saW5lKG1fb2Zmc2V0KTsKK30KKworaW5saW5lIFNtYWxsUGFnZSogT2JqZWN0OjpwYWdlKCkK
K3sKKyAgICByZXR1cm4gbV9jaHVuay0+cGFnZShtX29mZnNldCk7Cit9CisKIH07IC8vIG5hbWVz
cGFjZSBibWFsbG9jCiAKICNlbmRpZiAvLyBMYXJnZUNodW5rCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
T2JqZWN0LmgJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIyICsyOCwyNCBAQAogCiBuYW1lc3BhY2UgYm1h
bGxvYyB7CiAKLWNsYXNzIFNtYWxsQ2h1bms7CitjbGFzcyBMYXJnZUNodW5rOwogY2xhc3MgU21h
bGxMaW5lOwogY2xhc3MgU21hbGxQYWdlOwogCiBjbGFzcyBPYmplY3QgewogcHVibGljOgogICAg
IE9iamVjdCh2b2lkKik7Ci0gICAgT2JqZWN0KFNtYWxsQ2h1bmsqLCB2b2lkKik7CisgICAgT2Jq
ZWN0KExhcmdlQ2h1bmsqLCB2b2lkKik7CiAgICAgCi0gICAgU21hbGxDaHVuayogY2h1bmsoKSB7
IHJldHVybiBtX2NodW5rOyB9CisgICAgTGFyZ2VDaHVuayogY2h1bmsoKSB7IHJldHVybiBtX2No
dW5rOyB9CisgICAgdm9pZCogYmVnaW4oKTsKKyAgICB2b2lkKiBwYWdlQmVnaW4oKTsKIAogICAg
IFNtYWxsTGluZSogbGluZSgpOwogICAgIFNtYWxsUGFnZSogcGFnZSgpOwogCiBwcml2YXRlOgot
ICAgIFNtYWxsQ2h1bmsqIG1fY2h1bms7CisgICAgTGFyZ2VDaHVuayogbV9jaHVuazsKICAgICBz
aXplX3QgbV9vZmZzZXQ7CiB9OwogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVj
dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlw
ZS5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIwICsyMywxOSBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2luY2x1ZGUgIkxhcmdlQ2h1bmsuaCIKICNpbmNsdWRlICJPYmplY3RUeXBl
LmgiCiAKKyNpbmNsdWRlICJMYXJnZUNodW5rLmgiCisjaW5jbHVkZSAiT2JqZWN0LmgiCisKIG5h
bWVzcGFjZSBibWFsbG9jIHsKIAogT2JqZWN0VHlwZSBvYmplY3RUeXBlKHZvaWQqIG9iamVjdCkK
IHsKLSAgICBpZiAoaXNTbWFsbChvYmplY3QpKQotICAgICAgICByZXR1cm4gU21hbGw7Ci0gICAg
Ci0gICAgaWYgKCFpc1hMYXJnZShvYmplY3QpKQotICAgICAgICByZXR1cm4gTGFyZ2U7CisgICAg
aWYgKGlzWExhcmdlKG9iamVjdCkpCisgICAgICAgIHJldHVybiBPYmplY3RUeXBlOjpYTGFyZ2U7
CiAgICAgCi0gICAgcmV0dXJuIFhMYXJnZTsKKyAgICByZXR1cm4gT2JqZWN0KG9iamVjdCkucGFn
ZSgpLT5vYmplY3RUeXBlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMx
LDEwIEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAotZW51bSBPYmplY3RUeXBlIHsgU21hbGws
IExhcmdlLCBYTGFyZ2UgfTsKK2VudW0gY2xhc3MgT2JqZWN0VHlwZSA6IHVuc2lnbmVkIGNoYXIg
eyBTbWFsbCwgTGFyZ2UsIFhMYXJnZSB9OwogCiBPYmplY3RUeXBlIG9iamVjdFR5cGUodm9pZCop
OwogCi1pbmxpbmUgYm9vbCBpc1NtYWxsKHZvaWQqIG9iamVjdCkKLXsKLSAgICByZXR1cm4gdGVz
dChvYmplY3QsIHNtYWxsTWFzayk7Ci19Ci0KIGlubGluZSBib29sIGlzWExhcmdlKHZvaWQqIG9i
amVjdCkKIHsKICAgICByZXR1cm4gIXRlc3Qob2JqZWN0LCB+eExhcmdlTWFzayk7CkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgJKHJldmlzaW9uIDE5
ODY1NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICBGcmVlTGlzdCYgc2Vs
ZWN0KHNpemVfdCk7CiAKICAgICBWTVN0YXRlOjpIYXNQaHlzaWNhbCBtX2hhc1BoeXNpY2FsOwot
ICAgIHN0ZDo6YXJyYXk8RnJlZUxpc3QsIDE1PiBtX2ZyZWVMaXN0czsKKyAgICBzdGQ6OmFycmF5
PEZyZWVMaXN0LCAxNj4gbV9mcmVlTGlzdHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9j
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxOTg2NTUpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDQyICs1MSwyOCBA
QCBuYW1lc3BhY2UgU2l6ZXMgewogI2Vsc2UKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZtUGFn
ZVNpemUgPSA0ICoga0I7CiAjZW5kaWYKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZtUGFnZU1h
c2sgPSB+KHZtUGFnZVNpemUgLSAxKTsKICAgICAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1
cGVyQ2h1bmtTaXplID0gMiAqIE1COwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VwZXJDaHVu
a01hc2sgPSB+KHN1cGVyQ2h1bmtTaXplIC0gMSk7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IHNtYWxsQ2h1bmtTaXplID0gc3VwZXJDaHVua1NpemUgLyAyOwotICAgIHN0YXRpYyBjb25zdCBz
aXplX3Qgc21hbGxDaHVua09mZnNldCA9IHN1cGVyQ2h1bmtTaXplIC8gMjsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNtYWxsQ2h1bmtNYXNrID0gfihzbWFsbENodW5rU2l6ZSAtIDF1bCk7Ci0K
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsTGluZVNpemUgPSAyNTY7CiAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBzbWFsbExpbmVDb3VudCA9IHZtUGFnZVNpemUgLyBzbWFsbExpbmVTaXpl
OwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbE1heCA9IDEgKiBrQjsKICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1hc2tTaXplQ2xhc3NNYXggPSA1MTI7CiAKLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGxhcmdlQ2h1bmtTaXplID0gc3VwZXJDaHVua1NpemUgLyAyOwotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgbGFyZ2VDaHVua09mZnNldCA9IDA7CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBsYXJnZUNodW5rU2l6ZSA9IDIgKiBNQjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxh
cmdlQ2h1bmtNYXNrID0gfihsYXJnZUNodW5rU2l6ZSAtIDF1bCk7CiAKICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGxhcmdlQWxpZ25tZW50ID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBs
YXJnZU1pbiA9IHNtYWxsTWF4OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VDaHVua01l
dGFkYXRhU2l6ZSA9IDQgKiBrQjsgLy8gc2l6ZW9mKExhcmdlQ2h1bmspCi0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBsYXJnZU9iamVjdE1heCA9IGxhcmdlQ2h1bmtTaXplIC0gbGFyZ2VDaHVua01l
dGFkYXRhU2l6ZTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlT2JqZWN0TWF4ID0gbGFy
Z2VDaHVua1NpemU7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZU1heCA9IGxhcmdlT2Jq
ZWN0TWF4IC8gMjsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdlQWxpZ25tZW50ID0g
c3VwZXJDaHVua1NpemU7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB4TGFyZ2VBbGlnbm1lbnQg
PSBsYXJnZUNodW5rU2l6ZTsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZU1hc2sgPSB+
KHhMYXJnZUFsaWdubWVudCAtIDEpOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdlTWF4
ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIHhMYXJnZUFsaWdubWVudDsg
Ly8gTWFrZSBzdXJlIHRoYXQgcm91bmRpbmcgdXAgdG8geExhcmdlQWxpZ25tZW50IGRvZXMgbm90
IG92ZXJmbG93LgogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBmcmVlTGlzdFNlYXJjaERlcHRo
ID0gMTY7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBmcmVlTGlzdEdyb3dGYWN0b3IgPSAyOwog
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCB0eXBlTWFzayA9IChzdXBlckNodW5rU2l6ZSAt
IDEpICYgfigoc3VwZXJDaHVua1NpemUgLyAyKSAtIDEpOyAvLyAyIHRhZ2dhYmxlIGNodW5rcwot
ICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbGFyZ2VNYXNrID0gdHlwZU1hc2sgJiAoc3VwZXJD
aHVua1NpemUgKyBsYXJnZUNodW5rT2Zmc2V0KTsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90
IHNtYWxsTWFzayA9IHR5cGVNYXNrICYgKHN1cGVyQ2h1bmtTaXplICsgc21hbGxDaHVua09mZnNl
dCk7Ci0KICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHkgPSAy
NTY7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBidW1wUmFuZ2VDYWNoZUNhcGFjaXR5ID0gMzsK
ICAgICAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxDaHVuay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxDaHVuay5oCShyZXZpc2lvbiAxOTg2
NTUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsQ2h1bmsuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgU21hbGxDaHVua19oCi0jZGVmaW5lIFNtYWxsQ2h1bmtf
aAotCi0jaW5jbHVkZSAiT2JqZWN0LmgiCi0jaW5jbHVkZSAiU2l6ZXMuaCIKLSNpbmNsdWRlICJT
bWFsbExpbmUuaCIKLSNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKLSNpbmNsdWRlICJWTUFsbG9jYXRl
LmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgU21hbGxDaHVuayB7Ci1wdWJsaWM6
Ci0gICAgU21hbGxDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0KLSAgICBz
dGF0aWMgU21hbGxDaHVuayogZ2V0KHZvaWQqKTsKLSAgICBzaXplX3Qgb2Zmc2V0KHZvaWQqKTsK
LQotICAgIHZvaWQqIG9iamVjdChzaXplX3Qgb2Zmc2V0KTsKLSAgICBTbWFsbFBhZ2UqIHBhZ2Uo
c2l6ZV90IG9mZnNldCk7Ci0gICAgU21hbGxMaW5lKiBsaW5lKHNpemVfdCBvZmZzZXQpOwotCi0g
ICAgU21hbGxQYWdlKiBiZWdpbigpIHsgcmV0dXJuIE9iamVjdChtX21lbW9yeSkucGFnZSgpOyB9
Ci0gICAgU21hbGxQYWdlKiBlbmQoKSB7IHJldHVybiBtX3BhZ2VzLmVuZCgpOyB9Ci0gICAgCi0g
ICAgU21hbGxMaW5lKiBsaW5lcygpIHsgcmV0dXJuIG1fbGluZXMuYmVnaW4oKTsgfQotICAgIFNt
YWxsUGFnZSogcGFnZXMoKSB7IHJldHVybiBtX3BhZ2VzLmJlZ2luKCk7IH0KLSAgICAKLXByaXZh
dGU6Ci0gICAgc3RkOjphcnJheTxTbWFsbExpbmUsIHNtYWxsQ2h1bmtTaXplIC8gc21hbGxMaW5l
U2l6ZT4gbV9saW5lczsKLSAgICBzdGQ6OmFycmF5PFNtYWxsUGFnZSwgc21hbGxDaHVua1NpemUg
LyB2bVBhZ2VTaXplPiBtX3BhZ2VzOwotICAgIGNoYXIgbV9tZW1vcnlbXSBfX2F0dHJpYnV0ZV9f
KChhbGlnbmVkKDIgKiBzbWFsbE1heCArIDApKSk7Ci19OwotCi1zdGF0aWNfYXNzZXJ0KCEodm1Q
YWdlU2l6ZSAlIHNtYWxsTGluZVNpemUpLCAidm1QYWdlU2l6ZSBtdXN0IGJlIGFuIGV2ZW4gbXVs
dGlwbGUgb2YgbGluZSBzaXplIik7Ci1zdGF0aWNfYXNzZXJ0KCEoc21hbGxDaHVua1NpemUgJSBz
bWFsbExpbmVTaXplKSwgImNodW5rIHNpemUgbXVzdCBiZSBhbiBldmVuIG11bHRpcGxlIG9mIGxp
bmUgc2l6ZSIpOwotc3RhdGljX2Fzc2VydCgKLSAgICBzaXplb2YoU21hbGxDaHVuaykgJSB2bVBh
Z2VTaXplICsgMiAqIHNtYWxsTWF4IDw9IHZtUGFnZVNpemUsCi0gICAgInRoZSBmaXJzdCBwYWdl
IG9mIG9iamVjdCBtZW1vcnkgaW4gYSBzbWFsbCBjaHVuayBtdXN0IGJlIGFibGUgdG8gYWxsb2Nh
dGUgc21hbGxNYXgiKTsKLQotaW5saW5lIFNtYWxsQ2h1bms6OlNtYWxsQ2h1bmsoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKLXsKLSAgICAvLyBUcmFjayB0aGUgbWVtb3J5IHVz
ZWQgZm9yIG1ldGFkYXRhIGJ5IGFsbG9jYXRpbmcgaW1hZ2luYXJ5IG9iamVjdHMuCi0gICAgZm9y
IChjaGFyKiBpdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpOyBpdCA8IG1fbWVtb3J5
OyBpdCArPSBzbWFsbExpbmVTaXplKSB7Ci0gICAgICAgIE9iamVjdCBvYmplY3QoaXQpOwotICAg
ICAgICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7Ci0gICAgICAgIG9iamVjdC5wYWdlKCktPnJl
Zihsb2NrKTsKLSAgICB9Ci19Ci0KLWlubGluZSBTbWFsbENodW5rKiBTbWFsbENodW5rOjpnZXQo
dm9pZCogb2JqZWN0KQotewotICAgIEJBU1NFUlQoaXNTbWFsbChvYmplY3QpKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U21hbGxDaHVuayo+KG1hc2sob2JqZWN0LCBzbWFsbENodW5rTWFzaykp
OwotfQotCi1pbmxpbmUgc2l6ZV90IFNtYWxsQ2h1bms6Om9mZnNldCh2b2lkKiBvYmplY3QpCi17
Ci0gICAgQkFTU0VSVChvYmplY3QgPj0gdGhpcyk7Ci0gICAgQkFTU0VSVChvYmplY3QgPCByZWlu
dGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHNtYWxsQ2h1bmtTaXplKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlz
KTsKLX0KLQotaW5saW5lIHZvaWQqIFNtYWxsQ2h1bms6Om9iamVjdChzaXplX3Qgb2Zmc2V0KQot
ewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldDsKLX0K
LQotaW5saW5lIFNtYWxsUGFnZSogU21hbGxDaHVuazo6cGFnZShzaXplX3Qgb2Zmc2V0KQotewot
ICAgIHNpemVfdCBwYWdlTnVtYmVyID0gb2Zmc2V0IC8gdm1QYWdlU2l6ZTsKLSAgICByZXR1cm4g
Jm1fcGFnZXNbcGFnZU51bWJlcl07Ci19Ci0KLWlubGluZSBTbWFsbExpbmUqIFNtYWxsQ2h1bms6
OmxpbmUoc2l6ZV90IG9mZnNldCkKLXsKLSAgICBzaXplX3QgbGluZU51bWJlciA9IG9mZnNldCAv
IHNtYWxsTGluZVNpemU7Ci0gICAgcmV0dXJuICZtX2xpbmVzW2xpbmVOdW1iZXJdOwotfQotCi1p
bmxpbmUgY2hhciogU21hbGxMaW5lOjpiZWdpbigpCi17Ci0gICAgU21hbGxDaHVuayogY2h1bmsg
PSBTbWFsbENodW5rOjpnZXQodGhpcyk7Ci0gICAgc2l6ZV90IGxpbmVOdW1iZXIgPSB0aGlzIC0g
Y2h1bmstPmxpbmVzKCk7Ci0gICAgc2l6ZV90IG9mZnNldCA9IGxpbmVOdW1iZXIgKiBzbWFsbExp
bmVTaXplOwotICAgIHJldHVybiAmcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2h1bmspW29mZnNl
dF07Ci19Ci0KLWlubGluZSBjaGFyKiBTbWFsbExpbmU6OmVuZCgpCi17Ci0gICAgcmV0dXJuIGJl
Z2luKCkgKyBzbWFsbExpbmVTaXplOwotfQotCi1pbmxpbmUgU21hbGxMaW5lKiBTbWFsbFBhZ2U6
OmJlZ2luKCkKLXsKLSAgICBTbWFsbENodW5rKiBjaHVuayA9IFNtYWxsQ2h1bms6OmdldCh0aGlz
KTsKLSAgICBzaXplX3QgcGFnZU51bWJlciA9IHRoaXMgLSBjaHVuay0+cGFnZXMoKTsKLSAgICBz
aXplX3QgbGluZU51bWJlciA9IHBhZ2VOdW1iZXIgKiBzbWFsbExpbmVDb3VudDsKLSAgICByZXR1
cm4gJmNodW5rLT5saW5lcygpW2xpbmVOdW1iZXJdOwotfQotCi1pbmxpbmUgU21hbGxMaW5lKiBT
bWFsbFBhZ2U6OmVuZCgpCi17Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyBzbWFsbExpbmVDb3VudDsK
LX0KLQotaW5saW5lIE9iamVjdDo6T2JqZWN0KHZvaWQqIG9iamVjdCkKLSAgICA6IG1fY2h1bmso
U21hbGxDaHVuazo6Z2V0KG9iamVjdCkpCi0gICAgLCBtX29mZnNldChtX2NodW5rLT5vZmZzZXQo
b2JqZWN0KSkKLXsKLX0KLQotaW5saW5lIE9iamVjdDo6T2JqZWN0KFNtYWxsQ2h1bmsqIGNodW5r
LCB2b2lkKiBvYmplY3QpCi0gICAgOiBtX2NodW5rKGNodW5rKQotICAgICwgbV9vZmZzZXQobV9j
aHVuay0+b2Zmc2V0KG9iamVjdCkpCi17Ci0gICAgQkFTU0VSVChjaHVuayA9PSBTbWFsbENodW5r
OjpnZXQob2JqZWN0KSk7Ci19Ci0KLWlubGluZSBTbWFsbExpbmUqIE9iamVjdDo6bGluZSgpCi17
Ci0gICAgcmV0dXJuIG1fY2h1bmstPmxpbmUobV9vZmZzZXQpOwotfQotCi1pbmxpbmUgU21hbGxQ
YWdlKiBPYmplY3Q6OnBhZ2UoKQotewotICAgIHJldHVybiBtX2NodW5rLT5wYWdlKG1fb2Zmc2V0
KTsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIENodW5rCkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAgY2xhc3MgU21hbGxQYWdlIDogcHVibGljIExpc3ROb2RlPFNtYWxsUAogcHVibGljOgog
ICAgIFNtYWxsUGFnZSgpCiAgICAgICAgIDogbV9oYXNGcmVlTGluZXModHJ1ZSkKKyAgICAgICAg
LCBtX29iamVjdFR5cGUoT2JqZWN0VHlwZTo6TGFyZ2UpCiAgICAgewogICAgIH0KIApAQCAtNDgs
NiArNDksOSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemVDbGFzcygpIHsgcmV0dXJuIG1fc2l6
ZUNsYXNzOyB9CiAgICAgdm9pZCBzZXRTaXplQ2xhc3Moc2l6ZV90IHNpemVDbGFzcykgeyBtX3Np
emVDbGFzcyA9IHNpemVDbGFzczsgfQogICAgIAorICAgIE9iamVjdFR5cGUgb2JqZWN0VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0VHlwZTsgfQorICAgIHZvaWQgc2V0T2JqZWN0VHlwZShP
YmplY3RUeXBlIG9iamVjdFR5cGUpIHsgbV9vYmplY3RUeXBlID0gb2JqZWN0VHlwZTsgfQorCiAg
ICAgYm9vbCBoYXNGcmVlTGluZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpIGNvbnN0
IHsgcmV0dXJuIG1faGFzRnJlZUxpbmVzOyB9CiAgICAgdm9pZCBzZXRIYXNGcmVlTGluZXMoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIGJvb2wgaGFzRnJlZUxpbmVzKSB7IG1faGFzRnJl
ZUxpbmVzID0gaGFzRnJlZUxpbmVzOyB9CiAgICAgCkBAIC01OCw2ICs2Miw3IEBAIHByaXZhdGU6
CiAgICAgdW5zaWduZWQgY2hhciBtX2hhc0ZyZWVMaW5lczogMTsKICAgICB1bnNpZ25lZCBjaGFy
IG1fcmVmQ291bnQ6IDc7CiAgICAgdW5zaWduZWQgY2hhciBtX3NpemVDbGFzczsKKyAgICBPYmpl
Y3RUeXBlIG1fb2JqZWN0VHlwZTsKIAogc3RhdGljX2Fzc2VydCgKICAgICBzaXplQ2xhc3NDb3Vu
dCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRlY2x0eXBlKG1fc2l6ZUNsYXNzKT46Om1heCgpLApJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TdXBlckNodW5rLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9TdXBlckNodW5rLmgJKHJldmlzaW9uIDE5ODY1NSkKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3VwZXJDaHVuay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBTdXBlckNodW5rX2gKLSNkZWZpbmUgU3VwZXJDaHVua19oCi0KLSNpbmNsdWRl
ICJMYXJnZUNodW5rLmgiCi0jaW5jbHVkZSAiU21hbGxDaHVuay5oIgotCi1uYW1lc3BhY2UgYm1h
bGxvYyB7Ci0KLWNsYXNzIFN1cGVyQ2h1bmsgewotcHVibGljOgotICAgIFN1cGVyQ2h1bmsoKTsK
LQotICAgIHZvaWQqIHNtYWxsQ2h1bmsoKTsKLSAgICB2b2lkKiBsYXJnZUNodW5rKCk7Ci19Owot
Ci1pbmxpbmUgU3VwZXJDaHVuazo6U3VwZXJDaHVuaygpCi17Ci0gICAgQkFTU0VSVCghdGVzdCh0
aGlzLCB+c3VwZXJDaHVua01hc2spKTsKLSAgICBCQVNTRVJUKCF0ZXN0KHNtYWxsQ2h1bmsoKSwg
fnNtYWxsQ2h1bmtNYXNrKSk7Ci0gICAgQkFTU0VSVCghdGVzdChsYXJnZUNodW5rKCksIH5sYXJn
ZUNodW5rTWFzaykpOwotfQotCi1pbmxpbmUgdm9pZCogU3VwZXJDaHVuazo6c21hbGxDaHVuaygp
Ci17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc21hbGxDaHVu
a09mZnNldDsKLX0KLQotaW5saW5lIHZvaWQqIFN1cGVyQ2h1bms6OmxhcmdlQ2h1bmsoKQotewot
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIGxhcmdlQ2h1bmtPZmZz
ZXQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIFN1cGVyQ2h1bmtf
aApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmNwcAkocmV2aXNpb24gMTk4NjU1KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw2IEBACiAKICNpbmNsdWRlICJMYXJnZU9iamVjdC5oIgogI2luY2x1ZGUgIlBlclByb2Nl
c3MuaCIKLSNpbmNsdWRlICJTdXBlckNodW5rLmgiCiAjaW5jbHVkZSAiVk1IZWFwLmgiCiAjaW5j
bHVkZSA8dGhyZWFkPgogCkBAIC0zNiwzNiArMzUsMTYgQEAgVk1IZWFwOjpWTUhlYXAoKQogewog
fQogCi12b2lkIFZNSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mIGxvY2spCi17Ci0gICAgaWYgKCFtX3NtYWxsQ2h1bmtzLnNpemUoKSkKLSAgICAg
ICAgYWxsb2NhdGVTdXBlckNodW5rKGxvY2spOwotCi0gICAgLy8gV2UgaW5pdGlhbGl6ZSBjaHVu
a3MgbGF6aWx5IHRvIGF2b2lkIGRpcnR5aW5nIHRoZWlyIG1ldGFkYXRhIHBhZ2VzLgotICAgIFNt
YWxsQ2h1bmsqIHNtYWxsQ2h1bmsgPSBuZXcgKG1fc21hbGxDaHVua3MucG9wKCktPnNtYWxsQ2h1
bmsoKSkgU21hbGxDaHVuayhsb2NrKTsKLSAgICBmb3IgKGF1dG8qIGl0ID0gc21hbGxDaHVuay0+
YmVnaW4oKTsgaXQgPCBzbWFsbENodW5rLT5lbmQoKTsgKytpdCkKLSAgICAgICAgbV9zbWFsbFBh
Z2VzLnB1c2goaXQpOwotfQotCiBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VDaHVu
ayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQogewotICAgIGlmICghbV9sYXJn
ZUNodW5rcy5zaXplKCkpCi0gICAgICAgIGFsbG9jYXRlU3VwZXJDaHVuayhsb2NrKTsKLQotICAg
IC8vIFdlIGluaXRpYWxpemUgY2h1bmtzIGxhemlseSB0byBhdm9pZCBkaXJ0eWluZyB0aGVpciBt
ZXRhZGF0YSBwYWdlcy4KLSAgICBMYXJnZUNodW5rKiBsYXJnZUNodW5rID0gbmV3IChtX2xhcmdl
Q2h1bmtzLnBvcCgpLT5sYXJnZUNodW5rKCkpIExhcmdlQ2h1bms7Ci0gICAgcmV0dXJuIExhcmdl
T2JqZWN0KGxhcmdlQ2h1bmstPmJlZ2luKCkpOwotfQorICAgIExhcmdlQ2h1bmsqIGxhcmdlQ2h1
bmsgPQorICAgICAgICBuZXcgKHZtQWxsb2NhdGUobGFyZ2VDaHVua1NpemUsIGxhcmdlQ2h1bmtT
aXplKSkgTGFyZ2VDaHVuayhsb2NrKTsKIAotdm9pZCBWTUhlYXA6OmFsbG9jYXRlU3VwZXJDaHVu
ayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikKLXsKLSAgICBTdXBlckNodW5rKiBzdXBl
ckNodW5rID0KLSAgICAgICAgbmV3ICh2bUFsbG9jYXRlKHN1cGVyQ2h1bmtTaXplLCBzdXBlckNo
dW5rU2l6ZSkpIFN1cGVyQ2h1bms7Ci0gICAgbV9zbWFsbENodW5rcy5wdXNoKHN1cGVyQ2h1bmsp
OwotICAgIG1fbGFyZ2VDaHVua3MucHVzaChzdXBlckNodW5rKTsKICNpZiBCT1MoREFSV0lOKQot
ICAgIG1fem9uZS5hZGRTdXBlckNodW5rKHN1cGVyQ2h1bmspOworICAgIG1fem9uZS5hZGRMYXJn
ZUNodW5rKGxhcmdlQ2h1bmspOwogI2VuZGlmCisKKyAgICByZXR1cm4gTGFyZ2VPYmplY3QobGFy
Z2VDaHVuay0+YmVnaW4oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9WTUhlYXAuaAkocmV2aXNpb24gMTk4NjU1KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9WTUhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1
ZGUgIkxhcmdlT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTZWdyZWdh
dGVkRnJlZUxpc3QuaCIKLSNpbmNsdWRlICJTbWFsbENodW5rLmgiCiAjaW5jbHVkZSAiVk1TdGF0
ZS5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogI2lmIEJPUyhEQVJXSU4pCkBAIC00NCw0NSArNDMs
MjYgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogY2xhc3MgQmVnaW5UYWc7CiBjbGFzcyBFbmRUYWc7
CiBjbGFzcyBIZWFwOwotY2xhc3MgU3VwZXJDaHVuazsKIAogY2xhc3MgVk1IZWFwIHsKIHB1Ymxp
YzoKICAgICBWTUhlYXAoKTsKIAotICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlTGFy
Z2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7CiAgICAgTGFy
Z2VPYmplY3QgYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
Jiwgc2l6ZV90LCBzaXplX3QsIHNpemVfdCk7CiAKLSAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbFBh
Z2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBTbWFsbFBhZ2UqKTsKICAgICB2b2lk
IGRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIExh
cmdlT2JqZWN0KTsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBhbGxvY2F0ZVNtYWxsQ2h1bmso
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIExhcmdlT2JqZWN0IGFsbG9jYXRl
TGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0gICAgdm9pZCBhbGxv
Y2F0ZVN1cGVyQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogCi0gICAgTGlz
dDxTbWFsbFBhZ2U+IG1fc21hbGxQYWdlczsKICAgICBTZWdyZWdhdGVkRnJlZUxpc3QgbV9sYXJn
ZU9iamVjdHM7CiAKLSAgICBWZWN0b3I8U3VwZXJDaHVuayo+IG1fc21hbGxDaHVua3M7Ci0gICAg
VmVjdG9yPFN1cGVyQ2h1bmsqPiBtX2xhcmdlQ2h1bmtzOwotCiAjaWYgQk9TKERBUldJTikKICAg
ICBab25lIG1fem9uZTsKICNlbmRpZgogfTsKIAotaW5saW5lIFNtYWxsUGFnZSogVk1IZWFwOjph
bGxvY2F0ZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQotewot
ICAgIGlmIChtX3NtYWxsUGFnZXMuaXNFbXB0eSgpKQotICAgICAgICBhbGxvY2F0ZVNtYWxsQ2h1
bmsobG9jayk7Ci0KLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3NtYWxsUGFnZXMucG9wKCk7Ci0g
ICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXMocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgdm1QYWdl
U2l6ZSk7Ci0gICAgcmV0dXJuIHBhZ2U7Ci19Ci0KIGlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6
OmFsbG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywg
c2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJn
ZU9iamVjdHMudGFrZShzaXplKSkKQEAgLTEwMSwxNSArODEsNiBAQCBpbmxpbmUgTGFyZ2VPYmpl
Y3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlCiAgICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2VDaHVuayhs
b2NrKTsKIH0KIAotaW5saW5lIHZvaWQgVk1IZWFwOjpkZWFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6
dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBTbWFsbFBhZ2UqIHBhZ2UpCi17Ci0gICAg
bG9jay51bmxvY2soKTsKLSAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKHBhZ2UtPmJlZ2lu
KCktPmJlZ2luKCksIHZtUGFnZVNpemUpOwotICAgIGxvY2subG9jaygpOwotICAgIAotICAgIG1f
c21hbGxQYWdlcy5wdXNoKHBhZ2UpOwotfQotCiBpbmxpbmUgdm9pZCBWTUhlYXA6OmRlYWxsb2Nh
dGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYgbG9jaywgTGFyZ2VP
YmplY3QgbGFyZ2VPYmplY3QpCiB7CiAgICAgLy8gTXVsdGlwbGUgdGhyZWFkcyBtaWdodCBzY2F2
ZW5nZSBjb25jdXJyZW50bHksIG1lYW5pbmcgdGhhdCBuZXcgbWVyZ2luZyBvcHBvcnR1bml0aWVz
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1pvbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvWm9uZS5jcHAJKHJldmlzaW9uIDE5ODY1NSkKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvWm9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDgg
QEAgc3RhdGljIHNpemVfdCB6b25lU2l6ZShtYWxsb2Nfem9uZV90KiwgYwogc3RhdGljIGtlcm5f
cmV0dXJuX3QgZW51bWVyYXRvcih0YXNrX3QgdGFzaywgdm9pZCogY29udGV4dCwgdW5zaWduZWQg
dHlwZV9tYXNrLCB2bV9hZGRyZXNzX3Qgem9uZV9hZGRyZXNzLCBtZW1vcnlfcmVhZGVyX3QgcmVh
ZGVyLCB2bV9yYW5nZV9yZWNvcmRlcl90IHJlY29yZGVyKQogewogICAgIFpvbmUgcmVtb3RlWm9u
ZSh0YXNrLCByZWFkZXIsIHpvbmVfYWRkcmVzcyk7Ci0gICAgZm9yIChhdXRvKiBzdXBlckNodW5r
IDogcmVtb3RlWm9uZS5zdXBlckNodW5rcygpKSB7Ci0gICAgICAgIHZtX3JhbmdlX3QgcmFuZ2Ug
PSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihzdXBlckNodW5rKSwgc3VwZXJDaHVu
a1NpemUgfTsKKyAgICBmb3IgKGF1dG8qIGxhcmdlQ2h1bmsgOiByZW1vdGVab25lLmxhcmdlQ2h1
bmtzKCkpIHsKKyAgICAgICAgdm1fcmFuZ2VfdCByYW5nZSA9IHsgcmVpbnRlcnByZXRfY2FzdDx2
bV9hZGRyZXNzX3Q+KGxhcmdlQ2h1bmspLCBsYXJnZUNodW5rU2l6ZSB9OwogCiAgICAgICAgIGlm
ICgodHlwZV9tYXNrICYgTUFMTE9DX1BUUl9SRUdJT05fUkFOR0VfVFlQRSkpCiAgICAgICAgICAg
ICAoKnJlY29yZGVyKSh0YXNrLCBjb250ZXh0LCBNQUxMT0NfUFRSX1JFR0lPTl9SQU5HRV9UWVBF
LCAmcmFuZ2UsIDEpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ab25lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ab25lLmgJKHJldmlzaW9uIDE5ODY1NSkK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWm9uZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAotY2xhc3MgU3VwZXJDaHVuazsKK2Ns
YXNzIExhcmdlQ2h1bms7CiAKIGNsYXNzIFpvbmUgOiBwdWJsaWMgbWFsbG9jX3pvbmVfdCB7CiBw
dWJsaWM6CkBAIC00MSwzMCArNDEsMzAgQEAgcHVibGljOgogICAgIFpvbmUoKTsKICAgICBab25l
KHRhc2tfdCwgbWVtb3J5X3JlYWRlcl90LCB2bV9hZGRyZXNzX3QpOwogCi0gICAgdm9pZCBhZGRT
dXBlckNodW5rKFN1cGVyQ2h1bmsqKTsKLSAgICBGaXhlZFZlY3RvcjxTdXBlckNodW5rKiwgY2Fw
YWNpdHk+JiBzdXBlckNodW5rcygpIHsgcmV0dXJuIG1fc3VwZXJDaHVua3M7IH0KKyAgICB2b2lk
IGFkZExhcmdlQ2h1bmsoTGFyZ2VDaHVuayopOworICAgIEZpeGVkVmVjdG9yPExhcmdlQ2h1bmsq
LCBjYXBhY2l0eT4mIGxhcmdlQ2h1bmtzKCkgeyByZXR1cm4gbV9sYXJnZUNodW5rczsgfQogICAg
IAogcHJpdmF0ZToKICAgICAvLyBUaGlzIHZlY3RvciBoYXMgdHdvIHB1cnBvc2VzOgotICAgIC8v
ICAgICAoMSkgSXQgc3RvcmVzIHRoZSBsaXN0IG9mIFN1cGVyQ2h1bmtzIHNvIHRoYXQgd2UgY2Fu
IGVudW1lcmF0ZQotICAgIC8vICAgICAgICAgZWFjaCBTdXBlckNodW5rIGFuZCByZXF1ZXN0IHRo
YXQgaXQgYmUgc2Nhbm5lZCBpZiByZWFjaGFibGUuCi0gICAgLy8gICAgICgyKSBJdCByb290cyBh
IHBvaW50ZXIgdG8gZWFjaCBTdXBlckNodW5rIGluIGEgZ2xvYmFsIG5vbi1tYWxsb2MKLSAgICAv
LyAgICAgICAgIFZNIHJlZ2lvbiwgbWFraW5nIGVhY2ggU3VwZXJDaHVuayBhcHBlYXIgcmVhY2hh
YmxlLCBhbmQgdGhlcmVmb3JlCisgICAgLy8gICAgICgxKSBJdCBzdG9yZXMgdGhlIGxpc3Qgb2Yg
TGFyZ2VDaHVua3Mgc28gdGhhdCB3ZSBjYW4gZW51bWVyYXRlCisgICAgLy8gICAgICAgICBlYWNo
IExhcmdlQ2h1bmsgYW5kIHJlcXVlc3QgdGhhdCBpdCBiZSBzY2FubmVkIGlmIHJlYWNoYWJsZS4K
KyAgICAvLyAgICAgKDIpIEl0IHJvb3RzIGEgcG9pbnRlciB0byBlYWNoIExhcmdlQ2h1bmsgaW4g
YSBnbG9iYWwgbm9uLW1hbGxvYworICAgIC8vICAgICAgICAgVk0gcmVnaW9uLCBtYWtpbmcgZWFj
aCBMYXJnZUNodW5rIGFwcGVhciByZWFjaGFibGUsIGFuZCB0aGVyZWZvcmUKICAgICAvLyAgICAg
ICAgIGVuc3VyaW5nIHRoYXQgdGhlIGxlYWtzIHRvb2wgd2lsbCBzY2FuIGl0LiAoVGhlIGxlYWtz
IHRvb2wKICAgICAvLyAgICAgICAgIGNvbnNlcnZhdGl2ZWx5IHNjYW5zIGFsbCB3cml0ZWFibGUg
Vk0gcmVnaW9ucyB0aGF0IGFyZSBub3QgbWFsbG9jCiAgICAgLy8gICAgICAgICByZWdpb25zLCBh
bmQgdGhlbiBzY2FucyBtYWxsb2MgcmVnaW9ucyB1c2luZyB0aGUgaW50cm9zcGVjdGlvbiBBUEku
KQogICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGxlYWtzIHRvb2wgZnJvbSByZXBvcnRpbmcgZmFs
c2UgcG9zaXRpdmUgbGVha3MgZm9yCiAgICAgLy8gb2JqZWN0cyBwb2ludGVkIHRvIGZyb20gYm1h
bGxvYyBtZW1vcnkgLS0gdGhvdWdoIGl0IGFsc28gcHJldmVudHMgdGhlCiAgICAgLy8gbGVha3Mg
dG9vbCBmcm9tIGZpbmRpbmcgYW55IGxlYWtzIGluIGJtYWxsb2MgbWVtb3J5LgotICAgIEZpeGVk
VmVjdG9yPFN1cGVyQ2h1bmsqLCBjYXBhY2l0eT4gbV9zdXBlckNodW5rczsKKyAgICBGaXhlZFZl
Y3RvcjxMYXJnZUNodW5rKiwgY2FwYWNpdHk+IG1fbGFyZ2VDaHVua3M7CiB9OwogCi1pbmxpbmUg
dm9pZCBab25lOjphZGRTdXBlckNodW5rKFN1cGVyQ2h1bmsqIHN1cGVyQ2h1bmspCitpbmxpbmUg
dm9pZCBab25lOjphZGRMYXJnZUNodW5rKExhcmdlQ2h1bmsqIGxhcmdlQ2h1bmspCiB7Ci0gICAg
aWYgKG1fc3VwZXJDaHVua3Muc2l6ZSgpID09IG1fc3VwZXJDaHVua3MuY2FwYWNpdHkoKSkKKyAg
ICBpZiAobV9sYXJnZUNodW5rcy5zaXplKCkgPT0gbV9sYXJnZUNodW5rcy5jYXBhY2l0eSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9zdXBlckNodW5rcy5wdXNoKHN1cGVyQ2h1bmsp
OworICAgIG1fbGFyZ2VDaHVua3MucHVzaChsYXJnZUNodW5rKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgYm1hbGxvYwo=
</data>
<flag name="review"
          id="299308"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>