<?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>221245</bug_id>
          
          <creation_ts>2021-02-01 22:17:05 -0800</creation_ts>
          <short_desc>[JSC] Atomics should support BigInt64Array / BigUint64Array</short_desc>
          <delta_ts>2021-02-03 15:08:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1724531</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-01 22:17:05 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724532</commentid>
    <comment_count>1</comment_count>
      <attachid>418962</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-01 22:20:41 -0800</bug_when>
    <thetext>Created attachment 418962
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724811</commentid>
    <comment_count>2</comment_count>
      <attachid>418962</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-02 12:18:11 -0800</bug_when>
    <thetext>Comment on attachment 418962
Patch

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

&gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:354
&gt; +    RELEASE_AND_RETURN(scope, JSValue::encode(value));

We need to return this |value|, not the value after `toNativeFromValue`&apos;s enforcement is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725283</commentid>
    <comment_count>3</comment_count>
      <attachid>418962</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-02-03 12:30:21 -0800</bug_when>
    <thetext>Comment on attachment 418962
Patch

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

r=me but I have some comments.

&gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:172
&gt; +EncodedJSValue atomicReadModifyWrite(JSGlobalObject* globalObject, VM&amp; vm, const JSValue* args, const Func&amp; func)

Why change the argument order here? We typically use VM as the first argument.

&gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:338
&gt; +    typename Adaptor::Type extraArgs[1];

Why is this an array? Just so you don&apos;t have to &amp; in the StoreFunc? If so I don&apos;t think that&apos;s worth it...

&gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:363
&gt; +    JSArrayBufferView* typedArrayView = validateIntegerTypedArray&lt;TypedArrayOperationMode::Read&gt;(globalObject, base);

Can we change the enum values? The current ones don&apos;t make any sense... why is atomicStore checking Read??

I&apos;d name them ReadWrite and Wait(able), but I&apos;m flexible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725285</commentid>
    <comment_count>4</comment_count>
      <attachid>418962</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-02-03 12:32:41 -0800</bug_when>
    <thetext>Comment on attachment 418962
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        2. Extend Atomics.isLockFree to accept 8.

I suggest adding a bit more detail: &quot;to also accept a size of 8&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725346</commentid>
    <comment_count>5</comment_count>
      <attachid>418962</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-03 15:04:56 -0800</bug_when>
    <thetext>Comment on attachment 418962
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/ChangeLog:12
&gt;&gt; +        2. Extend Atomics.isLockFree to accept 8.
&gt; 
&gt; I suggest adding a bit more detail: &quot;to also accept a size of 8&quot;.

Added

&gt;&gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:172
&gt;&gt; +EncodedJSValue atomicReadModifyWrite(JSGlobalObject* globalObject, VM&amp; vm, const JSValue* args, const Func&amp; func)
&gt; 
&gt; Why change the argument order here? We typically use VM as the first argument.

We put JSGlobalObject* first when the function can throw an error.

&gt;&gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:338
&gt;&gt; +    typename Adaptor::Type extraArgs[1];
&gt; 
&gt; Why is this an array? Just so you don&apos;t have to &amp; in the StoreFunc? If so I don&apos;t think that&apos;s worth it...

This is for StoreFunc&apos;s signature. But since StoreFunc is only sued here, we can remove StoreFunc and just use atomicStoreFullyFenced directly here. Changed

&gt;&gt; Source/JavaScriptCore/runtime/AtomicsObject.cpp:363
&gt;&gt; +    JSArrayBufferView* typedArrayView = validateIntegerTypedArray&lt;TypedArrayOperationMode::Read&gt;(globalObject, base);
&gt; 
&gt; Can we change the enum values? The current ones don&apos;t make any sense... why is atomicStore checking Read??
&gt; 
&gt; I&apos;d name them ReadWrite and Wait(able), but I&apos;m flexible.

Oops, yeah. Fixed to ReadWrite / Wait.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725348</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-03 15:07:55 -0800</bug_when>
    <thetext>Committed r272341: &lt;https://trac.webkit.org/changeset/272341&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725349</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-03 15:08:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/73951609&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418962</attachid>
            <date>2021-02-01 22:20:41 -0800</date>
            <delta_ts>2021-02-03 12:30:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221245-20210201222040.patch</filename>
            <type>text/plain</type>
            <size>43388</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YWE2ZTE5OTFhZjc4MmNlNTk5YTFhNjVlN2RhOGM4N2Y4Yzc0ZmU0Li44NTNkODU3MTcxMzA1OWFm
