<?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>84404</bug_id>
          
          <creation_ts>2012-04-19 16:39:29 -0700</creation_ts>
          <short_desc>We&apos;re collecting pathologically due to small allocations</short_desc>
          <delta_ts>2012-06-12 13:02:19 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>ggaren</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>606149</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-04-19 16:39:29 -0700</bug_when>
    <thetext>On google.com we&apos;re constantly running full collections due to the fact that after a collection, the first allocation will always hit the slow path because there are no free lists in any of the blocks. This causes the GC timer to set itself and fire very quickly, causing another full collection and the resetting of all the free lists. We should not be collecting so aggressively. 

A way to fix this is to change Heap so that instead of using a water mark to gauge whether or not a collection should be run, we track the number of bytes we&apos;ve allocated since the last collection. When that hits a certain threshold, the Heap will recommend a collection be run. The Heap also notifies the GC activity timer of how many bytes have been allocated since the last collection, and the timer will ignore these notifications until the amount allocated exceeds a certain preset amount (currently 128K), after which it will schedule a timer to run a collection like it currently does. This prevents a sort of runaway timer that is rescheduled too eagerly.

This setup also puts the policy of future collection scheduling more squarely into the hands of the Heap and the GC activity timer, which will allow us to have more robust policies in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606181</commentid>
    <comment_count>1</comment_count>
      <attachid>138008</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-04-19 16:53:27 -0700</bug_when>
    <thetext>Created attachment 138008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606195</commentid>
    <comment_count>2</comment_count>
      <attachid>138008</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-19 16:57:05 -0700</bug_when>
    <thetext>Comment on attachment 138008
Patch

