<?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>147330</bug_id>
          
          <creation_ts>2015-07-27 12:07:30 -0700</creation_ts>
          <short_desc>[ES6] Support Reflect.construct</short_desc>
          <delta_ts>2016-03-05 11:48:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1112462</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-07-27 12:07:30 -0700</bug_when>
    <thetext>Reflect.construct has the crazy part in the spec.
It can replace the `newTarget` dynamically.
Since the current JSC has an assumption that `newTarget` is fixed when the derived constructor is defined, it breaks this assumption.

For example,

Reflect.construct(function () { }, [], Map)

does not work (breaks in LLInt layer) because the byte code op_create_this assumes that the newTarget is always the JSFunction (not InternalFunction).

I think Reflect.construct is the only place where we can replace the newTarget dynamically.
So the easiest way to implement it is adding a special (slow) path to Reflect.construct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170559</commentid>
    <comment_count>1</comment_count>
      <attachid>272843</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-03-04 01:53:09 -0800</bug_when>
    <thetext>Created attachment 272843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170578</commentid>
    <comment_count>2</comment_count>
      <attachid>272843</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-03-04 05:34:17 -0800</bug_when>
    <thetext>Comment on attachment 272843
Patch

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

&gt; Source/JavaScriptCore/runtime/ReflectObject.cpp:103
&gt; +    if (!target.isObject())
&gt; +        return JSValue::encode(throwTypeError(exec, ASCIILiteral(&quot;Reflect.construct requires the first argument be a constructor&quot;)));
&gt; +    JSObject* targetObject = asObject(target);
&gt; +    ConstructData constructData;
&gt; +    ConstructType constructType = JSC::getConstructData(targetObject, constructData);
&gt; +    if (constructType == ConstructTypeNone)

I think this could just be 

if (!target.isConstructor())
    return JSValue::encode(throwTypeError(exec, ASCIILiteral(&quot;Reflect.construct requires the first argument be a constructor&quot;)));

&gt; Source/JavaScriptCore/tests/stress/reflect-construct.js:155
&gt; +    shouldBe(Reflect.construct(FailedMap, [], Map).__proto__, Map.prototype);
&gt; +    shouldThrow(() =&gt; {
&gt; +        let map = Reflect.construct(FailedMap, [], Map);
&gt; +        map.set(20, 30);
&gt; +    }, `TypeError: Map operation called on non-Map object`);

It might also be worthwhile to test Reflect.construct of InternalFunction with another InternalFunction as new.target.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170579</commentid>
    <comment_count>3</comment_count>
      <attachid>272843</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-03-04 05:58:29 -0800</bug_when>
    <thetext>Comment on attachment 272843
Patch

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

&gt; Source/JavaScriptCore/runtime/ReflectObject.cpp:94
&gt; +// http://www.ecma-international.org/ecma-262/6.0/#sec-reflect.construct

Also, as a note, apparently all the other browsers and internally at Apple we have started using https://tc39.github.io/ecma262/ as the official spec since it is more up to date with the future plans of ECMA script. The github one is also a little bit nicer in my opinion. Although it looks like the implementation for Reflect.construct is the same in both specs. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170581</commentid>
    <comment_count>4</comment_count>
      <attachid>272843</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-03-04 07:04:12 -0800</bug_when>
    <thetext>Comment on attachment 272843
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/runtime/ReflectObject.cpp:94
&gt;&gt; +// http://www.ecma-international.org/ecma-262/6.0/#sec-reflect.construct
&gt; 
&gt; Also, as a note, apparently all the other browsers and internally at Apple we have started using https://tc39.github.io/ecma262/ as the official spec since it is more up to date with the future plans of ECMA script. The github one is also a little bit nicer in my opinion. Although it looks like the implementation for Reflect.construct is the same in both specs. :)

Thanks, changed.

&gt;&gt; Source/JavaScriptCore/runtime/ReflectObject.cpp:103
&gt;&gt; +    if (constructType == ConstructTypeNone)
&gt; 
&gt; I think this could just be 
&gt; 
&gt; if (!target.isConstructor())
&gt;     return JSValue::encode(throwTypeError(exec, ASCIILiteral(&quot;Reflect.construct requires the first argument be a constructor&quot;)));

These `constructType` and `constructData` are later used to call `construct(exec, target, constructType, constructData, arguments, newTarget)`.

&gt;&gt; Source/JavaScriptCore/tests/stress/reflect-construct.js:155
&gt;&gt; +    }, `TypeError: Map operation called on non-Map object`);
&gt; 
&gt; It might also be worthwhile to test Reflect.construct of InternalFunction with another InternalFunction as new.target.

Nice! Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170584</commentid>
    <comment_count>5</comment_count>
      <attachid>272853</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-03-04 07:15:56 -0800</bug_when>
    <thetext>Created attachment 272853
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170930</commentid>
    <comment_count>6</comment_count>
      <attachid>272853</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-04 10:24:57 -0800</bug_when>
    <thetext>Comment on attachment 272853
Patch

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

r=me with comments and suggestions

&gt; Source/JavaScriptCore/runtime/ReflectObject.cpp:103
&gt; +    ConstructType constructType = JSC::getConstructData(asObject(target), constructData);
&gt; +    if (constructType == ConstructTypeNone)
&gt; +        return JSValue::encode(throwTypeError(exec, ASCIILiteral(&quot;Reflect.construct requires the first argument be a constructor&quot;)));

I think it&apos;s best to write another version of isConstructor() that take in ConstructData&amp; and ConstructType&amp; so that
we still have a common implementation of that function. The current implementation can just call into the new implementation
you&apos;ll add

&gt; Source/JavaScriptCore/runtime/ReflectObject.cpp:125
&gt; +    unsigned count = getLength(exec, argumentsObject);
&gt; +    if (exec-&gt;hadException())
&gt; +        return JSValue::encode(jsUndefined());
&gt; +
&gt; +    for (unsigned index = 0; index &lt; count; ++index) {
&gt; +        JSValue element = argumentsObject-&gt;getIndex(exec, index);
&gt; +        if (exec-&gt;hadException())
&gt; +            return JSValue::encode(jsUndefined());
&gt; +        arguments.append(element);
&gt; +    }

I already added the function createListFromArrayLike to our code base. You should use that here.
The code works by taking a lambda so you can build up your list. It also takes a RuntimeTypeMask
as the type filter. It might be best to either move the RuntimeTypeMask filter parameter
to the last parameter and make it default to all types, or you can create a predefined RuntimeTypeMask
called RuntimeTypeMaskAllTypes or something to just pass in here.

&gt; Source/JavaScriptCore/tests/stress/reflect-construct.js:1
&gt; +function shouldBe(actual, expected) {

It would be cool to add a test with Proxy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171209</commentid>
    <comment_count>7</comment_count>
      <attachid>272853</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-03-05 07:38:27 -0800</bug_when>
    <thetext>Comment on attachment 272853
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/runtime/ReflectObject.cpp:103
&gt;&gt; +        return JSValue::encode(throwTypeError(exec, ASCIILiteral(&quot;Reflect.construct requires the first argument be a constructor&quot;)));
&gt; 
&gt; I think it&apos;s best to write another version of isConstructor() that take in ConstructData&amp; and ConstructType&amp; so that
&gt; we still have a common implementation of that function. The current implementation can just call into the new implementation
&gt; you&apos;ll add

Sounds nice.
To allow forward declaration of ConstructType and ConstructData, I&apos;ll change ConstructType to enum class.

&gt;&gt; Source/JavaScriptCore/runtime/ReflectObject.cpp:125
&gt;&gt; +    }
&gt; 
&gt; I already added the function createListFromArrayLike to our code base. You should use that here.
&gt; The code works by taking a lambda so you can build up your list. It also takes a RuntimeTypeMask
&gt; as the type filter. It might be best to either move the RuntimeTypeMask filter parameter
&gt; to the last parameter and make it default to all types, or you can create a predefined RuntimeTypeMask
&gt; called RuntimeTypeMaskAllTypes or something to just pass in here.

Nice. I&apos;ll change it so :)