ZTNlY2M3MTAwZmEyNjZiMWE2YmIyYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAyMS0wMi0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEF0b21pY3Mgc2hvdWxkIHN1cHBvcnQgQmlnSW50NjRBcnJheSAv
IEJpZ1VpbnQ2NEFycmF5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjEyNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IHN1
cHBvcnQgZm9yIEF0b21pY3MuCisKKyAgICAgICAgMS4gQXRvbWljcy5zdG9yZSBzaG91bGQgYmUg
cmV3cml0dGVuIHNpbmNlIGl0IHJldHVybnMgbm9uLXR5cGUtY29lcmNlZCByZXN1bHQsIHNvIHdl
IGNhbm5vdCB1c2UgYXRvbWljUmVhZE1vZGlmeVdyaXRlLgorICAgICAgICAgICBUaGUgc3BlYyBh
bHNvIGRlc2NyaWJlcyBBdG9taWNzLnN0b3JlIHdpdGhvdXQgdXNpbmcgQXRvbWljUmVhZE1vZGlm
eVdyaXRlWzFdLgorICAgICAgICAyLiBFeHRlbmQgQXRvbWljcy5pc0xvY2tGcmVlIHRvIGFjY2Vw
dCA4LgorICAgICAgICAzLiBDdXJyZW50bHksIERGRyAvIEZUTCBoYW5kbGUgQXRvbWljcyArIEJp
Z0ludDY0QXJyYXkvQmlnVWludDY0QXJyYXkgYXMgQXJyYXk6OkdlbmVyaWMuCisKKyAgICAgICAg
WzFdOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWF0b21pY3Muc3RvcmUKKworICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVBdG9taWNzSXNM
b2NrRnJlZSk6CisgICAgICAgICogcnVudGltZS9BdG9taWNzT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6YXRvbWljc1dh
aXRJbXBsKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAg
ICAgKiBydW50aW1lL1RvTmF0aXZlRnJvbVZhbHVlLmg6CisgICAgICAgIChKU0M6OnRvTmF0aXZl
RnJvbVZhbHVlKToKKwogMjAyMS0wMi0wMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBMYXppbHkgY3JlYXRlIG1fd2luZG93Q2xvc2VXYXRjaHBvaW50cyBzbyB3
ZSBkb24ndCBtaXN0YWtlbmx5IHRoaW5rIHdlIGhhdmUgYSBmcmFtZSB3aGVuIHJlLWFzc29jaWF0
aW5nIGEgZG9jdW1lbnQgdG8gYSBnaXZlbiBjYWNoZWQgZnJhbWUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IGJmZWZiM2QzNjc5
ZjliNThhNjliZjdkZTYxNTY2ZTg5YWY3ZWVjODcuLmIwNjVkYTRiZTI1ZjUxZmU1ZTRhMjEzMGZl
OTBiNDliNDNjMTJhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMzQ1NSw2ICszNDU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1
ZVRydWUpLCByZXN1bHRHUFIpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsK
KyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBv
cGVyYW5kR1BSLCBUcnVzdGVkSW1tMzIoOCkpKTsKICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBvcGVyYW5kR1BSLCBUcnVzdGVkSW1tMzIoNCkp
KTsKICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFs
LCBvcGVyYW5kR1BSLCBUcnVzdGVkSW1tMzIoMSkpKTsKICAgICAgICAgZG9uZS5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBvcGVyYW5kR1BSLCBUcnVzdGVkSW1tMzIo
MikpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCAxY2Y4MjkzYTRkMzRlN2QzMGY3YTZmYjc3MmQwNzM3ZGRmYmE1NjUwLi5mNTFhZGE1NzY1
NTdmN2MxMzk1NWU4MDBlMTk2MGJlYzYwNDMzZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC00Mjk1LDEwICs0Mjk1LDExIEBAIGNsYXNz
IExvd2VyREZHVG9CMyB7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZSh0cnVlQ2FzZSk7CiAgICAgICAgIAotICAgICAg
ICBWZWN0b3I8U3dpdGNoQ2FzZT4gY2FzZXM7CisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCA0
PiBjYXNlczsKICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQz
MigxKSwgdHJ1ZUNhc2UsIFdlaWdodCgpKSk7CiAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hD
YXNlKG1fb3V0LmNvbnN0SW50MzIoMiksIHRydWVDYXNlLCBXZWlnaHQoKSkpOwogICAgICAgICBj
YXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5jb25zdEludDMyKDQpLCB0cnVlQ2FzZSwgV2Vp
Z2h0KCkpKTsKKyAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQz
Mig4KSwgdHJ1ZUNhc2UsIFdlaWdodCgpKSk7CiAgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0
aW9uKGJ5dGVzLCBjYXNlcywgZmFsc2VDYXNlLCBXZWlnaHQoKSk7CiAgICAgICAgIAogICAgICAg
ICBtX291dC5hcHBlbmRUbyh0cnVlQ2FzZSwgZmFsc2VDYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0F0b21pY3NPYmplY3QuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXRvbWljc09iamVjdC5jcHAKaW5kZXggMGFkZmIwZDM1OGYyODA3
MjA1ZWIyYWJmNGRjMTQ3MzMwMmIwM2UyNy4uMTM4MTUxNzNkOTU5YjFjYzk5ZDIxNWQxOTQ2NWYw
MGQ3YmYyMmZlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRv
bWljc09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXRvbWlj
c09iamVjdC5jcHAKQEAgLTkwLDI0ICs5MCwyNyBAQCB2b2lkIEF0b21pY3NPYmplY3Q6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIG5hbWVzcGFj
ZSB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3IsIHR5cGVuYW1lIEZ1bmM+Ci1FbmNvZGVk
SlNWYWx1ZSBhdG9taWNSZWFkTW9kaWZ5V3JpdGVDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IEpTVmFsdWUqIGFyZ3MsIFRocm93U2NvcGUmIHNjb3BlLCBKU0FycmF5QnVm
ZmVyVmlldyogdHlwZWRBcnJheVZpZXcsIHVuc2lnbmVkIGFjY2Vzc0luZGV4LCBjb25zdCBGdW5j
JiBmdW5jKQorRW5jb2RlZEpTVmFsdWUgYXRvbWljUmVhZE1vZGlmeVdyaXRlQ2FzZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIGNvbnN0IEpTVmFsdWUqIGFyZ3MsIEpTQXJy
YXlCdWZmZXJWaWV3KiB0eXBlZEFycmF5VmlldywgdW5zaWduZWQgYWNjZXNzSW5kZXgsIGNvbnN0
IEZ1bmMmIGZ1bmMpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIHR5cGVkQXJyYXkgPSBq
c0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qPih0eXBlZEFycmF5Vmlldyk7
CiAgICAgCi0gICAgZG91YmxlIGV4dHJhQXJnc1tGdW5jOjpudW1FeHRyYUFyZ3MgKyAxXTsgLy8g
QWRkIDEgdG8gYXZvaWQgMCBzaXplIGFycmF5IGVycm9yIGluIFZTLgorICAgIHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUgZXh0cmFBcmdzW0Z1bmM6Om51bUV4dHJhQXJncyArIDFdOyAvLyBBZGQgMSB0
byBhdm9pZCAwIHNpemUgYXJyYXkgZXJyb3IgaW4gVlMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEZ1bmM6Om51bUV4dHJhQXJnczsgKytpKSB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9
IGFyZ3NbMiArIGldLnRvSW50ZWdlck9ySW5maW5pdHkoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHRvTmF0aXZlRnJvbVZhbHVlPEFkYXB0b3I+KGdsb2Jh
bE9iamVjdCwgYXJnc1syICsgaV0pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICBleHRyYUFyZ3NbaV0gPSB2YWx1ZTsKICAgICB9CiAKICAgICBpZiAo
dHlwZWRBcnJheS0+aXNEZXRhY2hlZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCB0eXBlZEFycmF5QnVmZmVySGFzQmVlbkRldGFjaGVkRXJy
b3JNZXNzYWdlKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZnVuYyh0eXBlZEFycmF5
LT50eXBlZFZlY3RvcigpICsgYWNjZXNzSW5kZXgsIGV4dHJhQXJncykpOworICAgIGF1dG8gcmVz
dWx0ID0gZnVuYyh0eXBlZEFycmF5LT50eXBlZFZlY3RvcigpICsgYWNjZXNzSW5kZXgsIGV4dHJh
QXJncyk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoQWRh
cHRvcjo6dG9KU1ZhbHVlKGdsb2JhbE9iamVjdCwgcmVzdWx0KSkpOwogfQogCi1zdGF0aWMgdW5z
aWduZWQgdmFsaWRhdGVBdG9taWNBY2Nlc3MoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0FycmF5QnVmZmVyVmlldyogdHlwZWRBcnJheVZpZXcsIEpTVmFsdWUgYWNjZXNz
SW5kZXhWYWx1ZSkKK3N0YXRpYyB1bnNpZ25lZCB2YWxpZGF0ZUF0b21pY0FjY2VzcyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTQXJyYXlCdWZmZXJWaWV3KiB0eXBlZEFy
cmF5VmlldywgSlNWYWx1ZSBhY2Nlc3NJbmRleFZhbHVlKQogewogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25lZCBhY2Nlc3NJbmRleCA9IDA7CkBA
IC0xNDAsOSArMTQzLDEwIEBAIGlubGluZSBKU0FycmF5QnVmZmVyVmlldyogdmFsaWRhdGVJbnRl
Z2VyVHlwZWRBcnJheShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgaWYgY29uc3Rl
eHByIChtb2RlID09IFR5cGVkQXJyYXlPcGVyYXRpb25Nb2RlOjpXcml0ZSkgewogICAgICAgICBz
d2l0Y2ggKHR5cGVkQXJyYXktPnR5cGUoKSkgewogICAgICAgICBjYXNlIEludDMyQXJyYXlUeXBl
OgorICAgICAgICBjYXNlIEJpZ0ludDY0QXJyYXlUeXBlOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiVHlwZWQgYXJyYXkgYXJndW1lbnQgbXVzdCBiZSBhbiBJbnQzMkFycmF5LiJfcyk7
CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiVHlwZWQg
YXJyYXkgYXJndW1lbnQgbXVzdCBiZSBhbiBJbnQzMkFycmF5IG9yIEJpZ0ludDY0QXJyYXkuIl9z
KTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAt
MTUzLDkgKzE1NywxMSBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZlclZpZXcqIHZhbGlkYXRlSW50ZWdl
clR5cGVkQXJyYXkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgICAgICBjYXNlIFVp
bnQ4QXJyYXlUeXBlOgogICAgICAgICBjYXNlIFVpbnQxNkFycmF5VHlwZToKICAgICAgICAgY2Fz
ZSBVaW50MzJBcnJheVR5cGU6CisgICAgICAgIGNhc2UgQmlnSW50NjRBcnJheVR5cGU6CisgICAg
ICAgIGNhc2UgQmlnVWludDY0QXJyYXlUeXBlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVHlwZWQgYXJyYXkgYXJndW1lbnQgbXVzdCBiZSBhbiBJbnQ4QXJyYXksIEludDE2QXJyYXks
IEludDMyQXJyYXksIFVpbnQ4QXJyYXksIFVpbnQxNkFycmF5LCBvciBVaW50MzJBcnJheS4iX3Mp
OworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIlR5cGVk
IGFycmF5IGFyZ3VtZW50IG11c3QgYmUgYW4gSW50OEFycmF5LCBJbnQxNkFycmF5LCBJbnQzMkFy
cmF5LCBVaW50OEFycmF5LCBVaW50MTZBcnJheSwgVWludDMyQXJyYXksIEJpZ0ludDY0QXJyYXks
IG9yIEJpZ1VpbnQ2NEFycmF5LiJfcyk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTYzLDI5ICsxNjksMzQgQEAgaW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3
KiB2YWxpZGF0ZUludGVnZXJUeXBlZEFycmF5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLUVuY29kZWRKU1ZhbHVlIGF0b21pY1JlYWRN
b2RpZnlXcml0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEpT
VmFsdWUqIGFyZ3MsIGNvbnN0IEZ1bmMmIGZ1bmMpCitFbmNvZGVkSlNWYWx1ZSBhdG9taWNSZWFk
TW9kaWZ5V3JpdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBjb25zdCBK
U1ZhbHVlKiBhcmdzLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0eXBlZEFycmF5
VmlldyA9IHZhbGlkYXRlSW50ZWdlclR5cGVkQXJyYXk8VHlwZWRBcnJheU9wZXJhdGlvbk1vZGU6
OlJlYWQ+KGdsb2JhbE9iamVjdCwgYXJnc1swXSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAotICAgIHVuc2lnbmVkIGFjY2Vzc0luZGV4ID0gdmFsaWRhdGVBdG9taWNB
Y2Nlc3Modm0sIGdsb2JhbE9iamVjdCwgdHlwZWRBcnJheVZpZXcsIGFyZ3NbMV0pOworICAgIHVu
c2lnbmVkIGFjY2Vzc0luZGV4ID0gdmFsaWRhdGVBdG9taWNBY2Nlc3MoZ2xvYmFsT2JqZWN0LCB2
bSwgdHlwZWRBcnJheVZpZXcsIGFyZ3NbMV0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKKyAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgc3dpdGNoICh0eXBlZEFycmF5
Vmlldy0+dHlwZSgpKSB7CiAgICAgY2FzZSBJbnQ4QXJyYXlUeXBlOgotICAgICAgICByZXR1cm4g
YXRvbWljUmVhZE1vZGlmeVdyaXRlQ2FzZTxJbnQ4QWRhcHRvcj4oZ2xvYmFsT2JqZWN0LCBhcmdz
LCBzY29wZSwgdHlwZWRBcnJheVZpZXcsIGFjY2Vzc0luZGV4LCBmdW5jKTsKKyAgICAgICAgcmV0
dXJuIGF0b21pY1JlYWRNb2RpZnlXcml0ZUNhc2U8SW50OEFkYXB0b3I+KGdsb2JhbE9iamVjdCwg
dm0sIGFyZ3MsIHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRleCwgZnVuYyk7CiAgICAgY2FzZSBJ
bnQxNkFycmF5VHlwZToKLSAgICAgICAgcmV0dXJuIGF0b21pY1JlYWRNb2RpZnlXcml0ZUNhc2U8
SW50MTZBZGFwdG9yPihnbG9iYWxPYmplY3QsIGFyZ3MsIHNjb3BlLCB0eXBlZEFycmF5Vmlldywg
YWNjZXNzSW5kZXgsIGZ1bmMpOworICAgICAgICByZXR1cm4gYXRvbWljUmVhZE1vZGlmeVdyaXRl
Q2FzZTxJbnQxNkFkYXB0b3I+KGdsb2JhbE9iamVjdCwgdm0sIGFyZ3MsIHR5cGVkQXJyYXlWaWV3
LCBhY2Nlc3NJbmRleCwgZnVuYyk7CiAgICAgY2FzZSBJbnQzMkFycmF5VHlwZToKLSAgICAgICAg
cmV0dXJuIGF0b21pY1JlYWRNb2RpZnlXcml0ZUNhc2U8SW50MzJBZGFwdG9yPihnbG9iYWxPYmpl
Y3QsIGFyZ3MsIHNjb3BlLCB0eXBlZEFycmF5VmlldywgYWNjZXNzSW5kZXgsIGZ1bmMpOworICAg
ICAgICByZXR1cm4gYXRvbWljUmVhZE1vZGlmeVdyaXRlQ2FzZTxJbnQzMkFkYXB0b3I+KGdsb2Jh
bE9iamVjdCwgdm0sIGFyZ3MsIHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRleCwgZnVuYyk7CiAg
ICAgY2FzZSBVaW50OEFycmF5VHlwZToKLSAgICAgICAgcmV0dXJuIGF0b21pY1JlYWRNb2RpZnlX
cml0ZUNhc2U8VWludDhBZGFwdG9yPihnbG9iYWxPYmplY3QsIGFyZ3MsIHNjb3BlLCB0eXBlZEFy
cmF5VmlldywgYWNjZXNzSW5kZXgsIGZ1bmMpOworICAgICAgICByZXR1cm4gYXRvbWljUmVhZE1v
ZGlmeVdyaXRlQ2FzZTxVaW50OEFkYXB0b3I+KGdsb2JhbE9iamVjdCwgdm0sIGFyZ3MsIHR5cGVk
QXJyYXlWaWV3LCBhY2Nlc3NJbmRleCwgZnVuYyk7CiAgICAgY2FzZSBVaW50MTZBcnJheVR5cGU6
Ci0gICAgICAgIHJldHVybiBhdG9taWNSZWFkTW9kaWZ5V3JpdGVDYXNlPFVpbnQxNkFkYXB0b3I+
KGdsb2JhbE9iamVjdCwgYXJncywgc2NvcGUsIHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRleCwg
ZnVuYyk7CisgICAgICAgIHJldHVybiBhdG9taWNSZWFkTW9kaWZ5V3JpdGVDYXNlPFVpbnQxNkFk
YXB0b3I+KGdsb2JhbE9iamVjdCwgdm0sIGFyZ3MsIHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRl
eCwgZnVuYyk7CiAgICAgY2FzZSBVaW50MzJBcnJheVR5cGU6Ci0gICAgICAgIHJldHVybiBhdG9t
aWNSZWFkTW9kaWZ5V3JpdGVDYXNlPFVpbnQzMkFkYXB0b3I+KGdsb2JhbE9iamVjdCwgYXJncywg
c2NvcGUsIHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRleCwgZnVuYyk7CisgICAgICAgIHJldHVy
biBhdG9taWNSZWFkTW9kaWZ5V3JpdGVDYXNlPFVpbnQzMkFkYXB0b3I+KGdsb2JhbE9iamVjdCwg
dm0sIGFyZ3MsIHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRleCwgZnVuYyk7CisgICAgY2FzZSBC
aWdJbnQ2NEFycmF5VHlwZToKKyAgICAgICAgcmV0dXJuIGF0b21pY1JlYWRNb2RpZnlXcml0ZUNh
c2U8QmlnSW50NjRBZGFwdG9yPihnbG9iYWxPYmplY3QsIHZtLCBhcmdzLCB0eXBlZEFycmF5Vmll
dywgYWNjZXNzSW5kZXgsIGZ1bmMpOworICAgIGNhc2UgQmlnVWludDY0QXJyYXlUeXBlOgorICAg
ICAgICByZXR1cm4gYXRvbWljUmVhZE1vZGlmeVdyaXRlQ2FzZTxCaWdVaW50NjRBZGFwdG9yPihn
bG9iYWxPYmplY3QsIHZtLCBhcmdzLCB0eXBlZEFycmF5VmlldywgYWNjZXNzSW5kZXgsIGZ1bmMp
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xOTgsMTYg
KzIwOSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBhdG9taWNSZWFkTW9kaWZ5V3JpdGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYQogICAgIEpTVmFsdWUgYXJnc1syICsg
RnVuYzo6bnVtRXh0cmFBcmdzXTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAyICsgRnVuYzo6bnVt
RXh0cmFBcmdzOyBpLS07KQogICAgICAgICBhcmdzW2ldID0gY2FsbEZyYW1lLT5hcmd1bWVudChp
KTsKLSAgICByZXR1cm4gYXRvbWljUmVhZE1vZGlmeVdyaXRlKGdsb2JhbE9iamVjdC0+dm0oKSwg
Z2xvYmFsT2JqZWN0LCBhcmdzLCBmdW5jKTsKKyAgICByZXR1cm4gYXRvbWljUmVhZE1vZGlmeVdy
aXRlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT52bSgpLCBhcmdzLCBmdW5jKTsKIH0KIAog
c3RydWN0IEFkZEZ1bmMgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtRXh0cmFB
cmdzID0gMTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEpTVmFsdWUgb3Bl
cmF0b3IoKShUKiBwdHIsIGNvbnN0IGRvdWJsZSogYXJncykgY29uc3QKKyAgICBUIG9wZXJhdG9y
KCkoVCogcHRyLCBjb25zdCBUKiBhcmdzKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKFdURjo6YXRvbWljRXhjaGFuZ2VBZGQocHRyLCB0b0ludDMyKGFyZ3NbMF0pKSk7Cisg
ICAgICAgIHJldHVybiBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKHB0ciwgYXJnc1swXSk7CiAgICAg
fQogfTsKIApAQCAtMjE1LDkgKzIyNiw5IEBAIHN0cnVjdCBBbmRGdW5jIHsKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG51bUV4dHJhQXJncyA9IDE7CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBKU1ZhbHVlIG9wZXJhdG9yKCkoVCogcHRyLCBjb25zdCBkb3VibGUq
IGFyZ3MpIGNvbnN0CisgICAgVCBvcGVyYXRvcigpKFQqIHB0ciwgY29uc3QgVCogYXJncykgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBqc051bWJlcihXVEY6OmF0b21pY0V4Y2hhbmdlQW5k
KHB0ciwgdG9JbnQzMihhcmdzWzBdKSkpOworICAgICAgICByZXR1cm4gV1RGOjphdG9taWNFeGNo
YW5nZUFuZChwdHIsIGFyZ3NbMF0pOwogICAgIH0KIH07CiAKQEAgLTIyNSwxMSArMjM2LDExIEBA
IHN0cnVjdCBDb21wYXJlRXhjaGFuZ2VGdW5jIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG51bUV4dHJhQXJncyA9IDI7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICBKU1ZhbHVlIG9wZXJhdG9yKCkoVCogcHRyLCBjb25zdCBkb3VibGUqIGFyZ3MpIGNvbnN0Cisg
ICAgVCBvcGVyYXRvcigpKFQqIHB0ciwgY29uc3QgVCogYXJncykgY29uc3QKICAgICB7Ci0gICAg
ICAgIFQgZXhwZWN0ZWQgPSBzdGF0aWNfY2FzdDxUPih0b0ludDMyKGFyZ3NbMF0pKTsKLSAgICAg
ICAgVCBuZXdWYWx1ZSA9IHN0YXRpY19jYXN0PFQ+KHRvSW50MzIoYXJnc1sxXSkpOwotICAgICAg
ICByZXR1cm4ganNOdW1iZXIoV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VTdHJvbmcocHRyLCBl
eHBlY3RlZCwgbmV3VmFsdWUpKTsKKyAgICAgICAgVCBleHBlY3RlZCA9IGFyZ3NbMF07CisgICAg
ICAgIFQgbmV3VmFsdWUgPSBhcmdzWzFdOworICAgICAgICByZXR1cm4gV1RGOjphdG9taWNDb21w
YXJlRXhjaGFuZ2VTdHJvbmcocHRyLCBleHBlY3RlZCwgbmV3VmFsdWUpOwogICAgIH0KIH07CiAK
QEAgLTIzNyw5ICsyNDgsOSBAQCBzdHJ1Y3QgRXhjaGFuZ2VGdW5jIHsKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG51bUV4dHJhQXJncyA9IDE7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBKU1ZhbHVlIG9wZXJhdG9yKCkoVCogcHRyLCBjb25zdCBkb3VibGUqIGFy
Z3MpIGNvbnN0CisgICAgVCBvcGVyYXRvcigpKFQqIHB0ciwgY29uc3QgVCogYXJncykgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBqc051bWJlcihXVEY6OmF0b21pY0V4Y2hhbmdlKHB0ciwg
c3RhdGljX2Nhc3Q8VD4odG9JbnQzMihhcmdzWzBdKSkpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
YXRvbWljRXhjaGFuZ2UocHRyLCBhcmdzWzBdKTsKICAgICB9CiB9OwogCkBAIC0yNDcsOSArMjU4
LDkgQEAgc3RydWN0IExvYWRGdW5jIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51
bUV4dHJhQXJncyA9IDA7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBKU1Zh
bHVlIG9wZXJhdG9yKCkoVCogcHRyLCBjb25zdCBkb3VibGUqKSBjb25zdAorICAgIFQgb3BlcmF0
b3IoKShUKiBwdHIsIGNvbnN0IFQqKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKFdURjo6YXRvbWljTG9hZEZ1bGx5RmVuY2VkKHB0cikpOworICAgICAgICByZXR1cm4gV1RG
OjphdG9taWNMb2FkRnVsbHlGZW5jZWQocHRyKTsKICAgICB9CiB9OwogCkBAIC0yNTcsOSArMjY4
LDkgQEAgc3RydWN0IE9yRnVuYyB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1F
eHRyYUFyZ3MgPSAxOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSlNWYWx1
ZSBvcGVyYXRvcigpKFQqIHB0ciwgY29uc3QgZG91YmxlKiBhcmdzKSBjb25zdAorICAgIFQgb3Bl
cmF0b3IoKShUKiBwdHIsIGNvbnN0IFQqIGFyZ3MpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4ganNOdW1iZXIoV1RGOjphdG9taWNFeGNoYW5nZU9yKHB0ciwgdG9JbnQzMihhcmdzWzBdKSkp
OworICAgICAgICByZXR1cm4gV1RGOjphdG9taWNFeGNoYW5nZU9yKHB0ciwgYXJnc1swXSk7CiAg
ICAgfQogfTsKIApAQCAtMjY3LDEyICsyNzgsMTAgQEAgc3RydWN0IFN0b3JlRnVuYyB7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1FeHRyYUFyZ3MgPSAxOwogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSlNWYWx1ZSBvcGVyYXRvcigpKFQqIHB0ciwgY29uc3Qg
ZG91YmxlKiBhcmdzKSBjb25zdAorICAgIFQgb3BlcmF0b3IoKShUKiBwdHIsIGNvbnN0IFQqIGFy
Z3MpIGNvbnN0CiAgICAgewotICAgICAgICBkb3VibGUgdmFsdWVBc0ludCA9IGFyZ3NbMF07Ci0g
ICAgICAgIFQgdmFsdWVBc1QgPSBzdGF0aWNfY2FzdDxUPih0b0ludDMyKHZhbHVlQXNJbnQpKTsK
LSAgICAgICAgV1RGOjphdG9taWNTdG9yZUZ1bGx5RmVuY2VkKHB0ciwgdmFsdWVBc1QpOwotICAg
ICAgICByZXR1cm4ganNOdW1iZXIodmFsdWVBc0ludCk7CisgICAgICAgIFdURjo6YXRvbWljU3Rv
cmVGdWxseUZlbmNlZChwdHIsIGFyZ3NbMF0pOworICAgICAgICByZXR1cm4gYXJnc1swXTsKICAg
ICB9CiB9OwogCkBAIC0yODAsOSArMjg5LDkgQEAgc3RydWN0IFN1YkZ1bmMgewogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbnVtRXh0cmFBcmdzID0gMTsKICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIEpTVmFsdWUgb3BlcmF0b3IoKShUKiBwdHIsIGNvbnN0IGRvdWJs
ZSogYXJncykgY29uc3QKKyAgICBUIG9wZXJhdG9yKCkoVCogcHRyLCBjb25zdCBUKiBhcmdzKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKFdURjo6YXRvbWljRXhjaGFuZ2VT
dWIocHRyLCB0b0ludDMyKGFyZ3NbMF0pKSk7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0V4
Y2hhbmdlU3ViKHB0ciwgYXJnc1swXSk7CiAgICAgfQogfTsKIApAQCAtMjkwLDkgKzI5OSw5IEBA
IHN0cnVjdCBYb3JGdW5jIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bUV4dHJh
QXJncyA9IDE7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBKU1ZhbHVlIG9w
ZXJhdG9yKCkoVCogcHRyLCBjb25zdCBkb3VibGUqIGFyZ3MpIGNvbnN0CisgICAgVCBvcGVyYXRv
cigpKFQqIHB0ciwgY29uc3QgVCogYXJncykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBq
c051bWJlcihXVEY6OmF0b21pY0V4Y2hhbmdlWG9yKHB0ciwgdG9JbnQzMihhcmdzWzBdKSkpOwor
ICAgICAgICByZXR1cm4gV1RGOjphdG9taWNFeGNoYW5nZVhvcihwdHIsIGFyZ3NbMF0pOwogICAg
IH0KIH07CiAKQEAgLTMwOSw2ICszMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBpc0xvY2tGcmVlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYXJnKQogICAgIGNhc2UgMToKICAg
ICBjYXNlIDI6CiAgICAgY2FzZSA0OgorICAgIGNhc2UgODoKICAgICAgICAgcmVzdWx0ID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTMxOCw2ICszMjgsNjggQEAgRW5j
b2RlZEpTVmFsdWUgaXNMb2NrRnJlZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIGFyZykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihyZXN1bHQpKTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIGF0b21pY1N0
b3JlQ2FzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTVmFsdWUgb3Bl
cmFuZCwgSlNBcnJheUJ1ZmZlclZpZXcqIHR5cGVkQXJyYXlWaWV3LCB1bnNpZ25lZCBhY2Nlc3NJ
bmRleCkKK3sKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogdHlwZWRBcnJheSA9IGpzQ2FzdDxK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPio+KHR5cGVkQXJyYXlWaWV3KTsKKworICAg
IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgZXh0cmFBcmdzWzFdOworICAgIEpTVmFsdWUgdmFsdWU7
CisgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxBZGFwdG9yLCBCaWdJbnQ2NEFkYXB0
b3I+IHx8IHN0ZDo6aXNfc2FtZV92PEFkYXB0b3IsIEJpZ1VpbnQ2NEFkYXB0b3I+KSB7CisgICAg
ICAgIHZhbHVlID0gb3BlcmFuZC50b0JpZ0ludChnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBleHRyYUFyZ3NbMF0gPSB0b05h
dGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKG9wZXJhbmQudG9JbnRlZ2VyT3JJbmZpbml0eShn
bG9iYWxPYmplY3QpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICAgICAgZXh0cmFBcmdzWzBdID0gdG9OYXRpdmVGcm9tVmFsdWU8QWRhcHRvcj4oZ2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CisgICAgfQorCisgICAgaWYgKHR5cGVkQXJyYXktPmlzRGV0YWNoZWQo
KSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
dHlwZWRBcnJheUJ1ZmZlckhhc0JlZW5EZXRhY2hlZEVycm9yTWVzc2FnZSk7CisKKyAgICBTdG9y
ZUZ1bmMoKSh0eXBlZEFycmF5LT50eXBlZFZlY3RvcigpICsgYWNjZXNzSW5kZXgsIGV4dHJhQXJn
cyk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodmFsdWUp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgYXRvbWljU3RvcmUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVk0mIHZtLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIEpTVmFsdWUgb3Bl
cmFuZCkKK3sKKyAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWF0b21pY3Muc3Rv
cmUKKworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpT
QXJyYXlCdWZmZXJWaWV3KiB0eXBlZEFycmF5VmlldyA9IHZhbGlkYXRlSW50ZWdlclR5cGVkQXJy
YXk8VHlwZWRBcnJheU9wZXJhdGlvbk1vZGU6OlJlYWQ+KGdsb2JhbE9iamVjdCwgYmFzZSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIHVuc2lnbmVkIGFjY2Vz
c0luZGV4ID0gdmFsaWRhdGVBdG9taWNBY2Nlc3MoZ2xvYmFsT2JqZWN0LCB2bSwgdHlwZWRBcnJh
eVZpZXcsIGluZGV4KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgc2NvcGUucmVsZWFzZSgpOworICAgIHN3aXRjaCAodHlwZWRBcnJheVZpZXctPnR5cGUoKSkg
eworICAgIGNhc2UgSW50OEFycmF5VHlwZToKKyAgICAgICAgcmV0dXJuIGF0b21pY1N0b3JlQ2Fz
ZTxJbnQ4QWRhcHRvcj4oZ2xvYmFsT2JqZWN0LCB2bSwgb3BlcmFuZCwgdHlwZWRBcnJheVZpZXcs
IGFjY2Vzc0luZGV4KTsKKyAgICBjYXNlIEludDE2QXJyYXlUeXBlOgorICAgICAgICByZXR1cm4g
YXRvbWljU3RvcmVDYXNlPEludDE2QWRhcHRvcj4oZ2xvYmFsT2JqZWN0LCB2bSwgb3BlcmFuZCwg
dHlwZWRBcnJheVZpZXcsIGFjY2Vzc0luZGV4KTsKKyAgICBjYXNlIEludDMyQXJyYXlUeXBlOgor
ICAgICAgICByZXR1cm4gYXRvbWljU3RvcmVDYXNlPEludDMyQWRhcHRvcj4oZ2xvYmFsT2JqZWN0
LCB2bSwgb3BlcmFuZCwgdHlwZWRBcnJheVZpZXcsIGFjY2Vzc0luZGV4KTsKKyAgICBjYXNlIFVp
bnQ4QXJyYXlUeXBlOgorICAgICAgICByZXR1cm4gYXRvbWljU3RvcmVDYXNlPFVpbnQ4QWRhcHRv
cj4oZ2xvYmFsT2JqZWN0LCB2bSwgb3BlcmFuZCwgdHlwZWRBcnJheVZpZXcsIGFjY2Vzc0luZGV4
KTsKKyAgICBjYXNlIFVpbnQxNkFycmF5VHlwZToKKyAgICAgICAgcmV0dXJuIGF0b21pY1N0b3Jl
Q2FzZTxVaW50MTZBZGFwdG9yPihnbG9iYWxPYmplY3QsIHZtLCBvcGVyYW5kLCB0eXBlZEFycmF5
VmlldywgYWNjZXNzSW5kZXgpOworICAgIGNhc2UgVWludDMyQXJyYXlUeXBlOgorICAgICAgICBy
ZXR1cm4gYXRvbWljU3RvcmVDYXNlPFVpbnQzMkFkYXB0b3I+KGdsb2JhbE9iamVjdCwgdm0sIG9w
ZXJhbmQsIHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRleCk7CisgICAgY2FzZSBCaWdJbnQ2NEFy
cmF5VHlwZToKKyAgICAgICAgcmV0dXJuIGF0b21pY1N0b3JlQ2FzZTxCaWdJbnQ2NEFkYXB0b3I+
KGdsb2JhbE9iamVjdCwgdm0sIG9wZXJhbmQsIHR5cGVkQXJyYXlWaWV3LCBhY2Nlc3NJbmRleCk7
CisgICAgY2FzZSBCaWdVaW50NjRBcnJheVR5cGU6CisgICAgICAgIHJldHVybiBhdG9taWNTdG9y
ZUNhc2U8QmlnVWludDY0QWRhcHRvcj4oZ2xvYmFsT2JqZWN0LCB2bSwgb3BlcmFuZCwgdHlwZWRB
cnJheVZpZXcsIGFjY2Vzc0luZGV4KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KK30KKwogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihhdG9taWNz
RnVuY0FkZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKSkKQEAgLTM1Nyw3ICs0MjksNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oYXRvbWlj
c0Z1bmNPciwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZQogCiBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oYXRvbWljc0Z1bmNTdG9yZSwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKLSAgICByZXR1cm4gYXRvbWlj
UmVhZE1vZGlmeVdyaXRlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBTdG9yZUZ1bmMoKSk7Cisg
ICAgcmV0dXJuIGF0b21pY1N0b3JlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT52bSgpLCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDIpKTsKIH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGF0b21pY3NGdW5j
U3ViLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQpAQCAtMzY1LDM3ICs0MzcsMjMgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGF0b21pY3NG
dW5jU3ViLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW0KICAgICByZXR1
cm4gYXRvbWljUmVhZE1vZGlmeVdyaXRlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBTdWJGdW5j
KCkpOwogfQogCi1KU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oYXRvbWljc0Z1bmNXYWl0LCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQordGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBKU0FycmF5VHlwZT4KK0pTVmFsdWUgYXRv
bWljc1dhaXRJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQXJyYXlUeXBlKiB0
eXBlZEFycmF5LCB1bnNpZ25lZCBhY2Nlc3NJbmRleCwgVmFsdWVUeXBlIGV4cGVjdGVkVmFsdWUs
IEpTVmFsdWUgdGltZW91dFZhbHVlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBhdXRv
KiB0eXBlZEFycmF5QnVmZmVyID0gdmFsaWRhdGVJbnRlZ2VyVHlwZWRBcnJheTxUeXBlZEFycmF5
T3BlcmF0aW9uTW9kZTo6V3JpdGU+KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICBhdXRvKiB0eXBl
ZEFycmF5ID0ganNDYXN0PEpTSW50MzJBcnJheSo+KHR5cGVkQXJyYXlCdWZmZXIpOworICAgIFZh
bHVlVHlwZSogcHRyID0gdHlwZWRBcnJheS0+dHlwZWRWZWN0b3IoKSArIGFjY2Vzc0luZGV4Owog
Ci0gICAgaWYgKCF0eXBlZEFycmF5LT5pc1NoYXJlZCgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJUeXBlZCBhcnJheSBmb3Igd2FpdC9ub3RpZnkgbXVz
dCB3cmFwIGEgU2hhcmVkQXJyYXlCdWZmZXIuIl9zKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBhY2Nlc3NJbmRl
eCA9IHZhbGlkYXRlQXRvbWljQWNjZXNzKHZtLCBnbG9iYWxPYmplY3QsIHR5cGVkQXJyYXksIGNh
bGxGcmFtZS0+YXJndW1lbnQoMSkpOworICAgIGRvdWJsZSB0aW1lb3V0SW5NaWxsaXNlY29uZHMg
PSB0aW1lb3V0VmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgaW50MzJfdCogcHRyID0gdHlwZWRBcnJheS0+dHlw
ZWRWZWN0b3IoKSArIGFjY2Vzc0luZGV4OwotCi0gICAgaW50MzJfdCBleHBlY3RlZFZhbHVlID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgyKS50b0ludDMyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKTsKLQot
ICAgIGRvdWJsZSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDMp
LnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKTsKICAgICBTZWNvbmRzIHRpbWVvdXQgPSBT
ZWNvbmRzOjppbmZpbml0eSgpOwogICAgIGlmICghc3RkOjppc25hbih0aW1lb3V0SW5NaWxsaXNl
Y29uZHMpKQogICAgICAgICB0aW1lb3V0ID0gc3RkOjptYXgoU2Vjb25kczo6ZnJvbU1pbGxpc2Vj
b25kcyh0aW1lb3V0SW5NaWxsaXNlY29uZHMpLCAwX3MpOwogCiAgICAgaWYgKCF2bS5tX3R5cGVk
QXJyYXlDb250cm9sbGVyLT5pc0F0b21pY3NXYWl0QWxsb3dlZE9uQ3VycmVudFRocmVhZCgpKSB7
CiAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJBdG9taWNzLndh
aXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIHRoZSBjdXJyZW50IHRocmVhZC4iX3MpOwotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KIAogICAgIGJvb2wgZGlkUGFzc1ZhbGlkYXRpb24gPSBmYWxzZTsKQEAgLTQx
MiwxMCArNDcwLDQyIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihhdG9taWNzRnVuY1dhaXQs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhCiAgICAgICAgICAgICBNb25v
dG9uaWNUaW1lOjpub3coKSArIHRpbWVvdXQpOwogICAgIH0KICAgICBpZiAoIWRpZFBhc3NWYWxp
ZGF0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLnNtYWxsU3RyaW5ncy5u
b3RFcXVhbFN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5ub3RFcXVh
bFN0cmluZygpOwogICAgIGlmICghcmVzdWx0Lndhc1VucGFya2VkKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHZtLnNtYWxsU3RyaW5ncy50aW1lZE91dFN0cmluZygpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZtLnNtYWxsU3RyaW5ncy5va1N0cmluZygpKTsKKyAgICAg
ICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy50aW1lZE91dFN0cmluZygpOworICAgIHJldHVybiB2
bS5zbWFsbFN0cmluZ3Mub2tTdHJpbmcoKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGF0b21pY3NGdW5jV2FpdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogdHlwZWRB
cnJheVZpZXcgPSB2YWxpZGF0ZUludGVnZXJUeXBlZEFycmF5PFR5cGVkQXJyYXlPcGVyYXRpb25N
b2RlOjpXcml0ZT4oZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKCF0eXBlZEFycmF5Vmll
dy0+aXNTaGFyZWQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIlR5cGVkIGFycmF5IGZvciB3YWl0L25vdGlmeSBtdXN0IHdyYXAgYSBTaGFy
ZWRBcnJheUJ1ZmZlci4iX3MpOworCisgICAgdW5zaWduZWQgYWNjZXNzSW5kZXggPSB2YWxpZGF0
ZUF0b21pY0FjY2VzcyhnbG9iYWxPYmplY3QsIHZtLCB0eXBlZEFycmF5VmlldywgY2FsbEZyYW1l
LT5hcmd1bWVudCgxKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgIHN3aXRjaCAodHlwZWRBcnJheVZpZXctPnR5cGUoKSkgeworICAgIGNhc2UgSW50MzJBcnJh
eVR5cGU6IHsKKyAgICAgICAgaW50MzJfdCBleHBlY3RlZFZhbHVlID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgyKS50b0ludDMyKGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKGF0b21pY3NXYWl0SW1wbDxpbnQzMl90PihnbG9iYWxPYmplY3QsIGpzQ2FzdDxK
U0ludDMyQXJyYXkqPih0eXBlZEFycmF5VmlldyksIGFjY2Vzc0luZGV4LCBleHBlY3RlZFZhbHVl
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDMpKSkpOworICAgIH0KKyAgICBjYXNlIEJpZ0ludDY0QXJy
YXlUeXBlOiB7CisgICAgICAgIGludDY0X3QgZXhwZWN0ZWRWYWx1ZSA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMikudG9CaWdJbnQ2NChnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
VmFsdWU6OmVuY29kZShhdG9taWNzV2FpdEltcGw8aW50NjRfdD4oZ2xvYmFsT2JqZWN0LCBqc0Nh
c3Q8SlNCaWdJbnQ2NEFycmF5Kj4odHlwZWRBcnJheVZpZXcpLCBhY2Nlc3NJbmRleCwgZXhwZWN0
ZWRWYWx1ZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgzKSkpKTsKKyAgICB9CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiB7IH07CiB9CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihhdG9t
aWNzRnVuY05vdGlmeSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKSkKQEAgLTQyMywxMSArNTEzLDEwIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihhdG9taWNzRnVuY05vdGlmeSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGF1dG8qIHR5cGVkQXJyYXlCdWZmZXIgPSB2YWxp
ZGF0ZUludGVnZXJUeXBlZEFycmF5PFR5cGVkQXJyYXlPcGVyYXRpb25Nb2RlOjpXcml0ZT4oZ2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvKiB0eXBlZEFycmF5
VmlldyA9IHZhbGlkYXRlSW50ZWdlclR5cGVkQXJyYXk8VHlwZWRBcnJheU9wZXJhdGlvbk1vZGU6
OldyaXRlPihnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgYXV0byogdHlwZWRBcnJheSA9IGpzQ2Fz
dDxKU0ludDMyQXJyYXkqPih0eXBlZEFycmF5QnVmZmVyKTsKIAotICAgIHVuc2lnbmVkIGFjY2Vz
c0luZGV4ID0gdmFsaWRhdGVBdG9taWNBY2Nlc3Modm0sIGdsb2JhbE9iamVjdCwgdHlwZWRBcnJh
eSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7CisgICAgdW5zaWduZWQgYWNjZXNzSW5kZXggPSB2
YWxpZGF0ZUF0b21pY0FjY2VzcyhnbG9iYWxPYmplY3QsIHZtLCB0eXBlZEFycmF5VmlldywgY2Fs
bEZyYW1lLT5hcmd1bWVudCgxKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIEpTVmFsdWUgY291bnRWYWx1ZSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMik7CkBA
IC00NDAsMTEgKzUyOSwyMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oYXRvbWljc0Z1bmNO
b3RpZnksIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRgogICAgICAgICAgICAg
Y291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY291bnREb3VibGUpOwogICAgIH0KIAotICAg
IGlmICghdHlwZWRBcnJheS0+aXNTaGFyZWQoKSkKKyAgICBpZiAoIXR5cGVkQXJyYXlWaWV3LT5p
c1NoYXJlZCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKTsK
IAotICAgIGludDMyX3QqIHB0ciA9IHR5cGVkQXJyYXktPnR5cGVkVmVjdG9yKCkgKyBhY2Nlc3NJ
bmRleDsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKFBhcmtpbmdMb3Q6OnVu
cGFya0NvdW50KHB0ciwgY291bnQpKSk7CisgICAgc3dpdGNoICh0eXBlZEFycmF5Vmlldy0+dHlw
ZSgpKSB7CisgICAgY2FzZSBJbnQzMkFycmF5VHlwZTogeworICAgICAgICBpbnQzMl90KiBwdHIg
PSBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4odHlwZWRBcnJheVZpZXcpLT50eXBlZFZlY3RvcigpICsg
YWNjZXNzSW5kZXg7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoUGFy
a2luZ0xvdDo6dW5wYXJrQ291bnQocHRyLCBjb3VudCkpKTsKKyAgICB9CisgICAgY2FzZSBCaWdJ
bnQ2NEFycmF5VHlwZTogeworICAgICAgICBpbnQ2NF90KiBwdHIgPSBqc0Nhc3Q8SlNCaWdJbnQ2
NEFycmF5Kj4odHlwZWRBcnJheVZpZXcpLT50eXBlZFZlY3RvcigpICsgYWNjZXNzSW5kZXg7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoUGFya2luZ0xvdDo6dW5wYXJr
Q291bnQocHRyLCBjb3VudCkpKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVy
biB7IH07CiB9CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihhdG9taWNzRnVuY1hvciwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKQEAgLTQ2
MCw3ICs1NjEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQXRvbWljc0Fk
ZCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZwogICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmdz
W10gPSB7SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1Zh
bHVlOjpkZWNvZGUob3BlcmFuZCl9OwotICAgIHJldHVybiBhdG9taWNSZWFkTW9kaWZ5V3JpdGUo
dm0sIGdsb2JhbE9iamVjdCwgYXJncywgQWRkRnVuYygpKTsKKyAgICByZXR1cm4gYXRvbWljUmVh
ZE1vZGlmeVdyaXRlKGdsb2JhbE9iamVjdCwgdm0sIGFyZ3MsIEFkZEZ1bmMoKSk7CiB9CiAKIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25BdG9taWNzQW5kLCBFbmNvZGVkSlNWYWx1
ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKSkKQEAgLTQ2OSw3ICs1
NzAsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQXRvbWljc0FuZCwgRW5j
b2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmdzW10gPSB7
SlNWYWx1ZTo6ZGVjb2RlKGJhc2UpLCBKU1ZhbHVlOjpkZWNvZGUoaW5kZXgpLCBKU1ZhbHVlOjpk
ZWNvZGUob3BlcmFuZCl9OwotICAgIHJldHVybiBhdG9taWNSZWFkTW9kaWZ5V3JpdGUodm0sIGds
b2JhbE9iamVjdCwgYXJncywgQW5kRnVuYygpKTsKKyAgICByZXR1cm4gYXRvbWljUmVhZE1vZGlm
eVdyaXRlKGdsb2JhbE9iamVjdCwgdm0sIGFyZ3MsIEFuZEZ1bmMoKSk7CiB9CiAKIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25BdG9taWNzQ29tcGFyZUV4Y2hhbmdlLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJh
c2UsIEVuY29kZWRKU1ZhbHVlIGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBleHBlY3RlZCwgRW5jb2Rl
ZEpTVmFsdWUgbmV3VmFsdWUpKQpAQCAtNDc4LDcgKzU3OSw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25BdG9taWNzQ29tcGFyZUV4Y2hhbmdlLCBFbmNvZGVkSlNWYWx1ZSwg
KEpTR2xvCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpT
VmFsdWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShleHBlY3RlZCksIEpTVmFsdWU6
OmRlY29kZShuZXdWYWx1ZSl9OwotICAgIHJldHVybiBhdG9taWNSZWFkTW9kaWZ5V3JpdGUodm0s
IGdsb2JhbE9iamVjdCwgYXJncywgQ29tcGFyZUV4Y2hhbmdlRnVuYygpKTsKKyAgICByZXR1cm4g
YXRvbWljUmVhZE1vZGlmeVdyaXRlKGdsb2JhbE9iamVjdCwgdm0sIGFyZ3MsIENvbXBhcmVFeGNo
YW5nZUZ1bmMoKSk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25BdG9t
aWNzRXhjaGFuZ2UsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1Zh
bHVlIG9wZXJhbmQpKQpAQCAtNDg3LDcgKzU4OCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25BdG9taWNzRXhjaGFuZ2UsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmpl
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFsdWU6
OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5kKX07Ci0gICAgcmV0dXJuIGF0
b21pY1JlYWRNb2RpZnlXcml0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmdzLCBFeGNoYW5nZUZ1bmMo
KSk7CisgICAgcmV0dXJuIGF0b21pY1JlYWRNb2RpZnlXcml0ZShnbG9iYWxPYmplY3QsIHZtLCBh
cmdzLCBFeGNoYW5nZUZ1bmMoKSk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25BdG9taWNzSXNMb2NrRnJlZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBzaXplKSkKQEAgLTUwNCw3ICs2MDUsNyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQXRvbWljc0xvYWQsIEVuY29kZWRKU1Zh
bHVlLCAoSlNHbG9iYWxPYmplY3QqCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpk
ZWNvZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCl9OwotICAgIHJldHVybiBhdG9taWNS
ZWFkTW9kaWZ5V3JpdGUodm0sIGdsb2JhbE9iamVjdCwgYXJncywgTG9hZEZ1bmMoKSk7CisgICAg
cmV0dXJuIGF0b21pY1JlYWRNb2RpZnlXcml0ZShnbG9iYWxPYmplY3QsIHZtLCBhcmdzLCBMb2Fk
RnVuYygpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkF0b21pY3NP
ciwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFu
ZCkpCkBAIC01MTMsNyArNjE0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkF0b21pY3NPciwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2wKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0
aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIEpT
VmFsdWUgYXJnc1tdID0ge0pTVmFsdWU6OmRlY29kZShiYXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGlu
ZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKG9wZXJhbmQpfTsKLSAgICByZXR1cm4gYXRvbWljUmVhZE1v
ZGlmeVdyaXRlKHZtLCBnbG9iYWxPYmplY3QsIGFyZ3MsIE9yRnVuYygpKTsKKyAgICByZXR1cm4g
YXRvbWljUmVhZE1vZGlmeVdyaXRlKGdsb2JhbE9iamVjdCwgdm0sIGFyZ3MsIE9yRnVuYygpKTsK
IH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkF0b21pY3NTdG9yZSwgRW5j
b2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBpbmRleCwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkpCkBA
IC01MjEsOCArNjIyLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkF0b21p
Y3NTdG9yZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCoKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNv
ZGUoYmFzZSksIEpTVmFsdWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5k
KX07Ci0gICAgcmV0dXJuIGF0b21pY1JlYWRNb2RpZnlXcml0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBh
cmdzLCBTdG9yZUZ1bmMoKSk7CisgICAgcmV0dXJuIGF0b21pY1N0b3JlKGdsb2JhbE9iamVjdCwg
dm0sIEpTVmFsdWU6OmRlY29kZShiYXNlKSwgSlNWYWx1ZTo6ZGVjb2RlKGluZGV4KSwgSlNWYWx1
ZTo6ZGVjb2RlKG9wZXJhbmQpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkF0b21pY3NTdWIsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIG9wZXJhbmQpKQpAQCAtNTMxLDcgKzYzMSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25BdG9taWNzU3ViLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiBnCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwog
ICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFs
dWU6OmRlY29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5kKX07Ci0gICAgcmV0dXJu
IGF0b21pY1JlYWRNb2RpZnlXcml0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmdzLCBTdWJGdW5jKCkp
OworICAgIHJldHVybiBhdG9taWNSZWFkTW9kaWZ5V3JpdGUoZ2xvYmFsT2JqZWN0LCB2bSwgYXJn
cywgU3ViRnVuYygpKTsKIH0KIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkF0
b21pY3NYb3IsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgYmFzZSwgRW5jb2RlZEpTVmFsdWUgaW5kZXgsIEVuY29kZWRKU1ZhbHVl
IG9wZXJhbmQpKQpAQCAtNTQwLDcgKzY0MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25BdG9taWNzWG9yLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnCiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJ
VE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
ICAgICBKU1ZhbHVlIGFyZ3NbXSA9IHtKU1ZhbHVlOjpkZWNvZGUoYmFzZSksIEpTVmFsdWU6OmRl
Y29kZShpbmRleCksIEpTVmFsdWU6OmRlY29kZShvcGVyYW5kKX07Ci0gICAgcmV0dXJuIGF0b21p
Y1JlYWRNb2RpZnlXcml0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBhcmdzLCBYb3JGdW5jKCkpOworICAg
IHJldHVybiBhdG9taWNSZWFkTW9kaWZ5V3JpdGUoZ2xvYmFsT2JqZWN0LCB2bSwgYXJncywgWG9y
RnVuYygpKTsKIH0KIAogSUdOT1JFX1dBUk5JTkdTX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVG9OYXRpdmVGcm9tVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RvTmF0aXZlRnJvbVZhbHVlLmgKaW5kZXggNzQ2MDg5NWY0YmYyZTcz
NzZkMDEzMzM3MTUzNzVmM2FiNTk0MTNiZS4uYmIyOGNjODBhZDNhZTIxZGU3YzZmYjY3NTNlODRk
MGIyMzY4NDgzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVG9O
YXRpdmVGcm9tVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Ub05h
dGl2ZUZyb21WYWx1ZS5oCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdG9OYXRpdmVGcm9t
VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICAvLyBGSVhNRTogQmlnSW50CisgICAgQVNTRVJU
KCF2YWx1ZS5pc0JpZ0ludCgpKTsKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQogICAgICAgICBy
ZXR1cm4gQWRhcHRvcjo6dG9OYXRpdmVGcm9tSW50MzIodmFsdWUuYXNJbnQzMigpKTsKICAgICBy
ZXR1cm4gQWRhcHRvcjo6dG9OYXRpdmVGcm9tRG91YmxlKHZhbHVlLmFzRG91YmxlKCkpOwpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAxYTAx
ZjViM2QyOGUxN2I5NmI2NDUwNTVlMDUwMTFmM2EwMzY4M2JkLi5kZjY4NGUxNjQ4NTRmYmMyYzhi
NjVkMmM1MTA2MDQzNzliMmUyNGVjIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTAyLTAxICBZdXN1a2Ug
U3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gQXRvbWljcyBzaG91
bGQgc3VwcG9ydCBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTI0NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2F0b21pYy1pbmNyZW1l
bnQtYmlnaW50NjQuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoaS5h
Z2VudC5zdGFydC4yNjIuYWdlbnQucmVjZWl2ZUJyb2FkY2FzdCk6CisgICAgICAgICogc3RyZXNz
L2JpZ2ludC1hdG9taWNzLWZhaWwuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkVGhyb3cpOgor
ICAgICAgICAqIHN0cmVzcy9iaWdpbnQ2NC1hdG9taWNzLmpzOiBBZGRlZC4KKyAgICAgICAgKHNo
b3VsZEJlKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIHN0cmVzcy9iaWd1aW50NjQtYXRv
bWljcy5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgICh0ZXN0KToKKyAg
ICAgICAgKiBzdHJlc3MvaXNMb2NrRnJlZS5qczoKKyAgICAgICAgKGZvbzYpOgorICAgICAgICAo
Zm9vNyk6CisgICAgICAgIChmb284KToKKyAgICAgICAgKGZvbzkpOgorICAgICAgICAqIHN0cmVz
cy9zaGFyZWQtYXJyYXktYnVmZmVyLWJpZ2ludC5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRG
YWlsKToKKyAgICAgICAgKHNob3VsZFN1Y2NlZWQpOgorICAgICAgICAocnVuQXRvbWljKToKKyAg
ICAgICAgKiB0ZXN0MjYyL2NvbmZpZy55YW1sOgorCiAyMDIxLTAxLTMxICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gSW1wbGVtZW50IEJpZ0ludDY0
QXJyYXkgYW5kIEJpZ1VpbnQ2NEFycmF5CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hdG9t
aWMtaW5jcmVtZW50LWJpZ2ludDY0LmpzIGIvSlNUZXN0cy9zdHJlc3MvYXRvbWljLWluY3JlbWVu
dC1iaWdpbnQ2NC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjhmNTY2MjJkNzk1YTkzM2IyZDY3YjE0YjBlYTg4
MDc2YzBhN2VlCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXRvbWljLWluY3Jl
bWVudC1iaWdpbnQ2NC5qcwpAQCAtMCwwICsxLDM1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1
YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworY29uc3QgbnVtID0g
MzsKK2NvbnN0IGNvdW50ID0gMWU1OworCitsZXQgYnVmZmVyID0gbmV3IFNoYXJlZEFycmF5QnVm
ZmVyKDEyOCk7CitsZXQgYXJyYXkgPSBuZXcgQmlnSW50NjRBcnJheShidWZmZXIpOworCitmb3Ig
KGxldCBpID0gMDsgaSA8IG51bTsgKytpKSB7CisgICAgJC5hZ2VudC5zdGFydChgCisgICAgICAg
ICQyNjIuYWdlbnQucmVjZWl2ZUJyb2FkY2FzdChmdW5jdGlvbihidWZmZXIpIHsKKyAgICAgICAg
ICAgIGxldCBhcnJheSA9IG5ldyBCaWdJbnQ2NEFycmF5KGJ1ZmZlcik7CisgICAgICAgICAgICAk
MjYyLmFnZW50LnNsZWVwKDEpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAke2Nv
dW50fTsgKytpKQorICAgICAgICAgICAgICAgIEF0b21pY3MuYWRkKGFycmF5LCAwLCAxbik7Cisg
ICAgICAgICAgICAkMjYyLmFnZW50LnJlcG9ydCgwKTsKKyAgICAgICAgICAgICQyNjIuYWdlbnQu
bGVhdmluZygpOworICAgICAgICB9KTsKKyAgICBgKTsKK30KKworJDI2Mi5hZ2VudC5icm9hZGNh
c3QoYnVmZmVyKTsKK2xldCBkb25lID0gMDsKK3doaWxlICh0cnVlKSB7CisgICAgbGV0IHJlcG9y
dCA9ICQyNjIuYWdlbnQuZ2V0UmVwb3J0KCk7CisgICAgaWYgKHJlcG9ydCAhPT0gbnVsbCkKKyAg
ICAgICAgZG9uZSsrOworICAgIGlmIChkb25lID09PSBudW0pCisgICAgICAgIGJyZWFrOworICAg
ICQyNjIuYWdlbnQuc2xlZXAoMSk7Cit9CitzaG91bGRCZShhcnJheVswXSwgQmlnSW50KGNvdW50
ICogbnVtKSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtYXRvbWljcy1mYWls
LmpzIGIvSlNUZXN0cy9zdHJlc3MvYmlnaW50LWF0b21pY3MtZmFpbC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
MGFhNWZlNTdmZjA2ZjkwNzYwZWQzMzI0MzIwN2Q3Mjg5Y2E4OGEzCi0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy9zdHJlc3MvYmlnaW50LWF0b21pY3MtZmFpbC5qcwpAQCAtMCwwICsxLDI1IEBA
CitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBlcnJvck1lc3NhZ2UpIHsKKyAgICB2YXIgZXJy
b3JUaHJvd24gPSBmYWxzZTsKKyAgICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAg
ICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1
ZTsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoIWVycm9yVGhyb3duKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCB0aHJvd24nKTsKKyAgICBpZiAoU3RyaW5nKGVycm9y
KSAhPT0gZXJyb3JNZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBlcnJvcjog
JHtTdHJpbmcoZXJyb3IpfWApOworfQorCitsZXQgaTY0YSA9IG5ldyBCaWdJbnQ2NEFycmF5KG5l
dyBTaGFyZWRBcnJheUJ1ZmZlcigxMjgpKTsKK2xldCB1NjRhID0gbmV3IEJpZ1VpbnQ2NEFycmF5
KG5ldyBTaGFyZWRBcnJheUJ1ZmZlcigxMjgpKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAg
IEF0b21pY3Mud2FpdCh1NjRhLCAwLCAwbik7Cit9LCBgVHlwZUVycm9yOiBUeXBlZCBhcnJheSBh
cmd1bWVudCBtdXN0IGJlIGFuIEludDMyQXJyYXkgb3IgQmlnSW50NjRBcnJheS5gKTsKKworc2hv
dWxkVGhyb3coKCkgPT4geworICAgIEF0b21pY3MubG9hZChuZXcgRmxvYXQ2NEFycmF5KDgpLCAw
KTsKK30sIGBUeXBlRXJyb3I6IFR5cGVkIGFycmF5IGFyZ3VtZW50IG11c3QgYmUgYW4gSW50OEFy
cmF5LCBJbnQxNkFycmF5LCBJbnQzMkFycmF5LCBVaW50OEFycmF5LCBVaW50MTZBcnJheSwgVWlu
dDMyQXJyYXksIEJpZ0ludDY0QXJyYXksIG9yIEJpZ1VpbnQ2NEFycmF5LmApOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9zdHJlc3MvYmlnaW50NjQtYXRvbWljcy5qcyBiL0pTVGVzdHMvc3RyZXNzL2Jp
Z2ludDY0LWF0b21pY3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU2ZTg5NjM2ODZhNDczNDI0YTEwNDFhYzM5
YWI0N2MyYTNiZTVlYwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2JpZ2ludDY0
LWF0b21pY3MuanMKQEAgLTAsMCArMSwzNCBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBl
eHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK3ZhciBhcnJheSA9IG5ldyBC
aWdJbnQ2NEFycmF5KG5ldyBTaGFyZWRBcnJheUJ1ZmZlcig4ICogOCkpOworc2hvdWxkQmUoYXJy
YXkubGVuZ3RoLCA4KTsKKworZnVuY3Rpb24gdGVzdChhcnJheSkgeworICAgIHNob3VsZEJlKEF0
b21pY3MuYWRkKGFycmF5LCAwLCA4biksIDBuKTsKKyAgICBzaG91bGRCZShhcnJheVswXSwgOG4p
OworICAgIHNob3VsZEJlKEF0b21pY3Muc3ViKGFycmF5LCAwLCAxbiksIDhuKTsKKyAgICBzaG91
bGRCZShhcnJheVswXSwgN24pOworICAgIHNob3VsZEJlKEF0b21pY3MuYW5kKGFycmF5LCAwLCAw
YjExMTEwbiksIDduKTsKKyAgICBzaG91bGRCZShhcnJheVswXSwgNm4pOworICAgIHNob3VsZEJl
KEF0b21pY3MuY29tcGFyZUV4Y2hhbmdlKGFycmF5LCAwLCA1biwgMG4pLCA2bik7CisgICAgc2hv
dWxkQmUoYXJyYXlbMF0sIDZuKTsKKyAgICBzaG91bGRCZShBdG9taWNzLmNvbXBhcmVFeGNoYW5n
ZShhcnJheSwgMCwgNm4sIDFuKSwgNm4pOworICAgIHNob3VsZEJlKGFycmF5WzBdLCAxbik7Cisg
ICAgc2hvdWxkQmUoQXRvbWljcy5leGNoYW5nZShhcnJheSwgMCwgMm4pLCAxbik7CisgICAgc2hv
dWxkQmUoYXJyYXlbMF0sIDJuKTsKKyAgICBzaG91bGRCZShBdG9taWNzLmxvYWQoYXJyYXksIDAp
LCAybik7CisgICAgc2hvdWxkQmUoQXRvbWljcy5vcihhcnJheSwgMCwgMW4pLCAybik7CisgICAg
c2hvdWxkQmUoYXJyYXlbMF0sIDNuKTsKKyAgICBzaG91bGRCZShBdG9taWNzLnN0b3JlKGFycmF5
LCAwLCA2biksIDZuKTsKKyAgICBzaG91bGRCZShhcnJheVswXSwgNm4pOworICAgIHNob3VsZEJl
KEF0b21pY3MueG9yKGFycmF5LCAwLCAwYjExMTExbiksIDZuKTsKKyAgICBzaG91bGRCZShhcnJh
eVswXSwgMjVuKTsKKyAgICBzaG91bGRCZShBdG9taWNzLnN0b3JlKGFycmF5LCAwLCAwbiksIDBu
KTsKK30KK25vSW5saW5lKGFycmF5KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkK
KyAgICB0ZXN0KGFycmF5KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2JpZ3VpbnQ2NC1h
dG9taWNzLmpzIGIvSlNUZXN0cy9zdHJlc3MvYmlndWludDY0LWF0b21pY3MuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWEyMWRkYTJmZTAxZjBhY2Q0NjkxMmJlN2Y4OWY1NDIwNjA3Yjk4NwotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvc3RyZXNzL2JpZ3VpbnQ2NC1hdG9taWNzLmpzCkBAIC0wLDAgKzEsMzQg
QEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFs
ICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBh
Y3R1YWwpOworfQorCit2YXIgYXJyYXkgPSBuZXcgQmlnVWludDY0QXJyYXkobmV3IFNoYXJlZEFy
cmF5QnVmZmVyKDggKiA4KSk7CitzaG91bGRCZShhcnJheS5sZW5ndGgsIDgpOworCitmdW5jdGlv
biB0ZXN0KGFycmF5KSB7CisgICAgc2hvdWxkQmUoQXRvbWljcy5hZGQoYXJyYXksIDAsIDhuKSwg
MG4pOworICAgIHNob3VsZEJlKGFycmF5WzBdLCA4bik7CisgICAgc2hvdWxkQmUoQXRvbWljcy5z
dWIoYXJyYXksIDAsIDFuKSwgOG4pOworICAgIHNob3VsZEJlKGFycmF5WzBdLCA3bik7CisgICAg
c2hvdWxkQmUoQXRvbWljcy5hbmQoYXJyYXksIDAsIDBiMTExMTBuKSwgN24pOworICAgIHNob3Vs
ZEJlKGFycmF5WzBdLCA2bik7CisgICAgc2hvdWxkQmUoQXRvbWljcy5jb21wYXJlRXhjaGFuZ2Uo
YXJyYXksIDAsIDVuLCAwbiksIDZuKTsKKyAgICBzaG91bGRCZShhcnJheVswXSwgNm4pOworICAg
IHNob3VsZEJlKEF0b21pY3MuY29tcGFyZUV4Y2hhbmdlKGFycmF5LCAwLCA2biwgMW4pLCA2bik7
CisgICAgc2hvdWxkQmUoYXJyYXlbMF0sIDFuKTsKKyAgICBzaG91bGRCZShBdG9taWNzLmV4Y2hh
bmdlKGFycmF5LCAwLCAybiksIDFuKTsKKyAgICBzaG91bGRCZShhcnJheVswXSwgMm4pOworICAg
IHNob3VsZEJlKEF0b21pY3MubG9hZChhcnJheSwgMCksIDJuKTsKKyAgICBzaG91bGRCZShBdG9t
aWNzLm9yKGFycmF5LCAwLCAxbiksIDJuKTsKKyAgICBzaG91bGRCZShhcnJheVswXSwgM24pOwor
ICAgIHNob3VsZEJlKEF0b21pY3Muc3RvcmUoYXJyYXksIDAsIDZuKSwgNm4pOworICAgIHNob3Vs
ZEJlKGFycmF5WzBdLCA2bik7CisgICAgc2hvdWxkQmUoQXRvbWljcy54b3IoYXJyYXksIDAsIDBi
MTExMTFuKSwgNm4pOworICAgIHNob3VsZEJlKGFycmF5WzBdLCAyNW4pOworICAgIHNob3VsZEJl
KEF0b21pY3Muc3RvcmUoYXJyYXksIDAsIDBuKSwgMG4pOworfQorbm9JbmxpbmUoYXJyYXkpOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKQorICAgIHRlc3QoYXJyYXkpOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3MvaXNMb2NrRnJlZS5qcyBiL0pTVGVzdHMvc3RyZXNzL2lzTG9j
a0ZyZWUuanMKaW5kZXggMWYwOGE1MzUyOWJjZWUxNjU2MzRhNWY5MWE0YjBhOWZjMGI5NzE5Ni4u
OGRhNWVhNTU0ODVhNjQ3MjgxYTc0ZjNiMjVjZjk4OTBlOGUwYzc0YyAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy9zdHJlc3MvaXNMb2NrRnJlZS5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9pc0xvY2tGcmVl
LmpzCkBAIC0zNSw2ICszNSwyNiBAQCBmdW5jdGlvbiBmb281KGJ5dGVzKSB7CiB9CiBub0lubGlu
ZShmb281KTsKIAorZnVuY3Rpb24gZm9vNihieXRlcykgeworICAgIHJldHVybiBBdG9taWNzLmlz
TG9ja0ZyZWUoNik7Cit9Citub0lubGluZShmb282KTsKKworZnVuY3Rpb24gZm9vNyhieXRlcykg
eworICAgIHJldHVybiBBdG9taWNzLmlzTG9ja0ZyZWUoNyk7Cit9Citub0lubGluZShmb283KTsK
KworZnVuY3Rpb24gZm9vOChieXRlcykgeworICAgIHJldHVybiBBdG9taWNzLmlzTG9ja0ZyZWUo
OCk7Cit9Citub0lubGluZShmb284KTsKKworZnVuY3Rpb24gZm9vOShieXRlcykgeworICAgIHJl
dHVybiBBdG9taWNzLmlzTG9ja0ZyZWUoOSk7Cit9Citub0lubGluZShmb285KTsKKwogZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CiAgICAgdmFyIHJlc3VsdCA9IGZvbygwKTsKICAg
ICBpZiAocmVzdWx0ICE9PSBmYWxzZSkKQEAgLTUyLDYgKzcyLDE4IEBAIGZ1bmN0aW9uIGZvbzUo
Ynl0ZXMpIHsKICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKQogICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwogICAgIHZhciByZXN1bHQgPSBmb28oNSk7Cisg
ICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJl
c3VsdDogIiArIHJlc3VsdCk7CisgICAgdmFyIHJlc3VsdCA9IGZvbyg2KTsKKyAgICBpZiAocmVz
dWx0ICE9PSBmYWxzZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsg
cmVzdWx0KTsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKDcpOworICAgIGlmIChyZXN1bHQgIT09IGZh
bHNlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwor
ICAgIHZhciByZXN1bHQgPSBmb28oOCk7CisgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKKyAgICB2YXIgcmVz
dWx0ID0gZm9vKDkpOwogICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKQogICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwogICAgIHZhciByZXN1bHQgPSBmb28w
KCk7CkBAIC03Miw0ICsxMDQsMTYgQEAgZnVuY3Rpb24gZm9vNShieXRlcykgewogICAgIHZhciBy
ZXN1bHQgPSBmb281KCk7CiAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpCiAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CisgICAgdmFyIHJlc3VsdCA9IGZv
bzYoKTsKKyAgICBpZiAocmVzdWx0ICE9PSBmYWxzZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJCYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKKyAgICB2YXIgcmVzdWx0ID0gZm9vNygpOworICAg
IGlmIChyZXN1bHQgIT09IGZhbHNlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCByZXN1
bHQ6ICIgKyByZXN1bHQpOworICAgIHZhciByZXN1bHQgPSBmb284KCk7CisgICAgaWYgKHJlc3Vs
dCAhPT0gdHJ1ZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgcmVz
dWx0KTsKKyAgICB2YXIgcmVzdWx0ID0gZm9vOSgpOworICAgIGlmIChyZXN1bHQgIT09IGZhbHNl
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwogfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2hhcmVkLWFycmF5LWJ1ZmZlci1iaWdpbnQuanMg
Yi9KU1Rlc3RzL3N0cmVzcy9zaGFyZWQtYXJyYXktYnVmZmVyLWJpZ2ludC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44NmQ4YzVmZmMwMjg5MzEwNWFiMmNhMzhhNzBkYjkzMThlOTA4MzA5Ci0tLSAvZGV2L251bGwK
KysrIGIvSlNUZXN0cy9zdHJlc3Mvc2hhcmVkLWFycmF5LWJ1ZmZlci1iaWdpbnQuanMKQEAgLTAs
MCArMSw5MCBAQAorLy8gVGhlc2Ugc2hvdWxkIGFsbCBzdWNjZWVkLgordmFyIGJpNjRhID0gbmV3
IEJpZ0ludDY0QXJyYXkobmV3IFNoYXJlZEFycmF5QnVmZmVyKDEyOCkpOwordmFyIGJ1NjRhID0g
bmV3IEJpZ1VpbnQ2NEFycmF5KG5ldyBTaGFyZWRBcnJheUJ1ZmZlcigxMjgpKTsKKworZnVuY3Rp
b24gc2hvdWxkRmFpbChmLCBuYW1lKQoreworICAgIHRyeSB7CisgICAgICAgIGYoKTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIGlmIChlLm5hbWUgPT0gbmFtZS5uYW1lKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZiArICIgdGhyZXcgdGhlIHdyb25n
IGVycm9yOiAiICsgZSk7CisgICAgfQorICAgIHRocm93IG5ldyBFcnJvcihmICsgIiBzdWNjZWVk
ZWQhIik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFN1Y2NlZWQoZikKK3sKKyAgICBmKCk7Cit9CisK
K2ZvciAoYmFkIG9mIFtidTY0YV0pIHsKKyAgICBzaG91bGRGYWlsKCgpID0+IEF0b21pY3Mubm90
aWZ5KGJhZCwgMCwgMG4pLCBUeXBlRXJyb3IpOworICAgIHNob3VsZEZhaWwoKCkgPT4gQXRvbWlj
cy53YWl0KGJhZCwgMCwgMG4pLCBUeXBlRXJyb3IpOworfQorCitmb3IgKGlkeCBvZiBbLTEsIC0x
MDAwMDAwMDAwMDAwLCAxMDAwMCwgMTAwMDAwMDAwMDAwMDBdKSB7CisgICAgZm9yIChhIG9mIFti
aTY0YSwgYnU2NGFdKSB7CisgICAgICAgIHNob3VsZEZhaWwoKCkgPT4gQXRvbWljcy5hZGQoYSwg
aWR4LCAwbiksIFJhbmdlRXJyb3IpOworICAgICAgICBzaG91bGRGYWlsKCgpID0+IEF0b21pY3Mu
YW5kKGEsIGlkeCwgMG4pLCBSYW5nZUVycm9yKTsKKyAgICAgICAgc2hvdWxkRmFpbCgoKSA9PiBB
dG9taWNzLmNvbXBhcmVFeGNoYW5nZShhLCBpZHgsIDBuLCAwbiksIFJhbmdlRXJyb3IpOworICAg
ICAgICBzaG91bGRGYWlsKCgpID0+IEF0b21pY3MuZXhjaGFuZ2UoYSwgaWR4LCAwbiksIFJhbmdl
RXJyb3IpOworICAgICAgICBzaG91bGRGYWlsKCgpID0+IEF0b21pY3MubG9hZChhLCBpZHgpLCBS
YW5nZUVycm9yKTsKKyAgICAgICAgc2hvdWxkRmFpbCgoKSA9PiBBdG9taWNzLm9yKGEsIGlkeCwg
MG4pLCBSYW5nZUVycm9yKTsKKyAgICAgICAgc2hvdWxkRmFpbCgoKSA9PiBBdG9taWNzLnN0b3Jl
KGEsIGlkeCwgMG4pLCBSYW5nZUVycm9yKTsKKyAgICAgICAgc2hvdWxkRmFpbCgoKSA9PiBBdG9t
aWNzLnN1YihhLCBpZHgsIDBuKSwgUmFuZ2VFcnJvcik7CisgICAgICAgIHNob3VsZEZhaWwoKCkg
PT4gQXRvbWljcy54b3IoYSwgaWR4LCAwbiksIFJhbmdlRXJyb3IpOworICAgIH0KKyAgICBzaG91
bGRGYWlsKCgpID0+IEF0b21pY3Mubm90aWZ5KGJpNjRhLCBpZHgsIDBuKSwgUmFuZ2VFcnJvcik7
CisgICAgc2hvdWxkRmFpbCgoKSA9PiBBdG9taWNzLndhaXQoYmk2NGEsIGlkeCwgMG4pLCBSYW5n
ZUVycm9yKTsKK30KKworZm9yIChpZHggb2YgWyJoZWxsbyJdKSB7CisgICAgZm9yIChhIG9mIFti
aTY0YSwgYnU2NGFdKSB7CisgICAgICAgIHNob3VsZFN1Y2NlZWQoKCkgPT4gQXRvbWljcy5hZGQo
YSwgaWR4LCAwbikpOworICAgICAgICBzaG91bGRTdWNjZWVkKCgpID0+IEF0b21pY3MuYW5kKGEs
IGlkeCwgMG4pKTsKKyAgICAgICAgc2hvdWxkU3VjY2VlZCgoKSA9PiBBdG9taWNzLmNvbXBhcmVF
eGNoYW5nZShhLCBpZHgsIDBuLCAwbikpOworICAgICAgICBzaG91bGRTdWNjZWVkKCgpID0+IEF0
b21pY3MuZXhjaGFuZ2UoYSwgaWR4LCAwbikpOworICAgICAgICBzaG91bGRTdWNjZWVkKCgpID0+
IEF0b21pY3MubG9hZChhLCBpZHgpKTsKKyAgICAgICAgc2hvdWxkU3VjY2VlZCgoKSA9PiBBdG9t
aWNzLm9yKGEsIGlkeCwgMG4pKTsKKyAgICAgICAgc2hvdWxkU3VjY2VlZCgoKSA9PiBBdG9taWNz
LnN0b3JlKGEsIGlkeCwgMG4pKTsKKyAgICAgICAgc2hvdWxkU3VjY2VlZCgoKSA9PiBBdG9taWNz
LnN1YihhLCBpZHgsIDBuKSk7CisgICAgICAgIHNob3VsZFN1Y2NlZWQoKCkgPT4gQXRvbWljcy54
b3IoYSwgaWR4LCAwbikpOworICAgIH0KKyAgICBzaG91bGRTdWNjZWVkKCgpID0+IEF0b21pY3Mu
bm90aWZ5KGJpNjRhLCBpZHgsIDApKTsKKyAgICBzaG91bGRTdWNjZWVkKCgpID0+IEF0b21pY3Mu
d2FpdChiaTY0YSwgaWR4LCAwbiwgMSkpOworfQorCitmdW5jdGlvbiBydW5BdG9taWMoYXJyYXks
IGluZGV4LCBpbml0LCBuYW1lLCBhcmdzLCBleHBlY3RlZFJlc3VsdCwgZXhwZWN0ZWRPdXRjb21l
KQoreworICAgIGFycmF5W2luZGV4XSA9IGluaXQ7CisgICAgdmFyIHJlc3VsdCA9IEF0b21pY3Nb
bmFtZV0oYXJyYXksIGluZGV4LCAuLi5hcmdzKTsKKyAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVk
UmVzdWx0KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIEF0b21pY3MuIiArIG5h
bWUgKyAiKGFycmF5LCAiICsgaW5kZXggKyAiLCAiICsgYXJncy5qb2luKCIsICIpICsgIikgdG8g
cmV0dXJuICIgKyBleHBlY3RlZFJlc3VsdCArICIgYnV0IHJldHVybmVkICIgKyByZXN1bHQgKyAi
IGZvciAiICsgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShhcnJheSkpOworICAgIGlm
IChhcnJheVtpbmRleF0gIT09IGV4cGVjdGVkT3V0Y29tZSkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJFeHBlY3RlZCBBdG9taWNzLiIgKyBuYW1lICsgIihhcnJheSwgIiArIGluZGV4ICsgIiwg
IiArIGFyZ3Muam9pbigiLCAiKSArICIpIHRvIHJlc3VsdCBpbiBhcnJheVsiICsgaW5kZXggKyAi
XSA9ICIgKyBleHBlY3RlZE91dGNvbWUgKyAiIGJ1dCBnb3QgIiArIGFycmF5W2luZGV4XSArICIg
Zm9yICIgKyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGFycmF5KSk7Cit9CisKK2Zv
ciAoYSBvZiBbYmk2NGEsIGJ1NjRhXSkgeworICAgIHJ1bkF0b21pYyhhLCAwLCAxM24sICJhZGQi
LCBbNDJuXSwgMTNuLCA1NW4pOworICAgIHJ1bkF0b21pYyhhLCAwLCAxM24sICJhbmQiLCBbNDJu
XSwgMTNuLCA4bik7CisgICAgcnVuQXRvbWljKGEsIDAsIDEzbiwgImNvbXBhcmVFeGNoYW5nZSIs
IFsyNW4sIDQybl0sIDEzbiwgMTNuKTsKKyAgICBydW5BdG9taWMoYSwgMCwgMTNuLCAiY29tcGFy
ZUV4Y2hhbmdlIiwgWzEzbiwgNDJuXSwgMTNuLCA0Mm4pOworICAgIHJ1bkF0b21pYyhhLCAwLCAx
M24sICJleGNoYW5nZSIsIFs0Mm5dLCAxM24sIDQybik7CisgICAgcnVuQXRvbWljKGEsIDAsIDEz
biwgImxvYWQiLCBbXSwgMTNuLCAxM24pOworICAgIHJ1bkF0b21pYyhhLCAwLCAxM24sICJvciIs
IFs0Mm5dLCAxM24sIDQ3bik7CisgICAgcnVuQXRvbWljKGEsIDAsIDEzbiwgInN0b3JlIiwgWzQy
bl0sIDQybiwgNDJuKTsKKyAgICBydW5BdG9taWMoYSwgMCwgNDJuLCAic3ViIiwgWzEzbl0sIDQy
biwgMjluKTsKKyAgICBydW5BdG9taWMoYSwgMCwgMTNuLCAieG9yIiwgWzQybl0sIDEzbiwgMzlu
KTsKK30KKworYmk2NGFbMF0gPSAwbjsKK3ZhciByZXN1bHQgPSBBdG9taWNzLndhaXQoYmk2NGEs
IDAsIDFuKTsKK2lmIChyZXN1bHQgIT0gIm5vdC1lcXVhbCIpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0IGZyb20gQXRvbWljcy53YWl0OiAiICsgcmVzdWx0OworZm9yICh0aW1lb3V0IG9m
IFswLCAxLCAxMF0pIHsKKyAgICB2YXIgcmVzdWx0ID0gQXRvbWljcy53YWl0KGJpNjRhLCAwLCAw
biwgdGltZW91dCk7CisgICAgaWYgKHJlc3VsdCAhPSAidGltZWQtb3V0IikKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0IGZyb20gQXRvbWljcy53YWl0OiAiICsgcmVzdWx0OworfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sIGIvSlNUZXN0cy90ZXN0MjYy
L2NvbmZpZy55YW1sCmluZGV4IDA0Yzc3MTFlMDYzNjZmNWI0MmRjM2UyNWZjYjc3YjM3YWJiNGJm
MDIuLjY3NTA1OTVhY2JhZmYwMmY4NjRmMTQzMTYwODM3MWM4YjZmMDYyZTggMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbAorKysgYi9KU1Rlc3RzL3Rlc3QyNjIvY29uZmln
LnlhbWwKQEAgLTI4LDE5ICsyOCw2IEBAIHNraXA6CiAgICAgLSB0b3AtbGV2ZWwtYXdhaXQKICAg
ICAtIEludGwuTGlzdEZvcm1hdAogICBwYXRoczoKLSAgICAtIHRlc3QvYnVpbHQtaW5zL0F0b21p
Y3MvYWRkL2JpZ2ludAotICAgIC0gdGVzdC9idWlsdC1pbnMvQXRvbWljcy9hbmQvYmlnaW50Ci0g
ICAgLSB0ZXN0L2J1aWx0LWlucy9BdG9taWNzL2NvbXBhcmVFeGNoYW5nZS9iaWdpbnQKLSAgICAt
IHRlc3QvYnVpbHQtaW5zL0F0b21pY3MvZXhjaGFuZ2UvYmlnaW50Ci0gICAgLSB0ZXN0L2J1aWx0
LWlucy9BdG9taWNzL2lzTG9ja0ZyZWUvYmlnaW50Ci0gICAgLSB0ZXN0L2J1aWx0LWlucy9BdG9t
aWNzL2xvYWQvYmlnaW50Ci0gICAgLSB0ZXN0L2J1aWx0LWlucy9BdG9taWNzL25vdGlmeS9iaWdp
bnQKLSAgICAtIHRlc3QvYnVpbHQtaW5zL0F0b21pY3Mvb3IvYmlnaW50Ci0gICAgLSB0ZXN0L2J1
aWx0LWlucy9BdG9taWNzL3N0b3JlL2JpZ2ludAotICAgIC0gdGVzdC9idWlsdC1pbnMvQXRvbWlj
cy9zdWIvYmlnaW50Ci0gICAgLSB0ZXN0L2J1aWx0LWlucy9BdG9taWNzL3dhaXQvYmlnaW50Ci0g
ICAgLSB0ZXN0L2J1aWx0LWlucy9BdG9taWNzL3hvci9iaWdpbnQKLQogICAgICMgdGVzdDI2MiBi
b3QgaXMgdXNpbmcgQ2F0YWxpbmEncyBJQ1UgNjQsIHVwZ3JhZGluZyB0byBCaWcgU3VyIGlzIHJl
cXVpcmVkCiAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4
ODQ0CiAgICAgLSB0ZXN0L2ludGw0MDIvRGF0ZVRpbWVGb3JtYXQvcHJvdG90eXBlL2Zvcm1hdFJh
bmdlVG9QYXJ0cwo=
</data>
<flag name="review"
          id="437073"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>