r=me, but please put your performance results in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606204</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-04-19 17:05:50 -0700</bug_when>
    <thetext>Committed r114698: &lt;http://trac.webkit.org/changeset/114698&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646265</commentid>
    <comment_count>4</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-06-11 14:26:38 -0700</bug_when>
    <thetext>I&apos;m bisecting a sunspider regression. Now it appears to me this one makes a big impact. I&apos;m testing on QNX armv7 with no DFG, no LLINT, no GGC, no GCActivityCallback implemented. Is it theoretically possible this commit can affect performance very much?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647204</commentid>
    <comment_count>5</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-06-12 13:02:19 -0700</bug_when>
    <thetext>It seems the m_bytesAllocatedLimit (previously m_highWaterMark) is no longer twice of the new size.

    size_t newSize = size();
    if (fullGC) {
        m_lastFullGCSize = newSize;
        m_bytesAllocatedLimit = max(newSize, m_minBytesPerCycle);

After I make it like this:
m_bytesAllocatedLimit = max(newSize * 2, m_minBytesPerCycle);

the regression disappears. I will do more testing to confirm this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138008</attachid>
            <date>2012-04-19 16:53:27 -0700</date>
            <delta_ts>2012-04-19 16:57:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84404-20120419165326.patch</filename>
            <type>text/plain</type>
            <size>34107</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE0NjkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDEyLTA0LTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgV2UncmUgY29sbGVjdGluZyBwYXRob2xvZ2ljYWxseSBkdWUgdG8gc21hbGwgYWxs
b2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg0NDA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDogUmVwbGFjaW5nIG1fZmlyc3RGcmVlQ2VsbCB3aXRo
IG1fZnJlZUxpc3QuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxv
Y2F0ZUJhc2ljSlNPYmplY3QpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOiBHZXR0
aW5nIHJpZCBvZiBhbnkgd2F0ZXIgbWFyayByZWxhdGVkIHN0dWZmLCBzaW5jZSBpdCdzIG5vIAor
ICAgICAgICBsb25nZXIgdXNlZnVsLiAKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OkNvcGll
ZFNwYWNlKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlU2xvd0Nhc2Up
OiBXZSBub3cgb25seSBjYWxsIGRpZEFsbG9jYXRlIGhlcmUgcmF0aGVyIHRoYW4gCisgICAgICAg
IGNhcnJ5aW5nIG91dCBhIHNvbWV3aGF0IGNvbXBsaWNhdGVkIGFjY291bnRpbmcgam9iIGZvciBv
dXIgb2xkIHdhdGVyIG1hcmsgdGhyb3VnaG91dCBDb3BpZWRTcGFjZS4KKyAgICAgICAgKEpTQzo6
Q29waWVkU3BhY2U6OnRyeUFsbG9jYXRlT3ZlcnNpemUpOiAgQ2FsbCB0aGUgbmV3IGRpZEFsbG9j
YXRlIHRvIG5vdGlmeSB0aGUgSGVhcCBvZiAKKyAgICAgICAgbmV3bHkgYWxsb2NhdGVkIHN0dWZm
LgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0ZU92ZXJzaXplKToKKyAg
ICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2spOgorICAgICAgICAoSlND
OjpDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6
ZGVzdHJveSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5oOgorICAgICAgICAoQ29waWVk
U3BhY2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmg6CisgICAg
ICAgIChKU0M6OkNvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZyk6CisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDogUmVtb3ZlZCB3YXRlciBtYXJrIHJlbGF0ZWQgc3R1ZmYsIHJlcGxhY2VkIHdpdGgg
bmV3IGJ5dGVzQWxsb2NhdGVkIGFuZCAKKyAgICAgICAgYnl0ZXNBbGxvY2F0ZWRMaW1pdCB0byB0
cmFjayBob3cgbXVjaCBtZW1vcnkgaGFzIGJlZW4gYWxsb2NhdGVkIHNpbmNlIHRoZSBsYXN0IGNv
bGxlY3Rpb24uCisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFw
OjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNv
bGxlY3QpOiBXZSBub3cgc2V0IHRoZSBuZXcgbGltaXQgb2YgYnl0ZXMgdGhhdCB3ZSBjYW4gYWxs
b2NhdGUgYmVmb3JlIHRyaWdnZXJpbmcgCisgICAgICAgIGEgY29sbGVjdGlvbiB0byBiZSB0aGUg
c2l6ZSBvZiB0aGUgSGVhcCBhZnRlciB0aGUgcHJldmlvdXMgY29sbGVjdGlvbi4gVGh1cywgd2Ug
c3RpbGwgaGF2ZSBvdXIgCisgICAgICAgIDJ4IGFsbG9jYXRpb24gYW1vdW50LgorICAgICAgICAo
SlNDOjpIZWFwOjpkaWRBbGxvY2F0ZSk6IE5vdGlmaWVzIHRoZSBHQyBhY3Rpdml0eSB0aW1lciBv
ZiBob3cgbWFueSBieXRlcyBoYXZlIGJlZW4gYWxsb2NhdGVkIAorICAgICAgICB0aHVzIGZhciBh
bmQgdGhlbiBhZGRzIHRoZSBuZXcgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSBjdXJyZW50IHRvdGFs
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDogUmVtb3ZlZCB3YXRlciBt
YXJrIHJlbGF0ZWQgc3R1ZmYuCisgICAgICAgIChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29s
bGVjdCk6CisgICAgICAgIChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2hvdWxkQ29sbGVj
dCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDog
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIpOiBSZWZh
Y3RvcmVkIHRvIHVzZSBNYXJrZWRCbG9jaydzIG5ldyBGcmVlTGlzdCBzdHJ1Y3QuCisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2Nh
dG9yLmg6IAorICAgICAgICAoTWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlKTogCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6emFwRnJlZUxp
c3QpOiBSZWZhY3RvcmVkIHRvIHRha2UgaW4gYSBGcmVlTGlzdCBpbnN0ZWFkIG9mIGEgRnJlZUNl
bGwuCisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpzcGVjaWFsaXplZFN3ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnN3
ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnN3ZWVwSGVscGVyKToKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OnphcEZyZWVMaXN0KToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJs
b2NrLmg6CisgICAgICAgIChGcmVlTGlzdCk6IEFkZGVkIGEgbmV3IHN0cnVjdCB0aGF0IGtlZXBz
IHRyYWNrIG9mIHRoZSBjdXJyZW50IE1hcmtlZEFsbG9jYXRvcidzCisgICAgICAgIGZyZWUgbGlz
dCBpbmNsdWRpbmcgdGhlIG51bWJlciBvZiBieXRlcyBvZiBzdHVmZiBpbiB0aGUgZnJlZSBsaXN0
IHNvIHRoYXQgd2hlbiB0aGUgZnJlZSBsaXN0IGlzIAorICAgICAgICBleGhhdXN0ZWQsIHRoZSBj
b3JyZWN0IGFtb3VudCBjYW4gYmUgcmVwb3J0ZWQgdG8gSGVhcC4KKyAgICAgICAgKE1hcmtlZEJs
b2NrKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkZyZWVMaXN0OjpGcmVlTGlzdCk6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuY3BwOiBSZW1vdmluZyBh
bGwgd2F0ZXIgbWFyayByZWxhdGVkIHN0dWZmLgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6
TWFya2VkU3BhY2UpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3Jz
KToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6CisgICAgICAgIChNYXJrZWRTcGFjZSk6
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGhlYXAvV2Vha1NldC5jcHA6CisgICAgICAgIChK
U0M6OldlYWtTZXQ6OmZpbmRBbGxvY2F0b3IpOiBSZWZhY3RvcmVkIHRvIHVzZSB0aGUgZGlkQWxs
b2NhdGUgaW50ZXJmYWNlIHdpdGggdGhlIEhlYXAuIFRoaXMgCisgICAgICAgIGZ1bmN0aW9uIHN0
aWxsIG5lZWRzIHdvcmsgdGhvdWdoIG5vdyB0aGF0IHRoZSBIZWFwIGtub3dzIGhvdyBtYW55IGJ5
dGVzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgCisgICAgICAgIHNpbmNlIHRoZSBsYXN0IGNvbGxlY3Rp
b24uCisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDogUmVmYWN0b3JlZCB0byB1c2Ug
TWFya2VkQmxvY2sncyBuZXcgRnJlZUxpc3Qgc3RydWN0LgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRBbGxvY2F0ZUJhc2ljSlNPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9HQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwOiAKKyAgICAgICAgKEpTQzo6RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlk
QWxsb2NhdGUpOiAKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAg
ICAgICAoSlNDOjpHQ0FjdGl2aXR5Q2FsbGJhY2s6OmRpZEFsbG9jYXRlKTogUmVuYW1lZCB3aWxs
QWxsb2NhdGUgdG8gZGlkQWxsb2NhdGUgdG8gaW5kaWNhdGUgdGhhdCAKKyAgICAgICAgdGhlIGFs
bG9jYXRpb24gdGhhdCBpcyBiZWluZyByZXBvcnRlZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZS4K
KyAgICAgICAgKERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2spOgorICAgICAgICAqIHJ1bnRpbWUv
R0NBY3Rpdml0eUNhbGxiYWNrQ0YuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUpOiBSZWZhY3RvcmVkIHRvIHJl
dHVybiBlYXJseSBpZiB0aGUgYW1vdW50IG9mIAorICAgICAgICBhbGxvY2F0aW9uIHNpbmNlIHRo
ZSBsYXN0IGNvbGxlY3Rpb24gaXMgbm90IGFib3ZlIGEgdGhyZXNob2xkIChpbml0aWFsbHkgYXJi
aXRyYXJpbHkgY2hvc2VuIHRvIAorICAgICAgICBiZSAxMjhLQikuIAorCiAyMDEyLTA0LTE5ICBE
b24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAYW0uc29ueS5jb20+CiAKICAgICAgICAgS2V5d29y
ZExvb2t1cEdlbmVyYXRvci5weSBzaG91bGQgdGFrZSBhbiBvdXRwdXQgZmlsZSBhcyBhbiBhcmd1
bWVudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gMTE0NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODA2LDcgKzE4MDYsNyBAQCBwcml2
YXRlOgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhbGxvY2F0b3IgPSAmbV9qaXQuZ2xvYmFs
RGF0YSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemVvZihD
bGFzc1R5cGUpKTsKIAotICAgICAgICBtX2ppdC5sb2FkUHRyKCZhbGxvY2F0b3ItPm1fZmlyc3RG
cmVlQ2VsbCwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigmYWxsb2NhdG9yLT5t
X2ZyZWVMaXN0LmhlYWQsIHJlc3VsdEdQUik7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hh
dCB3ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKQEAgLTE4MTgsNyArMTgxOCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHNjcmF0Y2hHUFIg
YmFjaywgcmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgZnJlZSBsaXN0CiAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZhbGxvY2F0b3ItPm1fZmlyc3RG
cmVlQ2VsbCk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZhbGxvY2F0b3It
Pm1fZnJlZUxpc3QuaGVhZCk7CiAgICAgICAgIAogICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBv
YmplY3QncyBjbGFzc0luZm8gcG9pbnRlcgogICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmQ2xhc3NUeXBlOjpzX2luZm8pLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHJldmlzaW9uIDEx
NDU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQCBDb3BpZWRTcGFjZTo6Q29waWVkU3BhY2UoSGVh
cCogaGVhcCkKICAgICAsIG1fZnJvbVNwYWNlKDApCiAgICAgLCBtX2luQ29weWluZ1BoYXNlKGZh
bHNlKQogICAgICwgbV9udW1iZXJPZkxvYW5lZEJsb2NrcygwKQotICAgICwgbV93YXRlck1hcmso
MCkKIHsKIH0KIApAQCAtNTIsMTIgKzUxLDEwIEBAIHZvaWQgQ29waWVkU3BhY2U6OmluaXQoKQog
CiBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3Qg
Ynl0ZXMsIHZvaWQqKiBvdXRQdHIpCiB7Ci0gICAgbV9oZWFwLT5hY3Rpdml0eUNhbGxiYWNrKCkt
PndpbGxBbGxvY2F0ZSgpOwotICAgIAogICAgIGlmIChpc092ZXJzaXplKGJ5dGVzKSkKICAgICAg
ICAgcmV0dXJuIHRyeUFsbG9jYXRlT3ZlcnNpemUoYnl0ZXMsIG91dFB0cik7CiAgICAgCi0gICAg
bV93YXRlck1hcmsgKz0gbV9hbGxvY2F0b3IuY3VycmVudENhcGFjaXR5KCk7CisgICAgbV9oZWFw
LT5kaWRBbGxvY2F0ZShtX2FsbG9jYXRvci5jdXJyZW50Q2FwYWNpdHkoKSk7CiAKICAgICBpZiAo
IWFkZE5ld0Jsb2NrKCkpIHsKICAgICAgICAgKm91dFB0ciA9IDA7CkBAIC04Niw3ICs4Myw3IEBA
IENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZU8KICAgICAKICAgICAqb3V0
UHRyID0gYWxsb2NhdGVGcm9tQmxvY2soYmxvY2ssIGJ5dGVzKTsKIAotICAgIG1fd2F0ZXJNYXJr
ICs9IGJsb2NrLT5jYXBhY2l0eSgpOworICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUoYmxvY2tTaXpl
KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTM4LDcgKzEzNSw2IEBAIENoZWNrZWRCb29s
ZWFuIENvcGllZFNwYWNlOjp0cnlSZWFsbG9jYXQKICAgICBpZiAoaXNPdmVyc2l6ZShvbGRTaXpl
KSkgewogICAgICAgICBDb3BpZWRCbG9jayogb2xkQmxvY2sgPSBvdmVyc2l6ZUJsb2NrRm9yKG9s
ZFB0cik7CiAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVtb3ZlKG9sZEJsb2NrKTsKLSAgICAg
ICAgbV93YXRlck1hcmsgLT0gb2xkQmxvY2stPmNhcGFjaXR5KCk7CiAgICAgICAgIG9sZEJsb2Nr
LT5tX2FsbG9jYXRpb24uZGVhbGxvY2F0ZSgpOwogICAgIH0KICAgICAKQEAgLTE2NSwxMSArMTYx
LDYgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIH0KIAog
ICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbWVtb3J5U3RhdHNMb2NrKTsKLSAg
ICAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNhcGFjaXR5KCk7Ci0gICAgfQotCi0gICAgewog
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2FuZWRCbG9ja3NMb2NrKTsKICAgICAgICAg
QVNTRVJUKG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MgPiAwKTsKICAgICAgICAgbV9udW1iZXJPZkxv
YW5lZEJsb2Nrcy0tOwpAQCAtMTkzLDcgKzE4NCw2IEBAIHZvaWQgQ29waWVkU3BhY2U6OmRvbmVD
b3B5aW5nKCkKICAgICAgICAgaWYgKGJsb2NrLT5tX2lzUGlubmVkKSB7CiAgICAgICAgICAgICBi
bG9jay0+bV9pc1Bpbm5lZCA9IGZhbHNlOwogICAgICAgICAgICAgbV90b1NwYWNlLT5wdXNoKGJs
b2NrKTsKLSAgICAgICAgICAgIG1fd2F0ZXJNYXJrICs9IGJsb2NrLT5jYXBhY2l0eSgpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMjExLDEwICsyMDEsOCBAQCB2b2lk
IENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgICAgIGlmICghY3Vyci0+bV9pc1Bpbm5l
ZCkgewogICAgICAgICAgICAgbV9vdmVyc2l6ZUJsb2Nrcy5yZW1vdmUoY3Vycik7CiAgICAgICAg
ICAgICBjdXJyLT5tX2FsbG9jYXRpb24uZGVhbGxvY2F0ZSgpOwotICAgICAgICB9IGVsc2Ugewor
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGN1cnItPm1faXNQaW5uZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIG1fd2F0ZXJNYXJrICs9IGN1cnItPmNhcGFjaXR5KCk7Ci0gICAgICAgIH0KICAg
ICAgICAgY3VyciA9IG5leHQ7CiAgICAgfQogCkBAIC0yODEsOCArMjY5LDYgQEAgdm9pZCBDb3Bp
ZWRTcGFjZTo6ZGVzdHJveSgpCiAgICAgICAgIENvcGllZEJsb2NrKiBibG9jayA9IHN0YXRpY19j
YXN0PENvcGllZEJsb2NrKj4obV9vdmVyc2l6ZUJsb2Nrcy5yZW1vdmVIZWFkKCkpOwogICAgICAg
ICBibG9jay0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKICAgICB9Ci0KLSAgICBtX3dhdGVy
TWFyayA9IDA7CiB9CiAKIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDExNDU0MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBjb250YWlucyh2b2lkKiwgQ29waWVk
QmxvY2sqJik7CiAKLSAgICBzaXplX3Qgd2F0ZXJNYXJrKCkgeyByZXR1cm4gbV93YXRlck1hcms7
IH0KICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIHNpemVfdCBjYXBhY2l0eSgpOwogCkBAIC05Miw4
ICs5MSw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgZml0c0luQmxvY2soQ29waWVkQmxv
Y2sqLCBzaXplX3QpOwogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogb3ZlcnNpemVCbG9ja0Zvcih2
b2lkKiBwdHIpOwogCi0gICAgc2l6ZV90IGNhbGN1bGF0ZVdhdGVyTWFyaygpOwotCiAgICAgSGVh
cCogbV9oZWFwOwogCiAgICAgQ29waWVkQWxsb2NhdG9yIG1fYWxsb2NhdG9yOwpAQCAtMTE3LDkg
KzExNCw2IEBAIHByaXZhdGU6CiAgICAgVGhyZWFkQ29uZGl0aW9uIG1fbG9hbmVkQmxvY2tzQ29u
ZGl0aW9uOwogICAgIHNpemVfdCBtX251bWJlck9mTG9hbmVkQmxvY2tzOwogCi0gICAgTXV0ZXgg
bV9tZW1vcnlTdGF0c0xvY2s7Ci0gICAgc2l6ZV90IG1fd2F0ZXJNYXJrOwotCiAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBzX21heEFsbG9jYXRpb25TaXplID0gMzIgKiBLQjsKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNfaW5pdGlhbEJsb2NrTnVtID0gMTY7CiAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBzX2Jsb2NrTWFzayA9IH4oSGVhcEJsb2NrOjpzX2Jsb2NrU2l6ZSAtIDEpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgJKHJldmlzaW9uIDExNDU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1Niw2
IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpzdGFydGVkQ29weWluZygKICAgICBtX3RvU3Bh
Y2VGaWx0ZXIucmVzZXQoKTsKICAgICBtX2FsbG9jYXRvci5zdGFydGVkQ29weWluZygpOwogCi0g
ICAgbV93YXRlck1hcmsgPSAwOwotCiAgICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKICAg
ICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwogICAgIG1faW5Db3B5aW5nUGhhc2Ug
PSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEx
NDU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTMsNyArMzEzLDggQEAgSGVhcDo6SGVhcChKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEhlYQogICAgIDogbV9oZWFwU2l6ZShoZWFwU2l6ZSkKICAgICAsIG1fbWluQnl0ZXNQZXJD
eWNsZShoZWFwU2l6ZUZvckhpbnQoaGVhcFNpemUpKQogICAgICwgbV9sYXN0RnVsbEdDU2l6ZSgw
KQotICAgICwgbV9oaWdoV2F0ZXJNYXJrKG1fbWluQnl0ZXNQZXJDeWNsZSkKKyAgICAsIG1fYnl0
ZXNBbGxvY2F0ZWRMaW1pdChtX21pbkJ5dGVzUGVyQ3ljbGUpCisgICAgLCBtX2J5dGVzQWxsb2Nh
dGVkKDApCiAgICAgLCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MoTm9PcGVyYXRpb24pCiAgICAgLCBt
X29iamVjdFNwYWNlKHRoaXMpCiAgICAgLCBtX3N0b3JhZ2VTcGFjZSh0aGlzKQpAQCAtNDY1LDcg
KzQ2Niw5IEBAIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2UKICAgICAv
LyBpZiBhIGxhcmdlIHZhbHVlIHN1cnZpdmVzIG9uZSBnYXJiYWdlIGNvbGxlY3Rpb24sIHRoZXJl
IGlzIG5vdCBtdWNoIHBvaW50IHRvCiAgICAgLy8gY29sbGVjdGluZyBtb3JlIGZyZXF1ZW50bHkg
YXMgbG9uZyBhcyBpdCBzdGF5cyBhbGl2ZS4KIAotICAgIGFkZFRvV2F0ZXJNYXJrKGNvc3QpOwor
ICAgIGRpZEFsbG9jYXRlKGNvc3QpOworICAgIGlmIChzaG91bGRDb2xsZWN0KCkpCisgICAgICAg
IGNvbGxlY3QoRG9Ob3RTd2VlcCk7CiB9CiAKIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGsp
CkBAIC04NDgsMTYgKzg1MSwxNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dl
ZXBUb2dnCiAgICAgICAgIHNocmluaygpOwogICAgIH0KIAotICAgIC8vIFRvIGF2b2lkIHBhdGhv
bG9naWNhbCBHQyBjaHVybiBpbiBsYXJnZSBoZWFwcywgd2Ugc2V0IHRoZSBhbGxvY2F0aW9uIGhp
Z2gKLSAgICAvLyB3YXRlciBtYXJrIHRvIGJlIHByb3BvcnRpb25hbCB0byB0aGUgY3VycmVudCBz
aXplIG9mIHRoZSBoZWFwLiBUaGUgZXhhY3QKLSAgICAvLyBwcm9wb3J0aW9uIGlzIGEgYml0IGFy
Yml0cmFyeS4gQSAyWCBtdWx0aXBsaWVyIGdpdmVzIGEgMToxIChoZWFwIHNpemUgOgorICAgIC8v
IFRvIGF2b2lkIHBhdGhvbG9naWNhbCBHQyBjaHVybiBpbiBsYXJnZSBoZWFwcywgd2Ugc2V0IHRo
ZSBuZXcgYWxsb2NhdGlvbiAKKyAgICAvLyBsaW1pdCB0byBiZSB0aGUgY3VycmVudCBzaXplIG9m
IHRoZSBoZWFwLiBUaGlzIGhldXJpc3RpYyAKKyAgICAvLyBpcyBhIGJpdCBhcmJpdHJhcnkuIFVz
aW5nIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGhlYXAgYWZ0ZXIgdGhpcyAKKyAgICAvLyBjb2xs
ZWN0aW9uIGdpdmVzIHVzIGEgMlggbXVsdGlwbGllciwgd2hpY2ggaXMgYSAxOjEgKGhlYXAgc2l6
ZSA6CiAgICAgLy8gbmV3IGJ5dGVzIGFsbG9jYXRlZCkgcHJvcG9ydGlvbiwgYW5kIHNlZW1zIHRv
IHdvcmsgd2VsbCBpbiBiZW5jaG1hcmtzLgogICAgIHNpemVfdCBuZXdTaXplID0gc2l6ZSgpOwot
ICAgIHNpemVfdCBwcm9wb3J0aW9uYWxCeXRlcyA9IDIgKiBuZXdTaXplOwogICAgIGlmIChmdWxs
R0MpIHsKICAgICAgICAgbV9sYXN0RnVsbEdDU2l6ZSA9IG5ld1NpemU7Ci0gICAgICAgIG1faGln
aFdhdGVyTWFyayA9IG1heChwcm9wb3J0aW9uYWxCeXRlcywgbV9taW5CeXRlc1BlckN5Y2xlKTsK
KyAgICAgICAgbV9ieXRlc0FsbG9jYXRlZExpbWl0ID0gbWF4KG5ld1NpemUsIG1fbWluQnl0ZXNQ
ZXJDeWNsZSk7CiAgICAgfQorICAgIG1fYnl0ZXNBbGxvY2F0ZWQgPSAwOwogICAgIGRvdWJsZSBs
YXN0R0NFbmRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwogICAgIG1fbGFzdEdDTGVuZ3RoID0g
bGFzdEdDRW5kVGltZSAtIGxhc3RHQ1N0YXJ0VGltZTsKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19F
TkQoKTsKQEAgLTg4Niw2ICs4OTAsMTIgQEAgR0NBY3Rpdml0eUNhbGxiYWNrKiBIZWFwOjphY3Rp
dml0eUNhbGxiYQogICAgIHJldHVybiBtX2FjdGl2aXR5Q2FsbGJhY2suZ2V0KCk7CiB9CiAKK3Zv
aWQgSGVhcDo6ZGlkQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQoreworICAgIG1fYWN0aXZpdHlDYWxs
YmFjay0+ZGlkQWxsb2NhdGUobV9ieXRlc0FsbG9jYXRlZCk7CisgICAgbV9ieXRlc0FsbG9jYXRl
ZCArPSBieXRlczsKK30KKwogYm9vbCBIZWFwOjppc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QgYnl0
ZXMpCiB7CiAgICAgaWYgKCFpc1ZhbGlkVGhyZWFkU3RhdGUobV9nbG9iYWxEYXRhKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDExNDU0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDggKzExMiwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCByZW1vdmVGdW5jdGlvbkV4ZWN1dGFi
bGUoRnVuY3Rpb25FeGVjdXRhYmxlKik7CiAKICAgICAgICAgdm9pZCBub3RpZnlJc1NhZmVUb0Nv
bGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGNvbGxlY3RBbGxHYXJiYWdlKCk7CiAKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjb2xsZWN0QWxsR2FyYmFnZSgpOworICAgICAgICBlbnVtIFN3ZWVwVG9nZ2xl
IHsgRG9Ob3RTd2VlcCwgRG9Td2VlcCB9OworICAgICAgICBib29sIHNob3VsZENvbGxlY3QoKTsK
KyAgICAgICAgdm9pZCBjb2xsZWN0KFN3ZWVwVG9nZ2xlKTsKICAgICAgICAgdm9pZCByZXBvcnRF
eHRyYU1lbW9yeUNvc3Qoc2l6ZV90IGNvc3QpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHJvdGVjdChKU1ZhbHVlKTsKQEAgLTE0NCwxMiArMTQ3LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgZ2V0Q29uc2VydmF0aXZlUmVnaXN0ZXJSb290cyhIYXNoU2V0
PEpTQ2VsbCo+JiByb290cyk7CiAKLSAgICAgICAgdm9pZCBhZGRUb1dhdGVyTWFyayhzaXplX3Qp
OwotCiAgICAgICAgIGRvdWJsZSBsYXN0R0NMZW5ndGgoKSB7IHJldHVybiBtX2xhc3RHQ0xlbmd0
aDsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzY2FyZEFsbENvbXBpbGVk
Q29kZSgpOwogCisgICAgICAgIHZvaWQgZGlkQWxsb2NhdGUoc2l6ZV90KTsKKwogICAgIHByaXZh
dGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0xNjMsMTAgKzE2Niw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCk7CiAgICAg
ICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKIAotICAgICAgICBz
aXplX3Qgd2F0ZXJNYXJrKCk7Ci0gICAgICAgIHNpemVfdCBoaWdoV2F0ZXJNYXJrKCk7Ci0gICAg
ICAgIGJvb2wgc2hvdWxkQ29sbGVjdCgpOwotCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
bWluRXh0cmFDb3N0ID0gMjU2OwogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEV4dHJh
Q29zdCA9IDEwMjQgKiAxMDI0OwogICAgICAgICAKQEAgLTE5Miw4ICsxOTEsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAg
dm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgICAgIAotICAgICAg
ICBlbnVtIFN3ZWVwVG9nZ2xlIHsgRG9Ob3RTd2VlcCwgRG9Td2VlcCB9OwotICAgICAgICB2b2lk
IGNvbGxlY3QoU3dlZXBUb2dnbGUpOwogICAgICAgICB2b2lkIHNocmluaygpOwogICAgICAgICB2
b2lkIHJlbGVhc2VGcmVlQmxvY2tzKCk7CiAgICAgICAgIHZvaWQgc3dlZXAoKTsKQEAgLTIwOCw3
ICsyMDUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgSGVhcFNpemUgbV9oZWFw
U2l6ZTsKICAgICAgICAgY29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKICAgICAgICAg
c2l6ZV90IG1fbGFzdEZ1bGxHQ1NpemU7Ci0gICAgICAgIHNpemVfdCBtX2hpZ2hXYXRlck1hcms7
CisKKyAgICAgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWRMaW1pdDsKKyAgICAgICAgc2l6ZV90
IG1fYnl0ZXNBbGxvY2F0ZWQ7CiAgICAgICAgIAogICAgICAgICBPcGVyYXRpb25JblByb2dyZXNz
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzczsKICAgICAgICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFj
ZTsKQEAgLTI1Nyw3ICsyNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoR0dDKQog
ICAgICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5udXJzZXJ5V2F0ZXJNYXJrKCkgPj0gbV9taW5C
eXRlc1BlckN5Y2xlICYmIG1faXNTYWZlVG9Db2xsZWN0OwogI2Vsc2UKLSAgICAgICAgcmV0dXJu
IHdhdGVyTWFyaygpID49IGhpZ2hXYXRlck1hcmsoKSAmJiBtX2lzU2FmZVRvQ29sbGVjdDsKKyAg
ICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQgPiBtX2J5dGVzQWxsb2NhdGVkTGltaXQgJiYg
bV9pc1NhZmVUb0NvbGxlY3Q7CiAjZW5kaWYKICAgICB9CiAKQEAgLTI5MywyMyArMjkyLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+c2V0
TWFya2VkKGNlbGwpOwogICAgIH0KIAotICAgIGlubGluZSBzaXplX3QgSGVhcDo6d2F0ZXJNYXJr
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29iamVjdFNwYWNlLndhdGVyTWFyaygpICsgbV9z
dG9yYWdlU3BhY2Uud2F0ZXJNYXJrKCk7Ci0gICAgfQotCi0gICAgaW5saW5lIHNpemVfdCBIZWFw
OjpoaWdoV2F0ZXJNYXJrKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2hpZ2hXYXRlck1hcms7
Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgSGVhcDo6YWRkVG9XYXRlck1hcmsoc2l6ZV90IHNp
emUpCi0gICAgewotICAgICAgICBtX29iamVjdFNwYWNlLmFkZFRvV2F0ZXJNYXJrKHNpemUpOwot
ICAgICAgICBpZiAod2F0ZXJNYXJrKCkgPiBoaWdoV2F0ZXJNYXJrKCkpCi0gICAgICAgICAgICBj
b2xsZWN0KERvTm90U3dlZXApOwotICAgIH0KLQogI2lmIEVOQUJMRShHR0MpCiAgICAgaW5saW5l
IHVpbnQ4X3QqIEhlYXA6OmFkZHJlc3NPZkNhcmRGb3IoSlNDZWxsKiBjZWxsKQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAko
cmV2aXNpb24gMTE0NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOCwyMyArOCwyMiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIoKQog
ewotICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCA9IG1fZmlyc3RGcmVl
Q2VsbDsKLSAgICBpZiAoIWZpcnN0RnJlZUNlbGwpIHsKKyAgICBpZiAoIW1fZnJlZUxpc3QuaGVh
ZCkgewogICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYgYmxvY2sgPSBtX2N1cnJlbnRCbG9jazsg
YmxvY2s7IGJsb2NrID0gc3RhdGljX2Nhc3Q8TWFya2VkQmxvY2sqPihibG9jay0+bmV4dCgpKSkg
ewotICAgICAgICAgICAgZmlyc3RGcmVlQ2VsbCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6
U3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAgICAgICAgIGlmIChmaXJzdEZyZWVDZWxsKQorICAgICAg
ICAgICAgbV9mcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6U3dlZXBUb0ZyZWVM
aXN0KTsKKyAgICAgICAgICAgIGlmIChtX2ZyZWVMaXN0LmhlYWQpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBtX21hcmtlZFNwYWNlLT5kaWRDb25zdW1lRnJlZUxpc3QoYmxv
Y2spOwogICAgICAgICAgICAgYmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAoIWZpcnN0RnJlZUNlbGwpCisgICAgICAgIGlmICghbV9m
cmVlTGlzdC5oZWFkKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIEFT
U0VSVChmaXJzdEZyZWVDZWxsKTsKLSAgICBtX2ZpcnN0RnJlZUNlbGwgPSBmaXJzdEZyZWVDZWxs
LT5uZXh0OwotICAgIHJldHVybiBmaXJzdEZyZWVDZWxsOworICAgIE1hcmtlZEJsb2NrOjpGcmVl
Q2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFk
LT5uZXh0OworICAgIEFTU0VSVChoZWFkKTsKKyAgICByZXR1cm4gaGVhZDsKIH0KICAgICAKIGlu
bGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKCkKQEAgLTQyLDcgKzQxLDgg
QEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKAogICAgIEFTU0VSVCht
X2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7CiAjZW5kaWYKICAg
ICAKLSAgICBtX2hlYXAtPmFjdGl2aXR5Q2FsbGJhY2soKS0+d2lsbEFsbG9jYXRlKCk7CisgICAg
QVNTRVJUKCFtX2ZyZWVMaXN0LmhlYWQpOworICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVl
TGlzdC5ieXRlcyk7CiAgICAgCiAgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGUoKTsKICAg
ICAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlKAogICAgIGlmIChyZXN1bHQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCi0gICAg
QVNTRVJUKG1faGVhcC0+d2F0ZXJNYXJrKCkgPCBtX2hlYXAtPmhpZ2hXYXRlck1hcmsoKSk7Cisg
ICAgQVNTRVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7CiAgICAgCiAgICAgYWRkQmxvY2so
YWxsb2NhdGVCbG9jayhBbGxvY2F0aW9uTXVzdFN1Y2NlZWQpKTsKICAgICAKQEAgLTEwOCwxMSAr
MTA4LDExIEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmwKIHZvaWQg
TWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG9jayogYmxvY2spCiB7CiAgICAgQVNT
RVJUKCFtX2N1cnJlbnRCbG9jayk7Ci0gICAgQVNTRVJUKCFtX2ZpcnN0RnJlZUNlbGwpOworICAg
IEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICAKICAgICBtX2Jsb2NrTGlzdC5hcHBlbmQo
YmxvY2spOwogICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAgbV9maXJzdEZyZWVDZWxs
ID0gYmxvY2stPnN3ZWVwKE1hcmtlZEJsb2NrOjpTd2VlcFRvRnJlZUxpc3QpOworICAgIG1fZnJl
ZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9GcmVlTGlzdCk7CiB9CiAK
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZW1vdmVCbG9jayhNYXJrZWRCbG9jayogYmxvY2spCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2
aXNpb24gMTE0NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
KiB0cnlBbGxvY2F0ZUhlbHBlcigpOwogICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKEFs
bG9jYXRpb25FZmZvcnQpOwogICAgIAotICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogbV9maXJz
dEZyZWVDZWxsOworICAgIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBtX2ZyZWVMaXN0OwogICAgIE1h
cmtlZEJsb2NrKiBtX2N1cnJlbnRCbG9jazsKICAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBCbG9j
az4gbV9ibG9ja0xpc3Q7CiAgICAgc2l6ZV90IG1fY2VsbFNpemU7CkBAIC01MSw4ICs1MSw3IEBA
IHByaXZhdGU6CiB9OwogCiBpbmxpbmUgTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3Io
KQotICAgIDogbV9maXJzdEZyZWVDZWxsKDApCi0gICAgLCBtX2N1cnJlbnRCbG9jaygwKQorICAg
IDogbV9jdXJyZW50QmxvY2soMCkKICAgICAsIG1fY2VsbFNpemUoMCkKICAgICAsIG1fY2VsbHNO
ZWVkRGVzdHJ1Y3Rpb24odHJ1ZSkKICAgICAsIG1faGVhcCgwKQpAQCAtNzAsMTMgKzY5LDEzIEBA
IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiAKIAogaW5saW5lIHZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoKQogewotICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2Vs
bCogZmlyc3RGcmVlQ2VsbCA9IG1fZmlyc3RGcmVlQ2VsbDsKKyAgICBNYXJrZWRCbG9jazo6RnJl
ZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgLy8gVGhpcyBpcyBhIGxpZ2h0LXdl
aWdodCBmYXN0IHBhdGggdG8gY292ZXIgdGhlIG1vc3QgY29tbW9uIGNhc2UuCi0gICAgaWYgKFVO
TElLRUxZKCFmaXJzdEZyZWVDZWxsKSkKKyAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQogICAgICAg
ICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZSgpOwogICAgIAotICAgIG1fZmlyc3RGcmVlQ2VsbCA9
IGZpcnN0RnJlZUNlbGwtPm5leHQ7Ci0gICAgcmV0dXJuIGZpcnN0RnJlZUNlbGw7CisgICAgbV9m
cmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKKyAgICByZXR1cm4gaGVhZDsKIH0KIAogaW5saW5l
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXNldCgpCkBAIC04NywxMiArODYsMTIgQEAgaW5saW5l
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXNldCgpCiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0
b3I6OnphcEZyZWVMaXN0KCkKIHsKICAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAg
IEFTU0VSVCghbV9maXJzdEZyZWVDZWxsKTsKKyAgICAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0Lmhl
YWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIG1fY3VycmVudEJsb2NrLT56
YXBGcmVlTGlzdChtX2ZpcnN0RnJlZUNlbGwpOwotICAgIG1fZmlyc3RGcmVlQ2VsbCA9IDA7Cisg
ICAgbV9jdXJyZW50QmxvY2stPnphcEZyZWVMaXN0KG1fZnJlZUxpc3QpOworICAgIG1fZnJlZUxp
c3QuaGVhZCA9IDA7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hCbG9jayhGdW5jdG9yJiBmdW5jdG9yKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMTE0
NTQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpjYWxs
RGVzdHJ1Y3RvcigKIH0KIAogdGVtcGxhdGU8TWFya2VkQmxvY2s6OkJsb2NrU3RhdGUgYmxvY2tT
dGF0ZSwgTWFya2VkQmxvY2s6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIGJvb2wgZGVzdHJ1Y3RvckNh
bGxOZWVkZWQ+Ci1NYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpzcGVjaWFsaXpl
ZFN3ZWVwKCkKK01hcmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3BlY2lhbGl6ZWRT
d2VlcCgpCiB7CiAgICAgQVNTRVJUKGJsb2NrU3RhdGUgIT0gQWxsb2NhdGVkICYmIGJsb2NrU3Rh
dGUgIT0gRnJlZUxpc3RlZCk7CiAgICAgQVNTRVJUKGRlc3RydWN0b3JDYWxsTmVlZGVkIHx8IHN3
ZWVwTW9kZSAhPSBTd2VlcE9ubHkpOwpAQCAtODYsNiArODYsNyBAQCBNYXJrZWRCbG9jazo6RnJl
ZUNlbGwqIE1hcmtlZEJsb2NrOjpzcGVjCiAgICAgLy8gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUg
YWxsb2NhdGlvbiBjb2RlIG1ha2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZQogICAgIC8vIG9y
ZGVyIG9mIHRoZSBmcmVlIGxpc3QuCiAgICAgRnJlZUNlbGwqIGhlYWQgPSAwOworICAgIHNpemVf
dCBjb3VudCA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRB
dG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAgIGlmIChibG9ja1N0YXRlID09IE1h
cmtlZCAmJiBtX21hcmtzLmdldChpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTAxLDE5
ICsxMDIsMjAgQEAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6c3BlYwogICAg
ICAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxGcmVlQ2VsbCo+
KGNlbGwpOwogICAgICAgICAgICAgZnJlZUNlbGwtPm5leHQgPSBoZWFkOwogICAgICAgICAgICAg
aGVhZCA9IGZyZWVDZWxsOworICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQogICAgIH0K
IAogICAgIG1fc3RhdGUgPSAoKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpID8gRnJlZUxp
c3RlZCA6IFphcHBlZCk7Ci0gICAgcmV0dXJuIGhlYWQ7CisgICAgcmV0dXJuIEZyZWVMaXN0KGhl
YWQsIGNvdW50ICogY2VsbFNpemUoKSk7CiB9CiAKLU1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFy
a2VkQmxvY2s6OnN3ZWVwKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCitNYXJrZWRCbG9jazo6RnJlZUxp
c3QgTWFya2VkQmxvY2s6OnN3ZWVwKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAgSEVBUF9M
T0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKIAogICAgIGlmIChzd2VlcE1vZGUgPT0g
U3dlZXBPbmx5ICYmICFtX2NlbGxzTmVlZERlc3RydWN0aW9uKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAKICAgICBpZiAobV9jZWxsc05lZWREZXN0cnVj
dGlvbikKICAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyPHRydWU+KHN3ZWVwTW9kZSk7CkBAIC0x
MjEsNyArMTIzLDcgQEAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6c3dlZQog
fQogCiB0ZW1wbGF0ZTxib29sIGRlc3RydWN0b3JDYWxsTmVlZGVkPgotTWFya2VkQmxvY2s6OkZy
ZWVDZWxsKiBNYXJrZWRCbG9jazo6c3dlZXBIZWxwZXIoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKK01h
cmtlZEJsb2NrOjpGcmVlTGlzdCBNYXJrZWRCbG9jazo6c3dlZXBIZWxwZXIoU3dlZXBNb2RlIHN3
ZWVwTW9kZSkKIHsKICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKICAgICBjYXNlIE5ldzoKQEAgLTEz
MCwxMCArMTMyLDEwIEBAIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnN3ZWUK
ICAgICBjYXNlIEZyZWVMaXN0ZWQ6CiAgICAgICAgIC8vIEhhcHBlbnMgd2hlbiBhIGJsb2NrIHRy
YW5zaXRpb25zIHRvIGZ1bGx5IGFsbG9jYXRlZC4KICAgICAgICAgQVNTRVJUKHN3ZWVwTW9kZSA9
PSBTd2VlcFRvRnJlZUxpc3QpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIEZy
ZWVMaXN0KCk7CiAgICAgY2FzZSBBbGxvY2F0ZWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAgICAg
Y2FzZSBNYXJrZWQ6CiAgICAgICAgIHJldHVybiBzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0
CiAgICAgICAgICAgICA/IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2VlcFRvRnJlZUxpc3Qs
IGRlc3RydWN0b3JDYWxsTmVlZGVkPigpCkBAIC0xNDUsMTIgKzE0NywxMyBAQCBNYXJrZWRCbG9j
azo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpzd2VlCiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiB9CiAKLXZv
aWQgTWFya2VkQmxvY2s6OnphcEZyZWVMaXN0KEZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsKQordm9p
ZCBNYXJrZWRCbG9jazo6emFwRnJlZUxpc3QoY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KQogewog
ICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7CisgICAgRnJlZUNlbGwq
IGhlYWQgPSBmcmVlTGlzdC5oZWFkOwogCiAgICAgaWYgKG1fc3RhdGUgPT0gTWFya2VkKSB7CiAg
ICAgICAgIC8vIElmIHRoZSBibG9jayBpcyBpbiB0aGUgTWFya2VkIHN0YXRlIHRoZW4gd2Uga25v
dyB0aGF0OgpAQCAtMTU5LDcgKzE2Miw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OnphcEZyZWVMaXN0
KEZyZWVDZWxsKiAKICAgICAgICAgLy8gICAgZmFjdCB0aGF0IHRoZWlyIG1hcmsgYml0cyBhcmUg
dW5zZXQuCiAgICAgICAgIC8vIEhlbmNlIGlmIHRoZSBibG9jayBpcyBNYXJrZWQgd2UgbmVlZCB0
byBsZWF2ZSBpdCBNYXJrZWQuCiAgICAgICAgIAotICAgICAgICBBU1NFUlQoIWZpcnN0RnJlZUNl
bGwpOworICAgICAgICBBU1NFUlQoIWhlYWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTE3Niw3ICsxNzksNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjp6YXBGcmVlTGlzdChG
cmVlQ2VsbCogCiAgICAgICAgIC8vIGRlYWQgb2JqZWN0cyB3aWxsIGhhdmUgMCBpbiB0aGVpciB2
dGFibGVzIGFuZCBsaXZlIG9iamVjdHMgd2lsbCBoYXZlCiAgICAgICAgIC8vIG5vbi16ZXJvIHZ0
YWJsZXMsIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgYmxvY2sgYmVpbmcgemFwcGVkLgog
ICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFmaXJzdEZyZWVDZWxsKTsKKyAgICAgICAgQVNTRVJU
KCFoZWFkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xODgsNyArMTkx
LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6emFwRnJlZUxpc3QoRnJlZUNlbGwqIAogICAgIC8vIHdh
eSB0byB0ZWxsIHdoYXQncyBsaXZlIHZzIGRlYWQuIFdlIHVzZSB6YXBwaW5nIGZvciB0aGF0Lgog
ICAgIAogICAgIEZyZWVDZWxsKiBuZXh0OwotICAgIGZvciAoRnJlZUNlbGwqIGN1cnJlbnQgPSBm
aXJzdEZyZWVDZWxsOyBjdXJyZW50OyBjdXJyZW50ID0gbmV4dCkgeworICAgIGZvciAoRnJlZUNl
bGwqIGN1cnJlbnQgPSBoZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gbmV4dCkgewogICAgICAgICBu
ZXh0ID0gY3VycmVudC0+bmV4dDsKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihj
dXJyZW50KS0+emFwKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCShyZXZpc2lvbiAxMTQ1NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIEZyZWVDZWxsKiBuZXh0OwogICAgICAgICB9OwogICAg
ICAgICAKKyAgICAgICAgc3RydWN0IEZyZWVMaXN0IHsKKyAgICAgICAgICAgIEZyZWVDZWxsKiBo
ZWFkOworICAgICAgICAgICAgc2l6ZV90IGJ5dGVzOworCisgICAgICAgICAgICBGcmVlTGlzdCgp
OworICAgICAgICAgICAgRnJlZUxpc3QoRnJlZUNlbGwqLCBzaXplX3QpOworICAgICAgICB9Owor
CiAgICAgICAgIHN0cnVjdCBWb2lkRnVuY3RvciB7CiAgICAgICAgICAgICB0eXBlZGVmIHZvaWQg
UmV0dXJuVHlwZTsKICAgICAgICAgICAgIHZvaWQgcmV0dXJuVmFsdWUoKSB7IH0KQEAgLTEwNSwx
MyArMTEzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkKiBhbGxvY2F0ZSgpOwog
CiAgICAgICAgIGVudW0gU3dlZXBNb2RlIHsgU3dlZXBPbmx5LCBTd2VlcFRvRnJlZUxpc3QgfTsK
LSAgICAgICAgRnJlZUNlbGwqIHN3ZWVwKFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CisgICAgICAg
IEZyZWVMaXN0IHN3ZWVwKFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CiAKICAgICAgICAgLy8gV2hp
bGUgYWxsb2NhdGluZyBmcm9tIGEgZnJlZSBsaXN0LCBNYXJrZWRCbG9jayB0ZW1wb3JhcmlseSBo
YXMgYm9ndXMKICAgICAgICAgLy8gY2VsbCBsaXZlbmVzcyBkYXRhLiBUbyByZXN0b3JlIGFjY3Vy
YXRlIGNlbGwgbGl2ZW5lc3MgZGF0YSwgY2FsbCBvbmUKICAgICAgICAgLy8gb2YgdGhlc2UgZnVu
Y3Rpb25zOgogICAgICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOyAvLyBDYWxsIHRoaXMg
b25jZSB5b3UndmUgYWxsb2NhdGVkIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGZyZWUgbGlzdC4KLSAg
ICAgICAgdm9pZCB6YXBGcmVlTGlzdChGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCk7IC8vIENhbGwg
dGhpcyB0byB1bmRvIHRoZSBmcmVlIGxpc3QuCisgICAgICAgIHZvaWQgemFwRnJlZUxpc3QoY29u
c3QgRnJlZUxpc3QmKTsgLy8gQ2FsbCB0aGlzIHRvIHVuZG8gdGhlIGZyZWUgbGlzdC4KIAogICAg
ICAgICB2b2lkIGNsZWFyTWFya3MoKTsKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwpAQCAt
MTYzLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGF0b21BbGlnbm1lbnRNYXNrID0gYXRvbVNpemUgLSAxOyAvLyBhdG9tU2l6ZSBtdXN0IGJl
IGEgcG93ZXIgb2YgdHdvLgogCiAgICAgICAgIGVudW0gQmxvY2tTdGF0ZSB7IE5ldywgRnJlZUxp
c3RlZCwgQWxsb2NhdGVkLCBNYXJrZWQsIFphcHBlZCB9OwotICAgICAgICB0ZW1wbGF0ZTxib29s
IGRlc3RydWN0b3JDYWxsTmVlZGVkPiBGcmVlQ2VsbCogc3dlZXBIZWxwZXIoU3dlZXBNb2RlID0g
U3dlZXBPbmx5KTsKKyAgICAgICAgdGVtcGxhdGU8Ym9vbCBkZXN0cnVjdG9yQ2FsbE5lZWRlZD4g
RnJlZUxpc3Qgc3dlZXBIZWxwZXIoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKIAogICAgICAgICB0
eXBlZGVmIGNoYXIgQXRvbVthdG9tU2l6ZV07CiAKQEAgLTE3MSw3ICsxNzksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgQXRvbSogYXRvbXMoKTsKICAgICAgICAgc2l6ZV90IGF0b21OdW1i
ZXIoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIGNhbGxEZXN0cnVjdG9yKEpTQ2VsbCopOwot
ICAgICAgICB0ZW1wbGF0ZTxCbG9ja1N0YXRlLCBTd2VlcE1vZGUsIGJvb2wgZGVzdHJ1Y3RvckNh
bGxOZWVkZWQ+IEZyZWVDZWxsKiBzcGVjaWFsaXplZFN3ZWVwKCk7CisgICAgICAgIHRlbXBsYXRl
PEJsb2NrU3RhdGUsIFN3ZWVwTW9kZSwgYm9vbCBkZXN0cnVjdG9yQ2FsbE5lZWRlZD4gRnJlZUxp
c3Qgc3BlY2lhbGl6ZWRTd2VlcCgpOwogICAgICAgICAKICNpZiBFTkFCTEUoR0dDKQogICAgICAg
ICBDYXJkU2V0PGJ5dGVzUGVyQ2FyZCwgYmxvY2tTaXplPiBtX2NhcmRzOwpAQCAtMTg5LDYgKzE5
NywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGVhcCogbV9oZWFwOwogICAgIH07CiAK
KyAgICBpbmxpbmUgTWFya2VkQmxvY2s6OkZyZWVMaXN0OjpGcmVlTGlzdCgpCisgICAgICAgIDog
aGVhZCgwKQorICAgICAgICAsIGJ5dGVzKDApCisgICAgeworICAgIH0KKworICAgIGlubGluZSBN
YXJrZWRCbG9jazo6RnJlZUxpc3Q6OkZyZWVMaXN0KEZyZWVDZWxsKiBoZWFkLCBzaXplX3QgYnl0
ZXMpCisgICAgICAgIDogaGVhZChoZWFkKQorICAgICAgICAsIGJ5dGVzKGJ5dGVzKQorICAgIHsK
KyAgICB9CisKICAgICBpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2NrOjpmaXJzdEF0b20oKQogICAg
IHsKICAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxhdG9tU2l6ZT4oc2l6
ZW9mKE1hcmtlZEJsb2NrKSkgLyBhdG9tU2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDExNDU0MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCAr
MzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFN0cnVjdHVyZTsKIAogTWFya2VkU3BhY2U6
Ok1hcmtlZFNwYWNlKEhlYXAqIGhlYXApCi0gICAgOiBtX3dhdGVyTWFyaygwKQotICAgICwgbV9o
ZWFwKGhlYXApCisgICAgOiBtX2hlYXAoaGVhcCkKIHsKICAgICBmb3IgKHNpemVfdCBjZWxsU2l6
ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBw
cmVjaXNlU3RlcCkgewogICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwg
dGhpcywgY2VsbFNpemUsIGZhbHNlKTsKQEAgLTQ3LDggKzQ2LDYgQEAgTWFya2VkU3BhY2U6Ok1h
cmtlZFNwYWNlKEhlYXAqIGhlYXApCiAKIHZvaWQgTWFya2VkU3BhY2U6OnJlc2V0QWxsb2NhdG9y
cygpCiB7Ci0gICAgbV93YXRlck1hcmsgPSAwOwotCiAgICAgZm9yIChzaXplX3QgY2VsbFNpemUg
PSBwcmVjaXNlU3RlcDsgY2VsbFNpemUgPD0gcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gcHJl
Y2lzZVN0ZXApIHsKICAgICAgICAgYWxsb2NhdG9yRm9yKGNlbGxTaXplKS5yZXNldCgpOwogICAg
ICAgICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5yZXNldCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAxMTQ1NDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw5ICs2NSw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUNl
bGxMaXZlbmVzc0RhdGEoKTsKIAotICAgIHNpemVfdCB3YXRlck1hcmsoKTsKLSAgICB2b2lkIGFk
ZFRvV2F0ZXJNYXJrKHNpemVfdCk7Ci0KICAgICB0eXBlZGVmIEhhc2hTZXQ8TWFya2VkQmxvY2sq
Pjo6aXRlcmF0b3IgQmxvY2tJdGVyYXRvcjsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIGZvckVhY2hDZWxsKEZ1bmN0b3Im
KTsKQEAgLTEwMiwyMSArOTksMTAgQEAgcHJpdmF0ZToKICAgICBTdWJzcGFjZSBtX2Rlc3RydWN0
b3JTcGFjZTsKICAgICBTdWJzcGFjZSBtX25vcm1hbFNwYWNlOwogCi0gICAgc2l6ZV90IG1fd2F0
ZXJNYXJrOwogICAgIEhlYXAqIG1faGVhcDsKICAgICBNYXJrZWRCbG9ja1NldCBtX2Jsb2NrczsK
IH07CiAKLWlubGluZSBzaXplX3QgTWFya2VkU3BhY2U6OndhdGVyTWFyaygpCi17Ci0gICAgcmV0
dXJuIG1fd2F0ZXJNYXJrOwotfQotCi1pbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6YWRkVG9XYXRl
ck1hcmsoc2l6ZV90IHNpemUpCi17Ci0gICAgbV93YXRlck1hcmsgKz0gc2l6ZTsKLX0KLQogdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5
cGUgTWFya2VkU3BhY2U6OmZvckVhY2hDZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgY2Fu
b25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpOwpAQCAtMTk3LDExICsxODMsNiBAQCBpbmxpbmUg
dm9pZCBNYXJrZWRTcGFjZTo6ZGlkQWRkQmxvY2soTWFyCiAgICAgbV9ibG9ja3MuYWRkKGJsb2Nr
KTsKIH0KIAotaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmRpZENvbnN1bWVGcmVlTGlzdChNYXJr
ZWRCbG9jayogYmxvY2spCi17Ci0gICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNhcGFjaXR5KCk7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gTWFya2VkU3BhY2VfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5jcHAJKHJldmlzaW9uIDExNDU0MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NCwxMSArODQsMTUgQEAgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha1NldDo6ZmluZEFs
bG9jYQogICAgIGlmIChXZWFrQmxvY2s6OkZyZWVDZWxsKiBhbGxvY2F0b3IgPSB0cnlGaW5kQWxs
b2NhdG9yKCkpCiAgICAgICAgIHJldHVybiBhbGxvY2F0b3I7CiAKLSAgICBtX2hlYXAtPmFkZFRv
V2F0ZXJNYXJrKFdlYWtCbG9jazo6YmxvY2tTaXplKTsKKyAgICAvLyBGSVhNRTogVGhpcyByZXBv
cnRpbmcgb2YgdGhlIGFtb3VudCBhbGxvY2F0ZWQgaXNuJ3QgcXVpdGUgYWNjdXJhdGUgYW5kIAor
ICAgIC8vIHByb2JhYmx5IHNob3VsZCBiZSByZXdvcmtlZCBldmVudHVhbGx5LgorICAgIG1faGVh
cC0+ZGlkQWxsb2NhdGUoV2Vha0Jsb2NrOjpibG9ja1NpemUpOworICAgIGlmIChtX2hlYXAtPnNo
b3VsZENvbGxlY3QoKSkgeworICAgICAgICBtX2hlYXAtPmNvbGxlY3QoSGVhcDo6RG9Ob3RTd2Vl
cCk7CiAKLSAgICAvLyBhZGRUb1dhdGVyTWFyaygpIG1heSBjYXVzZSBhIEdDLCBzbyB0cnkgYWdh
aW4uCi0gICAgaWYgKFdlYWtCbG9jazo6RnJlZUNlbGwqIGFsbG9jYXRvciA9IHRyeUZpbmRBbGxv
Y2F0b3IoKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKKyAgICAgICAgaWYgKFdlYWtCbG9j
azo6RnJlZUNlbGwqIGFsbG9jYXRvciA9IHRyeUZpbmRBbGxvY2F0b3IoKSkKKyAgICAgICAgICAg
IHJldHVybiBhbGxvY2F0b3I7CisgICAgfQogCiAgICAgcmV0dXJuIGFkZEFsbG9jYXRvcigpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDExNDU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
TWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsMTIgKzQxNCwxMiBAQCB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2xhc3NUeXBlLCBib29sIGRlc3RyCiAgICAgICAgIGFsbG9jYXRvciA9ICZtX2ds
b2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aERlc3RydWN0b3Ioc2l6ZW9mKENs
YXNzVHlwZSkpOwogICAgIGVsc2UKICAgICAgICAgYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+
aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplb2YoQ2xhc3NUeXBl
KSk7Ci0gICAgbG9hZFB0cigmYWxsb2NhdG9yLT5tX2ZpcnN0RnJlZUNlbGwsIHJlc3VsdCk7Cisg
ICAgbG9hZFB0cigmYWxsb2NhdG9yLT5tX2ZyZWVMaXN0LmhlYWQsIHJlc3VsdCk7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQpKTsKIAogICAgIC8vIHJlbW92ZSB0
aGUgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQp
LCBzdG9yYWdlUHRyKTsKLSAgICBzdG9yZVB0cihzdG9yYWdlUHRyLCAmYWxsb2NhdG9yLT5tX2Zp
cnN0RnJlZUNlbGwpOworICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsICZhbGxvY2F0b3ItPm1fZnJl
ZUxpc3QuaGVhZCk7CiAKICAgICAvLyBpbml0aWFsaXplIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUK
ICAgICBzdG9yZVB0cihzdHJ1Y3R1cmUsIEFkZHJlc3MocmVzdWx0LCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxMTQ1NDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkK
QEAgLTI5MSwxNyArMjkxLDIxIEBAIG1hY3JvIGFsbG9jYXRlQmFzaWNKU09iamVjdChzaXplQ2xh
c3NJbmQKICAgICAgICAgICAgIE1hcmtlZFNwYWNlOjpTdWJzcGFjZTo6cHJlY2lzZUFsbG9jYXRv
cnMgKwogICAgICAgICAgICAgc2l6ZUNsYXNzSW5kZXggKiBzaXplb2YgTWFya2VkQWxsb2NhdG9y
CiAgICAgICAgIAorICAgICAgICBjb25zdCBvZmZzZXRPZkZpcnN0RnJlZUNlbGwgPSAKKyAgICAg
ICAgICAgIE1hcmtlZEFsbG9jYXRvcjo6bV9mcmVlTGlzdCArIAorICAgICAgICAgICAgTWFya2Vk
QmxvY2s6OkZyZWVMaXN0OjpoZWFkCisKICAgICAgICAgIyBGSVhNRTogd2UgY2FuIGdldCB0aGUg
Z2xvYmFsIGRhdGEgaW4gb25lIGxvYWQgZnJvbSB0aGUgc3RhY2suCiAgICAgICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCBzY3JhdGNoMQogICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFs
RGF0YVtzY3JhdGNoMV0sIHNjcmF0Y2gxCiAgICAgICAgIAotICAgICAgICAjIEdldCB0aGUgb2Jq
ZWN0IGZyb20gdGhlIGZyZWUgbGlzdC4gICAgCi0gICAgICAgIGxvYWRwIG9mZnNldE9mTXlTaXpl
Q2xhc3MgKyBNYXJrZWRBbGxvY2F0b3I6Om1fZmlyc3RGcmVlQ2VsbFtzY3JhdGNoMV0sIHJlc3Vs
dAorICAgICAgICAjIEdldCB0aGUgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdC4gICAKKyAgICAg
ICAgbG9hZHAgb2Zmc2V0T2ZNeVNpemVDbGFzcyArIG9mZnNldE9mRmlyc3RGcmVlQ2VsbFtzY3Jh
dGNoMV0sIHJlc3VsdAogICAgICAgICBidHB6IHJlc3VsdCwgc2xvd0Nhc2UKICAgICAgICAgCiAg
ICAgICAgICMgUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgZnJlZSBsaXN0LgogICAgICAgICBs
b2FkcCBbcmVzdWx0XSwgc2NyYXRjaDIKLSAgICAgICAgc3RvcmVwIHNjcmF0Y2gyLCBvZmZzZXRP
Zk15U2l6ZUNsYXNzICsgTWFya2VkQWxsb2NhdG9yOjptX2ZpcnN0RnJlZUNlbGxbc2NyYXRjaDFd
CisgICAgICAgIHN0b3JlcCBzY3JhdGNoMiwgb2Zmc2V0T2ZNeVNpemVDbGFzcyArIG9mZnNldE9m
Rmlyc3RGcmVlQ2VsbFtzY3JhdGNoMV0KICAgICAKICAgICAgICAgIyBJbml0aWFsaXplIHRoZSBv
YmplY3QuCiAgICAgICAgIGxvYWRwIGNsYXNzSW5mb09mZnNldFtzY3JhdGNoMV0sIHNjcmF0Y2gy
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZp
dHlDYWxsYmFjay5jcHAJKHJldmlzaW9uIDExNDU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDcgQEAgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6fkRlZmF1bHRHQ0FjdAogewogfQog
Ci12b2lkIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OndpbGxBbGxvY2F0ZSgpCit2b2lkIERl
ZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmRpZEFsbG9jYXRlKHNpemVfdCkKIHsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxi
YWNrLmgJKHJldmlzaW9uIDExNDU0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dDQWN0aXZpdHlDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNs
YXNzIEhlYXA7CiBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2sgewogcHVibGljOgogICAgIHZpcnR1
YWwgfkdDQWN0aXZpdHlDYWxsYmFjaygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB3aWxsQWxsb2Nh
dGUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWxsb2NhdGUoc2l6ZV90KSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29sbGVjdCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRBYmFuZG9u
T2JqZWN0R3JhcGgoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemUoKSB7IH0KQEAg
LTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soSGVh
cCopOwogICAgIHZpcnR1YWwgfkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soKTsKIAotICAgIHZp
cnR1YWwgdm9pZCB3aWxsQWxsb2NhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWxsb2NhdGUo
c2l6ZV90KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29sbGVjdCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRBYmFuZG9uT2JqZWN0R3JhcGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFj
a0NGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0Fj
dGl2aXR5Q2FsbGJhY2tDRi5jcHAJKHJldmlzaW9uIDExNDU0MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFja0NGLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNiArNTcsNyBAQCBjb25zdCBkb3VibGUgZ2NDUFVCdWRnZXQgPSAwLjAyNTsKIGNvbnN0
IGRvdWJsZSBnY1RpbWVySW50ZXJ2YWxNdWx0aXBsaWVyID0gMS4wIC8gZ2NDUFVCdWRnZXQ7CiBj
b25zdCBDRlRpbWVJbnRlcnZhbCBkZWNhZGUgPSA2MCAqIDYwICogMjQgKiAzNjUgKiAxMDsKIGNv
bnN0IENGVGltZUludGVydmFsIGhvdXIgPSA2MCAqIDYwOworY29uc3Qgc2l6ZV90IG1pbkJ5dGVz
QmVmb3JlQ29sbGVjdCA9IDEyOCAqIEtCOwogCiB2b2lkIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJh
Y2tQbGF0Zm9ybURhdGE6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCAqaW5m
bykKIHsKQEAgLTExMyw4ICsxMTQsMTAgQEAgc3RhdGljIHZvaWQgY2FuY2VsVGltZXIoRGVmYXVs
dEdDQWN0aXZpdAogICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKGQtPnRpbWVyLmdl
dCgpLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIGRlY2FkZSk7CiB9CiAKLXZvaWQgRGVm
YXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6d2lsbEFsbG9jYXRlKCkKK3ZvaWQgRGVmYXVsdEdDQWN0
aXZpdHlDYWxsYmFjazo6ZGlkQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogeworICAgIGlmIChieXRl
cyA8IG1pbkJ5dGVzQmVmb3JlQ29sbGVjdCkKKyAgICAgICAgcmV0dXJuOwogICAgIHNjaGVkdWxl
VGltZXIoZC5nZXQoKSk7CiB9CiAK
</data>
<flag name="review"
          id="143247"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>