<?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>209775</bug_id>
          
          <creation_ts>2020-03-30 14:43:21 -0700</creation_ts>
          <short_desc>[ECMA-402] Implement Intl.ListFormat</short_desc>
          <delta_ts>2020-10-24 23:20:56 -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>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>
          
          <blocked>213425</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shane Carr">sffc</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>andy</cc>
    
    <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>sffc</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1635744</commentid>
    <comment_count>0</comment_count>
    <who name="Shane Carr">sffc</who>
    <bug_when>2020-03-30 14:43:21 -0700</bug_when>
    <thetext>Intl.ListFormat is at Stage 3 in TC39; it is on track to reach Stage 4 in the first half of this year, and the other major browser engines (V8 and SpiderMonkey) have had it ready for some time.

As usage of Intl.ListFormat increases throughout the ecosystem, WebKit users will be left behind with legacy polyfills, leading to poorer performance relative to other browsers.  At Google, we are currently weighing our options for calling Intl.ListFormat in supported environments in order to give users better performance and smaller download sizes.

ICU4C exposes C and C++ APIs that can be used to implement Intl.ListFormat.  Implementing Intl.ListFormat is largely a matter of adding the glue between JavaScript and ICU4C, as WebKit already does for other Intl types.

Proposal repo: https://github.com/tc39/proposal-intl-list-format</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1635837</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-30 16:39:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/61079787&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667447</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-29 20:34:46 -0700</bug_when>
    <thetext>Grepped ICU code with listPatterns and maybe we should use ulistformatter.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667448</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-29 20:35:11 -0700</bug_when>
    <thetext>https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/ulistformatter_8h.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667450</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-29 20:38:16 -0700</bug_when>
    <thetext>Note,

1. ulistformatter.h has almost 1:1 APIs for the Intl.ListFormat, so maybe just piping.
2. formatToParts may be implemented via UFormattedValue, so we should require ICU 64~.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667474</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-29 22:24:32 -0700</bug_when>
    <thetext>https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/ulistformatter_8h.html#a7635c9427da25367b659a9369c2a237d

&gt; This API may be changed in the future versions and was introduced in ICU 67


Hmm, it seems that this APIs are not stable state right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667620</commentid>
    <comment_count>6</comment_count>
    <who name="Shane Carr">sffc</who>
    <bug_when>2020-06-30 10:52:56 -0700</bug_when>
    <thetext>ulistfmt_open is stable since ICU 55, but it only supports wide conjunction (&quot;and&quot;).  The C++ API had supported other types for some time, but it was not added to the C API until ICU 67.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667629</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-30 11:03:51 -0700</bug_when>
    <thetext>We are not using C++ APIs due to strong ABI compatibility requirement to use the system ICU (This is my understanding).

We can implement a part of Intl.ListFormat (type &quot;conjunction&quot; case), but it is a bit worrying about whether this breaks feature detections. For example, if the web uses,

if (Intl.ListFormat) {
    ...
}

and, if the code uses disjunction style, we will have a bad time.
I think making ulistfmt_openForType stable API in ICU side is blocking us for now.

@Ross what do you think of?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667694</commentid>
    <comment_count>8</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-06-30 12:57:37 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #7)
&gt; @Ross what do you think of?

Yeah, I agree with you. I suppose we could implement conjunction-only behind a flag but it would feel wrong to ship without disjunction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667722</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-30 13:51:05 -0700</bug_when>
    <thetext>Talked with Michael offline, and we agree that we will implement it once ICU ulistfmt_openForType gets stable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701213</commentid>
    <comment_count>10</comment_count>
      <attachid>412234</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-10-23 23:20:14 -0700</bug_when>
    <thetext>Created attachment 412234
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701220</commentid>
    <comment_count>11</comment_count>
      <attachid>412238</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-10-24 00:30:11 -0700</bug_when>
    <thetext>Created attachment 412238
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701221</commentid>
    <comment_count>12</comment_count>
      <attachid>412238</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-10-24 00:31:12 -0700</bug_when>
    <thetext>Comment on attachment 412238
Patch

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

&gt; Source/JavaScriptCore/runtime/IntlListFormat.h:45
&gt; +struct UListFormatterDeleter {
&gt; +    JS_EXPORT_PRIVATE void operator()(UListFormatter*);
&gt; +};

Do not use ICUDeleter since it requires ulistfmt_close, and we do not want to include &lt;unicode/ulistformatter.h&gt; in headers (since we enable draft APIs).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701222</commentid>
    <comment_count>13</comment_count>
      <attachid>412239</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-10-24 00:47:36 -0700</bug_when>
    <thetext>Created attachment 412239
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701258</commentid>
    <comment_count>14</comment_count>
      <attachid>412239</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-10-24 12:41:44 -0700</bug_when>
    <thetext>Comment on attachment 412239
Patch

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

r=me overall, but I wish we didn&apos;t have to scatter the HAVEs quite so much.

&gt; Source/JavaScriptCore/runtime/IntlListFormat.cpp:54
&gt; +void UListFormatterDeleter::operator()(UListFormatter* formatter)

I suppose you should add your explanation about this as a comment.

&gt; Source/JavaScriptCore/runtime/IntlListFormat.cpp:124
&gt; +#if HAVE(ICU_U_LIST_FORMATTER)

I asked about this for DisplayNames too (bug 209779 comment 24), but it feels sad to have to #if all of these functions if the ListFormat constructor won&apos;t even be exposed in this situation...

&gt; Source/JavaScriptCore/runtime/IntlListFormat.cpp:156
&gt; +    throwTypeError(globalObject, scope, &quot;Failed to initialize Intl.ListFormat since used feature is not supported in the linked ICU version&quot;_s);

nit: s/used/this/ probably reads better