&gt;&gt; Source/JavaScriptCore/tests/stress/reflect-construct.js:1
&gt;&gt; +function shouldBe(actual, expected) {
&gt; 
&gt; It would be cool to add a test with Proxy.

Nice, I&apos;ll add it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171213</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-03-05 09:01:00 -0800</bug_when>
    <thetext>Committed r197614: &lt;http://trac.webkit.org/changeset/197614&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171227</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-03-05 11:39:08 -0800</bug_when>
    <thetext>I&apos;ll check the build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171228</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-03-05 11:40:00 -0800</bug_when>
    <thetext>I&apos;ll update the binding test results...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171229</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-03-05 11:42:16 -0800</bug_when>
    <thetext>Ah, no problem. Sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171231</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-03-05 11:48:49 -0800</bug_when>
    <thetext>WinCairo build seems failed. But it seems that it does not rebuild some cpps correctly. So clean build fixes the probelm.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272843</attachid>
            <date>2016-03-04 01:53:09 -0800</date>
            <delta_ts>2016-03-04 07:15:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147330-20160304185254.patch</filename>
            <type>text/plain</type>
            <size>16028</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YWYxOTI0YzUxNGU5Y2EyMWU0NDg1YTc0ZWU1ZDgzMmIzMDEzNGQ4Li5mODRhZDc3YWVkNTNjNzdk
MjQ5NTQzY2E5OThkNjQ1NDk2MDliNjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAxNi0wMy0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbRVM2XSBTdXBwb3J0IFJlZmxlY3QuY29uc3RydWN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDczMzAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCYXNlZCBvbiBTYWFtJ3Mg
cjE5Njg2OCwgdGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFJlZmxlY3QuY29uc3RydWN0Lgor
ICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0
b3JbMV0gZm9yIGZhbGxiYWNrIGNhc2VzLgorICAgICAgICBUaGlzIHBhdGggaXMgcmFyZWx5IHRh
a2VuLiBGb3IgZXhhbXBsZSwKKworICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZnVuY3Rp
b24gKCkgeyB9LCBbXSwgTWFwKTsKKworICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBgbmV3LnRh
cmdldGAgYmVjb21lcyBgTWFwYC4KKyAgICAgICAgU28gd2Ugc2hvdWxkIGNyZWF0ZSBhbiBvYmpl
Y3QgdGhhdCBgX19wcm90b19fYCBpcyBgTWFwLnByb3RvdHlwZWAuCisKKyAgICAgICAgWzFdOiBo
dHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1vcmRpbmFyeWNy
ZWF0ZWZyb21jb25zdHJ1Y3RvcgorCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6c2l6
ZU9mVmFyYXJncyk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OmdldExlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OmdldExlbmd0aCk6CisgICAgICAgICog
cnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdENv
bnN0cnVjdCk6CisgICAgICAgICogdGVzdHMvZXM2LnlhbWw6CisgICAgICAgICogdGVzdHMvc3Ry
ZXNzL3JlZmxlY3QtY29uc3RydWN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAg
ICAgICAgKHNob3VsZFRocm93KToKKyAgICAgICAgKHNob3VsZFRocm93LmFycmF5LmdldCBsZW5n
dGgpOgorICAgICAgICAoc2hvdWxkVGhyb3cuYXJyYXkuZ2V0IDApOgorICAgICAgICAoYXJyYXku
Z2V0IGxlbmd0aCk6CisgICAgICAgIChhcnJheS5nZXQgMCk6CisgICAgICAgIChzaG91bGRCZS5S
ZWZsZWN0LmNvbnN0cnVjdCk6CisgICAgICAgICgzLnNob3VsZEJlLlJlZmxlY3QuY29uc3RydWN0
KToKKyAgICAgICAgKDMubmV3VGFyZ2V0KToKKyAgICAgICAgKDAuc2hvdWxkQmUuUmVmbGVjdC5j
b25zdHJ1Y3QpOgorICAgICAgICAoc2hvdWxkQmUuQSk6CisgICAgICAgIChzaG91bGRCZS5CKToK
KyAgICAgICAgKG5hdGl2ZUNvbnN0cnVjdG9yVGVzdC5EZXJpdmVkTWFwKToKKyAgICAgICAgKG5h
dGl2ZUNvbnN0cnVjdG9yVGVzdC5GYWlsZWRNYXApOgorICAgICAgICAobmF0aXZlQ29uc3RydWN0
b3JUZXN0KToKKwogMjAxNi0wMy0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIERGRy9GVEwgc2hvdWxkIGlubGluZSBhY2Nlc3NlcyB0byBSZWdFeHBPYmplY3Q6
Om1fbGFzdEluZGV4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAppbmRleCBkODYzYTdlNTMxN2FjNThkMTdjMDA4OWRjYzdhOWIzYjU1YTg5NmIwLi5jOTkxN2Vj
NWM3ODUxMzUzNjhjNjJmOWI5NWZjNzQ4ODM0MjU1YTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTE2Nyw2ICsxNjcsMTEgQEAgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogY29uc3RydWN0b3IKICAgICBpZiAoY29uc3RydWN0b3ItPnR5cGUoKSA9PSBKU0Z1bmN0aW9u
VHlwZSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5yYXJlRGF0YShleGVjLCBpbmxpbmVDYXBhY2l0eSkt
Pm9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCktPnN0cnVjdHVyZSgpKTsKIAorICAgIEpTVmFsdWUg
cHJvdG8gPSBjb25zdHJ1Y3Rvci0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90
b3R5cGUpOworICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKHByb3RvLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjLCBhc09iamVjdChwcm90bykpOwogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggMmJkOTg5MzQ2MWNlZTJkN2IyMzg3ZmIxNmFhZWVi
N2FiOTZlMmZhNy4uZmQ0NTlhYmQxMDUwYWI0YTBmOWViMTQ4ZDQ0NGExNmRjNjRmY2I4OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CkBAIC0yMTcsMTAgKzIxNyw3IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhCiAgICAgICAgIHJl
dHVybiAwOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNPYmplY3Qo
KSk7Ci0gICAgICAgIGlmIChpc0pTQXJyYXkoY2VsbCkpCi0gICAgICAgICAgICBsZW5ndGggPSBq
c0Nhc3Q8SlNBcnJheSo+KGNlbGwpLT5sZW5ndGgoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbGVuZ3RoID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCktPmdldChjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoY2FsbEZyYW1lKTsKKyAgICAg
ICAgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNhbGxGcmFtZSwganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKaW5kZXggOTQ5NTgyZmUxZTM3ZWM2NjFhODk3
NjJmY2M3Njc2ODk1YmY0MjNlOS4uYWM3NDEzYWYwZDU1Y2VhZWI5OTYwNWIyMGZjMzcwNzEzNWMz
NGU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcApAQCAtMTU3LDEzICsxNTcsNiBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGdldFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgdW5zaQogICAg
IHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIGluZGV4KTsKIH0KIAotc3RhdGljIEFMV0FZU19J
TkxJTkUgdW5zaWduZWQgZ2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaikK
LXsKLSAgICBpZiAoaXNKU0FycmF5KG9iaikpCi0gICAgICAgIHJldHVybiBqc0Nhc3Q8SlNBcnJh
eSo+KG9iaiktPmxlbmd0aCgpOwotICAgIHJldHVybiBvYmotPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLX0KLQogc3RhdGljIEFMV0FZU19J
TkxJTkUgdm9pZCBwdXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqLCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iaik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCAxNjdj
Mjg3M2I0ZDNlZGU2NWNiOWQ4YmNiOWNlOTg5MDZmYjQ2YjU1Li5mNzhhMTgyZjJiMmQyYzA5MDA2
OWE5ZTg3MzVjM2VkYWZiZDYwOWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTIyMiw5ICsyMjIsOSBAQCBzdGF0aWMgQ29t
bW9uU2xvd1BhdGhzOjpBcml0eUNoZWNrRGF0YSogc2V0dXBBcml0eUNoZWNrRGF0YShWTSYgdm0s
IGludCBzbG90c1RvQQogewogICAgIEJFR0lOKCk7CiAgICAgSlNPYmplY3QqIHJlc3VsdDsKLSAg
ICBKU0NlbGwqIGNvbnN0cnVjdG9yQXNDZWxsID0gT1AoMikuanNWYWx1ZSgpLmFzQ2VsbCgpOwot
ICAgIGlmIChjb25zdHJ1Y3RvckFzQ2VsbC0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKSB7Ci0g
ICAgICAgIEpTRnVuY3Rpb24qIGNvbnN0cnVjdG9yID0ganNDYXN0PEpTRnVuY3Rpb24qPihjb25z
dHJ1Y3RvckFzQ2VsbCk7CisgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yQXNPYmplY3QgPSBhc09i
amVjdChPUCgyKS5qc1ZhbHVlKCkpOworICAgIGlmIChjb25zdHJ1Y3RvckFzT2JqZWN0LT50eXBl
KCkgPT0gSlNGdW5jdGlvblR5cGUpIHsKKyAgICAgICAgSlNGdW5jdGlvbiogY29uc3RydWN0b3Ig
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yQXNPYmplY3QpOwogICAgICAgICBhdXRv
JiBjYWNoZVdyaXRlQmFycmllciA9IHBjWzRdLnUuanNDZWxsOwogICAgICAgICBpZiAoIWNhY2hl
V3JpdGVCYXJyaWVyKQogICAgICAgICAgICAgY2FjaGVXcml0ZUJhcnJpZXIuc2V0KGV4ZWMtPnZt
KCksIGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CkBAIC0yMzQsOCArMjM0LDE1IEBA
IHN0YXRpYyBDb21tb25TbG93UGF0aHM6OkFyaXR5Q2hlY2tEYXRhKiBzZXR1cEFyaXR5Q2hlY2tE
YXRhKFZNJiB2bSwgaW50IHNsb3RzVG9BCiAgICAgICAgIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9
IHBjWzNdLnUub3BlcmFuZDsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25zdHJ1
Y3Rvci0+cmFyZURhdGEoZXhlYywgaW5saW5lQ2FwYWNpdHkpLT5vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYywgc3RydWN0dXJlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gaHR0cDovL2Vj
bWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtb3JkaW5hcnljcmVhdGVmcm9t
Y29uc3RydWN0b3IKKyAgICAgICAgSlNWYWx1ZSBwcm90byA9IGNvbnN0cnVjdG9yQXNPYmplY3Qt
PmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKKyAgICAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7CisgICAgICAgIGlmIChwcm90by5pc09iamVjdCgpKQorICAgICAgICAg
ICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgYXNPYmplY3QocHJvdG8pKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYyk7CisgICAgfQogICAgIFJFVFVSTihyZXN1bHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgKaW5kZXggNDViNTU4YjIwMDk4MTE4ZjllM2UxNjIwODk0N2Zj
ZTY3NmI5OWViNS4uOWYyNzM4MmRlYmQ3MTc1YjUwOWMxZGZhNDk1MWI5ZWJkMmNiODJlNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaApAQCAtMzQyLDYgKzM0MiwxMyBA
QCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5UwogICAgIHJldHVybiBhcnJheTsKIH0KIAorQUxXQVlT
X0lOTElORSB1bnNpZ25lZCBnZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
KQoreworICAgIGlmIChpc0pTQXJyYXkob2JqKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0Fy
cmF5Kj4ob2JqKS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIG9iai0+Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEpTQXJyYXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAppbmRleCAxOWJmMWM1NmQzMDc1MjU5YTI0MWE4YzU1
OTY0ZDhlMjFlM2JlMGNmLi41ZTI4MTA4MDkyNWViNmUwMzk5NjQ1MzYzYmExM2RkZWNlYzBkY2M2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNw
cApAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdENvbnN0cnVjdChFeGVjU3RhdGUqKTsK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3REZWZpbmVQ
cm9wZXJ0eShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZmxlY3RPYmplY3RFbnVtZXJhdGUoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0R2V0KEV4ZWNTdGF0ZSopOwpAQCAtNTcsNiAr
NTgsNyBAQAogLyogU291cmNlIGZvciBSZWZsZWN0T2JqZWN0Lmx1dC5oCiBAYmVnaW4gcmVmbGVj
dE9iamVjdFRhYmxlCiAgICAgYXBwbHkgICAgICAgICAgICAgICAgICAgIEpTQnVpbHRpbiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMworICAgIGNvbnN0cnVj
dCAgICAgICAgICAgICAgICByZWZsZWN0T2JqZWN0Q29uc3RydWN0ICAgICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uIDIKICAgICBkZWZpbmVQcm9wZXJ0eSAgICAgICAgICAgcmVmbGVjdE9i
amVjdERlZmluZVByb3BlcnR5ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCiAgICAgZGVs
ZXRlUHJvcGVydHkgICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gMgogICAgIGVudW1lcmF0ZSAgICAgICAgICAgICAgICByZWZs
ZWN0T2JqZWN0RW51bWVyYXRlICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKQEAg
LTg5LDYgKzkxLDQzIEBAIGJvb2wgUmVmbGVjdE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVyCiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAorLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYu
MC8jc2VjLXJlZmxlY3QuY29uc3RydWN0CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
ZmxlY3RPYmplY3RDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGFy
Z2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoIlJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBh
IGNvbnN0cnVjdG9yIikpKTsKKyAgICBKU09iamVjdCogdGFyZ2V0T2JqZWN0ID0gYXNPYmplY3Qo
dGFyZ2V0KTsKKyAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CisgICAgQ29uc3RydWN0
VHlwZSBjb25zdHJ1Y3RUeXBlID0gSlNDOjpnZXRDb25zdHJ1Y3REYXRhKHRhcmdldE9iamVjdCwg
Y29uc3RydWN0RGF0YSk7CisgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZU5v
bmUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1l
bnQgYmUgYSBjb25zdHJ1Y3RvciIpKSk7CisKKyAgICBKU1ZhbHVlIG5ld1RhcmdldCA9IHRhcmdl
dDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKKyAgICAgICAgbmV3VGFy
Z2V0ID0gZXhlYy0+YXJndW1lbnQoMik7CisgICAgICAgIGlmICghbmV3VGFyZ2V0LmlzQ29uc3Ry
dWN0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgdGhp
cmQgYXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvciBpZiBwcmVzZW50IikpKTsKKyAgICB9CisKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgSlNPYmplY3QqIGFyZ3VtZW50
c09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgxKSk7Cisg
ICAgaWYgKCFhcmd1bWVudHNPYmplY3QpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1
aXJlcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CisgICAgdW5zaWduZWQg
Y291bnQgPSBnZXRMZW5ndGgoZXhlYywgYXJndW1lbnRzT2JqZWN0KTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytp
bmRleCkgeworICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcmd1bWVudHNPYmplY3QtPmdldElu
ZGV4KGV4ZWMsIGluZGV4KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChlbGVtZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERh
dGEsIGFyZ3VtZW50cywgbmV3VGFyZ2V0KSk7Cit9CisKIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRl
cm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1yZWZsZWN0LmRlZmluZXByb3BlcnR5CiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3REZWZpbmVQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4ZWMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvZXM2LnlhbWwgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvZXM2LnlhbWwKaW5kZXgg
Y2E3OTEzMmQ1ODNmZDVkZDRmOTUzZDg5MWQ2ZjYxMTdmYmVmODAwOC4uZTRkMjJmYTJkYjBlYWNk
NzQ4ODhjZWVkMDI2ZjM2MTZhNjcyMGUzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL2VzNi55YW1sCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9lczYu
eWFtbApAQCAtMTA3MSwxMSArMTA3MSwxMSBAQAogLSBwYXRoOiBlczYvUHJveHlfc2V0UHJvdG90
eXBlT2ZfaGFuZGxlci5qcwogICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9SZWZs
ZWN0X1JlZmxlY3QuY29uc3RydWN0LmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVu
RVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L1JlZmxlY3RfUmVmbGVjdC5jb25zdHJ1Y3RfY3JlYXRl
c19pbnN0YW5jZV9mcm9tX25ld1RhcmdldF9hcmd1bWVudC5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFp
bAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9SZWZsZWN0X1JlZmxlY3QuY29u
c3RydWN0X3NldHNfbmV3LnRhcmdldF9tZXRhX3Byb3BlcnR5LmpzCi0gIGNtZDogcnVuRVM2IDpm
YWlsCisgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L1JlZmxlY3RfUmVmbGVjdC5z
ZXQuanMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L1JlZ0V4cC5wcm90b3R5cGVf
cHJvcGVydGllc19SZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaF0uanMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVmbGVjdC1jb25zdHJ1Y3QuanMg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlZmxlY3QtY29uc3RydWN0Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjBlMTBmNjgyNDBkM2I3NTg3M2Y2M2NmODQ2NzFkZjUwMmU1ZjcyODEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlZmxl
Y3QtY29uc3RydWN0LmpzCkBAIC0wLDAgKzEsMTYwIEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1
YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24gc2hv
dWxkVGhyb3coZnVuYywgbWVzc2FnZSkgeworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5
IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBl
OworICAgIH0KKyAgICBpZiAoIWVycm9yKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm5vdCB0
aHJvd24uIik7CisgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IG1lc3NhZ2UpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiYmFkIGVycm9yOiAiICsgU3RyaW5nKGVycm9yKSk7Cit9CisKK3Nob3Vs
ZEJlKFJlZmxlY3QuY29uc3RydWN0Lmxlbmd0aCwgMik7CisKK3Nob3VsZFRocm93KCgpID0+IHsK
KyAgICBSZWZsZWN0LmNvbnN0cnVjdCgiaGVsbG8iLCA0Mik7Cit9LCBgVHlwZUVycm9yOiBSZWZs
ZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBjb25zdHJ1Y3Rv
cmApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5jb25zdHJ1Y3QoQXJyYXku
cHJvdG90eXBlLmZvckVhY2gsIFtdKTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3QuY29uc3RydWN0
IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIGNvbnN0cnVjdG9yYCk7CisKK3Nob3Vs
ZFRocm93KCgpID0+IHsKKyAgICBSZWZsZWN0LmNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IH0sIDQy
LCBudWxsKTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRoZSB0
aGlyZCBhcmd1bWVudCBiZSBhIGNvbnN0cnVjdG9yIGlmIHByZXNlbnRgKTsKKworc2hvdWxkVGhy
b3coKCkgPT4geworICAgIFJlZmxlY3QuY29uc3RydWN0KGZ1bmN0aW9uICgpIHsgfSwgNDIsIHt9
KTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRoZSB0aGlyZCBh
cmd1bWVudCBiZSBhIGNvbnN0cnVjdG9yIGlmIHByZXNlbnRgKTsKKworc2hvdWxkVGhyb3coKCkg
PT4geworICAgIFJlZmxlY3QuY29uc3RydWN0KGZ1bmN0aW9uICgpIHsgfSwgNDIsIEFycmF5LnBy
b3RvdHlwZS5mb3JFYWNoKTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3QuY29uc3RydWN0IHJlcXVp
cmVzIHRoZSB0aGlyZCBhcmd1bWVudCBiZSBhIGNvbnN0cnVjdG9yIGlmIHByZXNlbnRgKTsKKwor
c2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuY29uc3RydWN0KGZ1bmN0aW9uICgpIHsg
fSwgNDIsIGZ1bmN0aW9uICgpIHsgfSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmNvbnN0cnVj
dCByZXF1aXJlcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGJlIGFuIG9iamVjdGApOworCitzaG91bGRU
aHJvdygoKSA9PiB7CisgICAgdmFyIGFycmF5ID0geworICAgICAgICBnZXQgbGVuZ3RoKCkgewor
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJvayIpOworICAgICAgICB9LAorICAgICAgICBn
ZXQgMCgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigibmciKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyB9LCBhcnJheSk7Cit9
LCBgRXJyb3I6IG9rYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICB2YXIgYXJyYXkgPSB7
CisgICAgICAgIGdldCBsZW5ndGgoKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
fSwKKyAgICAgICAgZ2V0IDAoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm9rIik7
CisgICAgICAgIH0KKyAgICB9OworICAgIFJlZmxlY3QuY29uc3RydWN0KGZ1bmN0aW9uICgpIHsg
fSwgYXJyYXkpOworfSwgYEVycm9yOiBva2ApOworCit2YXIgYXJyYXkgPSB7CisgICAgZ2V0IGxl
bmd0aCgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSwKKyAgICBnZXQgMCgpIHsKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJuZyIpOworICAgIH0KK307CitzaG91bGRCZShSZWZsZWN0LmNv
bnN0cnVjdChmdW5jdGlvbiAoKSB7IHRoaXMubGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgfSwg
YXJyYXkpLmxlbmd0aCwgMCk7CisKK3ZhciBnbG9iYWxPYmplY3QgPSB0aGlzOworc2hvdWxkQmUo
UmVmbGVjdC5jb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICBz
aG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7
CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBzaG91bGRCZSh0eXBlb2YgdGhp
cywgIm9iamVjdCIpOworICAgIHRoaXMucmVzdWx0ID0gYXJndW1lbnRzLmxlbmd0aDsKK30sIFsw
LDEsMl0pLnJlc3VsdCwgMykKKworc2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoZnVuY3Rpb24g
KCkgeworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1l
bnRzWzFdLCAxKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIDIpOworICAgIHNob3VsZEJl
KHR5cGVvZiB0aGlzLCAib2JqZWN0Iik7CisgICAgdGhpcy5yZXN1bHQgPSBhcmd1bWVudHMubGVu
Z3RoOworfSwgWzAsMSwyXSkucmVzdWx0LCAzKQorCit2YXIgbmV3VGFyZ2V0ID0gZnVuY3Rpb24g
KCkgeyB9Oworc2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeworICAgICJ1
c2Ugc3RyaWN0IjsKKyAgICBzaG91bGRCZShuZXcudGFyZ2V0LCBuZXdUYXJnZXQpOworICAgIHRo
aXMucmVzdWx0ID0gYXJndW1lbnRzLmxlbmd0aDsKK30sIFtdLCBuZXdUYXJnZXQpLnJlc3VsdCwg
MCkKKworc2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeworICAgIHNob3Vs
ZEJlKG5ldy50YXJnZXQsIG5ld1RhcmdldCk7CisgICAgdGhpcy5yZXN1bHQgPSBhcmd1bWVudHMu
bGVuZ3RoOworfSwgW10sIG5ld1RhcmdldCkucmVzdWx0LCAwKQorCit7CisgICAgY2xhc3MgQSB7
CisgICAgICAgIGNvbnN0cnVjdG9yKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy50eXBl
ID0gIkEiOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgQiBleHRlbmRzIEEgeworICAg
ICAgICBjb25zdHJ1Y3RvcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1cGVyKCk7CisgICAg
ICAgICAgICB0aGlzLnR5cGUgPSAiQiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzaG91bGRC
ZShSZWZsZWN0LmNvbnN0cnVjdChBLCBbXSkudHlwZSwgIkEiKTsKKyAgICBzaG91bGRCZShSZWZs
ZWN0LmNvbnN0cnVjdChCLCBbXSkudHlwZSwgIkIiKTsKKworICAgIHNob3VsZEJlKFJlZmxlY3Qu
Y29uc3RydWN0KEIsIFtdLCBCKS5fX3Byb3RvX18sIEIucHJvdG90eXBlKTsKKyAgICBzaG91bGRC
ZShSZWZsZWN0LmNvbnN0cnVjdChCLCBbXSwgQSkuX19wcm90b19fLCBBLnByb3RvdHlwZSk7Cisg
ICAgc2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoQiwgW10sIEEpLnR5cGUsICJCIik7CisgICAg
c2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoQiwgW10sIEIpLnR5cGUsICJCIik7CisKKyAgICBz
aG91bGRCZShSZWZsZWN0LmNvbnN0cnVjdChBLCBbXSwgQSkuX19wcm90b19fLCBBLnByb3RvdHlw
ZSk7CisgICAgc2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoQSwgW10sIEIpLl9fcHJvdG9fXywg
Qi5wcm90b3R5cGUpOworICAgIHNob3VsZEJlKFJlZmxlY3QuY29uc3RydWN0KEEsIFtdLCBBKS50
eXBlLCAiQSIpOworICAgIHNob3VsZEJlKFJlZmxlY3QuY29uc3RydWN0KEEsIFtdLCBCKS50eXBl
LCAiQSIpOworfQorCitmdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvclRlc3QoKQoreworICAgIGNs
YXNzIERlcml2ZWRNYXAgeworICAgIH0KKyAgICBzaG91bGRCZShSZWZsZWN0LmNvbnN0cnVjdChN
YXAsIFtdLCBEZXJpdmVkTWFwKS5fX3Byb3RvX18sIERlcml2ZWRNYXAucHJvdG90eXBlKTsKKyAg
ICBsZXQgbWFwID0gUmVmbGVjdC5jb25zdHJ1Y3QoTWFwLCBbXSwgRGVyaXZlZE1hcCk7CisgICAg
bWFwLl9fcHJvdG9fXyA9IE1hcC5wcm90b3R5cGU7CisgICAgbWFwLnNldCgyMCwgMzApOworICAg
IHNob3VsZEJlKG1hcC5nZXQoMjApLCAzMCk7CisKKyAgICBjbGFzcyBGYWlsZWRNYXAgeworICAg
IH0KKyAgICBzaG91bGRCZShSZWZsZWN0LmNvbnN0cnVjdChGYWlsZWRNYXAsIFtdLCBNYXApLl9f
cHJvdG9fXywgTWFwLnByb3RvdHlwZSk7CisgICAgc2hvdWxkVGhyb3coKCkgPT4geworICAgICAg
ICBsZXQgbWFwID0gUmVmbGVjdC5jb25zdHJ1Y3QoRmFpbGVkTWFwLCBbXSwgTWFwKTsKKyAgICAg
ICAgbWFwLnNldCgyMCwgMzApOworICAgIH0sIGBUeXBlRXJyb3I6IE1hcCBvcGVyYXRpb24gY2Fs
bGVkIG9uIG5vbi1NYXAgb2JqZWN0YCk7Cit9Citub0lubGluZShuYXRpdmVDb25zdHJ1Y3RvclRl
c3QpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKQorICAgIG5hdGl2ZUNvbnN0cnVj
dG9yVGVzdCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272853</attachid>
            <date>2016-03-04 07:15:56 -0800</date>
            <delta_ts>2016-03-04 10:24:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147330-20160305001541.patch</filename>
            <type>text/plain</type>
            <size>21483</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YWYxOTI0YzUxNGU5Y2EyMWU0NDg1YTc0ZWU1ZDgzMmIzMDEzNGQ4Li44NGViYjg3MTQ2Y2Y3NGJm
M2RhZmUzNWJkMmQwZDY3YTQzMjAxYmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MSBAQAorMjAxNi0wMy0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbRVM2XSBTdXBwb3J0IFJlZmxlY3QuY29uc3RydWN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDczMzAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCYXNlZCBvbiBTYWFtJ3Mg
cjE5Njg2OCwgdGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFJlZmxlY3QuY29uc3RydWN0Lgor
ICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0
b3JbMV0gZm9yIGZhbGxiYWNrIGNhc2VzLgorICAgICAgICBUaGlzIHBhdGggaXMgcmFyZWx5IHRh
a2VuLiBGb3IgZXhhbXBsZSwKKworICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZnVuY3Rp
b24gKCkgeyB9LCBbXSwgTWFwKTsKKworICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBgbmV3LnRh
cmdldGAgYmVjb21lcyBgTWFwYC4KKyAgICAgICAgU28gd2Ugc2hvdWxkIGNyZWF0ZSBhbiBvYmpl
Y3QgdGhhdCBgX19wcm90b19fYCBpcyBgTWFwLnByb3RvdHlwZWAuCisKKyAgICAgICAgWzFdOiBo
dHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1vcmRpbmFyeWNy
ZWF0ZWZyb21jb25zdHJ1Y3RvcgorCisgICAgICAgICogYnVpbHRpbnMvUmVmbGVjdE9iamVjdC5q
czoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpzaXplT2ZWYXJhcmdzKToKKyAgICAg
ICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0TGVuZ3Ro
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAg
ICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoK
KyAgICAgICAgKEpTQzo6Z2V0TGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL1JlZmxlY3RPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0Q29uc3RydWN0KToKKyAgICAgICAg
KiB0ZXN0cy9lczYueWFtbDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcmVmbGVjdC1jb25zdHJ1
Y3QuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoc2hvdWxkVGhyb3cp
OgorICAgICAgICAoc2hvdWxkVGhyb3cuYXJyYXkuZ2V0IGxlbmd0aCk6CisgICAgICAgIChzaG91
bGRUaHJvdy5hcnJheS5nZXQgMCk6CisgICAgICAgIChhcnJheS5nZXQgbGVuZ3RoKToKKyAgICAg
ICAgKGFycmF5LmdldCAwKToKKyAgICAgICAgKHNob3VsZEJlLlJlZmxlY3QuY29uc3RydWN0KToK
KyAgICAgICAgKHNob3VsZEJlLlJlZmxlY3QuY29uc3RydWN0LkhlbGxvKToKKyAgICAgICAgKDMu
c2hvdWxkQmUuUmVmbGVjdC5jb25zdHJ1Y3QuSGVsbG8pOgorICAgICAgICAoMy5uZXdUYXJnZXQp
OgorICAgICAgICAoMC5zaG91bGRCZS5SZWZsZWN0LmNvbnN0cnVjdCk6CisgICAgICAgIChzaG91
bGRCZS5BKToKKyAgICAgICAgKHNob3VsZEJlLkIpOgorICAgICAgICAobmF0aXZlQ29uc3RydWN0
b3JUZXN0LkRlcml2ZWRNYXApOgorICAgICAgICAobmF0aXZlQ29uc3RydWN0b3JUZXN0LkZhaWxl
ZE1hcCk6CisKIDIwMTYtMDMtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBERkcvRlRMIHNob3VsZCBpbmxpbmUgYWNjZXNzZXMgdG8gUmVnRXhwT2JqZWN0Ojpt
X2xhc3RJbmRleApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1Jl
ZmxlY3RPYmplY3QuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUmVmbGVjdE9i
amVjdC5qcwppbmRleCA2OWM5ODI4NTA2MGVmYzU2M2I1MjE1ZmJhODU4NWZlOWQxNzMxMjljLi40
NmI3NTJiMGFiZTYzMzcyOTVmZjhmNDNjMzQyNjkxNDI2MzI1YTBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUmVmbGVjdE9iamVjdC5qcworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUmVmbGVjdE9iamVjdC5qcwpAQCAtMjMsNyArMjMsNyBA
QAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25h
bC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVmbGVjdC5hcHBseQorLy8gaHR0cHM6Ly90YzM5Lmdp
dGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5hcHBseQogZnVuY3Rpb24gYXBwbHkodGFyZ2V0
LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpCiB7CiAgICAgInVzZSBzdHJpY3QiOwpAQCAt
MzcsNyArMzcsNyBAQCBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1l
bnRzTGlzdCkKICAgICByZXR1cm4gdGFyZ2V0LkBhcHBseSh0aGlzQXJndW1lbnQsIGFyZ3VtZW50
c0xpc3QpOwogfQogCi0vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNi4wLyNzZWMtcmVmbGVjdC5kZWxldGVwcm9wZXJ0eQorLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5kZWxldGVwcm9wZXJ0eQogZnVuY3Rpb24gZGVsZXRl
UHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkKIHsKICAgICAvLyBJbnRlbnRpb25hbGx5IGtl
ZXAgdGhlIGNvZGUgdGhlIHNsb3BweSBtb2RlIHRvIHN1cHByZXNzIHRoZSBUeXBlRXJyb3IKQEAg
LTQ5LDcgKzQ5LDcgQEAgZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtl
eSkKICAgICByZXR1cm4gZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07CiB9CiAKLS8vIGh0dHA6
Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1yZWZsZWN0Lmhh
cworLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5oYXMKIGZ1
bmN0aW9uIGhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KQogewogICAgICJ1c2Ugc3RyaWN0IjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IGQ4NjNhN2U1
MzE3YWM1OGQxN2MwMDg5ZGNjN2E5YjNiNTVhODk2YjAuLmM5OTE3ZWM1Yzc4NTEzNTM2OGM2MmY5
Yjk1ZmM3NDg4MzQyNTVhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcApAQCAtMTY3LDYgKzE2NywxMSBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3Rvcgog
ICAgIGlmIChjb25zdHJ1Y3Rvci0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQogICAgICAgICBy
ZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb25z
dHJ1Y3RvciktPnJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+b2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKS0+c3RydWN0dXJlKCkpOwogCisgICAgSlNWYWx1ZSBwcm90byA9IGNvbnN0cnVj
dG9yLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisgICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAocHJvdG8u
aXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGFz
T2JqZWN0KHByb3RvKSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAppbmRleCAyYmQ5ODkzNDYxY2VlMmQ3YjIzODdmYjE2YWFlZWI3YWI5NmUyZmE3Li5mZDQ1
OWFiZDEwNTBhYjRhMGY5ZWIxNDhkNDQ0YTE2ZGM2NGZjYjg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTIxNywxMCArMjE3
LDcgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1
ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmEKICAgICAgICAgcmV0dXJuIDA7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50cy5pc09iamVjdCgpKTsKLSAgICAgICAgaWYg
KGlzSlNBcnJheShjZWxsKSkKLSAgICAgICAgICAgIGxlbmd0aCA9IGpzQ2FzdDxKU0FycmF5Kj4o
Y2VsbCktPmxlbmd0aCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsZW5ndGggPSBqc0Nh
c3Q8SlNPYmplY3QqPihjZWxsKS0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKS50b1VJbnQzMihjYWxsRnJhbWUpOworICAgICAgICBsZW5ndGggPSBnZXRM
ZW5ndGgoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcAppbmRleCA5NDk1ODJmZTFlMzdlYzY2MWE4OTc2MmZjYzc2NzY4OTViZjQy
M2U5Li5hYzc0MTNhZjBkNTVjZWFlYjk5NjA1YjIwZmMzNzA3MTM1YzM0ZTZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCkBAIC0xNTcs
MTMgKzE1Nyw2IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0UHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCB1bnNpCiAgICAgcmV0dXJuIHNsb3QuZ2V0
VmFsdWUoZXhlYywgaW5kZXgpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBn
ZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQotewotICAgIGlmIChpc0pT
QXJyYXkob2JqKSkKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+bGVuZ3Ro
KCk7Ci0gICAgcmV0dXJuIG9iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpLnRvVUludDMyKGV4ZWMpOwotfQotCiBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dExl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmosIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IDE2N2MyODczYjRkM2VkZTY1Y2I5
ZDhiY2I5Y2U5ODkwNmZiNDZiNTUuLmY3OGExODJmMmIyZDJjMDkwMDY5YTllODczNWMzZWRhZmJk
NjA5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcApAQCAtMjIyLDkgKzIyMiw5IEBAIHN0YXRpYyBDb21tb25TbG93UGF0aHM6OkFy
aXR5Q2hlY2tEYXRhKiBzZXR1cEFyaXR5Q2hlY2tEYXRhKFZNJiB2bSwgaW50IHNsb3RzVG9BCiB7
CiAgICAgQkVHSU4oKTsKICAgICBKU09iamVjdCogcmVzdWx0OwotICAgIEpTQ2VsbCogY29uc3Ry
dWN0b3JBc0NlbGwgPSBPUCgyKS5qc1ZhbHVlKCkuYXNDZWxsKCk7Ci0gICAgaWYgKGNvbnN0cnVj
dG9yQXNDZWxsLT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpIHsKLSAgICAgICAgSlNGdW5jdGlv
biogY29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yQXNDZWxsKTsK
KyAgICBKU09iamVjdCogY29uc3RydWN0b3JBc09iamVjdCA9IGFzT2JqZWN0KE9QKDIpLmpzVmFs
dWUoKSk7CisgICAgaWYgKGNvbnN0cnVjdG9yQXNPYmplY3QtPnR5cGUoKSA9PSBKU0Z1bmN0aW9u
VHlwZSkgeworICAgICAgICBKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY29uc3RydWN0b3JBc09iamVjdCk7CiAgICAgICAgIGF1dG8mIGNhY2hlV3JpdGVCYXJy
aWVyID0gcGNbNF0udS5qc0NlbGw7CiAgICAgICAgIGlmICghY2FjaGVXcml0ZUJhcnJpZXIpCiAg
ICAgICAgICAgICBjYWNoZVdyaXRlQmFycmllci5zZXQoZXhlYy0+dm0oKSwgZXhlYy0+Y29kZUJs
b2NrKCksIGNvbnN0cnVjdG9yKTsKQEAgLTIzNCw4ICsyMzQsMTUgQEAgc3RhdGljIENvbW1vblNs
b3dQYXRoczo6QXJpdHlDaGVja0RhdGEqIHNldHVwQXJpdHlDaGVja0RhdGEoVk0mIHZtLCBpbnQg
c2xvdHNUb0EKICAgICAgICAgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gcGNbM10udS5vcGVyYW5k
OwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5yYXJlRGF0YShl
eGVjLCBpbmxpbmVDYXBhY2l0eSktPm9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCktPnN0cnVjdHVy
ZSgpOwogICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1
cmUpOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFs
Lm9yZy9lY21hLTI2Mi82LjAvI3NlYy1vcmRpbmFyeWNyZWF0ZWZyb21jb25zdHJ1Y3RvcgorICAg
ICAgICBKU1ZhbHVlIHByb3RvID0gY29uc3RydWN0b3JBc09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOworICAgICAgICBDSEVDS19FWENFUFRJT04oKTsK
KyAgICAgICAgaWYgKHByb3RvLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChleGVjLCBhc09iamVjdChwcm90bykpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICB9CiAg
ICAgUkVUVVJOKHJlc3VsdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAppbmRleCA0NWI1NThiMjAwOTgxMThmOWUzZTE2MjA4OTQ3ZmNlNjc2Yjk5ZWI1Li45ZjI3
MzgyZGViZDcxNzViNTA5YzFkZmE0OTUxYjllYmQyY2I4MmU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCkBAIC0zNDIsNiArMzQyLDEzIEBAIGlubGluZSBKU0FycmF5
KiBjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogYXJyYXlTCiAgICAgcmV0dXJuIGFycmF5OwogfQogCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVk
IGdldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmopCit7CisgICAgaWYgKGlz
SlNBcnJheShvYmopKQorICAgICAgICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihvYmopLT5sZW5n
dGgoKTsKKyAgICByZXR1cm4gb2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkudG9VSW50MzIoZXhlYyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gSlNBcnJheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWZsZWN0T2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RP
YmplY3QuY3BwCmluZGV4IDE5YmYxYzU2ZDMwNzUyNTlhMjQxYThjNTU5NjRkOGUyMWUzYmUwY2Yu
LmFjZTk5YmQyYzM5NzkxMmMzZmNhNTQ0YzNlMjhmZWIwZGE3NzY0ZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCByZWZsZWN0T2JqZWN0Q29uc3RydWN0KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdERlZmluZVByb3BlcnR5KEV4ZWNTdGF0
ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEVu
dW1lcmF0ZShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZmxlY3RPYmplY3RHZXQoRXhlY1N0YXRlKik7CkBAIC01Nyw2ICs1OCw3IEBACiAvKiBTb3Vy
Y2UgZm9yIFJlZmxlY3RPYmplY3QubHV0LmgKIEBiZWdpbiByZWZsZWN0T2JqZWN0VGFibGUKICAg
ICBhcHBseSAgICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCisgICAgY29uc3RydWN0ICAgICAgICAgICAgICAg
IHJlZmxlY3RPYmplY3RDb25zdHJ1Y3QgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MgogICAgIGRlZmluZVByb3BlcnR5ICAgICAgICAgICByZWZsZWN0T2JqZWN0RGVmaW5lUHJvcGVy
dHkgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKICAgICBkZWxldGVQcm9wZXJ0eSAgICAg
ICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAyCiAgICAgZW51bWVyYXRlICAgICAgICAgICAgICAgIHJlZmxlY3RPYmplY3RFbnVtZXJh
dGUgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQpAQCAtODksNyArOTEsNDMgQEAg
Ym9vbCBSZWZsZWN0T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXIKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLyBodHRw
Oi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVmbGVjdC5k
ZWZpbmVwcm9wZXJ0eQorLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVm
bGVjdC5jb25zdHJ1Y3QKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVj
dENvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVj
LT5hcmd1bWVudCgwKTsKKyAgICBpZiAoIXRhcmdldC5pc09iamVjdCgpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUmVm
bGVjdC5jb25zdHJ1Y3QgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGEgY29uc3RydWN0
b3IiKSkpOworICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKKyAgICBDb25zdHJ1Y3RU
eXBlIGNvbnN0cnVjdFR5cGUgPSBKU0M6OmdldENvbnN0cnVjdERhdGEoYXNPYmplY3QodGFyZ2V0
KSwgY29uc3RydWN0RGF0YSk7CisgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlw
ZU5vbmUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgZmlyc3QgYXJn
dW1lbnQgYmUgYSBjb25zdHJ1Y3RvciIpKSk7CisKKyAgICBKU1ZhbHVlIG5ld1RhcmdldCA9IHRh
cmdldDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKKyAgICAgICAgbmV3
VGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMik7CisgICAgICAgIGlmICghbmV3VGFyZ2V0LmlzQ29u
c3RydWN0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUg
dGhpcmQgYXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvciBpZiBwcmVzZW50IikpKTsKKyAgICB9CisK
KyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgSlNPYmplY3QqIGFyZ3Vt
ZW50c09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgxKSk7
CisgICAgaWYgKCFhcmd1bWVudHNPYmplY3QpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmNvbnN0cnVjdCBy
ZXF1aXJlcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CisgICAgdW5zaWdu
ZWQgY291bnQgPSBnZXRMZW5ndGgoZXhlYywgYXJndW1lbnRzT2JqZWN0KTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsg
KytpbmRleCkgeworICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcmd1bWVudHNPYmplY3QtPmdl
dEluZGV4KGV4ZWMsIGluZGV4KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChlbGVtZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVj
dERhdGEsIGFyZ3VtZW50cywgbmV3VGFyZ2V0KSk7Cit9CisKKy8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLXJlZmxlY3QuZGVmaW5lcHJvcGVydHkKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdERlZmluZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMTExLDYg
KzE0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdERlZmlu
ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0YXJnZXRPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWZpbmVPd25Q
cm9wZXJ0eSh0YXJnZXRPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hv
dWxkVGhyb3cpKSk7CiB9CiAKKy8vIEZJWE1FOiBSZWZsZWN0LmVudW1lcmF0ZSBpcyByZW1vdmVk
IGluIEVDTUEgMjAxNiBkcmFmdC4KIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9y
Zy9lY21hLTI2Mi82LjAvI3NlYy1yZWZsZWN0LmVudW1lcmF0ZQogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0RW51bWVyYXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKQEAg
LTEyMCw3ICsxNTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmpl
Y3RFbnVtZXJhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+cHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgYXNPYmplY3QodGFyZ2V0
KSkpOwogfQogCi0vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIv
Ni4wLyNzZWMtcmVmbGVjdC5nZXQKKy8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLXJlZmxlY3QuZ2V0CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmpl
Y3RHZXQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJn
dW1lbnQoMCk7CkBAIC0xMzksNyArMTc4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWZsZWN0T2JqZWN0R2V0KEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRhcmdldC5nZXQoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSk7CiB9CiAKLS8vIGh0
dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1yZWZsZWN0
LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcgorLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtcmVmbGVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsK
QEAgLTE1Myw3ICsxOTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RP
YmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
ZXhlYywgYXNPYmplY3QodGFyZ2V0KSwga2V5KSk7CiB9CiAKLS8vIGh0dHA6Ly93d3cuZWNtYS1p
bnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1yZWZsZWN0LmdldHByb3RvdHlwZW9m
CisvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmdldHByb3Rv
dHlwZW9mCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RHZXRQcm90
b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5h
cmd1bWVudCgwKTsKQEAgLTE2Miw3ICsyMDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZmxlY3RPYmplY3RHZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKGV4ZWMs
IGFzT2JqZWN0KHRhcmdldCkpKTsKIH0KIAotLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9u
YWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXJlZmxlY3QuaXNleHRlbnNpYmxlCisvLyBodHRwczov
L3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmlzZXh0ZW5zaWJsZQogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0SXNFeHRlbnNpYmxlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAt
MTc1LDcgKzIxNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamVj
dElzRXh0ZW5zaWJsZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oaXNFeHRlbnNpYmxlKSk7CiB9CiAKLS8vIGh0dHA6Ly93d3cuZWNtYS1pbnRl
cm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1yZWZsZWN0Lm93bmtleXMKKy8vIGh0dHBz
Oi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZmxlY3Qub3dua2V5cwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0T3duS2V5cyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE4NCw3ICsy
MjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplY3RPd25LZXlz
KEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5
S2V5cyhleGVjLCBqc0Nhc3Q8SlNPYmplY3QqPih0YXJnZXQpLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwogfQog
Ci0vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMt
cmVmbGVjdC5wcmV2ZW50ZXh0ZW5zaW9ucworLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtcmVmbGVjdC5wcmV2ZW50ZXh0ZW5zaW9ucwogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWZsZWN0T2JqZWN0UHJldmVudEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xOTcsNyArMjM2
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0UHJldmVudEV4
dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHJlc3VsdCkpOwogfQogCi0vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5v
cmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVmbGVjdC5zZXRwcm90b3R5cGVvZgorLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5zZXRwcm90b3R5cGVvZgogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZWN0U2V0UHJvdG90eXBlT2YoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvZXM2LnlhbWwgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvZXM2LnlhbWwKaW5kZXggY2E3OTEzMmQ1ODNmZDVkZDRmOTUz
ZDg5MWQ2ZjYxMTdmYmVmODAwOC4uZTRkMjJmYTJkYjBlYWNkNzQ4ODhjZWVkMDI2ZjM2MTZhNjcy
MGUzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9lczYueWFtbApAQCAtMTA3MSwxMSArMTA3
MSwxMSBAQAogLSBwYXRoOiBlczYvUHJveHlfc2V0UHJvdG90eXBlT2ZfaGFuZGxlci5qcwogICBj
bWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9SZWZsZWN0X1JlZmxlY3QuY29uc3RydWN0
LmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDog
ZXM2L1JlZmxlY3RfUmVmbGVjdC5jb25zdHJ1Y3RfY3JlYXRlc19pbnN0YW5jZV9mcm9tX25ld1Rh
cmdldF9hcmd1bWVudC5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9y
bWFsCiAtIHBhdGg6IGVzNi9SZWZsZWN0X1JlZmxlY3QuY29uc3RydWN0X3NldHNfbmV3LnRhcmdl
dF9tZXRhX3Byb3BlcnR5LmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2IDpu
b3JtYWwKIC0gcGF0aDogZXM2L1JlZmxlY3RfUmVmbGVjdC5zZXQuanMKICAgY21kOiBydW5FUzYg
OmZhaWwKIC0gcGF0aDogZXM2L1JlZ0V4cC5wcm90b3R5cGVfcHJvcGVydGllc19SZWdFeHAucHJv
dG90eXBlW1N5bWJvbC5tYXRjaF0uanMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvcmVmbGVjdC1jb25zdHJ1Y3QuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3JlZmxlY3QtY29uc3RydWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiYThjOTdi
YmIxZWJmY2Q4YTdlODNlMGM0YWE4ZjMwZWFjZWUxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlZmxlY3QtY29uc3RydWN0LmpzCkBAIC0w
LDAgKzEsMTcyIEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAg
aWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZh
bHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgbWVzc2Fn
ZSkgeworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOwor
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoIWVy
cm9yKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm5vdCB0aHJvd24uIik7CisgICAgaWYgKFN0
cmluZyhlcnJvcikgIT09IG1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGVy
cm9yOiAiICsgU3RyaW5nKGVycm9yKSk7Cit9CisKK3Nob3VsZEJlKFJlZmxlY3QuY29uc3RydWN0
Lmxlbmd0aCwgMik7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBSZWZsZWN0LmNvbnN0cnVj
dCgiaGVsbG8iLCA0Mik7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJl
cyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBjb25zdHJ1Y3RvcmApOworCitzaG91bGRUaHJvdygo
KSA9PiB7CisgICAgUmVmbGVjdC5jb25zdHJ1Y3QoQXJyYXkucHJvdG90eXBlLmZvckVhY2gsIFtd
KTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhIGNvbnN0cnVjdG9yYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBS
ZWZsZWN0LmNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IH0sIDQyLCBudWxsKTsKK30sIGBUeXBlRXJy
b3I6IFJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRoZSB0aGlyZCBhcmd1bWVudCBiZSBhIGNv
bnN0cnVjdG9yIGlmIHByZXNlbnRgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxl
Y3QuY29uc3RydWN0KGZ1bmN0aW9uICgpIHsgfSwgNDIsIHt9KTsKK30sIGBUeXBlRXJyb3I6IFJl
ZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRoZSB0aGlyZCBhcmd1bWVudCBiZSBhIGNvbnN0cnVj
dG9yIGlmIHByZXNlbnRgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuY29u
c3RydWN0KGZ1bmN0aW9uICgpIHsgfSwgNDIsIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKTsKK30s
IGBUeXBlRXJyb3I6IFJlZmxlY3QuY29uc3RydWN0IHJlcXVpcmVzIHRoZSB0aGlyZCBhcmd1bWVu
dCBiZSBhIGNvbnN0cnVjdG9yIGlmIHByZXNlbnRgKTsKKworc2hvdWxkVGhyb3coKCkgPT4gewor
ICAgIFJlZmxlY3QuY29uc3RydWN0KGZ1bmN0aW9uICgpIHsgfSwgNDIsIGZ1bmN0aW9uICgpIHsg
fSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmNvbnN0cnVjdCByZXF1aXJlcyB0aGUgc2Vjb25k
IGFyZ3VtZW50IGJlIGFuIG9iamVjdGApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgdmFy
IGFycmF5ID0geworICAgICAgICBnZXQgbGVuZ3RoKCkgeworICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJvayIpOworICAgICAgICB9LAorICAgICAgICBnZXQgMCgpIHsKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigibmciKTsKKyAgICAgICAgfQorICAgIH07CisgICAgUmVmbGVjdC5j
b25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyB9LCBhcnJheSk7Cit9LCBgRXJyb3I6IG9rYCk7CisKK3No
b3VsZFRocm93KCgpID0+IHsKKyAgICB2YXIgYXJyYXkgPSB7CisgICAgICAgIGdldCBsZW5ndGgo
KSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0IDAoKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm9rIik7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIFJlZmxlY3QuY29uc3RydWN0KGZ1bmN0aW9uICgpIHsgfSwgYXJyYXkpOworfSwgYEVycm9y
OiBva2ApOworCit2YXIgYXJyYXkgPSB7CisgICAgZ2V0IGxlbmd0aCgpIHsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfSwKKyAgICBnZXQgMCgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJu
ZyIpOworICAgIH0KK307CitzaG91bGRCZShSZWZsZWN0LmNvbnN0cnVjdChmdW5jdGlvbiAoKSB7
IHRoaXMubGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgfSwgYXJyYXkpLmxlbmd0aCwgMCk7CisK
K3ZhciBnbG9iYWxPYmplY3QgPSB0aGlzOworc2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoZnVu
Y3Rpb24gSGVsbG8oKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIHNob3VsZEJlKGFyZ3VtZW50
c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzFdLCAxKTsKKyAgICBzaG91bGRCZShh
cmd1bWVudHNbMl0sIDIpOworICAgIHNob3VsZEJlKHR5cGVvZiB0aGlzLCAib2JqZWN0Iik7Cisg
ICAgc2hvdWxkQmUobmV3LnRhcmdldCwgSGVsbG8pOworICAgIHRoaXMucmVzdWx0ID0gYXJndW1l
bnRzLmxlbmd0aDsKK30sIFswLDEsMl0pLnJlc3VsdCwgMykKKworc2hvdWxkQmUoUmVmbGVjdC5j
b25zdHJ1Y3QoZnVuY3Rpb24gSGVsbG8oKSB7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzBdLCAw
KTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMV0sIDEpOworICAgIHNob3VsZEJlKGFyZ3VtZW50
c1syXSwgMik7CisgICAgc2hvdWxkQmUodHlwZW9mIHRoaXMsICJvYmplY3QiKTsKKyAgICBzaG91
bGRCZShuZXcudGFyZ2V0LCBIZWxsbyk7CisgICAgdGhpcy5yZXN1bHQgPSBhcmd1bWVudHMubGVu
Z3RoOworfSwgWzAsMSwyXSkucmVzdWx0LCAzKQorCit2YXIgbmV3VGFyZ2V0ID0gZnVuY3Rpb24g
KCkgeyB9Oworc2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeworICAgICJ1
c2Ugc3RyaWN0IjsKKyAgICBzaG91bGRCZShuZXcudGFyZ2V0LCBuZXdUYXJnZXQpOworICAgIHRo
aXMucmVzdWx0ID0gYXJndW1lbnRzLmxlbmd0aDsKK30sIFtdLCBuZXdUYXJnZXQpLnJlc3VsdCwg
MCkKKworc2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeworICAgIHNob3Vs
ZEJlKG5ldy50YXJnZXQsIG5ld1RhcmdldCk7CisgICAgdGhpcy5yZXN1bHQgPSBhcmd1bWVudHMu
bGVuZ3RoOworfSwgW10sIG5ld1RhcmdldCkucmVzdWx0LCAwKQorCit7CisgICAgY2xhc3MgQSB7
CisgICAgICAgIGNvbnN0cnVjdG9yKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy50eXBl
ID0gIkEiOworICAgICAgICB9CisgICAgfQorCisgICAgY2xhc3MgQiBleHRlbmRzIEEgeworICAg
ICAgICBjb25zdHJ1Y3RvcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1cGVyKCk7CisgICAg
ICAgICAgICB0aGlzLnR5cGUgPSAiQiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzaG91bGRC
ZShSZWZsZWN0LmNvbnN0cnVjdChBLCBbXSkudHlwZSwgIkEiKTsKKyAgICBzaG91bGRCZShSZWZs
ZWN0LmNvbnN0cnVjdChCLCBbXSkudHlwZSwgIkIiKTsKKworICAgIHNob3VsZEJlKFJlZmxlY3Qu
Y29uc3RydWN0KEIsIFtdLCBCKS5fX3Byb3RvX18sIEIucHJvdG90eXBlKTsKKyAgICBzaG91bGRC
ZShSZWZsZWN0LmNvbnN0cnVjdChCLCBbXSwgQSkuX19wcm90b19fLCBBLnByb3RvdHlwZSk7Cisg
ICAgc2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoQiwgW10sIEEpLnR5cGUsICJCIik7CisgICAg
c2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoQiwgW10sIEIpLnR5cGUsICJCIik7CisKKyAgICBz
aG91bGRCZShSZWZsZWN0LmNvbnN0cnVjdChBLCBbXSwgQSkuX19wcm90b19fLCBBLnByb3RvdHlw
ZSk7CisgICAgc2hvdWxkQmUoUmVmbGVjdC5jb25zdHJ1Y3QoQSwgW10sIEIpLl9fcHJvdG9fXywg
Qi5wcm90b3R5cGUpOworICAgIHNob3VsZEJlKFJlZmxlY3QuY29uc3RydWN0KEEsIFtdLCBBKS50
eXBlLCAiQSIpOworICAgIHNob3VsZEJlKFJlZmxlY3QuY29uc3RydWN0KEEsIFtdLCBCKS50eXBl
LCAiQSIpOworfQorCitmdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvclRlc3QoKQoreworICAgIGNs
YXNzIERlcml2ZWRNYXAgeworICAgIH0KKyAgICBzaG91bGRCZShSZWZsZWN0LmNvbnN0cnVjdChN
YXAsIFtdLCBEZXJpdmVkTWFwKS5fX3Byb3RvX18sIERlcml2ZWRNYXAucHJvdG90eXBlKTsKKyAg
ICBsZXQgbWFwID0gUmVmbGVjdC5jb25zdHJ1Y3QoTWFwLCBbXSwgRGVyaXZlZE1hcCk7CisgICAg
bWFwLl9fcHJvdG9fXyA9IE1hcC5wcm90b3R5cGU7CisgICAgbWFwLnNldCgyMCwgMzApOworICAg
IHNob3VsZEJlKG1hcC5nZXQoMjApLCAzMCk7CisKKyAgICBjbGFzcyBGYWlsZWRNYXAgeworICAg
IH0KKyAgICBzaG91bGRCZShSZWZsZWN0LmNvbnN0cnVjdChGYWlsZWRNYXAsIFtdLCBNYXApLl9f
cHJvdG9fXywgTWFwLnByb3RvdHlwZSk7CisgICAgc2hvdWxkVGhyb3coKCkgPT4geworICAgICAg
ICBsZXQgbWFwID0gUmVmbGVjdC5jb25zdHJ1Y3QoRmFpbGVkTWFwLCBbXSwgTWFwKTsKKyAgICAg
ICAgbWFwLnNldCgyMCwgMzApOworICAgIH0sIGBUeXBlRXJyb3I6IE1hcCBvcGVyYXRpb24gY2Fs
bGVkIG9uIG5vbi1NYXAgb2JqZWN0YCk7CisKKyAgICBzaG91bGRCZShSZWZsZWN0LmNvbnN0cnVj
dChTZXQsIFtdLCBNYXApLl9fcHJvdG9fXywgTWFwLnByb3RvdHlwZSk7CisgICAgc2hvdWxkVGhy
b3coKCkgPT4geworICAgICAgICBsZXQgbWFwID0gUmVmbGVjdC5jb25zdHJ1Y3QoU2V0LCBbXSwg
TWFwKTsKKyAgICAgICAgbWFwLnNldCgyMCwgMzApOworICAgIH0sIGBUeXBlRXJyb3I6IE1hcCBv
cGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0YCk7CisKKyAgICBsZXQgc2V0ID0gUmVm
bGVjdC5jb25zdHJ1Y3QoU2V0LCBbXSwgTWFwKTsKKyAgICBTZXQucHJvdG90eXBlLmFkZC5jYWxs
KHNldCwgMjApOworICAgIHNob3VsZEJlKFNldC5wcm90b3R5cGUuaGFzLmNhbGwoc2V0LCAyMCks
IHRydWUpOworfQorbm9JbmxpbmUobmF0aXZlQ29uc3RydWN0b3JUZXN0KTsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxZTQ7ICsraSkKKyAgICBuYXRpdmVDb25zdHJ1Y3RvclRlc3QoKTsK
</data>
<flag name="review"
          id="297621"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>