&gt; JSTests/stress/intl-listformat.js:22
&gt; +if (typeof Intl.ListFormat !== &apos;undefined&apos;) {

Seems like you could just return at the very top, in lieu of a //@ line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701286</commentid>
    <comment_count>15</comment_count>
      <attachid>412239</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-10-24 23:13:24 -0700</bug_when>
    <thetext>Comment on attachment 412239
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/runtime/IntlListFormat.cpp:54
&gt;&gt; +void UListFormatterDeleter::operator()(UListFormatter* formatter)
&gt; 
&gt; I suppose you should add your explanation about this as a comment.

Added

&gt;&gt; Source/JavaScriptCore/runtime/IntlListFormat.cpp:124
&gt;&gt; +#if HAVE(ICU_U_LIST_FORMATTER)
&gt; 
&gt; I asked about this for DisplayNames too (bug 209779 comment 24), but it feels sad to have to #if all of these functions if the ListFormat constructor won&apos;t even be exposed in this situation...

I think this way minifies the if-def changes. For example, if we do not expose ListFormat at all, we need to have this ifdef in,

VM.cpp
IntlListFormatConstructor.h / IntlListFormatConstructor.cpp
IntlListFormatPrototype.h / IntlListFormatPrototype.cpp
IntlListFormat.h / IntlListFormat.cpp
IntlObject.cpp

So, we scatters this ifdef in many files. On the other hand, in this way, we need ifdef only in IntlListFormat.cpp and IntlObject.cpp.

&gt;&gt; Source/JavaScriptCore/runtime/IntlListFormat.cpp:156
&gt;&gt; +    throwTypeError(globalObject, scope, &quot;Failed to initialize Intl.ListFormat since used feature is not supported in the linked ICU version&quot;_s);
&gt; 
&gt; nit: s/used/this/ probably reads better

Fixed.

&gt;&gt; JSTests/stress/intl-listformat.js:22
&gt;&gt; +if (typeof Intl.ListFormat !== &apos;undefined&apos;) {
&gt; 
&gt; Seems like you could just return at the very top, in lieu of a //@ line.

Unfortunately, JS cannot `return` in top-level...
I&apos;ll extract this to `function test`, and call it when Intl.ListFormat is defined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701287</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-10-24 23:20:56 -0700</bug_when>
    <thetext>Committed r268956: &lt;https://trac.webkit.org/changeset/268956&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412234</attachid>
            <date>2020-10-23 23:20:14 -0700</date>
            <delta_ts>2020-10-24 00:30:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209775-20201023232012.patch</filename>
            <type>text/plain</type>
            <size>51314</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4OTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
Njg3MWIyNTA3NjIxMWM2NmQ1ZGQ2MzhlYjk4ZmViODI4M2VkZDE3Li5mMWUzMjhjZWZiMDdlNjVh
ZTM3ZDg5Njc4MDE1YTYzZDQ3MTcxOWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MCBAQAorMjAyMC0xMC0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtFQ01BLTQwMl0gSW1wbGVtZW50IEludGwuTGlzdEZvcm1hdCAoYWZ0ZXIg
SUNVIHVsaXN0Zm10X29wZW5Gb3JUeXBlIGdldHMgc3RhYmxlKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Nzc1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6Cisg
ICAgICAgICogcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50
bERpc3BsYXlOYW1lczo6aW5pdGlhbGl6ZURpc3BsYXlOYW1lcyk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsTGlzdEZvcm1hdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbnRsTGlzdEZvcm1h
dDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0OjpJbnRsTGlzdEZvcm1hdCk6CisgICAg
ICAgIChKU0M6OkludGxMaXN0Rm9ybWF0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkludGxMaXN0Rm9ybWF0Ojppbml0aWFsaXplTGlzdEZvcm1hdCk6CisgICAgICAgIChKU0M6OnN0
cmluZ0xpc3RGcm9tSXRlcmFibGUpOgorICAgICAgICAoSlNDOjpMaXN0Rm9ybWF0SW5wdXQ6Okxp
c3RGb3JtYXRJbnB1dCk6CisgICAgICAgIChKU0M6Okxpc3RGb3JtYXRJbnB1dDo6c2l6ZSBjb25z
dCk6CisgICAgICAgIChKU0M6Okxpc3RGb3JtYXRJbnB1dDo6c3RyaW5nUG9pbnRlcnMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpMaXN0Rm9ybWF0SW5wdXQ6OnN0cmluZ0xlbmd0aHMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpJbnRsTGlzdEZvcm1hdDo6Zm9ybWF0IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6SW50bExpc3RGb3JtYXQ6OmZvcm1hdFRvUGFydHMgY29uc3QpOgorICAgICAgICAoSlNDOjpJ
bnRsTGlzdEZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW50
bExpc3RGb3JtYXQ6OnN0eWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6
OnR5cGVTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bExpc3RGb3JtYXQuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3I6OkludGxMaXN0Rm9ybWF0Q29u
c3RydWN0b3IpOgorICAgICAgICAoSlNDOjpJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6Cisg
ICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6SW50bExpc3RGb3JtYXRQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6
OkludGxMaXN0Rm9ybWF0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpJbnRsTGlzdEZvcm1hdFByb3RvdHlwZTo6SW50bExpc3RGb3JtYXRQcm90b3R5cGUpOgorICAg
ICAgICAoSlNDOjpJbnRsTGlzdEZvcm1hdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUv
SW50bExpc3RGb3JtYXRQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9JbnRs
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlTGlzdEZvcm1hdENvbnN0cnVjdG9yKToK
KyAgICAgICAgKEpTQzo6SW50bE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvSW50bE9iamVjdC5oOgorICAgICAgICAoSlNDOjppbnRsTGlzdEZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpsaXN0Rm9ybWF0U3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisKIDIwMjAtMTAtMjMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgVXNpbmcgV0FTTSBmdW5jdGlvbiBzaXplIGFzIHRoZSBj
YXAgZm9yIGNob29zaW5nIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhdXNlcyBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1YjRjNTg0
OGM1OGNhNjZiYzY1NmVkYWE4ZmYzYzljZmY3ZWNmMDFmLi5lM2Q4YWIwYTQ3MDk2ZDBkMTEzZTc4
M2FkZDE1NDI4ZjU3ODRjMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC03Miw2ICs3Miw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9PQkpFQ1RfTFVUX1NPVVJDRVMKICAg
ICBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0lu
dGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL0ludGxEaXNwbGF5TmFt
ZXNQcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNw
cAorICAgIHJ1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9J
bnRsTG9jYWxlUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0
cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA3MTE0MjE0ZGFkNGVmMzE3MzBiZmVhODRmMTZj
OWNiYmMxZDljYzAwLi45ZWE0NDg2NzViOGM1MjBhZDFhY2QzNGEwNTU4OGJkNzM5OTE1NTJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC04MTksNiArODE5LDkgQEAgcnVudGltZS9J
bnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMu
Y3BwCiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUvSW50
bERpc3BsYXlOYW1lc1Byb3RvdHlwZS5jcHAKK3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCity
dW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCitydW50aW1lL0ludGxMaXN0Rm9y
bWF0UHJvdG90eXBlLmNwcAogcnVudGltZS9JbnRsTG9jYWxlLmNwcAogcnVudGltZS9JbnRsTG9j
YWxlQ29uc3RydWN0b3IuY3BwCiBydW50aW1lL0ludGxMb2NhbGVQcm90b3R5cGUuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRl
eCBmMzQwZWJkZjg0YmQ2YzA5ODZhMTNiODc3YTIwODIyMDMxMDBlZTgxLi5kOTViZDliZjY0ZGZl
MzBhNDRjNDIyYjIyMzkyNGMxYWJhMzlmY2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTQxLDYgKzQxLDcgQEAKICAgICBt
YWNybyhGdW5jdGlvbikgXAogICAgIG1hY3JvKEluZmluaXR5KSBcCiAgICAgbWFjcm8oSW50bCkg
XAorICAgIG1hY3JvKExpc3RGb3JtYXQpIFwKICAgICBtYWNybyhMb2FkZXIpIFwKICAgICBtYWNy
byhMb2NhbGUpIFwKICAgICBtYWNybyhNYXApIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAKaW5kZXggZTY4NjdjM2ZjMWVmYzA3YWU2
YjNkYWJmMDZiNGM4OWE2OTg0MzE2MC4uN2UzYTk5ODJiNmUzNTJiZWJhNGQzYmU5Mjg2Njc0MTIx
Y2FjNDNlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERp
c3BsYXlOYW1lcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERp
c3BsYXlOYW1lcy5jcHAKQEAgLTgzLDEyICs4MywxMiBAQCB2b2lkIEludGxEaXNwbGF5TmFtZXM6
OmluaXRpYWxpemVEaXNwbGF5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YQogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKLSAgICBhdXRvJiBhdmFpbGFibGVMb2Nh
bGVzID0gaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBhdXRvJiBhdmFp
bGFibGVMb2NhbGVzID0gaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKTsKICAgICBh
dXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1hdGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwg
bG9jYWxlRGF0YSk7CiAKICAgICBtX2xvY2FsZSA9IHJlc29sdmVkLmxvY2FsZTsKICAgICBpZiAo
bV9sb2NhbGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBEaXNwbGF5TmFtZSBkdWUgdG8gaW52YWxp
ZCBsb2NhbGUiX3MpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgRGlzcGxheU5hbWVzIGR1ZSB0byBpbnZhbGlkIGxvY2Fs
ZSJfcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Zjg1ODgwOWQ0NmNh
NzZiZWU3NWM1N2NiMzlkNDM2OWI1YWRkYTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCkBAIC0wLDAgKzEsMzU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGxMaXN0Rm9y
bWF0LmgiCisKKyNpbmNsdWRlICJJbnRsT2JqZWN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkl0ZXJh
dG9yT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJPYmpl
Y3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgPHVuaWNvZGUvdWZvcm1hdHRlZHZhbHVlLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW50bExpc3RGb3JtYXQ6OnNfaW5m
byA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSW50bExpc3RGb3JtYXQpIH07CisKK0ludGxMaXN0Rm9ybWF0KiBJbnRsTGlz
dEZvcm1hdDo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgYXV0
byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW50bExpc3RGb3JtYXQ+KHZt
LmhlYXApKSBJbnRsTGlzdEZvcm1hdCh2bSwgc3RydWN0dXJlKTsKKyAgICBvYmplY3QtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUqIEludGxM
aXN0Rm9ybWF0OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK0ludGxMaXN0Rm9ybWF0OjpJbnRsTGlzdEZvcm1h
dChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
KQoreworfQorCit2b2lkIEludGxMaXN0Rm9ybWF0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7Cit9CisKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtSW50bC5MaXN0
Rm9ybWF0Cit2b2lkIEludGxMaXN0Rm9ybWF0Ojppbml0aWFsaXplTGlzdEZvcm1hdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1Zh
bHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMg
PSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgbG9jYWxlcyk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgIEpTT2JqZWN0KiBvcHRpb25z
OworICAgIGlmIChvcHRpb25zVmFsdWUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgb3B0aW9ucyA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHZtLCBnbG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmpl
Y3RTdHJ1Y3R1cmUoKSk7CisgICAgZWxzZSB7CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zVmFs
dWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKKyAgICB9CisKKyAgICAvLyBEb2VzIG5vdCBzZXQgZWl0aGVyIG9mICJj
YSIgb3IgIm51Ii4KKyAgICAvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaW50bC1kaXNwbGF5
bmFtZXMvI3NlYy1pbnRsLWRpc3BsYXluYW1lcy1jb25zdHJ1Y3RvcgorICAgIFJlc29sdmVMb2Nh
bGVPcHRpb25zIGxvY2FsZU9wdGlvbnM7CisKKyAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNo
ZXIgPSBpbnRsT3B0aW9uPExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0u
cHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1hdGNo
ZXI6Okxvb2t1cCB9LCB7ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9IH0s
ICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwi
Il9zLCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworCisgICAgYXV0byBsb2NhbGVEYXRhID0gW10oY29uc3QgU3RyaW5nJiwg
UmVsZXZhbnRFeHRlbnNpb25LZXkpIC0+IFZlY3RvcjxTdHJpbmc+IHsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9OworCisgICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9y
bWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxl
KGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxl
TWF0Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKKworICAgIG1fbG9jYWxl
ID0gcmVzb2x2ZWQubG9jYWxlOworICAgIGlmIChtX2xvY2FsZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFs
aXplIExpc3RGb3JtYXQgZHVlIHRvIGludmFsaWQgbG9jYWxlIl9zKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fdHlwZSA9IGludGxPcHRpb248VHlwZT4oZ2xvYmFsT2JqZWN0LCBv
cHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT50eXBlLCB7IHsgImNvbmp1bmN0aW9uIl9zLCBUeXBl
OjpDb25qdW5jdGlvbiB9LCB7ICJkaXNqdW5jdGlvbiJfcywgVHlwZTo6RGlzanVuY3Rpb24gfSwg
eyAidW5pdCJfcywgVHlwZTo6VW5pdCB9IH0sICJ0eXBlIG11c3QgYmUgZWl0aGVyIFwiY29uanVu
Y3Rpb25cIiwgXCJkaXNqdW5jdGlvblwiLCBvciBcInVuaXRcIiJfcywgVHlwZTo6Q29uanVuY3Rp
b24pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBtX3N0
eWxlID0gaW50bE9wdGlvbjxTdHlsZT4oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT5zdHlsZSwgeyB7ICJsb25nIl9zLCBTdHlsZTo6TG9uZyB9LCB7ICJzaG9ydCJfcywg
U3R5bGU6OlNob3J0IH0sIHsgIm5hcnJvdyJfcywgU3R5bGU6Ok5hcnJvdyB9IH0sICJzdHlsZSBt
dXN0IGJlIGVpdGhlciBcImxvbmdcIiwgXCJzaG9ydFwiLCBvciBcIm5hcnJvd1wiIl9zLCBTdHls
ZTo6TG9uZyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworI2lm
IEhBVkUoSUNVX1VfTElTVF9GT1JNQVRURVIpCisgICAgYXV0byB0b1VMaXN0Rm9ybWF0dGVyVHlw
ZSA9IFtdKFR5cGUgdHlwZSkgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBUeXBlOjpDb25qdW5jdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBVTElTVEZNVF9UWVBFX0FO
RDsKKyAgICAgICAgY2FzZSBUeXBlOjpEaXNqdW5jdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBV
TElTVEZNVF9UWVBFX09SOworICAgICAgICBjYXNlIFR5cGU6OlVuaXQ6CisgICAgICAgICAgICBy
ZXR1cm4gVUxJU1RGTVRfVFlQRV9VTklUUzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVUxJ
U1RGTVRfVFlQRV9BTkQ7CisgICAgfTsKKworICAgIGF1dG8gdG9VTGlzdEZvcm1hdHRlcldpZHRo
ID0gW10oU3R5bGUgc3R5bGUpIHsKKyAgICAgICAgc3dpdGNoIChzdHlsZSkgeworICAgICAgICBj
YXNlIFN0eWxlOjpMb25nOgorICAgICAgICAgICAgcmV0dXJuIFVMSVNURk1UX1dJRFRIX1dJREU7
CisgICAgICAgIGNhc2UgU3R5bGU6OlNob3J0OgorICAgICAgICAgICAgcmV0dXJuIFVMSVNURk1U
X1dJRFRIX1NIT1JUOworICAgICAgICBjYXNlIFN0eWxlOjpOYXJyb3c6CisgICAgICAgICAgICBy
ZXR1cm4gVUxJU1RGTVRfV0lEVEhfTkFSUk9XOworICAgICAgICB9CisgICAgICAgIHJldHVybiBV
TElTVEZNVF9XSURUSF9XSURFOworICAgIH07CisKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKKyAgICBtX2xpc3RGb3JtYXQgPSBzdGQ6OnVuaXF1ZV9wdHI8VUxpc3RGb3Jt
YXR0ZXIsIFVMaXN0Rm9ybWF0dGVyRGVsZXRlcj4odWxpc3RmbXRfb3BlbkZvclR5cGUobV9sb2Nh
bGUudXRmOCgpLmRhdGEoKSwgdG9VTGlzdEZvcm1hdHRlclR5cGUobV90eXBlKSwgdG9VTGlzdEZv
cm1hdHRlcldpZHRoKG1fc3R5bGUpLCAmc3RhdHVzKSk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0
dXMpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWls
ZWQgdG8gaW5pdGlhbGl6ZSBMaXN0Rm9ybWF0Il9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbHNlCisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkZhaWxlZCB0
byBpbml0aWFsaXplIEludGwuTGlzdEZvcm1hdCBzaW5jZSB1c2VkIGZlYXR1cmUgaXMgbm90IHN1
cHBvcnRlZCBpbiB0aGUgbGlua2VkIElDVSB2ZXJzaW9uIl9zKTsKKyAgICByZXR1cm47CisjZW5k
aWYKK30KKworI2lmIEhBVkUoSUNVX1VfTElTVF9GT1JNQVRURVIpCitzdGF0aWMgVmVjdG9yPFN0
cmluZywgND4gc3RyaW5nTGlzdEZyb21JdGVyYWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIGl0ZXJhYmxlKQoreworICAgIFZlY3RvcjxTdHJpbmcsIDQ+IHJlc3VsdDsK
KworICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworCisgICAgZm9yRWFjaEluSXRlcmFibGUoZ2xvYmFsT2JqZWN0LCBpdGVyYWJsZSwgWyZdKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkgeworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGlmICgh
dmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIkl0ZXJhYmxlIHBhc3NlZCB0byBMaXN0Rm9ybWF0IGluY2x1ZGVzIG5vbiBT
dHJpbmciX3MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFN0cmlu
ZyBpdGVtID0gdmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVt
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitjbGFzcyBMaXN0Rm9ybWF0SW5w
dXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExpc3RGb3JtYXRJbnB1dCk7CitwdWJsaWM6
CisgICAgTGlzdEZvcm1hdElucHV0KFZlY3RvcjxTdHJpbmcsIDQ+JiYgc3RyaW5ncykKKyAgICAg
ICAgOiBtX3N0cmluZ3MoV1RGTW92ZShzdHJpbmdzKSkKKyAgICB7CisgICAgICAgIG1fc3RyaW5n
UG9pbnRlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3N0cmluZ3Muc2l6ZSgpKTsKKyAgICAg
ICAgbV9zdHJpbmdMZW5ndGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdHJpbmdzLnNpemUo
KSk7CisgICAgICAgIGZvciAoYXV0byYgc3RyaW5nIDogbV9zdHJpbmdzKSB7CisgICAgICAgICAg
ICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byB2ZWN0b3IgPSBt
YWtlVW5pcXVlPFZlY3RvcjxVQ2hhcj4+KCk7CisgICAgICAgICAgICAgICAgdmVjdG9yLT5yZXNp
emUoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hh
cmFjdGVycyh2ZWN0b3ItPmRhdGEoKSwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5n
dGgoKSk7CisgICAgICAgICAgICAgICAgbV9yZXRhaW5lZFVwY29udmVydGVkU3RyaW5ncy5hcHBl
bmQoV1RGTW92ZSh2ZWN0b3IpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ1BvaW50ZXJzLmFw
cGVuZChtX3JldGFpbmVkVXBjb252ZXJ0ZWRTdHJpbmdzLmxhc3QoKS0+ZGF0YSgpKTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1fc3RyaW5nUG9pbnRlcnMuYXBwZW5kKHN0
cmluZy5jaGFyYWN0ZXJzMTYoKSk7CisgICAgICAgICAgICBtX3N0cmluZ0xlbmd0aHMuYXBwZW5k
KHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQzMl90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZ1BvaW50ZXJzLnNpemUoKTsgfQorICAgIGNvbnN0IFVD
aGFyKiBjb25zdCogc3RyaW5nUG9pbnRlcnMoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ1BvaW50
ZXJzLmRhdGEoKTsgfQorICAgIGNvbnN0IGludDMyX3QqIHN0cmluZ0xlbmd0aHMoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZ0xlbmd0aHMuZGF0YSgpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9y
PFN0cmluZywgND4gbV9zdHJpbmdzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PFVDaGFyPj4sIDQ+IG1fcmV0YWluZWRVcGNvbnZlcnRlZFN0cmluZ3M7CisgICAgVmVjdG9yPGNv
bnN0IFVDaGFyKiwgND4gbV9zdHJpbmdQb2ludGVyczsKKyAgICBWZWN0b3I8aW50MzJfdCwgND4g
bV9zdHJpbmdMZW5ndGhzOworfTsKKyNlbmRpZgorCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9z
YWwtaW50bC1saXN0LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUuZm9ybWF0
CitKU1ZhbHVlIEludGxMaXN0Rm9ybWF0Ojpmb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBsaXN0KSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyNpZiBI
QVZFKElDVV9VX0xJU1RfRk9STUFUVEVSKQorICAgIGF1dG8gc3RyaW5nTGlzdCA9IHN0cmluZ0xp
c3RGcm9tSXRlcmFibGUoZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgTGlzdEZvcm1hdElucHV0IGlucHV0KFdURk1vdmUoc3Ry
aW5nTGlzdCkpOworCisgICAgVmVjdG9yPFVDaGFyLCAzMj4gcmVzdWx0OworICAgIGF1dG8gc3Rh
dHVzID0gY2FsbEJ1ZmZlclByb2R1Y2luZ0Z1bmN0aW9uKHVsaXN0Zm10X2Zvcm1hdCwgbV9saXN0
Rm9ybWF0LmdldCgpLCBpbnB1dC5zdHJpbmdQb2ludGVycygpLCBpbnB1dC5zdHJpbmdMZW5ndGhz
KCksIGlucHV0LnNpemUoKSwgcmVzdWx0KTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisg
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVk
IHRvIGZvcm1hdCBsaXN0IG9mIHN0cmluZ3MiX3MpOworCisgICAgcmV0dXJuIGpzU3RyaW5nKHZt
LCBTdHJpbmcocmVzdWx0KSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShsaXN0KTsKKyAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBmb3Jt
YXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKKyNlbmRpZgorfQorCisvLyBodHRwczovL3RjMzkuZXMv
cHJvcG9zYWwtaW50bC1saXN0LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUu
Zm9ybWF0VG9QYXJ0cworSlNWYWx1ZSBJbnRsTGlzdEZvcm1hdDo6Zm9ybWF0VG9QYXJ0cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxpc3QpIGNvbnN0Cit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworI2lmIEhBVkUoSUNVX1VfTElTVF9GT1JNQVRURVIpCisgICAgYXV0byBz
dHJpbmdMaXN0ID0gc3RyaW5nTGlzdEZyb21JdGVyYWJsZShnbG9iYWxPYmplY3QsIGxpc3QpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBMaXN0Rm9ybWF0SW5w
dXQgaW5wdXQoV1RGTW92ZShzdHJpbmdMaXN0KSk7CisKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9
IFVfWkVST19FUlJPUjsKKworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjp1bmlxdWVfcHRyPFVGb3Jt
YXR0ZWRMaXN0LCBJQ1VEZWxldGVyPHVsaXN0Zm10X2Nsb3NlUmVzdWx0Pj4odWxpc3RmbXRfb3Bl
blJlc3VsdCgmc3RhdHVzKSk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBmb3Jt
YXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKKworICAgIHVsaXN0Zm10X2Zvcm1hdFN0cmluZ3NUb1Jl
c3VsdChtX2xpc3RGb3JtYXQuZ2V0KCksIGlucHV0LnN0cmluZ1BvaW50ZXJzKCksIGlucHV0LnN0
cmluZ0xlbmd0aHMoKSwgaW5wdXQuc2l6ZSgpLCByZXN1bHQuZ2V0KCksICZzdGF0dXMpOworICAg
IGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gZm9ybWF0IGxpc3Qgb2Ygc3RyaW5ncyJfcyk7
CisKKyAgICAvLyBVRm9ybWF0dGVkVmFsdWUgaXMgb3duZWQgYnkgVUZvcm1hdHRlZExpc3QuIFdl
IGRvIG5vdCBuZWVkIHRvIGNsb3NlIGl0LgorICAgIGF1dG8gZm9ybWF0dGVkVmFsdWUgPSB1bGlz
dGZtdF9yZXN1bHRBc1ZhbHVlKHJlc3VsdC5nZXQoKSwgJnN0YXR1cyk7CisgICAgaWYgKFVfRkFJ
TFVSRShzdGF0dXMpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgImZhaWxlZCB0byBmb3JtYXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKKworICAgIEpT
QXJyYXkqIHBhcnRzID0gSlNBcnJheTo6dHJ5Q3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1
b3VzKSwgMCk7CisgICAgaWYgKCFwYXJ0cykKKyAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKworICAgIGludDMyX3QgZm9ybWF0dGVkU3Ry
aW5nTGVuZ3RoID0gMDsKKyAgICBjb25zdCBVQ2hhciogZm9ybWF0dGVkU3RyaW5nUG9pbnRlciA9
IHVmbXR2YWxfZ2V0U3RyaW5nKGZvcm1hdHRlZFZhbHVlLCAmZm9ybWF0dGVkU3RyaW5nTGVuZ3Ro
LCAmc3RhdHVzKTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGZvcm1hdCBsaXN0
IG9mIHN0cmluZ3MiX3MpOworICAgIFN0cmluZyByZXN1bHRTdHJpbmcoZm9ybWF0dGVkU3RyaW5n
UG9pbnRlciwgZm9ybWF0dGVkU3RyaW5nTGVuZ3RoKTsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBz
dGQ6OnVuaXF1ZV9wdHI8VUNvbnN0cmFpbmVkRmllbGRQb3NpdGlvbiwgSUNVRGVsZXRlcjx1Y2Zw
b3NfY2xvc2U+Pih1Y2Zwb3Nfb3Blbigmc3RhdHVzKSk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0
dXMpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
ImZhaWxlZCB0byBmb3JtYXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKKworICAgIHVjZnBvc19jb25z
dHJhaW5GaWVsZChpdGVyYXRvci5nZXQoKSwgVUZJRUxEX0NBVEVHT1JZX0xJU1QsIFVMSVNURk1U
X0VMRU1FTlRfRklFTEQsICZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQg
dG8gZm9ybWF0IGxpc3Qgb2Ygc3RyaW5ncyJfcyk7CisKKyAgICBhdXRvIGxpdGVyYWxTdHJpbmcg
PSBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJsaXRlcmFsIl9zKTsKKyAgICBhdXRvIGVsZW1lbnRT
dHJpbmcgPSBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJlbGVtZW50Il9zKTsKKworICAgIGF1dG8g
Y3JlYXRlUGFydCA9IFsmXSAoSlNTdHJpbmcqIHR5cGUsIEpTU3RyaW5nKiB2YWx1ZSkgeworICAg
ICAgICBKU09iamVjdCogcGFydCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCk7
CisgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dHlwZSwgdHlw
ZSk7CisgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUs
IHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHBhcnQ7CisgICAgfTsKKworICAgIGludDMyX3QgcmVz
dWx0TGVuZ3RoID0gcmVzdWx0U3RyaW5nLmxlbmd0aCgpOworICAgIGludDMyX3QgcHJldmlvdXNF
bmRJbmRleCA9IDA7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgYm9vbCBuZXh0ID0gdWZt
dHZhbF9uZXh0UG9zaXRpb24oZm9ybWF0dGVkVmFsdWUsIGl0ZXJhdG9yLmdldCgpLCAmc3RhdHVz
KTsKKyAgICAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gZm9ybWF0IGxpc3Qg
b2Ygc3RyaW5ncyJfcyk7CisgICAgICAgIGlmICghbmV4dCkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGludDMyX3QgYmVnaW5JbmRleCA9IDA7CisgICAgICAgIGludDMyX3QgZW5kSW5k
ZXggPSAwOworICAgICAgICB1Y2Zwb3NfZ2V0SW5kZXhlcyhpdGVyYXRvci5nZXQoKSwgJmJlZ2lu
SW5kZXgsICZlbmRJbmRleCwgJnN0YXR1cyk7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVz
KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiZmFpbGVkIHRvIGZvcm1hdCBsaXN0IG9mIHN0cmluZ3MiX3MpOworCisgICAgICAgIGlmIChw
cmV2aW91c0VuZEluZGV4IDwgYmVnaW5JbmRleCkgeworICAgICAgICAgICAgYXV0byB2YWx1ZSA9
IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmcuc3Vic3RyaW5nKHByZXZpb3VzRW5kSW5kZXgsIGJl
Z2luSW5kZXggLSBwcmV2aW91c0VuZEluZGV4KSk7CisgICAgICAgICAgICBKU09iamVjdCogcGFy
dCA9IGNyZWF0ZVBhcnQobGl0ZXJhbFN0cmluZywgdmFsdWUpOworICAgICAgICAgICAgcGFydHMt
PnB1c2goZ2xvYmFsT2JqZWN0LCBwYXJ0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisgICAgICAgIH0KKyAgICAgICAgcHJldmlvdXNFbmRJbmRleCA9IGVu
ZEluZGV4OworCisgICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5n
LnN1YnN0cmluZyhiZWdpbkluZGV4LCBlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKKyAgICAgICAg
SlNPYmplY3QqIHBhcnQgPSBjcmVhdGVQYXJ0KGVsZW1lbnRTdHJpbmcsIHZhbHVlKTsKKyAgICAg
ICAgcGFydHMtPnB1c2goZ2xvYmFsT2JqZWN0LCBwYXJ0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKyAgICB9CisKKyAgICBpZiAocHJldmlvdXNFbmRJbmRleCA8
IHJlc3VsdExlbmd0aCkgeworICAgICAgICBhdXRvIHZhbHVlID0ganNTdHJpbmcodm0sIHJlc3Vs
dFN0cmluZy5zdWJzdHJpbmcocHJldmlvdXNFbmRJbmRleCwgcmVzdWx0TGVuZ3RoIC0gcHJldmlv
dXNFbmRJbmRleCkpOworICAgICAgICBKU09iamVjdCogcGFydCA9IGNyZWF0ZVBhcnQobGl0ZXJh
bFN0cmluZywgdmFsdWUpOworICAgICAgICBwYXJ0cy0+cHVzaChnbG9iYWxPYmplY3QsIHBhcnQp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworICAg
IHJldHVybiBwYXJ0czsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGxpc3QpOworICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGZvcm1hdCBs
aXN0IG9mIHN0cmluZ3MiX3MpOworI2VuZGlmCit9CisKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9w
b3NhbC1pbnRsLWRpc3BsYXluYW1lcy8jc2VjLUludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUucmVz
b2x2ZWRPcHRpb25zCitKU09iamVjdCogSW50bExpc3RGb3JtYXQ6OnJlc29sdmVkT3B0aW9ucyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sb2NhbGUsIGpzU3RyaW5nKHZtLCBtX2xvY2FsZSkpOworICAgIG9wdGlvbnMtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dHlwZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCB0eXBlU3RyaW5nKG1fdHlwZSkpKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnN0eWxlLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHN0eWxlU3RyaW5nKG1f
c3R5bGUpKSk7CisgICAgcmV0dXJuIG9wdGlvbnM7Cit9CisKK0FTQ0lJTGl0ZXJhbCBJbnRsTGlz
dEZvcm1hdDo6c3R5bGVTdHJpbmcoU3R5bGUgc3R5bGUpCit7CisgICAgc3dpdGNoIChzdHlsZSkg
eworICAgIGNhc2UgU3R5bGU6Okxvbmc6CisgICAgICAgIHJldHVybiAibG9uZyJfczsKKyAgICBj
YXNlIFN0eWxlOjpTaG9ydDoKKyAgICAgICAgcmV0dXJuICJzaG9ydCJfczsKKyAgICBjYXNlIFN0
eWxlOjpOYXJyb3c6CisgICAgICAgIHJldHVybiAibmFycm93Il9zOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7Cit9CisK
K0FTQ0lJTGl0ZXJhbCBJbnRsTGlzdEZvcm1hdDo6dHlwZVN0cmluZyhUeXBlIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlOjpDb25qdW5jdGlvbjoKKyAgICAgICAg
cmV0dXJuICJjb25qdW5jdGlvbiJfczsKKyAgICBjYXNlIFR5cGU6OkRpc2p1bmN0aW9uOgorICAg
ICAgICByZXR1cm4gImRpc2p1bmN0aW9uIl9zOworICAgIGNhc2UgVHlwZTo6VW5pdDoKKyAgICAg
ICAgcmV0dXJuICJ1bml0Il9zOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjEwY2Q2ZGY4YzcwNjQ4OTgzMzVjMTU3NTc3ODhkNzZjZTk1NWE2MQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmgK
QEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9pY3UvSUNVSGVscGVycy5oPgorCisj
aWYgIWRlZmluZWQoSEFWRV9JQ1VfVV9MSVNUX0ZPUk1BVFRFUikKKyNpZiBVX0lDVV9WRVJTSU9O
X01BSk9SX05VTSA+PSA2NworI2RlZmluZSBIQVZFX0lDVV9VX0xJU1RfRk9STUFUVEVSIDEKKyNl
bmRpZgorI2VuZGlmCisKKy8vIFdoaWxlIFVMaXN0Rm9ybWF0dGVyIEFQSXMgYXJlIGRyYWZ0IGlu
IElDVSA2NywgdGhleSBhcmUgc3RhYmxlIGluIElDVSA2OCB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9u
IHNpZ25hdHVyZXMuCisvLyBTbyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlc2Ugc2lnbmF0dXJlcyBv
ZiBkcmFmdCBBUElzIGFyZSBzdGFibGUuCisjaWYgSEFWRShJQ1VfVV9MSVNUX0ZPUk1BVFRFUikK
KyNpZmRlZiBVX0hJREVfRFJBRlRfQVBJCisjdW5kZWYgVV9ISURFX0RSQUZUX0FQSQorI2VuZGlm
CisjZW5kaWYKKyNpbmNsdWRlIDx1bmljb2RlL3VsaXN0Zm9ybWF0dGVyLmg+CisjaWYgSEFWRShJ
Q1VfVV9MSVNUX0ZPUk1BVFRFUikKKyNkZWZpbmUgVV9ISURFX0RSQUZUX0FQSSAxCisjZW5kaWYK
KworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgUmVsZXZhbnRFeHRlbnNpb25LZXkgOiB1
aW50OF90OworCitjbGFzcyBJbnRsTGlzdEZvcm1hdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8SW50bExpc3RGb3JtYXQqPihjZWxsKS0+SW50bExpc3RGb3JtYXQ6On5JbnRsTGlzdEZv
cm1hdCgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFj
ZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLmludGxMaXN0Rm9ybWF0U3BhY2U8bW9kZT4oKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgSW50bExpc3RGb3JtYXQqIGNyZWF0ZShWTSYsIFN0cnVjdHVy
ZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICB2b2lkIGluaXRp
YWxpemVMaXN0Rm9ybWF0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBsb2NhbGVzVmFsdWUsIEpT
VmFsdWUgb3B0aW9uc1ZhbHVlKTsKKworICAgIEpTVmFsdWUgZm9ybWF0KEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSkgY29uc3Q7CisgICAgSlNWYWx1ZSBmb3JtYXRUb1BhcnRzKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSkgY29uc3Q7CisgICAgSlNPYmplY3QqIHJlc29sdmVkT3B0aW9ucyhKU0ds
b2JhbE9iamVjdCopIGNvbnN0OworCitwcml2YXRlOgorICAgIEludGxMaXN0Rm9ybWF0KFZNJiwg
U3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworCisgICAgZW51bSBj
bGFzcyBUeXBlIDogdWludDhfdCB7IENvbmp1bmN0aW9uLCBEaXNqdW5jdGlvbiwgVW5pdCB9Owor
ICAgIGVudW0gY2xhc3MgU3R5bGUgOiB1aW50OF90IHsgU2hvcnQsIExvbmcsIE5hcnJvdyB9Owor
CisgICAgc3RhdGljIEFTQ0lJTGl0ZXJhbCB0eXBlU3RyaW5nKFR5cGUpOworICAgIHN0YXRpYyBB
U0NJSUxpdGVyYWwgc3R5bGVTdHJpbmcoU3R5bGUpOworCisgICAgdXNpbmcgVUxpc3RGb3JtYXR0
ZXJEZWxldGVyID0gSUNVRGVsZXRlcjx1bGlzdGZtdF9jbG9zZT47CisgICAgc3RkOjp1bmlxdWVf
cHRyPFVMaXN0Rm9ybWF0dGVyLCBVTGlzdEZvcm1hdHRlckRlbGV0ZXI+IG1fbGlzdEZvcm1hdDsK
KyAgICBTdHJpbmcgbV9sb2NhbGU7CisgICAgVHlwZSBtX3R5cGUgeyBUeXBlOjpDb25qdW5jdGlv
biB9OworICAgIFN0eWxlIG1fc3R5bGUgeyBTdHlsZTo6TG9uZyB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzMGI2ZDBkMzM1YmY1
M2E4M2Q2NWVmMjY2N2EyMjFiZTVlZmU3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMCww
ICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJJbnRsTGlzdEZvcm1hdC5o
IgorI2luY2x1ZGUgIkludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IpOworCitzdGF0aWMgSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yU3VwcG9ydGVkTG9j
YWxlc09mKTsKKworfQorCisjaW5jbHVkZSAiSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5sdXQu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sICZsaXN0Rm9y
bWF0Q29uc3RydWN0b3JUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbnRsTGlz
dEZvcm1hdENvbnN0cnVjdG9yKSB9OworCisvKiBTb3VyY2UgZm9yIEludGxMaXN0Rm9ybWF0Q29u
c3RydWN0b3IubHV0LmgKK0BiZWdpbiBsaXN0Rm9ybWF0Q29uc3RydWN0b3JUYWJsZQorICBzdXBw
b3J0ZWRMb2NhbGVzT2YgICAgICAgICAgICAgSW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvclN1cHBv
cnRlZExvY2FsZXNPZiAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCitAZW5kCisqLwor
CitJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yKiBJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yOjpj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSW50bExpc3RGb3JtYXRQcm90b3R5
cGUqIGxpc3RGb3JtYXRQcm90b3R5cGUpCit7CisgICAgYXV0byogY29uc3RydWN0b3IgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yPih2bS5oZWFw
KSkgSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBjb25zdHJ1
Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIGxpc3RGb3JtYXRQcm90b3R5cGUpOworICAgIHJldHVy
biBjb25zdHJ1Y3RvcjsKK30KKworU3RydWN0dXJlKiBJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhJbnRlcm5hbEZ1bmN0aW9uVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihjYWxsSW50bExpc3RGb3JtYXQpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oY29uc3RydWN0SW50bExpc3RGb3JtYXQpOworCitJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9y
OjpJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIGNhbGxJbnRsTGlzdEZvcm1hdCwgY29uc3RydWN0
SW50bExpc3RGb3JtYXQpCit7Cit9CisKK3ZvaWQgSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZSogbGlzdEZvcm1h
dFByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgMCwgIkxpc3RGb3Jt
YXQiX3MsIFByb3BlcnR5QWRkaXRpb25Nb2RlOjpXaXRob3V0U3RydWN0dXJlVHJhbnNpdGlvbik7
CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgbGlzdEZvcm1hdFByb3RvdHlwZSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpOworICAgIGxpc3RGb3JtYXRQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgdGhpcywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOworfQorCisvLyBodHRwczov
L3RjMzkuZXMvZWNtYTQwMi8jc2VjLUludGwuTGlzdEZvcm1hdAorSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGNvbnN0cnVjdEludGxMaXN0Rm9ybWF0LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBKU09iamVjdCogbmV3VGFyZ2V0ID0gYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSk7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBuZXdUYXJnZXQgPT0gY2FsbEZyYW1lLT5qc0Nh
bGxlZSgpCisgICAgICAgID8gZ2xvYmFsT2JqZWN0LT5saXN0Rm9ybWF0U3RydWN0dXJlKCkKKyAg
ICAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShnbG9iYWxP
YmplY3QsIG5ld1RhcmdldCwgZ2V0RnVuY3Rpb25SZWFsbSh2bSwgbmV3VGFyZ2V0KS0+bGlzdEZv
cm1hdFN0cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
CisgICAgSW50bExpc3RGb3JtYXQqIGxpc3RGb3JtYXQgPSBJbnRsTGlzdEZvcm1hdDo6Y3JlYXRl
KHZtLCBzdHJ1Y3R1cmUpOworICAgIEFTU0VSVChsaXN0Rm9ybWF0KTsKKworICAgIHNjb3BlLnJl
bGVhc2UoKTsKKyAgICBsaXN0Rm9ybWF0LT5pbml0aWFsaXplTGlzdEZvcm1hdChnbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUobGlzdEZvcm1hdCk7Cit9CisKKy8vIGh0dHBzOi8vdGMz
OS5lcy9lY21hNDAyLyNzZWMtSW50bC5MaXN0Rm9ybWF0CitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oY2FsbEludGxMaXN0Rm9ybWF0LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiTGlzdEZvcm1hdCIpKTsKK30KKworSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2YsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICAvLyBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCisgICAgLy8gaHR0cHM6Ly90
YzM5LmVzL3Byb3Bvc2FsLWludGwtbGlzdC1mb3JtYXQvI3NlYy1JbnRsLkxpc3RGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mCisKKyAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTGlz
dEZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCisgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBhdmFpbGFibGVMb2NhbGVzID0gaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CisK
KyAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0
KGxvY2FsZXMpLgorICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICAv
LyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRM
b2NhbGVzLCBvcHRpb25zKS4KKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKGdsb2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywg
cmVxdWVzdGVkTG9jYWxlcywgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSkpKTsKK30KKworCit9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NDI5ZDFhMDlkODc3
OGU1ZTYwZjQ5YzVkZjg1MDQ1ODgwNjY5MDczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5oCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkludGVybmFs
RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJJbnRsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZTsKKworY2xhc3MgSW50bExpc3RGb3JtYXRD
b25zdHJ1Y3RvciBmaW5hbCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlID0gSW50ZXJuYWxGdW5jdGlvbjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQ
cm9wZXJ0eVRhYmxlOworCisgICAgc3RhdGljIEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IqIGNy
ZWF0ZShWTSYsIFN0cnVjdHVyZSosIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlKik7CisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBJbnRsTGlzdEZvcm1h
dENvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlKik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VC
U1BBQ0VfU0hBUkFCTEUoSW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvciwgSW50ZXJuYWxGdW5jdGlv
bik7CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNh
ZmExNDU4ZWU5NjNiNmViYWJmMTE5NGI3ZTBiY2JjNmEwMzM3NDUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5j
cHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW50bExpc3RGb3JtYXRQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkludGxMaXN0
Rm9ybWF0LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oSW50bExpc3RGb3JtYXRQcm90b3R5cGVG
dW5jRm9ybWF0KTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKEludGxMaXN0Rm9y
bWF0UHJvdG90eXBlRnVuY0Zvcm1hdFRvUGFydHMpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oSW50bExpc3RGb3JtYXRQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKTsKKwor
fQorCisjaW5jbHVkZSAiSW50bExpc3RGb3JtYXRQcm90b3R5cGUubHV0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW50bExpc3RGb3JtYXRQcm90b3R5cGU6OnNfaW5m
byA9IHsgIkludGwuTGlzdEZvcm1hdCIsICZCYXNlOjpzX2luZm8sICZsaXN0Rm9ybWF0UHJvdG90
eXBlVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSW50bExpc3RGb3JtYXRQcm90
b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3IgSW50bExpc3RGb3JtYXRQcm90b3R5cGUubHV0LmgK
K0BiZWdpbiBsaXN0Rm9ybWF0UHJvdG90eXBlVGFibGUKKyAgZm9ybWF0ICAgICAgICAgICBJbnRs
TGlzdEZvcm1hdFByb3RvdHlwZUZ1bmNGb3JtYXQgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMQorICBmb3JtYXRUb1BhcnRzICAgIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlRnVuY0Zvcm1h
dFRvUGFydHMgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIHJlc29sdmVkT3B0aW9ucyAgSW50
bExpc3RGb3JtYXRQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zICAgIERvbnRFbnVtfEZ1bmN0
aW9uIDAKK0BlbmQKKyovCisKK0ludGxMaXN0Rm9ybWF0UHJvdG90eXBlKiBJbnRsTGlzdEZvcm1h
dFByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAg
YXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW50bExpc3RGb3JtYXRQ
cm90b3R5cGU+KHZtLmhlYXApKSBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZSh2bSwgc3RydWN0dXJl
KTsKKyAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2JqZWN0Owor
fQorCitTdHJ1Y3R1cmUqIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
K3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisK
K0ludGxMaXN0Rm9ybWF0UHJvdG90eXBlOjpJbnRsTGlzdEZvcm1hdFByb3RvdHlwZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQor
Cit2b2lkIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Cit9
CisKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWxpc3QtZm9ybWF0LyNzZWMtSW50
bC5MaXN0Rm9ybWF0LnByb3RvdHlwZS5mb3JtYXQKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJ
bnRsTGlzdEZvcm1hdFByb3RvdHlwZUZ1bmNGb3JtYXQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8qIGxpc3RGb3JtYXQgPSBqc0R5bmFtaWNDYXN0PEludGxMaXN0Rm9ybWF0Kj4odm0s
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghbGlzdEZvcm1hdCkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkludGwuTGlzdEZv
cm1hdC5wcm90b3R5cGUuZm9ybWF0IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVj
dCBpbml0aWFsaXplZCBhcyBhIExpc3RGb3JtYXQiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUobGlzdEZvcm1hdC0+Zm9ybWF0KGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKK30KKworLy8gaHR0cHM6Ly90YzM5LmVzL3By
b3Bvc2FsLWludGwtbGlzdC1mb3JtYXQvI3NlYy1JbnRsLkxpc3RGb3JtYXQucHJvdG90eXBlLmZv
cm1hdFRvUGFydHMKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsTGlzdEZvcm1hdFByb3Rv
dHlwZUZ1bmNGb3JtYXRUb1BhcnRzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBs
aXN0Rm9ybWF0ID0ganNEeW5hbWljQ2FzdDxJbnRsTGlzdEZvcm1hdCo+KHZtLCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWxpc3RGb3JtYXQpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJJbnRsLkxpc3RGb3JtYXQucHJvdG90
eXBlLmZvcm1hdFRvUGFydHMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGlu
aXRpYWxpemVkIGFzIGEgTGlzdEZvcm1hdCJfcyk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShsaXN0Rm9ybWF0LT5mb3JtYXRUb1BhcnRzKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKK30KKworLy8gaHR0cHM6Ly90YzM5LmVz
L3Byb3Bvc2FsLWludGwtbGlzdC1mb3JtYXQvI3NlYy1JbnRsLkxpc3RGb3JtYXQucHJvdG90eXBl
LnJlc29sdmVkT3B0aW9ucworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKEludGxMaXN0Rm9ybWF0
UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
YXV0byogbGlzdEZvcm1hdCA9IGpzRHluYW1pY0Nhc3Q8SW50bExpc3RGb3JtYXQqPih2bSwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFsaXN0Rm9ybWF0KQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiSW50bC5MaXN0Rm9ybWF0
LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4g
b2JqZWN0IGluaXRpYWxpemVkIGFzIGEgTGlzdEZvcm1hdCJfcyk7CisKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShsaXN0Rm9ybWF0LT5yZXNvbHZlZE9wdGlv
bnMoZ2xvYmFsT2JqZWN0KSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE5OTc0YTkwYzk4YWMwMDc4ZjRiOWFjODFiMjMxMmJhOTY5NTBjZTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZv
cm1hdFByb3RvdHlwZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJ
bnRsTGlzdEZvcm1hdFByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFC
TEUoSW50bExpc3RGb3JtYXRQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBs
YWluT2JqZWN0U3BhY2U7CisgICAgfQorCisgICAgc3RhdGljIEludGxMaXN0Rm9ybWF0UHJvdG90
eXBlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFS
RV9JTkZPOworCitwcml2YXRlOgorICAgIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
T2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3Bw
CmluZGV4IDkxYmM4MzhkZTE0YTdlODllMjA0N2NiNWI2Nzc5MzZhNjA0ZGEwMGEuLmU4Y2E4ZTM5
MjMwMGY4M2I2NmU5NWRkNjIxYzA2ODc1OWYxM2NhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC0zOSw2ICszOSw5IEBACiAjaW5jbHVkZSAi
SW50bERpc3BsYXlOYW1lcy5oIgogI2luY2x1ZGUgIkludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkludGxEaXNwbGF5TmFtZXNQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJJ
bnRsTGlzdEZvcm1hdC5oIgorI2luY2x1ZGUgIkludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlICJJbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkludGxMb2Nh
bGUuaCIKICNpbmNsdWRlICJJbnRsTG9jYWxlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJbnRs
TG9jYWxlUHJvdG90eXBlLmgiCkBAIC05Myw2ICs5NiwxMyBAQCBzdGF0aWMgSlNWYWx1ZSBjcmVh
dGVEaXNwbGF5TmFtZXNDb25zdHJ1Y3RvcihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAg
cmV0dXJuIEludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBJbnRsRGlzcGxh
eU5hbWVzQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPmZ1bmN0aW9uUHJvdG90eXBlKCkpLCBqc0Nhc3Q8SW50bERpc3BsYXlOYW1lc1By
b3RvdHlwZSo+KGdsb2JhbE9iamVjdC0+ZGlzcGxheU5hbWVzU3RydWN0dXJlKCktPnN0b3JlZFBy
b3RvdHlwZU9iamVjdCgpKSk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZUxpc3RGb3JtYXRD
b25zdHJ1Y3RvcihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgSW50bE9iamVjdCog
aW50bE9iamVjdCA9IGpzQ2FzdDxJbnRsT2JqZWN0Kj4ob2JqZWN0KTsKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gaW50bE9iamVjdC0+Z2xvYmFsT2JqZWN0KHZtKTsKKyAgICBy
ZXR1cm4gSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBJbnRsTGlzdEZvcm1h
dENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5mdW5jdGlvblByb3RvdHlwZSgpKSwganNDYXN0PEludGxMaXN0Rm9ybWF0UHJvdG90eXBl
Kj4oZ2xvYmFsT2JqZWN0LT5saXN0Rm9ybWF0U3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZU9i
amVjdCgpKSk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlIGNyZWF0ZUxvY2FsZUNvbnN0cnVjdG9yKFZN
JiB2bSwgSlNPYmplY3QqIG9iamVjdCkKIHsKICAgICBJbnRsT2JqZWN0KiBpbnRsT2JqZWN0ID0g
anNDYXN0PEludGxPYmplY3QqPihvYmplY3QpOwpAQCAtMTgzLDYgKzE5MywxMSBAQCB2b2lkIElu
dGxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKQogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oY3JlYXRlRGlzcGxheU5hbWVzQ29uc3RydWN0b3IpOwogI2VuZGlm
CisjaWYgSEFWRShJQ1VfVV9MSVNUX0ZPUk1BVFRFUikKKyAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+TGlzdEZvcm1hdCwgY3JlYXRlTGlzdEZvcm1h
dENvbnN0cnVjdG9yKHZtLCB0aGlzKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3JlYXRlTGlzdEZv
cm1hdENvbnN0cnVjdG9yKTsKKyNlbmRpZgogfQogCiBTdHJ1Y3R1cmUqIEludGxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5o
CmluZGV4IGE5NTgyMDk2MzZjZDk1Njk2Y2Q4OWEwYTEyYWNiMjljY2U0YTQxMDYuLmU4MjdmZmQw
YjdhMzJiY2RiNTQ4OGY2Yjk4OGJiZGVjMTI5NGE3ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsT2JqZWN0LmgKQEAgLTg5LDYgKzg5LDcgQEAgaW5saW5lIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgaW50bERpc3BsYXlOYW1lc0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVy
biBpbnRsQXYKIGlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxOdW1iZXJGb3JtYXRB
dmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQogaW5s
aW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFBsdXJhbFJ1bGVzQXZhaWxhYmxlTG9jYWxl
cygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KIGlubGluZSBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIGludGxSZWxhdGl2ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyBy
ZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQoraW5saW5lIGNvbnN0IEhhc2hTZXQ8U3Ry
aW5nPiYgaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWls
YWJsZUxvY2FsZXMoKTsgfQogCiBUcmlTdGF0ZSBpbnRsQm9vbGVhbk9wdGlvbihKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lKTsKIFN0cmluZyBpbnRsU3RyaW5n
T3B0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0eU5hbWUsIHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gdmFsdWVzLCBjb25zdCBjaGFyKiBub3RG
b3VuZCwgY29uc3QgY2hhciogZmFsbGJhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDNjNWRkZWEwOTMzODAyMjI0MGIxMDEx
MjY0ZDM4OWQzYjMzMTU5ZTQuLmFiMjhjMTM0NTFjNzYwODBlNjRjZWYwMGMyZTFkNjhmODNkOTYy
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKQEAgLTc4LDYgKzc4LDggQEAKICNpbmNsdWRlICJJbnRsRGF0ZVRpbWVGb3JtYXRQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJJbnRsRGlzcGxheU5hbWVzLmgiCiAjaW5jbHVkZSAiSW50bERp
c3BsYXlOYW1lc1Byb3RvdHlwZS5oIgorI2luY2x1ZGUgIkludGxMaXN0Rm9ybWF0LmgiCisjaW5j
bHVkZSAiSW50bExpc3RGb3JtYXRQcm90b3R5cGUuaCIKICNpbmNsdWRlICJJbnRsTG9jYWxlLmgi
CiAjaW5jbHVkZSAiSW50bExvY2FsZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkludGxOdW1iZXJG
b3JtYXQuaCIKQEAgLTEwMjIsNiArMTAyNCwxMiBAQCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3Rv
ciogbG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFsTmFtZQog
ICAgICAgICAgICAgSW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZSogZGlzcGxheU5hbWVzUHJvdG90
eXBlID0gSW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZTo6Y3JlYXRlKGluaXQudm0sIEludGxEaXNw
bGF5TmFtZXNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKICAgICAgICAgICAgIGluaXQuc2V0
KEludGxEaXNwbGF5TmFtZXM6OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3Qs
IGRpc3BsYXlOYW1lc1Byb3RvdHlwZSkpOwogICAgICAgICB9KTsKKyAgICBtX2xpc3RGb3JtYXRT
dHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0
dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpOworICAgICAgICAgICAgSW50bExp
c3RGb3JtYXRQcm90b3R5cGUqIGxpc3RGb3JtYXRQcm90b3R5cGUgPSBJbnRsTGlzdEZvcm1hdFBy
b3RvdHlwZTo6Y3JlYXRlKGluaXQudm0sIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKSk7CisgICAgICAgICAgICBpbml0LnNldChJbnRsTGlzdEZvcm1hdDo6Y3JlYXRlU3Ry
dWN0dXJlKGluaXQudm0sIGdsb2JhbE9iamVjdCwgbGlzdEZvcm1hdFByb3RvdHlwZSkpOworICAg
ICAgICB9KTsKICAgICBtX2xvY2FsZVN0cnVjdHVyZS5pbml0TGF0ZXIoCiAgICAgICAgIFtdIChj
b25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CiAgICAgICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25l
cik7CkBAIC0xOTEwLDYgKzE5MTgsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdGhpc09iamVjdC0+
bV9kZWZhdWx0Q29sbGF0b3IudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9jb2xs
YXRvclN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX2Rpc3BsYXlO
YW1lc1N0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2xpc3RGb3Jt
YXRTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9sb2NhbGVTdHJ1
Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9wbHVyYWxSdWxlc1N0cnVj
dHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX3JlbGF0aXZlVGltZUZvcm1h
dFN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDQxYzhiYTk0NDY4ZmQyMjk1MjY3OWFjOGExZmJj
OTZhMmI0NGM3MGUuLjIzYzY2Mzc0M2ZjYzRkYTgyYzZiODM2NTY3YmNkMDZmNDkxOTczMmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAt
MzEwLDYgKzMxMCw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QgewogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgSW50bENv
bGxhdG9yPiBtX2RlZmF1bHRDb2xsYXRvcjsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZT4gbV9jb2xsYXRvclN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9kaXNwbGF5TmFtZXNTdHJ1Y3R1cmU7CisgICAgTGF6
eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fbGlzdEZvcm1hdFN0cnVjdHVy
ZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9sb2NhbGVT
dHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1f
cGx1cmFsUnVsZXNTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fcmVsYXRpdmVUaW1lRm9ybWF0U3RydWN0dXJlOwpAQCAtODIzLDYgKzgyNCw3
IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QgewogICAgIFN0cnVjdHVyZSogY29sbGF0b3JTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2NvbGxh
dG9yU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogZGF0ZVRpbWVGb3JtYXRT
dHJ1Y3R1cmUoKSB7IHJldHVybiBtX2RhdGVUaW1lRm9ybWF0U3RydWN0dXJlLmdldCh0aGlzKTsg
fQogICAgIFN0cnVjdHVyZSogZGlzcGxheU5hbWVzU3RydWN0dXJlKCkgeyByZXR1cm4gbV9kaXNw
bGF5TmFtZXNTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CisgICAgU3RydWN0dXJlKiBsaXN0Rm9ybWF0
U3RydWN0dXJlKCkgeyByZXR1cm4gbV9saXN0Rm9ybWF0U3RydWN0dXJlLmdldCh0aGlzKTsgfQog
ICAgIFN0cnVjdHVyZSogbnVtYmVyRm9ybWF0U3RydWN0dXJlKCkgeyByZXR1cm4gbV9udW1iZXJG
b3JtYXRTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBsb2NhbGVTdHJ1Y3R1
cmUoKSB7IHJldHVybiBtX2xvY2FsZVN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1
cmUqIHBsdXJhbFJ1bGVzU3RydWN0dXJlKCkgeyByZXR1cm4gbV9wbHVyYWxSdWxlc1N0cnVjdHVy
ZS5nZXQodGhpcyk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA5YjY0
NGY4ODkyZmI5YTAyZDQxNDFhOTk2MTAzOTU3YzE2YzZmMzFiLi5jOTUxYTM4YmNiODQyMjY2YWRh
ZGNkMDE3YjY4Y2JkMmNjYzBkNzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAiSW50bENvbGxhdG9yLmgiCiAjaW5jbHVkZSAi
SW50bERhdGVUaW1lRm9ybWF0LmgiCiAjaW5jbHVkZSAiSW50bERpc3BsYXlOYW1lcy5oIgorI2lu
Y2x1ZGUgIkludGxMaXN0Rm9ybWF0LmgiCiAjaW5jbHVkZSAiSW50bExvY2FsZS5oIgogI2luY2x1
ZGUgIkludGxOdW1iZXJGb3JtYXQuaCIKICNpbmNsdWRlICJJbnRsUGx1cmFsUnVsZXMuaCIKQEAg
LTMxNCw2ICszMTUsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUs
IFdURjo6UnVuTG9vcCogcnVuTG9vcCwgYm9vbCogc3VjY2VzcykKICAgICAsIGludGxDb2xsYXRv
ckhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxJbnRsQ29sbGF0b3I+KCkpCiAg
ICAgLCBpbnRsRGF0ZVRpbWVGb3JtYXRIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVh
dGU8SW50bERhdGVUaW1lRm9ybWF0PigpKQogICAgICwgaW50bERpc3BsYXlOYW1lc0hlYXBDZWxs
VHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxJbnRsRGlzcGxheU5hbWVzPigpKQorICAgICwg
aW50bExpc3RGb3JtYXRIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SW50bExp
c3RGb3JtYXQ+KCkpCiAgICAgLCBpbnRsTG9jYWxlSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlw
ZTo6Y3JlYXRlPEludGxMb2NhbGU+KCkpCiAgICAgLCBpbnRsTnVtYmVyRm9ybWF0SGVhcENlbGxU
eXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEludGxOdW1iZXJGb3JtYXQ+KCkpCiAgICAgLCBp
bnRsUGx1cmFsUnVsZXNIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SW50bFBs
dXJhbFJ1bGVzPigpKQpAQCAtMTU0NCw2ICsxNTQ2LDcgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKGNhbGxiYWNrQVBJV3JhcHBlckdsb2JhbE9iamVjdFNwYWNlLCBj
YWwKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsQ29sbGF0b3JT
cGFjZSwgaW50bENvbGxhdG9ySGVhcENlbGxUeXBlLmdldCgpLCBJbnRsQ29sbGF0b3IpCiBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bERhdGVUaW1lRm9ybWF0U3Bh
Y2UsIGludGxEYXRlVGltZUZvcm1hdEhlYXBDZWxsVHlwZS5nZXQoKSwgSW50bERhdGVUaW1lRm9y
bWF0KQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxEaXNwbGF5
TmFtZXNTcGFjZSwgaW50bERpc3BsYXlOYW1lc0hlYXBDZWxsVHlwZS5nZXQoKSwgSW50bERpc3Bs
YXlOYW1lcykKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsTGlz
dEZvcm1hdFNwYWNlLCBpbnRsTGlzdEZvcm1hdEhlYXBDZWxsVHlwZS5nZXQoKSwgSW50bExpc3RG
b3JtYXQpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50bExvY2Fs
ZVNwYWNlLCBpbnRsTG9jYWxlSGVhcENlbGxUeXBlLmdldCgpLCBJbnRsTG9jYWxlKQogRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxOdW1iZXJGb3JtYXRTcGFjZSwg
aW50bE51bWJlckZvcm1hdEhlYXBDZWxsVHlwZS5nZXQoKSwgSW50bE51bWJlckZvcm1hdCkKIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsUGx1cmFsUnVsZXNTcGFj
ZSwgaW50bFBsdXJhbFJ1bGVzSGVhcENlbGxUeXBlLmdldCgpLCBJbnRsUGx1cmFsUnVsZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA0MTI5MjQ3Y2QyNDU2ZDY3NTY5NzA3Yzky
YjZjN2ZjMjM5YzJmYTA5Li42ZTc5OWQ0NTJmNTc5NDE5MjFjZmM2NGEyNzRmMGJlNTM4ZjFiY2Rl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTEyOCw2ICsxMjgsNyBAQCBjbGFz
cyBJbnRsQ2FjaGU7CiBjbGFzcyBJbnRsQ29sbGF0b3I7CiBjbGFzcyBJbnRsRGF0ZVRpbWVGb3Jt
YXQ7CiBjbGFzcyBJbnRsRGlzcGxheU5hbWVzOworY2xhc3MgSW50bExpc3RGb3JtYXQ7CiBjbGFz
cyBJbnRsTG9jYWxlOwogY2xhc3MgSW50bE51bWJlckZvcm1hdDsKIGNsYXNzIEludGxQbHVyYWxS
dWxlczsKQEAgLTQwOCw2ICs0MDksNyBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxWTT4sIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogICAgIHN0ZDo6
dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IGludGxDb2xsYXRvckhlYXBDZWxsVHlwZTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiBpbnRsRGF0ZVRpbWVGb3JtYXRIZWFw
Q2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gaW50bERpc3Bs
YXlOYW1lc0hlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBl
PiBpbnRsTGlzdEZvcm1hdEhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVh
cENlbGxUeXBlPiBpbnRsTG9jYWxlSGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
c29IZWFwQ2VsbFR5cGU+IGludGxOdW1iZXJGb3JtYXRIZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gaW50bFBsdXJhbFJ1bGVzSGVhcENlbGxUeXBlOwpA
QCAtNTcwLDYgKzU3Miw3IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiAgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsQ29sbGF0b3JTcGFjZSkKICAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxEYXRlVGltZUZvcm1hdFNwYWNlKQogICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bERpc3BsYXlOYW1lc1NwYWNlKQor
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bExpc3RGb3JtYXRTcGFj
ZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxMb2NhbGVTcGFj
ZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxOdW1iZXJGb3Jt
YXRTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxQbHVy
YWxSdWxlc1NwYWNlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412238</attachid>
            <date>2020-10-24 00:30:11 -0700</date>
            <delta_ts>2020-10-24 01:39:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209775-20201024003010.patch</filename>
            <type>text/plain</type>
            <size>75650</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4OTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
Njg3MWIyNTA3NjIxMWM2NmQ1ZGQ2MzhlYjk4ZmViODI4M2VkZDE3Li43MTZiYWMxZGY5YTk5YzVk
YTA1YmY0YzUwMjMwMDQ5ZTEyMGRiOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMC0xMC0yNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtFQ01BLTQwMl0gSW1wbGVtZW50IEludGwuTGlzdEZvcm1hdCAoYWZ0ZXIg
SUNVIHVsaXN0Zm10X29wZW5Gb3JUeXBlIGdldHMgc3RhYmxlKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Nzc1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIEludGwu
TGlzdEZvcm1hdC4gSW50bC5MaXN0Rm9ybWF0IHJlcXVpcmVzIHVsaXN0Zm10X29wZW5Gb3JUeXBl
LgorICAgICAgICBCdXQgaXQgaXMgYXZhaWxhYmxlIGFmdGVyIElDVSA2NywgYW5kIGl0IGlzIGRy
YWZ0ICh1bnN0YWJsZSkgQVBJIGluIElDVSA2Ny4KKyAgICAgICAgQnV0IG5vdywgdGhpcyBmdW5j
dGlvbiBpcyBzdGFibGUgaW4gSUNVIDY4IHdpdGhvdXQgc2lnbmF0dXJlIGNoYW5nZSBhbmQgbm8g
bWFqb3IKKyAgICAgICAgY2hhbmdlIGhhcHBlbmVkIHRvIHRoaXMgQVBJLiBUaHVzLCB3ZSBjYW4g
YXNzdW1lIHRoYXQgdGhpcyBBUEkgc2lnbmF0dXJlIHdvbid0IGJlIGNoYW5nZWQuCisgICAgICAg
IFdlIHNwZWNpYWxseSB1bmRlZiBVX0hJREVfRFJBRlRfQVBJIGZvciB1bmljb2RlL3VsaXN0Zm9y
bWF0dGVyLmggdG8gdXNlIHRoaXMgZHJhZnQgKGJ1dCBzdGFibGUpIEFQSXMuCisKKyAgICAgICAg
V2hpbGUgbWFjT1MgLyBpT1Mgc2hpcHBpbmcgSUNVIChBcHBsZUlDVSkgaXMgSUNVIDY2LCBBcHBs
ZUlDVSBoYXMgdWxpc3RmbXRfb3BlbkZvclR5cGUgYW5kIHJlbGF0ZWQgQVBJcworICAgICAgICBl
dmVuIGluIElDVSA2Ni4gV2UgdXNlIHRoZXNlIEFQSXMgaW4gQXBwbGVJQ1UgNjYgdG8gaW1wbGVt
ZW50IEludGwuTGlzdEZvcm1hdC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMu
aDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwOgorICAgICAgICAoSlND
OjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5hbWVzKToKKyAgICAgICAgKiBy
dW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlVMaXN0Rm9y
bWF0dGVyRGVsZXRlcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbnRsTGlzdEZvcm1hdDo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6OkludGxMaXN0Rm9ybWF0KToKKyAgICAg
ICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SW50bExpc3RGb3JtYXQ6OmluaXRpYWxpemVMaXN0Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nTGlzdEZyb21JdGVyYWJsZSk6CisgICAgICAgIChKU0M6Okxpc3RGb3JtYXRJbnB1dDo6TGlz
dEZvcm1hdElucHV0KToKKyAgICAgICAgKEpTQzo6TGlzdEZvcm1hdElucHV0OjpzaXplIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6TGlzdEZvcm1hdElucHV0OjpzdHJpbmdQb2ludGVycyBjb25zdCk6
CisgICAgICAgIChKU0M6Okxpc3RGb3JtYXRJbnB1dDo6c3RyaW5nTGVuZ3RocyBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpmb3JtYXQgY29uc3QpOgorICAgICAgICAoSlND
OjpJbnRsTGlzdEZvcm1hdDo6Zm9ybWF0VG9QYXJ0cyBjb25zdCk6CisgICAgICAgIChKU0M6Oklu
dGxMaXN0Rm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRs
TGlzdEZvcm1hdDo6c3R5bGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpJbnRsTGlzdEZvcm1hdDo6
dHlwZVN0cmluZyk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdC5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6SW50bExpc3RGb3JtYXRDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAg
ICAgICAgKiBydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuaDogQWRkZWQuCisgICAg
ICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpJbnRsTGlzdEZvcm1hdFByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
SW50bExpc3RGb3JtYXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkludGxMaXN0Rm9ybWF0UHJvdG90eXBlOjpJbnRsTGlzdEZvcm1hdFByb3RvdHlwZSk6CisgICAg
ICAgIChKU0M6OkludGxMaXN0Rm9ybWF0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVMaXN0Rm9ybWF0Q29uc3RydWN0b3IpOgor
ICAgICAgICAoSlNDOjpJbnRsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVu
dGltZS9JbnRsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0QXZhaWxhYmxl
TG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Omxpc3RGb3JtYXRTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKwogMjAyMC0xMC0yMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2luZyBXQVNNIGZ1bmN0aW9uIHNpemUgYXMgdGhlIGNh
cCBmb3IgY2hvb3NpbmcgYSByZWdpc3RlciBhbGxvY2F0b3IgY2F1c2VzIHBlcmZvcm1hbmNlIHJl
Z3Jlc3Npb25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDViNGM1ODQ4
YzU4Y2E2NmJjNjU2ZWRhYThmZjNjOWNmZjdlY2YwMWYuLmUzZDhhYjBhNDcwOTZkMGQxMTNlNzgz
YWRkMTU0MjhmNTc4NGMyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAg
LTcyLDYgKzcyLDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAg
IHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvSW50
bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvSW50bERpc3BsYXlOYW1l
c1Byb3RvdHlwZS5jcHAKKyAgICBydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3Bw
CisgICAgcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0lu
dGxMb2NhbGVQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmls
ZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxl
bGlzdAppbmRleCAzY2MwOTVhMmFjYmJmZDY1NTkzNTNlZDQ0MWE5ZmIyOTEzMzAxNWMzLi43ZWNi
OThiZWY5ZmZmZDlkNjM4ZDYyMTNhOGFlMzdkMjM0YWMxYTQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTM5
LDYgKzEzOSw4IEBAICQoUFJPSkVDVF9ESVIpL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29u
c3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFBy
b3RvdHlwZS5jcHAKICQoUFJPSkVDVF9ESVIpL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc0NvbnN0
cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90
eXBlLmNwcAorJChQUk9KRUNUX0RJUikvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9y
LmNwcAorJChQUk9KRUNUX0RJUikvcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5jcHAK
ICQoUFJPSkVDVF9ESVIpL3J1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5jcHAKICQoUFJPSkVD
VF9ESVIpL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcAogJChQUk9KRUNU
X0RJUikvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Cmlu
ZGV4IGNlYjkyOGZkOTc3NTZkMDBiZDk3Y2NkZGUzZjU2MTE5YTA0MTZiNmUuLmYxZThlMzk1Mjhj
MzE3NjNkNWY5MjE3MDEzNzM5ZjNlZDQ5MTUzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTI5LDYgKzI5
LDggQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG8KICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUubHV0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9J
bnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmx1
dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUv
SW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL0ludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmx1dC5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvSW50
bExvY2FsZVByb3RvdHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL0phdmFTY3JpcHRDb3JlL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL0ludGxOdW1i
ZXJGb3JtYXRQcm90b3R5cGUubHV0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKaW5kZXggOWE5ZWFlOTNmNjljN2ZhYWFkZjJiMjVjN2QyNmFhOTlhNmQ1ODhiZi4u
Mjc1YTFjMWI2NzZlNzk3NGQyYThiY2NlNWJiYTI4ZmM4MDVmOGNlMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE2MCw2ICsxNjAsOCBAQCBPQkpFQ1Rf
TFVUX0hFQURFUlMgPSBcCiAgICAgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmx1dC5oIFwK
ICAgICBJbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IubHV0LmggXAogICAgIEludGxEaXNwbGF5
TmFtZXNQcm90b3R5cGUubHV0LmggXAorICAgIEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IubHV0
LmggXAorICAgIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmx1dC5oIFwKICAgICBJbnRsTG9jYWxl
UHJvdG90eXBlLmx1dC5oIFwKICAgICBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IubHV0Lmgg
XAogICAgIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUubHV0LmggXApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA3ODk5ZDIwOWNiNzcxZjExNDY1YzZkNDQwNjBlY2RiNDZhZDU4NmZk
Li4wM2U3ZTFjYjJhOWFkY2Q4ZDhmY2ZkZWQ2NTA0ZjRhNjg2MmJhYTg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTc5NSw2ICsxNzk1LDkgQEAKIAkJRTMxMTc5QUEyMjg4Mzg2
MTAwNTE0QjJDIC8qIFN5bWJvbFRhYmxlT3JTY29wZURlcHRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzExNzlBOTIyODgzODVEMDA1MTRCMkMgLyog
U3ltYm9sVGFibGVPclNjb3BlRGVwdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFMzE2MTgxMzFFQzVGRTE3MDAwNkEyMTggLyogRE9NQW5ub3Rh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMx
NjE4MTAxRUM1RkUwODAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzE2MTgxNTFFQzVGRTI3MDAwNkEy
MTggLyogRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzE2MTgxMjFFQzVGRTA4MDAwNkEyMTggLyogRE9NQXR0
cmlidXRlR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJRTMxOENBNkIyNTQ0MDZCNjAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzMThDQTY1MjU0NDA2QjQwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9y
LmggKi87IH07CisJCUUzMThDQTZDMjU0NDA2QjYwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxOENBNjYy
NTQ0MDZCNDAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0LmggKi87IH07CisJCUUzMThDQTZEMjU0
NDA2QjYwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxOENBNjcyNTQ0MDZCNTAwNERDMTI5
IC8qIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmggKi87IH07CiAJCUUzMThDQkMxMUI4QUVGNTEw
MEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxOENCQkYxQjhBRUY1MTAwQTI5MjlEIC8qIEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTMxQzMxMzIyNTExQUZENzAwRTdBM0EwIC8qIEludGxDYWNoZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxQzMxMzAy
NTExQUZENjAwRTdBM0EwIC8qIEludGxDYWNoZS5oICovOyB9OwogCQlFMzIwMUMxRDFGOEU4MjM2
MDA3NkEwMzIgLyogSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEQwNjBCMUY4RTgxNDEwMDY0OUNGMiAvKiBK
U1NjcmlwdEZldGNoUGFyYW1ldGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xODQ2LDYgKzE4NDksNyBAQAogCQlFMzYzN0VFOTIzNkU1NkIw
MDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2MzdFRTcyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1l
Q29uc3RhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMzY1RjMzQTI0QUE2MjM5MDBDOTkxQjIgLyogSW50bERpc3BsYXlOYW1lc0NvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM2NUYzMzkyNEFBNjIxMjAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5s
dXQuaCAqLzsgfTsKIAkJRTM2NUYzM0IyNEFBNjIzQjAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFt
ZXNQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMzY1RjMzODI0QUE2MjExMDBDOTkxQjIgLyogSW50bERpc3BsYXlOYW1lc1Byb3Rv
dHlwZS5sdXQuaCAqLzsgfTsKKwkJRTM2NjQ0MUUyNTQ0MDlCMzAwMDE4NzZGIC8qIEludGxMaXN0
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzMThDQTY5MjU0NDA2QjUwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdC5jcHAgKi87IH07CiAJ
CUUzNkI3NjcwMjJGOEQ2MTkwMEQwOTgxOCAvKiBXYXNtT01HRm9yT1NSRW50cnlQbGFuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzZCNzY2RjIyRjhE
NjExMDBEMDk4MTggLyogV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oICovOyB9OwogCQlFMzZDQzk0
NzIwODYzMTRGMDA1MUZGRDYgLyogV2FzbUNyZWF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2Q0M5NDYyMDg2MzE0RjAwNTFGRkQ2IC8q
IFdhc21DcmVhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlFMzZFRENFNTI0RjA5NzU3MDBFNjBEQTIgLyogQ29uY3VycmVuY3kuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNkVEQ0U0MjRG
MDk3NTcwMEU2MERBMiAvKiBDb25jdXJyZW5jeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00OTcyLDYgKzQ5NzYsMTIgQEAKIAkJRTMxNjE4MTAx
RUM1RkUwODAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NQW5ub3RhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzE2MTgxMTFFQzVGRTA4MDAwNkEyMTggLyogRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUF0dHJpYnV0ZUdldHRl
clNldHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTYxODEyMUVDNUZF
MDgwMDA2QTIxOCAvKiBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzMThDQTY1MjU0NDA2QjQwMDREQzEyOSAvKiBJbnRsTGlzdEZv
cm1hdENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGxM
aXN0Rm9ybWF0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMx
OENBNjYyNTQ0MDZCNDAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEludGxMaXN0Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUzMThDQTY3MjU0NDA2QjUwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdFByb3Rv
dHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsTGlzdEZvcm1hdFBy
b3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzE4Q0E2ODI1NDQwNkI1
MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFMzE4Q0E2OTI1NDQwNkI1MDA0REMxMjkgLyogSW50bExp
c3RGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50bExp
c3RGb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzE4Q0E2QTI1NDQw
NkI1MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxOENCQkUxQjhBRUY1MTAwQTI5MjlEIC8q
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTMxOENCQkYxQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMUMzMTMwMjUxMUFG
RDYwMEU3QTNBMCAvKiBJbnRsQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW50bENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzMyLDYgKzcz
NDIsMTIgQEAKIAkJCQlFMzUzQzExODI0QUE0Q0I2MDAzRkJERjMgLyogSW50bERpc3BsYXlOYW1l
c0NvbnN0cnVjdG9yLmggKi8sCiAJCQkJRTM1M0MxMTkyNEFBNENCNjAwM0ZCREYzIC8qIEludGxE
aXNwbGF5TmFtZXNQcm90b3R5cGUuY3BwICovLAogCQkJCUUzNTNDMTFCMjRBQTRDQjcwMDNGQkRG
MyAvKiBJbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmggKi8sCisJCQkJRTMxOENBNjkyNTQ0MDZC
NTAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0LmNwcCAqLywKKwkJCQlFMzE4Q0E2NjI1NDQwNkI0
MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXQuaCAqLywKKwkJCQlFMzE4Q0E2QTI1NDQwNkI1MDA0
REMxMjkgLyogSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJRTMxOENBNjUy
NTQ0MDZCNDAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuaCAqLywKKwkJCQlF
MzE4Q0E2ODI1NDQwNkI1MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwICov
LAorCQkJCUUzMThDQTY3MjU0NDA2QjUwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdFByb3RvdHlw
ZS5oICovLAogCQkJCUEzQUZGOTJEMjQ1QTNDRkEwMEM5QkEzQiAvKiBJbnRsTG9jYWxlLmNwcCAq
LywKIAkJCQlBM0FGRjkyQjI0NUEzQ0Y5MDBDOUJBM0IgLyogSW50bExvY2FsZS5oICovLAogCQkJ
CUEzQUZGOTJGMjQ1QTNDRkIwMEM5QkEzQiAvKiBJbnRsTG9jYWxlQ29uc3RydWN0b3IuY3BwICov
LApAQCAtOTg0NSw2ICs5ODYxLDkgQEAKIAkJCQlFMzY1RjMzQTI0QUE2MjM5MDBDOTkxQjIgLyog
SW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM1
M0MxMjEyNEFBNENCNzAwM0ZCREYzIC8qIEludGxEaXNwbGF5TmFtZXNQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzNjVGMzNCMjRBQTYyM0IwMEM5OTFCMiAvKiBJbnRsRGlzcGxheU5h
bWVzUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTMxOENBNkMyNTQ0MDZCNjAw
NERDMTI5IC8qIEludGxMaXN0Rm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzE4Q0E2QjI1
NDQwNkI2MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTMxOENBNkQyNTQ0MDZCNjAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzA3MTc4RTI0Qzc4MjlEMDBERjA2NDQgLyogSW50
bExvY2FsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMwNzE3OEQyNEM3ODI5QTAwREYwNjQ0IC8q
IEludGxMb2NhbGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMwNzE3OEMyNEM3
ODI5ODAwREYwNjQ0IC8qIEludGxMb2NhbGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MTEzNDksNiArMTEzNjgsNyBAQAogCQkJCTUzMzNCQkREMjExMEY3RTEwMDc2MThFQyAvKiBERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzQjJBNTQ4MjI2NTQzQkYw
MDVBMEY3OSAvKiBGVExMb3dlckRGR1RvQjMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM0MTk2
NjIyMjcwRTAwMDAwNDdCN0NEIC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyQ29tcGF0aWJp
bGl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMzY2NDQxRTI1NDQwOUIzMDAwMTg3NkYgLyog
SW50bExpc3RGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUUxRjczNUYxNjAw
MzdGQzMzIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NDI3NEExNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NDI3NDAxNThFQkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcxMTQyMTRkYWQ0ZWYzMTczMGJmZWE4NGYx
NmM5Y2JiYzFkOWNjMDAuLjhlNGNjY2YxMWM5YTNjOTc5YmI2MjAwOTA3YTA3NjliNDE5MmE4ZjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTgxOSw2ICs4MTksMTAgQEAgcnVudGlt
ZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCiBydW50aW1lL0ludGxEaXNwbGF5TmFt
ZXMuY3BwCiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUv
SW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZS5jcHAKKy8vIENvbmZpbmUgVV9ISURFX0RSQUZUX0FQ
SSdzIGVmZmVjdCBpbiB0aGlzIGZpbGUuCitydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcCBAbm8t
dW5pZnkKK3J1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKK3J1bnRpbWUvSW50
bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwCiBydW50aW1lL0ludGxMb2NhbGUuY3BwCiBydW50aW1l
L0ludGxMb2NhbGVDb25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50
aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oCmluZGV4IGYzNDBlYmRmODRiZDZjMDk4NmExM2I4NzdhMjA4MjIwMzEwMGVlODEuLmQ5NWJk
OWJmNjRkZmUzMGE0NGM0MjJiMjIzOTI0YzFhYmEzOWZjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtNDEsNiArNDEsNyBA
QAogICAgIG1hY3JvKEZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oSW5maW5pdHkpIFwKICAgICBtYWNy
byhJbnRsKSBcCisgICAgbWFjcm8oTGlzdEZvcm1hdCkgXAogICAgIG1hY3JvKExvYWRlcikgXAog
ICAgIG1hY3JvKExvY2FsZSkgXAogICAgIG1hY3JvKE1hcCkgXApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcAppbmRleCBlNjg2N2MzZmMx
ZWZjMDdhZTZiM2RhYmYwNmI0Yzg5YTY5ODQzMTYwLi43ZTNhOTk4MmI2ZTM1MmJlYmE0ZDNiZTky
ODY2NzQxMjFjYWM0M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGlzcGxheU5hbWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGlzcGxheU5hbWVzLmNwcApAQCAtODMsMTIgKzgzLDEyIEBAIHZvaWQgSW50bERpc3Bs
YXlOYW1lczo6aW5pdGlhbGl6ZURpc3BsYXlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGF1
dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygp
OwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9u
cywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwog
ICAgIGlmIChtX2xvY2FsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFsaXplIERpc3BsYXlOYW1lIGR1ZSB0
byBpbnZhbGlkIGxvY2FsZSJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBEaXNwbGF5TmFtZXMgZHVlIHRvIGludmFs
aWQgbG9jYWxlIl9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMjQ0
NGI4MWJmMTA2YTE2ZjVlNzA4MjFlOGRkYzllMWZkNzkxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKQEAgLTAsMCAr
MSwzNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50
bExpc3RGb3JtYXQuaCIKKworI2luY2x1ZGUgIkludGxPYmplY3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisKKy8vIFdoaWxlIFVMaXN0Rm9ybWF0dGVyIEFQSXMg
YXJlIGRyYWZ0IGluIElDVSA2NywgdGhleSBhcmUgc3RhYmxlIGluIElDVSA2OCB3aXRoIHRoZSBz
YW1lIGZ1bmN0aW9uIHNpZ25hdHVyZXMuCisvLyBTbyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlc2Ug
c2lnbmF0dXJlcyBvZiBkcmFmdCBBUElzIGFyZSBzdGFibGUuCisjaWYgSEFWRShJQ1VfVV9MSVNU
X0ZPUk1BVFRFUikKKyNpZmRlZiBVX0hJREVfRFJBRlRfQVBJCisjdW5kZWYgVV9ISURFX0RSQUZU
X0FQSQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDx1bmljb2RlL3VsaXN0Zm9ybWF0dGVyLmg+
CisjaWYgSEFWRShJQ1VfVV9MSVNUX0ZPUk1BVFRFUikKKyNkZWZpbmUgVV9ISURFX0RSQUZUX0FQ
SSAxCisjZW5kaWYKKworI2lmIEhBVkUoSUNVX1VfTElTVF9GT1JNQVRURVIpCisjaW5jbHVkZSA8
dW5pY29kZS91Zm9ybWF0dGVkdmFsdWUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIEludGxMaXN0Rm9ybWF0OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEludGxMaXN0
Rm9ybWF0KSB9OworCit2b2lkIFVMaXN0Rm9ybWF0dGVyRGVsZXRlcjo6b3BlcmF0b3IoKShVTGlz
dEZvcm1hdHRlciogZm9ybWF0dGVyKQoreworICAgIGlmIChmb3JtYXR0ZXIpCisgICAgICAgIHVs
aXN0Zm10X2Nsb3NlKGZvcm1hdHRlcik7Cit9CisKK0ludGxMaXN0Rm9ybWF0KiBJbnRsTGlzdEZv
cm1hdDo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgYXV0byog
b2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW50bExpc3RGb3JtYXQ+KHZtLmhl
YXApKSBJbnRsTGlzdEZvcm1hdCh2bSwgc3RydWN0dXJlKTsKKyAgICBvYmplY3QtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUqIEludGxMaXN0
Rm9ybWF0OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK0ludGxMaXN0Rm9ybWF0OjpJbnRsTGlzdEZvcm1hdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
eworfQorCit2b2lkIEludGxMaXN0Rm9ybWF0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7Cit9CisKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtSW50bC5MaXN0Rm9y
bWF0Cit2b2lkIEludGxMaXN0Rm9ybWF0Ojppbml0aWFsaXplTGlzdEZvcm1hdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1ZhbHVl
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBj
YW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgbG9jYWxlcyk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgIEpTT2JqZWN0KiBvcHRpb25zOwor
ICAgIGlmIChvcHRpb25zVmFsdWUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgb3B0aW9ucyA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KHZtLCBnbG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmplY3RT
dHJ1Y3R1cmUoKSk7CisgICAgZWxzZSB7CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zVmFsdWUu
dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKyAgICB9CisKKyAgICAvLyBEb2VzIG5vdCBzZXQgZWl0aGVyIG9mICJjYSIg
b3IgIm51Ii4KKyAgICAvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaW50bC1kaXNwbGF5bmFt
ZXMvI3NlYy1pbnRsLWRpc3BsYXluYW1lcy1jb25zdHJ1Y3RvcgorICAgIFJlc29sdmVMb2NhbGVP
cHRpb25zIGxvY2FsZU9wdGlvbnM7CisKKyAgICBMb2NhbGVNYXRjaGVyIGxvY2FsZU1hdGNoZXIg
PSBpbnRsT3B0aW9uPExvY2FsZU1hdGNoZXI+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJv
cGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyB7ICJsb29rdXAiX3MsIExvY2FsZU1hdGNoZXI6
Okxvb2t1cCB9LCB7ICJiZXN0IGZpdCJfcywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCB9IH0sICJs
b2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIl9z
LCBMb2NhbGVNYXRjaGVyOjpCZXN0Rml0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOworCisgICAgYXV0byBsb2NhbGVEYXRhID0gW10oY29uc3QgU3RyaW5nJiwgUmVs
ZXZhbnRFeHRlbnNpb25LZXkpIC0+IFZlY3RvcjxTdHJpbmc+IHsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9OworCisgICAgYXV0byYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0
QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGds
b2JhbE9iamVjdCwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0
Y2hlciwgbG9jYWxlT3B0aW9ucywgeyB9LCBsb2NhbGVEYXRhKTsKKworICAgIG1fbG9jYWxlID0g
cmVzb2x2ZWQubG9jYWxlOworICAgIGlmIChtX2xvY2FsZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFsaXpl
IExpc3RGb3JtYXQgZHVlIHRvIGludmFsaWQgbG9jYWxlIl9zKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fdHlwZSA9IGludGxPcHRpb248VHlwZT4oZ2xvYmFsT2JqZWN0LCBvcHRp
b25zLCB2bS5wcm9wZXJ0eU5hbWVzLT50eXBlLCB7IHsgImNvbmp1bmN0aW9uIl9zLCBUeXBlOjpD
b25qdW5jdGlvbiB9LCB7ICJkaXNqdW5jdGlvbiJfcywgVHlwZTo6RGlzanVuY3Rpb24gfSwgeyAi
dW5pdCJfcywgVHlwZTo6VW5pdCB9IH0sICJ0eXBlIG11c3QgYmUgZWl0aGVyIFwiY29uanVuY3Rp
b25cIiwgXCJkaXNqdW5jdGlvblwiLCBvciBcInVuaXRcIiJfcywgVHlwZTo6Q29uanVuY3Rpb24p
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBtX3N0eWxl
ID0gaW50bE9wdGlvbjxTdHlsZT4oZ2xvYmFsT2JqZWN0LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5h
bWVzLT5zdHlsZSwgeyB7ICJsb25nIl9zLCBTdHlsZTo6TG9uZyB9LCB7ICJzaG9ydCJfcywgU3R5
bGU6OlNob3J0IH0sIHsgIm5hcnJvdyJfcywgU3R5bGU6Ok5hcnJvdyB9IH0sICJzdHlsZSBtdXN0
IGJlIGVpdGhlciBcImxvbmdcIiwgXCJzaG9ydFwiLCBvciBcIm5hcnJvd1wiIl9zLCBTdHlsZTo6
TG9uZyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworI2lmIEhB
VkUoSUNVX1VfTElTVF9GT1JNQVRURVIpCisgICAgYXV0byB0b1VMaXN0Rm9ybWF0dGVyVHlwZSA9
IFtdKFR5cGUgdHlwZSkgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBU
eXBlOjpDb25qdW5jdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBVTElTVEZNVF9UWVBFX0FORDsK
KyAgICAgICAgY2FzZSBUeXBlOjpEaXNqdW5jdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBVTElT
VEZNVF9UWVBFX09SOworICAgICAgICBjYXNlIFR5cGU6OlVuaXQ6CisgICAgICAgICAgICByZXR1
cm4gVUxJU1RGTVRfVFlQRV9VTklUUzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVUxJU1RG
TVRfVFlQRV9BTkQ7CisgICAgfTsKKworICAgIGF1dG8gdG9VTGlzdEZvcm1hdHRlcldpZHRoID0g
W10oU3R5bGUgc3R5bGUpIHsKKyAgICAgICAgc3dpdGNoIChzdHlsZSkgeworICAgICAgICBjYXNl
IFN0eWxlOjpMb25nOgorICAgICAgICAgICAgcmV0dXJuIFVMSVNURk1UX1dJRFRIX1dJREU7Cisg
ICAgICAgIGNhc2UgU3R5bGU6OlNob3J0OgorICAgICAgICAgICAgcmV0dXJuIFVMSVNURk1UX1dJ
RFRIX1NIT1JUOworICAgICAgICBjYXNlIFN0eWxlOjpOYXJyb3c6CisgICAgICAgICAgICByZXR1
cm4gVUxJU1RGTVRfV0lEVEhfTkFSUk9XOworICAgICAgICB9CisgICAgICAgIHJldHVybiBVTElT
VEZNVF9XSURUSF9XSURFOworICAgIH07CisKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVS
T19FUlJPUjsKKyAgICBtX2xpc3RGb3JtYXQgPSBzdGQ6OnVuaXF1ZV9wdHI8VUxpc3RGb3JtYXR0
ZXIsIFVMaXN0Rm9ybWF0dGVyRGVsZXRlcj4odWxpc3RmbXRfb3BlbkZvclR5cGUobV9sb2NhbGUu
dXRmOCgpLmRhdGEoKSwgdG9VTGlzdEZvcm1hdHRlclR5cGUobV90eXBlKSwgdG9VTGlzdEZvcm1h
dHRlcldpZHRoKG1fc3R5bGUpLCAmc3RhdHVzKSk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMp
KSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQg
dG8gaW5pdGlhbGl6ZSBMaXN0Rm9ybWF0Il9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bHNlCisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkZhaWxlZCB0byBp
bml0aWFsaXplIEludGwuTGlzdEZvcm1hdCBzaW5jZSB1c2VkIGZlYXR1cmUgaXMgbm90IHN1cHBv
cnRlZCBpbiB0aGUgbGlua2VkIElDVSB2ZXJzaW9uIl9zKTsKKyAgICByZXR1cm47CisjZW5kaWYK
K30KKworI2lmIEhBVkUoSUNVX1VfTElTVF9GT1JNQVRURVIpCitzdGF0aWMgVmVjdG9yPFN0cmlu
ZywgND4gc3RyaW5nTGlzdEZyb21JdGVyYWJsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIGl0ZXJhYmxlKQoreworICAgIFZlY3RvcjxTdHJpbmcsIDQ+IHJlc3VsdDsKKwor
ICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgZm9yRWFjaEluSXRlcmFibGUoZ2xvYmFsT2JqZWN0LCBpdGVyYWJsZSwgWyZdKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkgeworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGlmICghdmFs
dWUuaXNTdHJpbmcoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIkl0ZXJhYmxlIHBhc3NlZCB0byBMaXN0Rm9ybWF0IGluY2x1ZGVzIG5vbiBTdHJp
bmciX3MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBp
dGVtID0gdmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitjbGFzcyBMaXN0Rm9ybWF0SW5wdXQg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExpc3RGb3JtYXRJbnB1dCk7CitwdWJsaWM6Cisg
ICAgTGlzdEZvcm1hdElucHV0KFZlY3RvcjxTdHJpbmcsIDQ+JiYgc3RyaW5ncykKKyAgICAgICAg
OiBtX3N0cmluZ3MoV1RGTW92ZShzdHJpbmdzKSkKKyAgICB7CisgICAgICAgIG1fc3RyaW5nUG9p
bnRlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3N0cmluZ3Muc2l6ZSgpKTsKKyAgICAgICAg
bV9zdHJpbmdMZW5ndGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdHJpbmdzLnNpemUoKSk7
CisgICAgICAgIGZvciAoYXV0byYgc3RyaW5nIDogbV9zdHJpbmdzKSB7CisgICAgICAgICAgICBp
ZiAoc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byB2ZWN0b3IgPSBtYWtl
VW5pcXVlPFZlY3RvcjxVQ2hhcj4+KCk7CisgICAgICAgICAgICAgICAgdmVjdG9yLT5yZXNpemUo
c3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFj
dGVycyh2ZWN0b3ItPmRhdGEoKSwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgo
KSk7CisgICAgICAgICAgICAgICAgbV9yZXRhaW5lZFVwY29udmVydGVkU3RyaW5ncy5hcHBlbmQo
V1RGTW92ZSh2ZWN0b3IpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ1BvaW50ZXJzLmFwcGVu
ZChtX3JldGFpbmVkVXBjb252ZXJ0ZWRTdHJpbmdzLmxhc3QoKS0+ZGF0YSgpKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1fc3RyaW5nUG9pbnRlcnMuYXBwZW5kKHN0cmlu
Zy5jaGFyYWN0ZXJzMTYoKSk7CisgICAgICAgICAgICBtX3N0cmluZ0xlbmd0aHMuYXBwZW5kKHN0
cmluZy5sZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQzMl90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3N0cmluZ1BvaW50ZXJzLnNpemUoKTsgfQorICAgIGNvbnN0IFVDaGFy
KiBjb25zdCogc3RyaW5nUG9pbnRlcnMoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ1BvaW50ZXJz
LmRhdGEoKTsgfQorICAgIGNvbnN0IGludDMyX3QqIHN0cmluZ0xlbmd0aHMoKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZ0xlbmd0aHMuZGF0YSgpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFN0
cmluZywgND4gbV9zdHJpbmdzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFVD
aGFyPj4sIDQ+IG1fcmV0YWluZWRVcGNvbnZlcnRlZFN0cmluZ3M7CisgICAgVmVjdG9yPGNvbnN0
IFVDaGFyKiwgND4gbV9zdHJpbmdQb2ludGVyczsKKyAgICBWZWN0b3I8aW50MzJfdCwgND4gbV9z
dHJpbmdMZW5ndGhzOworfTsKKyNlbmRpZgorCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwt
aW50bC1saXN0LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CitK
U1ZhbHVlIEludGxMaXN0Rm9ybWF0Ojpmb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBsaXN0KSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyNpZiBIQVZF
KElDVV9VX0xJU1RfRk9STUFUVEVSKQorICAgIGF1dG8gc3RyaW5nTGlzdCA9IHN0cmluZ0xpc3RG
cm9tSXRlcmFibGUoZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgTGlzdEZvcm1hdElucHV0IGlucHV0KFdURk1vdmUoc3RyaW5n
TGlzdCkpOworCisgICAgVmVjdG9yPFVDaGFyLCAzMj4gcmVzdWx0OworICAgIGF1dG8gc3RhdHVz
ID0gY2FsbEJ1ZmZlclByb2R1Y2luZ0Z1bmN0aW9uKHVsaXN0Zm10X2Zvcm1hdCwgbV9saXN0Rm9y
bWF0LmdldCgpLCBpbnB1dC5zdHJpbmdQb2ludGVycygpLCBpbnB1dC5zdHJpbmdMZW5ndGhzKCks
IGlucHV0LnNpemUoKSwgcmVzdWx0KTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRv
IGZvcm1hdCBsaXN0IG9mIHN0cmluZ3MiX3MpOworCisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBT
dHJpbmcocmVzdWx0KSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShsaXN0KTsKKyAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBmb3JtYXQg
bGlzdCBvZiBzdHJpbmdzIl9zKTsKKyNlbmRpZgorfQorCisvLyBodHRwczovL3RjMzkuZXMvcHJv
cG9zYWwtaW50bC1saXN0LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUuZm9y
bWF0VG9QYXJ0cworSlNWYWx1ZSBJbnRsTGlzdEZvcm1hdDo6Zm9ybWF0VG9QYXJ0cyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxpc3QpIGNvbnN0Cit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworI2lmIEhBVkUoSUNVX1VfTElTVF9GT1JNQVRURVIpCisgICAgYXV0byBzdHJp
bmdMaXN0ID0gc3RyaW5nTGlzdEZyb21JdGVyYWJsZShnbG9iYWxPYmplY3QsIGxpc3QpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBMaXN0Rm9ybWF0SW5wdXQg
aW5wdXQoV1RGTW92ZShzdHJpbmdMaXN0KSk7CisKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKKworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjp1bmlxdWVfcHRyPFVGb3JtYXR0
ZWRMaXN0LCBJQ1VEZWxldGVyPHVsaXN0Zm10X2Nsb3NlUmVzdWx0Pj4odWxpc3RmbXRfb3BlblJl
c3VsdCgmc3RhdHVzKSk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBmb3JtYXQg
bGlzdCBvZiBzdHJpbmdzIl9zKTsKKworICAgIHVsaXN0Zm10X2Zvcm1hdFN0cmluZ3NUb1Jlc3Vs
dChtX2xpc3RGb3JtYXQuZ2V0KCksIGlucHV0LnN0cmluZ1BvaW50ZXJzKCksIGlucHV0LnN0cmlu
Z0xlbmd0aHMoKSwgaW5wdXQuc2l6ZSgpLCByZXN1bHQuZ2V0KCksICZzdGF0dXMpOworICAgIGlm
IChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gZm9ybWF0IGxpc3Qgb2Ygc3RyaW5ncyJfcyk7CisK
KyAgICAvLyBVRm9ybWF0dGVkVmFsdWUgaXMgb3duZWQgYnkgVUZvcm1hdHRlZExpc3QuIFdlIGRv
IG5vdCBuZWVkIHRvIGNsb3NlIGl0LgorICAgIGF1dG8gZm9ybWF0dGVkVmFsdWUgPSB1bGlzdGZt
dF9yZXN1bHRBc1ZhbHVlKHJlc3VsdC5nZXQoKSwgJnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVS
RShzdGF0dXMpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgImZhaWxlZCB0byBmb3JtYXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKKworICAgIEpTQXJy
YXkqIHBhcnRzID0gSlNBcnJheTo6dHJ5Q3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3Vz
KSwgMCk7CisgICAgaWYgKCFwYXJ0cykKKyAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKworICAgIGludDMyX3QgZm9ybWF0dGVkU3RyaW5n
TGVuZ3RoID0gMDsKKyAgICBjb25zdCBVQ2hhciogZm9ybWF0dGVkU3RyaW5nUG9pbnRlciA9IHVm
bXR2YWxfZ2V0U3RyaW5nKGZvcm1hdHRlZFZhbHVlLCAmZm9ybWF0dGVkU3RyaW5nTGVuZ3RoLCAm
c3RhdHVzKTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGZvcm1hdCBsaXN0IG9m
IHN0cmluZ3MiX3MpOworICAgIFN0cmluZyByZXN1bHRTdHJpbmcoZm9ybWF0dGVkU3RyaW5nUG9p
bnRlciwgZm9ybWF0dGVkU3RyaW5nTGVuZ3RoKTsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBzdGQ6
OnVuaXF1ZV9wdHI8VUNvbnN0cmFpbmVkRmllbGRQb3NpdGlvbiwgSUNVRGVsZXRlcjx1Y2Zwb3Nf
Y2xvc2U+Pih1Y2Zwb3Nfb3Blbigmc3RhdHVzKSk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMp
KQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZh
aWxlZCB0byBmb3JtYXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKKworICAgIHVjZnBvc19jb25zdHJh
aW5GaWVsZChpdGVyYXRvci5nZXQoKSwgVUZJRUxEX0NBVEVHT1JZX0xJU1QsIFVMSVNURk1UX0VM
RU1FTlRfRklFTEQsICZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8g
Zm9ybWF0IGxpc3Qgb2Ygc3RyaW5ncyJfcyk7CisKKyAgICBhdXRvIGxpdGVyYWxTdHJpbmcgPSBq
c05vbnRyaXZpYWxTdHJpbmcodm0sICJsaXRlcmFsIl9zKTsKKyAgICBhdXRvIGVsZW1lbnRTdHJp
bmcgPSBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJlbGVtZW50Il9zKTsKKworICAgIGF1dG8gY3Jl
YXRlUGFydCA9IFsmXSAoSlNTdHJpbmcqIHR5cGUsIEpTU3RyaW5nKiB2YWx1ZSkgeworICAgICAg
ICBKU09iamVjdCogcGFydCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dHlwZSwgdHlwZSk7
CisgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHBhcnQ7CisgICAgfTsKKworICAgIGludDMyX3QgcmVzdWx0
TGVuZ3RoID0gcmVzdWx0U3RyaW5nLmxlbmd0aCgpOworICAgIGludDMyX3QgcHJldmlvdXNFbmRJ
bmRleCA9IDA7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgYm9vbCBuZXh0ID0gdWZtdHZh
bF9uZXh0UG9zaXRpb24oZm9ybWF0dGVkVmFsdWUsIGl0ZXJhdG9yLmdldCgpLCAmc3RhdHVzKTsK
KyAgICAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gZm9ybWF0IGxpc3Qgb2Yg
c3RyaW5ncyJfcyk7CisgICAgICAgIGlmICghbmV4dCkKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGludDMyX3QgYmVnaW5JbmRleCA9IDA7CisgICAgICAgIGludDMyX3QgZW5kSW5kZXgg
PSAwOworICAgICAgICB1Y2Zwb3NfZ2V0SW5kZXhlcyhpdGVyYXRvci5nZXQoKSwgJmJlZ2luSW5k
ZXgsICZlbmRJbmRleCwgJnN0YXR1cyk7CisgICAgICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkK
KyAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
ZmFpbGVkIHRvIGZvcm1hdCBsaXN0IG9mIHN0cmluZ3MiX3MpOworCisgICAgICAgIGlmIChwcmV2
aW91c0VuZEluZGV4IDwgYmVnaW5JbmRleCkgeworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGpz
U3RyaW5nKHZtLCByZXN1bHRTdHJpbmcuc3Vic3RyaW5nKHByZXZpb3VzRW5kSW5kZXgsIGJlZ2lu
SW5kZXggLSBwcmV2aW91c0VuZEluZGV4KSk7CisgICAgICAgICAgICBKU09iamVjdCogcGFydCA9
IGNyZWF0ZVBhcnQobGl0ZXJhbFN0cmluZywgdmFsdWUpOworICAgICAgICAgICAgcGFydHMtPnB1
c2goZ2xvYmFsT2JqZWN0LCBwYXJ0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisgICAgICAgIH0KKyAgICAgICAgcHJldmlvdXNFbmRJbmRleCA9IGVuZElu
ZGV4OworCisgICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nLnN1
YnN0cmluZyhiZWdpbkluZGV4LCBlbmRJbmRleCAtIGJlZ2luSW5kZXgpKTsKKyAgICAgICAgSlNP
YmplY3QqIHBhcnQgPSBjcmVhdGVQYXJ0KGVsZW1lbnRTdHJpbmcsIHZhbHVlKTsKKyAgICAgICAg
cGFydHMtPnB1c2goZ2xvYmFsT2JqZWN0LCBwYXJ0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKyAgICB9CisKKyAgICBpZiAocHJldmlvdXNFbmRJbmRleCA8IHJl
c3VsdExlbmd0aCkgeworICAgICAgICBhdXRvIHZhbHVlID0ganNTdHJpbmcodm0sIHJlc3VsdFN0
cmluZy5zdWJzdHJpbmcocHJldmlvdXNFbmRJbmRleCwgcmVzdWx0TGVuZ3RoIC0gcHJldmlvdXNF
bmRJbmRleCkpOworICAgICAgICBKU09iamVjdCogcGFydCA9IGNyZWF0ZVBhcnQobGl0ZXJhbFN0
cmluZywgdmFsdWUpOworICAgICAgICBwYXJ0cy0+cHVzaChnbG9iYWxPYmplY3QsIHBhcnQpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworICAgIHJl
dHVybiBwYXJ0czsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGxpc3QpOworICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGZvcm1hdCBsaXN0
IG9mIHN0cmluZ3MiX3MpOworI2VuZGlmCit9CisKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3Nh
bC1pbnRsLWRpc3BsYXluYW1lcy8jc2VjLUludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUucmVzb2x2
ZWRPcHRpb25zCitKU09iamVjdCogSW50bExpc3RGb3JtYXQ6OnJlc29sdmVkT3B0aW9ucyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGdsb2JhbE9iamVjdCk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sb2NhbGUsIGpzU3RyaW5nKHZtLCBtX2xvY2FsZSkpOworICAgIG9wdGlvbnMtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dHlwZSwganNOb250cml2aWFsU3RyaW5nKHZtLCB0
eXBlU3RyaW5nKG1fdHlwZSkpKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnN0eWxlLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHN0eWxlU3RyaW5nKG1fc3R5
bGUpKSk7CisgICAgcmV0dXJuIG9wdGlvbnM7Cit9CisKK0FTQ0lJTGl0ZXJhbCBJbnRsTGlzdEZv
cm1hdDo6c3R5bGVTdHJpbmcoU3R5bGUgc3R5bGUpCit7CisgICAgc3dpdGNoIChzdHlsZSkgewor
ICAgIGNhc2UgU3R5bGU6Okxvbmc6CisgICAgICAgIHJldHVybiAibG9uZyJfczsKKyAgICBjYXNl
IFN0eWxlOjpTaG9ydDoKKyAgICAgICAgcmV0dXJuICJzaG9ydCJfczsKKyAgICBjYXNlIFN0eWxl
OjpOYXJyb3c6CisgICAgICAgIHJldHVybiAibmFycm93Il9zOworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7Cit9CisKK0FT
Q0lJTGl0ZXJhbCBJbnRsTGlzdEZvcm1hdDo6dHlwZVN0cmluZyhUeXBlIHR5cGUpCit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlOjpDb25qdW5jdGlvbjoKKyAgICAgICAgcmV0
dXJuICJjb25qdW5jdGlvbiJfczsKKyAgICBjYXNlIFR5cGU6OkRpc2p1bmN0aW9uOgorICAgICAg
ICByZXR1cm4gImRpc2p1bmN0aW9uIl9zOworICAgIGNhc2UgVHlwZTo6VW5pdDoKKyAgICAgICAg
cmV0dXJuICJ1bml0Il9zOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGY5ZGUwODRjYTVlMTk0NGEzMGUwMDBiM2MwMGNhYjE2YTBhZjJjMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmgKQEAg
LTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNP
YmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9pY3UvSUNVSGVscGVycy5oPgorCisjaWYg
IWRlZmluZWQoSEFWRV9JQ1VfVV9MSVNUX0ZPUk1BVFRFUikKKyNpZiBVX0lDVV9WRVJTSU9OX01B
Sk9SX05VTSA+PSA2NyB8fCAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNjYgJiYgVVNFKEFQ
UExFX0lOVEVSTkFMX1NESykpCisjZGVmaW5lIEhBVkVfSUNVX1VfTElTVF9GT1JNQVRURVIgMQor
I2VuZGlmCisjZW5kaWYKKworc3RydWN0IFVMaXN0Rm9ybWF0dGVyOworCituYW1lc3BhY2UgSlND
IHsKKworZW51bSBjbGFzcyBSZWxldmFudEV4dGVuc2lvbktleSA6IHVpbnQ4X3Q7CisKK3N0cnVj
dCBVTGlzdEZvcm1hdHRlckRlbGV0ZXIgeworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgb3Bl
cmF0b3IoKShVTGlzdEZvcm1hdHRlciopOworfTsKKworY2xhc3MgSW50bExpc3RGb3JtYXQgZmlu
YWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9
IEpTTm9uRmluYWxPYmplY3Q7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCogY2VsbCkK
KyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PEludGxMaXN0Rm9ybWF0Kj4oY2VsbCktPkludGxM
aXN0Rm9ybWF0Ojp+SW50bExpc3RGb3JtYXQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS5pbnRsTGlz
dEZvcm1hdFNwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgc3RhdGljIEludGxMaXN0Rm9ybWF0
KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9J
TkZPOworCisgICAgdm9pZCBpbml0aWFsaXplTGlzdEZvcm1hdChKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgbG9jYWxlc1ZhbHVlLCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSk7CisKKyAgICBKU1ZhbHVl
IGZvcm1hdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpIGNvbnN0OworICAgIEpTVmFsdWUgZm9y
bWF0VG9QYXJ0cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpIGNvbnN0OworICAgIEpTT2JqZWN0
KiByZXNvbHZlZE9wdGlvbnMoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBJbnRsTGlzdEZvcm1hdChWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeyBDb25qdW5jdGlvbiwg
RGlzanVuY3Rpb24sIFVuaXQgfTsKKyAgICBlbnVtIGNsYXNzIFN0eWxlIDogdWludDhfdCB7IFNo
b3J0LCBMb25nLCBOYXJyb3cgfTsKKworICAgIHN0YXRpYyBBU0NJSUxpdGVyYWwgdHlwZVN0cmlu
ZyhUeXBlKTsKKyAgICBzdGF0aWMgQVNDSUlMaXRlcmFsIHN0eWxlU3RyaW5nKFN0eWxlKTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxVTGlzdEZvcm1hdHRlciwgVUxpc3RGb3JtYXR0ZXJEZWxldGVy
PiBtX2xpc3RGb3JtYXQ7CisgICAgU3RyaW5nIG1fbG9jYWxlOworICAgIFR5cGUgbV90eXBlIHsg
VHlwZTo6Q29uanVuY3Rpb24gfTsKKyAgICBTdHlsZSBtX3N0eWxlIHsgU3R5bGU6OkxvbmcgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wMzBiNmQwZDMzNWJmNTNhODNkNjVlZjI2NjdhMjIxYmU1ZWZlNzY1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAi
SW50bExpc3RGb3JtYXQuaCIKKyNpbmNsdWRlICJJbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yKTsK
Kworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oSW50bExpc3RGb3JtYXRDb25zdHJ1
Y3RvclN1cHBvcnRlZExvY2FsZXNPZik7CisKK30KKworI2luY2x1ZGUgIkludGxMaXN0Rm9ybWF0
Q29uc3RydWN0b3IubHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8g
SW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6
c19pbmZvLCAmbGlzdEZvcm1hdENvbnN0cnVjdG9yVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvcikgfTsKKworLyogU291cmNlIGZvciBJ
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmx1dC5oCitAYmVnaW4gbGlzdEZvcm1hdENvbnN0cnVj
dG9yVGFibGUKKyAgc3VwcG9ydGVkTG9jYWxlc09mICAgICAgICAgICAgIEludGxMaXN0Rm9ybWF0
Q29uc3RydWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2YgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMQorQGVuZAorKi8KKworSW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvciogSW50bExpc3RGb3Jt
YXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEludGxM
aXN0Rm9ybWF0UHJvdG90eXBlKiBsaXN0Rm9ybWF0UHJvdG90eXBlKQoreworICAgIGF1dG8qIGNv
bnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW50bExpc3RGb3JtYXRDb25z
dHJ1Y3Rvcj4odm0uaGVhcCkpIEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3Iodm0sIHN0cnVjdHVy
ZSk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBsaXN0Rm9ybWF0UHJvdG90
eXBlKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1N0cnVjdHVyZSogSW50bExpc3RG
b3JtYXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSW50ZXJuYWxG
dW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworc3RhdGljIEpTQ19E
RUNMQVJFX0hPU1RfRlVOQ1RJT04oY2FsbEludGxMaXN0Rm9ybWF0KTsKK3N0YXRpYyBKU0NfREVD
TEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEludGxMaXN0Rm9ybWF0KTsKKworSW50bExpc3RG
b3JtYXRDb25zdHJ1Y3Rvcjo6SW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSW50bExpc3RG
b3JtYXQsIGNvbnN0cnVjdEludGxMaXN0Rm9ybWF0KQoreworfQorCit2b2lkIEludGxMaXN0Rm9y
bWF0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSW50bExpc3RGb3JtYXRQcm90
b3R5cGUqIGxpc3RGb3JtYXRQcm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIDAsICJMaXN0Rm9ybWF0Il9zLCBQcm9wZXJ0eUFkZGl0aW9uTW9kZTo6V2l0aG91dFN0cnVj
dHVyZVRyYW5zaXRpb24pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIGxpc3RGb3JtYXRQcm90b3R5cGUsIFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBsaXN0Rm9ybWF0UHJvdG90eXBlLT5wdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIHRo
aXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
K30KKworLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy1JbnRsLkxpc3RGb3JtYXQKK0pT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RJbnRsTGlzdEZvcm1hdCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG5ld1RhcmdldCA9IGFzT2JqZWN0KGNhbGxGcmFt
ZS0+bmV3VGFyZ2V0KCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3VGFyZ2V0ID09
IGNhbGxGcmFtZS0+anNDYWxsZWUoKQorICAgICAgICA/IGdsb2JhbE9iamVjdC0+bGlzdEZvcm1h
dFN0cnVjdHVyZSgpCisgICAgICAgIDogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQsIGdldEZ1bmN0aW9uUmVhbG0odm0sIG5l
d1RhcmdldCktPmxpc3RGb3JtYXRTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgIEludGxMaXN0Rm9ybWF0KiBsaXN0Rm9ybWF0ID0gSW50bExp
c3RGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKKyAgICBBU1NFUlQobGlzdEZvcm1hdCk7
CisKKyAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgbGlzdEZvcm1hdC0+aW5pdGlhbGl6ZUxpc3RG
b3JtYXQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFy
Z3VtZW50KDEpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGxpc3RGb3JtYXQpOworfQor
CisvLyBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLUludGwuTGlzdEZvcm1hdAorSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGNhbGxJbnRsTGlzdEZvcm1hdCwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVu
Y3Rpb25UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkxpc3RGb3JtYXQiKSk7Cit9CisK
K0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yU3VwcG9y
dGVkTG9jYWxlc09mLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgLy8gSW50bC5MaXN0Rm9ybWF0
LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQor
ICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWxpc3QtZm9ybWF0LyNzZWMtSW50
bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZgorCisgICAgLy8gMS4gTGV0IGF2YWlsYWJs
ZUxvY2FsZXMgYmUgJUxpc3RGb3JtYXQlLltbYXZhaWxhYmxlTG9jYWxlc11dLgorICAgIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9IGludGxMaXN0Rm9ybWF0QXZhaWxh
YmxlTG9jYWxlcygpOworCisgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25p
Y2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KKyAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRM
b2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworCisgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9j
YWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyhnbG9iYWxPYmplY3QsIGF2
YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkp
KSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODQyOWQxYTA5ZDg3NzhlNWU2MGY0OWM1ZGY4NTA0NTg4MDY2OTA3MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3Ry
dWN0b3IuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSW50bE9iamVjdC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSW50bExpc3RGb3JtYXRQcm90b3R5cGU7CisKK2NsYXNz
IEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IgZmluYWwgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlv
biB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEludGVybmFsRnVuY3Rpb247CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHN0YXRpYyBJbnRsTGlzdEZvcm1h
dENvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBJbnRsTGlzdEZvcm1hdFByb3Rv
dHlwZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKK3ByaXZhdGU6Cisg
ICAgSW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZSopOworfTsKK1NUQVRJ
Q19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3Is
IEludGVybmFsRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zYWZhMTQ1OGVlOTYzYjZlYmFiZjExOTRiN2UwYmNiYzZhMDMzNzQ1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RG
b3JtYXRQcm90b3R5cGUuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmgiCisKKyNp
bmNsdWRlICJJbnRsTGlzdEZvcm1hdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKEludGxMaXN0
Rm9ybWF0UHJvdG90eXBlRnVuY0Zvcm1hdCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5D
VElPTihJbnRsTGlzdEZvcm1hdFByb3RvdHlwZUZ1bmNGb3JtYXRUb1BhcnRzKTsKK3N0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKEludGxMaXN0Rm9ybWF0UHJvdG90eXBlRnVuY1Jlc29s
dmVkT3B0aW9ucyk7CisKK30KKworI2luY2x1ZGUgIkludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmx1
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEludGxMaXN0Rm9ybWF0
UHJvdG90eXBlOjpzX2luZm8gPSB7ICJJbnRsLkxpc3RGb3JtYXQiLCAmQmFzZTo6c19pbmZvLCAm
bGlzdEZvcm1hdFByb3RvdHlwZVRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKElu
dGxMaXN0Rm9ybWF0UHJvdG90eXBlKSB9OworCisvKiBTb3VyY2UgZm9yIEludGxMaXN0Rm9ybWF0
UHJvdG90eXBlLmx1dC5oCitAYmVnaW4gbGlzdEZvcm1hdFByb3RvdHlwZVRhYmxlCisgIGZvcm1h
dCAgICAgICAgICAgSW50bExpc3RGb3JtYXRQcm90b3R5cGVGdW5jRm9ybWF0ICAgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgZm9ybWF0VG9QYXJ0cyAgICBJbnRsTGlzdEZvcm1hdFBy
b3RvdHlwZUZ1bmNGb3JtYXRUb1BhcnRzICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICByZXNv
bHZlZE9wdGlvbnMgIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyAg
ICBEb250RW51bXxGdW5jdGlvbiAwCitAZW5kCisqLworCitJbnRsTGlzdEZvcm1hdFByb3RvdHlw
ZSogSW50bExpc3RGb3JtYXRQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEludGxMaXN0Rm9ybWF0UHJvdG90eXBlPih2bS5oZWFwKSkgSW50bExpc3RGb3JtYXRQcm90b3R5
cGUodm0sIHN0cnVjdHVyZSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmV0dXJuIG9iamVjdDsKK30KKworU3RydWN0dXJlKiBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworfQorCitJbnRsTGlzdEZvcm1hdFByb3RvdHlwZTo6SW50bExpc3RGb3JtYXRQ
cm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKK3sKK30KKwordm9pZCBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NF
UlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRf
VFJBTlNJVElPTigpOworfQorCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaW50bC1saXN0
LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CitKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oSW50bExpc3RGb3JtYXRQcm90b3R5cGVGdW5jRm9ybWF0LCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBsaXN0Rm9ybWF0ID0ganNEeW5hbWljQ2FzdDxJbnRs
TGlzdEZvcm1hdCo+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWxpc3RG
b3JtYXQpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJJbnRsLkxpc3RGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBjYWxsZWQgb24gdmFsdWUgdGhh
dCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBMaXN0Rm9ybWF0Il9zKTsKKworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGxpc3RGb3JtYXQtPmZv
cm1hdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7Cit9CisKKy8vIGh0
dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWxpc3QtZm9ybWF0LyNzZWMtSW50bC5MaXN0Rm9y
bWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50
bExpc3RGb3JtYXRQcm90b3R5cGVGdW5jRm9ybWF0VG9QYXJ0cywgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgYXV0byogbGlzdEZvcm1hdCA9IGpzRHluYW1pY0Nhc3Q8SW50bExpc3RGb3JtYXQq
Pih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFsaXN0Rm9ybWF0KQorICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiSW50bC5M
aXN0Rm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mg
bm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIExpc3RGb3JtYXQiX3MpOworCisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUobGlzdEZvcm1hdC0+Zm9ybWF0
VG9QYXJ0cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7Cit9CisKKy8v
IGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWxpc3QtZm9ybWF0LyNzZWMtSW50bC5MaXN0
Rm9ybWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihJbnRsTGlzdEZvcm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGF1dG8qIGxpc3RGb3JtYXQgPSBqc0R5bmFtaWNDYXN0PEludGxMaXN0
Rm9ybWF0Kj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghbGlzdEZvcm1h
dCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IkludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zIGNhbGxlZCBvbiB2YWx1
ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIExpc3RGb3JtYXQiX3MpOwor
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUobGlzdEZvcm1h
dC0+cmVzb2x2ZWRPcHRpb25zKGdsb2JhbE9iamVjdCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZv
cm1hdFByb3RvdHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RG
b3JtYXRQcm90b3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTk3NGE5MGM5OGFjMDA3OGY0YjlhYzgxYjIz
MTJiYTk2OTUwY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUuaApAQCAtMCwwICsxLDU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSW50bExpc3RGb3JtYXRQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmpl
Y3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEludGxMaXN0Rm9ybWF0UHJvdG90eXBlLCBCYXNlKTsKKyAgICAg
ICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKworICAgIHN0YXRpYyBJbnRs
TGlzdEZvcm1hdFByb3RvdHlwZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
KTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBJbnRsTGlzdEZvcm1hdFBy
b3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsT2JqZWN0LmNwcAppbmRleCA5MWJjODM4ZGUxNGE3ZTg5ZTIwNDdjYjViNjc3OTM2YTYw
NGRhMDBhLi5lOGNhOGUzOTIzMDBmODNiNjZlOTVkZDYyMWMwNjg3NTlmMTNjYTA5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcApAQCAtMzksNiArMzks
OSBAQAogI2luY2x1ZGUgIkludGxEaXNwbGF5TmFtZXMuaCIKICNpbmNsdWRlICJJbnRsRGlzcGxh
eU5hbWVzQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJbnRsRGlzcGxheU5hbWVzUHJvdG90eXBl
LmgiCisjaW5jbHVkZSAiSW50bExpc3RGb3JtYXQuaCIKKyNpbmNsdWRlICJJbnRsTGlzdEZvcm1h
dENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSW50bExpc3RGb3JtYXRQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJJbnRsTG9jYWxlLmgiCiAjaW5jbHVkZSAiSW50bExvY2FsZUNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiSW50bExvY2FsZVByb3RvdHlwZS5oIgpAQCAtOTMsNiArOTYsMTMgQEAgc3Rh
dGljIEpTVmFsdWUgY3JlYXRlRGlzcGxheU5hbWVzQ29uc3RydWN0b3IoVk0mIHZtLCBKU09iamVj
dCogb2JqZWN0KQogICAgIHJldHVybiBJbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3I6OmNyZWF0
ZSh2bSwgSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblByb3RvdHlwZSgpKSwganNDYXN0PElu
dGxEaXNwbGF5TmFtZXNQcm90b3R5cGUqPihnbG9iYWxPYmplY3QtPmRpc3BsYXlOYW1lc1N0cnVj
dHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwogfQogCitzdGF0aWMgSlNWYWx1ZSBj
cmVhdGVMaXN0Rm9ybWF0Q29uc3RydWN0b3IoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQorewor
ICAgIEludGxPYmplY3QqIGludGxPYmplY3QgPSBqc0Nhc3Q8SW50bE9iamVjdCo+KG9iamVjdCk7
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGludGxPYmplY3QtPmdsb2JhbE9i
amVjdCh2bSk7CisgICAgcmV0dXJuIEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3I6OmNyZWF0ZSh2
bSwgSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKSksIGpzQ2FzdDxJbnRsTGlz
dEZvcm1hdFByb3RvdHlwZSo+KGdsb2JhbE9iamVjdC0+bGlzdEZvcm1hdFN0cnVjdHVyZSgpLT5z
dG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworfQorCiBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVMb2Nh
bGVDb25zdHJ1Y3RvcihWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSW50bE9iamVj
dCogaW50bE9iamVjdCA9IGpzQ2FzdDxJbnRsT2JqZWN0Kj4ob2JqZWN0KTsKQEAgLTE4Myw2ICsx
OTMsMTEgQEAgdm9pZCBJbnRsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KikKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNyZWF0ZURpc3BsYXlOYW1lc0NvbnN0
cnVjdG9yKTsKICNlbmRpZgorI2lmIEhBVkUoSUNVX1VfTElTVF9GT1JNQVRURVIpCisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPkxpc3RGb3JtYXQs
IGNyZWF0ZUxpc3RGb3JtYXRDb25zdHJ1Y3Rvcih2bSwgdGhpcyksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGNyZWF0ZUxpc3RGb3JtYXRDb25zdHJ1Y3Rvcik7CisjZW5kaWYKIH0KIAogU3RydWN0dXJl
KiBJbnRsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3QuaAppbmRleCBhOTU4MjA5NjM2Y2Q5NTY5NmNkODlhMGExMmFjYjI5Y2Nl
NGE0MTA2Li5lODI3ZmZkMGI3YTMyYmNkYjU0ODhmNmI5ODhiYmRlYzEyOTRhN2Q1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCkBAIC04OSw2ICs4OSw3IEBA
IGlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxEaXNwbGF5TmFtZXNBdmFpbGFibGVM
b2NhbGVzKCkgeyByZXR1cm4gaW50bEF2CiBpbmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBp
bnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVM
b2NhbGVzKCk7IH0KIGlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxQbHVyYWxSdWxl
c0F2YWlsYWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXZhaWxhYmxlTG9jYWxlcygpOyB9CiBp
bmxpbmUgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsUmVsYXRpdmVUaW1lRm9ybWF0QXZhaWxh
YmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KK2lubGluZSBj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpIHsg
cmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7IH0KIAogVHJpU3RhdGUgaW50bEJvb2xlYW5P
cHRpb24oSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG9wdGlvbnMsIFByb3BlcnR5TmFtZSk7CiBT
dHJpbmcgaW50bFN0cmluZ09wdGlvbihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgb3B0aW9ucywg
UHJvcGVydHlOYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhcio+IHZhbHVlcywg
Y29uc3QgY2hhciogbm90Rm91bmQsIGNvbnN0IGNoYXIqIGZhbGxiYWNrKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAzYzVkZGVh
MDkzMzgwMjIyNDBiMTAxMTI2NGQzODlkM2IzMzE1OWU0Li5hYjI4YzEzNDUxYzc2MDgwZTY0Y2Vm
MDBjMmUxZDY4ZjgzZDk2MjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC03OCw2ICs3OCw4IEBACiAjaW5jbHVkZSAiSW50bERh
dGVUaW1lRm9ybWF0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSW50bERpc3BsYXlOYW1lcy5oIgog
I2luY2x1ZGUgIkludGxEaXNwbGF5TmFtZXNQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJJbnRsTGlz
dEZvcm1hdC5oIgorI2luY2x1ZGUgIkludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmgiCiAjaW5jbHVk
ZSAiSW50bExvY2FsZS5oIgogI2luY2x1ZGUgIkludGxMb2NhbGVQcm90b3R5cGUuaCIKICNpbmNs
dWRlICJJbnRsTnVtYmVyRm9ybWF0LmgiCkBAIC0xMDIyLDYgKzEwMjQsMTIgQEAgY2FwaXRhbE5h
bWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVGbGFn
ID8gY2FwaXRhbE5hbWUKICAgICAgICAgICAgIEludGxEaXNwbGF5TmFtZXNQcm90b3R5cGUqIGRp
c3BsYXlOYW1lc1Byb3RvdHlwZSA9IEludGxEaXNwbGF5TmFtZXNQcm90b3R5cGU6OmNyZWF0ZShp
bml0LnZtLCBJbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52
bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CiAgICAg
ICAgICAgICBpbml0LnNldChJbnRsRGlzcGxheU5hbWVzOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52
bSwgZ2xvYmFsT2JqZWN0LCBkaXNwbGF5TmFtZXNQcm90b3R5cGUpKTsKICAgICAgICAgfSk7Cisg
ICAgbV9saXN0Rm9ybWF0U3RydWN0dXJlLmluaXRMYXRlcigKKyAgICAgICAgW10gKGNvbnN0IElu
aXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKTsKKyAg
ICAgICAgICAgIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlKiBsaXN0Rm9ybWF0UHJvdG90eXBlID0g
SW50bExpc3RGb3JtYXRQcm90b3R5cGU6OmNyZWF0ZShpbml0LnZtLCBJbnRsTGlzdEZvcm1hdFBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgICAgICAgICAgaW5pdC5zZXQoSW50bExpc3RG
b3JtYXQ6OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBnbG9iYWxPYmplY3QsIGxpc3RGb3JtYXRQ
cm90b3R5cGUpKTsKKyAgICAgICAgfSk7CiAgICAgbV9sb2NhbGVTdHJ1Y3R1cmUuaW5pdExhdGVy
KAogICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgewogICAg
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9i
amVjdCo+KGluaXQub3duZXIpOwpAQCAtMTkxMCw2ICsxOTE4LDcgQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIHRoaXNPYmplY3QtPm1fZGVmYXVsdENvbGxhdG9yLnZpc2l0KHZpc2l0b3IpOwogICAgIHRo
aXNPYmplY3QtPm1fY29sbGF0b3JTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09i
amVjdC0+bV9kaXNwbGF5TmFtZXNTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CisgICAgdGhpc09i
amVjdC0+bV9saXN0Rm9ybWF0U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmpl
Y3QtPm1fbG9jYWxlU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1f
cGx1cmFsUnVsZXNTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9y
ZWxhdGl2ZVRpbWVGb3JtYXRTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCA0MWM4YmE5NDQ2OGZk
MjI5NTI2NzlhYzhhMWZiYzk2YTJiNDRjNzBlLi4yM2M2NjM3NDNmY2M0ZGE4MmM2YjgzNjU2N2Jj
ZDA2ZjQ5MTk3MzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgKQEAgLTMxMCw2ICszMTAsNyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1
YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9i
YWxPYmplY3QsIEludGxDb2xsYXRvcj4gbV9kZWZhdWx0Q29sbGF0b3I7CiAgICAgTGF6eVByb3Bl
cnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY29sbGF0b3JTdHJ1Y3R1cmU7CiAgICAg
TGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fZGlzcGxheU5hbWVzU3Ry
dWN0dXJlOworICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2xp
c3RGb3JtYXRTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmU+IG1fbG9jYWxlU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVj
dCwgU3RydWN0dXJlPiBtX3BsdXJhbFJ1bGVzU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxK
U0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX3JlbGF0aXZlVGltZUZvcm1hdFN0cnVjdHVyZTsK
QEAgLTgyMyw2ICs4MjQsNyBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBTdHJ1Y3R1cmUqIGNvbGxhdG9yU3RydWN0dXJlKCkg
eyByZXR1cm4gbV9jb2xsYXRvclN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUq
IGRhdGVUaW1lRm9ybWF0U3RydWN0dXJlKCkgeyByZXR1cm4gbV9kYXRlVGltZUZvcm1hdFN0cnVj
dHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIGRpc3BsYXlOYW1lc1N0cnVjdHVyZSgp
IHsgcmV0dXJuIG1fZGlzcGxheU5hbWVzU3RydWN0dXJlLmdldCh0aGlzKTsgfQorICAgIFN0cnVj
dHVyZSogbGlzdEZvcm1hdFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fbGlzdEZvcm1hdFN0cnVjdHVy
ZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIG51bWJlckZvcm1hdFN0cnVjdHVyZSgpIHsg
cmV0dXJuIG1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVy
ZSogbG9jYWxlU3RydWN0dXJlKCkgeyByZXR1cm4gbV9sb2NhbGVTdHJ1Y3R1cmUuZ2V0KHRoaXMp
OyB9CiAgICAgU3RydWN0dXJlKiBwbHVyYWxSdWxlc1N0cnVjdHVyZSgpIHsgcmV0dXJuIG1fcGx1
cmFsUnVsZXNTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKaW5kZXggOWI2NDRmODg5MmZiOWEwMmQ0MTQxYTk5NjEwMzk1N2MxNmM2ZjMxYi4uYzk1
MWEzOGJjYjg0MjI2NmFkYWRjZDAxN2I2OGNiZDJjY2MwZDcwNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcApAQCAtNjgsNiArNjgsNyBAQAogI2luY2x1ZGUgIkludGxDb2xsYXRv
ci5oIgogI2luY2x1ZGUgIkludGxEYXRlVGltZUZvcm1hdC5oIgogI2luY2x1ZGUgIkludGxEaXNw
bGF5TmFtZXMuaCIKKyNpbmNsdWRlICJJbnRsTGlzdEZvcm1hdC5oIgogI2luY2x1ZGUgIkludGxM
b2NhbGUuaCIKICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0LmgiCiAjaW5jbHVkZSAiSW50bFBs
dXJhbFJ1bGVzLmgiCkBAIC0zMTQsNiArMzE1LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhl
YXBUeXBlIGhlYXBUeXBlLCBXVEY6OlJ1bkxvb3AqIHJ1bkxvb3AsIGJvb2wqIHN1Y2Nlc3MpCiAg
ICAgLCBpbnRsQ29sbGF0b3JIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SW50
bENvbGxhdG9yPigpKQogICAgICwgaW50bERhdGVUaW1lRm9ybWF0SGVhcENlbGxUeXBlKElzb0hl
YXBDZWxsVHlwZTo6Y3JlYXRlPEludGxEYXRlVGltZUZvcm1hdD4oKSkKICAgICAsIGludGxEaXNw
bGF5TmFtZXNIZWFwQ2VsbFR5cGUoSXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SW50bERpc3BsYXlO
YW1lcz4oKSkKKyAgICAsIGludGxMaXN0Rm9ybWF0SGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlw
ZTo6Y3JlYXRlPEludGxMaXN0Rm9ybWF0PigpKQogICAgICwgaW50bExvY2FsZUhlYXBDZWxsVHlw
ZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxJbnRsTG9jYWxlPigpKQogICAgICwgaW50bE51bWJl
ckZvcm1hdEhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxJbnRsTnVtYmVyRm9y
bWF0PigpKQogICAgICwgaW50bFBsdXJhbFJ1bGVzSGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlw
ZTo6Y3JlYXRlPEludGxQbHVyYWxSdWxlcz4oKSkKQEAgLTE1NDQsNiArMTU0Niw3IEBAIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhjYWxsYmFja0FQSVdyYXBwZXJHbG9i
YWxPYmplY3RTcGFjZSwgY2FsCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NM
T1coaW50bENvbGxhdG9yU3BhY2UsIGludGxDb2xsYXRvckhlYXBDZWxsVHlwZS5nZXQoKSwgSW50
bENvbGxhdG9yKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGludGxE
YXRlVGltZUZvcm1hdFNwYWNlLCBpbnRsRGF0ZVRpbWVGb3JtYXRIZWFwQ2VsbFR5cGUuZ2V0KCks
IEludGxEYXRlVGltZUZvcm1hdCkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhpbnRsRGlzcGxheU5hbWVzU3BhY2UsIGludGxEaXNwbGF5TmFtZXNIZWFwQ2VsbFR5cGUu
Z2V0KCksIEludGxEaXNwbGF5TmFtZXMpCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1coaW50bExpc3RGb3JtYXRTcGFjZSwgaW50bExpc3RGb3JtYXRIZWFwQ2VsbFR5cGUu
Z2V0KCksIEludGxMaXN0Rm9ybWF0KQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKGludGxMb2NhbGVTcGFjZSwgaW50bExvY2FsZUhlYXBDZWxsVHlwZS5nZXQoKSwgSW50
bExvY2FsZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhpbnRsTnVt
YmVyRm9ybWF0U3BhY2UsIGludGxOdW1iZXJGb3JtYXRIZWFwQ2VsbFR5cGUuZ2V0KCksIEludGxO
dW1iZXJGb3JtYXQpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coaW50
bFBsdXJhbFJ1bGVzU3BhY2UsIGludGxQbHVyYWxSdWxlc0hlYXBDZWxsVHlwZS5nZXQoKSwgSW50
bFBsdXJhbFJ1bGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggNDEyOTI0N2Nk
MjQ1NmQ2NzU2OTcwN2M5MmI2YzdmYzIzOWMyZmEwOS4uNmU3OTlkNDUyZjU3OTQxOTIxY2ZjNjRh
Mjc0ZjBiZTUzOGYxYmNkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0xMjgs
NiArMTI4LDcgQEAgY2xhc3MgSW50bENhY2hlOwogY2xhc3MgSW50bENvbGxhdG9yOwogY2xhc3Mg
SW50bERhdGVUaW1lRm9ybWF0OwogY2xhc3MgSW50bERpc3BsYXlOYW1lczsKK2NsYXNzIEludGxM
aXN0Rm9ybWF0OwogY2xhc3MgSW50bExvY2FsZTsKIGNsYXNzIEludGxOdW1iZXJGb3JtYXQ7CiBj
bGFzcyBJbnRsUGx1cmFsUnVsZXM7CkBAIC00MDgsNiArNDA5LDcgQEAgY2xhc3MgVk0gOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8
Vk0+IHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiBpbnRsQ29sbGF0b3JI
ZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gaW50bERh
dGVUaW1lRm9ybWF0SGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2Vs
bFR5cGU+IGludGxEaXNwbGF5TmFtZXNIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRy
PElzb0hlYXBDZWxsVHlwZT4gaW50bExpc3RGb3JtYXRIZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gaW50bExvY2FsZUhlYXBDZWxsVHlwZTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiBpbnRsTnVtYmVyRm9ybWF0SGVhcENlbGxU
eXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IGludGxQbHVyYWxSdWxl
c0hlYXBDZWxsVHlwZTsKQEAgLTU3MCw2ICs1NzIsNyBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxWTT4sIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxWTT4gewog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50bENvbGxhdG9yU3BhY2Up
CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsRGF0ZVRpbWVGb3Jt
YXRTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxEaXNw
bGF5TmFtZXNTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGlu
dGxMaXN0Rm9ybWF0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihpbnRsTG9jYWxlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihpbnRsTnVtYmVyRm9ybWF0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihpbnRsUGx1cmFsUnVsZXNTcGFjZSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmNhZGI1NTM2MzMyNDY5NDdhZmIwMDRiZWNk
ZTNjODhiMmU4MDFjMi4uMmQ1MTAzOWQ1MjY4MTBkMmUwMzk2ZDk0NjU1MzM2NTcwYmZjZjE0MiAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAyMC0xMC0yNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgorCisgICAgICAgIFtFQ01BLTQwMl0gSW1wbGVtZW50IEludGwuTGlzdEZvcm1hdCAoYWZ0
ZXIgSUNVIHVsaXN0Zm10X29wZW5Gb3JUeXBlIGdldHMgc3RhYmxlKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Nzc1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvaW50bC1saXN0Zm9ybWF0
LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKHNob3VsZE5vdFRocm93
KToKKyAgICAgICAgKHNob3VsZFRocm93KToKKyAgICAgICAgKHR5cGVvZi5JbnRsLkxpc3RGb3Jt
YXQuc3RyaW5nX2FwcGVhcmVkX2hlcmUuc2hvdWxkQmUubmV3LkludGwuTGlzdEZvcm1hdC5EZXJp
dmVkTGlzdEZvcm1hdCk6CisgICAgICAgICh0eXBlb2YuSW50bC5MaXN0Rm9ybWF0LnN0cmluZ19h
cHBlYXJlZF9oZXJlLnNob3VsZEJlLm5ldy5JbnRsLkxpc3RGb3JtYXQpOgorCiAyMDIwLTEwLTIx
ICBDYWl0bGluIFBvdHRlciAgPGNhaXRwQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0pTQ10gc3Vw
cG9ydCBvcF9nZXRfcHJpdmF0ZV9uYW1lIGluIERGRyBhbmQgRlRMCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3N0cmVzcy9pbnRsLWxpc3Rmb3JtYXQuanMgYi9KU1Rlc3RzL3N0cmVzcy9pbnRsLWxpc3Rm
b3JtYXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU0NDUyY2Q5YTgyMWE0N2FlOWM4NTcxZTEzYTQ2ODlmMjFi
MGIxNgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2ludGwtbGlzdGZvcm1hdC5q
cwpAQCAtMCwwICsxLDIwMCBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkg
eworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
YGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9YCk7Cit9CisKK2Z1bmN0aW9u
IHNob3VsZE5vdFRocm93KGZ1bmMpIHsKKyAgICBmdW5jKCk7Cit9CisKK2Z1bmN0aW9uIHNob3Vs
ZFRocm93KGZ1bmMsIGVycm9yVHlwZSkgeworICAgIGxldCBlcnJvcjsKKyAgICB0cnkgeworICAg
ICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAg
fQorCisgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBlcnJvclR5cGUpKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXJyb3JUeXBlLm5hbWV9IWApOworfQorCitpZiAodHlw
ZW9mIEludGwuTGlzdEZvcm1hdCAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICB7CisgICAgICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTQwMi8jcGx1cmFscnVsZXMtb2JqZWN0cworICAg
ICAgICAvLyBUaGUgSW50bC5MaXN0Rm9ybWF0IENvbnN0cnVjdG9yCisKKyAgICAgICAgLy8gVGhl
IExpc3RGb3JtYXQgY29uc3RydWN0b3IgaXMgdGhlICVMaXN0Rm9ybWF0JSBpbnRyaW5zaWMgb2Jq
ZWN0IGFuZCBhIHN0YW5kYXJkIGJ1aWx0LWluIHByb3BlcnR5IG9mIHRoZSBJbnRsIG9iamVjdC4K
KyAgICAgICAgc2hvdWxkQmUoSW50bC5MaXN0Rm9ybWF0IGluc3RhbmNlb2YgRnVuY3Rpb24sIHRy
dWUpOworCisgICAgICAgIC8vIEludGwuTGlzdEZvcm1hdCAoWyBsb2NhbGVzIFssIG9wdGlvbnMg
XSBdKQorCisgICAgICAgIC8vIElmIE5ld1RhcmdldCBpcyB1bmRlZmluZWQsIHRocm93IGEgVHlw
ZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0Rm9y
bWF0KCksIFR5cGVFcnJvcik7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IEludGwuTGlzdEZv
cm1hdC5jYWxsKHt9KSwgVHlwZUVycm9yKTsKKworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBu
ZXcgSW50bC5MaXN0Rm9ybWF0KCckJyksIFJhbmdlRXJyb3IpOworICAgICAgICBzaG91bGRUaHJv
dygoKSA9PiBuZXcgSW50bC5MaXN0Rm9ybWF0KCdlbicsIG51bGwpLCBUeXBlRXJyb3IpOworICAg
ICAgICBzaG91bGRCZShuZXcgSW50bC5MaXN0Rm9ybWF0KCkgaW5zdGFuY2VvZiBJbnRsLkxpc3RG
b3JtYXQsIHRydWUpOworCisgICAgICAgIC8vIFN1YmNsYXNzYWJsZQorICAgICAgICB7CisgICAg
ICAgICAgICBjbGFzcyBEZXJpdmVkTGlzdEZvcm1hdCBleHRlbmRzIEludGwuTGlzdEZvcm1hdCB7
fTsKKyAgICAgICAgICAgIHNob3VsZEJlKChuZXcgRGVyaXZlZExpc3RGb3JtYXQpIGluc3RhbmNl
b2YgRGVyaXZlZExpc3RGb3JtYXQsIHRydWUpOworICAgICAgICAgICAgc2hvdWxkQmUoKG5ldyBE
ZXJpdmVkTGlzdEZvcm1hdCkgaW5zdGFuY2VvZiBJbnRsLkxpc3RGb3JtYXQsIHRydWUpOworICAg
ICAgICAgICAgc2hvdWxkQmUobmV3IERlcml2ZWRMaXN0Rm9ybWF0KCdlbicpLmZvcm1hdChbJ09y
YW5nZScsICdBcHBsZScsICdMZW1vbiddKSwgJ09yYW5nZSwgQXBwbGUsIGFuZCBMZW1vbicpOwor
ICAgICAgICAgICAgc2hvdWxkQmUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBEZXJpdmVkTGlz
dEZvcm1hdCksIERlcml2ZWRMaXN0Rm9ybWF0LnByb3RvdHlwZSk7CisgICAgICAgICAgICBzaG91
bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBEZXJp
dmVkTGlzdEZvcm1hdCkpLCBJbnRsLkxpc3RGb3JtYXQucHJvdG90eXBlKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFByb3BlcnRpZXMgb2YgdGhlIEludGwuTGlzdEZvcm1hdCBDb25zdHJ1Y3Rv
cgorCisgICAgICAgIC8vIGxlbmd0aCBwcm9wZXJ0eSAod2hvc2UgdmFsdWUgaXMgMCkKKyAgICAg
ICAgc2hvdWxkQmUoSW50bC5MaXN0Rm9ybWF0Lmxlbmd0aCwgMCk7CisKKyAgICAgICAgLy8gSW50
bC5MaXN0Rm9ybWF0LnByb3RvdHlwZQorCisgICAgICAgIC8vIFRoaXMgcHJvcGVydHkgaGFzIHRo
ZSBhdHRyaWJ1dGVzIHsgW1tXcml0YWJsZV1dOiBmYWxzZSwgW1tFbnVtZXJhYmxlXV06IGZhbHNl
LCBbW0NvbmZpZ3VyYWJsZV1dOiBmYWxzZSB9LgorICAgICAgICBzaG91bGRCZShPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTGlzdEZvcm1hdCwgJ3Byb3RvdHlwZScpLndyaXRh
YmxlLCBmYWxzZSk7CisgICAgICAgIHNob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSW50bC5MaXN0Rm9ybWF0LCAncHJvdG90eXBlJykuZW51bWVyYWJsZSwgZmFsc2UpOwor
ICAgICAgICBzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTGlz
dEZvcm1hdCwgJ3Byb3RvdHlwZScpLmNvbmZpZ3VyYWJsZSwgZmFsc2UpOworCisgICAgICAgIC8v
IEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YgKGxvY2FsZXMgWywgb3B0aW9ucyBd
KQorCisgICAgICAgIC8vIFRoZSB2YWx1ZSBvZiB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIHRoZSBz
dXBwb3J0ZWRMb2NhbGVzT2YgbWV0aG9kIGlzIDEuCisgICAgICAgIHNob3VsZEJlKEludGwuTGlz
dEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoLCAxKTsKKworICAgICAgICAvLyBSZXR1
cm5zIFN1cHBvcnRlZExvY2FsZXMKKyAgICAgICAgc2hvdWxkQmUoSW50bC5MaXN0Rm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZigpIGluc3RhbmNlb2YgQXJyYXksIHRydWUpOworICAgICAgICAvLyBE
b2Vzbid0IGNhcmUgYWJvdXQgYHRoaXNgLgorICAgICAgICBzaG91bGRCZShKU09OLnN0cmluZ2lm
eShJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykpLCAn
WyJlbiJdJyk7CisgICAgICAgIHNob3VsZEJlKEpTT04uc3RyaW5naWZ5KEludGwuTGlzdEZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykpLCAnWyJlbiJdJyk7CisgICAgICAg
IHNob3VsZEJlKEpTT04uc3RyaW5naWZ5KEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YuY2FsbCgxLCAnZW4nKSksICdbImVuIl0nKTsKKyAgICAgICAgLy8gSWdub3JlcyBub24tb2Jq
ZWN0LCBub24tc3RyaW5nIGxpc3QuCisgICAgICAgIHNob3VsZEJlKEpTT04uc3RyaW5naWZ5KElu
dGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkpLCAnW10nKTsKKyAgICAgICAgLy8g
TWFrZXMgYW4gYXJyYXkgb2YgdGFncy4KKyAgICAgICAgc2hvdWxkQmUoSlNPTi5zdHJpbmdpZnko
SW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4nKSksICdbImVuIl0nKTsKKyAg
ICAgICAgLy8gSGFuZGxlcyBhcnJheS1saWtlIG9iamVjdHMgd2l0aCBob2xlcy4KKyAgICAgICAg
c2hvdWxkQmUoSlNPTi5zdHJpbmdpZnkoSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
Zih7IGxlbmd0aDogNCwgMTogJ2VuJywgMDogJ2VzJywgMzogJ2RlJyB9KSksICdbImVzIiwiZW4i
LCJkZSJdJyk7CisgICAgICAgIC8vIERlZHVwbGljYXRlcyB0YWdzLgorICAgICAgICBzaG91bGRC
ZShKU09OLnN0cmluZ2lmeShJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgJ2Vu
JywgJ3B0JywgJ2VuJywgJ2VzJyBdKSksICdbImVuIiwicHQiLCJlcyJdJyk7CisgICAgICAgIC8v
IENhbm9uaWNhbGl6ZXMgdGFncy4KKyAgICAgICAgc2hvdWxkQmUoCisgICAgICAgICAgICBKU09O
LnN0cmluZ2lmeShJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVz
LXZhcmlBbnQtZk9PYmFyLTFhYmMtVS1rbi10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSksCisg
ICAgICAgICAgICAkdm0uaWN1VmVyc2lvbigpID49IDY3CisgICAgICAgICAgICAgICAgPyAnWyJl
bi1MYXRuLVVTLTFhYmMtZm9vYmFyLXZhcmlhbnQtYS1hYS1hYWEtdS1rbi14LXJlc2VydmVkIl0n
CisgICAgICAgICAgICAgICAgOiAnWyJlbi1MYXRuLVVTLXZhcmlhbnQtZm9vYmFyLTFhYmMtYS1h
YS1hYWEtdS1rbi14LXJlc2VydmVkIl0nCisgICAgICAgICk7CisgICAgICAgIC8vIFRocm93cyBv
biBwcm9ibGVtcyB3aXRoIGxlbmd0aCwgZ2V0LCBvciB0b1N0cmluZy4KKyAgICAgICAgc2hvdWxk
VGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3Jl
YXRlKG51bGwsIHsgbGVuZ3RoOiB7IGdldCgpIHsgdGhyb3cgbmV3IEVycm9yKCk7IH0gfSB9KSks
IEVycm9yKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IHZhbHVlOiAxIH0s
IDA6IHsgZ2V0KCkgeyB0aHJvdyBuZXcgRXJyb3IoKTsgfSB9IH0pKSwgRXJyb3IpOworICAgICAg
ICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsg
eyB0b1N0cmluZygpIHsgdGhyb3cgbmV3IEVycm9yKCk7IH0gfSBdKSwgRXJyb3IpOworICAgICAg
ICAvLyBUaHJvd3Mgb24gYmFkIHRhZ3MuCisgICAgICAgIHNob3VsZFRocm93KCgpID0+IEludGwu
TGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpLCBSYW5nZUVycm9yKTsKKyAg
ICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
ZigneC1zb21lLXRoaW5nJyksIFJhbmdlRXJyb3IpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9
PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgNSBdKSwgVHlwZUVycm9yKTsK
KyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZignJyksIFJhbmdlRXJyb3IpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxp
c3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhJyksIFJhbmdlRXJyb3IpOworICAgICAgICBz
aG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNk
ZWZnaGlqJyksIFJhbmdlRXJyb3IpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxp
c3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpLCBSYW5nZUVycm9yKTsKKyAgICAgICAg
c2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4t
QC1hYmMnKSwgUmFuZ2VFcnJvcik7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IEludGwuTGlz
dEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUnKSwgUmFuZ2VFcnJvcik7CisgICAgICAg
IHNob3VsZFRocm93KCgpID0+IEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2Vu
LXUta24tdHJ1ZS11LWtvLXRydWUnKSwgUmFuZ2VFcnJvcik7CisgICAgICAgIHNob3VsZFRocm93
KCgpID0+IEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSwgUmFuZ2VF
cnJvcik7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IEludGwuTGlzdEZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoJ2VuLSonKSwgUmFuZ2VFcnJvcik7CisgICAgICAgIHNob3VsZFRocm93KCgp
ID0+IEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLScpLCBSYW5nZUVycm9y
KTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZignZW4tLVVTJyksIFJhbmdlRXJyb3IpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9
PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdpLWtsaW5nb24nKSwgUmFuZ2VF
cnJvcik7IC8vIGdyYW5kZmF0aGVyZWQgdGFnIGlzIG5vdCBhY2NlcHRlZCBieSBJc1N0cnVjdHVy
YWxseVZhbGlkTGFuZ3VhZ2VUYWcKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigneC1lbi1VUy0xMjM0NScpLCBSYW5nZUVycm9yKTsK
KyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZigneC0xMjM0NS0xMjM0NS1lbi1VUycpLCBSYW5nZUVycm9yKTsKKyAgICAgICAgc2hvdWxk
VGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigneC1lbi1VUy0x
MjM0NS0xMjM0NScpLCBSYW5nZUVycm9yKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50
bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigneC1lbi11LWZvbycpLCBSYW5nZUVycm9y
KTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZigneC1lbi11LWZvby11LWJhcicpLCBSYW5nZUVycm9yKTsKKworICAgICAgICAvLyBB
Y2NlcHRzIHZhbGlkIHRhZ3MKKyAgICAgICAgdmFyIHZhbGlkTGFuZ3VhZ2VUYWdzID0gWworICAg
ICAgICAgICAgJ2RlJywgLy8gSVNPIDYzOSBsYW5ndWFnZSBjb2RlCisgICAgICAgICAgICAnZGUt
REUnLCAvLyArIElTTyAzMTY2LTEgY291bnRyeSBjb2RlCisgICAgICAgICAgICAnREUtZGUnLCAv
LyB0YWdzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCisgICAgICAgICAgICAnY21uJywgLy8gSVNPIDYz
OSBsYW5ndWFnZSBjb2RlCisgICAgICAgICAgICAnY21uLUhhbnMnLCAvLyArIHNjcmlwdCBjb2Rl
CisgICAgICAgICAgICAnQ01OLWhBTlMnLCAvLyB0YWdzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCisg
ICAgICAgICAgICAnY21uLWhhbnMtY24nLCAvLyArIElTTyAzMTY2LTEgY291bnRyeSBjb2RlCisg
ICAgICAgICAgICAnZXMtNDE5JywgLy8gKyBVTiBNLjQ5IHJlZ2lvbiBjb2RlCisgICAgICAgICAg
ICAnZXMtNDE5LXUtbnUtbGF0bi1jdS1ib2InLCAvLyArIFVuaWNvZGUgbG9jYWxlIGV4dGVuc2lv
biBzZXF1ZW5jZQorICAgICAgICAgICAgJ2Ntbi1oYW5zLWNuLXQtY2EtdS1jYS14LXQtdScsIC8v
IHNpbmdsZXRvbiBzdWJ0YWdzIGNhbiBhbHNvIGJlIHVzZWQgYXMgcHJpdmF0ZSB1c2Ugc3VidGFn
cworICAgICAgICAgICAgJ2Vub2NoaWFuLWVub2NoaWFuJywgLy8gbGFuZ3VhZ2UgYW5kIHZhcmlh
bnQgc3VidGFncyBtYXkgYmUgdGhlIHNhbWUKKyAgICAgICAgICAgICdkZS1ncmVnb3J5LXUtY2Et
Z3JlZ29yeScsIC8vIHZhcmlhbnQgYW5kIGV4dGVuc2lvbiBzdWJ0YWdzIG1heSBiZSB0aGUgc2Ft
ZQorICAgICAgICAgICAgJ2FhLWEtZm9vLXgtYS1mb28tYmFyJywgLy8gdmFyaWFudCBzdWJ0YWdz
IGNhbiBhbHNvIGJlIHVzZWQgYXMgcHJpdmF0ZSB1c2Ugc3VidGFncworICAgICAgICBdOworICAg
ICAgICBmb3IgKHZhciB2YWxpZExhbmd1YWdlVGFnIG9mIHZhbGlkTGFuZ3VhZ2VUYWdzKQorICAg
ICAgICAgICAgc2hvdWxkTm90VGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZih2YWxpZExhbmd1YWdlVGFnKSk7CisKKyAgICAgICAgLy8gUHJvcGVydGllcyBvZiB0
aGUgSW50bC5MaXN0Rm9ybWF0IFByb3RvdHlwZSBPYmplY3QKKworICAgICAgICAvLyBUaGUgSW50
bC5MaXN0Rm9ybWF0IHByb3RvdHlwZSBvYmplY3QgaXMgaXRzZWxmIGFuIG9yZGluYXJ5IG9iamVj
dC4KKyAgICAgICAgc2hvdWxkQmUoT2JqZWN0LmdldFByb3RvdHlwZU9mKEludGwuTGlzdEZvcm1h
dC5wcm90b3R5cGUpLCBPYmplY3QucHJvdG90eXBlKTsKKworICAgICAgICAvLyBJbnRsLkxpc3RG
b3JtYXQucHJvdG90eXBlLmNvbnN0cnVjdG9yCisgICAgICAgIC8vIFRoZSBpbml0aWFsIHZhbHVl
IG9mIEludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgdGhlIGludHJpbnNp
YyBvYmplY3QgJUxpc3RGb3JtYXQlLgorICAgICAgICBzaG91bGRCZShJbnRsLkxpc3RGb3JtYXQu
cHJvdG90eXBlLmNvbnN0cnVjdG9yLCBJbnRsLkxpc3RGb3JtYXQpOworCisgICAgICAgIC8vIElu
dGwuTGlzdEZvcm1hdC5wcm90b3R5cGUgWyBAQHRvU3RyaW5nVGFnIF0KKyAgICAgICAgLy8gVGhl
IGluaXRpYWwgdmFsdWUgb2YgdGhlIEBAdG9TdHJpbmdUYWcgcHJvcGVydHkgaXMgdGhlIHN0cmlu
ZyB2YWx1ZSAiSW50bC5MaXN0Rm9ybWF0Ii4KKyAgICAgICAgc2hvdWxkQmUoSW50bC5MaXN0Rm9y
bWF0LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddLCAnSW50bC5MaXN0Rm9ybWF0Jyk7Cisg
ICAgICAgIHNob3VsZEJlKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChJbnRsLkxpc3RG
b3JtYXQucHJvdG90eXBlKSwgJ1tvYmplY3QgSW50bC5MaXN0Rm9ybWF0XScpOworICAgICAgICAv
LyBUaGlzIHByb3BlcnR5IGhhcyB0aGUgYXR0cmlidXRlcyB7IFtbV3JpdGFibGVdXTogZmFsc2Us
IFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTogdHJ1ZSB9LgorICAgICAg
ICBzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTGlzdEZvcm1h
dC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZykud3JpdGFibGUsIGZhbHNlKTsKKyAgICAg
ICAgc2hvdWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkxpc3RGb3Jt
YXQucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcpLmVudW1lcmFibGUsIGZhbHNlKTsKKyAg
ICAgICAgc2hvdWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkxpc3RG
b3JtYXQucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcpLmNvbmZpZ3VyYWJsZSwgdHJ1ZSk7
CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3QgbGYgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KCJl
biIsIHsKKyAgICAgICAgICAgIGxvY2FsZU1hdGNoZXI6ICJiZXN0IGZpdCIsCisgICAgICAgICAg
ICB0eXBlOiAiY29uanVuY3Rpb24iLAorICAgICAgICAgICAgc3R5bGU6ICJsb25nIiwKKyAgICAg
ICAgfSk7CisgICAgICAgIHNob3VsZEJlKGxmLmZvcm1hdChbJ01vdG9yY3ljbGUnLCAnVHJ1Y2sn
ICwgJ0NhciddKSwgYE1vdG9yY3ljbGUsIFRydWNrLCBhbmQgQ2FyYCk7CisgICAgICAgIHNob3Vs
ZEJlKGxmLmZvcm1hdChbXSksIGBgKTsKKyAgICAgICAgc2hvdWxkQmUobGYuZm9ybWF0KCksIGBg
KTsKKyAgICAgICAgc2hvdWxkQmUobGYuZm9ybWF0KHVuZGVmaW5lZCksIGBgKTsKKyAgICAgICAg
c2hvdWxkQmUobGYuZm9ybWF0KCJBcHBsZSIpLCBgQSwgcCwgcCwgbCwgYW5kIGVgKTsKKyAgICAg
ICAgc2hvdWxkVGhyb3coKCkgPT4gbGYuZm9ybWF0KDQyKSwgVHlwZUVycm9yKTsKKyAgICAgICAg
c2hvdWxkVGhyb3coKCkgPT4gbGYuZm9ybWF0KG51bGwpLCBUeXBlRXJyb3IpOworICAgICAgICBz
aG91bGRUaHJvdygoKSA9PiBsZi5mb3JtYXQoW251bGxdKSwgVHlwZUVycm9yKTsKKyAgICAgICAg
c2hvdWxkQmUoSlNPTi5zdHJpbmdpZnkobGYucmVzb2x2ZWRPcHRpb25zKCkpLCBgeyJsb2NhbGUi
OiJlbiIsInR5cGUiOiJjb25qdW5jdGlvbiIsInN0eWxlIjoibG9uZyJ9YCk7CisgICAgICAgIHNo
b3VsZEJlKEpTT04uc3RyaW5naWZ5KFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKElu
dGwuTGlzdEZvcm1hdC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZykpLCBgeyJ2YWx1ZSI6
IkludGwuTGlzdEZvcm1hdCIsIndyaXRhYmxlIjpmYWxzZSwiZW51bWVyYWJsZSI6ZmFsc2UsImNv
bmZpZ3VyYWJsZSI6dHJ1ZX1gKTsKKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBsaXN0ID0g
WydNb3RvcmN5Y2xlJywgJ0J1cycsICdDYXInXTsKKyAgICAgICAgc2hvdWxkQmUobmV3IEludGwu
TGlzdEZvcm1hdCgnZW4tR0InLCB7IHN0eWxlOiAnbG9uZycsIHR5cGU6ICdjb25qdW5jdGlvbicg
fSkuZm9ybWF0KGxpc3QpLCBgTW90b3JjeWNsZSwgQnVzIGFuZCBDYXJgKTsKKyAgICAgICAgc2hv
dWxkQmUobmV3IEludGwuTGlzdEZvcm1hdCgnZW4tR0InLCB7IHN0eWxlOiAnc2hvcnQnLCB0eXBl
OiAnZGlzanVuY3Rpb24nIH0pLmZvcm1hdChsaXN0KSwgYE1vdG9yY3ljbGUsIEJ1cyBvciBDYXJg
KTsKKyAgICAgICAgc2hvdWxkQmUobmV3IEludGwuTGlzdEZvcm1hdCgnZW4tR0InLCB7IHN0eWxl
OiAnbmFycm93JywgdHlwZTogJ3VuaXQnIH0pLmZvcm1hdChsaXN0KSwgYE1vdG9yY3ljbGUgQnVz
IENhcmApOworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0IGxpc3QgPSBbJ01vdG9yY3ljbGUn
LCAnQnVzJywgJ0NhciddOworICAgICAgICBjb25zdCBleHBlY3RlZCA9IFsKKyAgICAgICAgICAg
IHsgInR5cGUiOiAiZWxlbWVudCIsICJ2YWx1ZSI6ICJNb3RvcmN5Y2xlIiB9LAorICAgICAgICAg
ICAgeyAidHlwZSI6ICJsaXRlcmFsIiwgInZhbHVlIjogIiwgIiB9LAorICAgICAgICAgICAgeyAi
dHlwZSI6ICJlbGVtZW50IiwgInZhbHVlIjogIkJ1cyIgfSwKKyAgICAgICAgICAgIHsgInR5cGUi
OiAibGl0ZXJhbCIsICJ2YWx1ZSI6ICIgYW5kICIgfSwKKyAgICAgICAgICAgIHsgInR5cGUiOiAi
ZWxlbWVudCIsICJ2YWx1ZSI6ICJDYXIiIH0KKyAgICAgICAgXTsKKworICAgICAgICBjb25zdCBs
ZiA9IG5ldyBJbnRsLkxpc3RGb3JtYXQoJ2VuLUdCJywgeyBzdHlsZTogJ2xvbmcnLCB0eXBlOiAn
Y29uanVuY3Rpb24nIH0pOworICAgICAgICBjb25zdCBwYXJ0cyA9IGxmLmZvcm1hdFRvUGFydHMo
bGlzdCk7CisgICAgICAgIHNob3VsZEJlKHBhcnRzLmxlbmd0aCwgZXhwZWN0ZWQubGVuZ3RoKTsK
KyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgc2hvdWxkQmUocGFydHNbaV0udHlwZSwgZXhwZWN0ZWRbaV0udHlwZSk7CisgICAgICAg
ICAgICBzaG91bGRCZShwYXJ0c1tpXS52YWx1ZSwgZXhwZWN0ZWRbaV0udmFsdWUpOworICAgICAg
ICB9CisKKyAgICAgICAgc2hvdWxkQmUoSlNPTi5zdHJpbmdpZnkobGYuZm9ybWF0VG9QYXJ0cyhb
XSkpLCBgW11gKTsKKyAgICAgICAgc2hvdWxkQmUoSlNPTi5zdHJpbmdpZnkobGYuZm9ybWF0VG9Q
YXJ0cygpKSwgYFtdYCk7CisgICAgICAgIHNob3VsZEJlKEpTT04uc3RyaW5naWZ5KGxmLmZvcm1h
dFRvUGFydHModW5kZWZpbmVkKSksIGBbXWApOworICAgICAgICBzaG91bGRCZShKU09OLnN0cmlu
Z2lmeShsZi5mb3JtYXRUb1BhcnRzKCJBcHBsZSIpKSwgYFt7InR5cGUiOiJlbGVtZW50IiwidmFs
dWUiOiJBIn0seyJ0eXBlIjoibGl0ZXJhbCIsInZhbHVlIjoiLCAifSx7InR5cGUiOiJlbGVtZW50
IiwidmFsdWUiOiJwIn0seyJ0eXBlIjoibGl0ZXJhbCIsInZhbHVlIjoiLCAifSx7InR5cGUiOiJl
bGVtZW50IiwidmFsdWUiOiJwIn0seyJ0eXBlIjoibGl0ZXJhbCIsInZhbHVlIjoiLCAifSx7InR5
cGUiOiJlbGVtZW50IiwidmFsdWUiOiJsIn0seyJ0eXBlIjoibGl0ZXJhbCIsInZhbHVlIjoiIGFu
ZCAifSx7InR5cGUiOiJlbGVtZW50IiwidmFsdWUiOiJlIn1dYCk7CisgICAgICAgIHNob3VsZFRo
cm93KCgpID0+IGxmLmZvcm1hdFRvUGFydHMoNDIpLCBUeXBlRXJyb3IpOworICAgICAgICBzaG91
bGRUaHJvdygoKSA9PiBsZi5mb3JtYXRUb1BhcnRzKG51bGwpLCBUeXBlRXJyb3IpOworICAgICAg
ICBzaG91bGRUaHJvdygoKSA9PiBsZi5mb3JtYXRUb1BhcnRzKFtudWxsXSksIFR5cGVFcnJvcik7
CisgICAgfQorfQo=
</data>
<flag name="commit-queue"
          id="428647"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412239</attachid>
            <date>2020-10-24 00:47:36 -0700</date>
            <delta_ts>2020-10-24 12:41:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209775-20201024004735.patch</filename>
            <type>text/plain</type>
            <size>77706</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4OTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
Njg3MWIyNTA3NjIxMWM2NmQ1ZGQ2MzhlYjk4ZmViODI4M2VkZDE3Li43MTZiYWMxZGY5YTk5YzVk
YTA1YmY0YzUwMjMwMDQ5ZTEyMGRiOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMC0xMC0yNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtFQ01BLTQwMl0gSW1wbGVtZW50IEludGwuTGlzdEZvcm1hdCAoYWZ0ZXIg
SUNVIHVsaXN0Zm10X29wZW5Gb3JUeXBlIGdldHMgc3RhYmxlKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Nzc1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIEludGwu
TGlzdEZvcm1hdC4gSW50bC5MaXN0Rm9ybWF0IHJlcXVpcmVzIHVsaXN0Zm10X29wZW5Gb3JUeXBl
LgorICAgICAgICBCdXQgaXQgaXMgYXZhaWxhYmxlIGFmdGVyIElDVSA2NywgYW5kIGl0IGlzIGRy
YWZ0ICh1bnN0YWJsZSkgQVBJIGluIElDVSA2Ny4KKyAgICAgICAgQnV0IG5vdywgdGhpcyBmdW5j
dGlvbiBpcyBzdGFibGUgaW4gSUNVIDY4IHdpdGhvdXQgc2lnbmF0dXJlIGNoYW5nZSBhbmQgbm8g
bWFqb3IKKyAgICAgICAgY2hhbmdlIGhhcHBlbmVkIHRvIHRoaXMgQVBJLiBUaHVzLCB3ZSBjYW4g
YXNzdW1lIHRoYXQgdGhpcyBBUEkgc2lnbmF0dXJlIHdvbid0IGJlIGNoYW5nZWQuCisgICAgICAg
IFdlIHNwZWNpYWxseSB1bmRlZiBVX0hJREVfRFJBRlRfQVBJIGZvciB1bmljb2RlL3VsaXN0Zm9y
bWF0dGVyLmggdG8gdXNlIHRoaXMgZHJhZnQgKGJ1dCBzdGFibGUpIEFQSXMuCisKKyAgICAgICAg
V2hpbGUgbWFjT1MgLyBpT1Mgc2hpcHBpbmcgSUNVIChBcHBsZUlDVSkgaXMgSUNVIDY2LCBBcHBs
ZUlDVSBoYXMgdWxpc3RmbXRfb3BlbkZvclR5cGUgYW5kIHJlbGF0ZWQgQVBJcworICAgICAgICBl
dmVuIGluIElDVSA2Ni4gV2UgdXNlIHRoZXNlIEFQSXMgaW4gQXBwbGVJQ1UgNjYgdG8gaW1wbGVt
ZW50IEludGwuTGlzdEZvcm1hdC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMu
aDoKKyAgICAgICAgKiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXMuY3BwOgorICAgICAgICAoSlND
OjpJbnRsRGlzcGxheU5hbWVzOjppbml0aWFsaXplRGlzcGxheU5hbWVzKToKKyAgICAgICAgKiBy
dW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlVMaXN0Rm9y
bWF0dGVyRGVsZXRlcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbnRsTGlzdEZvcm1hdDo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6OkludGxMaXN0Rm9ybWF0KToKKyAgICAg
ICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SW50bExpc3RGb3JtYXQ6OmluaXRpYWxpemVMaXN0Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nTGlzdEZyb21JdGVyYWJsZSk6CisgICAgICAgIChKU0M6Okxpc3RGb3JtYXRJbnB1dDo6TGlz
dEZvcm1hdElucHV0KToKKyAgICAgICAgKEpTQzo6TGlzdEZvcm1hdElucHV0OjpzaXplIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6TGlzdEZvcm1hdElucHV0OjpzdHJpbmdQb2ludGVycyBjb25zdCk6
CisgICAgICAgIChKU0M6Okxpc3RGb3JtYXRJbnB1dDo6c3RyaW5nTGVuZ3RocyBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Ojpmb3JtYXQgY29uc3QpOgorICAgICAgICAoSlND
OjpJbnRsTGlzdEZvcm1hdDo6Zm9ybWF0VG9QYXJ0cyBjb25zdCk6CisgICAgICAgIChKU0M6Oklu
dGxMaXN0Rm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpJbnRs
TGlzdEZvcm1hdDo6c3R5bGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpJbnRsTGlzdEZvcm1hdDo6
dHlwZVN0cmluZyk6CisgICAgICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdC5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6SW50bExpc3RGb3JtYXRDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAg
ICAgICAgKiBydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuaDogQWRkZWQuCisgICAg
ICAgICogcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpJbnRsTGlzdEZvcm1hdFByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
SW50bExpc3RGb3JtYXRQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkludGxMaXN0Rm9ybWF0UHJvdG90eXBlOjpJbnRsTGlzdEZvcm1hdFByb3RvdHlwZSk6CisgICAg
ICAgIChKU0M6OkludGxMaXN0Rm9ybWF0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9J
bnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVMaXN0Rm9ybWF0Q29uc3RydWN0b3IpOgor
ICAgICAgICAoSlNDOjpJbnRsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVu
dGltZS9JbnRsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OmludGxMaXN0Rm9ybWF0QXZhaWxhYmxl
TG9jYWxlcyk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Omxpc3RGb3JtYXRTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKwogMjAyMC0xMC0yMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2luZyBXQVNNIGZ1bmN0aW9uIHNpemUgYXMgdGhlIGNh
cCBmb3IgY2hvb3NpbmcgYSByZWdpc3RlciBhbGxvY2F0b3IgY2F1c2VzIHBlcmZvcm1hbmNlIHJl
Z3Jlc3Npb25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDViNGM1ODQ4
YzU4Y2E2NmJjNjU2ZWRhYThmZjNjOWNmZjdlY2YwMWYuLmUzZDhhYjBhNDcwOTZkMGQxMTNlNzgz
YWRkMTU0MjhmNTc4NGMyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAg
LTcyLDYgKzcyLDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX09CSkVDVF9MVVRfU09VUkNFUwogICAg
IHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvSW50
bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvSW50bERpc3BsYXlOYW1l
c1Byb3RvdHlwZS5jcHAKKyAgICBydW50aW1lL0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuY3Bw
CisgICAgcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0lu
dGxMb2NhbGVQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmls
ZWxpc3QgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxl
bGlzdAppbmRleCAzY2MwOTVhMmFjYmJmZDY1NTkzNTNlZDQ0MWE5ZmIyOTEzMzAxNWMzLi43ZWNi
OThiZWY5ZmZmZDlkNjM4ZDYyMTNhOGFlMzdkMjM0YWMxYTQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTM5
LDYgKzEzOSw4IEBAICQoUFJPSkVDVF9ESVIpL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29u
c3RydWN0b3IuY3BwCiAkKFBST0pFQ1RfRElSKS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFBy
b3RvdHlwZS5jcHAKICQoUFJPSkVDVF9ESVIpL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lc0NvbnN0
cnVjdG9yLmNwcAogJChQUk9KRUNUX0RJUikvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90
eXBlLmNwcAorJChQUk9KRUNUX0RJUikvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9y
LmNwcAorJChQUk9KRUNUX0RJUikvcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5jcHAK
ICQoUFJPSkVDVF9ESVIpL3J1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5jcHAKICQoUFJPSkVD
VF9ESVIpL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcAogJChQUk9KRUNU
X0RJUikvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Cmlu
ZGV4IGNlYjkyOGZkOTc3NTZkMDBiZDk3Y2NkZGUzZjU2MTE5YTA0MTZiNmUuLmYxZThlMzk1Mjhj
MzE3NjNkNWY5MjE3MDEzNzM5ZjNlZDQ5MTUzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTI5LDYgKzI5
LDggQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG8KICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUubHV0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9J
bnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IubHV0LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9JbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmx1
dC5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUv
SW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL0ludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmx1dC5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvSW50
bExvY2FsZVByb3RvdHlwZS5sdXQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL0phdmFTY3JpcHRDb3JlL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL0ludGxOdW1i
ZXJGb3JtYXRQcm90b3R5cGUubHV0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKaW5kZXggOWE5ZWFlOTNmNjljN2ZhYWFkZjJiMjVjN2QyNmFhOTlhNmQ1ODhiZi4u
Mjc1YTFjMWI2NzZlNzk3NGQyYThiY2NlNWJiYTI4ZmM4MDVmOGNlMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTE2MCw2ICsxNjAsOCBAQCBPQkpFQ1Rf
TFVUX0hFQURFUlMgPSBcCiAgICAgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmx1dC5oIFwK
ICAgICBJbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IubHV0LmggXAogICAgIEludGxEaXNwbGF5
TmFtZXNQcm90b3R5cGUubHV0LmggXAorICAgIEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IubHV0
LmggXAorICAgIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmx1dC5oIFwKICAgICBJbnRsTG9jYWxl
UHJvdG90eXBlLmx1dC5oIFwKICAgICBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IubHV0Lmgg
XAogICAgIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUubHV0LmggXApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA3ODk5ZDIwOWNiNzcxZjExNDY1YzZkNDQwNjBlY2RiNDZhZDU4NmZk
Li4wM2U3ZTFjYjJhOWFkY2Q4ZDhmY2ZkZWQ2NTA0ZjRhNjg2MmJhYTg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTc5NSw2ICsxNzk1LDkgQEAKIAkJRTMxMTc5QUEyMjg4Mzg2
MTAwNTE0QjJDIC8qIFN5bWJvbFRhYmxlT3JTY29wZURlcHRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzExNzlBOTIyODgzODVEMDA1MTRCMkMgLyog
U3ltYm9sVGFibGVPclNjb3BlRGVwdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFMzE2MTgxMzFFQzVGRTE3MDAwNkEyMTggLyogRE9NQW5ub3Rh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMx
NjE4MTAxRUM1RkUwODAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzE2MTgxNTFFQzVGRTI3MDAwNkEy
MTggLyogRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzE2MTgxMjFFQzVGRTA4MDAwNkEyMTggLyogRE9NQXR0
cmlidXRlR2V0dGVyU2V0dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJRTMxOENBNkIyNTQ0MDZCNjAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzMThDQTY1MjU0NDA2QjQwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9y
LmggKi87IH07CisJCUUzMThDQTZDMjU0NDA2QjYwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxOENBNjYy
NTQ0MDZCNDAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0LmggKi87IH07CisJCUUzMThDQTZEMjU0
NDA2QjYwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxOENBNjcyNTQ0MDZCNTAwNERDMTI5
IC8qIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmggKi87IH07CiAJCUUzMThDQkMxMUI4QUVGNTEw
MEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxOENCQkYxQjhBRUY1MTAwQTI5MjlEIC8qIEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTMxQzMxMzIyNTExQUZENzAwRTdBM0EwIC8qIEludGxDYWNoZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxQzMxMzAy
NTExQUZENjAwRTdBM0EwIC8qIEludGxDYWNoZS5oICovOyB9OwogCQlFMzIwMUMxRDFGOEU4MjM2
MDA3NkEwMzIgLyogSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEQwNjBCMUY4RTgxNDEwMDY0OUNGMiAvKiBK
U1NjcmlwdEZldGNoUGFyYW1ldGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xODQ2LDYgKzE4NDksNyBAQAogCQlFMzYzN0VFOTIzNkU1NkIw
MDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2MzdFRTcyMzZFNTZCMDAwOTZCRDBBIC8qIExpbmtUaW1l
Q29uc3RhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMzY1RjMzQTI0QUE2MjM5MDBDOTkxQjIgLyogSW50bERpc3BsYXlOYW1lc0NvbnN0cnVj
dG9yLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM2NUYzMzkyNEFBNjIxMjAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5s
dXQuaCAqLzsgfTsKIAkJRTM2NUYzM0IyNEFBNjIzQjAwQzk5MUIyIC8qIEludGxEaXNwbGF5TmFt
ZXNQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMzY1RjMzODI0QUE2MjExMDBDOTkxQjIgLyogSW50bERpc3BsYXlOYW1lc1Byb3Rv
dHlwZS5sdXQuaCAqLzsgfTsKKwkJRTM2NjQ0MUUyNTQ0MDlCMzAwMDE4NzZGIC8qIEludGxMaXN0
Rm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzMThDQTY5MjU0NDA2QjUwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdC5jcHAgKi87IH07CiAJ
CUUzNkI3NjcwMjJGOEQ2MTkwMEQwOTgxOCAvKiBXYXNtT01HRm9yT1NSRW50cnlQbGFuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzZCNzY2RjIyRjhE
NjExMDBEMDk4MTggLyogV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oICovOyB9OwogCQlFMzZDQzk0
NzIwODYzMTRGMDA1MUZGRDYgLyogV2FzbUNyZWF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM2Q0M5NDYyMDg2MzE0RjAwNTFGRkQ2IC8q
IFdhc21DcmVhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlFMzZFRENFNTI0RjA5NzU3MDBFNjBEQTIgLyogQ29uY3VycmVuY3kuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNkVEQ0U0MjRG
MDk3NTcwMEU2MERBMiAvKiBDb25jdXJyZW5jeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00OTcyLDYgKzQ5NzYsMTIgQEAKIAkJRTMxNjE4MTAx
RUM1RkUwODAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NQW5ub3RhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzE2MTgxMTFFQzVGRTA4MDAwNkEyMTggLyogRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUF0dHJpYnV0ZUdldHRl
clNldHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTYxODEyMUVDNUZF
MDgwMDA2QTIxOCAvKiBET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzMThDQTY1MjU0NDA2QjQwMDREQzEyOSAvKiBJbnRsTGlzdEZv
cm1hdENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGxM
aXN0Rm9ybWF0Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMx
OENBNjYyNTQ0MDZCNDAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEludGxMaXN0Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUzMThDQTY3MjU0NDA2QjUwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdFByb3Rv
dHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsTGlzdEZvcm1hdFBy
b3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzE4Q0E2ODI1NDQwNkI1
MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFMzE4Q0E2OTI1NDQwNkI1MDA0REMxMjkgLyogSW50bExp
c3RGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50bExp
c3RGb3JtYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzE4Q0E2QTI1NDQw
NkI1MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMxOENCQkUxQjhBRUY1MTAwQTI5MjlEIC8q
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTMxOENCQkYxQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMUMzMTMwMjUxMUFG
RDYwMEU3QTNBMCAvKiBJbnRsQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW50bENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzMyLDYgKzcz
NDIsMTIgQEAKIAkJCQlFMzUzQzExODI0QUE0Q0I2MDAzRkJERjMgLyogSW50bERpc3BsYXlOYW1l
c0NvbnN0cnVjdG9yLmggKi8sCiAJCQkJRTM1M0MxMTkyNEFBNENCNjAwM0ZCREYzIC8qIEludGxE
aXNwbGF5TmFtZXNQcm90b3R5cGUuY3BwICovLAogCQkJCUUzNTNDMTFCMjRBQTRDQjcwMDNGQkRG
MyAvKiBJbnRsRGlzcGxheU5hbWVzUHJvdG90eXBlLmggKi8sCisJCQkJRTMxOENBNjkyNTQ0MDZC
NTAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0LmNwcCAqLywKKwkJCQlFMzE4Q0E2NjI1NDQwNkI0
MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXQuaCAqLywKKwkJCQlFMzE4Q0E2QTI1NDQwNkI1MDA0
REMxMjkgLyogSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJRTMxOENBNjUy
NTQ0MDZCNDAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuaCAqLywKKwkJCQlF
MzE4Q0E2ODI1NDQwNkI1MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwICov
LAorCQkJCUUzMThDQTY3MjU0NDA2QjUwMDREQzEyOSAvKiBJbnRsTGlzdEZvcm1hdFByb3RvdHlw
ZS5oICovLAogCQkJCUEzQUZGOTJEMjQ1QTNDRkEwMEM5QkEzQiAvKiBJbnRsTG9jYWxlLmNwcCAq
LywKIAkJCQlBM0FGRjkyQjI0NUEzQ0Y5MDBDOUJBM0IgLyogSW50bExvY2FsZS5oICovLAogCQkJ
CUEzQUZGOTJGMjQ1QTNDRkIwMEM5QkEzQiAvKiBJbnRsTG9jYWxlQ29uc3RydWN0b3IuY3BwICov
LApAQCAtOTg0NSw2ICs5ODYxLDkgQEAKIAkJCQlFMzY1RjMzQTI0QUE2MjM5MDBDOTkxQjIgLyog
SW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM1
M0MxMjEyNEFBNENCNzAwM0ZCREYzIC8qIEludGxEaXNwbGF5TmFtZXNQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzNjVGMzNCMjRBQTYyM0IwMEM5OTFCMiAvKiBJbnRsRGlzcGxheU5h
bWVzUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTMxOENBNkMyNTQ0MDZCNjAw
NERDMTI5IC8qIEludGxMaXN0Rm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzE4Q0E2QjI1
NDQwNkI2MDA0REMxMjkgLyogSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTMxOENBNkQyNTQ0MDZCNjAwNERDMTI5IC8qIEludGxMaXN0Rm9ybWF0UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzA3MTc4RTI0Qzc4MjlEMDBERjA2NDQgLyogSW50
bExvY2FsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMwNzE3OEQyNEM3ODI5QTAwREYwNjQ0IC8q
IEludGxMb2NhbGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMwNzE3OEMyNEM3
ODI5ODAwREYwNjQ0IC8qIEludGxMb2NhbGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MTEzNDksNiArMTEzNjgsNyBAQAogCQkJCTUzMzNCQkREMjExMEY3RTEwMDc2MThFQyAvKiBERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzQjJBNTQ4MjI2NTQzQkYw
MDVBMEY3OSAvKiBGVExMb3dlckRGR1RvQjMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM0MTk2
NjIyMjcwRTAwMDAwNDdCN0NEIC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyQ29tcGF0aWJp
bGl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMzY2NDQxRTI1NDQwOUIzMDAwMTg3NkYgLyog
SW50bExpc3RGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxOUUxRjczNUYxNjAw
MzdGQzMzIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NDI3NEExNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NDI3NDAxNThFQkU4QjAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcxMTQyMTRkYWQ0ZWYzMTczMGJmZWE4NGYx
NmM5Y2JiYzFkOWNjMDAuLjhlNGNjY2YxMWM5YTNjOTc5YmI2MjAwOTA3YTA3NjliNDE5MmE4ZjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTgxOSw2ICs4MTksMTAgQEAgcnVudGlt
ZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCiBydW50aW1lL0ludGxEaXNwbGF5TmFt
ZXMuY3BwCiBydW50aW1lL0ludGxEaXNwbGF5TmFtZXNDb25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUv
SW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZS5jcHAKKy8vIENvbmZpbmUgVV9ISURFX0RSQUZUX0FQ
SSdzIGVmZmVjdCBpbiB0aGlzIGZpbGUuCitydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcCBAbm8t
dW5pZnkKK3J1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKK3J1bnRpbWUvSW50
bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwCiBydW50aW1lL0ludGxMb2NhbGUuY3BwCiBydW50aW1l
L0ludGxMb2NhbGVDb25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUvSW50bExvY2FsZVByb3RvdHlwZS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50
aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oCmluZGV4IGYzNDBlYmRmODRiZDZjMDk4NmExM2I4NzdhMjA4MjIwMzEwMGVlODEuLmQ5NWJk
OWJmNjRkZmUzMGE0NGM0MjJiMjIzOTI0YzFhYmEzOWZjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtNDEsNiArNDEsNyBA
QAogICAgIG1hY3JvKEZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oSW5maW5pdHkpIFwKICAgICBtYWNy
byhJbnRsKSBcCisgICAgbWFjcm8oTGlzdEZvcm1hdCkgXAogICAgIG1hY3JvKExvYWRlcikgXAog
ICAgIG1hY3JvKExvY2FsZSkgXAogICAgIG1hY3JvKE1hcCkgXApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERpc3BsYXlOYW1lcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGlzcGxheU5hbWVzLmNwcAppbmRleCBlNjg2N2MzZmMx
ZWZjMDdhZTZiM2RhYmYwNmI0Yzg5YTY5ODQzMTYwLi43ZTNhOTk4MmI2ZTM1MmJlYmE0ZDNiZTky
ODY2NzQxMjFjYWM0M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGlzcGxheU5hbWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGlzcGxheU5hbWVzLmNwcApAQCAtODMsMTIgKzgzLDEyIEBAIHZvaWQgSW50bERpc3Bs
YXlOYW1lczo6aW5pdGlhbGl6ZURpc3BsYXlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKIAotICAgIGF1dG8mIGF2YWls
YWJsZUxvY2FsZXMgPSBpbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGF1
dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsRGlzcGxheU5hbWVzQXZhaWxhYmxlTG9jYWxlcygp
OwogICAgIGF1dG8gcmVzb2x2ZWQgPSByZXNvbHZlTG9jYWxlKGdsb2JhbE9iamVjdCwgYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgbG9jYWxlTWF0Y2hlciwgbG9jYWxlT3B0aW9u
cywgeyB9LCBsb2NhbGVEYXRhKTsKIAogICAgIG1fbG9jYWxlID0gcmVzb2x2ZWQubG9jYWxlOwog
ICAgIGlmIChtX2xvY2FsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBpbml0aWFsaXplIERpc3BsYXlOYW1lIGR1ZSB0
byBpbnZhbGlkIGxvY2FsZSJfcyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBEaXNwbGF5TmFtZXMgZHVlIHRvIGludmFs
aWQgbG9jYWxlIl9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5YjMz
YzQ2NDJmNWZlNjA5NmU1MWZhYWMyN2I2OTQxZjVmMjI2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKQEAgLTAsMCAr
MSwzNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50
bExpc3RGb3JtYXQuaCIKKworI2luY2x1ZGUgIkludGxPYmplY3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisKKy8vIFdoaWxlIFVMaXN0Rm9ybWF0dGVyIEFQSXMg
YXJlIGRyYWZ0IGluIElDVSA2NywgdGhleSBhcmUgc3RhYmxlIGluIElDVSA2OCB3aXRoIHRoZSBz
YW1lIGZ1bmN0aW9uIHNpZ25hdHVyZXMuCisvLyBTbyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlc2Ug
c2lnbmF0dXJlcyBvZiBkcmFmdCBBUElzIGFyZSBzdGFibGUuCisjaWYgSEFWRShJQ1VfVV9MSVNU
X0ZPUk1BVFRFUikKKyNpZmRlZiBVX0hJREVfRFJBRlRfQVBJCisjdW5kZWYgVV9ISURFX0RSQUZU
X0FQSQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDx1bmljb2RlL3VsaXN0Zm9ybWF0dGVyLmg+
CisjaWYgSEFWRShJQ1VfVV9MSVNUX0ZPUk1BVFRFUikKKyNkZWZpbmUgVV9ISURFX0RSQUZUX0FQ
SSAxCisjZW5kaWYKKworI2lmIEhBVkUoSUNVX1VfTElTVF9GT1JNQVRURVIpCisjaW5jbHVkZSA8
dW5pY29kZS91Zm9ybWF0dGVkdmFsdWUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIEludGxMaXN0Rm9ybWF0OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEludGxMaXN0
Rm9ybWF0KSB9OworCit2b2lkIFVMaXN0Rm9ybWF0dGVyRGVsZXRlcjo6b3BlcmF0b3IoKShVTGlz
dEZvcm1hdHRlciogZm9ybWF0dGVyKQoreworICAgIGlmIChmb3JtYXR0ZXIpCisgICAgICAgIHVs
aXN0Zm10X2Nsb3NlKGZvcm1hdHRlcik7Cit9CisKK0ludGxMaXN0Rm9ybWF0KiBJbnRsTGlzdEZv
cm1hdDo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgYXV0byog
b2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW50bExpc3RGb3JtYXQ+KHZtLmhl
YXApKSBJbnRsTGlzdEZvcm1hdCh2bSwgc3RydWN0dXJlKTsKKyAgICBvYmplY3QtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitTdHJ1Y3R1cmUqIEludGxMaXN0
Rm9ybWF0OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK0ludGxMaXN0Rm9ybWF0OjpJbnRsTGlzdEZvcm1hdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
eworfQorCit2b2lkIEludGxMaXN0Rm9ybWF0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7Cit9CisKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWxpc3QtZm9ybWF0
LyNzZWMtSW50bC5MaXN0Rm9ybWF0Cit2b2lkIEludGxMaXN0Rm9ybWF0Ojppbml0aWFsaXplTGlz
dEZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGxvY2FsZXMsIEpT
VmFsdWUgb3B0aW9uc1ZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIHJl
cXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGdsb2JhbE9iamVjdCwgbG9j
YWxlcyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgIEpT
T2JqZWN0KiBvcHRpb25zOworICAgIGlmIChvcHRpb25zVmFsdWUuaXNVbmRlZmluZWQoKSkKKyAg
ICAgICAgb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHZtLCBnbG9iYWxPYmplY3QtPm51
bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgZWxzZSB7CisgICAgICAgIG9wdGlv
bnMgPSBvcHRpb25zVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICB9CisKKyAgICBSZXNvbHZlTG9jYWxl
T3B0aW9ucyBsb2NhbGVPcHRpb25zOworCisgICAgTG9jYWxlTWF0Y2hlciBsb2NhbGVNYXRjaGVy
ID0gaW50bE9wdGlvbjxMb2NhbGVNYXRjaGVyPihnbG9iYWxPYmplY3QsIG9wdGlvbnMsIHZtLnBy
b3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgeyAibG9va3VwIl9zLCBMb2NhbGVNYXRjaGVy
OjpMb29rdXAgfSwgeyAiYmVzdCBmaXQiX3MsIExvY2FsZU1hdGNoZXI6OkJlc3RGaXQgfSB9LCAi
bG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiJf
cywgTG9jYWxlTWF0Y2hlcjo6QmVzdEZpdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKworICAgIGF1dG8gbG9jYWxlRGF0YSA9IFtdKGNvbnN0IFN0cmluZyYsIFJl
bGV2YW50RXh0ZW5zaW9uS2V5KSAtPiBWZWN0b3I8U3RyaW5nPiB7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfTsKKworICAgIGF1dG8mIGF2YWlsYWJsZUxvY2FsZXMgPSBpbnRsTGlzdEZvcm1h
dEF2YWlsYWJsZUxvY2FsZXMoKTsKKyAgICBhdXRvIHJlc29sdmVkID0gcmVzb2x2ZUxvY2FsZShn
bG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGxvY2FsZU1h
dGNoZXIsIGxvY2FsZU9wdGlvbnMsIHsgfSwgbG9jYWxlRGF0YSk7CisKKyAgICBtX2xvY2FsZSA9
IHJlc29sdmVkLmxvY2FsZTsKKyAgICBpZiAobV9sb2NhbGUuaXNFbXB0eSgpKSB7CisgICAgICAg
IHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gaW5pdGlhbGl6
ZSBMaXN0Rm9ybWF0IGR1ZSB0byBpbnZhbGlkIGxvY2FsZSJfcyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX3R5cGUgPSBpbnRsT3B0aW9uPFR5cGU+KGdsb2JhbE9iamVjdCwgb3B0
aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+dHlwZSwgeyB7ICJjb25qdW5jdGlvbiJfcywgVHlwZTo6
Q29uanVuY3Rpb24gfSwgeyAiZGlzanVuY3Rpb24iX3MsIFR5cGU6OkRpc2p1bmN0aW9uIH0sIHsg
InVuaXQiX3MsIFR5cGU6OlVuaXQgfSB9LCAidHlwZSBtdXN0IGJlIGVpdGhlciBcImNvbmp1bmN0
aW9uXCIsIFwiZGlzanVuY3Rpb25cIiwgb3IgXCJ1bml0XCIiX3MsIFR5cGU6OkNvbmp1bmN0aW9u
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgbV9zdHls
ZSA9IGludGxPcHRpb248U3R5bGU+KGdsb2JhbE9iamVjdCwgb3B0aW9ucywgdm0ucHJvcGVydHlO
YW1lcy0+c3R5bGUsIHsgeyAibG9uZyJfcywgU3R5bGU6OkxvbmcgfSwgeyAic2hvcnQiX3MsIFN0
eWxlOjpTaG9ydCB9LCB7ICJuYXJyb3ciX3MsIFN0eWxlOjpOYXJyb3cgfSB9LCAic3R5bGUgbXVz
dCBiZSBlaXRoZXIgXCJsb25nXCIsIFwic2hvcnRcIiwgb3IgXCJuYXJyb3dcIiJfcywgU3R5bGU6
OkxvbmcpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyNpZiBI
QVZFKElDVV9VX0xJU1RfRk9STUFUVEVSKQorICAgIGF1dG8gdG9VTGlzdEZvcm1hdHRlclR5cGUg
PSBbXShUeXBlIHR5cGUpIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
VHlwZTo6Q29uanVuY3Rpb246CisgICAgICAgICAgICByZXR1cm4gVUxJU1RGTVRfVFlQRV9BTkQ7
CisgICAgICAgIGNhc2UgVHlwZTo6RGlzanVuY3Rpb246CisgICAgICAgICAgICByZXR1cm4gVUxJ
U1RGTVRfVFlQRV9PUjsKKyAgICAgICAgY2FzZSBUeXBlOjpVbml0OgorICAgICAgICAgICAgcmV0
dXJuIFVMSVNURk1UX1RZUEVfVU5JVFM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFVMSVNU
Rk1UX1RZUEVfQU5EOworICAgIH07CisKKyAgICBhdXRvIHRvVUxpc3RGb3JtYXR0ZXJXaWR0aCA9
IFtdKFN0eWxlIHN0eWxlKSB7CisgICAgICAgIHN3aXRjaCAoc3R5bGUpIHsKKyAgICAgICAgY2Fz
ZSBTdHlsZTo6TG9uZzoKKyAgICAgICAgICAgIHJldHVybiBVTElTVEZNVF9XSURUSF9XSURFOwor
ICAgICAgICBjYXNlIFN0eWxlOjpTaG9ydDoKKyAgICAgICAgICAgIHJldHVybiBVTElTVEZNVF9X
SURUSF9TSE9SVDsKKyAgICAgICAgY2FzZSBTdHlsZTo6TmFycm93OgorICAgICAgICAgICAgcmV0
dXJuIFVMSVNURk1UX1dJRFRIX05BUlJPVzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVUxJ
U1RGTVRfV0lEVEhfV0lERTsKKyAgICB9OworCisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pF
Uk9fRVJST1I7CisgICAgbV9saXN0Rm9ybWF0ID0gc3RkOjp1bmlxdWVfcHRyPFVMaXN0Rm9ybWF0
dGVyLCBVTGlzdEZvcm1hdHRlckRlbGV0ZXI+KHVsaXN0Zm10X29wZW5Gb3JUeXBlKG1fbG9jYWxl
LnV0ZjgoKS5kYXRhKCksIHRvVUxpc3RGb3JtYXR0ZXJUeXBlKG1fdHlwZSksIHRvVUxpc3RGb3Jt
YXR0ZXJXaWR0aChtX3N0eWxlKSwgJnN0YXR1cykpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVz
KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVk
IHRvIGluaXRpYWxpemUgTGlzdEZvcm1hdCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZWxzZQorICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJGYWlsZWQgdG8g
aW5pdGlhbGl6ZSBJbnRsLkxpc3RGb3JtYXQgc2luY2UgdXNlZCBmZWF0dXJlIGlzIG5vdCBzdXBw
b3J0ZWQgaW4gdGhlIGxpbmtlZCBJQ1UgdmVyc2lvbiJfcyk7CisgICAgcmV0dXJuOworI2VuZGlm
Cit9CisKKyNpZiBIQVZFKElDVV9VX0xJU1RfRk9STUFUVEVSKQorc3RhdGljIFZlY3RvcjxTdHJp
bmcsIDQ+IHN0cmluZ0xpc3RGcm9tSXRlcmFibGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBpdGVyYWJsZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nLCA0PiByZXN1bHQ7CisK
KyAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KworICAgIGZvckVhY2hJbkl0ZXJhYmxlKGdsb2JhbE9iamVjdCwgaXRlcmFibGUsIFsmXShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpIHsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBpZiAoIXZh
bHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJJdGVyYWJsZSBwYXNzZWQgdG8gTGlzdEZvcm1hdCBpbmNsdWRlcyBub24gU3Ry
aW5nIl9zKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcg
aXRlbSA9IHZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbSk7
CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY2xhc3MgTGlzdEZvcm1hdElucHV0
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMaXN0Rm9ybWF0SW5wdXQpOworcHVibGljOgor
ICAgIExpc3RGb3JtYXRJbnB1dChWZWN0b3I8U3RyaW5nLCA0PiYmIHN0cmluZ3MpCisgICAgICAg
IDogbV9zdHJpbmdzKFdURk1vdmUoc3RyaW5ncykpCisgICAgeworICAgICAgICBtX3N0cmluZ1Bv
aW50ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdHJpbmdzLnNpemUoKSk7CisgICAgICAg
IG1fc3RyaW5nTGVuZ3Rocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RyaW5ncy5zaXplKCkp
OworICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IG1fc3RyaW5ncykgeworICAgICAgICAgICAg
aWYgKHN0cmluZy5pczhCaXQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gdmVjdG9yID0gbWFr
ZVVuaXF1ZTxWZWN0b3I8VUNoYXI+PigpOworICAgICAgICAgICAgICAgIHZlY3Rvci0+cmVzaXpl
KHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJh
Y3RlcnModmVjdG9yLT5kYXRhKCksIHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3Ro
KCkpOworICAgICAgICAgICAgICAgIG1fcmV0YWluZWRVcGNvbnZlcnRlZFN0cmluZ3MuYXBwZW5k
KFdURk1vdmUodmVjdG9yKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdQb2ludGVycy5hcHBl
bmQobV9yZXRhaW5lZFVwY29udmVydGVkU3RyaW5ncy5sYXN0KCktPmRhdGEoKSk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX3N0cmluZ1BvaW50ZXJzLmFwcGVuZChzdHJp
bmcuY2hhcmFjdGVyczE2KCkpOworICAgICAgICAgICAgbV9zdHJpbmdMZW5ndGhzLmFwcGVuZChz
dHJpbmcubGVuZ3RoKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaW50MzJfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmdQb2ludGVycy5zaXplKCk7IH0KKyAgICBjb25zdCBVQ2hh
ciogY29uc3QqIHN0cmluZ1BvaW50ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdQb2ludGVy
cy5kYXRhKCk7IH0KKyAgICBjb25zdCBpbnQzMl90KiBzdHJpbmdMZW5ndGhzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmdMZW5ndGhzLmRhdGEoKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxT
dHJpbmcsIDQ+IG1fc3RyaW5nczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxV
Q2hhcj4+LCA0PiBtX3JldGFpbmVkVXBjb252ZXJ0ZWRTdHJpbmdzOworICAgIFZlY3Rvcjxjb25z
dCBVQ2hhciosIDQ+IG1fc3RyaW5nUG9pbnRlcnM7CisgICAgVmVjdG9yPGludDMyX3QsIDQ+IG1f
c3RyaW5nTGVuZ3RoczsKK307CisjZW5kaWYKKworLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2Fs
LWludGwtbGlzdC1mb3JtYXQvI3NlYy1JbnRsLkxpc3RGb3JtYXQucHJvdG90eXBlLmZvcm1hdAor
SlNWYWx1ZSBJbnRsTGlzdEZvcm1hdDo6Zm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgbGlzdCkgY29uc3QKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisjaWYgSEFW
RShJQ1VfVV9MSVNUX0ZPUk1BVFRFUikKKyAgICBhdXRvIHN0cmluZ0xpc3QgPSBzdHJpbmdMaXN0
RnJvbUl0ZXJhYmxlKGdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgIExpc3RGb3JtYXRJbnB1dCBpbnB1dChXVEZNb3ZlKHN0cmlu
Z0xpc3QpKTsKKworICAgIFZlY3RvcjxVQ2hhciwgMzI+IHJlc3VsdDsKKyAgICBhdXRvIHN0YXR1
cyA9IGNhbGxCdWZmZXJQcm9kdWNpbmdGdW5jdGlvbih1bGlzdGZtdF9mb3JtYXQsIG1fbGlzdEZv
cm1hdC5nZXQoKSwgaW5wdXQuc3RyaW5nUG9pbnRlcnMoKSwgaW5wdXQuc3RyaW5nTGVuZ3Rocygp
LCBpbnB1dC5zaXplKCksIHJlc3VsdCk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0
byBmb3JtYXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKKworICAgIHJldHVybiBqc1N0cmluZyh2bSwg
U3RyaW5nKHJlc3VsdCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGlzdCk7CisgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gZm9ybWF0
IGxpc3Qgb2Ygc3RyaW5ncyJfcyk7CisjZW5kaWYKK30KKworLy8gaHR0cHM6Ly90YzM5LmVzL3By
b3Bvc2FsLWludGwtbGlzdC1mb3JtYXQvI3NlYy1JbnRsLkxpc3RGb3JtYXQucHJvdG90eXBlLmZv
cm1hdFRvUGFydHMKK0pTVmFsdWUgSW50bExpc3RGb3JtYXQ6OmZvcm1hdFRvUGFydHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsaXN0KSBjb25zdAoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyNpZiBIQVZFKElDVV9VX0xJU1RfRk9STUFUVEVSKQorICAgIGF1dG8gc3Ry
aW5nTGlzdCA9IHN0cmluZ0xpc3RGcm9tSXRlcmFibGUoZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgTGlzdEZvcm1hdElucHV0
IGlucHV0KFdURk1vdmUoc3RyaW5nTGlzdCkpOworCisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7CisKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6dW5pcXVlX3B0cjxVRm9ybWF0
dGVkTGlzdCwgSUNVRGVsZXRlcjx1bGlzdGZtdF9jbG9zZVJlc3VsdD4+KHVsaXN0Zm10X29wZW5S
ZXN1bHQoJnN0YXR1cykpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJmYWlsZWQgdG8gZm9ybWF0
IGxpc3Qgb2Ygc3RyaW5ncyJfcyk7CisKKyAgICB1bGlzdGZtdF9mb3JtYXRTdHJpbmdzVG9SZXN1
bHQobV9saXN0Rm9ybWF0LmdldCgpLCBpbnB1dC5zdHJpbmdQb2ludGVycygpLCBpbnB1dC5zdHJp
bmdMZW5ndGhzKCksIGlucHV0LnNpemUoKSwgcmVzdWx0LmdldCgpLCAmc3RhdHVzKTsKKyAgICBp
ZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGZvcm1hdCBsaXN0IG9mIHN0cmluZ3MiX3MpOwor
CisgICAgLy8gVUZvcm1hdHRlZFZhbHVlIGlzIG93bmVkIGJ5IFVGb3JtYXR0ZWRMaXN0LiBXZSBk
byBub3QgbmVlZCB0byBjbG9zZSBpdC4KKyAgICBhdXRvIGZvcm1hdHRlZFZhbHVlID0gdWxpc3Rm
bXRfcmVzdWx0QXNWYWx1ZShyZXN1bHQuZ2V0KCksICZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxV
UkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJmYWlsZWQgdG8gZm9ybWF0IGxpc3Qgb2Ygc3RyaW5ncyJfcyk7CisKKyAgICBKU0Fy
cmF5KiBwYXJ0cyA9IEpTQXJyYXk6OnRyeUNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGlndW91
cyksIDApOworICAgIGlmICghcGFydHMpCisgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisKKyAgICBpbnQzMl90IGZvcm1hdHRlZFN0cmlu
Z0xlbmd0aCA9IDA7CisgICAgY29uc3QgVUNoYXIqIGZvcm1hdHRlZFN0cmluZ1BvaW50ZXIgPSB1
Zm10dmFsX2dldFN0cmluZyhmb3JtYXR0ZWRWYWx1ZSwgJmZvcm1hdHRlZFN0cmluZ0xlbmd0aCwg
JnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBmb3JtYXQgbGlzdCBv
ZiBzdHJpbmdzIl9zKTsKKyAgICBTdHJpbmcgcmVzdWx0U3RyaW5nKGZvcm1hdHRlZFN0cmluZ1Bv
aW50ZXIsIGZvcm1hdHRlZFN0cmluZ0xlbmd0aCk7CisKKyAgICBhdXRvIGl0ZXJhdG9yID0gc3Rk
Ojp1bmlxdWVfcHRyPFVDb25zdHJhaW5lZEZpZWxkUG9zaXRpb24sIElDVURlbGV0ZXI8dWNmcG9z
X2Nsb3NlPj4odWNmcG9zX29wZW4oJnN0YXR1cykpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVz
KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJm
YWlsZWQgdG8gZm9ybWF0IGxpc3Qgb2Ygc3RyaW5ncyJfcyk7CisKKyAgICB1Y2Zwb3NfY29uc3Ry
YWluRmllbGQoaXRlcmF0b3IuZ2V0KCksIFVGSUVMRF9DQVRFR09SWV9MSVNULCBVTElTVEZNVF9F
TEVNRU5UX0ZJRUxELCAmc3RhdHVzKTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRv
IGZvcm1hdCBsaXN0IG9mIHN0cmluZ3MiX3MpOworCisgICAgYXV0byBsaXRlcmFsU3RyaW5nID0g
anNOb250cml2aWFsU3RyaW5nKHZtLCAibGl0ZXJhbCJfcyk7CisgICAgYXV0byBlbGVtZW50U3Ry
aW5nID0ganNOb250cml2aWFsU3RyaW5nKHZtLCAiZWxlbWVudCJfcyk7CisKKyAgICBhdXRvIGNy
ZWF0ZVBhcnQgPSBbJl0gKEpTU3RyaW5nKiB0eXBlLCBKU1N0cmluZyogdmFsdWUpIHsKKyAgICAg
ICAgSlNPYmplY3QqIHBhcnQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QpOwor
ICAgICAgICBwYXJ0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnR5cGUsIHR5cGUp
OworICAgICAgICBwYXJ0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCB2
YWx1ZSk7CisgICAgICAgIHJldHVybiBwYXJ0OworICAgIH07CisKKyAgICBpbnQzMl90IHJlc3Vs
dExlbmd0aCA9IHJlc3VsdFN0cmluZy5sZW5ndGgoKTsKKyAgICBpbnQzMl90IHByZXZpb3VzRW5k
SW5kZXggPSAwOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGJvb2wgbmV4dCA9IHVmbXR2
YWxfbmV4dFBvc2l0aW9uKGZvcm1hdHRlZFZhbHVlLCBpdGVyYXRvci5nZXQoKSwgJnN0YXR1cyk7
CisgICAgICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiZmFpbGVkIHRvIGZvcm1hdCBsaXN0IG9m
IHN0cmluZ3MiX3MpOworICAgICAgICBpZiAoIW5leHQpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBpbnQzMl90IGJlZ2luSW5kZXggPSAwOworICAgICAgICBpbnQzMl90IGVuZEluZGV4
ID0gMDsKKyAgICAgICAgdWNmcG9zX2dldEluZGV4ZXMoaXRlcmF0b3IuZ2V0KCksICZiZWdpbklu
ZGV4LCAmZW5kSW5kZXgsICZzdGF0dXMpOworICAgICAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
ImZhaWxlZCB0byBmb3JtYXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKKworICAgICAgICBpZiAocHJl
dmlvdXNFbmRJbmRleCA8IGJlZ2luSW5kZXgpIHsKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBq
c1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nLnN1YnN0cmluZyhwcmV2aW91c0VuZEluZGV4LCBiZWdp
bkluZGV4IC0gcHJldmlvdXNFbmRJbmRleCkpOworICAgICAgICAgICAgSlNPYmplY3QqIHBhcnQg
PSBjcmVhdGVQYXJ0KGxpdGVyYWxTdHJpbmcsIHZhbHVlKTsKKyAgICAgICAgICAgIHBhcnRzLT5w
dXNoKGdsb2JhbE9iamVjdCwgcGFydCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgICAgICB9CisgICAgICAgIHByZXZpb3VzRW5kSW5kZXggPSBlbmRJ
bmRleDsKKworICAgICAgICBhdXRvIHZhbHVlID0ganNTdHJpbmcodm0sIHJlc3VsdFN0cmluZy5z
dWJzdHJpbmcoYmVnaW5JbmRleCwgZW5kSW5kZXggLSBiZWdpbkluZGV4KSk7CisgICAgICAgIEpT
T2JqZWN0KiBwYXJ0ID0gY3JlYXRlUGFydChlbGVtZW50U3RyaW5nLCB2YWx1ZSk7CisgICAgICAg
IHBhcnRzLT5wdXNoKGdsb2JhbE9iamVjdCwgcGFydCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgfQorCisgICAgaWYgKHByZXZpb3VzRW5kSW5kZXggPCBy
ZXN1bHRMZW5ndGgpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRT
dHJpbmcuc3Vic3RyaW5nKHByZXZpb3VzRW5kSW5kZXgsIHJlc3VsdExlbmd0aCAtIHByZXZpb3Vz
RW5kSW5kZXgpKTsKKyAgICAgICAgSlNPYmplY3QqIHBhcnQgPSBjcmVhdGVQYXJ0KGxpdGVyYWxT
dHJpbmcsIHZhbHVlKTsKKyAgICAgICAgcGFydHMtPnB1c2goZ2xvYmFsT2JqZWN0LCBwYXJ0KTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcGFydHM7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShsaXN0KTsKKyAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBmb3JtYXQgbGlz
dCBvZiBzdHJpbmdzIl9zKTsKKyNlbmRpZgorfQorCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9z
YWwtaW50bC1saXN0LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUucmVzb2x2
ZWRPcHRpb25zCitKU09iamVjdCogSW50bExpc3RGb3JtYXQ6OnJlc29sdmVkT3B0aW9ucyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGdsb2JhbE9iamVjdCk7CisgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sb2NhbGUsIGpzU3RyaW5nKHZtLCBtX2xvY2FsZSkpOworICAgIG9wdGlvbnMtPnB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dHlwZSwganNOb250cml2aWFsU3RyaW5nKHZtLCB0
eXBlU3RyaW5nKG1fdHlwZSkpKTsKKyAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnN0eWxlLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHN0eWxlU3RyaW5nKG1fc3R5
bGUpKSk7CisgICAgcmV0dXJuIG9wdGlvbnM7Cit9CisKK0FTQ0lJTGl0ZXJhbCBJbnRsTGlzdEZv
cm1hdDo6c3R5bGVTdHJpbmcoU3R5bGUgc3R5bGUpCit7CisgICAgc3dpdGNoIChzdHlsZSkgewor
ICAgIGNhc2UgU3R5bGU6Okxvbmc6CisgICAgICAgIHJldHVybiAibG9uZyJfczsKKyAgICBjYXNl
IFN0eWxlOjpTaG9ydDoKKyAgICAgICAgcmV0dXJuICJzaG9ydCJfczsKKyAgICBjYXNlIFN0eWxl
OjpOYXJyb3c6CisgICAgICAgIHJldHVybiAibmFycm93Il9zOworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7Cit9CisKK0FT
Q0lJTGl0ZXJhbCBJbnRsTGlzdEZvcm1hdDo6dHlwZVN0cmluZyhUeXBlIHR5cGUpCit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlOjpDb25qdW5jdGlvbjoKKyAgICAgICAgcmV0
dXJuICJjb25qdW5jdGlvbiJfczsKKyAgICBjYXNlIFR5cGU6OkRpc2p1bmN0aW9uOgorICAgICAg
ICByZXR1cm4gImRpc2p1bmN0aW9uIl9zOworICAgIGNhc2UgVHlwZTo6VW5pdDoKKyAgICAgICAg
cmV0dXJuICJ1bml0Il9zOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsOjpudWxsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGY5ZGUwODRjYTVlMTk0NGEzMGUwMDBiM2MwMGNhYjE2YTBhZjJjMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmgKQEAg
LTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNP
YmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9pY3UvSUNVSGVscGVycy5oPgorCisjaWYg
IWRlZmluZWQoSEFWRV9JQ1VfVV9MSVNUX0ZPUk1BVFRFUikKKyNpZiBVX0lDVV9WRVJTSU9OX01B
Sk9SX05VTSA+PSA2NyB8fCAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNjYgJiYgVVNFKEFQ
UExFX0lOVEVSTkFMX1NESykpCisjZGVmaW5lIEhBVkVfSUNVX1VfTElTVF9GT1JNQVRURVIgMQor
I2VuZGlmCisjZW5kaWYKKworc3RydWN0IFVMaXN0Rm9ybWF0dGVyOworCituYW1lc3BhY2UgSlND
IHsKKworZW51bSBjbGFzcyBSZWxldmFudEV4dGVuc2lvbktleSA6IHVpbnQ4X3Q7CisKK3N0cnVj
dCBVTGlzdEZvcm1hdHRlckRlbGV0ZXIgeworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgb3Bl
cmF0b3IoKShVTGlzdEZvcm1hdHRlciopOworfTsKKworY2xhc3MgSW50bExpc3RGb3JtYXQgZmlu
YWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9
IEpTTm9uRmluYWxPYmplY3Q7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCogY2VsbCkK
KyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PEludGxMaXN0Rm9ybWF0Kj4oY2VsbCktPkludGxM
aXN0Rm9ybWF0Ojp+SW50bExpc3RGb3JtYXQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS5pbnRsTGlz
dEZvcm1hdFNwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgc3RhdGljIEludGxMaXN0Rm9ybWF0
KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgREVDTEFSRV9J
TkZPOworCisgICAgdm9pZCBpbml0aWFsaXplTGlzdEZvcm1hdChKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgbG9jYWxlc1ZhbHVlLCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSk7CisKKyAgICBKU1ZhbHVl
IGZvcm1hdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpIGNvbnN0OworICAgIEpTVmFsdWUgZm9y
bWF0VG9QYXJ0cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpIGNvbnN0OworICAgIEpTT2JqZWN0
KiByZXNvbHZlZE9wdGlvbnMoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBJbnRsTGlzdEZvcm1hdChWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeyBDb25qdW5jdGlvbiwg
RGlzanVuY3Rpb24sIFVuaXQgfTsKKyAgICBlbnVtIGNsYXNzIFN0eWxlIDogdWludDhfdCB7IFNo
b3J0LCBMb25nLCBOYXJyb3cgfTsKKworICAgIHN0YXRpYyBBU0NJSUxpdGVyYWwgdHlwZVN0cmlu
ZyhUeXBlKTsKKyAgICBzdGF0aWMgQVNDSUlMaXRlcmFsIHN0eWxlU3RyaW5nKFN0eWxlKTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxVTGlzdEZvcm1hdHRlciwgVUxpc3RGb3JtYXR0ZXJEZWxldGVy
PiBtX2xpc3RGb3JtYXQ7CisgICAgU3RyaW5nIG1fbG9jYWxlOworICAgIFR5cGUgbV90eXBlIHsg
VHlwZTo6Q29uanVuY3Rpb24gfTsKKyAgICBTdHlsZSBtX3N0eWxlIHsgU3R5bGU6OkxvbmcgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yYjRhZDY1ZTE5Njk5ZGQ3NDZlNTRmMTZjZGRkOGFkMTdlODI1NWQ2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAi
SW50bExpc3RGb3JtYXQuaCIKKyNpbmNsdWRlICJJbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yKTsK
Kworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oSW50bExpc3RGb3JtYXRDb25zdHJ1
Y3RvclN1cHBvcnRlZExvY2FsZXNPZik7CisKK30KKworI2luY2x1ZGUgIkludGxMaXN0Rm9ybWF0
Q29uc3RydWN0b3IubHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8g
SW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFzZTo6
c19pbmZvLCAmbGlzdEZvcm1hdENvbnN0cnVjdG9yVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvcikgfTsKKworLyogU291cmNlIGZvciBJ
bnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmx1dC5oCitAYmVnaW4gbGlzdEZvcm1hdENvbnN0cnVj
dG9yVGFibGUKKyAgc3VwcG9ydGVkTG9jYWxlc09mICAgICAgICAgICAgIEludGxMaXN0Rm9ybWF0
Q29uc3RydWN0b3JTdXBwb3J0ZWRMb2NhbGVzT2YgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMQorQGVuZAorKi8KKworSW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvciogSW50bExpc3RGb3Jt
YXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEludGxM
aXN0Rm9ybWF0UHJvdG90eXBlKiBsaXN0Rm9ybWF0UHJvdG90eXBlKQoreworICAgIGF1dG8qIGNv
bnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW50bExpc3RGb3JtYXRDb25z
dHJ1Y3Rvcj4odm0uaGVhcCkpIEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3Iodm0sIHN0cnVjdHVy
ZSk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBsaXN0Rm9ybWF0UHJvdG90
eXBlKTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1N0cnVjdHVyZSogSW50bExpc3RG
b3JtYXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSW50ZXJuYWxG
dW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworc3RhdGljIEpTQ19E
RUNMQVJFX0hPU1RfRlVOQ1RJT04oY2FsbEludGxMaXN0Rm9ybWF0KTsKK3N0YXRpYyBKU0NfREVD
TEFSRV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEludGxMaXN0Rm9ybWF0KTsKKworSW50bExpc3RG
b3JtYXRDb25zdHJ1Y3Rvcjo6SW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCBjYWxsSW50bExpc3RG
b3JtYXQsIGNvbnN0cnVjdEludGxMaXN0Rm9ybWF0KQoreworfQorCit2b2lkIEludGxMaXN0Rm9y
bWF0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSW50bExpc3RGb3JtYXRQcm90
b3R5cGUqIGxpc3RGb3JtYXRQcm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIDAsICJMaXN0Rm9ybWF0Il9zLCBQcm9wZXJ0eUFkZGl0aW9uTW9kZTo6V2l0aG91dFN0cnVj
dHVyZVRyYW5zaXRpb24pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIGxpc3RGb3JtYXRQcm90b3R5cGUsIFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKKyAgICBsaXN0Rm9ybWF0UHJvdG90eXBlLT5wdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIHRo
aXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
K30KKworLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtbGlzdC1mb3JtYXQvI3NlYy1J
bnRsLkxpc3RGb3JtYXQKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RJbnRsTGlz
dEZvcm1hdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG5ld1RhcmdldCA9
IGFzT2JqZWN0KGNhbGxGcmFtZS0+bmV3VGFyZ2V0KCkpOworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbmV3VGFyZ2V0ID09IGNhbGxGcmFtZS0+anNDYWxsZWUoKQorICAgICAgICA/IGdsb2Jh
bE9iamVjdC0+bGlzdEZvcm1hdFN0cnVjdHVyZSgpCisgICAgICAgIDogSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQsIGdldEZ1
bmN0aW9uUmVhbG0odm0sIG5ld1RhcmdldCktPmxpc3RGb3JtYXRTdHJ1Y3R1cmUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIEludGxMaXN0Rm9ybWF0KiBs
aXN0Rm9ybWF0ID0gSW50bExpc3RGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKKyAgICBB
U1NFUlQobGlzdEZvcm1hdCk7CisKKyAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgbGlzdEZvcm1h
dC0+aW5pdGlhbGl6ZUxpc3RGb3JtYXQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGxpc3RGb3JtYXQpOworfQorCisvLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtaW50bC1saXN0
LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNh
bGxJbnRsTGlzdEZvcm1hdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSopKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIkxpc3RGb3JtYXQiKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yU3VwcG9ydGVkTG9jYWxlc09mLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgLy8gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihs
b2NhbGVzIFssIG9wdGlvbnNdKQorICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRs
LWxpc3QtZm9ybWF0LyNzZWMtSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZgorCisg
ICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJUxpc3RGb3JtYXQlLltbYXZhaWxhYmxl
TG9jYWxlc11dLgorICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcyA9
IGludGxMaXN0Rm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworCisgICAgLy8gMi4gTGV0IHJlcXVl
c3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KKyAgICBWZWN0
b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworCisgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRl
ZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9j
YWxlcyhnbG9iYWxPYmplY3QsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGNh
bGxGcmFtZS0+YXJndW1lbnQoMSkpKSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENvbnN0
cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdENv
bnN0cnVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODQyOWQxYTA5ZDg3NzhlNWU2MGY0OWM1ZGY4NTA0NTg4
MDY2OTA3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisjaW5jbHVk
ZSAiSW50bE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSW50bExpc3RGb3Jt
YXRQcm90b3R5cGU7CisKK2NsYXNzIEludGxMaXN0Rm9ybWF0Q29uc3RydWN0b3IgZmluYWwgOiBw
dWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEludGVy
bmFsRnVuY3Rpb247CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZTsKKworICAg
IHN0YXRpYyBJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUq
LCBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBERUNMQVJF
X0lORk87CisKK3ByaXZhdGU6CisgICAgSW50bExpc3RGb3JtYXRDb25zdHJ1Y3RvcihWTSYsIFN0
cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBJbnRsTGlzdEZvcm1hdFBy
b3RvdHlwZSopOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxM
aXN0Rm9ybWF0Q29uc3RydWN0b3IsIEludGVybmFsRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0
Rm9ybWF0UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxM
aXN0Rm9ybWF0UHJvdG90eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWZhMTQ1OGVlOTYzYjZlYmFiZjEx
OTRiN2UwYmNiYzZhMDMzNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUuY3BwCkBAIC0wLDAgKzEsMTE3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGxMaXN0Rm9y
bWF0UHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJJbnRsTGlzdEZvcm1hdC5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKEludGxMaXN0Rm9ybWF0UHJvdG90eXBlRnVuY0Zvcm1hdCk7CitzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihJbnRsTGlzdEZvcm1hdFByb3RvdHlwZUZ1bmNGb3Jt
YXRUb1BhcnRzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKEludGxMaXN0Rm9y
bWF0UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyk7CisKK30KKworI2luY2x1ZGUgIkludGxM
aXN0Rm9ybWF0UHJvdG90eXBlLmx1dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xh
c3NJbmZvIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlOjpzX2luZm8gPSB7ICJJbnRsLkxpc3RGb3Jt
YXQiLCAmQmFzZTo6c19pbmZvLCAmbGlzdEZvcm1hdFByb3RvdHlwZVRhYmxlLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEludGxMaXN0Rm9ybWF0UHJvdG90eXBlKSB9OworCisvKiBTb3Vy
Y2UgZm9yIEludGxMaXN0Rm9ybWF0UHJvdG90eXBlLmx1dC5oCitAYmVnaW4gbGlzdEZvcm1hdFBy
b3RvdHlwZVRhYmxlCisgIGZvcm1hdCAgICAgICAgICAgSW50bExpc3RGb3JtYXRQcm90b3R5cGVG
dW5jRm9ybWF0ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgZm9ybWF0VG9QYXJ0
cyAgICBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZUZ1bmNGb3JtYXRUb1BhcnRzICAgICAgRG9udEVu
dW18RnVuY3Rpb24gMQorICByZXNvbHZlZE9wdGlvbnMgIEludGxMaXN0Rm9ybWF0UHJvdG90eXBl
RnVuY1Jlc29sdmVkT3B0aW9ucyAgICBEb250RW51bXxGdW5jdGlvbiAwCitAZW5kCisqLworCitJ
bnRsTGlzdEZvcm1hdFByb3RvdHlwZSogSW50bExpc3RGb3JtYXRQcm90b3R5cGU6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGF1dG8qIG9iamVjdCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEludGxMaXN0Rm9ybWF0UHJvdG90eXBlPih2bS5oZWFwKSkg
SW50bExpc3RGb3JtYXRQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgb2JqZWN0LT5maW5p
c2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworU3RydWN0dXJlKiBJbnRs
TGlzdEZvcm1hdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitJbnRsTGlzdEZvcm1hdFByb3Rv
dHlwZTo6SW50bExpc3RGb3JtYXRQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBJbnRsTGlzdEZvcm1h
dFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAgIEpTQ19U
T19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCisvLyBodHRwczovL3RjMzku
ZXMvcHJvcG9zYWwtaW50bC1saXN0LWZvcm1hdC8jc2VjLUludGwuTGlzdEZvcm1hdC5wcm90b3R5
cGUuZm9ybWF0CitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oSW50bExpc3RGb3JtYXRQcm90b3R5
cGVGdW5jRm9ybWF0LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvKiBsaXN0Rm9ybWF0
ID0ganNEeW5hbWljQ2FzdDxJbnRsTGlzdEZvcm1hdCo+KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBpZiAoIWxpc3RGb3JtYXQpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJJbnRsLkxpc3RGb3JtYXQucHJvdG90eXBlLmZvcm1h
dCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBM
aXN0Rm9ybWF0Il9zKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKGxpc3RGb3JtYXQtPmZvcm1hdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCkpKSk7Cit9CisKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWxpc3QtZm9y
bWF0LyNzZWMtSW50bC5MaXN0Rm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzCitKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oSW50bExpc3RGb3JtYXRQcm90b3R5cGVGdW5jRm9ybWF0VG9QYXJ0
cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgYXV0byogbGlzdEZvcm1hdCA9IGpzRHluYW1p
Y0Nhc3Q8SW50bExpc3RGb3JtYXQqPih2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAg
aWYgKCFsaXN0Rm9ybWF0KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiSW50bC5MaXN0Rm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzIGNh
bGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIExpc3RG
b3JtYXQiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUobGlzdEZvcm1hdC0+Zm9ybWF0VG9QYXJ0cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCkpKSk7Cit9CisKKy8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLWxpc3Qt
Zm9ybWF0LyNzZWMtSW50bC5MaXN0Rm9ybWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMKK0pT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihJbnRsTGlzdEZvcm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZl
ZE9wdGlvbnMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGxpc3RGb3JtYXQgPSBq
c0R5bmFtaWNDYXN0PEludGxMaXN0Rm9ybWF0Kj4odm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghbGlzdEZvcm1hdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIkludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRP
cHRpb25zIGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBh
cyBhIExpc3RGb3JtYXQiX3MpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1Zh
bHVlOjplbmNvZGUobGlzdEZvcm1hdC0+cmVzb2x2ZWRPcHRpb25zKGdsb2JhbE9iamVjdCkpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdFByb3RvdHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTk3NGE5
MGM5OGFjMDA3OGY0YjlhYzgxYjIzMTJiYTk2OTUwY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXRQcm90b3R5cGUuaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSW50bExpc3RGb3JtYXRQcm90b3R5
cGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcg
QmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlU
YWJsZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4K
KyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEludGxMaXN0Rm9ybWF0UHJv
dG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAg
IH0KKworICAgIHN0YXRpYyBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZSogY3JlYXRlKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToK
KyAgICBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAppbmRleCA5MWJjODM4ZGUxNGE3
ZTg5ZTIwNDdjYjViNjc3OTM2YTYwNGRhMDBhLi45MzBmZjQ2NjIzNTQzZjNhN2IzODYzYThkMjQ4
ZWIxNDBkMzU0ZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2Jq
ZWN0LmNwcApAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgIkludGxEaXNwbGF5TmFtZXMuaCIK
ICNpbmNsdWRlICJJbnRsRGlzcGxheU5hbWVzQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJbnRs
RGlzcGxheU5hbWVzUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSW50bExpc3RGb3JtYXQuaCIKKyNp
bmNsdWRlICJJbnRsTGlzdEZvcm1hdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSW50bExpc3RG
b3JtYXRQcm90b3R5cGUuaCIKICNpbmNsdWRlICJJbnRsTG9jYWxlLmgiCiAjaW5jbHVkZSAiSW50
bExvY2FsZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSW50bExvY2FsZVByb3RvdHlwZS5oIgpA
QCAtOTMsNiArOTYsMTMgQEAgc3RhdGljIEpTVmFsdWUgY3JlYXRlRGlzcGxheU5hbWVzQ29uc3Ry
dWN0b3IoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogICAgIHJldHVybiBJbnRsRGlzcGxheU5h
bWVzQ29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgSW50bERpc3BsYXlOYW1lc0NvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblBy
b3RvdHlwZSgpKSwganNDYXN0PEludGxEaXNwbGF5TmFtZXNQcm90b3R5cGUqPihnbG9iYWxPYmpl
Y3QtPmRpc3BsYXlOYW1lc1N0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOwog
fQogCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVMaXN0Rm9ybWF0Q29uc3RydWN0b3IoVk0mIHZtLCBK
U09iamVjdCogb2JqZWN0KQoreworICAgIEludGxPYmplY3QqIGludGxPYmplY3QgPSBqc0Nhc3Q8
SW50bE9iamVjdCo+KG9iamVjdCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGludGxPYmplY3QtPmdsb2JhbE9iamVjdCh2bSk7CisgICAgcmV0dXJuIEludGxMaXN0Rm9ybWF0
Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgSW50bExpc3RGb3JtYXRDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5
cGUoKSksIGpzQ2FzdDxJbnRsTGlzdEZvcm1hdFByb3RvdHlwZSo+KGdsb2JhbE9iamVjdC0+bGlz
dEZvcm1hdFN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGVPYmplY3QoKSkpOworfQorCiBzdGF0
aWMgSlNWYWx1ZSBjcmVhdGVMb2NhbGVDb25zdHJ1Y3RvcihWTSYgdm0sIEpTT2JqZWN0KiBvYmpl
Y3QpCiB7CiAgICAgSW50bE9iamVjdCogaW50bE9iamVjdCA9IGpzQ2FzdDxJbnRsT2JqZWN0Kj4o
b2JqZWN0KTsKQEAgLTE4MSw3ICsxOTEsMTIgQEAgdm9pZCBJbnRsT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KikKICNpZiBIQVZFKElDVV9VX0xPQ0FMRV9ESVNQ
TEFZX05BTUVTKQogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5EaXNwbGF5TmFtZXMsIGNyZWF0ZURpc3BsYXlOYW1lc0NvbnN0cnVjdG9yKHZtLCB0
aGlzKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkp
OwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY3JlYXRlRGlzcGxheU5hbWVzQ29uc3RydWN0b3Ip
OworICAgIFVOVVNFRF9QQVJBTSgmY3JlYXRlRGlzcGxheU5hbWVzQ29uc3RydWN0b3IpOworI2Vu
ZGlmCisjaWYgSEFWRShJQ1VfVV9MSVNUX0ZPUk1BVFRFUikKKyAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+TGlzdEZvcm1hdCwgY3JlYXRlTGlzdEZv
cm1hdENvbnN0cnVjdG9yKHZtLCB0aGlzKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oJmNyZWF0ZUxp
c3RGb3JtYXRDb25zdHJ1Y3Rvcik7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE9iamVjdC5oCmluZGV4IGE5NTgyMDk2MzZjZDk1Njk2Y2Q4OWEwYTEyYWNi
MjljY2U0YTQxMDYuLmU4MjdmZmQwYjdhMzJiY2RiNTQ4OGY2Yjk4OGJiZGVjMTI5NGE3ZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKQEAgLTg5LDYgKzg5
LDcgQEAgaW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERpc3BsYXlOYW1lc0F2YWls
YWJsZUxvY2FsZXMoKSB7IHJldHVybiBpbnRsQXYKIGlubGluZSBjb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIGludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWls
YWJsZUxvY2FsZXMoKTsgfQogaW5saW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bFBsdXJh
bFJ1bGVzQXZhaWxhYmxlTG9jYWxlcygpIHsgcmV0dXJuIGludGxBdmFpbGFibGVMb2NhbGVzKCk7
IH0KIGlubGluZSBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGludGxSZWxhdGl2ZVRpbWVGb3JtYXRB
dmFpbGFibGVMb2NhbGVzKCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQoraW5s
aW5lIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bExpc3RGb3JtYXRBdmFpbGFibGVMb2NhbGVz
KCkgeyByZXR1cm4gaW50bEF2YWlsYWJsZUxvY2FsZXMoKTsgfQogCiBUcmlTdGF0ZSBpbnRsQm9v
bGVhbk9wdGlvbihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1l
KTsKIFN0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBvcHRp
b25zLCBQcm9wZXJ0eU5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyKj4gdmFs
dWVzLCBjb25zdCBjaGFyKiBub3RGb3VuZCwgY29uc3QgY2hhciogZmFsbGJhY2spOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDNj
NWRkZWEwOTMzODAyMjI0MGIxMDExMjY0ZDM4OWQzYjMzMTU5ZTQuLmFiMjhjMTM0NTFjNzYwODBl
NjRjZWYwMGMyZTFkNjhmODNkOTYyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTc4LDYgKzc4LDggQEAKICNpbmNsdWRlICJJ
bnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuaCIKICNpbmNsdWRlICJJbnRsRGlzcGxheU5hbWVz
LmgiCiAjaW5jbHVkZSAiSW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZS5oIgorI2luY2x1ZGUgIklu
dGxMaXN0Rm9ybWF0LmgiCisjaW5jbHVkZSAiSW50bExpc3RGb3JtYXRQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJJbnRsTG9jYWxlLmgiCiAjaW5jbHVkZSAiSW50bExvY2FsZVByb3RvdHlwZS5oIgog
I2luY2x1ZGUgIkludGxOdW1iZXJGb3JtYXQuaCIKQEAgLTEwMjIsNiArMTAyNCwxMiBAQCBjYXBp
dGFsTmFtZSAjIyBDb25zdHJ1Y3RvciogbG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVy
ZUZsYWcgPyBjYXBpdGFsTmFtZQogICAgICAgICAgICAgSW50bERpc3BsYXlOYW1lc1Byb3RvdHlw
ZSogZGlzcGxheU5hbWVzUHJvdG90eXBlID0gSW50bERpc3BsYXlOYW1lc1Byb3RvdHlwZTo6Y3Jl
YXRlKGluaXQudm0sIEludGxEaXNwbGF5TmFtZXNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShp
bml0LnZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsK
ICAgICAgICAgICAgIGluaXQuc2V0KEludGxEaXNwbGF5TmFtZXM6OmNyZWF0ZVN0cnVjdHVyZShp
bml0LnZtLCBnbG9iYWxPYmplY3QsIGRpc3BsYXlOYW1lc1Byb3RvdHlwZSkpOwogICAgICAgICB9
KTsKKyAgICBtX2xpc3RGb3JtYXRTdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29u
c3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIp
OworICAgICAgICAgICAgSW50bExpc3RGb3JtYXRQcm90b3R5cGUqIGxpc3RGb3JtYXRQcm90b3R5
cGUgPSBJbnRsTGlzdEZvcm1hdFByb3RvdHlwZTo6Y3JlYXRlKGluaXQudm0sIEludGxMaXN0Rm9y
bWF0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7CisgICAgICAgICAgICBpbml0LnNldChJbnRs
TGlzdEZvcm1hdDo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGdsb2JhbE9iamVjdCwgbGlzdEZv
cm1hdFByb3RvdHlwZSkpOworICAgICAgICB9KTsKICAgICBtX2xvY2FsZVN0cnVjdHVyZS5pbml0
TGF0ZXIoCiAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7
CiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4oaW5pdC5vd25lcik7CkBAIC0xOTEwLDYgKzE5MTgsNyBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiAgICAgdGhpc09iamVjdC0+bV9kZWZhdWx0Q29sbGF0b3IudmlzaXQodmlzaXRvcik7CiAg
ICAgdGhpc09iamVjdC0+bV9jb2xsYXRvclN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0
aGlzT2JqZWN0LT5tX2Rpc3BsYXlOYW1lc1N0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0
aGlzT2JqZWN0LT5tX2xpc3RGb3JtYXRTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhp
c09iamVjdC0+bV9sb2NhbGVTdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVj
dC0+bV9wbHVyYWxSdWxlc1N0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0
LT5tX3JlbGF0aXZlVGltZUZvcm1hdFN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDQxYzhiYTk0
NDY4ZmQyMjk1MjY3OWFjOGExZmJjOTZhMmI0NGM3MGUuLjIzYzY2Mzc0M2ZjYzRkYTgyYzZiODM2
NTY3YmNkMDZmNDkxOTczMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaApAQCAtMzEwLDYgKzMxMCw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0
IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIExhenlQcm9wZXJ0eTxK
U0dsb2JhbE9iamVjdCwgSW50bENvbGxhdG9yPiBtX2RlZmF1bHRDb2xsYXRvcjsKICAgICBMYXp5
UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jb2xsYXRvclN0cnVjdHVyZTsK
ICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9kaXNwbGF5TmFt
ZXNTdHJ1Y3R1cmU7CisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+
IG1fbGlzdEZvcm1hdFN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZT4gbV9sb2NhbGVTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmU+IG1fcGx1cmFsUnVsZXNTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3Bl
cnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fcmVsYXRpdmVUaW1lRm9ybWF0U3RydWN0
dXJlOwpAQCAtODIzLDYgKzgyNCw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIFN0cnVjdHVyZSogY29sbGF0b3JTdHJ1Y3R1
cmUoKSB7IHJldHVybiBtX2NvbGxhdG9yU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVj
dHVyZSogZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2RhdGVUaW1lRm9ybWF0
U3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogZGlzcGxheU5hbWVzU3RydWN0
dXJlKCkgeyByZXR1cm4gbV9kaXNwbGF5TmFtZXNTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CisgICAg
U3RydWN0dXJlKiBsaXN0Rm9ybWF0U3RydWN0dXJlKCkgeyByZXR1cm4gbV9saXN0Rm9ybWF0U3Ry
dWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbnVtYmVyRm9ybWF0U3RydWN0dXJl
KCkgeyByZXR1cm4gbV9udW1iZXJGb3JtYXRTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3Ry
dWN0dXJlKiBsb2NhbGVTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2xvY2FsZVN0cnVjdHVyZS5nZXQo
dGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIHBsdXJhbFJ1bGVzU3RydWN0dXJlKCkgeyByZXR1cm4g
bV9wbHVyYWxSdWxlc1N0cnVjdHVyZS5nZXQodGhpcyk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAppbmRleCA5YjY0NGY4ODkyZmI5YTAyZDQxNDFhOTk2MTAzOTU3YzE2YzZmMzFi
Li5jOTUxYTM4YmNiODQyMjY2YWRhZGNkMDE3YjY4Y2JkMmNjYzBkNzA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAiSW50bENv
bGxhdG9yLmgiCiAjaW5jbHVkZSAiSW50bERhdGVUaW1lRm9ybWF0LmgiCiAjaW5jbHVkZSAiSW50
bERpc3BsYXlOYW1lcy5oIgorI2luY2x1ZGUgIkludGxMaXN0Rm9ybWF0LmgiCiAjaW5jbHVkZSAi
SW50bExvY2FsZS5oIgogI2luY2x1ZGUgIkludGxOdW1iZXJGb3JtYXQuaCIKICNpbmNsdWRlICJJ
bnRsUGx1cmFsUnVsZXMuaCIKQEAgLTMxNCw2ICszMTUsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUsIFdURjo6UnVuTG9vcCogcnVuTG9vcCwgYm9vbCogc3VjY2Vz
cykKICAgICAsIGludGxDb2xsYXRvckhlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0
ZTxJbnRsQ29sbGF0b3I+KCkpCiAgICAgLCBpbnRsRGF0ZVRpbWVGb3JtYXRIZWFwQ2VsbFR5cGUo
SXNvSGVhcENlbGxUeXBlOjpjcmVhdGU8SW50bERhdGVUaW1lRm9ybWF0PigpKQogICAgICwgaW50
bERpc3BsYXlOYW1lc0hlYXBDZWxsVHlwZShJc29IZWFwQ2VsbFR5cGU6OmNyZWF0ZTxJbnRsRGlz
cGxheU5hbWVzPigpKQorICAgICwgaW50bExpc3RGb3JtYXRIZWFwQ2VsbFR5cGUoSXNvSGVhcENl
bGxUeXBlOjpjcmVhdGU8SW50bExpc3RGb3JtYXQ+KCkpCiAgICAgLCBpbnRsTG9jYWxlSGVhcENl
bGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEludGxMb2NhbGU+KCkpCiAgICAgLCBpbnRs
TnVtYmVyRm9ybWF0SGVhcENlbGxUeXBlKElzb0hlYXBDZWxsVHlwZTo6Y3JlYXRlPEludGxOdW1i
ZXJGb3JtYXQ+KCkpCiAgICAgLCBpbnRsUGx1cmFsUnVsZXNIZWFwQ2VsbFR5cGUoSXNvSGVhcENl
bGxUeXBlOjpjcmVhdGU8SW50bFBsdXJhbFJ1bGVzPigpKQpAQCAtMTU0NCw2ICsxNTQ2LDcgQEAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGNhbGxiYWNrQVBJV3JhcHBl
ckdsb2JhbE9iamVjdFNwYWNlLCBjYWwKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhpbnRsQ29sbGF0b3JTcGFjZSwgaW50bENvbGxhdG9ySGVhcENlbGxUeXBlLmdldCgp
LCBJbnRsQ29sbGF0b3IpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
aW50bERhdGVUaW1lRm9ybWF0U3BhY2UsIGludGxEYXRlVGltZUZvcm1hdEhlYXBDZWxsVHlwZS5n
ZXQoKSwgSW50bERhdGVUaW1lRm9ybWF0KQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKGludGxEaXNwbGF5TmFtZXNTcGFjZSwgaW50bERpc3BsYXlOYW1lc0hlYXBDZWxs
VHlwZS5nZXQoKSwgSW50bERpc3BsYXlOYW1lcykKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhpbnRsTGlzdEZvcm1hdFNwYWNlLCBpbnRsTGlzdEZvcm1hdEhlYXBDZWxs
VHlwZS5nZXQoKSwgSW50bExpc3RGb3JtYXQpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSX1NMT1coaW50bExvY2FsZVNwYWNlLCBpbnRsTG9jYWxlSGVhcENlbGxUeXBlLmdldCgp
LCBJbnRsTG9jYWxlKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKGlu
dGxOdW1iZXJGb3JtYXRTcGFjZSwgaW50bE51bWJlckZvcm1hdEhlYXBDZWxsVHlwZS5nZXQoKSwg
SW50bE51bWJlckZvcm1hdCkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhpbnRsUGx1cmFsUnVsZXNTcGFjZSwgaW50bFBsdXJhbFJ1bGVzSGVhcENlbGxUeXBlLmdldCgp
LCBJbnRsUGx1cmFsUnVsZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA0MTI5
MjQ3Y2QyNDU2ZDY3NTY5NzA3YzkyYjZjN2ZjMjM5YzJmYTA5Li42ZTc5OWQ0NTJmNTc5NDE5MjFj
ZmM2NGEyNzRmMGJlNTM4ZjFiY2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAg
LTEyOCw2ICsxMjgsNyBAQCBjbGFzcyBJbnRsQ2FjaGU7CiBjbGFzcyBJbnRsQ29sbGF0b3I7CiBj
bGFzcyBJbnRsRGF0ZVRpbWVGb3JtYXQ7CiBjbGFzcyBJbnRsRGlzcGxheU5hbWVzOworY2xhc3Mg
SW50bExpc3RGb3JtYXQ7CiBjbGFzcyBJbnRsTG9jYWxlOwogY2xhc3MgSW50bE51bWJlckZvcm1h
dDsKIGNsYXNzIEludGxQbHVyYWxSdWxlczsKQEAgLTQwOCw2ICs0MDksNyBAQCBjbGFzcyBWTSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4sIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0
Tm9kZTxWTT4gewogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IGludGxDb2xs
YXRvckhlYXBDZWxsVHlwZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiBp
bnRsRGF0ZVRpbWVGb3JtYXRIZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hl
YXBDZWxsVHlwZT4gaW50bERpc3BsYXlOYW1lc0hlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiBpbnRsTGlzdEZvcm1hdEhlYXBDZWxsVHlwZTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SXNvSGVhcENlbGxUeXBlPiBpbnRsTG9jYWxlSGVhcENlbGxUeXBlOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IGludGxOdW1iZXJGb3JtYXRIZWFw
Q2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gaW50bFBsdXJh
bFJ1bGVzSGVhcENlbGxUeXBlOwpAQCAtNTcwLDYgKzU3Miw3IEBAIGNsYXNzIFZNIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZN
PiB7CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihpbnRsQ29sbGF0b3JT
cGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKGludGxEYXRlVGlt
ZUZvcm1hdFNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoaW50
bERpc3BsYXlOYW1lc1NwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoaW50bExpc3RGb3JtYXRTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKGludGxMb2NhbGVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSKGludGxOdW1iZXJGb3JtYXRTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKGludGxQbHVyYWxSdWxlc1NwYWNlKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9D
aGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA2Y2FkYjU1MzYzMzI0Njk0N2FmYjAw
NGJlY2RlM2M4OGIyZTgwMWMyLi4yZDUxMDM5ZDUyNjgxMGQyZTAzOTZkOTQ2NTUzMzY1NzBiZmNm
MTQyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTEwLTI0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW0VDTUEtNDAyXSBJbXBsZW1lbnQgSW50bC5MaXN0Rm9ybWF0
IChhZnRlciBJQ1UgdWxpc3RmbXRfb3BlbkZvclR5cGUgZ2V0cyBzdGFibGUpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk3NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9pbnRsLWxpc3Rm
b3JtYXQuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoc2hvdWxkTm90
VGhyb3cpOgorICAgICAgICAoc2hvdWxkVGhyb3cpOgorICAgICAgICAodHlwZW9mLkludGwuTGlz
dEZvcm1hdC5zdHJpbmdfYXBwZWFyZWRfaGVyZS5zaG91bGRCZS5uZXcuSW50bC5MaXN0Rm9ybWF0
LkRlcml2ZWRMaXN0Rm9ybWF0KToKKyAgICAgICAgKHR5cGVvZi5JbnRsLkxpc3RGb3JtYXQuc3Ry
aW5nX2FwcGVhcmVkX2hlcmUuc2hvdWxkQmUubmV3LkludGwuTGlzdEZvcm1hdCk6CisKIDIwMjAt
MTAtMjEgIENhaXRsaW4gUG90dGVyICA8Y2FpdHBAaWdhbGlhLmNvbT4KIAogICAgICAgICBbSlND
XSBzdXBwb3J0IG9wX2dldF9wcml2YXRlX25hbWUgaW4gREZHIGFuZCBGVEwKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL2ludGwtbGlzdGZvcm1hdC5qcyBiL0pTVGVzdHMvc3RyZXNzL2ludGwt
bGlzdGZvcm1hdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjQ3Nzg5MjY1YjNhNTFkMGMxMDU3NTBmNjBhMmY3
OGFkZDc1ZTBhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvaW50bC1saXN0Zm9y
bWF0LmpzCkBAIC0wLDAgKzEsMjE4IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVj
dGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcihgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1gKTsKK30KKworZnVu
Y3Rpb24gc2hvdWxkTm90VGhyb3coZnVuYykgeworICAgIGZ1bmMoKTsKK30KKworZnVuY3Rpb24g
c2hvdWxkVGhyb3coZnVuYywgZXJyb3JUeXBlKSB7CisgICAgbGV0IGVycm9yOworICAgIHRyeSB7
CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsK
KyAgICB9CisKKyAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIGVycm9yVHlwZSkpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtlcnJvclR5cGUubmFtZX0hYCk7Cit9CisKK2lm
ICh0eXBlb2YgSW50bC5MaXN0Rm9ybWF0ICE9PSAndW5kZWZpbmVkJykgeworICAgIHsKKyAgICAg
ICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hNDAyLyNwbHVyYWxydWxlcy1vYmplY3Rz
CisgICAgICAgIC8vIFRoZSBJbnRsLkxpc3RGb3JtYXQgQ29uc3RydWN0b3IKKworICAgICAgICAv
LyBUaGUgTGlzdEZvcm1hdCBjb25zdHJ1Y3RvciBpcyB0aGUgJUxpc3RGb3JtYXQlIGludHJpbnNp
YyBvYmplY3QgYW5kIGEgc3RhbmRhcmQgYnVpbHQtaW4gcHJvcGVydHkgb2YgdGhlIEludGwgb2Jq
ZWN0LgorICAgICAgICBzaG91bGRCZShJbnRsLkxpc3RGb3JtYXQgaW5zdGFuY2VvZiBGdW5jdGlv
biwgdHJ1ZSk7CisKKyAgICAgICAgLy8gSW50bC5MaXN0Rm9ybWF0IChbIGxvY2FsZXMgWywgb3B0
aW9ucyBdIF0pCisKKyAgICAgICAgLy8gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgdGhyb3cg
YSBUeXBlRXJyb3IgZXhjZXB0aW9uLgorICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxp
c3RGb3JtYXQoKSwgVHlwZUVycm9yKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5M
aXN0Rm9ybWF0LmNhbGwoe30pLCBUeXBlRXJyb3IpOworCisgICAgICAgIHNob3VsZFRocm93KCgp
ID0+IG5ldyBJbnRsLkxpc3RGb3JtYXQoJyQnKSwgUmFuZ2VFcnJvcik7CisgICAgICAgIHNob3Vs
ZFRocm93KCgpID0+IG5ldyBJbnRsLkxpc3RGb3JtYXQoJ2VuJywgbnVsbCksIFR5cGVFcnJvcik7
CisgICAgICAgIHNob3VsZEJlKG5ldyBJbnRsLkxpc3RGb3JtYXQoKSBpbnN0YW5jZW9mIEludGwu
TGlzdEZvcm1hdCwgdHJ1ZSk7CisKKyAgICAgICAgLy8gU3ViY2xhc3NhYmxlCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNsYXNzIERlcml2ZWRMaXN0Rm9ybWF0IGV4dGVuZHMgSW50bC5MaXN0Rm9y
bWF0IHt9OworICAgICAgICAgICAgc2hvdWxkQmUoKG5ldyBEZXJpdmVkTGlzdEZvcm1hdCkgaW5z
dGFuY2VvZiBEZXJpdmVkTGlzdEZvcm1hdCwgdHJ1ZSk7CisgICAgICAgICAgICBzaG91bGRCZSgo
bmV3IERlcml2ZWRMaXN0Rm9ybWF0KSBpbnN0YW5jZW9mIEludGwuTGlzdEZvcm1hdCwgdHJ1ZSk7
CisgICAgICAgICAgICBzaG91bGRCZShuZXcgRGVyaXZlZExpc3RGb3JtYXQoJ2VuJykuZm9ybWF0
KFsnT3JhbmdlJywgJ0FwcGxlJywgJ0xlbW9uJ10pLCAnT3JhbmdlLCBBcHBsZSwgYW5kIExlbW9u
Jyk7CisgICAgICAgICAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IERlcml2
ZWRMaXN0Rm9ybWF0KSwgRGVyaXZlZExpc3RGb3JtYXQucHJvdG90eXBlKTsKKyAgICAgICAgICAg
IHNob3VsZEJlKE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3
IERlcml2ZWRMaXN0Rm9ybWF0KSksIEludGwuTGlzdEZvcm1hdC5wcm90b3R5cGUpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gUHJvcGVydGllcyBvZiB0aGUgSW50bC5MaXN0Rm9ybWF0IENvbnN0
cnVjdG9yCisKKyAgICAgICAgLy8gbGVuZ3RoIHByb3BlcnR5ICh3aG9zZSB2YWx1ZSBpcyAwKQor
ICAgICAgICBzaG91bGRCZShJbnRsLkxpc3RGb3JtYXQubGVuZ3RoLCAwKTsKKworICAgICAgICAv
LyBJbnRsLkxpc3RGb3JtYXQucHJvdG90eXBlCisKKyAgICAgICAgLy8gVGhpcyBwcm9wZXJ0eSBo
YXMgdGhlIGF0dHJpYnV0ZXMgeyBbW1dyaXRhYmxlXV06IGZhbHNlLCBbW0VudW1lcmFibGVdXTog
ZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IGZhbHNlIH0uCisgICAgICAgIHNob3VsZEJlKE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5MaXN0Rm9ybWF0LCAncHJvdG90eXBlJyku
d3JpdGFibGUsIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihJbnRsLkxpc3RGb3JtYXQsICdwcm90b3R5cGUnKS5lbnVtZXJhYmxlLCBmYWxz
ZSk7CisgICAgICAgIHNob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50
bC5MaXN0Rm9ybWF0LCAncHJvdG90eXBlJykuY29uZmlndXJhYmxlLCBmYWxzZSk7CisKKyAgICAg
ICAgLy8gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZiAobG9jYWxlcyBbLCBvcHRp
b25zIF0pCisKKyAgICAgICAgLy8gVGhlIHZhbHVlIG9mIHRoZSBsZW5ndGggcHJvcGVydHkgb2Yg
dGhlIHN1cHBvcnRlZExvY2FsZXNPZiBtZXRob2QgaXMgMS4KKyAgICAgICAgc2hvdWxkQmUoSW50
bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5sZW5ndGgsIDEpOworCisgICAgICAgIC8v
IFJldHVybnMgU3VwcG9ydGVkTG9jYWxlcworICAgICAgICBzaG91bGRCZShJbnRsLkxpc3RGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKCkgaW5zdGFuY2VvZiBBcnJheSwgdHJ1ZSk7CisgICAgICAg
IC8vIERvZXNuJ3QgY2FyZSBhYm91dCBgdGhpc2AuCisgICAgICAgIHNob3VsZEJlKEpTT04uc3Ry
aW5naWZ5KEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4n
KSksICdbImVuIl0nKTsKKyAgICAgICAgc2hvdWxkQmUoSlNPTi5zdHJpbmdpZnkoSW50bC5MaXN0
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKHt9LCAnZW4nKSksICdbImVuIl0nKTsKKyAg
ICAgICAgc2hvdWxkQmUoSlNPTi5zdHJpbmdpZnkoSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZi5jYWxsKDEsICdlbicpKSwgJ1siZW4iXScpOworICAgICAgICAvLyBJZ25vcmVzIG5v
bi1vYmplY3QsIG5vbi1zdHJpbmcgbGlzdC4KKyAgICAgICAgc2hvdWxkQmUoSlNPTi5zdHJpbmdp
ZnkoSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZig5KSksICdbXScpOworICAgICAg
ICAvLyBNYWtlcyBhbiBhcnJheSBvZiB0YWdzLgorICAgICAgICBzaG91bGRCZShKU09OLnN0cmlu
Z2lmeShJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbicpKSwgJ1siZW4iXScp
OworICAgICAgICAvLyBIYW5kbGVzIGFycmF5LWxpa2Ugb2JqZWN0cyB3aXRoIGhvbGVzLgorICAg
ICAgICBzaG91bGRCZShKU09OLnN0cmluZ2lmeShJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKHsgbGVuZ3RoOiA0LCAxOiAnZW4nLCAwOiAnZXMnLCAzOiAnZGUnIH0pKSwgJ1siZXMi
LCJlbiIsImRlIl0nKTsKKyAgICAgICAgLy8gRGVkdXBsaWNhdGVzIHRhZ3MuCisgICAgICAgIHNo
b3VsZEJlKEpTT04uc3RyaW5naWZ5KEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
WyAnZW4nLCAncHQnLCAnZW4nLCAnZXMnIF0pKSwgJ1siZW4iLCJwdCIsImVzIl0nKTsKKyAgICAg
ICAgLy8gQ2Fub25pY2FsaXplcyB0YWdzLgorICAgICAgICBzaG91bGRCZSgKKyAgICAgICAgICAg
IEpTT04uc3RyaW5naWZ5KEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ0VuLWxh
VG4tdXMtdmFyaUFudC1mT09iYXItMWFiYy1VLWtuLXRSdWUtQS1hYS1hYWEteC1SRVNFUlZFRCcp
KSwKKyAgICAgICAgICAgICR2bS5pY3VWZXJzaW9uKCkgPj0gNjcKKyAgICAgICAgICAgICAgICA/
ICdbImVuLUxhdG4tVVMtMWFiYy1mb29iYXItdmFyaWFudC1hLWFhLWFhYS11LWtuLXgtcmVzZXJ2
ZWQiXScKKyAgICAgICAgICAgICAgICA6ICdbImVuLUxhdG4tVVMtdmFyaWFudC1mb29iYXItMWFi
Yy1hLWFhLWFhYS11LWtuLXgtcmVzZXJ2ZWQiXScKKyAgICAgICAgKTsKKyAgICAgICAgLy8gVGhy
b3dzIG9uIHByb2JsZW1zIHdpdGggbGVuZ3RoLCBnZXQsIG9yIHRvU3RyaW5nLgorICAgICAgICBz
aG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVj
dC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBuZXcgRXJyb3IoKTsgfSB9
IH0pKSwgRXJyb3IpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6
IDEgfSwgMDogeyBnZXQoKSB7IHRocm93IG5ldyBFcnJvcigpOyB9IH0gfSkpLCBFcnJvcik7Cisg
ICAgICAgIHNob3VsZFRocm93KCgpID0+IEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBuZXcgRXJyb3IoKTsgfSB9IF0pLCBFcnJvcik7Cisg
ICAgICAgIC8vIFRocm93cyBvbiBiYWQgdGFncy4KKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4g
SW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9rJyksIFJhbmdlRXJyb3Ip
OworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKCd4LXNvbWUtdGhpbmcnKSwgUmFuZ2VFcnJvcik7CisgICAgICAgIHNob3VsZFRocm93
KCgpID0+IEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0pLCBUeXBlRXJy
b3IpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKCcnKSwgUmFuZ2VFcnJvcik7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IElu
dGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSwgUmFuZ2VFcnJvcik7CisgICAg
ICAgIHNob3VsZFRocm93KCgpID0+IEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J2FiY2RlZmdoaWonKSwgUmFuZ2VFcnJvcik7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IElu
dGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJyMkJyksIFJhbmdlRXJyb3IpOworICAg
ICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KCdlbi1ALWFiYycpLCBSYW5nZUVycm9yKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50
bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdScpLCBSYW5nZUVycm9yKTsKKyAg
ICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
ZignZW4tdS1rbi10cnVlLXUta28tdHJ1ZScpLCBSYW5nZUVycm9yKTsKKyAgICAgICAgc2hvdWxk
VGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4teCcpLCBS
YW5nZUVycm9yKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZignZW4tKicpLCBSYW5nZUVycm9yKTsKKyAgICAgICAgc2hvdWxkVGhy
b3coKCkgPT4gSW50bC5MaXN0Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tJyksIFJhbmdl
RXJyb3IpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCdlbi0tVVMnKSwgUmFuZ2VFcnJvcik7CisgICAgICAgIHNob3VsZFRocm93
KCgpID0+IEludGwuTGlzdEZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2kta2xpbmdvbicpLCBS
YW5nZUVycm9yKTsgLy8gZ3JhbmRmYXRoZXJlZCB0YWcgaXMgbm90IGFjY2VwdGVkIGJ5IElzU3Ry
dWN0dXJhbGx5VmFsaWRMYW5ndWFnZVRhZworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRs
Lkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCd4LWVuLVVTLTEyMzQ1JyksIFJhbmdlRXJy
b3IpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKCd4LTEyMzQ1LTEyMzQ1LWVuLVVTJyksIFJhbmdlRXJyb3IpOworICAgICAgICBz
aG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCd4LWVu
LVVTLTEyMzQ1LTEyMzQ1JyksIFJhbmdlRXJyb3IpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9
PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCd4LWVuLXUtZm9vJyksIFJhbmdl
RXJyb3IpOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCd4LWVuLXUtZm9vLXUtYmFyJyksIFJhbmdlRXJyb3IpOworCisgICAgICAg
IC8vIEFjY2VwdHMgdmFsaWQgdGFncworICAgICAgICB2YXIgdmFsaWRMYW5ndWFnZVRhZ3MgPSBb
CisgICAgICAgICAgICAnZGUnLCAvLyBJU08gNjM5IGxhbmd1YWdlIGNvZGUKKyAgICAgICAgICAg
ICdkZS1ERScsIC8vICsgSVNPIDMxNjYtMSBjb3VudHJ5IGNvZGUKKyAgICAgICAgICAgICdERS1k
ZScsIC8vIHRhZ3MgYXJlIGNhc2UtaW5zZW5zaXRpdmUKKyAgICAgICAgICAgICdjbW4nLCAvLyBJ
U08gNjM5IGxhbmd1YWdlIGNvZGUKKyAgICAgICAgICAgICdjbW4tSGFucycsIC8vICsgc2NyaXB0
IGNvZGUKKyAgICAgICAgICAgICdDTU4taEFOUycsIC8vIHRhZ3MgYXJlIGNhc2UtaW5zZW5zaXRp
dmUKKyAgICAgICAgICAgICdjbW4taGFucy1jbicsIC8vICsgSVNPIDMxNjYtMSBjb3VudHJ5IGNv
ZGUKKyAgICAgICAgICAgICdlcy00MTknLCAvLyArIFVOIE0uNDkgcmVnaW9uIGNvZGUKKyAgICAg
ICAgICAgICdlcy00MTktdS1udS1sYXRuLWN1LWJvYicsIC8vICsgVW5pY29kZSBsb2NhbGUgZXh0
ZW5zaW9uIHNlcXVlbmNlCisgICAgICAgICAgICAnY21uLWhhbnMtY24tdC1jYS11LWNhLXgtdC11
JywgLy8gc2luZ2xldG9uIHN1YnRhZ3MgY2FuIGFsc28gYmUgdXNlZCBhcyBwcml2YXRlIHVzZSBz
dWJ0YWdzCisgICAgICAgICAgICAnZW5vY2hpYW4tZW5vY2hpYW4nLCAvLyBsYW5ndWFnZSBhbmQg
dmFyaWFudCBzdWJ0YWdzIG1heSBiZSB0aGUgc2FtZQorICAgICAgICAgICAgJ2RlLWdyZWdvcnkt
dS1jYS1ncmVnb3J5JywgLy8gdmFyaWFudCBhbmQgZXh0ZW5zaW9uIHN1YnRhZ3MgbWF5IGJlIHRo
ZSBzYW1lCisgICAgICAgICAgICAnYWEtYS1mb28teC1hLWZvby1iYXInLCAvLyB2YXJpYW50IHN1
YnRhZ3MgY2FuIGFsc28gYmUgdXNlZCBhcyBwcml2YXRlIHVzZSBzdWJ0YWdzCisgICAgICAgIF07
CisgICAgICAgIGZvciAodmFyIHZhbGlkTGFuZ3VhZ2VUYWcgb2YgdmFsaWRMYW5ndWFnZVRhZ3Mp
CisgICAgICAgICAgICBzaG91bGROb3RUaHJvdygoKSA9PiBJbnRsLkxpc3RGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKHZhbGlkTGFuZ3VhZ2VUYWcpKTsKKworICAgICAgICAvLyBQcm9wZXJ0aWVz
IG9mIHRoZSBJbnRsLkxpc3RGb3JtYXQgUHJvdG90eXBlIE9iamVjdAorCisgICAgICAgIC8vIFRo
ZSBJbnRsLkxpc3RGb3JtYXQgcHJvdG90eXBlIG9iamVjdCBpcyBpdHNlbGYgYW4gb3JkaW5hcnkg
b2JqZWN0LgorICAgICAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoSW50bC5MaXN0
Rm9ybWF0LnByb3RvdHlwZSksIE9iamVjdC5wcm90b3R5cGUpOworCisgICAgICAgIC8vIEludGwu
TGlzdEZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IKKyAgICAgICAgLy8gVGhlIGluaXRpYWwg
dmFsdWUgb2YgSW50bC5MaXN0Rm9ybWF0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyB0aGUgaW50
cmluc2ljIG9iamVjdCAlTGlzdEZvcm1hdCUuCisgICAgICAgIHNob3VsZEJlKEludGwuTGlzdEZv
cm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IsIEludGwuTGlzdEZvcm1hdCk7CisKKyAgICAgICAg
Ly8gSW50bC5MaXN0Rm9ybWF0LnByb3RvdHlwZSBbIEBAdG9TdHJpbmdUYWcgXQorICAgICAgICAv
LyBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgQEB0b1N0cmluZ1RhZyBwcm9wZXJ0eSBpcyB0aGUg
c3RyaW5nIHZhbHVlICJJbnRsLkxpc3RGb3JtYXQiLgorICAgICAgICBzaG91bGRCZShJbnRsLkxp
c3RGb3JtYXQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10sICdJbnRsLkxpc3RGb3JtYXQn
KTsKKyAgICAgICAgc2hvdWxkQmUoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEludGwu
TGlzdEZvcm1hdC5wcm90b3R5cGUpLCAnW29iamVjdCBJbnRsLkxpc3RGb3JtYXRdJyk7CisgICAg
ICAgIC8vIFRoaXMgcHJvcGVydHkgaGFzIHRoZSBhdHRyaWJ1dGVzIHsgW1tXcml0YWJsZV1dOiBm
YWxzZSwgW1tFbnVtZXJhYmxlXV06IGZhbHNlLCBbW0NvbmZpZ3VyYWJsZV1dOiB0cnVlIH0uCisg
ICAgICAgIHNob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5MaXN0
Rm9ybWF0LnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnKS53cml0YWJsZSwgZmFsc2UpOwor
ICAgICAgICBzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTGlz
dEZvcm1hdC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZykuZW51bWVyYWJsZSwgZmFsc2Up
OworICAgICAgICBzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwu
TGlzdEZvcm1hdC5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZykuY29uZmlndXJhYmxlLCB0
cnVlKTsKKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBsZiA9IG5ldyBJbnRsLkxpc3RGb3Jt
YXQoImVuIiwgeworICAgICAgICAgICAgbG9jYWxlTWF0Y2hlcjogImJlc3QgZml0IiwKKyAgICAg
ICAgICAgIHR5cGU6ICJjb25qdW5jdGlvbiIsCisgICAgICAgICAgICBzdHlsZTogImxvbmciLAor
ICAgICAgICB9KTsKKyAgICAgICAgc2hvdWxkQmUobGYuZm9ybWF0KFsnTW90b3JjeWNsZScsICdU
cnVjaycgLCAnQ2FyJ10pLCBgTW90b3JjeWNsZSwgVHJ1Y2ssIGFuZCBDYXJgKTsKKyAgICAgICAg
c2hvdWxkQmUobGYuZm9ybWF0KFtdKSwgYGApOworICAgICAgICBzaG91bGRCZShsZi5mb3JtYXQo
KSwgYGApOworICAgICAgICBzaG91bGRCZShsZi5mb3JtYXQodW5kZWZpbmVkKSwgYGApOworICAg
ICAgICBzaG91bGRCZShsZi5mb3JtYXQoIkFwcGxlIiksIGBBLCBwLCBwLCBsLCBhbmQgZWApOwor
ICAgICAgICBzaG91bGRUaHJvdygoKSA9PiBsZi5mb3JtYXQoNDIpLCBUeXBlRXJyb3IpOworICAg
ICAgICBzaG91bGRUaHJvdygoKSA9PiBsZi5mb3JtYXQobnVsbCksIFR5cGVFcnJvcik7CisgICAg
ICAgIHNob3VsZFRocm93KCgpID0+IGxmLmZvcm1hdChbbnVsbF0pLCBUeXBlRXJyb3IpOworICAg
ICAgICBzaG91bGRCZShKU09OLnN0cmluZ2lmeShsZi5yZXNvbHZlZE9wdGlvbnMoKSksIGB7Imxv
Y2FsZSI6ImVuIiwidHlwZSI6ImNvbmp1bmN0aW9uIiwic3R5bGUiOiJsb25nIn1gKTsKKyAgICAg
ICAgc2hvdWxkQmUoSlNPTi5zdHJpbmdpZnkoUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSW50bC5MaXN0Rm9ybWF0LnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnKSksIGB7InZh
bHVlIjoiSW50bC5MaXN0Rm9ybWF0Iiwid3JpdGFibGUiOmZhbHNlLCJlbnVtZXJhYmxlIjpmYWxz
ZSwiY29uZmlndXJhYmxlIjp0cnVlfWApOworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0IGxp
c3QgPSBbJ01vdG9yY3ljbGUnLCAnQnVzJywgJ0NhciddOworICAgICAgICBzaG91bGRCZShuZXcg
SW50bC5MaXN0Rm9ybWF0KCdlbi1HQicsIHsgc3R5bGU6ICdsb25nJywgdHlwZTogJ2Nvbmp1bmN0
aW9uJyB9KS5mb3JtYXQobGlzdCksIGBNb3RvcmN5Y2xlLCBCdXMgYW5kIENhcmApOworICAgICAg
ICBzaG91bGRCZShuZXcgSW50bC5MaXN0Rm9ybWF0KCdlbi1HQicsIHsgc3R5bGU6ICdzaG9ydCcs
IHR5cGU6ICdjb25qdW5jdGlvbicgfSkuZm9ybWF0KGxpc3QpLCBgTW90b3JjeWNsZSwgQnVzIGFu
ZCBDYXJgKTsKKyAgICAgICAgc2hvdWxkQmUobmV3IEludGwuTGlzdEZvcm1hdCgnZW4tR0InLCB7
IHN0eWxlOiAnbmFycm93JywgdHlwZTogJ2Nvbmp1bmN0aW9uJyB9KS5mb3JtYXQobGlzdCksIGBN
b3RvcmN5Y2xlLCBCdXMsIENhcmApOworICAgICAgICBzaG91bGRCZShuZXcgSW50bC5MaXN0Rm9y
bWF0KCdlbi1HQicsIHsgc3R5bGU6ICdsb25nJywgdHlwZTogJ2Rpc2p1bmN0aW9uJyB9KS5mb3Jt
YXQobGlzdCksIGBNb3RvcmN5Y2xlLCBCdXMgb3IgQ2FyYCk7CisgICAgICAgIHNob3VsZEJlKG5l
dyBJbnRsLkxpc3RGb3JtYXQoJ2VuLUdCJywgeyBzdHlsZTogJ3Nob3J0JywgdHlwZTogJ2Rpc2p1
bmN0aW9uJyB9KS5mb3JtYXQobGlzdCksIGBNb3RvcmN5Y2xlLCBCdXMgb3IgQ2FyYCk7CisgICAg
ICAgIHNob3VsZEJlKG5ldyBJbnRsLkxpc3RGb3JtYXQoJ2VuLUdCJywgeyBzdHlsZTogJ25hcnJv
dycsIHR5cGU6ICdkaXNqdW5jdGlvbicgfSkuZm9ybWF0KGxpc3QpLCBgTW90b3JjeWNsZSwgQnVz
IG9yIENhcmApOworICAgICAgICBzaG91bGRCZShuZXcgSW50bC5MaXN0Rm9ybWF0KCdlbi1HQics
IHsgc3R5bGU6ICdsb25nJywgdHlwZTogJ3VuaXQnIH0pLmZvcm1hdChsaXN0KSwgYE1vdG9yY3lj
bGUsIEJ1cywgQ2FyYCk7CisgICAgICAgIHNob3VsZEJlKG5ldyBJbnRsLkxpc3RGb3JtYXQoJ2Vu
LUdCJywgeyBzdHlsZTogJ3Nob3J0JywgdHlwZTogJ3VuaXQnIH0pLmZvcm1hdChsaXN0KSwgYE1v
dG9yY3ljbGUsIEJ1cywgQ2FyYCk7CisgICAgICAgIHNob3VsZEJlKG5ldyBJbnRsLkxpc3RGb3Jt
YXQoJ2VuLUdCJywgeyBzdHlsZTogJ25hcnJvdycsIHR5cGU6ICd1bml0JyB9KS5mb3JtYXQobGlz
dCksIGBNb3RvcmN5Y2xlIEJ1cyBDYXJgKTsKKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBs
aXN0ID0gWyfjg5DjgqTjgq8nLCAn44OQ44K5JywgJ+i7iiddOworICAgICAgICBzaG91bGRCZShu
ZXcgSW50bC5MaXN0Rm9ybWF0KCdqYS1KUCcsIHsgc3R5bGU6ICdsb25nJywgdHlwZTogJ2Nvbmp1
bmN0aW9uJyB9KS5mb3JtYXQobGlzdCksIGDjg5DjgqTjgq/jgIHjg5DjgrnjgIHou4pgKTsKKyAg
ICAgICAgc2hvdWxkQmUobmV3IEludGwuTGlzdEZvcm1hdCgnamEtSlAnLCB7IHN0eWxlOiAnc2hv
cnQnLCB0eXBlOiAnY29uanVuY3Rpb24nIH0pLmZvcm1hdChsaXN0KSwgYOODkOOCpOOCr+OAgeOD
kOOCueOAgei7imApOworICAgICAgICBzaG91bGRCZShuZXcgSW50bC5MaXN0Rm9ybWF0KCdqYS1K
UCcsIHsgc3R5bGU6ICduYXJyb3cnLCB0eXBlOiAnY29uanVuY3Rpb24nIH0pLmZvcm1hdChsaXN0
KSwgYOODkOOCpOOCr+OAgeODkOOCueOAgei7imApOworICAgICAgICBzaG91bGRCZShuZXcgSW50
bC5MaXN0Rm9ybWF0KCdqYS1KUCcsIHsgc3R5bGU6ICdsb25nJywgdHlwZTogJ2Rpc2p1bmN0aW9u
JyB9KS5mb3JtYXQobGlzdCksIGDjg5DjgqTjgq/jgIHjg5DjgrnjgIHjgb7jgZ/jga/ou4pgKTsK
KyAgICAgICAgc2hvdWxkQmUobmV3IEludGwuTGlzdEZvcm1hdCgnamEtSlAnLCB7IHN0eWxlOiAn
c2hvcnQnLCB0eXBlOiAnZGlzanVuY3Rpb24nIH0pLmZvcm1hdChsaXN0KSwgYOODkOOCpOOCr+OA
geODkOOCueOAgeOBvuOBn+OBr+i7imApOworICAgICAgICBzaG91bGRCZShuZXcgSW50bC5MaXN0
Rm9ybWF0KCdqYS1KUCcsIHsgc3R5bGU6ICduYXJyb3cnLCB0eXBlOiAnZGlzanVuY3Rpb24nIH0p
LmZvcm1hdChsaXN0KSwgYOODkOOCpOOCr+OAgeODkOOCueOAgeOBvuOBn+OBr+i7imApOworICAg
ICAgICBzaG91bGRCZShuZXcgSW50bC5MaXN0Rm9ybWF0KCdqYS1KUCcsIHsgc3R5bGU6ICdsb25n
JywgdHlwZTogJ3VuaXQnIH0pLmZvcm1hdChsaXN0KSwgYOODkOOCpOOCryDjg5Djgrkg6LuKYCk7
CisgICAgICAgIHNob3VsZEJlKG5ldyBJbnRsLkxpc3RGb3JtYXQoJ2phLUpQJywgeyBzdHlsZTog
J3Nob3J0JywgdHlwZTogJ3VuaXQnIH0pLmZvcm1hdChsaXN0KSwgYOODkOOCpOOCryDjg5Djgrkg
6LuKYCk7CisgICAgICAgIHNob3VsZEJlKG5ldyBJbnRsLkxpc3RGb3JtYXQoJ2phLUpQJywgeyBz
dHlsZTogJ25hcnJvdycsIHR5cGU6ICd1bml0JyB9KS5mb3JtYXQobGlzdCksIGDjg5DjgqTjgq/j
g5Djgrnou4pgKTsKKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBsaXN0ID0gWydNb3RvcmN5
Y2xlJywgJ0J1cycsICdDYXInXTsKKyAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBbCisgICAgICAg
ICAgICB7ICJ0eXBlIjogImVsZW1lbnQiLCAidmFsdWUiOiAiTW90b3JjeWNsZSIgfSwKKyAgICAg
ICAgICAgIHsgInR5cGUiOiAibGl0ZXJhbCIsICJ2YWx1ZSI6ICIsICIgfSwKKyAgICAgICAgICAg
IHsgInR5cGUiOiAiZWxlbWVudCIsICJ2YWx1ZSI6ICJCdXMiIH0sCisgICAgICAgICAgICB7ICJ0
eXBlIjogImxpdGVyYWwiLCAidmFsdWUiOiAiIGFuZCAiIH0sCisgICAgICAgICAgICB7ICJ0eXBl
IjogImVsZW1lbnQiLCAidmFsdWUiOiAiQ2FyIiB9CisgICAgICAgIF07CisKKyAgICAgICAgY29u
c3QgbGYgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KCdlbi1HQicsIHsgc3R5bGU6ICdsb25nJywgdHlw
ZTogJ2Nvbmp1bmN0aW9uJyB9KTsKKyAgICAgICAgY29uc3QgcGFydHMgPSBsZi5mb3JtYXRUb1Bh
cnRzKGxpc3QpOworICAgICAgICBzaG91bGRCZShwYXJ0cy5sZW5ndGgsIGV4cGVjdGVkLmxlbmd0
aCk7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIHNob3VsZEJlKHBhcnRzW2ldLnR5cGUsIGV4cGVjdGVkW2ldLnR5cGUpOworICAg
ICAgICAgICAgc2hvdWxkQmUocGFydHNbaV0udmFsdWUsIGV4cGVjdGVkW2ldLnZhbHVlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHNob3VsZEJlKEpTT04uc3RyaW5naWZ5KGxmLmZvcm1hdFRvUGFy
dHMoW10pKSwgYFtdYCk7CisgICAgICAgIHNob3VsZEJlKEpTT04uc3RyaW5naWZ5KGxmLmZvcm1h
dFRvUGFydHMoKSksIGBbXWApOworICAgICAgICBzaG91bGRCZShKU09OLnN0cmluZ2lmeShsZi5m
b3JtYXRUb1BhcnRzKHVuZGVmaW5lZCkpLCBgW11gKTsKKyAgICAgICAgc2hvdWxkQmUoSlNPTi5z
dHJpbmdpZnkobGYuZm9ybWF0VG9QYXJ0cygiQXBwbGUiKSksIGBbeyJ0eXBlIjoiZWxlbWVudCIs
InZhbHVlIjoiQSJ9LHsidHlwZSI6ImxpdGVyYWwiLCJ2YWx1ZSI6IiwgIn0seyJ0eXBlIjoiZWxl
bWVudCIsInZhbHVlIjoicCJ9LHsidHlwZSI6ImxpdGVyYWwiLCJ2YWx1ZSI6IiwgIn0seyJ0eXBl
IjoiZWxlbWVudCIsInZhbHVlIjoicCJ9LHsidHlwZSI6ImxpdGVyYWwiLCJ2YWx1ZSI6IiwgIn0s
eyJ0eXBlIjoiZWxlbWVudCIsInZhbHVlIjoibCJ9LHsidHlwZSI6ImxpdGVyYWwiLCJ2YWx1ZSI6
IiBhbmQgIn0seyJ0eXBlIjoiZWxlbWVudCIsInZhbHVlIjoiZSJ9XWApOworICAgICAgICBzaG91
bGRUaHJvdygoKSA9PiBsZi5mb3JtYXRUb1BhcnRzKDQyKSwgVHlwZUVycm9yKTsKKyAgICAgICAg
c2hvdWxkVGhyb3coKCkgPT4gbGYuZm9ybWF0VG9QYXJ0cyhudWxsKSwgVHlwZUVycm9yKTsKKyAg
ICAgICAgc2hvdWxkVGhyb3coKCkgPT4gbGYuZm9ybWF0VG9QYXJ0cyhbbnVsbF0pLCBUeXBlRXJy
b3IpOworICAgIH0KK30K
</data>
<flag name="review"
          id="428646"
          type_id="1"
          status="+"
          setter="ross.kirsling"
    />
          </attachment>
      

    </bug>

</bugzilla>