<?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>38409</bug_id>
          
          <creation_ts>2010-04-30 15:52:16 -0700</creation_ts>
          <short_desc>[ES6] Add support for default parameters</short_desc>
          <delta_ts>2015-07-24 11:43:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://wiki.ecmascript.org/doku.php?id=harmony:parameter_default_values</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>141174</dependson>
    
    <dependson>142944</dependson>
          <blocked>80559</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Erik Arvidsson">arv</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>caitp</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>m.goleb+bugzilla</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>219632</commentid>
    <comment_count>0</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2010-04-30 15:52:16 -0700</bug_when>
    <thetext>Default parameters is one of the approved proposals for the next version of ECMAScript (Harmony).

var x;
function f(y = x) {
  return y
}

x = 1;
assertEquals(1, f());
x = 2;
assertEquals(2, f());

Default parameters may not be followed by non default parameters so the following is an error

function g(x = y, z) {}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219737</commentid>
    <comment_count>1</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-01 12:08:02 -0700</bug_when>
    <thetext>We&apos;ll hold off on this until there&apos;s less flux in the spec.

I believe strict mode has more value than this as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077105</commentid>
    <comment_count>2</comment_count>
      <attachid>248635</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-13 19:36:36 -0700</bug_when>
    <thetext>Created attachment 248635
WIP

It begins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077356</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-16 00:09:12 -0700</bug_when>
    <thetext>Read the spec on this.

We need to implement algorithm in point 28 in this section:
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-functiondeclarationinstantiation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077422</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-03-16 09:40:13 -0700</bug_when>
    <thetext>More fun cases to consider:

function f(x, y=x) { .... }
function f(x=y, y) { .... }
function f(x, y=function() {return x}) { .... }
function f(x=function() { return y}, y) { .... }
function f(x=f, f) { .... }
function f(f, x=f) { .... }
(function f(x=f, f) { .... })
(function f(f, x=f) { .... })

etc, etc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078983</commentid>
    <comment_count>5</comment_count>
      <attachid>249144</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-20 16:20:58 -0700</bug_when>
    <thetext>Created attachment 249144
WIP

I&apos;m still not sure if I like the approach of saving the SourceCode of a function&apos;s parameters
for reparsing later. Maybe a better solution will be to have the SourceCode of a function
contain the text of both its parameters and its body. This would probably require changing 
the places where a function&apos;s SourceCode is assumed only to be its body.

Some things that don&apos;t work yet in this patch:
function scoping(f = function() { return local;}) {
    assert(f() === undefined);
    var local = 10;
    assert(f() === undefined);
}
scoping();

function augmentsArguments(x = 20) {
    assert(x === 20);
    assert(arguments[0] === x);

    arguments[0] = 10;
    assert(x === 10);
    assert(arguments[0] === x);

    x = 15
    assert(x === 15);
    assert(arguments[0] === x);

    function augment() { x = 40 }
    augment()
    assert(x === 40);
    assert(arguments[0] === x);
    arguments = 20;
}
augmentsArguments();
augmentsArguments(20);

some things that do work:
function basic(x, y=x) {
    assert(y === x, &quot;basics don&apos;t work.&quot;)
}
basic(20);
basic(&quot;hello&quot;);
basic({foo: 20});

function basicError(x = y, y) { }
shouldThrow(basicError)

function basicError2(x = x) { }
shouldThrow(basicError2)

;(function(){
    var scopeVariable = {hello: &quot;world&quot;};
    function basicScope(x = scopeVariable) {
        assert(x === scopeVariable);
    }
    basicScope();
})();

function basicFunctionCaptureInDefault(theArg = 20, y = function() {return theArg}) {
    assert(theArg === y(), &quot;y should return x.&quot;);
    theArg = {};
    assert(theArg === y(), &quot;y should return x.&quot;);
}
basicFunctionCaptureInDefault()

function basicCaptured(x = 20, y = x) {
    assert(x === y, &quot;y should equal x&quot;);
    function mutate() { x = &quot;mutation&quot;; }
    mutate()
    assert(x !== y, &quot;y should not equal x&quot;);
}
basicCaptured()

// FIXME: not sure if this should work or not. Currently, it does.
function tricky(globalX = (globalX = &quot;x&quot;), y = (globalX = 20)) {
    assert(globalX === 20);
    assert(globalX === y);
}
tricky();
assert(globalX === &quot;x&quot;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078992</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-03-20 16:36:55 -0700</bug_when>
    <thetext>I believe the spec is fairly explicit about when the parameters come into scope, and when they cease being in a TDZ.

You should also have tests for

function f(x=5) ...

f(undefined)

function f(x=y, y=5)
f(undefined, undefined)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079012</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-20 17:55:46 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I believe the spec is fairly explicit about when the parameters come into
&gt; scope, and when they cease being in a TDZ.
Right. I&apos;ll read through the spec more closely this weekend
in regards to this and make explicit tests. 

I think to get this working:
function scoping(f = function() { return local;}) {
    assert(f() === undefined);
    var local = 10;
    assert(f() === undefined);
}
scoping();

We&apos;ll need a stronger notion
of scope that would also be used to implement &apos;let&apos;s block scoping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079066</commentid>
    <comment_count>8</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-03-21 08:35:54 -0700</bug_when>
    <thetext>I believe a lot of these scoping semantics would be easier to do if we first supported block scoping (eg let). Then we should already have the necessary internal models of lexical scoping and tdz</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079091</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-21 13:41:00 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I believe a lot of these scoping semantics would be easier to do if we first
&gt; supported block scoping (eg let). Then we should already have the necessary
&gt; internal models of lexical scoping and tdz

Right. Agreed.

Also, I totally gave the wrong section of the spec earlier. After some closer reading today, point 28 of:
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-functiondeclarationinstantiation
Specifies that if the formal parameters list contains default expressions, then a separate environment must be created for these expressions to be evaluated in.
This environment should be separate from the var declarations inside a function.

If we support block scoping, then this should be super easy to do. I&apos;m going
to open up a bug to implement &apos;let&apos; block scoping.

Section 14.1.18 specifies the actual evaluation of the default expressions inside
the formal parameters list (and formal parameter list evaluation in general):
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-function-definitions-runtime-semantics-iteratorbindinginitialization

I haven&apos;t got the chance to read through that in detail yet but will today
or tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079092</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-21 14:00:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I believe a lot of these scoping semantics would be easier to do if we first
&gt; supported block scoping (eg let). Then we should already have the necessary
&gt; internal models of lexical scoping and tdz

I&apos;ve already added op_check_tdz in http://trac.webkit.org/changeset/181466 (althrough it currently doesn&apos;t take care of heap access in DFG) so we just need lexical scoping, which is presumably a parser/bytecodegenerator level feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079093</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-21 14:37:25 -0700</bug_when>
    <thetext>A(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; I believe a lot of these scoping semantics would be easier to do if we first
&gt; &gt; supported block scoping (eg let). Then we should already have the necessary
&gt; &gt; internal models of lexical scoping and tdz
&gt; 
&gt; I&apos;ve already added op_check_tdz in http://trac.webkit.org/changeset/181466
&gt; (althrough it currently doesn&apos;t take care of heap access in DFG) so we just
&gt; need lexical scoping, which is presumably a parser/bytecodegenerator level
&gt; feature.

Right. I think we should be able to make the changes
in the parser/AST/BytecodeGenerator. I&apos;ll open a bug
for this and read the spec more closely and investigate
what exactly we need to do. I&apos;m happy to work on the
feature unless somebody else wants to take it. 
Also, if I take it, would love some feedback on how
ya&apos;ll think it should be implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080903</commentid>
    <comment_count>12</comment_count>
      <attachid>249648</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-27 23:49:41 -0700</bug_when>
    <thetext>Created attachment 249648
WIP

rebased patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111788</commentid>
    <comment_count>13</comment_count>
      <attachid>257394</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-07-23 15:37:29 -0700</bug_when>
    <thetext>Created attachment 257394
WIP

Almost done.
I need to make the parser throw errors for duplicate parameter definitions in the presence of default parameter values.
I also need to write more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111876</commentid>
    <comment_count>14</comment_count>
      <attachid>257418</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-07-23 18:55:47 -0700</bug_when>
    <thetext>Created attachment 257418
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111877</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-23 18:57:58 -0700</bug_when>
    <thetext>Attachment 257418 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:722:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:214:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:558:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:624:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/parser/Parser.cpp:1451:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 5 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112040</commentid>
    <comment_count>16</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-07-24 11:43:39 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/187351</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248635</attachid>
            <date>2015-03-13 19:36:36 -0700</date>
            <delta_ts>2015-03-20 16:20:58 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>12995</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODE0MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsMTAgKzYzLDYgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlKAogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJCeXRlY29kZSBHZW5lcmF0
aW9uIik7CiAgICAgCiAgICAgbV9jb2RlQmxvY2stPnNldFRoaXNSZWdpc3RlcihtX3RoaXNSZWdp
c3Rlci52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rl
Y29uc3RydWN0ZWRQYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGF1dG8mIGVudHJ5
ID0gbV9kZWNvbnN0cnVjdGVkUGFyYW1ldGVyc1tpXTsKLSAgICAgICAgZW50cnkuc2Vjb25kLT5i
aW5kVmFsdWUoKnRoaXMsIGVudHJ5LmZpcnN0LmdldCgpKTsKLSAgICB9CiAKICAgICBtX3Njb3Bl
Tm9kZS0+ZW1pdEJ5dGVjb2RlKCp0aGlzKTsKIApAQCAtMzc3LDI2ICszNzMsNjQgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIG1fdGhpc1JlZ2lzdGVyLnNl
dEluZGV4KG5leHRQYXJhbWV0ZXJJbmRleCsrKTsKICAgICBtX2NvZGVCbG9jay0+YWRkUGFyYW1l
dGVyKCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyAr
K2ksICsrbmV4dFBhcmFtZXRlckluZGV4KSB7Ci0gICAgICAgIGludCBpbmRleCA9IG5leHRQYXJh
bWV0ZXJJbmRleDsKLSAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKTsKKyAg
ICAvLyBEZWZhdWx0IHBhcmFtZXRlcnMgbXVzdCBiZSBnZW5lcmF0ZWQgYmVmb3JlIGRlY29uc3Ry
dWN0aW9uIHBhcmFtZXRlcnMgYXJlIGJvdW5kLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cGFyYW1ldGVycy5zaXplKCk7IGkrKywgbmV4dFBhcmFtZXRlckluZGV4KyspIHsKKyAgICAgICAg
RXhwcmVzc2lvbk5vZGUqIGRlZmF1bHRWYWx1ZSA9IHBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlQXQo
aSk7CisgICAgICAgIGlmIChkZWZhdWx0VmFsdWUpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQg
YXJndW1lbnRSZWcoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CisgICAgICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gY29uZGl0aW9uID0gZW1pdElzVW5kZWZpbmVkKG5ld1RlbXBvcmFy
eSgpLCAmYXJndW1lbnRSZWcpOworICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBza2lwRGVmYXVs
dFBhcmFtZXRlckxhYmVsID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAgIGVtaXRKdW1wSWZGYWxz
ZShjb25kaXRpb24uZ2V0KCksIHNraXBEZWZhdWx0UGFyYW1ldGVyTGFiZWwuZ2V0KCkpOworICAg
ICAgICAgICAgZW1pdE5vZGUoJmFyZ3VtZW50UmVnLCBkZWZhdWx0VmFsdWUpOworICAgICAgICAg
ICAgZW1pdExhYmVsKHNraXBEZWZhdWx0UGFyYW1ldGVyTGFiZWwuZ2V0KCkpOworICAgICAgICB9
CisKKyAgICAgICAgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSogcGF0dGVybiA9IHBhcmFtZXRl
cnMuYXQoaSk7CiAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKSB7CisgICAg
ICAgICAgICBSZWdpc3RlcklEIGFyZ3VtZW50UmVnKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
aSkpOworICAgICAgICAgICAgcGF0dGVybi0+YmluZFZhbHVlKCp0aGlzLCAmYXJndW1lbnRSZWcp
OwogICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwotICAgICAgICAgICAg
UmVnaXN0ZXJJRCYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IoaW5kZXgpOwotICAgICAgICAgICAg
cGFyYW1ldGVyLnNldEluZGV4KGluZGV4KTsKLSAgICAgICAgICAgIG1fZGVjb25zdHJ1Y3RlZFBh
cmFtZXRlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZwYXJhbWV0ZXIsIHBhdHRlcm4pKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8gc2ltcGxlUGFyYW1l
dGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXR0ZXJuKTsKLSAgICAgICAg
aWYgKGNhcHR1cmVkQXJndW1lbnRzLnNpemUoKSAmJiBjYXB0dXJlZEFyZ3VtZW50c1tpXSAmJiAh
bV9mdW5jdGlvbnMuY29udGFpbnMoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3BlcnR5KCkuaW1w
bCgpKSkgewotICAgICAgICAgICAgQVNTRVJUKChmdW5jdGlvbk5vZGUtPmhhc0NhcHR1cmVkVmFy
aWFibGVzKCkgJiYgZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhzaW1wbGVQYXJhbWV0ZXItPmJvdW5k
UHJvcGVydHkoKSkpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpOwotICAgICAgICAgICAg
aW5kZXggPSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgoKTsKLSAgICAgICAgICAgIFJlZ2lz
dGVySUQgb3JpZ2luYWwobmV4dFBhcmFtZXRlckluZGV4KTsKLSAgICAgICAgICAgIGluaXRpYWxp
emVDYXB0dXJlZFZhcmlhYmxlKGNhcHR1cmVkQXJndW1lbnRzW2ldLCBzaW1wbGVQYXJhbWV0ZXIt
PmJvdW5kUHJvcGVydHkoKSwgJm9yaWdpbmFsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGludCBpbmRleCA9IG5leHRQYXJhbWV0ZXJJbmRleDsKKyAgICAgICAgICAgIGF1dG8gc2lt
cGxlUGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXR0ZXJuKTsK
KyAgICAgICAgICAgIGlmIChjYXB0dXJlZEFyZ3VtZW50cy5zaXplKCkgJiYgY2FwdHVyZWRBcmd1
bWVudHNbaV0gJiYgIW1fZnVuY3Rpb25zLmNvbnRhaW5zKHNpbXBsZVBhcmFtZXRlci0+Ym91bmRQ
cm9wZXJ0eSgpLmltcGwoKSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoKGZ1bmN0aW9uTm9k
ZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSAmJiBmdW5jdGlvbk5vZGUtPmNhcHR1cmVzKHNpbXBs
ZVBhcmFtZXRlci0+Ym91bmRQcm9wZXJ0eSgpKSkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5n
cyk7CisgICAgICAgICAgICAgICAgaW5kZXggPSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgo
KTsKKyAgICAgICAgICAgICAgICBSZWdpc3RlcklEIG9yaWdpbmFsKG5leHRQYXJhbWV0ZXJJbmRl
eCk7CisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoY2FwdHVyZWRB
cmd1bWVudHNbaV0sIHNpbXBsZVBhcmFtZXRlci0+Ym91bmRQcm9wZXJ0eSgpLCAmb3JpZ2luYWwp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkUGFyYW1ldGVyKHNpbXBsZVBhcmFtZXRl
ci0+Ym91bmRQcm9wZXJ0eSgpLCBpbmRleCk7CiAgICAgICAgIH0KLSAgICAgICAgYWRkUGFyYW1l
dGVyKHNpbXBsZVBhcmFtZXRlci0+Ym91bmRQcm9wZXJ0eSgpLCBpbmRleCk7CiAgICAgfQogCisg
ICAgLy9mb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKKyAg
ICAvLyAgICBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiBwYXR0ZXJuID0gcGFyYW1ldGVycy5h
dChpKTsKKyAgICAvLyAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkgeworICAgIC8v
ICAgICAgICBSZWdpc3RlcklEIGFyZ3VtZW50UmVnKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQo
aSkpOworICAgIC8vICAgICAgICBwYXR0ZXJuLT5iaW5kVmFsdWUoKnRoaXMsICZhcmd1bWVudFJl
Zyk7CisgICAgLy8gICAgfQorICAgIC8vfQorCisgICAgLy9mb3IgKHNpemVfdCBpID0gMDsgaSA8
IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2ksICsrbmV4dFBhcmFtZXRlckluZGV4KSB7CisgICAgLy8g
ICAgaW50IGluZGV4ID0gbmV4dFBhcmFtZXRlckluZGV4OworICAgIC8vICAgIGF1dG8gcGF0dGVy
biA9IHBhcmFtZXRlcnMuYXQoaSk7CisgICAgLy8gICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdO
b2RlKCkpIHsKKyAgICAvLyAgICAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOworICAg
IC8vICAgICAgICBSZWdpc3RlcklEJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZvcihpbmRleCk7Cisg
ICAgLy8gICAgICAgIHBhcmFtZXRlci5zZXRJbmRleChpbmRleCk7CisgICAgLy8gICAgICAgIG1f
ZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZwYXJhbWV0ZXIs
IHBhdHRlcm4pKTsKKyAgICAvLyAgICAgICAgY29udGludWU7CisgICAgLy8gICAgfQorICAgIC8v
ICAgIGF1dG8gc2ltcGxlUGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUq
PihwYXR0ZXJuKTsKKyAgICAvLyAgICBpZiAoY2FwdHVyZWRBcmd1bWVudHMuc2l6ZSgpICYmIGNh
cHR1cmVkQXJndW1lbnRzW2ldICYmICFtX2Z1bmN0aW9ucy5jb250YWlucyhzaW1wbGVQYXJhbWV0
ZXItPmJvdW5kUHJvcGVydHkoKS5pbXBsKCkpKSB7CisgICAgLy8gICAgICAgIEFTU0VSVCgoZnVu
Y3Rpb25Ob2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpICYmIGZ1bmN0aW9uTm9kZS0+Y2FwdHVy
ZXMoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3BlcnR5KCkpKSB8fCBzaG91bGRDYXB0dXJlQWxs
VGhlVGhpbmdzKTsKKyAgICAvLyAgICAgICAgaW5kZXggPSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+
aW5kZXgoKTsKKyAgICAvLyAgICAgICAgUmVnaXN0ZXJJRCBvcmlnaW5hbChuZXh0UGFyYW1ldGVy
SW5kZXgpOworICAgIC8vICAgICAgICBpbml0aWFsaXplQ2FwdHVyZWRWYXJpYWJsZShjYXB0dXJl
ZEFyZ3VtZW50c1tpXSwgc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3BlcnR5KCksICZvcmlnaW5h
bCk7CisgICAgLy8gICAgfQorICAgIC8vICAgIGFkZFBhcmFtZXRlcihzaW1wbGVQYXJhbWV0ZXIt
PmJvdW5kUHJvcGVydHkoKSwgaW5kZXgpOworICAgIC8vfQorCiAgICAgLy8gV2UgZGVjbGFyZSB0
aGUgY2FsbGVlJ3MgbmFtZSBsYXN0IGJlY2F1c2UgaXQgc2hvdWxkIGxvc2UgdG8gYSB2YXIsIGZ1
bmN0aW9uLCBhbmQvb3IgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLgogICAgIGFkZENhbGxlZShmdW5j
dGlvbk5vZGUsIGNhbGxlZVJlZ2lzdGVyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE4MTQyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsOCArMzU3
LDggQEAgcHVibGljOgogICAgIEVsZW1lbnROb2RlKiBjcmVhdGVFbGVtZW50TGlzdChpbnQgZWxp
c2lvbnMsIEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IEVsZW1lbnROb2RlKGVsaXNpb25zLCBleHByKTsgfQogICAgIEVsZW1lbnROb2RlKiBjcmVhdGVF
bGVtZW50TGlzdChFbGVtZW50Tm9kZSogZWxlbXMsIGludCBlbGlzaW9ucywgRXhwcmVzc2lvbk5v
ZGUqIGV4cHIpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRWxlbWVudE5vZGUoZWxlbXMs
IGVsaXNpb25zLCBleHByKTsgfQogCi0gICAgUGFyYW1ldGVyTm9kZSogY3JlYXRlRm9ybWFsUGFy
YW1ldGVyTGlzdChEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGF0dGVybikgeyByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBQYXJhbWV0ZXJOb2RlKHBhdHRlcm4pOyB9Ci0gICAgUGFyYW1ldGVyTm9k
ZSogY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChQYXJhbWV0ZXJOb2RlKiBsaXN0LCBEZWNvbnN0
cnVjdGlvblBhdHRlcm4gcGF0dGVybikgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQYXJh
bWV0ZXJOb2RlKGxpc3QsIHBhdHRlcm4pOyB9CisgICAgUGFyYW1ldGVyTm9kZSogY3JlYXRlRm9y
bWFsUGFyYW1ldGVyTGlzdChEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGF0dGVybiwgRXhwcmVzc2lv
bk5vZGUqIGRlZmF1bHRFeHByZXNzaW9uKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFBh
cmFtZXRlck5vZGUocGF0dGVybiwgZGVmYXVsdEV4cHJlc3Npb24pOyB9CisgICAgUGFyYW1ldGVy
Tm9kZSogY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChQYXJhbWV0ZXJOb2RlKiBsaXN0LCBEZWNv
bnN0cnVjdGlvblBhdHRlcm4gcGF0dGVybiwgRXhwcmVzc2lvbk5vZGUqIGRlZmF1bHRFeHByZXNz
aW9uKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFBhcmFtZXRlck5vZGUobGlzdCwgcGF0
dGVybiwgZGVmYXVsdEV4cHJlc3Npb24pOyB9CiAKICAgICBDYXNlQ2xhdXNlTm9kZSogY3JlYXRl
Q2xhdXNlKEV4cHJlc3Npb25Ob2RlKiBleHByLCBKU0M6OlNvdXJjZUVsZW1lbnRzKiBzdGF0ZW1l
bnRzKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIENhc2VDbGF1c2VOb2RlKGV4cHIsIHN0
YXRlbWVudHMpOyB9CiAgICAgQ2xhdXNlTGlzdE5vZGUqIGNyZWF0ZUNsYXVzZUxpc3QoQ2FzZUNs
YXVzZU5vZGUqIGNsYXVzZSkgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBDbGF1c2VMaXN0
Tm9kZShjbGF1c2UpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVD
b25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTgxNDIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1Nywx
NSArNzU3LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
UGFyYW1ldGVyTm9kZTo6UGFyYW1ldGVyTm9kZShQYXNzUmVmUHRyPERlY29uc3RydWN0aW9uUGF0
dGVybk5vZGU+IHBhdHRlcm4pCisgICAgaW5saW5lIFBhcmFtZXRlck5vZGU6OlBhcmFtZXRlck5v
ZGUoUGFzc1JlZlB0cjxEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlPiBwYXR0ZXJuLCBFeHByZXNz
aW9uTm9kZSogZGVmYXVsdFZhbHVlKQogICAgICAgICA6IG1fcGF0dGVybihwYXR0ZXJuKQorICAg
ICAgICAsIG1fZGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZSkKICAgICAgICAgLCBtX25leHQoMCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX3BhdHRlcm4pOwogICAgIH0KIAotICAgIGlubGluZSBQ
YXJhbWV0ZXJOb2RlOjpQYXJhbWV0ZXJOb2RlKFBhcmFtZXRlck5vZGUqIGwsIFBhc3NSZWZQdHI8
RGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZT4gcGF0dGVybikKKyAgICBpbmxpbmUgUGFyYW1ldGVy
Tm9kZTo6UGFyYW1ldGVyTm9kZShQYXJhbWV0ZXJOb2RlKiBsLCBQYXNzUmVmUHRyPERlY29uc3Ry
dWN0aW9uUGF0dGVybk5vZGU+IHBhdHRlcm4sIEV4cHJlc3Npb25Ob2RlKiBkZWZhdWx0VmFsdWUp
CiAgICAgICAgIDogbV9wYXR0ZXJuKHBhdHRlcm4pCisgICAgICAgICwgbV9kZWZhdWx0VmFsdWUo
ZGVmYXVsdFZhbHVlKQogICAgICAgICAsIG1fbmV4dCgwKQogICAgIHsKICAgICAgICAgbC0+bV9u
ZXh0ID0gdGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShy
ZXZpc2lvbiAxODE0MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCw3IEBAIEZ1bmN0aW9uUGFyYW1ldGVyczo6
RnVuY3Rpb25QYXJhbWV0ZXJzKFAKICAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVyLT5w
YXR0ZXJuKCk7CiAgICAgICAgIHBhdHRlcm4tPnJlZigpOwogICAgICAgICBwYXR0ZXJucygpW2kr
K10gPSBwYXR0ZXJuOworICAgICAgICBtX2RlZmF1bHRWYWx1ZXMuYXBwZW5kKHBhcmFtZXRlci0+
ZGVmYXVsdFZhbHVlKCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuaAkocmV2aXNpb24gMTgxNDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDI1LDE0ICsxNDI1LDE2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgUGFyYW1ldGVyTm9kZSA6IHB1YmxpYyBQYXJzZXJBcmVu
YURlbGV0YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBQYXJhbWV0ZXJOb2RlKFBhc3NSZWZQ
dHI8RGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZT4pOwotICAgICAgICBQYXJhbWV0ZXJOb2RlKFBh
cmFtZXRlck5vZGUqLCBQYXNzUmVmUHRyPERlY29uc3RydWN0aW9uUGF0dGVybk5vZGU+KTsKKyAg
ICAgICAgUGFyYW1ldGVyTm9kZShQYXNzUmVmUHRyPERlY29uc3RydWN0aW9uUGF0dGVybk5vZGU+
LCBFeHByZXNzaW9uTm9kZSopOworICAgICAgICBQYXJhbWV0ZXJOb2RlKFBhcmFtZXRlck5vZGUq
LCBQYXNzUmVmUHRyPERlY29uc3RydWN0aW9uUGF0dGVybk5vZGU+LCBFeHByZXNzaW9uTm9kZSop
OwogCiAgICAgICAgIERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqIHBhdHRlcm4oKSBjb25zdCB7
IHJldHVybiBtX3BhdHRlcm4uZ2V0KCk7IH0KKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGRlZmF1
bHRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVmYXVsdFZhbHVlOyB9CiAgICAgICAgIFBhcmFt
ZXRlck5vZGUqIG5leHRQYXJhbSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgUmVmUHRyPERlY29uc3RydWN0aW9uUGF0dGVybk5vZGU+IG1fcGF0dGVy
bjsKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZGVmYXVsdFZhbHVlOwogICAgICAgICBQYXJh
bWV0ZXJOb2RlKiBtX25leHQ7CiAgICAgfTsKIApAQCAtMTU0NSw2ICsxNTQ3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogICAgICAgICBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiBhdCh1bnNpZ25lZCBpbmRl
eCkgeyBBU1NFUlQoaW5kZXggPCBtX3NpemUpOyByZXR1cm4gcGF0dGVybnMoKVtpbmRleF07IH0K
KyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGRlZmF1bHRWYWx1ZUF0KHVuc2lnbmVkIGluZGV4KSB7
IEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7IHJldHVybiBtX2RlZmF1bHRWYWx1ZXNbaW5kZXhdOyB9
CiAKICAgICBwcml2YXRlOgogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMoUGFyYW1ldGVyTm9k
ZSosIHVuc2lnbmVkIHNpemUpOwpAQCAtMTU1Miw2ICsxNTU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqKiBwYXR0ZXJucygpIHsgcmV0dXJu
ICZtX3N0b3JhZ2U7IH0KIAogICAgICAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgICAgIFZlY3Rv
cjxFeHByZXNzaW9uTm9kZSo+IG1fZGVmYXVsdFZhbHVlczsKICAgICAgICAgRGVjb25zdHJ1Y3Rp
b25QYXR0ZXJuTm9kZSogbV9zdG9yYWdlOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9uIDE4MTQyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0NCwxMiAr
MTI0NCwyNCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGb3JtYWxQCiB7CiAg
ICAgYXV0byBwYXJhbWV0ZXIgPSBwYXJzZURlY29uc3RydWN0aW9uUGF0dGVybihjb250ZXh0LCBE
ZWNvbnN0cnVjdFRvUGFyYW1ldGVycyk7CiAgICAgZmFpbElmRmFsc2UocGFyYW1ldGVyLCAiQ2Fu
bm90IHBhcnNlIHBhcmFtZXRlciBwYXR0ZXJuIik7Ci0gICAgVHJlZUZvcm1hbFBhcmFtZXRlckxp
c3QgbGlzdCA9IGNvbnRleHQuY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChwYXJhbWV0ZXIpOwor
ICAgIFRyZWVFeHByZXNzaW9uIGRlZmF1bHRJbml0aWFsaXplciA9IDA7CisgICAgaWYgKG1hdGNo
KEVRVUFMKSkgeworICAgICAgICBuZXh0KCk7CisgICAgICAgIGRlZmF1bHRJbml0aWFsaXplciA9
IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CisgICAgICAgIGZhaWxJZkZhbHNl
KGRlZmF1bHRJbml0aWFsaXplciwgIkV4cGVjdGluZyBkZWZhdWx0IHBhcmFtZXRlciBhZnRlciAn
PSciKTsKKyAgICB9CisgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgbGlzdCA9IGNvbnRleHQu
Y3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChwYXJhbWV0ZXIsIGRlZmF1bHRJbml0aWFsaXplcik7
CiAgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgdGFpbCA9IGxpc3Q7CiAgICAgd2hpbGUgKGNv
bnN1bWUoQ09NTUEpKSB7CiAgICAgICAgIHBhcmFtZXRlciA9IHBhcnNlRGVjb25zdHJ1Y3Rpb25Q
YXR0ZXJuKGNvbnRleHQsIERlY29uc3RydWN0VG9QYXJhbWV0ZXJzKTsKICAgICAgICAgZmFpbElm
RmFsc2UocGFyYW1ldGVyLCAiQ2Fubm90IHBhcnNlIHBhcmFtZXRlciBwYXR0ZXJuIik7Ci0gICAg
ICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QodGFpbCwgcGFyYW1l
dGVyKTsKKyAgICAgICAgVHJlZUV4cHJlc3Npb24gZGVmYXVsdEluaXRpYWxpemVyID0gMDsKKyAg
ICAgICAgaWYgKG1hdGNoKEVRVUFMKSkgeworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAg
ICAgZGVmYXVsdEluaXRpYWxpemVyID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0
KTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKGRlZmF1bHRJbml0aWFsaXplciwgIkV4cGVjdGlu
ZyBkZWZhdWx0IHBhcmFtZXRlciBhZnRlciAnPSciKTsKKyAgICAgICAgfQorICAgICAgICB0YWls
ID0gY29udGV4dC5jcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KHRhaWwsIHBhcmFtZXRlciwgZGVm
YXVsdEluaXRpYWxpemVyKTsKICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmNwcAkocmV2aXNpb24gMTgx
NDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIHZvaWQgUGFyc2VyQXJlbmE6OmRl
YWxsb2NhdGVPYmplYwogCiBQYXJzZXJBcmVuYTo6flBhcnNlckFyZW5hKCkKIHsKLSAgICBkZWFs
bG9jYXRlT2JqZWN0cygpOworICAgIC8vZGVhbGxvY2F0ZU9iamVjdHMoKTsKIH0KIAogdm9pZCBQ
YXJzZXJBcmVuYTo6YWxsb2NhdGVGcmVlYWJsZVBvb2woKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHJldmlzaW9uIDE4MTQyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsOCArMTk3LDggQEAgcHVibGljOgogICAgIGludCBjcmVhdGVQcm9wZXJ0eUxpc3Qo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHksIGludCkgeyByZXR1cm4gUHJvcGVydHlM
aXN0UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUVsZW1lbnRMaXN0KGludCwgaW50KSB7IHJldHVy
biBFbGVtZW50c0xpc3RSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlRWxlbWVudExpc3QoaW50LCBp
bnQsIGludCkgeyByZXR1cm4gRWxlbWVudHNMaXN0UmVzdWx0OyB9Ci0gICAgaW50IGNyZWF0ZUZv
cm1hbFBhcmFtZXRlckxpc3QoRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuKSB7IHJldHVybiBGb3JtYWxQ
YXJhbWV0ZXJMaXN0UmVzdWx0OyB9Ci0gICAgaW50IGNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3Qo
aW50LCBEZWNvbnN0cnVjdGlvblBhdHRlcm4pIHsgcmV0dXJuIEZvcm1hbFBhcmFtZXRlckxpc3RS
ZXN1bHQ7IH0KKyAgICBpbnQgY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdChEZWNvbnN0cnVjdGlv
blBhdHRlcm4sIGludCkgeyByZXR1cm4gRm9ybWFsUGFyYW1ldGVyTGlzdFJlc3VsdDsgfQorICAg
IGludCBjcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KGludCwgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJu
LCBpbnQpIHsgcmV0dXJuIEZvcm1hbFBhcmFtZXRlckxpc3RSZXN1bHQ7IH0KICAgICBpbnQgY3Jl
YXRlQ2xhdXNlKGludCwgaW50KSB7IHJldHVybiBDbGF1c2VSZXN1bHQ7IH0KICAgICBpbnQgY3Jl
YXRlQ2xhdXNlTGlzdChpbnQpIHsgcmV0dXJuIENsYXVzZUxpc3RSZXN1bHQ7IH0KICAgICBpbnQg
Y3JlYXRlQ2xhdXNlTGlzdChpbnQsIGludCkgeyByZXR1cm4gQ2xhdXNlTGlzdFJlc3VsdDsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249144</attachid>
            <date>2015-03-20 16:20:58 -0700</date>
            <delta_ts>2015-03-27 23:49:41 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>ternary-backup.diff</filename>
            <type>text/plain</type>
            <size>32296</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgxNDIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsNyBAQCBjb25zdCBDbGFzc0luZm8gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jCiAKIHN0YXRp
YyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKFZN
JiB2bSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBEZWJ1Z2dlck1vZGUg
ZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBVbmxpbmtlZEZ1bmN0aW9u
S2luZCBmdW5jdGlvbktpbmQsIGJvb2wgYm9keUluY2x1ZGVzQnJhY2VzLCBQYXJzZXJFcnJvciYg
ZXJyb3IpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uTm9kZT4gZnVuY3Rpb24gPSBw
YXJzZTxGdW5jdGlvbk5vZGU+KCZ2bSwgc291cmNlLCBleGVjdXRhYmxlLT5wYXJhbWV0ZXJzKCks
IGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+dG9TdHJpY3RuZXNzKCksIEpTUGFyc2VG
dW5jdGlvbkNvZGUsIGVycm9yLCAwLCBib2R5SW5jbHVkZXNCcmFjZXMpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxGdW5jdGlvbk5vZGU+IGZ1bmN0aW9uID0gcGFyc2U8RnVuY3Rpb25Ob2RlPigmdm0s
IHNvdXJjZSwgZXhlY3V0YWJsZS0+cGFyYW1ldGVycygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4
ZWN1dGFibGUtPnRvU3RyaWN0bmVzcygpLCBKU1BhcnNlRnVuY3Rpb25Db2RlLCBlcnJvciwgMCwg
Ym9keUluY2x1ZGVzQnJhY2VzLCBleGVjdXRhYmxlLT5wYXJhbWV0ZXJzU291cmNlKCksIGV4ZWN1
dGFibGUtPnBhcmFtZXRlcnMoKS0+aGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKTsKIAogICAg
IGlmICghZnVuY3Rpb24pIHsKICAgICAgICAgQVNTRVJUKGVycm9yLmlzVmFsaWQoKSk7CkBAIC04
OSw2ICs4OSw3IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmMKICAg
ICAsIG1fbmFtZShub2RlLT5pZGVudCgpKQogICAgICwgbV9pbmZlcnJlZE5hbWUobm9kZS0+aW5m
ZXJyZWROYW1lKCkpCiAgICAgLCBtX3BhcmFtZXRlcnMobm9kZS0+cGFyYW1ldGVycygpKQorICAg
ICwgbV9wYXJhbWV0ZXJzU291cmNlKG5vZGUtPnBhcmFtZXRlcnNTb3VyY2UoKSkKICAgICAsIG1f
Zmlyc3RMaW5lT2Zmc2V0KG5vZGUtPmZpcnN0TGluZSgpIC0gc291cmNlLmZpcnN0TGluZSgpKQog
ICAgICwgbV9saW5lQ291bnQobm9kZS0+bGFzdExpbmUoKSAtIG5vZGUtPmZpcnN0TGluZSgpKQog
ICAgICwgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KG5vZGUtPmZ1bmN0aW9uTmFtZVN0YXJ0
KCkgLSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxODE0MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0Niw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBGdW5j
dGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7
IH0KKyAgICBjb25zdCBTb3VyY2VDb2RlJiBwYXJhbWV0ZXJzU291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJhbWV0ZXJzU291cmNlOyB9CiAKICAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0
dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcykKICAgICB7CkBAIC0xNzgs
NiArMTc5LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1fc3lt
Ym9sVGFibGVGb3JDYWxsOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xU
YWJsZUZvckNvbnN0cnVjdDsKICAgICBSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBtX3BhcmFt
ZXRlcnM7CisgICAgU291cmNlQ29kZSBtX3BhcmFtZXRlcnNTb3VyY2U7CiAgICAgdW5zaWduZWQg
bV9maXJzdExpbmVPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CiAgICAgdW5zaWdu
ZWQgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDE4MTQyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMCArNjMsNiBAQCBQYXJz
ZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgU2FtcGxpbmdSZWdpb24g
c2FtcGxpbmdSZWdpb24oIkJ5dGVjb2RlIEdlbmVyYXRpb24iKTsKICAgICAKICAgICBtX2NvZGVC
bG9jay0+c2V0VGhpc1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLnZpcnR1YWxSZWdpc3RlcigpKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgICAgYXV0byYgZW50cnkgPSBtX2RlY29uc3RydWN0ZWRQYXJhbWV0
ZXJzW2ldOwotICAgICAgICBlbnRyeS5zZWNvbmQtPmJpbmRWYWx1ZSgqdGhpcywgZW50cnkuZmly
c3QuZ2V0KCkpOwotICAgIH0KIAogICAgIG1fc2NvcGVOb2RlLT5lbWl0Qnl0ZWNvZGUoKnRoaXMp
OwogCkBAIC0zNzcsMjQgKzM3MywzMyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoVk0mCiAgICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgobmV4dFBhcmFtZXRlckluZGV4
KyspOwogICAgIG1fY29kZUJsb2NrLT5hZGRQYXJhbWV0ZXIoKTsKIAotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSwgKytuZXh0UGFyYW1ldGVySW5kZXgp
IHsKLSAgICAgICAgaW50IGluZGV4ID0gbmV4dFBhcmFtZXRlckluZGV4OwotICAgICAgICBhdXRv
IHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOworICAgIC8vIERlZmF1bHQgcGFyYW1ldGVycyBt
dXN0IGJlIGdlbmVyYXRlZCBiZWZvcmUgZGVjb25zdHJ1Y3Rpb24gcGFyYW1ldGVycyBhcmUgYm91
bmQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgaSsrLCBu
ZXh0UGFyYW1ldGVySW5kZXgrKykgeworICAgICAgICBpZiAoRXhwcmVzc2lvbk5vZGUqIGRlZmF1
bHRWYWx1ZSA9IHBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlQXQoaSkpIHsKKyAgICAgICAgICAgIFJl
Z2lzdGVySUQgYXJndW1lbnRSZWcoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSk7CisgICAg
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gY29uZGl0aW9uID0gZW1pdElzVW5kZWZpbmVkKG5l
d1RlbXBvcmFyeSgpLCAmYXJndW1lbnRSZWcpOworICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBz
a2lwRGVmYXVsdFBhcmFtZXRlciA9IG5ld0xhYmVsKCk7CisgICAgICAgICAgICBlbWl0SnVtcElm
RmFsc2UoY29uZGl0aW9uLmdldCgpLCBza2lwRGVmYXVsdFBhcmFtZXRlci5nZXQoKSk7CisgICAg
ICAgICAgICBlbWl0Tm9kZSgmYXJndW1lbnRSZWcsIGRlZmF1bHRWYWx1ZSk7CisgICAgICAgICAg
ICBlbWl0TGFiZWwoc2tpcERlZmF1bHRQYXJhbWV0ZXIuZ2V0KCkpOworICAgICAgICB9CisKKyAg
ICAgICAgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSogcGF0dGVybiA9IHBhcmFtZXRlcnMuYXQo
aSk7CiAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKSB7CisgICAgICAgICAg
ICBSZWdpc3RlcklEIGFyZ3VtZW50UmVnKENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoaSkpOwor
ICAgICAgICAgICAgcGF0dGVybi0+YmluZFZhbHVlKCp0aGlzLCAmYXJndW1lbnRSZWcpOwogICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwotICAgICAgICAgICAgUmVnaXN0
ZXJJRCYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IoaW5kZXgpOwotICAgICAgICAgICAgcGFyYW1l
dGVyLnNldEluZGV4KGluZGV4KTsKLSAgICAgICAgICAgIG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRl
cnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKCZwYXJhbWV0ZXIsIHBhdHRlcm4pKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8gc2ltcGxlUGFyYW1ldGVyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXR0ZXJuKTsKLSAgICAgICAgaWYgKGNh
cHR1cmVkQXJndW1lbnRzLnNpemUoKSAmJiBjYXB0dXJlZEFyZ3VtZW50c1tpXSAmJiAhbV9mdW5j
dGlvbnMuY29udGFpbnMoc2ltcGxlUGFyYW1ldGVyLT5ib3VuZFByb3BlcnR5KCkuaW1wbCgpKSkg
ewotICAgICAgICAgICAgQVNTRVJUKChmdW5jdGlvbk5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVz
KCkgJiYgZnVuY3Rpb25Ob2RlLT5jYXB0dXJlcyhzaW1wbGVQYXJhbWV0ZXItPmJvdW5kUHJvcGVy
dHkoKSkpIHx8IHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpOwotICAgICAgICAgICAgaW5kZXgg
PSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgoKTsKLSAgICAgICAgICAgIFJlZ2lzdGVySUQg
b3JpZ2luYWwobmV4dFBhcmFtZXRlckluZGV4KTsKLSAgICAgICAgICAgIGluaXRpYWxpemVDYXB0
dXJlZFZhcmlhYmxlKGNhcHR1cmVkQXJndW1lbnRzW2ldLCBzaW1wbGVQYXJhbWV0ZXItPmJvdW5k
UHJvcGVydHkoKSwgJm9yaWdpbmFsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlu
dCBpbmRleCA9IG5leHRQYXJhbWV0ZXJJbmRleDsKKyAgICAgICAgICAgIGF1dG8gc2ltcGxlUGFy
YW1ldGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXR0ZXJuKTsKKyAgICAg
ICAgICAgIGlmIChjYXB0dXJlZEFyZ3VtZW50cy5zaXplKCkgJiYgY2FwdHVyZWRBcmd1bWVudHNb
aV0gJiYgIW1fZnVuY3Rpb25zLmNvbnRhaW5zKHNpbXBsZVBhcmFtZXRlci0+Ym91bmRQcm9wZXJ0
eSgpLmltcGwoKSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoKGZ1bmN0aW9uTm9kZS0+aGFz
Q2FwdHVyZWRWYXJpYWJsZXMoKSAmJiBmdW5jdGlvbk5vZGUtPmNhcHR1cmVzKHNpbXBsZVBhcmFt
ZXRlci0+Ym91bmRQcm9wZXJ0eSgpKSkgfHwgc2hvdWxkQ2FwdHVyZUFsbFRoZVRoaW5ncyk7Cisg
ICAgICAgICAgICAgICAgaW5kZXggPSBjYXB0dXJlZEFyZ3VtZW50c1tpXS0+aW5kZXgoKTsKKyAg
ICAgICAgICAgICAgICBSZWdpc3RlcklEIG9yaWdpbmFsKG5leHRQYXJhbWV0ZXJJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUNhcHR1cmVkVmFyaWFibGUoY2FwdHVyZWRBcmd1bWVu
dHNbaV0sIHNpbXBsZVBhcmFtZXRlci0+Ym91bmRQcm9wZXJ0eSgpLCAmb3JpZ2luYWwpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYWRkUGFyYW1ldGVyKHNpbXBsZVBhcmFtZXRlci0+Ym91
bmRQcm9wZXJ0eSgpLCBpbmRleCk7CiAgICAgICAgIH0KLSAgICAgICAgYWRkUGFyYW1ldGVyKHNp
bXBsZVBhcmFtZXRlci0+Ym91bmRQcm9wZXJ0eSgpLCBpbmRleCk7CiAgICAgfQogCiAgICAgLy8g
V2UgZGVjbGFyZSB0aGUgY2FsbGVlJ3MgbmFtZSBsYXN0IGJlY2F1c2UgaXQgc2hvdWxkIGxvc2Ug
dG8gYSB2YXIsIGZ1bmN0aW9uLCBhbmQvb3IgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE4MTQy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTUsOCArMjk1LDEwIEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29u
c3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBmdW5jdGlv
bktleXdvcmRTdGFydCkKICAgICB7CisgICAgICAgIGlmIChpbmZvLmhhc0RlZmF1bHRQYXJhbWV0
ZXJzKQorICAgICAgICAgICAgaW5mby5ib2R5LT5zZXRQYXJhbWV0ZXJzU291cmNlKFNvdXJjZUNv
ZGUobV9zb3VyY2VDb2RlLT5wcm92aWRlcigpLCBpbmZvLm9wZW5QYXJlbk9mZnNldCwgaW5mby5j
bG9zZVBhcmVuT2Zmc2V0LCBpbmZvLm9wZW5QYXJlblN0YXJ0TGluZSwgaW5mby5vcGVuUGFyZW5T
dGFydENvbHVtbikpOwogICAgICAgICBGdW5jRXhwck5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJz
ZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCAqaW5mby5uYW1lLCBpbmZvLmJvZHksCi0g
ICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZz
ZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlT
dGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyk7CisgICAgICAgICAgICBtX3NvdXJjZUNvZGUt
PnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNl
dCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1l
dGVycywgaW5mby5oYXNEZWZhdWx0UGFyYW1ldGVycyk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0
TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRP
ZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0
RnVuY3Rpb25LZXl3b3JkU3RhcnQoZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtMzE5LDggKzMyMSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGluZm8uYm9k
eS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24u
c3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIGluZm8uYm9k
eS0+c2V0SW5mZXJyZWROYW1lKCpuYW1lKTsKICAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5jdGlv
bktleXdvcmRTdGFydChnZXRPclNldFN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgaWYgKGluZm8uaGFz
RGVmYXVsdFBhcmFtZXRlcnMpCisgICAgICAgICAgICBpbmZvLmJvZHktPnNldFBhcmFtZXRlcnNT
b3VyY2UoU291cmNlQ29kZShtX3NvdXJjZUNvZGUtPnByb3ZpZGVyKCksIGluZm8ub3BlblBhcmVu
T2Zmc2V0LCBpbmZvLmNsb3NlUGFyZW5PZmZzZXQsIGluZm8ub3BlblBhcmVuU3RhcnRMaW5lLCBp
bmZvLm9wZW5QYXJlblN0YXJ0Q29sdW1uKSk7CiAgICAgICAgIFNvdXJjZUNvZGUgc291cmNlID0g
bV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGluZm8ub3BlbkJyYWNlT2Zmc2V0LCBpbmZvLmNs
b3NlQnJhY2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5U3RhcnRDb2x1bW4p
OwotICAgICAgICBGdW5jRXhwck5vZGUqIGZ1bmNFeHByID0gbmV3IChtX3BhcnNlckFyZW5hKSBG
dW5jRXhwck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVy
LCBpbmZvLmJvZHksIHNvdXJjZSwgaW5mby5wYXJhbWV0ZXJzKTsKKyAgICAgICAgRnVuY0V4cHJO
b2RlKiBmdW5jRXhwciA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9u
LCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgaW5mby5ib2R5LCBzb3VyY2Us
IGluZm8ucGFyYW1ldGVycywgaW5mby5oYXNEZWZhdWx0UGFyYW1ldGVycyk7CiAgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZSgqbmFtZSwgZnVuY0V4cHIsIHR5
cGUsIFByb3BlcnR5Tm9kZTo6VW5rbm93biwgc3VwZXJCaW5kaW5nKTsKICAgICB9CiAgICAgCkBA
IC0zMjksOSArMzMzLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGluZm8uYm9keS0+c2V0
TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRP
ZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0
RnVuY3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JTZXRTdGFydE9mZnNldCk7CisgICAgICAgIGlmIChp
bmZvLmhhc0RlZmF1bHRQYXJhbWV0ZXJzKQorICAgICAgICAgICAgaW5mby5ib2R5LT5zZXRQYXJh
bWV0ZXJzU291cmNlKFNvdXJjZUNvZGUobV9zb3VyY2VDb2RlLT5wcm92aWRlcigpLCBpbmZvLm9w
ZW5QYXJlbk9mZnNldCwgaW5mby5jbG9zZVBhcmVuT2Zmc2V0LCBpbmZvLm9wZW5QYXJlblN0YXJ0
TGluZSwgaW5mby5vcGVuUGFyZW5TdGFydENvbHVtbikpOwogICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IHBhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRl
bnRpZmllcih2bSwgbmFtZSk7CiAgICAgICAgIFNvdXJjZUNvZGUgc291cmNlID0gbV9zb3VyY2VD
b2RlLT5zdWJFeHByZXNzaW9uKGluZm8ub3BlbkJyYWNlT2Zmc2V0LCBpbmZvLmNsb3NlQnJhY2VP
ZmZzZXQsIGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5U3RhcnRDb2x1bW4pOwotICAgICAg
ICBGdW5jRXhwck5vZGUqIGZ1bmNFeHByID0gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRXhwck5v
ZGUobG9jYXRpb24sIHZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgaW5mby5ib2R5
LCBzb3VyY2UsIGluZm8ucGFyYW1ldGVycyk7CisgICAgICAgIEZ1bmNFeHByTm9kZSogZnVuY0V4
cHIgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgdm0tPnByb3Bl
cnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBpbmZvLmJvZHksIHNvdXJjZSwgaW5mby5wYXJhbWV0
ZXJzLCBpbmZvLmhhc0RlZmF1bHRQYXJhbWV0ZXJzKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKGlkZW50LCBmdW5jRXhwciwgdHlwZSwgUHJvcGVydHlO
b2RlOjpVbmtub3duLCBzdXBlckJpbmRpbmcpOwogICAgIH0KIApAQCAtMzY2LDggKzM3MiwxMCBA
QCBwdWJsaWM6CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGdW5jRGVjbFN0YXRlbWVudChj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88
QVNUQnVpbGRlcj4mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uS2V5d29yZFN0YXJ0KQogICAgIHsK
KyAgICAgICAgaWYgKGluZm8uaGFzRGVmYXVsdFBhcmFtZXRlcnMpCisgICAgICAgICAgICBpbmZv
LmJvZHktPnNldFBhcmFtZXRlcnNTb3VyY2UoU291cmNlQ29kZShtX3NvdXJjZUNvZGUtPnByb3Zp
ZGVyKCksIGluZm8ub3BlblBhcmVuT2Zmc2V0LCBpbmZvLmNsb3NlUGFyZW5PZmZzZXQsIGluZm8u
b3BlblBhcmVuU3RhcnRMaW5lLCBpbmZvLm9wZW5QYXJlblN0YXJ0Q29sdW1uKSk7CiAgICAgICAg
IEZ1bmNEZWNsTm9kZSogZGVjbCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0RlY2xOb2RlKGxv
Y2F0aW9uLCAqaW5mby5uYW1lLCBpbmZvLmJvZHksCi0gICAgICAgICAgICBtX3NvdXJjZUNvZGUt
PnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNl
dCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1l
dGVycyk7CisgICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVu
QnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBp
bmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycywgaW5mby5oYXNEZWZhdWx0UGFy
YW1ldGVycyk7CiAgICAgICAgIGlmICgqaW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFtZXMt
PmFyZ3VtZW50cykKICAgICAgICAgICAgIHVzZXNBcmd1bWVudHMoKTsKICAgICAgICAgbV9zY29w
ZS5tX2Z1bmNEZWNsYXJhdGlvbnMuYXBwZW5kKGRlY2wtPmJvZHkoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2aXNpb24gMTgxNDIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMCw2
ICs1MTAsNyBAQCBMZXhlcjxUPjo6fkxleGVyKCkKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogU3Ry
aW5nIExleGVyPFQ+OjppbnZhbGlkQ2hhcmFjdGVyTWVzc2FnZSgpIGNvbnN0CiB7CisgICAgLy9w
cmludGYoIlNvdXJjZTogJXNcbiIsIG1fc291cmNlLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgp
KTsKICAgICBzd2l0Y2ggKG1fY3VycmVudCkgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBjaGFyYWN0ZXI6ICdcXDAnIik7CkBAIC01NjIsOCArNTYz
LDggQEAgdm9pZCBMZXhlcjxUPjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJgogICAgIG1fbGlu
ZVN0YXJ0ID0gbV9jb2RlOwogICAgIG1fbGV4RXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7CiAgICAg
Ci0gICAgbV9idWZmZXI4LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5pdGlhbFJlYWRCdWZmZXJD
YXBhY2l0eSk7Ci0gICAgbV9idWZmZXIxNi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KChtX2NvZGVF
bmQgLSBtX2NvZGUpIC8gMik7CisgICAgbV9idWZmZXI4LnJlc2VydmVDYXBhY2l0eShpbml0aWFs
UmVhZEJ1ZmZlckNhcGFjaXR5KTsKKyAgICBtX2J1ZmZlcjE2LnJlc2VydmVDYXBhY2l0eSgobV9j
b2RlRW5kIC0gbV9jb2RlKSAvIDIpOwogICAgIAogICAgIGlmIChMSUtFTFkobV9jb2RlIDwgbV9j
b2RlRW5kKSkKICAgICAgICAgbV9jdXJyZW50ID0gKm1fY29kZTsKQEAgLTU3Myw2ICs1NzQsMTQg
QEAgdm9pZCBMZXhlcjxUPjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJgogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgTGV4ZXI8VD46OnJlc2V0Q29kZShjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIFBhcnNlckFyZW5hKiBhcmVuYSkKK3sKKyAgICBtX2J1ZmZlcjgucmVzaXplKDAp
OworICAgIG1fYnVmZmVyMTYucmVzaXplKDApOworICAgIHNldENvZGUoc291cmNlLCBhcmVuYSk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogdGVtcGxhdGUgPGludCBzaGlmdEFtb3VudD4g
QUxXQVlTX0lOTElORSB2b2lkIExleGVyPFQ+OjppbnRlcm5hbFNoaWZ0KCkKIHsKICAgICBtX2Nv
ZGUgKz0gc2hpZnRBbW91bnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xl
eGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5o
CShyZXZpc2lvbiAxODE0MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAgcHVibGljOgogCiAgICAgLy8gRnVu
Y3Rpb25zIHRvIHNldCB1cCBwYXJzaW5nLgogICAgIHZvaWQgc2V0Q29kZShjb25zdCBTb3VyY2VD
b2RlJiwgUGFyc2VyQXJlbmEqKTsKKyAgICB2b2lkIHJlc2V0Q29kZShjb25zdCBTb3VyY2VDb2Rl
JiwgUGFyc2VyQXJlbmEqKTsKICAgICB2b2lkIHNldElzUmVwYXJzaW5nKCkgeyBtX2lzUmVwYXJz
aW5nID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNSZXBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX2lz
UmVwYXJzaW5nOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNv
bnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAxODE0MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzczLDE4
ICs3NzMsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFTU0VSVChsLT5tX3BhdHRlcm4p
OwogICAgIH0KIAotICAgIGlubGluZSBGdW5jRXhwck5vZGU6OkZ1bmNFeHByTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRnVuY3Rp
b25Cb2R5Tm9kZSogYm9keSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJhbWV0ZXJOb2Rl
KiBwYXJhbWV0ZXIpCisgICAgaW5saW5lIEZ1bmNFeHByTm9kZTo6RnVuY0V4cHJOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBGdW5j
dGlvbkJvZHlOb2RlKiBib2R5LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5v
ZGUqIHBhcmFtZXRlciwgYm9vbCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKQogICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fYm9keShib2R5KQogICAgIHsK
LSAgICAgICAgbV9ib2R5LT5maW5pc2hQYXJzaW5nKHNvdXJjZSwgcGFyYW1ldGVyLCBpZGVudCwg
RnVuY3Rpb25FeHByZXNzaW9uKTsKKyAgICAgICAgbV9ib2R5LT5maW5pc2hQYXJzaW5nKHNvdXJj
ZSwgcGFyYW1ldGVyLCBpZGVudCwgRnVuY3Rpb25FeHByZXNzaW9uLCBoYXNEZWZhdWx0UGFyYW1l
dGVyVmFsdWVzKTsKICAgICB9CiAKLSAgICBpbmxpbmUgRnVuY0RlY2xOb2RlOjpGdW5jRGVjbE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFy
YW1ldGVyTm9kZSogcGFyYW1ldGVyKQorICAgIGlubGluZSBGdW5jRGVjbE5vZGU6OkZ1bmNEZWNs
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQ
YXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXIsIGJvb2wgaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcykK
ICAgICAgICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fYm9keShib2R5
KQogICAgIHsKLSAgICAgICAgbV9ib2R5LT5maW5pc2hQYXJzaW5nKHNvdXJjZSwgcGFyYW1ldGVy
LCBpZGVudCwgRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIG1fYm9keS0+ZmluaXNoUGFy
c2luZyhzb3VyY2UsIHBhcmFtZXRlciwgaWRlbnQsIEZ1bmN0aW9uRGVjbGFyYXRpb24sIGhhc0Rl
ZmF1bHRQYXJhbWV0ZXJWYWx1ZXMpOwogICAgIH0KIAogI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lO
VEFYKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9u
IDE4MTQyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzksMTkgKzEzOSwyMiBAQCBFdmFsTm9kZTo6RXZhbE5vZGUoUGFyc2Vy
QXJlbmEmIHBhcnNlckFyCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5j
dGlvbkJvZHlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVBhc3NSZWZQdHI8
RnVuY3Rpb25QYXJhbWV0ZXJzPiBGdW5jdGlvblBhcmFtZXRlcnM6OmNyZWF0ZShQYXJhbWV0ZXJO
b2RlKiBmaXJzdFBhcmFtZXRlcikKK1Bhc3NSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBGdW5j
dGlvblBhcmFtZXRlcnM6OmNyZWF0ZShQYXJhbWV0ZXJOb2RlKiBmaXJzdFBhcmFtZXRlciwgYm9v
bCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKQogewogICAgIHVuc2lnbmVkIHBhcmFtZXRlckNv
dW50ID0gMDsKICAgICBmb3IgKFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlciA9IGZpcnN0UGFyYW1l
dGVyOyBwYXJhbWV0ZXI7IHBhcmFtZXRlciA9IHBhcmFtZXRlci0+bmV4dFBhcmFtKCkpCiAgICAg
ICAgICsrcGFyYW1ldGVyQ291bnQ7CiAKICAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9IHNpemVvZihG
dW5jdGlvblBhcmFtZXRlcnMpIC0gc2l6ZW9mKHZvaWQqKSArIHNpemVvZihEZWNvbnN0cnVjdGlv
blBhdHRlcm5Ob2RlKikgKiBwYXJhbWV0ZXJDb3VudDsKKyAgICBpZiAoaGFzRGVmYXVsdFBhcmFt
ZXRlclZhbHVlcykKKyAgICAgICAgb2JqZWN0U2l6ZSArPSBzaXplb2YoRXhwcmVzc2lvbk5vZGUq
KSAqIHBhcmFtZXRlckNvdW50OwogICAgIHZvaWQqIHNsb3QgPSBmYXN0TWFsbG9jKG9iamVjdFNp
emUpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHNsb3QpIEZ1bmN0aW9uUGFyYW1ldGVycyhm
aXJzdFBhcmFtZXRlciwgcGFyYW1ldGVyQ291bnQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IChzbG90KSBGdW5jdGlvblBhcmFtZXRlcnMoZmlyc3RQYXJhbWV0ZXIsIHBhcmFtZXRlckNvdW50
LCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKSk7CiB9CiAKLUZ1bmN0aW9uUGFyYW1ldGVyczo6
RnVuY3Rpb25QYXJhbWV0ZXJzKFBhcmFtZXRlck5vZGUqIGZpcnN0UGFyYW1ldGVyLCB1bnNpZ25l
ZCBzaXplKQorRnVuY3Rpb25QYXJhbWV0ZXJzOjpGdW5jdGlvblBhcmFtZXRlcnMoUGFyYW1ldGVy
Tm9kZSogZmlyc3RQYXJhbWV0ZXIsIHVuc2lnbmVkIHNpemUsIGJvb2wgaGFzRGVmYXVsdFBhcmFt
ZXRlclZhbHVlcykKICAgICA6IG1fc2l6ZShzaXplKQorICAgICwgbV9oYXNEZWZhdWx0UGFyYW1l
dGVyVmFsdWVzKGhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMpCiB7CiAgICAgdW5zaWduZWQgaSA9
IDA7CiAgICAgZm9yIChQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXIgPSBmaXJzdFBhcmFtZXRlcjsg
cGFyYW1ldGVyOyBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXItPm5leHRQYXJhbSgpKSB7CkBAIC0xNjQs
NyArMTY3LDcgQEAgRnVuY3Rpb25QYXJhbWV0ZXJzOjpGdW5jdGlvblBhcmFtZXRlcnMoUAogRnVu
Y3Rpb25QYXJhbWV0ZXJzOjp+RnVuY3Rpb25QYXJhbWV0ZXJzKCkKIHsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCi0gICAgICAgIHBhdHRlcm5zKClbaV0tPmRlcmVm
KCk7CisgICAgICAgIHN0YXRpY19jYXN0PERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqPihwYXR0
ZXJucygpW2ldKS0+ZGVyZWYoKTsKIH0KIAogRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5
Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4s
IHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgQ29uc3RydWN0b3JL
aW5kIGNvbnN0cnVjdG9yS2luZCkKQEAgLTE3NywxMCArMTgwLDEwIEBAIEZ1bmN0aW9uQm9keU5v
ZGU6OkZ1bmN0aW9uQm9keU5vZGUoUGFyc2UKIHsKIH0KIAotdm9pZCBGdW5jdGlvbkJvZHlOb2Rl
OjpmaW5pc2hQYXJzaW5nKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyYW1ldGVyTm9kZSog
Zmlyc3RQYXJhbWV0ZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBlbnVtIEZ1bmN0aW9uTW9k
ZSBmdW5jdGlvbk1vZGUpCit2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmZpbmlzaFBhcnNpbmcoY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJhbWV0ZXJOb2RlKiBmaXJzdFBhcmFtZXRlciwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGVudW0gRnVuY3Rpb25Nb2RlIGZ1bmN0aW9uTW9kZSwgYm9v
bCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKQogewogICAgIG1fc291cmNlID0gc291cmNlOwot
ICAgIG1fcGFyYW1ldGVycyA9IEZ1bmN0aW9uUGFyYW1ldGVyczo6Y3JlYXRlKGZpcnN0UGFyYW1l
dGVyKTsKKyAgICBtX3BhcmFtZXRlcnMgPSBGdW5jdGlvblBhcmFtZXRlcnM6OmNyZWF0ZShmaXJz
dFBhcmFtZXRlciwgaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcyk7CiAgICAgbV9pZGVudCA9IGlk
ZW50OwogICAgIG1fZnVuY3Rpb25Nb2RlID0gZnVuY3Rpb25Nb2RlOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTgxNDIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQwLDE5ICsx
NTQwLDM3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnVuY3Rpb25QYXJhbWV0ZXJzKTsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4g
Y3JlYXRlKFBhcmFtZXRlck5vZGUqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rp
b25QYXJhbWV0ZXJzPiBjcmVhdGUoUGFyYW1ldGVyTm9kZSosIGJvb2wgaGFzRGVmYXVsdFBhcmFt
ZXRlclZhbHVlcyk7CiAgICAgICAgIH5GdW5jdGlvblBhcmFtZXRlcnMoKTsKIAogICAgICAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgICAgIERlY29uc3Ry
dWN0aW9uUGF0dGVybk5vZGUqIGF0KHVuc2lnbmVkIGluZGV4KSB7IEFTU0VSVChpbmRleCA8IG1f
c2l6ZSk7IHJldHVybiBwYXR0ZXJucygpW2luZGV4XTsgfQorICAgICAgICBEZWNvbnN0cnVjdGlv
blBhdHRlcm5Ob2RlKiBhdCh1bnNpZ25lZCBpbmRleCkgCisgICAgICAgIHsgCisgICAgICAgICAg
ICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqPihwYXR0ZXJucygpW2luZGV4XSk7IAorICAgICAg
ICB9CisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBkZWZhdWx0VmFsdWVBdCh1bnNpZ25lZCBpbmRl
eCkgCisgICAgICAgIHsgCisgICAgICAgICAgICBpZiAoIW1faGFzRGVmYXVsdFBhcmFtZXRlclZh
bHVlcykgCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7IAorICAgICAgICAgICAgQVNT
RVJUKGluZGV4IDwgbV9zaXplKTsgCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXhw
cmVzc2lvbk5vZGUqPihwYXR0ZXJucygpW21fc2l6ZSArIGluZGV4XSk7IAorICAgICAgICB9Cisg
ICAgICAgIHZvaWQgYXBwZW5kRGVmYXVsdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBFeHByZXNzaW9u
Tm9kZSogZXhwcikgCisgICAgICAgIHsgCisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihtX2hhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMpOworICAgICAgICAgICAg
cGF0dGVybnMoKVttX3NpemUgKyBpbmRleF0gPSBzdGF0aWNfY2FzdDx2b2lkKj4oZXhwcik7Cisg
ICAgICAgIH0KKyAgICAgICAgYm9vbCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzOyB9CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMoUGFyYW1ldGVyTm9kZSosIHVuc2lnbmVkIHNpemUp
OworICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMoUGFyYW1ldGVyTm9kZSosIHVuc2lnbmVkIHNp
emUsIGJvb2wgaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcyk7CiAKLSAgICAgICAgRGVjb25zdHJ1
Y3Rpb25QYXR0ZXJuTm9kZSoqIHBhdHRlcm5zKCkgeyByZXR1cm4gJm1fc3RvcmFnZTsgfQorICAg
ICAgICB2b2lkKiogcGF0dGVybnMoKSB7IHJldHVybiAmbV9zdG9yYWdlOyB9CiAKICAgICAgICAg
dW5zaWduZWQgbV9zaXplOwotICAgICAgICBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiBtX3N0
b3JhZ2U7CisgICAgICAgIGJvb2wgbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzOworICAgICAg
ICB2b2lkKiBtX3N0b3JhZ2U7CiAgICAgfTsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGUg
ZmluYWwgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFBhcnNlckFyZW5hRGVsZXRhYmxl
IHsKQEAgLTE1NjUsNyArMTU4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
IG92ZXJyaWRlOwogCi0gICAgICAgIHZvaWQgZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2Rl
JiwgUGFyYW1ldGVyTm9kZSosIGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlvbk1vZGUpOworICAg
ICAgICB2b2lkIGZpbmlzaFBhcnNpbmcoY29uc3QgU291cmNlQ29kZSYsIFBhcmFtZXRlck5vZGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25Nb2RlLCBib29sIGhhc0RlZmF1bHRQYXJhbWV0
ZXJzKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgb3ZlcnJpZGVOYW1lKGNvbnN0IElkZW50aWZp
ZXImIGlkZW50KSB7IG1faWRlbnQgPSBpZGVudDsgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCgpIHsgcmV0dXJuIG1faWRlbnQ7IH0KQEAgLTE1ODAsNiArMTU5OCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBpbnQgZnVuY3Rpb25LZXl3b3JkU3RhcnQoKSBjb25zdCB7IHJl
dHVybiBtX2Z1bmN0aW9uS2V5d29yZFN0YXJ0OyB9CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Q29s
dW1uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydENvbHVtbjsgfQogICAgICAgICB1bnNpZ25lZCBl
bmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQorICAgICAgICB2b2lkIHNl
dFBhcmFtZXRlcnNTb3VyY2UoU291cmNlQ29kZSBzb3VyY2UpIHsgbV9wYXJhbWV0ZXJzU291cmNl
ID0gc291cmNlOyB9CisgICAgICAgIGNvbnN0IFNvdXJjZUNvZGUmIHBhcmFtZXRlcnNTb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnNTb3VyY2U7IH0KIAogICAgICAgICB2b2lkIHNl
dEVuZFBvc2l0aW9uKEpTVGV4dFBvc2l0aW9uKTsKIApAQCAtMTU5OSw2ICsxNjE5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRDb2x1bW47CiAgICAgICAgIHVu
c2lnbmVkIG1fZW5kQ29sdW1uOwogICAgICAgICBTb3VyY2VDb2RlIG1fc291cmNlOworICAgICAg
ICBTb3VyY2VDb2RlIG1fcGFyYW1ldGVyc1NvdXJjZTsKICAgICAgICAgaW50IG1fc3RhcnRTdGFy
dE9mZnNldDsKICAgICAgICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0IDogMTsKICAgICAgICAg
Ym9vbCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZCA6IDE7CkBAIC0xNjMzLDcgKzE2NTQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmNFeHByTm9kZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jRXhwck5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uQm9keU5vZGUqLCBjb25z
dCBTb3VyY2VDb2RlJiwgUGFyYW1ldGVyTm9kZSogPSAwKTsKKyAgICAgICAgRnVuY0V4cHJOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlvbkJvZHlO
b2RlKiwgY29uc3QgU291cmNlQ29kZSYsIFBhcmFtZXRlck5vZGUqLCBib29sIGhhc0RlZmF1bHRQ
YXJhbWV0ZXJWYWx1ZXMpOwogCiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkoKSB7IHJl
dHVybiBtX2JvZHk7IH0KIApAQCAtMTc2Nyw3ICsxNzg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBGdW5jRGVjbE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBGdW5jRGVjbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIEZ1bmN0aW9uQm9keU5vZGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyYW1l
dGVyTm9kZSogPSAwKTsKKyAgICAgICAgRnVuY0RlY2xOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlvbkJvZHlOb2RlKiwgY29uc3QgU291cmNlQ29k
ZSYsIFBhcmFtZXRlck5vZGUqLCBib29sIGhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMpOwogCiAg
ICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkoKSB7IHJldHVybiBtX2JvZHk7IH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTgxNDIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzYsNyArMjM2LDggQEAgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihWTSogdm0s
IGNvbnN0IAogICAgICAgICAgICAgICAgIHBhcmFtZXRlci0+Y29sbGVjdEJvdW5kSWRlbnRpZmll
cnMoYm91bmRQYXJhbWV0ZXJOYW1lcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIGJvdW5kUGFyYW1ldGVyTmFtZSA6IGJvdW5kUGFyYW1ldGVyTmFtZXMpCi0gICAgICAg
ICAgICAgICAgc2NvcGUtPmRlY2xhcmVWYXJpYWJsZSgmYm91bmRQYXJhbWV0ZXJOYW1lKTsKKyAg
ICAgICAgICAgICAgICBzY29wZS0+ZGVjbGFyZUJvdW5kUGFyYW1ldGVyKCZib3VuZFBhcmFtZXRl
ck5hbWUpOworICAgICAgICAgICAgICAgIC8vc2NvcGUtPmRlY2xhcmVWYXJpYWJsZSgmYm91bmRQ
YXJhbWV0ZXJOYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW5hbWUuaXNOdWxsKCkp
CkBAIC0xMjQwLDIxICsxMjQxLDg3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVN0YXRlbWUKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgUGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYgY29udGV4dCwgYm9vbCYg
aGFzRGVmYXVsdFBhcmFtZXRlcnMpCiB7CiAgICAgYXV0byBwYXJhbWV0ZXIgPSBwYXJzZURlY29u
c3RydWN0aW9uUGF0dGVybihjb250ZXh0LCBEZWNvbnN0cnVjdFRvUGFyYW1ldGVycyk7CiAgICAg
ZmFpbElmRmFsc2UocGFyYW1ldGVyLCAiQ2Fubm90IHBhcnNlIHBhcmFtZXRlciBwYXR0ZXJuIik7
CisgICAgLy8gV2UgZG9uJ3Qgc2F2ZSBkZWZhdWx0IHBhcmFtZXRlcnMgYXMgcGFydCBvZiB0aGUg
Y3VycmVudCBwYXJzZXIgYXJlbmEgYmVjYXVzZQorICAgIC8vIHdlIG5lZWQgZGVmYXVsdCBwYXJh
bWV0ZXIgZXhwcmVzc2lvbnMgYXMgcGFydCBvZiB0aGUgZnVuY3Rpb24ncyBwYXJzZXIgYXJlbmEs
IAorICAgIC8vIG5vdCBhcyBwYXJ0IG9mIHRoZSBlbmNsb3Npbmcgc2NvcGUgb2YgdGhlIGZ1bmN0
aW9uJ3MgcGFyc2VyIGFyZW5hLiBXZSBqdXN0IG1ha2UgCisgICAgLy8gc3VyZSB0aGF0IHRoZXJl
IGFyZW4ndCBhbnkgc3ludGF4IGVycm9ycyBpbnNpZGUgdGhpcyBmdW5jdGlvbi4KKyAgICBpZiAo
bWF0Y2goRVFVQUwpKSB7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgZmFpbElmRmFsc2UocGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KSwgIkV4cGVjdGluZyBleHByZXNzaW9uIGFm
dGVyICc9JyBpbnNpZGUgYSBmdW5jdGlvbiBwYXJhbWV0ZXIiKTsKKyAgICAgICAgaGFzRGVmYXVs
dFBhcmFtZXRlcnMgPSB0cnVlOworICAgIH0KICAgICBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBs
aXN0ID0gY29udGV4dC5jcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KHBhcmFtZXRlcik7CiAgICAg
VHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgdGFpbCA9IGxpc3Q7CiAgICAgd2hpbGUgKGNvbnN1bWUo
Q09NTUEpKSB7CiAgICAgICAgIHBhcmFtZXRlciA9IHBhcnNlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJu
KGNvbnRleHQsIERlY29uc3RydWN0VG9QYXJhbWV0ZXJzKTsKICAgICAgICAgZmFpbElmRmFsc2Uo
cGFyYW1ldGVyLCAiQ2Fubm90IHBhcnNlIHBhcmFtZXRlciBwYXR0ZXJuIik7CisgICAgICAgIGlm
IChtYXRjaChFUVVBTCkpIHsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGZhaWxJ
ZkZhbHNlKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCksICJFeHBlY3RpbmcgZXhw
cmVzc2lvbiBhZnRlciAnPScgaW5zaWRlIGEgZnVuY3Rpb24gcGFyYW1ldGVyIik7CisgICAgICAg
ICAgICBoYXNEZWZhdWx0UGFyYW1ldGVycyA9IHRydWU7CisgICAgICAgIH0KICAgICAgICAgdGFp
bCA9IGNvbnRleHQuY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCh0YWlsLCBwYXJhbWV0ZXIpOwog
ICAgIH0KICAgICByZXR1cm4gbGlzdDsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlw
ZT4KK3ZvaWQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRGVmYXVsdFBhcmFtZXRlclZhbHVlcyhG
dW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGNvbnN0IFNvdXJjZUNvZGUmIGJvZHlTb3Vy
Y2UpCit7CisgICAgaWYgKCFjYW5SZWN1cnNlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHVu
c2lnbmVkIGkgPSAwOworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRShjb25zdW1lKE9Q
RU5QQVJFTiksICJJbnRlcm5hbCBwYXJzaW5nIGVycm9yLiBSZXBhcnNpbmcgb2YgdGhlIHNhbWUg
Y29kZSBwcm9kdWNlZCBkaWZmZXJlbnQgcmVzdWx0cy4iKTsKKyAgICBpZiAoIW1hdGNoKENMT1NF
UEFSRU4pKSB7IC8vIEZJWE1FOiBEb24ndCB0aGluayB0aGlzIHNob3VsZCBldmVyIGhhcHBlbi4K
KyAgICAgICAgQVNUQnVpbGRlciBjb250ZXh0KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9wYXJz
ZXJBcmVuYSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4obV9zb3VyY2UpKTsKKworICAgICAgICBh
dXRvIHBhcmFtZXRlciA9IHBhcnNlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuKGNvbnRleHQsIERlY29u
c3RydWN0VG9QYXJhbWV0ZXJzKTsKKyAgICAgICAgaWYgKG1faGFzU3RhY2tPdmVyZmxvdykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHBhcmFtZXRlcik7CisgICAgICAgIEV4
cHJlc3Npb25Ob2RlKiBkZWZhdWx0SW5pdGlhbGl6ZXIgPSAwOworICAgICAgICBpZiAobWF0Y2go
RVFVQUwpKSB7CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICBkZWZhdWx0SW5pdGlh
bGl6ZXIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICAgICAg
QVNTRVJUKGRlZmF1bHRJbml0aWFsaXplcik7CisgICAgICAgIH0KKyAgICAgICAgcGFyYW1ldGVy
cy0+YXBwZW5kRGVmYXVsdFZhbHVlKGkrKywgZGVmYXVsdEluaXRpYWxpemVyKTsKKworICAgICAg
ICB3aGlsZSAoY29uc3VtZShDT01NQSkpIHsKKyAgICAgICAgICAgIHBhcmFtZXRlciA9IHBhcnNl
RGVjb25zdHJ1Y3Rpb25QYXR0ZXJuKGNvbnRleHQsIERlY29uc3RydWN0VG9QYXJhbWV0ZXJzKTsK
KyAgICAgICAgICAgIGlmIChtX2hhc1N0YWNrT3ZlcmZsb3cpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgQVNTRVJUKHBhcmFtZXRlcik7CisgICAgICAgICAgICBFeHByZXNz
aW9uTm9kZSogZGVmYXVsdEluaXRpYWxpemVyID0gMDsKKyAgICAgICAgICAgIGlmIChtYXRjaChF
UVVBTCkpIHsKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgZGVmYXVs
dEluaXRpYWxpemVyID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoZGVmYXVsdEluaXRpYWxpemVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMtPmFwcGVuZERlZmF1bHRWYWx1ZShpKyssIGRlZmF1bHRJbml0
aWFsaXplcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoY29uc3VtZShDTE9TRVBBUkVOKSwgICJJbnRlcm5hbCBwYXJzaW5nIGVycm9yLiBSZXBh
cnNpbmcgb2YgdGhlIHNhbWUgY29kZSBwcm9kdWNlZCBkaWZmZXJlbnQgcmVzdWx0cy4iKTsKKyAg
ICAvL21fbGV4ZXItPnJlc2V0Q29kZShib2R5U291cmNlLCAmbV9wYXJzZXJBcmVuYSk7CisgICAg
bV9sZXhlci0+c2V0Q29kZShib2R5U291cmNlLCAmbV9wYXJzZXJBcmVuYSk7CisgICAgbV90b2tl
bi5tX2xvY2F0aW9uLmxpbmUgPSBib2R5U291cmNlLmZpcnN0TGluZSgpOworICAgIG1fdG9rZW4u
bV9sb2NhdGlvbi5zdGFydE9mZnNldCA9IGJvZHlTb3VyY2Uuc3RhcnRPZmZzZXQoKTsKKyAgICBt
X3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0ID0gYm9keVNvdXJjZS5zdGFydE9mZnNldCgpOwor
ICAgIG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQgPSBib2R5U291cmNlLnN0YXJ0
T2Zmc2V0KCk7CisgICAgbV9mdW5jdGlvbkNhY2hlID0gbV92bS0+YWRkU291cmNlUHJvdmlkZXJD
YWNoZShib2R5U291cmNlLnByb3ZpZGVyKCkpOworCisgICAgbV9zb3VyY2UgPSAmYm9keVNvdXJj
ZTsKKyAgICBtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQgPSBib2R5U291cmNlLnByb3ZpZGVyKCkt
PmlzVmFsaWQoKTsKKyAgICBuZXh0KCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5
cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvbkJvZHkgUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBDb25z
dHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKQogewogICAgIEpTVG9rZW5Mb2NhdGlvbiBzdGFy
dExvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CkBAIC0xMzExLDE0ICsxMzc4LDE4IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICAgICAgZmFpbER1ZVRvVW5l
eHBlY3RlZFRva2VuKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgaW5mby5v
cGVuUGFyZW5PZmZzZXQgPSBtX2xleGVyLT5jdXJyZW50T2Zmc2V0KCkgLSAxOworICAgIGluZm8u
b3BlblBhcmVuU3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7CisgICAgaW5mby5vcGVuUGFyZW5TdGFy
dENvbHVtbiA9IG1fdG9rZW4ubV9kYXRhLm9mZnNldCAtIG1fdG9rZW4ubV9kYXRhLmxpbmVTdGFy
dE9mZnNldDsKICAgICBpZiAoIWNvbnN1bWUoT1BFTlBBUkVOKSkgewogICAgICAgICBzZW1hbnRp
Y0ZhaWx1cmVEdWVUb0tleXdvcmQoc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpLCAiIG5hbWUi
KTsKICAgICAgICAgZmFpbFdpdGhNZXNzYWdlKCJFeHBlY3RlZCBhbiBvcGVuaW5nICcoJyBiZWZv
cmUgYSAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIncyBwYXJhbWV0ZXIgbGlzdCIp
OwogICAgIH0KICAgICBpZiAoIW1hdGNoKENMT1NFUEFSRU4pKSB7Ci0gICAgICAgIGluZm8ucGFy
YW1ldGVycyA9IHBhcnNlRm9ybWFsUGFyYW1ldGVycyhjb250ZXh0KTsKKyAgICAgICAgaW5mby5w
YXJhbWV0ZXJzID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGNvbnRleHQsIGluZm8uaGFzRGVmYXVs
dFBhcmFtZXRlcnMpOwogICAgICAgICBmYWlsSWZGYWxzZShpbmZvLnBhcmFtZXRlcnMsICJDYW5u
b3QgcGFyc2UgcGFyYW1ldGVycyBmb3IgdGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9k
ZSkpOwogICAgIH0KKyAgICBpbmZvLmNsb3NlUGFyZW5PZmZzZXQgPSBtX2xleGVyLT5jdXJyZW50
T2Zmc2V0KCk7CiAgICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOLCAiRXhwZWN0ZWQgYSAnKScg
b3IgYSAnLCcgYWZ0ZXIgYSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24iKTsKICAgICBtYXRjaE9yRmFp
bChPUEVOQlJBQ0UsICJFeHBlY3RlZCBhbiBvcGVuaW5nICd7JyBhdCB0aGUgc3RhcnQgb2YgYSAi
LCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSksICIgYm9keSIpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAxODE0MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2
ICs1MSw3IEBAIHRlbXBsYXRlIDw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8SlNDOjpTY28KIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFTVEJ1aWxkZXI7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFz
cyBGdW5jdGlvbkJvZHlOb2RlOwogY2xhc3MgRnVuY3Rpb25QYXJhbWV0ZXJzOwpAQCAtNDMxLDYg
KzQzMiw3IEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJzZShQYXJzZXJFcnJvciYsIGJvb2wgbmVl
ZFJlcGFyc2luZ0FkanVzdG1lbnQpOworICAgIHZvaWQgcGFyc2VEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzKEZ1bmN0aW9uUGFyYW1ldGVycyosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAogICAgIEpTVGV4
dFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUoKSBjb25zdCB7IHJldHVybiBtX2xl
eGVyLT5wb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKCk7IH0KICAgICBWZWN0b3I8UmVmUHRyPFN0
cmluZ0ltcGw+PiYmIGNsb3NlZFZhcmlhYmxlcygpIHsgcmV0dXJuIFdURjo6bW92ZShtX2Nsb3Nl
ZFZhcmlhYmxlcyk7IH0KQEAgLTc2MCw3ICs3NjIsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFyc2VQcm9wZXJ0eU1ldGhvZChU
cmVlQnVpbGRlciYgY29udGV4dCwgY29uc3QgSWRlbnRpZmllciogbWV0aG9kTmFtZSk7CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VHZXR0ZXJTZXR0
ZXIoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCwgUHJvcGVydHlOb2RlOjpUeXBlLCB1bnNpZ25l
ZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBDb25zdHJ1Y3RvcktpbmQgPSBDb25zdHJ1Y3Rv
cktpbmQ6OkJhc2UsIFN1cGVyQmluZGluZyA9IFN1cGVyQmluZGluZzo6Tm90TmVlZGVkKTsKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZ1bmN0aW9u
Qm9keSBwYXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYsIENvbnN0cnVjdG9yS2luZCk7Ci0g
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGb3JtYWxQ
YXJhbWV0ZXJMaXN0IHBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYpOworICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1l
dGVyTGlzdCBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImLCBib29sJiBoYXNEZWZh
dWx0UGFyYW1ldGVycyk7CiAgICAgZW51bSBWYXJEZWNsYXJhdGlvbkxpc3RDb250ZXh0IHsgRm9y
TG9vcENvbnRleHQsIFZhckRlY2xhcmF0aW9uQ29udGV4dCB9OwogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJl
ZUJ1aWxkZXImLCBpbnQmIGRlY2xhcmF0aW9ucywgVHJlZURlY29uc3RydWN0aW9uUGF0dGVybiYg
bGFzdFBhdHRlcm4sIFRyZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0
aW9uJiBpZGVudFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlv
biYgaW5pdEVuZCwgVmFyRGVjbGFyYXRpb25MaXN0Q29udGV4dCk7CiAgICAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJlZUNvbnN0RGVjbExpc3QgcGFyc2VDb25z
dERlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYpOwpAQCAtOTc5LDEzICs5ODEsMTkgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlcgogfQogCiB0ZW1wbGF0ZSA8Y2xh
c3MgUGFyc2VkTm9kZT4KLXN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJzZShWTSogdm0s
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywg
SlNQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvciwgSlNUZXh0UG9zaXRp
b24qIHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSAwLCBib29sIG5lZWRSZXBhcnNpbmdBZGp1
c3RtZW50ID0gZmFsc2UpCitzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoVk0qIHZt
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVy
cywgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3Ms
IEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJyb3IsIEpTVGV4dFBvc2l0
aW9uKiBwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gMCwgYm9vbCBuZWVkUmVwYXJzaW5nQWRq
dXN0bWVudCA9IGZhbHNlLCBTb3VyY2VDb2RlIHBhcmFtZXRlcnNTb3VyY2UgPSBTb3VyY2VDb2Rl
KCksIGJvb2wgaGFzRGVmYXVsdFBhcmFtZXRlcnMgPSBmYWxzZSkKIHsKICAgICBTYW1wbGluZ1Jl
Z2lvbiBzYW1wbGluZ1JlZ2lvbigiUGFyc2luZyIpOwogCiAgICAgQVNTRVJUKCFzb3VyY2UucHJv
dmlkZXIoKS0+c291cmNlKCkuaXNOdWxsKCkpOworICAgIGJvb2wgd2lsbFBhcnNlRGVmYXVsdFBh
cmFtZXRlcnMgPSBwYXJhbWV0ZXJzICYmIGhhc0RlZmF1bHRQYXJhbWV0ZXJzOwogICAgIGlmIChz
b3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXM4Qml0KCkpIHsKLSAgICAgICAgUGFyc2VyPExl
eGVyPExDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIHBhcmFtZXRlcnMsIG5hbWUsIHN0cmljdG5l
c3MsIHBhcnNlck1vZGUpOworICAgICAgICBQYXJzZXI8TGV4ZXI8TENoYXI+PiBwYXJzZXIodm0s
IHdpbGxQYXJzZURlZmF1bHRQYXJhbWV0ZXJzID8gcGFyYW1ldGVyc1NvdXJjZSA6IHNvdXJjZSwg
d2lsbFBhcnNlRGVmYXVsdFBhcmFtZXRlcnMgPyAwIDogcGFyYW1ldGVycywgbmFtZSwgc3RyaWN0
bmVzcywgcGFyc2VyTW9kZSk7CisgICAgICAgIGlmICh3aWxsUGFyc2VEZWZhdWx0UGFyYW1ldGVy
cykgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKHBhcmFtZXRlcnMg
JiYgUGFyc2VkTm9kZTo6c2NvcGVJc0Z1bmN0aW9uLCAiZnVuY3Rpb25zIGFyZSB0aGUgb25seSBB
U1Qgbm9kZXMgd2l0aCBmdW5jdGlvbiBwYXJhbWV0ZXJzLiIpOworICAgICAgICAgICAgLy8gRklY
TUU6IG1ha2Ugc3VyZSB0aGlzIHdpbGwgYWx3YXlzIGJlIHByb3BlciBzdHJpY3RuZXNzLCBldGMu
CisgICAgICAgICAgICBwYXJzZXIucGFyc2VEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKHBhcmFtZXRl
cnMsIHNvdXJjZSk7CisgICAgICAgIH0KICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5v
ZGU+IHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvciwgbmVlZFJlcGFyc2lu
Z0FkanVzdG1lbnQpOwogICAgICAgICBpZiAocG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSkKICAg
ICAgICAgICAgICpwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVm
b3JlTGFzdE5ld2xpbmUoKTsKQEAgLTk5Nyw3ICsxMDA1LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxQ
YXJzZWROb2RlPiBwYXJzZShWTSogdm0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KLSAgICBQYXJzZXI8TGV4ZXI8VUNoYXI+PiBwYXJzZXIodm0sIHNvdXJjZSwgcGFy
YW1ldGVycywgbmFtZSwgc3RyaWN0bmVzcywgcGFyc2VyTW9kZSk7CisgICAgUGFyc2VyPExleGVy
PExDaGFyPj4gcGFyc2VyKHZtLCB3aWxsUGFyc2VEZWZhdWx0UGFyYW1ldGVycyA/IHBhcmFtZXRl
cnNTb3VyY2UgOiBzb3VyY2UsIHdpbGxQYXJzZURlZmF1bHRQYXJhbWV0ZXJzID8gMCA6IHBhcmFt
ZXRlcnMsIG5hbWUsIHN0cmljdG5lc3MsIHBhcnNlck1vZGUpOworICAgIGlmICh3aWxsUGFyc2VE
ZWZhdWx0UGFyYW1ldGVycykgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uo
cGFyYW1ldGVycyAmJiBQYXJzZWROb2RlOjpzY29wZUlzRnVuY3Rpb24sICJmdW5jdGlvbnMgYXJl
IHRoZSBvbmx5IEFTVCBub2RlcyB3aXRoIGZ1bmN0aW9uIHBhcmFtZXRlcnMuIik7CisgICAgICAg
IC8vIEZJWE1FOiBtYWtlIHN1cmUgdGhpcyB3aWxsIGFsd2F5cyBiZSBwcm9wZXIgc3RyaWN0bmVz
cywgZXRjLgorICAgICAgICBwYXJzZXIucGFyc2VEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKHBhcmFt
ZXRlcnMsIHNvdXJjZSk7CisgICAgfQogICAgIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBy
ZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IsIG5lZWRSZXBhcnNpbmdBZGp1
c3RtZW50KTsKICAgICBpZiAocG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSkKICAgICAgICAgKnBv
c2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBwYXJzZXIucG9zaXRpb25CZWZvcmVMYXN0TmV3bGlu
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJGdW5jdGlvbklu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckZ1
bmN0aW9uSW5mby5oCShyZXZpc2lvbiAxODE0MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlckZ1bmN0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwx
MSBAQCBzdHJ1Y3QgUGFyc2VyRnVuY3Rpb25JbmZvIHsKICAgICBpbnQgYm9keVN0YXJ0TGluZSA9
IDA7CiAgICAgaW50IGJvZHlFbmRMaW5lID0gMDsKICAgICB1bnNpZ25lZCBib2R5U3RhcnRDb2x1
bW4gPSAwOworICAgIHVuc2lnbmVkIG9wZW5QYXJlbk9mZnNldCA9IDA7CisgICAgYm9vbCBoYXNE
ZWZhdWx0UGFyYW1ldGVycyA9IHRydWU7CisgICAgdW5zaWduZWQgY2xvc2VQYXJlbk9mZnNldCA9
IDA7CisgICAgdW5zaWduZWQgb3BlblBhcmVuU3RhcnRMaW5lID0gMDsKKyAgICB1bnNpZ25lZCBv
cGVuUGFyZW5TdGFydENvbHVtbiA9IDA7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249648</attachid>
            <date>2015-03-27 23:49:41 -0700</date>
            <delta_ts>2015-07-23 15:39:24 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>ternary-backup.diff</filename>
            <type>text/plain</type>
            <size>36870</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsOCBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhCiAgICAgSlNQ
YXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4
dCgpID8gSlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3QgOiBKU1BhcnNlclN0cmljdE1vZGU6Ok5v
dFN0cmljdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Ob2RlPiBmdW5jdGlvbiA9IHBh
cnNlPEZ1bmN0aW9uTm9kZT4oCiAgICAgICAgICZ2bSwgc291cmNlLCBleGVjdXRhYmxlLT5wYXJh
bWV0ZXJzKCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgYnVpbHRpbk1vZGUsCi0gICAgICAgIHN0cmlj
dE1vZGUsIEpTUGFyc2VyQ29kZVR5cGU6OkZ1bmN0aW9uLCBlcnJvciwgMCk7CisgICAgICAgIHN0
cmljdE1vZGUsIEpTUGFyc2VyQ29kZVR5cGU6OkZ1bmN0aW9uLCBlcnJvciwgMCwgQ29uc3RydWN0
b3JLaW5kOjpOb25lLAorICAgICAgICBleGVjdXRhYmxlLT5wYXJhbWV0ZXJzKCktPnNvdXJjZSgp
LCBleGVjdXRhYmxlLT5wYXJhbWV0ZXJzKCktPmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSk7
CiAKICAgICBpZiAoIWZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChlcnJvci5pc1ZhbGlkKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE4MjAxNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw2ICs2OSwyOCBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGUoCiAgICAgLy8gcGVyZm9ybSB0aGF0IGFzc2lnbm1lbnQgbm93LgogICAgIGlmIChtX25l
ZWRUb0luaXRpYWxpemVBcmd1bWVudHMpCiAgICAgICAgIGluaXRpYWxpemVWYXJpYWJsZSh2YXJp
YWJsZShwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSwgbV9hcmd1bWVudHNSZWdpc3Rlcik7CisK
KyAgICBpZiAobV9mdW5jdGlvblBhcmFtZXRlcnMpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBk
ZWZhdWx0IHBhcmFtZXRlcnMgYW5kIGJpbmQgZGVjb25zdHJ1Y3Rpb24gbm9kZXMuCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvblBhcmFtZXRlcnMtPnNpemUoKTsgaSsr
KSB7CisgICAgICAgICAgICBSZWdpc3RlcklEJiBwYXJhbWV0ZXIgPSByZWdpc3RlckZvcih2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpICsgMSkpOworICAgICAgICAgICAgYXV0byBwYXR0ZXJu
ID0gbV9mdW5jdGlvblBhcmFtZXRlcnMtPmF0KGkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoRXhwcmVzc2lvbk5vZGUq
IGRlZmF1bHRWYWx1ZSA9IG1fZnVuY3Rpb25QYXJhbWV0ZXJzLT5kZWZhdWx0VmFsdWVBdChpKSkg
eworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ld1RlbXBvcmFyeSgpOworICAgICAgICAgICAg
ICAgIGVtaXRNb3ZlKHJlc3VsdC5nZXQoKSwgJnBhcmFtZXRlcik7CisgICAgICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGNvbmRpdGlvbiA9IGVtaXRJc1VuZGVmaW5lZChuZXdUZW1wb3Jh
cnkoKSwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8TGFiZWw+IHNraXBE
ZWZhdWx0UGFyYW1ldGVyID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcElm
RmFsc2UoY29uZGl0aW9uLmdldCgpLCBza2lwRGVmYXVsdFBhcmFtZXRlci5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgZW1pdE5vZGUocmVzdWx0LmdldCgpLCBkZWZhdWx0VmFsdWUpOworICAgICAg
ICAgICAgICAgIGVtaXRMYWJlbChza2lwRGVmYXVsdFBhcmFtZXRlci5nZXQoKSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gJnBhcmFtZXRlcjsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAg
ICAgICAgICAgICBwYXR0ZXJuLT5iaW5kVmFsdWUoKnRoaXMsIHJlc3VsdC5nZXQoKSk7CisgICAg
ICAgIH0KKyAgICB9CiAgICAgCiAgICAgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVt
cCA9IG5ld1RlbXBvcmFyeSgpOwpAQCAtNzgsMTEgKzEwMCw2IEBAIFBhcnNlckVycm9yIEJ5dGVj
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgYXV0byYgZW50cnkgPSBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzW2ldOwot
ICAgICAgICBlbnRyeS5zZWNvbmQtPmJpbmRWYWx1ZSgqdGhpcywgZW50cnkuZmlyc3QuZ2V0KCkp
OwotICAgIH0KLQogICAgIGJvb2wgY2FsbGluZ0NsYXNzQ29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rv
cktpbmQoKSAhPSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUgJiYgIWlzQ29uc3RydWN0b3IoKTsKICAg
ICBpZiAoIWNhbGxpbmdDbGFzc0NvbnN0cnVjdG9yKQogICAgICAgICBtX3Njb3BlTm9kZS0+ZW1p
dEJ5dGVjb2RlKCp0aGlzKTsKQEAgLTE3Niw2ICsxOTMsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLCBtX3Njb3BlTm9kZShmdW5jdGlvbk5vZGUpCiAg
ICAgLCBtX2NvZGVCbG9jayh2bSwgY29kZUJsb2NrKQogICAgICwgbV9jb2RlVHlwZShGdW5jdGlv
bkNvZGUpCisgICAgLCBtX2Z1bmN0aW9uUGFyYW1ldGVycyhmdW5jdGlvbk5vZGUtPnBhcmFtZXRl
cnMoKSkKICAgICAsIG1fdm0oJnZtKQogICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihjb2RlQmxv
Y2stPmlzQnVpbHRpbkZ1bmN0aW9uKCkpCiB7CkBAIC0xODQsNyArMjAyLDcgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIAogICAgIG1fc3ltYm9sVGFibGUt
PnNldFVzZXNOb25TdHJpY3RFdmFsKGNvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhY29kZUJsb2Nr
LT5pc1N0cmljdE1vZGUoKSk7CiAgICAgVmVjdG9yPElkZW50aWZpZXI+IGJvdW5kUGFyYW1ldGVy
UHJvcGVydGllczsKLSAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rp
b25Ob2RlLT5wYXJhbWV0ZXJzKCk7CisgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
ID0gKm1fZnVuY3Rpb25QYXJhbWV0ZXJzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFy
YW1ldGVycy5zaXplKCk7IGkrKykgewogICAgICAgICBhdXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJz
LmF0KGkpOwogICAgICAgICBpZiAocGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKQpAQCAtMjQ3LDEy
ICsyNjUsOCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAg
Ly8gbmVlZGluZyBkZWNvbnN0cnVjdGlvbiBhcmUgbm90ZWQuCiAgICAgbV9wYXJhbWV0ZXJzLmdy
b3cocGFyYW1ldGVycy5zaXplKCkgKyAxKTsgLy8gcmVzZXJ2ZSBzcGFjZSBmb3IgInRoaXMiCiAg
ICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKS0+aW5k
ZXgoKSk7IC8vIHRoaXMKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5z
aXplKCk7ICsraSkgewotICAgICAgICBhdXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOwot
ICAgICAgICBSZWdpc3RlcklEKiByZWcgPSBpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpOwotICAg
ICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkKLSAgICAgICAgICAgIG1fZGVjb25z
dHJ1Y3RlZFBhcmFtZXRlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcGF0dGVybikpOwot
ICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsr
aSkKKyAgICAgICAgaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKTsKICAgICAKICAgICAvLyBGaWd1
cmUgb3V0IHNvbWUgaW50ZXJlc3RpbmcgZmFjdHMgYWJvdXQgb3VyIGFyZ3VtZW50cy4KICAgICBi
b29sIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzI3LDggKzcyNyw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4gbV9zd2l0Y2hDb250ZXh0
U3RhY2s7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250ZXh0Pj4gbV9m
b3JJbkNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1fdHJ5Q29udGV4
dFN0YWNrOwotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdpc3RlcklEPiwgY29u
c3QgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJz
OwogICAgICAgICBWZWN0b3I8RnVuY3Rpb25Cb2R5Tm9kZSo+IG1fZnVuY3Rpb25zVG9Jbml0aWFs
aXplOworICAgICAgICBSZWZQdHI8RnVuY3Rpb25QYXJhbWV0ZXJzPiBtX2Z1bmN0aW9uUGFyYW1l
dGVyczsKICAgICAgICAgYm9vbCBtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMgeyBmYWxzZSB9
OwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBtX3RyeVJhbmdlczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCShyZXZpc2lvbiAxODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjk1LDggKzI5NSwxMSBAQCBwdWJsaWM6CiAKICAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbykKICAgICB7CisgICAgICAg
IFNvdXJjZUNvZGUgcGFyYW1ldGVyc1NvdXJjZTsKKyAgICAgICAgaWYgKGluZm8uaGFzRGVmYXVs
dFBhcmFtZXRlcnMpCisgICAgICAgICAgICBwYXJhbWV0ZXJzU291cmNlID0gU291cmNlQ29kZSht
X3NvdXJjZUNvZGUtPnByb3ZpZGVyKCksIGluZm8ub3BlblBhcmVuT2Zmc2V0LCBpbmZvLmNsb3Nl
UGFyZW5PZmZzZXQsIGluZm8ub3BlblBhcmVuU3RhcnRMaW5lLCBpbmZvLm9wZW5QYXJlblN0YXJ0
Q29sdW1uKTsKICAgICAgICAgRnVuY0V4cHJOb2RlKiByZXN1bHQgPSBuZXcgKG1fcGFyc2VyQXJl
bmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgKmluZm8ubmFtZSwgaW5mby5ib2R5LAotICAgICAg
ICAgICAgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGluZm8ub3BlbkJyYWNlT2Zmc2V0LCBp
bmZvLmNsb3NlQnJhY2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5U3RhcnRD
b2x1bW4pLCBpbmZvLnBhcmFtZXRlcnMpOworICAgICAgICAgICAgbV9zb3VyY2VDb2RlLT5zdWJF
eHByZXNzaW9uKGluZm8ub3BlbkJyYWNlT2Zmc2V0LCBpbmZvLmNsb3NlQnJhY2VPZmZzZXQsIGlu
Zm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5U3RhcnRDb2x1bW4pLCBpbmZvLnBhcmFtZXRlcnMs
IGluZm8uaGFzRGVmYXVsdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnNTb3VyY2UpOwogICAgICAgICBp
bmZvLmJvZHktPnNldExvYyhpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keUVuZExpbmUsIGxv
Y2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTMxOSw4ICszMjIsMTEgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQobmFtZSk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0
TGluZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxp
bmVTdGFydE9mZnNldCk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0SW5mZXJyZWROYW1lKCpuYW1l
KTsKKyAgICAgICAgU291cmNlQ29kZSBwYXJhbWV0ZXJzU291cmNlOworICAgICAgICBpZiAoaW5m
by5oYXNEZWZhdWx0UGFyYW1ldGVycykKKyAgICAgICAgICAgIHBhcmFtZXRlcnNTb3VyY2UgPSBT
b3VyY2VDb2RlKG1fc291cmNlQ29kZS0+cHJvdmlkZXIoKSwgaW5mby5vcGVuUGFyZW5PZmZzZXQs
IGluZm8uY2xvc2VQYXJlbk9mZnNldCwgaW5mby5vcGVuUGFyZW5TdGFydExpbmUsIGluZm8ub3Bl
blBhcmVuU3RhcnRDb2x1bW4pOwogICAgICAgICBTb3VyY2VDb2RlIHNvdXJjZSA9IG1fc291cmNl
Q29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNl
T2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKTsKLSAgICAg
ICAgRnVuY0V4cHJOb2RlKiBmdW5jRXhwciA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0V4cHJO
b2RlKGxvY2F0aW9uLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgaW5mby5i
b2R5LCBzb3VyY2UsIGluZm8ucGFyYW1ldGVycyk7CisgICAgICAgIEZ1bmNFeHByTm9kZSogZnVu
Y0V4cHIgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgbV92bS0+
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGluZm8uYm9keSwgc291cmNlLCBpbmZvLnBh
cmFtZXRlcnMsIGluZm8uaGFzRGVmYXVsdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnNTb3VyY2UpOwog
ICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKm5hbWUsIGZ1
bmNFeHByLCB0eXBlLCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIHN1cGVyQmluZGluZyk7CiAgICAg
fQogICAgIApAQCAtMzI4LDkgKzMzNCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSBuYW1l
LCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGluZm8sIFN1cGVyQmluZGlu
ZyBzdXBlckJpbmRpbmcpCiAgICAgewogICAgICAgICBpbmZvLmJvZHktPnNldExvYyhpbmZvLmJv
ZHlTdGFydExpbmUsIGluZm8uYm9keUVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2Nh
dGlvbi5saW5lU3RhcnRPZmZzZXQpOworICAgICAgICBTb3VyY2VDb2RlIHBhcmFtZXRlcnNTb3Vy
Y2U7CisgICAgICAgIGlmIChpbmZvLmhhc0RlZmF1bHRQYXJhbWV0ZXJzKQorICAgICAgICAgICAg
cGFyYW1ldGVyc1NvdXJjZSA9IFNvdXJjZUNvZGUobV9zb3VyY2VDb2RlLT5wcm92aWRlcigpLCBp
bmZvLm9wZW5QYXJlbk9mZnNldCwgaW5mby5jbG9zZVBhcmVuT2Zmc2V0LCBpbmZvLm9wZW5QYXJl
blN0YXJ0TGluZSwgaW5mby5vcGVuUGFyZW5TdGFydENvbHVtbik7CiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50ID0gcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVy
aWNJZGVudGlmaWVyKHZtLCBuYW1lKTsKICAgICAgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtX3Nv
dXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VC
cmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbik7Ci0g
ICAgICAgIEZ1bmNFeHByTm9kZSogZnVuY0V4cHIgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNF
eHByTm9kZShsb2NhdGlvbiwgdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBpbmZv
LmJvZHksIHNvdXJjZSwgaW5mby5wYXJhbWV0ZXJzKTsKKyAgICAgICAgRnVuY0V4cHJOb2RlKiBm
dW5jRXhwciA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCB2bS0+
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGluZm8uYm9keSwgc291cmNlLCBpbmZvLnBh
cmFtZXRlcnMsIGluZm8uaGFzRGVmYXVsdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnNTb3VyY2UpOwog
ICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoaWRlbnQsIGZ1
bmNFeHByLCB0eXBlLCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIHN1cGVyQmluZGluZyk7CiAgICAg
fQogCkBAIC0zNjUsOCArMzc0LDExIEBAIHB1YmxpYzoKIAogICAgIFN0YXRlbWVudE5vZGUqIGNy
ZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbykKICAgICB7CisgICAgICAg
IFNvdXJjZUNvZGUgcGFyYW1ldGVyc1NvdXJjZTsKKyAgICAgICAgaWYgKGluZm8uaGFzRGVmYXVs
dFBhcmFtZXRlcnMpCisgICAgICAgICAgICBwYXJhbWV0ZXJzU291cmNlID0gU291cmNlQ29kZSht
X3NvdXJjZUNvZGUtPnByb3ZpZGVyKCksIGluZm8ub3BlblBhcmVuT2Zmc2V0LCBpbmZvLmNsb3Nl
UGFyZW5PZmZzZXQsIGluZm8ub3BlblBhcmVuU3RhcnRMaW5lLCBpbmZvLm9wZW5QYXJlblN0YXJ0
Q29sdW1uKTsKICAgICAgICAgRnVuY0RlY2xOb2RlKiBkZWNsID0gbmV3IChtX3BhcnNlckFyZW5h
KSBGdW5jRGVjbE5vZGUobG9jYXRpb24sICppbmZvLm5hbWUsIGluZm8uYm9keSwKLSAgICAgICAg
ICAgIG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5m
by5jbG9zZUJyYWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29s
dW1uKSwgaW5mby5wYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIG1fc291cmNlQ29kZS0+c3ViRXhw
cmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNlT2Zmc2V0LCBpbmZv
LmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5wYXJhbWV0ZXJzLCBp
bmZvLmhhc0RlZmF1bHRQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzU291cmNlKTsKICAgICAgICAgaWYg
KCppbmZvLm5hbWUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKQogICAgICAgICAg
ICAgdXNlc0FyZ3VtZW50cygpOwogICAgICAgICBtX3Njb3BlLm1fZnVuY0RlY2xhcmF0aW9ucy5h
cHBlbmQoZGVjbC0+Ym9keSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4
ZXIuY3BwCShyZXZpc2lvbiAxODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0xleGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYyLDggKzU2Miw4IEBAIHZvaWQgTGV4ZXI8
VD46OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYKICAgICBtX2xpbmVTdGFydCA9IG1fY29kZTsK
ICAgICBtX2xleEVycm9yTWVzc2FnZSA9IFN0cmluZygpOwogICAgIAotICAgIG1fYnVmZmVyOC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkpOwotICAgIG1f
YnVmZmVyMTYucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgobV9jb2RlRW5kIC0gbV9jb2RlKSAvIDIp
OworICAgIG1fYnVmZmVyOC5yZXNlcnZlQ2FwYWNpdHkoaW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0
eSk7CisgICAgbV9idWZmZXIxNi5yZXNlcnZlQ2FwYWNpdHkoKG1fY29kZUVuZCAtIG1fY29kZSkg
LyAyKTsKICAgICAKICAgICBpZiAoTElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCiAgICAgICAg
IG1fY3VycmVudCA9ICptX2NvZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTgyMDE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3MywxOCArNzczLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBU1NFUlQobC0+bV9w
YXR0ZXJuKTsKICAgICB9CiAKLSAgICBpbmxpbmUgRnVuY0V4cHJOb2RlOjpGdW5jRXhwck5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyYW1l
dGVyTm9kZSogcGFyYW1ldGVyKQorICAgIGlubGluZSBGdW5jRXhwck5vZGU6OkZ1bmNFeHByTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJh
bWV0ZXJOb2RlKiBwYXJhbWV0ZXIsIGJvb2wgaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcywgU291
cmNlQ29kZSYgcGFyYW1ldGVyc1NvdXJjZSkKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2Nh
dGlvbikKICAgICAgICAgLCBtX2JvZHkoYm9keSkKICAgICB7Ci0gICAgICAgIG1fYm9keS0+Zmlu
aXNoUGFyc2luZyhzb3VyY2UsIHBhcmFtZXRlciwgaWRlbnQsIEZ1bmN0aW9uRXhwcmVzc2lvbik7
CisgICAgICAgIG1fYm9keS0+ZmluaXNoUGFyc2luZyhzb3VyY2UsIHBhcmFtZXRlciwgaWRlbnQs
IEZ1bmN0aW9uRXhwcmVzc2lvbiwgaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcywgcGFyYW1ldGVy
c1NvdXJjZSk7CiAgICAgfQogCi0gICAgaW5saW5lIEZ1bmNEZWNsTm9kZTo6RnVuY0RlY2xOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFt
ZXRlck5vZGUqIHBhcmFtZXRlcikKKyAgICBpbmxpbmUgRnVuY0RlY2xOb2RlOjpGdW5jRGVjbE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFy
YW1ldGVyTm9kZSogcGFyYW1ldGVyLCBib29sIGhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMsIFNv
dXJjZUNvZGUmIHBhcmFtZXRlcnNTb3VyY2UpCiAgICAgICAgIDogU3RhdGVtZW50Tm9kZShsb2Nh
dGlvbikKICAgICAgICAgLCBtX2JvZHkoYm9keSkKICAgICB7Ci0gICAgICAgIG1fYm9keS0+Zmlu
aXNoUGFyc2luZyhzb3VyY2UsIHBhcmFtZXRlciwgaWRlbnQsIEZ1bmN0aW9uRGVjbGFyYXRpb24p
OworICAgICAgICBtX2JvZHktPmZpbmlzaFBhcnNpbmcoc291cmNlLCBwYXJhbWV0ZXIsIGlkZW50
LCBGdW5jdGlvbkRlY2xhcmF0aW9uLCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzLCBwYXJhbWV0
ZXJzU291cmNlKTsKICAgICB9CiAKICNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAxODIwMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5LDE5ICsxMzksMjMgQEAgRXZhbE5vZGU6OkV2YWxOb2RlKFBhcnNlckFyZW5hJiBwYXJz
ZXJBcgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25Cb2R5Tm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1QYXNzUmVmUHRyPEZ1bmN0aW9uUGFy
YW1ldGVycz4gRnVuY3Rpb25QYXJhbWV0ZXJzOjpjcmVhdGUoUGFyYW1ldGVyTm9kZSogZmlyc3RQ
YXJhbWV0ZXIpCitQYXNzUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gRnVuY3Rpb25QYXJhbWV0
ZXJzOjpjcmVhdGUoUGFyYW1ldGVyTm9kZSogZmlyc3RQYXJhbWV0ZXIsIGJvb2wgaGFzRGVmYXVs
dFBhcmFtZXRlclZhbHVlcywgU291cmNlQ29kZSYgc291cmNlKQogewogICAgIHVuc2lnbmVkIHBh
cmFtZXRlckNvdW50ID0gMDsKICAgICBmb3IgKFBhcmFtZXRlck5vZGUqIHBhcmFtZXRlciA9IGZp
cnN0UGFyYW1ldGVyOyBwYXJhbWV0ZXI7IHBhcmFtZXRlciA9IHBhcmFtZXRlci0+bmV4dFBhcmFt
KCkpCiAgICAgICAgICsrcGFyYW1ldGVyQ291bnQ7CiAKICAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9
IHNpemVvZihGdW5jdGlvblBhcmFtZXRlcnMpIC0gc2l6ZW9mKHZvaWQqKSArIHNpemVvZihEZWNv
bnN0cnVjdGlvblBhdHRlcm5Ob2RlKikgKiBwYXJhbWV0ZXJDb3VudDsKKyAgICBpZiAoaGFzRGVm
YXVsdFBhcmFtZXRlclZhbHVlcykKKyAgICAgICAgb2JqZWN0U2l6ZSArPSBzaXplb2YoRXhwcmVz
c2lvbk5vZGUqKSAqIHBhcmFtZXRlckNvdW50OwogICAgIHZvaWQqIHNsb3QgPSBmYXN0TWFsbG9j
KG9iamVjdFNpemUpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHNsb3QpIEZ1bmN0aW9uUGFy
YW1ldGVycyhmaXJzdFBhcmFtZXRlciwgcGFyYW1ldGVyQ291bnQpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IChzbG90KSBGdW5jdGlvblBhcmFtZXRlcnMoZmlyc3RQYXJhbWV0ZXIsIHBhcmFt
ZXRlckNvdW50LCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzLCBzb3VyY2UpKTsKIH0KIAotRnVu
Y3Rpb25QYXJhbWV0ZXJzOjpGdW5jdGlvblBhcmFtZXRlcnMoUGFyYW1ldGVyTm9kZSogZmlyc3RQ
YXJhbWV0ZXIsIHVuc2lnbmVkIHNpemUpCitGdW5jdGlvblBhcmFtZXRlcnM6OkZ1bmN0aW9uUGFy
YW1ldGVycyhQYXJhbWV0ZXJOb2RlKiBmaXJzdFBhcmFtZXRlciwgdW5zaWduZWQgc2l6ZSwgYm9v
bCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzLCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAgICAgOiBt
X3NpemUoc2l6ZSkKKyAgICAsIG1faGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcyhoYXNEZWZhdWx0
UGFyYW1ldGVyVmFsdWVzKQorICAgICwgbV9zb3VyY2Uoc291cmNlKQogewogICAgIHVuc2lnbmVk
IGkgPSAwOwogICAgIGZvciAoUGFyYW1ldGVyTm9kZSogcGFyYW1ldGVyID0gZmlyc3RQYXJhbWV0
ZXI7IHBhcmFtZXRlcjsgcGFyYW1ldGVyID0gcGFyYW1ldGVyLT5uZXh0UGFyYW0oKSkgewpAQCAt
MTY0LDcgKzE2OCw3IEBAIEZ1bmN0aW9uUGFyYW1ldGVyczo6RnVuY3Rpb25QYXJhbWV0ZXJzKFAK
IEZ1bmN0aW9uUGFyYW1ldGVyczo6fkZ1bmN0aW9uUGFyYW1ldGVycygpCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQotICAgICAgICBwYXR0ZXJucygpW2ldLT5k
ZXJlZigpOworICAgICAgICBzdGF0aWNfY2FzdDxEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKj4o
cGF0dGVybnMoKVtpXSktPmRlcmVmKCk7CiB9CiAKIEZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9u
Qm9keU5vZGUoCkBAIC0xODUsMTAgKzE4OSwxMCBAQCBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlv
bkJvZHlOb2RlKAogICAgIEFTU0VSVChtX2NvbnN0cnVjdG9yS2luZCA9PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oY29uc3RydWN0b3JLaW5kKSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6
ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIGZp
cnN0UGFyYW1ldGVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgZW51bSBGdW5jdGlvbk1vZGUg
ZnVuY3Rpb25Nb2RlKQordm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJzaW5nKGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyYW1ldGVyTm9kZSogZmlyc3RQYXJhbWV0ZXIsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBlbnVtIEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUsIGJvb2wg
aGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcywgU291cmNlQ29kZSYgcGFyYW1ldGVyc1NvdXJjZSkK
IHsKICAgICBtX3NvdXJjZSA9IHNvdXJjZTsKLSAgICBtX3BhcmFtZXRlcnMgPSBGdW5jdGlvblBh
cmFtZXRlcnM6OmNyZWF0ZShmaXJzdFBhcmFtZXRlcik7CisgICAgbV9wYXJhbWV0ZXJzID0gRnVu
Y3Rpb25QYXJhbWV0ZXJzOjpjcmVhdGUoZmlyc3RQYXJhbWV0ZXIsIGhhc0RlZmF1bHRQYXJhbWV0
ZXJWYWx1ZXMsIHBhcmFtZXRlcnNTb3VyY2UpOwogICAgIG1faWRlbnQgPSBpZGVudDsKICAgICBt
X2Z1bmN0aW9uTW9kZSA9IGZ1bmN0aW9uTW9kZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0MiwxOSArMTU0MiwzOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEZ1bmN0aW9uUGFyYW1ldGVycyk7CiAgICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvblBhcmFtZXRlcnM+IGNyZWF0ZShQYXJh
bWV0ZXJOb2RlKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVy
cz4gY3JlYXRlKFBhcmFtZXRlck5vZGUqLCBib29sIGhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMs
IFNvdXJjZUNvZGUmKTsKICAgICAgICAgfkZ1bmN0aW9uUGFyYW1ldGVycygpOwogCiAgICAgICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICAgICAgRGVjb25z
dHJ1Y3Rpb25QYXR0ZXJuTm9kZSogYXQodW5zaWduZWQgaW5kZXgpIHsgQVNTRVJUKGluZGV4IDwg
bV9zaXplKTsgcmV0dXJuIHBhdHRlcm5zKClbaW5kZXhdOyB9CisgICAgICAgIERlY29uc3RydWN0
aW9uUGF0dGVybk5vZGUqIGF0KHVuc2lnbmVkIGluZGV4KSAKKyAgICAgICAgeyAKKyAgICAgICAg
ICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSo+KHBhdHRlcm5zKClbaW5kZXhdKTsgCisgICAg
ICAgIH0KKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGRlZmF1bHRWYWx1ZUF0KHVuc2lnbmVkIGlu
ZGV4KSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIGlmICghbV9oYXNEZWZhdWx0UGFyYW1ldGVy
VmFsdWVzKSAKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsgCisgICAgICAgICAgICBB
U1NFUlQoaW5kZXggPCBtX3NpemUpOyAKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxF
eHByZXNzaW9uTm9kZSo+KHBhdHRlcm5zKClbbV9zaXplICsgaW5kZXhdKTsgCisgICAgICAgIH0K
KyAgICAgICAgdm9pZCBzZXREZWZhdWx0VmFsdWVBdCh1bnNpZ25lZCBpbmRleCwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIpIAorICAgICAgICB7IAorICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04obV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKTsKKyAgICAgICAgICAg
IHBhdHRlcm5zKClbbV9zaXplICsgaW5kZXhdID0gc3RhdGljX2Nhc3Q8dm9pZCo+KGV4cHIpOwor
ICAgICAgICB9CisgICAgICAgIGJvb2wgaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlczsgfQorICAgICAgICBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKFBhcmFtZXRlck5vZGUqLCB1bnNpZ25l
ZCBzaXplKTsKKyAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKFBhcmFtZXRlck5vZGUqLCB1bnNp
Z25lZCBzaXplLCBib29sIGhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMsIFNvdXJjZUNvZGUmKTsK
IAotICAgICAgICBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiogcGF0dGVybnMoKSB7IHJldHVy
biAmbV9zdG9yYWdlOyB9CisgICAgICAgIHZvaWQqKiBwYXR0ZXJucygpIHsgcmV0dXJuICZtX3N0
b3JhZ2U7IH0KIAogICAgICAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgICAgIERlY29uc3RydWN0
aW9uUGF0dGVybk5vZGUqIG1fc3RvcmFnZTsKKyAgICAgICAgYm9vbCBtX2hhc0RlZmF1bHRQYXJh
bWV0ZXJWYWx1ZXM7CisgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CisgICAgICAgIHZvaWQq
IG1fc3RvcmFnZTsKICAgICB9OwogCiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZSBmaW5hbCA6
IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgUGFyc2VyQXJlbmFEZWxldGFibGUgewpAQCAt
MTU3MSw3ICsxNTkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJp
ZGU7CiAKLSAgICAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJh
bWV0ZXJOb2RlKiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uTW9kZSk7CisgICAgICAgIHZv
aWQgZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiwgUGFyYW1ldGVyTm9kZSosIGNvbnN0
IElkZW50aWZpZXImLCBGdW5jdGlvbk1vZGUsIGJvb2wgaGFzRGVmYXVsdFBhcmFtZXRlcnMsIFNv
dXJjZUNvZGUmIHBhcmFtZXRlcnNTb3VyY2UpOwogICAgICAgICAKICAgICAgICAgdm9pZCBvdmVy
cmlkZU5hbWUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIHsgbV9pZGVudCA9IGlkZW50OyB9CiAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50KCkgeyByZXR1cm4gbV9pZGVudDsgfQpAQCAt
MTYzOSw3ICsxNjU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jRXhwck5v
ZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY0V4
cHJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlv
bkJvZHlOb2RlKiwgY29uc3QgU291cmNlQ29kZSYsIFBhcmFtZXRlck5vZGUqID0gMCk7CisgICAg
ICAgIEZ1bmNFeHByTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVy
JiwgRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJhbWV0ZXJOb2RlKiwg
Ym9vbCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzLCBTb3VyY2VDb2RlJiBwYXJhbWV0ZXJzU291
cmNlKTsKIAogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5KCkgeyByZXR1cm4gbV9ib2R5
OyB9CiAKQEAgLTE3NzMsNyArMTc5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
RnVuY0RlY2xOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRnVuY0RlY2xOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIm
LCBGdW5jdGlvbkJvZHlOb2RlKiwgY29uc3QgU291cmNlQ29kZSYsIFBhcmFtZXRlck5vZGUqID0g
MCk7CisgICAgICAgIEZ1bmNEZWNsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJ
ZGVudGlmaWVyJiwgRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJhbWV0
ZXJOb2RlKiwgYm9vbCBoYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzLCBTb3VyY2VDb2RlJiBwYXJh
bWV0ZXJzU291cmNlKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jRGVjbE5vZGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUq
IGJvZHkoKSB7IHJldHVybiBtX2JvZHk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAJKHJldmlzaW9uIDE4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEyICsxOTYsMTAgQEAg
UGFyc2VyPExleGVyVHlwZT46OlBhcnNlcigKICAgICBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0
TW9kZSwgSlNQYXJzZXJDb2RlVHlwZSBjb2RlVHlwZSwgCiAgICAgQ29uc3RydWN0b3JLaW5kIGRl
ZmF1bHRDb25zdHJ1Y3RvcktpbmQpCiAgICAgOiBtX3ZtKHZtKQotICAgICwgbV9zb3VyY2UoJnNv
dXJjZSkKICAgICAsIG1faGFzU3RhY2tPdmVyZmxvdyhmYWxzZSkKICAgICAsIG1fYWxsb3dzSW4o
dHJ1ZSkKICAgICAsIG1fYXNzaWdubWVudENvdW50KDApCiAgICAgLCBtX25vbkxIU0NvdW50KDAp
Ci0gICAgLCBtX3N5bnRheEFscmVhZHlWYWxpZGF0ZWQoc291cmNlLnByb3ZpZGVyKCktPmlzVmFs
aWQoKSkKICAgICAsIG1fc3RhdGVtZW50RGVwdGgoMCkKICAgICAsIG1fbm9uVHJpdmlhbEV4cHJl
c3Npb25Db3VudCgwKQogICAgICwgbV9sYXN0SWRlbnRpZmllcigwKQpAQCAtMjExLDEyICsyMDks
NyBAQCBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKAogICAgICwgbV9kZWZhdWx0Q29uc3RydWN0
b3JLaW5kKGRlZmF1bHRDb25zdHJ1Y3RvcktpbmQpCiB7CiAgICAgbV9sZXhlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8TGV4ZXJUeXBlPih2bSwgYnVpbHRpbk1vZGUpOwotICAgIG1fbGV4ZXItPnNldENv
ZGUoc291cmNlLCAmbV9wYXJzZXJBcmVuYSk7Ci0gICAgbV90b2tlbi5tX2xvY2F0aW9uLmxpbmUg
PSBzb3VyY2UuZmlyc3RMaW5lKCk7Ci0gICAgbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0
ID0gc291cmNlLnN0YXJ0T2Zmc2V0KCk7Ci0gICAgbV90b2tlbi5tX2xvY2F0aW9uLmVuZE9mZnNl
dCA9IHNvdXJjZS5zdGFydE9mZnNldCgpOwotICAgIG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3Rh
cnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsKLSAgICBtX2Z1bmN0aW9uQ2FjaGUgPSB2
bS0+YWRkU291cmNlUHJvdmlkZXJDYWNoZShzb3VyY2UucHJvdmlkZXIoKSk7CisgICAgc2V0U291
cmNlQ29kZShzb3VyY2UpOwogICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKCk7CiAgICAg
aWYgKGNvZGVUeXBlID09IEpTUGFyc2VyQ29kZVR5cGU6OkZ1bmN0aW9uKQogICAgICAgICBzY29w
ZS0+c2V0SXNGdW5jdGlvbigpOwpAQCAtMjQxLDcgKzIzNCw4IEBAIFBhcnNlcjxMZXhlclR5cGU+
OjpQYXJzZXIoCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLT5jb2xsZWN0Qm91bmRJZGVudGlm
aWVycyhib3VuZFBhcmFtZXRlck5hbWVzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZv
ciAoYXV0byYgYm91bmRQYXJhbWV0ZXJOYW1lIDogYm91bmRQYXJhbWV0ZXJOYW1lcykKLSAgICAg
ICAgICAgICAgICBzY29wZS0+ZGVjbGFyZVZhcmlhYmxlKCZib3VuZFBhcmFtZXRlck5hbWUpOwor
ICAgICAgICAgICAgICAgIHNjb3BlLT5kZWNsYXJlQm91bmRQYXJhbWV0ZXIoJmJvdW5kUGFyYW1l
dGVyTmFtZSk7CisgICAgICAgICAgICAgICAgLy9zY29wZS0+ZGVjbGFyZVZhcmlhYmxlKCZib3Vu
ZFBhcmFtZXRlck5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghbmFtZS5pc051bGwo
KSkKQEAgLTI1NSw2ICsyNDksMTkgQEAgUGFyc2VyPExleGVyVHlwZT46On5QYXJzZXIoKQogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgordm9pZCBQYXJzZXI8TGV4ZXJUeXBlPjo6
c2V0U291cmNlQ29kZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCit7CisgICAgbV9zb3VyY2Ug
PSAmc291cmNlOworICAgIG1fc3ludGF4QWxyZWFkeVZhbGlkYXRlZCA9IHNvdXJjZS5wcm92aWRl
cigpLT5pc1ZhbGlkKCk7CisgICAgbV9sZXhlci0+c2V0Q29kZShzb3VyY2UsICZtX3BhcnNlckFy
ZW5hKTsKKyAgICBtX3Rva2VuLm1fbG9jYXRpb24ubGluZSA9IHNvdXJjZS5maXJzdExpbmUoKTsK
KyAgICBtX3Rva2VuLm1fbG9jYXRpb24uc3RhcnRPZmZzZXQgPSBzb3VyY2Uuc3RhcnRPZmZzZXQo
KTsKKyAgICBtX3Rva2VuLm1fbG9jYXRpb24uZW5kT2Zmc2V0ID0gc291cmNlLnN0YXJ0T2Zmc2V0
KCk7CisgICAgbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFydE9mZnNldCA9IHNvdXJjZS5zdGFy
dE9mZnNldCgpOworICAgIG1fZnVuY3Rpb25DYWNoZSA9IG1fdm0tPmFkZFNvdXJjZVByb3ZpZGVy
Q2FjaGUoc291cmNlLnByb3ZpZGVyKCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJU
eXBlPgogU3RyaW5nIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKCkKIHsKICAgICBTdHJp
bmcgcGFyc2VFcnJvciA9IFN0cmluZygpOwpAQCAtMTI0NSwyMSArMTI1Miw4MSBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGb3JtYWxQYXJh
bWV0ZXJMaXN0IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1
aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGb3JtYWxQ
YXJhbWV0ZXJMaXN0IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJl
ZUJ1aWxkZXImIGNvbnRleHQsIGJvb2wmIGhhc0RlZmF1bHRQYXJhbWV0ZXJzKQogewogICAgIGF1
dG8gcGFyYW1ldGVyID0gcGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4oY29udGV4dCwgRGVjb25z
dHJ1Y3RUb1BhcmFtZXRlcnMpOwogICAgIGZhaWxJZkZhbHNlKHBhcmFtZXRlciwgIkNhbm5vdCBw
YXJzZSBwYXJhbWV0ZXIgcGF0dGVybiIpOworICAgIC8vIFdlIGRvbid0IHNhdmUgZGVmYXVsdCBw
YXJhbWV0ZXJzIGFzIHBhcnQgb2YgdGhlIGN1cnJlbnQgcGFyc2VyIGFyZW5hIGJlY2F1c2UKKyAg
ICAvLyB3ZSBuZWVkIGRlZmF1bHQgcGFyYW1ldGVyIGV4cHJlc3Npb25zIGFzIHBhcnQgb2YgdGhl
IGZ1bmN0aW9uJ3MgcGFyc2VyIGFyZW5hLCAKKyAgICAvLyBub3QgYXMgcGFydCBvZiB0aGUgZW5j
bG9zaW5nIHNjb3BlIG9mIHRoZSBmdW5jdGlvbidzIHBhcnNlciBhcmVuYS4gV2UganVzdCBtYWtl
IAorICAgIC8vIHN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHN5bnRheCBlcnJvcnMgaW5zaWRl
IHRoaXMgZnVuY3Rpb24uCisgICAgaWYgKG1hdGNoKEVRVUFMKSkgeworICAgICAgICBuZXh0KCk7
CisgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCks
ICJFeHBlY3RpbmcgZXhwcmVzc2lvbiBhZnRlciAnPScgaW5zaWRlIGEgZnVuY3Rpb24gcGFyYW1l
dGVyIik7CisgICAgICAgIGhhc0RlZmF1bHRQYXJhbWV0ZXJzID0gdHJ1ZTsKKyAgICB9CiAgICAg
VHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgbGlzdCA9IGNvbnRleHQuY3JlYXRlRm9ybWFsUGFyYW1l
dGVyTGlzdChwYXJhbWV0ZXIpOwogICAgIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHRhaWwgPSBs
aXN0OwogICAgIHdoaWxlIChjb25zdW1lKENPTU1BKSkgewogICAgICAgICBwYXJhbWV0ZXIgPSBw
YXJzZURlY29uc3RydWN0aW9uUGF0dGVybihjb250ZXh0LCBEZWNvbnN0cnVjdFRvUGFyYW1ldGVy
cyk7CiAgICAgICAgIGZhaWxJZkZhbHNlKHBhcmFtZXRlciwgIkNhbm5vdCBwYXJzZSBwYXJhbWV0
ZXIgcGF0dGVybiIpOworICAgICAgICBpZiAobWF0Y2goRVFVQUwpKSB7CisgICAgICAgICAgICBu
ZXh0KCk7CisgICAgICAgICAgICBmYWlsSWZGYWxzZShwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KGNvbnRleHQpLCAiRXhwZWN0aW5nIGV4cHJlc3Npb24gYWZ0ZXIgJz0nIGluc2lkZSBhIGZ1bmN0
aW9uIHBhcmFtZXRlciIpOworICAgICAgICAgICAgaGFzRGVmYXVsdFBhcmFtZXRlcnMgPSB0cnVl
OworICAgICAgICB9CiAgICAgICAgIHRhaWwgPSBjb250ZXh0LmNyZWF0ZUZvcm1hbFBhcmFtZXRl
ckxpc3QodGFpbCwgcGFyYW1ldGVyKTsKICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Cit2b2lkIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBj
b25zdCBTb3VyY2VDb2RlJiBib2R5U291cmNlKQoreworI2RlZmluZSByZXR1cm5JZlN0YWNrT3Zl
cmZsb3coKSBkbyB7IGlmIChtX2hhc1N0YWNrT3ZlcmZsb3cpIHJldHVybjsgfSB3aGlsZSAoMCkK
KyAgICBpZiAoIWNhblJlY3Vyc2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQg
aSA9IDA7CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGNvbnN1bWUoT1BFTlBBUkVO
KSwgIkludGVybmFsIHBhcnNpbmcgZXJyb3IuIFJlcGFyc2luZyBvZiB0aGUgc2FtZSBjb2RlIHBy
b2R1Y2VkIGRpZmZlcmVudCByZXN1bHRzLiIpOworICAgIGlmICghbWF0Y2goQ0xPU0VQQVJFTikp
IHsgLy8gRklYTUU6IERvbid0IHRoaW5rIHRoaXMgc2hvdWxkIGV2ZXIgaGFwcGVuLgorICAgICAg
ICBBU1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBtX3BhcnNlckFyZW5h
LCBjb25zdF9jYXN0PFNvdXJjZUNvZGUqPihtX3NvdXJjZSkpOworCisgICAgICAgIGF1dG8gcGFy
YW1ldGVyID0gcGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4oY29udGV4dCwgRGVjb25zdHJ1Y3RU
b1BhcmFtZXRlcnMpOworICAgICAgICByZXR1cm5JZlN0YWNrT3ZlcmZsb3coKTsKKyAgICAgICAg
QVNTRVJUKHBhcmFtZXRlcik7CisgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBkZWZhdWx0SW5pdGlh
bGl6ZXIgPSAwOworICAgICAgICBpZiAobWF0Y2goRVFVQUwpKSB7CisgICAgICAgICAgICBuZXh0
KCk7CisgICAgICAgICAgICBkZWZhdWx0SW5pdGlhbGl6ZXIgPSBwYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKGNvbnRleHQpOworICAgICAgICAgICAgcmV0dXJuSWZTdGFja092ZXJmbG93KCk7Cisg
ICAgICAgICAgICBBU1NFUlQoZGVmYXVsdEluaXRpYWxpemVyKTsKKyAgICAgICAgfQorICAgICAg
ICBwYXJhbWV0ZXJzLT5zZXREZWZhdWx0VmFsdWVBdChpKyssIGRlZmF1bHRJbml0aWFsaXplcik7
CisKKyAgICAgICAgd2hpbGUgKGNvbnN1bWUoQ09NTUEpKSB7CisgICAgICAgICAgICBwYXJhbWV0
ZXIgPSBwYXJzZURlY29uc3RydWN0aW9uUGF0dGVybihjb250ZXh0LCBEZWNvbnN0cnVjdFRvUGFy
YW1ldGVycyk7CisgICAgICAgICAgICByZXR1cm5JZlN0YWNrT3ZlcmZsb3coKTsKKyAgICAgICAg
ICAgIEFTU0VSVChwYXJhbWV0ZXIpOworICAgICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGRlZmF1
bHRJbml0aWFsaXplciA9IDA7CisgICAgICAgICAgICBpZiAobWF0Y2goRVFVQUwpKSB7CisgICAg
ICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIGRlZmF1bHRJbml0aWFsaXplciA9
IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuSWZTdGFja092ZXJmbG93KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGRlZmF1bHRJbml0
aWFsaXplcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXREZWZh
dWx0VmFsdWVBdChpKyssIGRlZmF1bHRJbml0aWFsaXplcik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoY29uc3VtZShDTE9TRVBBUkVOKSwgICJJ
bnRlcm5hbCBwYXJzaW5nIGVycm9yLiBSZXBhcnNpbmcgb2YgdGhlIHNhbWUgY29kZSBwcm9kdWNl
ZCBkaWZmZXJlbnQgcmVzdWx0cy4iKTsKKworICAgIHNldFNvdXJjZUNvZGUoYm9keVNvdXJjZSk7
CisgICAgbmV4dCgpOworI3VuZGVmIHJldHVybklmU3RhY2tPdmVyZmxvdworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm9keSgKICAgICBU
cmVlQnVpbGRlciYgY29udGV4dCwgaW50IGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBpbnQgZnVuY3Rp
b25OYW1lU3RhcnQsIAogICAgIGludCBwYXJhbWV0ZXJzU3RhcnQsIENvbnN0cnVjdG9yS2luZCBj
b25zdHJ1Y3RvcktpbmQpCkBAIC0xMzE5LDI1ICsxMzg2LDMxIEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICBpbnQgcGFyYW1ldGVyc1N0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0Owor
ICAgIGluZm8ub3BlblBhcmVuT2Zmc2V0ID0gbV9sZXhlci0+Y3VycmVudE9mZnNldCgpIC0gMTsK
KyAgICBpbmZvLm9wZW5QYXJlblN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworICAgIGluZm8ub3Bl
blBhcmVuU3RhcnRDb2x1bW4gPSBtX3Rva2VuLm1fZGF0YS5vZmZzZXQgLSBtX3Rva2VuLm1fZGF0
YS5saW5lU3RhcnRPZmZzZXQ7CiAgICAgaWYgKCFjb25zdW1lKE9QRU5QQVJFTikpIHsKICAgICAg
ICAgc2VtYW50aWNGYWlsdXJlRHVlVG9LZXl3b3JkKHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShtb2Rl
KSwgIiBuYW1lIik7CiAgICAgICAgIGZhaWxXaXRoTWVzc2FnZSgiRXhwZWN0ZWQgYW4gb3Blbmlu
ZyAnKCcgYmVmb3JlIGEgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpLCAiJ3MgcGFyYW1l
dGVyIGxpc3QiKTsKICAgICB9CiAKLSAgICBpZiAobW9kZSA9PSBHZXR0ZXJNb2RlKQorICAgIGlm
IChtb2RlID09IEdldHRlck1vZGUpIHsKKyAgICAgICAgaW5mby5jbG9zZVBhcmVuT2Zmc2V0ID0g
bV9sZXhlci0+Y3VycmVudE9mZnNldCgpOwogICAgICAgICBjb25zdW1lT3JGYWlsKENMT1NFUEFS
RU4sICJnZXR0ZXIgZnVuY3Rpb25zIG11c3QgaGF2ZSBubyBwYXJhbWV0ZXJzIik7Ci0gICAgZWxz
ZSBpZiAobW9kZSA9PSBTZXR0ZXJNb2RlKSB7CisgICAgfSBlbHNlIGlmIChtb2RlID09IFNldHRl
ck1vZGUpIHsKICAgICAgICAgZmFpbElmVHJ1ZShtYXRjaChDTE9TRVBBUkVOKSwgInNldHRlciBm
dW5jdGlvbnMgbXVzdCBoYXZlIG9uZSBwYXJhbWV0ZXIiKTsKICAgICAgICAgYXV0byBwYXJhbWV0
ZXIgPSBwYXJzZURlY29uc3RydWN0aW9uUGF0dGVybihjb250ZXh0LCBEZWNvbnN0cnVjdFRvUGFy
YW1ldGVycyk7CiAgICAgICAgIGZhaWxJZkZhbHNlKHBhcmFtZXRlciwgInNldHRlciBmdW5jdGlv
bnMgbXVzdCBoYXZlIG9uZSBwYXJhbWV0ZXIiKTsKICAgICAgICAgaW5mby5wYXJhbWV0ZXJzID0g
Y29udGV4dC5jcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KHBhcmFtZXRlcik7CiAgICAgICAgIGZh
aWxJZlRydWUobWF0Y2goQ09NTUEpLCAic2V0dGVyIGZ1bmN0aW9ucyBtdXN0IGhhdmUgb25lIHBh
cmFtZXRlciIpOworICAgICAgICBpbmZvLmNsb3NlUGFyZW5PZmZzZXQgPSBtX2xleGVyLT5jdXJy
ZW50T2Zmc2V0KCk7CiAgICAgICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTiwgIkV4cGVjdGVk
IGEgJyknIGFmdGVyIGEgcGFyYW1ldGVyIGRlY2xhcmF0aW9uIik7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKCFtYXRjaChDTE9TRVBBUkVOKSkgewotICAgICAgICAgICAgaW5mby5wYXJhbWV0
ZXJzID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGNvbnRleHQpOworICAgICAgICAgICAgaW5mby5w
YXJhbWV0ZXJzID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGNvbnRleHQsIGluZm8uaGFzRGVmYXVs
dFBhcmFtZXRlcnMpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UoaW5mby5wYXJhbWV0ZXJzLCAi
Q2Fubm90IHBhcnNlIHBhcmFtZXRlcnMgZm9yIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2Rl
KG1vZGUpKTsKICAgICAgICAgfQorICAgICAgICBpbmZvLmNsb3NlUGFyZW5PZmZzZXQgPSBtX2xl
eGVyLT5jdXJyZW50T2Zmc2V0KCk7CiAgICAgICAgIGNvbnN1bWVPckZhaWwoQ0xPU0VQQVJFTiwg
IkV4cGVjdGVkIGEgJyknIG9yIGEgJywnIGFmdGVyIGEgcGFyYW1ldGVyIGRlY2xhcmF0aW9uIik7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlz
aW9uIDE4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgdGVtcGxhdGUgPD4gc3RydWN0IFZlY3RvclRy
YWl0czxKU0M6OlNjbwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQVNUQnVpbGRlcjsKIGNs
YXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7CiBjbGFzcyBGdW5jdGlvblBh
cmFtZXRlcnM7CkBAIC00MzQsNiArNDM1LDcgQEAgcHVibGljOgogCiAgICAgdGVtcGxhdGUgPGNs
YXNzIFBhcnNlZE5vZGU+CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHBhcnNlKFBh
cnNlckVycm9yJik7CisgICAgdm9pZCBwYXJzZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoRnVuY3Rp
b25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYpOwogCiAgICAgSlNUZXh0UG9zaXRpb24g
cG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGV4ZXItPnBvc2l0
aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsgfQogICAgIFZlY3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4+
JiYgY2xvc2VkVmFyaWFibGVzKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fY2xvc2VkVmFyaWFibGVz
KTsgfQpAQCAtNTYxLDYgKzU2Myw3IEBAIHByaXZhdGU6CiAKICAgICBQYXJzZXIoKTsKICAgICBT
dHJpbmcgcGFyc2VJbm5lcigpOworICAgIHZvaWQgc2V0U291cmNlQ29kZShjb25zdCBTb3VyY2VD
b2RlJik7CiAKICAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqLCBEZWNs
YXJhdGlvblN0YWNrczo6VmFyU3RhY2smLCAKICAgICAgICAgRGVjbGFyYXRpb25TdGFja3M6OkZ1
bmN0aW9uU3RhY2smLCBDb2RlRmVhdHVyZXMsIGludCwgSWRlbnRpZmllclNldCYsIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4+JiYpOwpAQCAtNzYzLDcgKzc2Niw3IEBAIHByaXZhdGU6
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVBy
b3BlcnR5TWV0aG9kKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiBtZXRo
b2ROYW1lKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBw
YXJzZUdldHRlclNldHRlcihUcmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0LCBQcm9wZXJ0eU5vZGU6
OlR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQsIENvbnN0cnVjdG9yS2lu
ZCA9IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nID0gU3VwZXJCaW5kaW5nOjpO
b3ROZWVkZWQpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElO
RSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiwgaW50IGZ1
bmN0aW9uS2V5d29yZFN0YXJ0LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQsIGludCBwYXJhbWV0ZXJz
U3RhcnQsIENvbnN0cnVjdG9yS2luZCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBBTFdBWVNfSU5MSU5FIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcnNlRm9ybWFsUGFyYW1l
dGVycyhUcmVlQnVpbGRlciYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxX
QVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJzZUZvcm1hbFBhcmFtZXRlcnMo
VHJlZUJ1aWxkZXImLCBib29sJiBoYXNEZWZhdWx0UGFyYW1ldGVycyk7CiAgICAgZW51bSBWYXJE
ZWNsYXJhdGlvbkxpc3RDb250ZXh0IHsgRm9yTG9vcENvbnRleHQsIFZhckRlY2xhcmF0aW9uQ29u
dGV4dCB9OwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24g
cGFyc2VWYXJEZWNsYXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImLCBpbnQmIGRlY2xhcmF0aW9ucywg
VHJlZURlY29uc3RydWN0aW9uUGF0dGVybiYgbGFzdFBhdHRlcm4sIFRyZWVFeHByZXNzaW9uJiBs
YXN0SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVudFN0YXJ0LCBKU1RleHRQb3NpdGlv
biYgaW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVuZCwgVmFyRGVjbGFyYXRpb25MaXN0
Q29udGV4dCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUg
VHJlZUNvbnN0RGVjbExpc3QgcGFyc2VDb25zdERlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYp
OwpAQCAtOTg2LDE1ICs5ODksMjEgQEAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+CiBzdGQ6
OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAgICAgVk0qIHZtLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywKICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlLAotICAgIEpT
UGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlLCBKU1BhcnNlckNvZGVUeXBlIGNvZGVUeXBlLAot
ICAgIFBhcnNlckVycm9yJiBlcnJvciwgSlNUZXh0UG9zaXRpb24qIHBvc2l0aW9uQmVmb3JlTGFz
dE5ld2xpbmUgPSAwLAotICAgIENvbnN0cnVjdG9yS2luZCBkZWZhdWx0Q29uc3RydWN0b3JLaW5k
ID0gQ29uc3RydWN0b3JLaW5kOjpOb25lKQorICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RN
b2RlLCBKU1BhcnNlckNvZGVUeXBlIGNvZGVUeXBlLCBQYXJzZXJFcnJvciYgZXJyb3IsIAorICAg
IEpTVGV4dFBvc2l0aW9uKiBwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gMCwgQ29uc3RydWN0
b3JLaW5kIGRlZmF1bHRDb25zdHJ1Y3RvcktpbmQgPSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsCisg
ICAgU291cmNlQ29kZSBwYXJhbWV0ZXJzU291cmNlID0gU291cmNlQ29kZSgpLCBib29sIGhhc0Rl
ZmF1bHRQYXJhbWV0ZXJzID0gZmFsc2UpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdS
ZWdpb24oIlBhcnNpbmciKTsKIAogICAgIEFTU0VSVCghc291cmNlLnByb3ZpZGVyKCktPnNvdXJj
ZSgpLmlzTnVsbCgpKTsKKyAgICBib29sIHdpbGxQYXJzZURlZmF1bHRQYXJhbWV0ZXJzID0gcGFy
YW1ldGVycyAmJiBoYXNEZWZhdWx0UGFyYW1ldGVyczsKICAgICBpZiAoc291cmNlLnByb3ZpZGVy
KCktPnNvdXJjZSgpLmlzOEJpdCgpKSB7Ci0gICAgICAgIFBhcnNlcjxMZXhlcjxMQ2hhcj4+IHBh
cnNlcih2bSwgc291cmNlLCBwYXJhbWV0ZXJzLCBuYW1lLCBidWlsdGluTW9kZSwgc3RyaWN0TW9k
ZSwgY29kZVR5cGUsIGRlZmF1bHRDb25zdHJ1Y3RvcktpbmQpOworICAgICAgICBQYXJzZXI8TGV4
ZXI8TENoYXI+PiBwYXJzZXIodm0sIHdpbGxQYXJzZURlZmF1bHRQYXJhbWV0ZXJzID8gcGFyYW1l
dGVyc1NvdXJjZSA6IHNvdXJjZSwgd2lsbFBhcnNlRGVmYXVsdFBhcmFtZXRlcnMgPyAwIDogcGFy
YW1ldGVycywgbmFtZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIGNvZGVUeXBlLCBkZWZhdWx0
Q29uc3RydWN0b3JLaW5kKTsKKyAgICAgICAgaWYgKHdpbGxQYXJzZURlZmF1bHRQYXJhbWV0ZXJz
KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzb3VyY2UucHJvdmlkZXIoKS0+c291cmNl
KCkuaXM4Qml0KCkgPT0gcGFyYW1ldGVyc1NvdXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pczhC
aXQoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoY29kZVR5cGUg
PT0gSlNQYXJzZXJDb2RlVHlwZTo6RnVuY3Rpb24sICJmdW5jdGlvbnMgYXJlIHRoZSBvbmx5IEFT
VCBub2RlcyB3aXRoIGZ1bmN0aW9uIHBhcmFtZXRlcnMuIik7CisgICAgICAgICAgICBwYXJzZXIu
cGFyc2VEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKHBhcmFtZXRlcnMsIHNvdXJjZSk7CisgICAgICAg
IH0KICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHJlc3VsdCA9IHBhcnNlci5w
YXJzZTxQYXJzZWROb2RlPihlcnJvcik7CiAgICAgICAgIGlmIChwb3NpdGlvbkJlZm9yZUxhc3RO
ZXdsaW5lKQogICAgICAgICAgICAgKnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBwYXJzZXIu
cG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSgpOwpAQCAtMTAwNiw3ICsxMDE1LDEyIEBAIHN0ZDo6
dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJzZSgKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KLSAgICBQYXJzZXI8TGV4ZXI8VUNoYXI+PiBwYXJzZXIodm0sIHNvdXJj
ZSwgcGFyYW1ldGVycywgbmFtZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIGNvZGVUeXBlKTsK
KyAgICBQYXJzZXI8TGV4ZXI8VUNoYXI+PiBwYXJzZXIodm0sIHdpbGxQYXJzZURlZmF1bHRQYXJh
bWV0ZXJzID8gcGFyYW1ldGVyc1NvdXJjZSA6IHNvdXJjZSwgd2lsbFBhcnNlRGVmYXVsdFBhcmFt
ZXRlcnMgPyAwIDogcGFyYW1ldGVycywgbmFtZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIGNv
ZGVUeXBlKTsKKyAgICBpZiAod2lsbFBhcnNlRGVmYXVsdFBhcmFtZXRlcnMpIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzOEJpdCgpID09IHBh
cmFtZXRlcnNTb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXM4Qml0KCkpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoY29kZVR5cGUgPT0gSlNQYXJzZXJDb2RlVHlwZTo6
RnVuY3Rpb24sICJmdW5jdGlvbnMgYXJlIHRoZSBvbmx5IEFTVCBub2RlcyB3aXRoIGZ1bmN0aW9u
IHBhcmFtZXRlcnMuIik7CisgICAgICAgIHBhcnNlci5wYXJzZURlZmF1bHRQYXJhbWV0ZXJWYWx1
ZXMocGFyYW1ldGVycywgc291cmNlKTsKKyAgICB9CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBhcnNl
ZE5vZGU+IHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvcik7CiAgICAgaWYg
KHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUpCiAgICAgICAgICpwb3NpdGlvbkJlZm9yZUxhc3RO
ZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyRnVuY3Rpb25JbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJGdW5jdGlvbkluZm8uaAkocmV2
aXNpb24gMTgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJGdW5j
dGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTEgQEAgc3RydWN0IFBhcnNl
ckZ1bmN0aW9uSW5mbyB7CiAgICAgaW50IGJvZHlTdGFydExpbmUgPSAwOwogICAgIGludCBib2R5
RW5kTGluZSA9IDA7CiAgICAgdW5zaWduZWQgYm9keVN0YXJ0Q29sdW1uID0gMDsKKyAgICB1bnNp
Z25lZCBvcGVuUGFyZW5PZmZzZXQgPSAwOworICAgIGJvb2wgaGFzRGVmYXVsdFBhcmFtZXRlcnMg
PSBmYWxzZTsKKyAgICB1bnNpZ25lZCBjbG9zZVBhcmVuT2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25l
ZCBvcGVuUGFyZW5TdGFydExpbmUgPSAwOworICAgIHVuc2lnbmVkIG9wZW5QYXJlblN0YXJ0Q29s
dW1uID0gMDsKIH07CiAKICNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVmYXVsdC1wYXJhbWV0ZXJzLXRlc3RzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVmYXVs
dC1wYXJhbWV0ZXJzLXRlc3RzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9kZWZhdWx0LXBhcmFtZXRlcnMtdGVzdHMuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNjYgQEAKK2Z1bmN0aW9uIGFzc2VydChjb25kLCBtc2cgPSAiIikgewor
ICAgIGlmICghY29uZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZFRocm93KGZ1bmMpIHsKKyAgICB2YXIgaGFkRXJyb3IgPSBmYWxzZTsKKyAgICB0
cnkgeworICAgICAgICBmdW5jKCkKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGhhZEVycm9y
ID0gdHJ1ZTsKKyAgICB9CisgICAgYXNzZXJ0KGhhZEVycm9yLCAiRGlkIG5vdCB0aHJvdyIpOwor
fQorCitmdW5jdGlvbiBzaG91bGRUaHJvd0V2YWwoc3RyKSB7CisgICAgdmFyIGhhZEVycm9yID0g
ZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgZXZhbChzdHIpOworICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgaGFkRXJyb3IgPSB0cnVlOworICAgIH0KKyAgICBhc3NlcnQoaGFkRXJyb3IsICJE
aWQgbm90IHRocm93Iik7Cit9CisKK2Z1bmN0aW9uIGJhc2ljKHgsIHk9eCkgeworICAgIGFzc2Vy
dCh5ID09PSB4LCAiYmFzaWNzIGRvbid0IHdvcmsuIikKK30KK2Jhc2ljKDIwKTsKK2Jhc2ljKCJo
ZWxsbyIpOworYmFzaWMoe2ZvbzogMjB9KTsKK2Jhc2ljKHVuZGVmaW5lZCk7CisKKy8vIEZJWE1F
OiBzaG91bGQgdGhyb3cuCisvL2Z1bmN0aW9uIGJhc2ljRXJyb3IoeCA9IHksIHkpIHsgfQorLy9z
aG91bGRUaHJvdyhiYXNpY0Vycm9yKQorLy8KKy8vZnVuY3Rpb24gYmFzaWNFcnJvcjIoeCA9IHgp
IHsgfQorLy9zaG91bGRUaHJvdyhiYXNpY0Vycm9yMikKKworOyhmdW5jdGlvbigpeworICAgIHZh
ciBzY29wZVZhcmlhYmxlID0ge2hlbGxvOiAid29ybGQifTsKKyAgICBmdW5jdGlvbiBiYXNpY1Nj
b3BlKHggPSBzY29wZVZhcmlhYmxlKSB7CisgICAgICAgIGFzc2VydCh4ID09PSBzY29wZVZhcmlh
YmxlKTsKKyAgICB9CisgICAgYmFzaWNTY29wZSgpOworfSkoKTsKKworZnVuY3Rpb24gYmFzaWNG
dW5jdGlvbkNhcHR1cmVJbkRlZmF1bHQodGhlQXJnID0gMjAsIHkgPSBmdW5jdGlvbigpIHtyZXR1
cm4gdGhlQXJnfSkgeworICAgIGFzc2VydCh0aGVBcmcgPT09IHkoKSwgInkgc2hvdWxkIHJldHVy
biB4LiIpOworICAgIHRoZUFyZyA9IHt9OworICAgIGFzc2VydCh0aGVBcmcgPT09IHkoKSwgInkg
c2hvdWxkIHJldHVybiB4LiIpOworfQorYmFzaWNGdW5jdGlvbkNhcHR1cmVJbkRlZmF1bHQoKQor
YmFzaWNGdW5jdGlvbkNhcHR1cmVJbkRlZmF1bHQodW5kZWZpbmVkKQorCitmdW5jdGlvbiBiYXNp
Y0NhcHR1cmVkKHggPSAyMCwgeSA9IHgpIHsKKyAgICBhc3NlcnQoeCA9PT0geSwgInkgc2hvdWxk
IGVxdWFsIHgiKTsKKyAgICBmdW5jdGlvbiBtdXRhdGUoKSB7IHggPSAibXV0YXRpb24iOyB9Cisg
ICAgbXV0YXRlKCkKKyAgICBhc3NlcnQoeCAhPT0geSwgInkgc2hvdWxkIG5vdCBlcXVhbCB4Iik7
Cit9CitiYXNpY0NhcHR1cmVkKCkKK2Jhc2ljQ2FwdHVyZWQodW5kZWZpbmVkKQorCisvLy8vIEZJ
WE1FOiB0aGlzIHNob3VsZCBub3Qgd29yay4KKy8vZnVuY3Rpb24gdHJpY2t5KGdsb2JhbFggPSAo
Z2xvYmFsWCA9ICJ4IiksIHkgPSAoZ2xvYmFsWCA9IDIwKSkgeworLy8gICAgYXNzZXJ0KGdsb2Jh
bFggPT09IDIwKTsKKy8vICAgIGFzc2VydChnbG9iYWxYID09PSB5KTsKKy8vfQorLy9zaG91bGRU
aHJvdyh0cmlja3kpCisKK2Z1bmN0aW9uIHN0cmljdCh4LCB5ID0geCkgeworICAgICd1c2Ugc3Ry
aWN0JzsKKyAgICBhc3NlcnQoeCA9PT0geSk7Cit9CitzdHJpY3QoMjApOworc3RyaWN0KHVuZGVm
aW5lZCk7CisKK2Z1bmN0aW9uIHBsYXlncm91bmQoeCA9ICJmb28iLCB5ID0gImJhciIpIHsKKyAg
ICByZXR1cm4ge3gsIHl9Cit9Cithc3NlcnQocGxheWdyb3VuZCgpLnggPT09ICJmb28iKQorYXNz
ZXJ0KHBsYXlncm91bmQodW5kZWZpbmVkKS54ID09PSAiZm9vIikKK2Fzc2VydChwbGF5Z3JvdW5k
KHVuZGVmaW5lZCwgMjApLnggPT09ICJmb28iKQorYXNzZXJ0KHBsYXlncm91bmQobnVsbCkueCA9
PT0gbnVsbCkKK2Fzc2VydChwbGF5Z3JvdW5kKCkueSA9PT0gImJhciIpCithc3NlcnQocGxheWdy
b3VuZCh1bmRlZmluZWQsIHVuZGVmaW5lZCkueSA9PT0gImJhciIpCithc3NlcnQocGxheWdyb3Vu
ZCgiaGVsbG8iLCB1bmRlZmluZWQpLnkgPT09ICJiYXIiKQorYXNzZXJ0KHBsYXlncm91bmQoImJh
ciIpLnggPT09IHBsYXlncm91bmQodW5kZWZpbmVkLCB1bmRlZmluZWQpLnkpCithc3NlcnQocGxh
eWdyb3VuZCgxMCkueCA9PT0gMTApCithc3NlcnQocGxheWdyb3VuZCh1bmRlZmluZWQsIDIwKS55
ID09PSAyMCkKK2Fzc2VydChwbGF5Z3JvdW5kKHVuZGVmaW5lZCwgbnVsbCkueSA9PT0gbnVsbCkK
KworLy8vLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsuCisvL2Z1bmN0aW9uIHNjb3BpbmcoZiA9IGZ1
bmN0aW9uKCkgeyByZXR1cm4gbG9jYWw7fSkgeworLy8gICAgYXNzZXJ0KGYoKSA9PT0gdW5kZWZp
bmVkKTsKKy8vICAgIHZhciBsb2NhbCA9IDEwOworLy8gICAgYXNzZXJ0KGYoKSA9PT0gdW5kZWZp
bmVkKTsKKy8vfQorLy9zY29waW5nKCk7CisKK2Z1bmN0aW9uIGF1Z21lbnRzQXJndW1lbnRzMSh4
ID0gMjApIHsKKyAgICBhc3NlcnQoeCA9PT0gMjApOworCisgICAgYXJndW1lbnRzWzBdID0gMTA7
CisgICAgYXNzZXJ0KHggPT09IDEwKTsKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSB4KTsK
KworICAgIHggPSAxNTsKKyAgICBhc3NlcnQoeCA9PT0gMTUpOworICAgIGFzc2VydChhcmd1bWVu
dHNbMF0gPT09IHgpOworfQorYXVnbWVudHNBcmd1bWVudHMxKHVuZGVmaW5lZCk7CisKK2Z1bmN0
aW9uIGF1Z21lbnRzQXJndW1lbnRzMih4ID0gMjApIHsKKyAgICBhc3NlcnQoeCA9PT0gMjApOwor
CisgICAgYXJndW1lbnRzWzBdID0gMTA7CisgICAgYXNzZXJ0KHggPT09IDEwKTsKKyAgICBhc3Nl
cnQoYXJndW1lbnRzWzBdID09PSB4KTsKKworICAgIHggPSAxNTsKKyAgICBhc3NlcnQoeCA9PT0g
MTUpOworICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09IHgpOworCisgICAgZnVuY3Rpb24gYXVn
bWVudCgpIHsgeCA9IDQwIH0KKyAgICBhdWdtZW50KCkKKyAgICBhc3NlcnQoeCA9PT0gNDApOwor
ICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09IHgpOworICAgIGFyZ3VtZW50cyA9IDIwOworfQor
YXVnbWVudHNBcmd1bWVudHMyKHVuZGVmaW5lZCk7CisKK2Z1bmN0aW9uIGF1Z21lbnRzQXJndW1l
bnRzMyh4ID0gMTApIHsKKyAgICBhc3NlcnQoeCA9PT0gMTApOworCisgICAgYXNzZXJ0KGFyZ3Vt
ZW50c1swXSA9PT0gdW5kZWZpbmVkKTsKKyAgICB4ID0gMjA7CisgICAgYXNzZXJ0KGFyZ3VtZW50
c1swXSA9PT0gdW5kZWZpbmVkKTsKK30KK2F1Z21lbnRzQXJndW1lbnRzMygpOworCitmdW5jdGlv
biBhdWdtZW50c0FyZ3VtZW50czQoeCA9IDEwKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIGFz
c2VydCh4ID09PSAxMCk7CisKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQp
OworICAgIHggPSAyMDsKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQpOwor
fQorYXVnbWVudHNBcmd1bWVudHM0KCk7CithdWdtZW50c0FyZ3VtZW50czQodW5kZWZpbmVkKTsK
KworZnVuY3Rpb24gYXVnbWVudHNBcmd1bWVudHM1KHggPSAxMCkgeworICAgICJ1c2Ugc3RyaWN0
IjsKKyAgICBhc3NlcnQoeCA9PT0gMjApOworCisgICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0g
MjApOworICAgIHggPSAyMDsKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSAyMCk7Cit9Cith
dWdtZW50c0FyZ3VtZW50czUoMjApOworCisvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsuCisvL3No
b3VsZFRocm93RXZhbCgiZnVuY3Rpb24gYihhID0gMjAsIGEgPSA0MCkge30iKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257394</attachid>
            <date>2015-07-23 15:37:29 -0700</date>
            <delta_ts>2015-07-23 18:55:47 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>32248</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODcyMDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIExhYmVsOjpzZXRMb2NhdGlvbih1bnNpZ25lZCBsb2Nh
dGlvCiBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogewogICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJCeXRlY29kZSBHZW5lcmF0aW9uIik7Ci0gICAg
CisKICAgICBtX2NvZGVCbG9jay0+c2V0VGhpc1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLnZpcnR1
YWxSZWdpc3RlcigpKTsKICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGRlY2xhcmVkIGEgdmFyaWFi
bGUgbmFtZWQgImFyZ3VtZW50cyIgYW5kIHdlIGFyZSB1c2luZyBhcmd1bWVudHMgdGhlbiB3ZSBz
aG91bGQKQEAgLTcxLDExICs3MSw2IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSgKICAgICBpZiAobV9uZWVkVG9Jbml0aWFsaXplQXJndW1lbnRzKQogICAgICAgICBp
bml0aWFsaXplVmFyaWFibGUodmFyaWFibGUocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyksIG1f
YXJndW1lbnRzUmVnaXN0ZXIpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rlc3Ry
dWN0dXJpbmdQYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGF1dG8mIGVudHJ5ID0g
bV9kZXN0cnVjdHVyaW5nUGFyYW1ldGVyc1tpXTsKLSAgICAgICAgZW50cnkuc2Vjb25kLT5iaW5k
VmFsdWUoKnRoaXMsIGVudHJ5LmZpcnN0LmdldCgpKTsKLSAgICB9Ci0KICAgICBwdXNoTGV4aWNh
bFNjb3BlKG1fc2NvcGVOb2RlLCB0cnVlKTsKIAogICAgIHsKQEAgLTIxNSwxMyArMjEwLDE1IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICBtX2NvZGVCbG9j
ay0+c2V0U3ltYm9sVGFibGVDb25zdGFudEluZGV4KHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7
CiAKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzOwotICAg
IEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5jdGlvbk5vZGUtPnBhcmFtZXRl
cnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKTsKLSAgICAgICAgaWYg
KHBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkKKyAgICBGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMgPSAqZnVuY3Rpb25Ob2RlLT5wYXJhbWV0ZXJzKCk7IAorICAgIGlmICghcGFyYW1ldGVy
cy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpIHsgLy8gSWYgd2UgaGF2ZSBkZWZhdWx0IHBh
cmFtZXRlcnMsIHRoZXNlIHdpbGwgYmUgYWxsb2NhdGVkIGluIGEgc2VwYXJhdGUgc2NvcGUuCisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewor
ICAgICAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKS5maXJzdDsKKyAgICAg
ICAgICAgIGlmIChwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBwYXR0ZXJuLT5jb2xsZWN0Qm91bmRJZGVudGlmaWVycyhib3Vu
ZFBhcmFtZXRlclByb3BlcnRpZXMpOwogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBh
dHRlcm4tPmNvbGxlY3RCb3VuZElkZW50aWZpZXJzKGJvdW5kUGFyYW1ldGVyUHJvcGVydGllcyk7
Ci0gICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBzaG91bGRD
YXB0dXJlU29tZU9mVGhlVGhpbmdzID0gbV9zaG91bGRFbWl0RGVidWdIb29rcyB8fCBtX2NvZGVC
bG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwpAQCAtMjY1LDM1ICsyNjIsMjYgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIAogICAgIGlmIChzaG91bGRD
YXB0dXJlU29tZU9mVGhlVGhpbmdzKSB7CiAgICAgICAgIG1fbGV4aWNhbEVudmlyb25tZW50UmVn
aXN0ZXIgPSBhZGRWYXIoKTsKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEFjdGl2YXRpb25SZWdp
c3RlcihtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLT52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0g
ICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwotICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5k
ZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmlu
ZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3ltYm9sVGFibGVDb25zdGFu
dEluZGV4KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUo
anNVbmRlZmluZWQoKSktPmluZGV4KCkpOwotCi0gICAgICAgIGVtaXRPcGNvZGUob3BfbW92KTsK
LSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7
Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lz
dGVyLT5pbmRleCgpKTsKKyAgICAgICAgLy8gV2UgY2FuIGFsbG9jYXRlIHRoZSAidmFyIiBlbnZp
cm9ubWVudCBpZiB3ZSBkb24ndCBoYXZlIGRlZmF1bHQgcGFyYW1ldGVyIGV4cHJlc3Npb25zLiBJ
ZiB3ZSBoYXZlCisgICAgICAgIC8vIGRlZmF1bHQgcGFyYW1ldGVyIGV4cHJlc3Npb25zLCB3ZSBo
YXZlIHRvIGhvbGQgb2ZmIG9uIGFsbG9jYXRpbmcgdGhlICJ2YXIiIGVudmlyb25tZW50IGJlY2F1
c2UKKyAgICAgICAgLy8gdGhlIHBhcmVudCBzY29wZSBvZiB0aGUgInZhciIgZW52aXJvbm1lbnQg
aXMgdGhlIHBhcmFtZXRlciBlbnZpcm9ubWVudC4KKyAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmhh
c0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSkKKyAgICAgICAgICAgIGluaXRpYWxpemVWYXJMZXhp
Y2FsRW52aXJvbm1lbnQoc3ltYm9sVGFibGVDb25zdGFudEluZGV4KTsKICAgICB9CiAKICAgICAv
LyBNYWtlIHN1cmUgdGhlIGNvZGUgYmxvY2sga25vd3MgYWJvdXQgYWxsIG9mIG91ciBwYXJhbWV0
ZXJzLCBhbmQgbWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVycwogICAgIC8vIG5lZWRpbmcgZGVzdHJ1
Y3R1cmluZyBhcmUgbm90ZWQuCiAgICAgbV9wYXJhbWV0ZXJzLmdyb3cocGFyYW1ldGVycy5zaXpl
KCkgKyAxKTsgLy8gcmVzZXJ2ZSBzcGFjZSBmb3IgInRoaXMiCiAgICAgbV90aGlzUmVnaXN0ZXIu
c2V0SW5kZXgoaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKS0+aW5kZXgoKSk7IC8vIHRoaXMKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewotICAg
ICAgICBhdXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOwotICAgICAgICBSZWdpc3RlcklE
KiByZWcgPSBpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpOwotICAgICAgICBpZiAoIXBhdHRlcm4t
PmlzQmluZGluZ05vZGUoKSkKLSAgICAgICAgICAgIG1fZGVzdHJ1Y3R1cmluZ1BhcmFtZXRlcnMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcGF0dGVybikpOwotICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkKKyAgICAgICAgaW5pdGlh
bGl6ZU5leHRQYXJhbWV0ZXIoKTsKICAgICAKICAgICAvLyBGaWd1cmUgb3V0IHNvbWUgaW50ZXJl
c3RpbmcgZmFjdHMgYWJvdXQgb3VyIGFyZ3VtZW50cy4KICAgICBib29sIGNhcHR1cmVzQW55QXJn
dW1lbnRCeU5hbWUgPSBmYWxzZTsKICAgICBpZiAoZnVuY3Rpb25Ob2RlLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpKSB7CiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpm
dW5jdGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIHBhdHRlcm4gPSBw
YXJhbWV0ZXJzLmF0KGkpOworICAgICAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5h
dChpKS5maXJzdDsKICAgICAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+KHBhdHRlcm4pLT5ib3VuZFBy
b3BlcnR5KCk7CkBAIC0zMDEsOSArMjg5LDYgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKFZNJgogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNhcHR1cmVzQW55QXJn
dW1lbnRCeU5hbWUpCi0gICAgICAgIEFTU0VSVChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVy
KTsKLSAgICAKICAgICAvLyBOZWVkIHRvIGtub3cgd2hhdCBvdXIgZnVuY3Rpb25zIGFyZSBjYWxs
ZWQuIFBhcmFtZXRlcnMgaGF2ZSBzb21lIGdvb2Z5IGJlaGF2aW9ycyB3aGVuIGl0CiAgICAgLy8g
Y29tZXMgdG8gZnVuY3Rpb25zIG9mIHRoZSBzYW1lIG5hbWUuCiAgICAgZm9yIChGdW5jdGlvbkJv
ZHlOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25TdGFjaygpKQpAQCAtMzIw
LDEyICszMDUsMTMgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgog
ICAgICAgICBtX2FyZ3VtZW50c1JlZ2lzdGVyLT5yZWYoKTsKICAgICB9CiAgICAgCi0gICAgaWYg
KG5lZWRzQXJndW1lbnRzICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKSB7CisgICAgaWYg
KG5lZWRzQXJndW1lbnRzICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpICYmICFwYXJhbWV0
ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSkgewogICAgICAgICAvLyBJZiB3ZSBjYXB0
dXJlZCBhbnkgZm9ybWFsIHBhcmFtZXRlciBieSBuYW1lLCB0aGVuIHdlIHVzZSBTY29wZWRBcmd1
bWVudHMuIE90aGVyd2lzZSB3ZQogICAgICAgICAvLyB1c2UgRGlyZWN0QXJndW1lbnRzLiBXaXRo
IFNjb3BlZEFyZ3VtZW50cywgd2UgbGlmdCBhbGwgb2Ygb3VyIGFyZ3VtZW50cyBpbnRvIHRoZQog
ICAgICAgICAvLyBhY3RpdmF0aW9uLgogICAgICAgICAKICAgICAgICAgaWYgKGNhcHR1cmVzQW55
QXJndW1lbnRCeU5hbWUpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2xleGljYWxFbnZpcm9ubWVu
dFJlZ2lzdGVyKTsKICAgICAgICAgICAgIGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldEFyZ3VtZW50
c0xlbmd0aCh2bSwgcGFyYW1ldGVycy5zaXplKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBGb3IgZWFjaCBwYXJhbWV0ZXIsIHdlIGhhdmUgdHdvIHBvc3NpYmlsaXRpZXM6CkBAIC0z
MzUsNyArMzIxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBmdW5jdGlvblN5bWJv
bFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgZnVuY3Rpb25T
eW1ib2xUYWJsZS0+c2V0QXJndW1lbnRPZmZzZXQodm0sIGksIG9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKFVuaXF1ZWRTdHJpbmdJbXBsKiBuYW1lID0gdmlzaWJsZU5hbWVGb3JQYXJhbWV0
ZXIocGFyYW1ldGVycy5hdChpKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoVW5pcXVlZFN0cmlu
Z0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpLmZp
cnN0KSkgewogICAgICAgICAgICAgICAgICAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KG9mZnNldCk7
CiAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkodmFyT2Zmc2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRvIHRoZXNlIHZhcmlhYmxlcyB2aWEgdGhl
IFNjb3BlZEFyZ3VtZW50cyBvYmplY3Qgd2lsbCBub3QgZG8KQEAgLTM2MywxOCArMzQ5LDIwIEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgIC8v
IFdlJ3JlIGdvaW5nIHRvIHB1dCBhbGwgcGFyYW1ldGVycyBpbnRvIHRoZSBEaXJlY3RBcmd1bWVu
dHMgb2JqZWN0LiBGaXJzdCBlbnN1cmUKICAgICAgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0
YWJsZSBrbm93cyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLgogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoVW5pcXVlZFN0cmluZ0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihw
YXJhbWV0ZXJzLmF0KGkpKSkKKyAgICAgICAgICAgICAgICBpZiAoVW5pcXVlZFN0cmluZ0ltcGwq
IG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpLmZpcnN0KSkK
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TeW1ib2xUYWJsZS0+c2V0KG5hbWUsIFN5bWJv
bFRhYmxlRW50cnkoVmFyT2Zmc2V0KERpcmVjdEFyZ3VtZW50c09mZnNldChpKSkpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVf
ZGlyZWN0X2FyZ3VtZW50cyk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9h
cmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgeworICAg
IH0gZWxzZSBpZiAoIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKSB7CiAg
ICAgICAgIC8vIENyZWF0ZSB0aGUgZm9ybWFsIHBhcmFtZXRlcnMgdGhlIG5vcm1hbCB3YXkuIEFu
eSBvZiB0aGVtIGNvdWxkIGJlIGNhcHR1cmVkLCBvciBub3QuIElmCi0gICAgICAgIC8vIGNhcHR1
cmVkLCBsaWZ0IHRoZW0gaW50byB0aGUgc2NvcGUuCisgICAgICAgIC8vIGNhcHR1cmVkLCBsaWZ0
IHRoZW0gaW50byB0aGUgc2NvcGUuIFdlIGNhbiBub3QgZG8gdGhpcyBpZiB3ZSBoYXZlIGRlZmF1
bHQgcGFyYW1ldGVyIGV4cHJlc3Npb25zCisgICAgICAgIC8vIGJlY2F1c2Ugd2hlbiBkZWZhdWx0
IHBhcmFtZXRlciBleHByZXNzaW9ucyBleGlzdCwgdGhleSBiZWxvbmcgaW4gdGhlaXIgb3duIGxl
eGljYWwgZW52aXJvbm1lbnQKKyAgICAgICAgLy8gc2VwYXJhdGUgZnJvbSB0aGUgInZhciIgbGV4
aWNhbCBlbnZpcm9ubWVudC4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFt
ZXRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBuYW1l
ID0gdmlzaWJsZU5hbWVGb3JQYXJhbWV0ZXIocGFyYW1ldGVycy5hdChpKSk7CisgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFt
ZXRlcnMuYXQoaSkuZmlyc3QpOwogICAgICAgICAgICAgaWYgKCFuYW1lKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCkBAIC0zODcsNyArMzc1LDcgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTY29wZU9mZnNldCBvZmZzZXQgPSBmdW5jdGlvblN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3Bl
T2Zmc2V0KCk7CiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9Ci0gICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXJhbWV0ZXJzLmF0KGkp
KS0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEJp
bmRpbmdOb2RlKj4ocGFyYW1ldGVycy5hdChpKS5maXJzdCktPmJvdW5kUHJvcGVydHkoKTsKICAg
ICAgICAgICAgIGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldChuYW1lLCBTeW1ib2xUYWJsZUVudHJ5
KFZhck9mZnNldChvZmZzZXQpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGVtaXRPcGNv
ZGUob3BfcHV0X3RvX3Njb3BlKTsKQEAgLTQwMCwxNSArMzg4LDE3IEBAIEJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBp
ZiAobmVlZHNBcmd1bWVudHMgJiYgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgeworICAgIGlm
IChuZWVkc0FyZ3VtZW50cyAmJiAoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSB8fCBwYXJhbWV0
ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSkpIHsKICAgICAgICAgLy8gQWxsb2NhdGUg
YW4gb3V0LW9mLWJhbmRzIGFyZ3VtZW50cyBvYmplY3QuCiAgICAgICAgIGVtaXRPcGNvZGUob3Bf
Y3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgpKTsKICAgICB9CiAgICAgCiAgICAgLy8g
Tm93IGRlY2xhcmUgYWxsIHZhcmlhYmxlcy4KLSAgICBmb3IgKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50IDogYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzKQorICAgIGZvciAoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgOiBib3VuZFBhcmFtZXRlclByb3BlcnRpZXMpIHsKKyAgICAgICAgQVNTRVJUKCFw
YXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSk7CiAgICAgICAgIGNyZWF0ZVZh
cmlhYmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIGZ1bmN0aW9uU3ltYm9sVGFibGUp
OworICAgIH0KICAgICBmb3IgKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uIDogZnVuY3Rpb25O
b2RlLT5mdW5jdGlvblN0YWNrKCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSBmdW5jdGlvbi0+aWRlbnQoKTsKICAgICAgICAgY3JlYXRlVmFyaWFibGUoaWRlbnQsIHZhcktp
bmQoaWRlbnQuaW1wbCgpKSwgZnVuY3Rpb25TeW1ib2xUYWJsZSk7CkBAIC00MjEsNyArNDExLDcg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAvLyBW
YXJpYWJsZXMgbmFtZWQgImFyZ3VtZW50cyIgYXJlIG5ldmVyIGNvbnN0LgogICAgICAgICBjcmVh
dGVWYXJpYWJsZShJZGVudGlmaWVyOjpmcm9tVWlkKG1fdm0sIGVudHJ5LmtleS5nZXQoKSksIHZh
cktpbmQoZW50cnkua2V5LmdldCgpKSwgZnVuY3Rpb25TeW1ib2xUYWJsZSwgSWdub3JlRXhpc3Rp
bmcpOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRoZXJlIGFyZSBzb21lIHZhcmlhYmxlcyB0aGF0
IG5lZWQgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gVW5kZWZp
bmVkOgogICAgIC8vCiAgICAgLy8gLSAiYXJndW1lbnRzIjogdW5sZXNzIGl0J3MgdXNlZCBhcyBh
IGZ1bmN0aW9uIG9yIHBhcmFtZXRlciwgdGhpcyBzaG91bGQgcmVmZXIgdG8gdGhlCkBAIC00ODYs
NyArNDc2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAg
ICAgICAKICAgICAgICAgYm9vbCBoYXZlUGFyYW1ldGVyTmFtZWRBcmd1bWVudHMgPSBmYWxzZTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBuYW1lID0gdmlzaWJsZU5hbWVGb3JQ
YXJhbWV0ZXIocGFyYW1ldGVycy5hdChpKSk7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRlcnMuYXQoaSkuZmlyc3Qp
OwogICAgICAgICAgICAgaWYgKG5hbWUgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy5pbXBs
KCkpIHsKICAgICAgICAgICAgICAgICBoYXZlUGFyYW1ldGVyTmFtZWRBcmd1bWVudHMgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDk5LDcgKzQ4OSw3IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgIG1fbmVlZFRvSW5pdGlh
bGl6ZUFyZ3VtZW50cyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBtX25l
d1RhcmdldFJlZ2lzdGVyID0gYWRkVmFyKCk7CiAgICAgaWYgKGlzQ29uc3RydWN0b3IoKSkgewog
ICAgICAgICBlbWl0TW92ZShtX25ld1RhcmdldFJlZ2lzdGVyLCAmbV90aGlzUmVnaXN0ZXIpOwpA
QCAtNTE3LDEwICs1MDcsOCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
Vk0mCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICB9CiAKLSAgICBpZiAo
bV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcikKLSAgICAgICAgcHVzaFNjb3BlZENvbnRyb2xG
bG93Q29udGV4dCgpOwotICAgIG1fc3ltYm9sVGFibGVTdGFjay5hcHBlbmQoU3ltYm9sVGFibGVT
dGFja0VudHJ5eyBTdHJvbmc8U3ltYm9sVGFibGU+KCptX3ZtLCBmdW5jdGlvblN5bWJvbFRhYmxl
KSwgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciwgZmFsc2UsIHN5bWJvbFRhYmxlQ29uc3Rh
bnRJbmRleCB9KTsKICAgICBtX1REWlN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigqcGFyZW50
U2NvcGVURFpWYXJpYWJsZXMsIGZhbHNlKSk7CisgICAgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0
ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVTdGFjayhwYXJhbWV0ZXJzLCBmdW5jdGlvbk5v
ZGUsIGZ1bmN0aW9uU3ltYm9sVGFibGUsIHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgY2FwdHVy
ZXMpOwogfQogCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBF
dmFsTm9kZSogZXZhbE5vZGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBjb25zdCBW
YXJpYWJsZUVudmlyb25tZW50KiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcykKQEAgLTU2NCw2ICs1
NTIsOTYgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcigpCiB7CiB9CiAK
K3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVz
QW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2soCisgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgU3ltYm9sVGFibGUqIGZ1bmN0aW9u
U3ltYm9sVGFibGUsIAorICAgIGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNvbnN0IHN0
ZDo6ZnVuY3Rpb248Ym9vbCAoVW5pcXVlZFN0cmluZ0ltcGwqKT4mIGNhcHR1cmVzKQoreworICAg
IElkZW50aWZpZXJTZXQgcGFyYW1ldGVyU2V0OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRp
ZmllciwgUmVmUHRyPFJlZ2lzdGVySUQ+Pj4gdmFsdWVzVG9Nb3ZlSW50b1ZhcnM7CisgICAgaWYg
KHBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKSB7CisgICAgICAgIC8vIFRo
ZSAidmFyIiBsZXhpY2FsIGVudmlyb25tZW50IHNob3VsZCBiZSBhbGxvY2F0ZWQgd2l0aCB0aGUg
cGFyYW1ldGVyIGFjdGl2YXRpb24KKyAgICAgICAgLy8gYXMgaXRzIHBhcmVudCBzY29wZS4gSGVu
Y2UsIGl0IHNob3VsZCBub3QgYmUgYWxsb2NhdGVkIHlldC4KKyAgICAgICAgVmFyaWFibGVFbnZp
cm9ubWVudCBlbnZpcm9ubWVudDsKKyAgICAgICAgVmVjdG9yPElkZW50aWZpZXI+IGFsbFBhcmFt
ZXRlck5hbWVzOyAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMu
c2l6ZSgpOyBpKyspCisgICAgICAgICAgICBwYXJhbWV0ZXJzLmF0KGkpLmZpcnN0LT5jb2xsZWN0
Qm91bmRJZGVudGlmaWVycyhhbGxQYXJhbWV0ZXJOYW1lcyk7CisgICAgICAgIGZvciAoYXV0byYg
aWRlbnQgOiBhbGxQYXJhbWV0ZXJOYW1lcykgeworICAgICAgICAgICAgcGFyYW1ldGVyU2V0LmFk
ZChpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBlbnZpcm9ubWVu
dC5hZGQoaWRlbnQpOworICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXRJ
c0xldCgpOyAvLyBXaGVuIHdlIGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMsIHBh
cmFtZXRlcnMgYWN0IGxpa2UgImxldCIgdmFyaWFibGVzLgorICAgICAgICAgICAgaWYgKGNhcHR1
cmVzKGlkZW50LmltcGwoKSkpCisgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5zZXRJc0NhcHR1cmVkKCk7CisgICAgICAgIH0KKworICAgICAgICBwdXNoTGV4aWNhbFNj
b3BlSW50ZXJuYWwoZW52aXJvbm1lbnQsIHRydWUsIG51bGxwdHIpOworCisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB0ZW1wID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBzdGQ6
OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqPiBwYXJhbWV0
ZXIgPSBwYXJhbWV0ZXJzLmF0KGkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBh
cmFtZXRlclZhbHVlID0gJnJlZ2lzdGVyRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEg
KyBpKSk7CisgICAgICAgICAgICBlbWl0TW92ZSh0ZW1wLmdldCgpLCBwYXJhbWV0ZXJWYWx1ZS5n
ZXQoKSk7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyLnNlY29uZCkgeworICAgICAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBjb25kaXRpb24gPSBlbWl0SXNVbmRlZmluZWQobmV3VGVt
cG9yYXJ5KCksIHBhcmFtZXRlclZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
TGFiZWw+IHNraXBEZWZhdWx0UGFyYW1ldGVyQmVjYXVzZU5vdFVuZGVmaW5lZCA9IG5ld0xhYmVs
KCk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBJZkZhbHNlKGNvbmRpdGlvbi5nZXQoKSwgc2tp
cERlZmF1bHRQYXJhbWV0ZXJCZWNhdXNlTm90VW5kZWZpbmVkLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBlbWl0Tm9kZSh0ZW1wLmdldCgpLCBwYXJhbWV0ZXIuc2Vjb25kKTsKKyAgICAgICAgICAg
ICAgICBlbWl0TGFiZWwoc2tpcERlZmF1bHRQYXJhbWV0ZXJCZWNhdXNlTm90VW5kZWZpbmVkLmdl
dCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyYW1ldGVyLmZpcnN0LT5iaW5k
VmFsdWUoKnRoaXMsIHRlbXAuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6
IEFkZCByZWZlcmVuY2VzIGluIGFsbCBkZWZhdWx0IHBhcmFtZXRlciBjb2RlIGluZGljYXRpbmcg
dGhlIHBvcnRpb24gb2YgdGhlIHNwZWMKKyAgICAgICAgLy8gaXQgaXMgaW1wbGVtZW50aW5nLiBU
aGVyZSBpcyBzb21lIHdlaXJkbmVzcyBoZXJlIGluIG91ciBvcmRlcmluZyBiZWNhdXNlCisgICAg
ICAgIC8vIHdlIHJlcXVpcmUgYWxsIGFkZFZhcigpIHRvIHRha2UgcGxhY2UgYmVmb3JlIGFsbG9j
YXRpbmcgdGVtcG9yYXJ5IHJlZ2lzdGVycy4KKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGZ1
bmN0aW9uTm9kZS0+dmFyRGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgICAgIGlmICghZW50cnku
dmFsdWUuaXNWYXIoKSkgLy8gVGhpcyBpcyBlaXRoZXIgYSBwYXJhbWV0ZXIgb3IgY2FsbGVlLgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAocGFyYW1ldGVyU2V0
LmNvbnRhaW5zKGVudHJ5LmtleSkpIHsKKyAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50
ID0gSWRlbnRpZmllcjo6ZnJvbVVpZChtX3ZtLCBlbnRyeS5rZXkuZ2V0KCkpOworICAgICAgICAg
ICAgICAgIFZhcmlhYmxlIHZhciA9IHZhcmlhYmxlKGlkZW50KTsKKyAgICAgICAgICAgICAgICBS
ZWdpc3RlcklEKiBzY29wZSA9IGVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBlbWl0R2V0RnJvbVNjb3BlKG5l
d1RlbXBvcmFyeSgpLCBzY29wZSwgdmFyLCBEb05vdFRocm93SWZOb3RGb3VuZCk7CisgICAgICAg
ICAgICAgICAgdmFsdWVzVG9Nb3ZlSW50b1ZhcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkZW50
LCB2YWx1ZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2Fu
IG5vdyBpbml0aWFsaXplIHRoZSAidmFyIiBlbnZpcm9ubWVudCBiZWNhdXNlIHRoZSBwYXJhbWV0
ZXIKKyAgICAgICAgLy8gZW52aXJvbm1lbnQgaGFzIGJlZW4gY3JlYXRlZC4KKyAgICAgICAgaWYg
KG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCisgICAgICAgICAgICBpbml0aWFsaXplVmFy
TGV4aWNhbEVudmlyb25tZW50KHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7CisgICAgfQorCisg
ICAgLy8gRmluYWwgYWN0IG9mIHdlaXJkbmVzcyBmb3IgZGVmYXVsdCBwYXJhbWV0ZXJzLiBJZiBh
ICJ2YXIiIGFsc28KKyAgICAvLyBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIHBhcmFtZXRlciwgaXQg
c2hvdWxkIHN0YXJ0IG91dCBhcyB0aGUKKyAgICAvLyB2YWx1ZSBvZiB0aGF0IHBhcmFtZXRlci4g
Tm90ZSwgdGhvdWdoLCB0aGF0IHRoZXkgd2lsbCBiZSBkaXN0aW5jdAorICAgIC8vIGJpbmRpbmdz
LgorCisgICAgaWYgKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCisgICAgICAgIHB1c2hT
Y29wZWRDb250cm9sRmxvd0NvbnRleHQoKTsKKyAgICBtX3N5bWJvbFRhYmxlU3RhY2suYXBwZW5k
KFN5bWJvbFRhYmxlU3RhY2tFbnRyeXsgU3Ryb25nPFN5bWJvbFRhYmxlPigqbV92bSwgZnVuY3Rp
b25TeW1ib2xUYWJsZSksIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIsIGZhbHNlLCBzeW1i
b2xUYWJsZUNvbnN0YW50SW5kZXggfSk7CisKKyAgICBpZiAoIXBhcmFtZXRlcnMuaGFzRGVmYXVs
dFBhcmFtZXRlclZhbHVlcygpKSB7CisgICAgICAgIC8vIEluaXRpYWxpemUgZGVzdHJ1Y3R1cmlu
ZyBwYXJhbWV0ZXJzIHRoZSBvbGQgd2F5IGFzIGlmIHdlIGRvbid0IGhhdmUgYW55IGRlZmF1bHQg
cGFyYW1ldGVyIHZhbHVlcy4KKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBkZWZhdWx0IHBhcmFtZXRl
ciB2YWx1ZXMsIHdlIGhhbmRsZSB0aGlzIGNhc2UgYWJvdmUuCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBEZXN0
cnVjdHVyaW5nUGF0dGVybk5vZGUqIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpLmZpcnN0Owor
ICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpIHsKKyAgICAgICAgICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcGFyYW1ldGVyVmFsdWUgPSAmcmVnaXN0ZXJGb3Iodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpKTsKKyAgICAgICAgICAgICAgICBwYXR0ZXJu
LT5iaW5kVmFsdWUoKnRoaXMsIHBhcmFtZXRlclZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE1vdmUgcGFyYW1ldGVycyBpbnRvICJ2YXIicy4K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzVG9Nb3ZlSW50b1ZhcnMuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgVmFyaWFibGUgdmFyID0gdmFyaWFibGUodmFsdWVzVG9Nb3ZlSW50
b1ZhcnNbaV0uZmlyc3QpOworICAgICAgICBSZWdpc3RlcklEKiBzY29wZSA9IGVtaXRSZXNvbHZl
U2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICAgICAgZW1pdFB1dFRvU2NvcGUoc2NvcGUsIHZhciwg
dmFsdWVzVG9Nb3ZlSW50b1ZhcnNbaV0uc2Vjb25kLmdldCgpLCBEb05vdFRocm93SWZOb3RGb3Vu
ZCk7CisgICAgfQorfQorCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6
ZU5leHRQYXJhbWV0ZXIoKQogewogICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKQEAgLTU3Myw2
ICs2NTEsMjEgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpegogICAg
IHJldHVybiAmcGFyYW1ldGVyOwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFs
aXplVmFyTGV4aWNhbEVudmlyb25tZW50KGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlcik7CisgICAg
bV9jb2RlQmxvY2stPnNldEFjdGl2YXRpb25SZWdpc3RlcihtX2xleGljYWxFbnZpcm9ubWVudFJl
Z2lzdGVyLT52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVu
dmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChz
Y29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzeW1i
b2xUYWJsZUNvbnN0YW50SW5kZXgpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25z
dGFudFZhbHVlKGpzVW5kZWZpbmVkKCkpLT5pbmRleCgpKTsKKworICAgIGVtaXRPcGNvZGUob3Bf
bW92KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgp
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rl
ci0+aW5kZXgoKSk7Cit9CisKIFVuaXF1ZWRTdHJpbmdJbXBsKiBCeXRlY29kZUdlbmVyYXRvcjo6
dmlzaWJsZU5hbWVGb3JQYXJhbWV0ZXIoRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJu
KQogewogICAgIGlmIChwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpIHsKQEAgLTEyNTgsOSArMTM1
MSw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZEcKICAgICByZXR1
cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaExleGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSogbm9kZSwgYm9vbCBjYW5P
cHRpbWl6ZVREWkNoZWNrcywgUmVnaXN0ZXJJRCoqIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQp
Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3BlSW50ZXJuYWwoVmFyaWFi
bGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQsIGJvb2wgY2FuT3B0aW1pemVURFpDaGVja3MsIFJl
Z2lzdGVySUQqKiBjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0KQogewotICAgIFZhcmlhYmxlRW52
aXJvbm1lbnQmIGVudmlyb25tZW50ID0gbm9kZS0+bGV4aWNhbFZhcmlhYmxlcygpOwogICAgIGlm
ICghZW52aXJvbm1lbnQuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzMzQsNiArMTQy
NiwxMiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3BlCiAgICAgfQog
fQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3BlKFZhcmlhYmxlRW52
aXJvbm1lbnROb2RlKiBub2RlLCBib29sIGNhbk9wdGltaXplVERaQ2hlY2tzLCBSZWdpc3RlcklE
KiogY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdCkKK3sKKyAgICBWYXJpYWJsZUVudmlyb25tZW50
JiBlbnZpcm9ubWVudCA9IG5vZGUtPmxleGljYWxWYXJpYWJsZXMoKTsKKyAgICBwdXNoTGV4aWNh
bFNjb3BlSW50ZXJuYWwoZW52aXJvbm1lbnQsIGNhbk9wdGltaXplVERaQ2hlY2tzLCBjb25zdGFu
dFN5bWJvbFRhYmxlUmVzdWx0KTsKK30KKwogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wTGV4
aWNhbFNjb3BlKFZhcmlhYmxlRW52aXJvbm1lbnROb2RlKiBub2RlKQogewogICAgIFZhcmlhYmxl
RW52aXJvbm1lbnQmIGVudmlyb25tZW50ID0gbm9kZS0+bGV4aWNhbFZhcmlhYmxlcygpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTg3MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MjEs
NiArNjIxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgT3Bjb2RlSUQgbGFzdE9wY29k
ZUlEKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0T3Bjb2RlSUQ7IH0KIAorICAgIHByaXZhdGU6Cisg
ICAgICAgIHZvaWQgcHVzaExleGljYWxTY29wZUludGVybmFsKFZhcmlhYmxlRW52aXJvbm1lbnQm
LCBib29sIGNhbk9wdGltaXplVERaQ2hlY2tzLCBSZWdpc3RlcklEKiogY29uc3RhbnRTeW1ib2xU
YWJsZVJlc3VsdCk7CisgICAgcHVibGljOgogICAgICAgICB2b2lkIHB1c2hMZXhpY2FsU2NvcGUo
VmFyaWFibGVFbnZpcm9ubWVudE5vZGUqLCBib29sIGNhbk9wdGltaXplVERaQ2hlY2tzLCBSZWdp
c3RlcklEKiogY29uc3RhbnRTeW1ib2xUYWJsZVJlc3VsdCA9IG51bGxwdHIpOwogICAgICAgICB2
b2lkIHBvcExleGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSopOwogICAgICAgICB2
b2lkIHByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJhdGlvbihWYXJpYWJsZUVu
dmlyb25tZW50Tm9kZSosIFJlZ2lzdGVySUQqIGxvb3BTeW1ib2xUYWJsZSk7CkBAIC03MDksNiAr
NzEyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDb25zdHJ1
Y3RWYXJhcmdzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCog
dGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJl
ZVJlZ2lzdGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxl
SG9va1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbFZhcmFyZ3MoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklE
KiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZpcnN0
VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogCisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZVZh
ckxleGljYWxFbnZpcm9ubWVudChpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4KTsKKyAgICAg
ICAgdm9pZCBpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25T
Y29wZVN0YWNrKEZ1bmN0aW9uUGFyYW1ldGVycyYsIEZ1bmN0aW9uTm9kZSosIFN5bWJvbFRhYmxl
KiwgaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29s
IChVbmlxdWVkU3RyaW5nSW1wbCopPiYgY2FwdHVyZXMpOworCiAgICAgcHVibGljOgogICAgICAg
ICBKU1N0cmluZyogYWRkU3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYpOwogICAgICAg
ICBKU1RlbXBsYXRlUmVnaXN0cnlLZXkqIGFkZFRlbXBsYXRlUmVnaXN0cnlLZXlDb25zdGFudChj
b25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxODcyMDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwMTksOSArMzAxOSw5IEBAIHZvaWQgRnVuY3Rpb25Ob2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGUKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxl
cigpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYXJhbWV0ZXJzLT5zaXpl
KCk7IGkrKykgewogICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBEZXN0cnVjdHVyaW5nIGFz
c2lnbm1lbnRzIGludG8gYXJndW1lbnRzLgotICAgICAgICAgICAgaWYgKCFtX3BhcmFtZXRlcnMt
PmF0KGkpLT5pc0JpbmRpbmdOb2RlKCkpCisgICAgICAgICAgICBpZiAoIW1fcGFyYW1ldGVycy0+
YXQoaSkuZmlyc3QtPmlzQmluZGluZ05vZGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIEJpbmRpbmdOb2RlKiBwYXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxCaW5kaW5n
Tm9kZSo+KG1fcGFyYW1ldGVycy0+YXQoaSkpOworICAgICAgICAgICAgQmluZGluZ05vZGUqIHBh
cmFtZXRlciA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4obV9wYXJhbWV0ZXJzLT5hdChpKS5m
aXJzdCk7CiAgICAgICAgICAgICBSZWdpc3RlcklEIHJlZyhDYWxsRnJhbWU6OmFyZ3VtZW50T2Zm
c2V0KGkpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUoJnJlZywgUHJv
ZmlsZVR5cGVCeXRlY29kZUZ1bmN0aW9uQXJndW1lbnQsIG51bGxwdHIpOwogICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhwYXJhbWV0ZXItPmRpdm90
U3RhcnQoKSwgcGFyYW1ldGVyLT5kaXZvdEVuZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCShyZXZpc2lvbiAxODcyMDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDcg
KzQxOCwxMCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudE5vZGUqIGNyZWF0ZUVsZW1lbnRMaXN0KEVs
ZW1lbnROb2RlKiBlbGVtcywgaW50IGVsaXNpb25zLCBFeHByZXNzaW9uTm9kZSogZXhwcikgeyBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBFbGVtZW50Tm9kZShlbGVtcywgZWxpc2lvbnMsIGV4
cHIpOyB9CiAKICAgICBGb3JtYWxQYXJhbWV0ZXJMaXN0IGNyZWF0ZUZvcm1hbFBhcmFtZXRlckxp
c3QoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uUGFyYW1ldGVycygpOyB9
Ci0gICAgdm9pZCBhcHBlbmRQYXJhbWV0ZXIoRm9ybWFsUGFyYW1ldGVyTGlzdCBsaXN0LCBEZXN0
cnVjdHVyaW5nUGF0dGVybiBwYXR0ZXJuKSB7IGxpc3QtPmFwcGVuZChwYXR0ZXJuKTsgfQorICAg
IHZvaWQgYXBwZW5kUGFyYW1ldGVyKEZvcm1hbFBhcmFtZXRlckxpc3QgbGlzdCwgRGVzdHJ1Y3R1
cmluZ1BhdHRlcm4gcGF0dGVybiwgRXhwcmVzc2lvbk5vZGUqIGRlZmF1bHRWYWx1ZSkgCisgICAg
eyAKKyAgICAgICAgbGlzdC0+YXBwZW5kKHBhdHRlcm4sIGRlZmF1bHRWYWx1ZSk7IAorICAgIH0K
IAogICAgIENhc2VDbGF1c2VOb2RlKiBjcmVhdGVDbGF1c2UoRXhwcmVzc2lvbk5vZGUqIGV4cHIs
IEpTQzo6U291cmNlRWxlbWVudHMqIHN0YXRlbWVudHMpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgQ2FzZUNsYXVzZU5vZGUoZXhwciwgc3RhdGVtZW50cyk7IH0KICAgICBDbGF1c2VMaXN0
Tm9kZSogY3JlYXRlQ2xhdXNlTGlzdChDYXNlQ2xhdXNlTm9kZSogY2xhdXNlKSB7IHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIENsYXVzZUxpc3ROb2RlKGNsYXVzZSk7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE4NzIwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTYyNSwxMiAr
MTYyNSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEZ1bmN0aW9u
UGFyYW1ldGVycygpOwogICAgICAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3BhdHRlcm5zLnNpemUoKTsgfQotICAgICAgICBBTFdBWVNfSU5MSU5FIERl
c3RydWN0dXJpbmdQYXR0ZXJuTm9kZSogYXQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcGF0
dGVybnNbaW5kZXhdOyB9Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoRGVzdHJ1
Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuKSB7IEFTU0VSVChwYXR0ZXJuKTsgbV9wYXR0ZXJu
cy5hcHBlbmQocGF0dGVybik7IH0KKyAgICAgICAgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8RGVz
dHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqPiBhdCh1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gbV9wYXR0ZXJuc1tpbmRleF07IH0KKyAgICAgICAgYm9vbCBoYXNEZWZhdWx0
UGFyYW1ldGVyVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzOyB9CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoRGVzdHJ1Y3R1cmluZ1Bh
dHRlcm5Ob2RlKiBwYXR0ZXJuLCBFeHByZXNzaW9uTm9kZSogZGVmYXVsdFZhbHVlKSAKKyAgICAg
ICAgeyAKKyAgICAgICAgICAgIEFTU0VSVChwYXR0ZXJuKTsgCisgICAgICAgICAgICBtX3BhdHRl
cm5zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihwYXR0ZXJuLCBkZWZhdWx0VmFsdWUpKTsKKyAgICAg
ICAgICAgIGlmIChkZWZhdWx0VmFsdWUpCisgICAgICAgICAgICAgICAgbV9oYXNEZWZhdWx0UGFy
YW1ldGVyVmFsdWVzID0gdHJ1ZTsKKyAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKIAotICAgICAg
ICBWZWN0b3I8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiwgMz4gbV9wYXR0ZXJuczsKKyAgICAg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqLCBFeHByZXNzaW9u
Tm9kZSo+LCAzPiBtX3BhdHRlcm5zOworICAgICAgICBib29sIG1faGFzRGVmYXVsdFBhcmFtZXRl
clZhbHVlcyB7IGZhbHNlIH07CiAgICAgfTsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGUg
ZmluYWwgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSwgcHVibGljIFBhcnNlckFyZW5hRGVsZXRhYmxl
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9u
IDE4NzIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzQyLDcgKzc0Miw2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZURlc3RydWMKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGZh
aWxJZkZhbHNlKGlubmVyUGF0dGVybiwgIkNhbm5vdCBwYXJzZSB0aGlzIGRlc3RydWN0dXJpbmcg
cGF0dGVybiIpOwogICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gZGVmYXVsdFZhbHVlID0gcGFy
c2VEZWZhdWx0VmFsdWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0KTsKLSAgICAgICAg
ICAgIGZhaWxJZlRydWUoa2luZCA9PSBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycyAmJiBkZWZhdWx0
VmFsdWUsICAiRGVmYXVsdCB2YWx1ZXMgaW4gZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXJzIGFyZSBj
dXJyZW50bHkgbm90IHN1cHBvcnRlZCIpOwogICAgICAgICAgICAgY29udGV4dC5hcHBlbmRBcnJh
eVBhdHRlcm5FbnRyeShhcnJheVBhdHRlcm4sIGxvY2F0aW9uLCBpbm5lclBhdHRlcm4sIGRlZmF1
bHRWYWx1ZSk7CiAgICAgICAgIH0gd2hpbGUgKGNvbnN1bWUoQ09NTUEpKTsKIApAQCAtODExLDcg
KzgxMCw2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWMKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGlubmVyUGF0dGVy
biwgIkNhbm5vdCBwYXJzZSB0aGlzIGRlc3RydWN0dXJpbmcgcGF0dGVybiIpOwogICAgICAgICAg
ICAgVHJlZUV4cHJlc3Npb24gZGVmYXVsdFZhbHVlID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0
cnVjdHVyaW5nUGF0dGVybihjb250ZXh0KTsKLSAgICAgICAgICAgIGZhaWxJZlRydWUoa2luZCA9
PSBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycyAmJiBkZWZhdWx0VmFsdWUsICJEZWZhdWx0IHZhbHVl
cyBpbiBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVk
Iik7CiAgICAgICAgICAgICBBU1NFUlQocHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIGNvbnRl
eHQuYXBwZW5kT2JqZWN0UGF0dGVybkVudHJ5KG9iamVjdFBhdHRlcm4sIGxvY2F0aW9uLCB3YXNT
dHJpbmcsICpwcm9wZXJ0eU5hbWUsIGlubmVyUGF0dGVybiwgZGVmYXVsdFZhbHVlKTsKICAgICAg
ICAgfSB3aGlsZSAoY29uc3VtZShDT01NQSkpOwpAQCAtMTQ0NywxMyArMTQ0NSwxNyBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBi
b29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXIm
IGNvbnRleHQsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IGxpc3QsIHVuc2lnbmVkJiBwYXJhbWV0
ZXJDb3VudCkKIHsKICAgICBhdXRvIHBhcmFtZXRlciA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRl
cm4oY29udGV4dCwgRGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMpOworICAgIGF1dG8gZGVmYXVsdFZh
bHVlID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0KTsK
ICAgICBmYWlsSWZGYWxzZShwYXJhbWV0ZXIsICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVyIHBhdHRl
cm4iKTsKLSAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihsaXN0LCBwYXJhbWV0ZXIpOworICAg
IHByb3BhZ2F0ZUVycm9yKCk7CisgICAgY29udGV4dC5hcHBlbmRQYXJhbWV0ZXIobGlzdCwgcGFy
YW1ldGVyLCBkZWZhdWx0VmFsdWUpOwogICAgIHBhcmFtZXRlckNvdW50Kys7CiAgICAgd2hpbGUg
KGNvbnN1bWUoQ09NTUEpKSB7CiAgICAgICAgIHBhcmFtZXRlciA9IHBhcnNlRGVzdHJ1Y3R1cmlu
Z1BhdHRlcm4oY29udGV4dCwgRGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMpOwogICAgICAgICBmYWls
SWZGYWxzZShwYXJhbWV0ZXIsICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVyIHBhdHRlcm4iKTsKLSAg
ICAgICAgY29udGV4dC5hcHBlbmRQYXJhbWV0ZXIobGlzdCwgcGFyYW1ldGVyKTsKKyAgICAgICAg
ZGVmYXVsdFZhbHVlID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVybihj
b250ZXh0KTsKKyAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKKyAgICAgICAgY29udGV4dC5hcHBl
bmRQYXJhbWV0ZXIobGlzdCwgcGFyYW1ldGVyLCBkZWZhdWx0VmFsdWUpOwogICAgICAgICBwYXJh
bWV0ZXJDb3VudCsrOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE1MzAsNyArMTUzMiw3
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+IHRlbXBsYXRlIDwKICAgICAgICAgICAg
ICAgICBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQgPSAxOwogICAgICAgICAgICAgICAgIGF1
dG8gcGFyYW1ldGVyID0gcGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0cnVj
dHVyZVRvUGFyYW1ldGVycyk7CiAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UocGFyYW1ldGVy
LCAiQ2Fubm90IHBhcnNlIHBhcmFtZXRlciBwYXR0ZXJuIik7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC5hcHBlbmRQYXJhbWV0ZXIocGFyYW1ldGVyTGlzdCwgcGFyYW1ldGVyKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihwYXJhbWV0ZXJMaXN0LCBwYXJhbWV0ZXIs
IDApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTE1NDksNyArMTU1MSw4IEBAIHRl
bXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+IHRlbXBsYXRlIDwKICAgICAgICAgZmFpbElmVHJ1
ZShtYXRjaChDTE9TRVBBUkVOKSwgInNldHRlciBmdW5jdGlvbnMgbXVzdCBoYXZlIG9uZSBwYXJh
bWV0ZXIiKTsKICAgICAgICAgYXV0byBwYXJhbWV0ZXIgPSBwYXJzZURlc3RydWN0dXJpbmdQYXR0
ZXJuKGNvbnRleHQsIERlc3RydWN0dXJlVG9QYXJhbWV0ZXJzKTsKICAgICAgICAgZmFpbElmRmFs
c2UocGFyYW1ldGVyLCAic2V0dGVyIGZ1bmN0aW9ucyBtdXN0IGhhdmUgb25lIHBhcmFtZXRlciIp
OwotICAgICAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihwYXJhbWV0ZXJMaXN0LCBwYXJhbWV0
ZXIpOworICAgICAgICAvLyBGSVhNRTogZGVmYXVsdCB2YWx1ZQorICAgICAgICBjb250ZXh0LmFw
cGVuZFBhcmFtZXRlcihwYXJhbWV0ZXJMaXN0LCBwYXJhbWV0ZXIsIDApOwogICAgICAgICBmdW5j
dGlvbkluZm8ucGFyYW1ldGVyQ291bnQgPSAxOwogICAgICAgICBmYWlsSWZUcnVlKG1hdGNoKENP
TU1BKSwgInNldHRlciBmdW5jdGlvbnMgbXVzdCBoYXZlIG9uZSBwYXJhbWV0ZXIiKTsKICAgICAg
ICAgY29uc3VtZU9yRmFpbChDTE9TRVBBUkVOLCAiRXhwZWN0ZWQgYSAnKScgYWZ0ZXIgYSBwYXJh
bWV0ZXIgZGVjbGFyYXRpb24iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U3ludGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAxODcyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIx
OSw3IEBAIHB1YmxpYzoKICAgICBpbnQgY3JlYXRlRWxlbWVudExpc3QoaW50LCBpbnQpIHsgcmV0
dXJuIEVsZW1lbnRzTGlzdFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVFbGVtZW50TGlzdChpbnQs
IGludCwgaW50KSB7IHJldHVybiBFbGVtZW50c0xpc3RSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRl
Rm9ybWFsUGFyYW1ldGVyTGlzdCgpIHsgcmV0dXJuIEZvcm1hbFBhcmFtZXRlckxpc3RSZXN1bHQ7
IH0KLSAgICB2b2lkIGFwcGVuZFBhcmFtZXRlcihpbnQsIERlc3RydWN0dXJpbmdQYXR0ZXJuKSB7
IH0KKyAgICB2b2lkIGFwcGVuZFBhcmFtZXRlcihpbnQsIERlc3RydWN0dXJpbmdQYXR0ZXJuLCBp
bnQpIHsgfQogICAgIGludCBjcmVhdGVDbGF1c2UoaW50LCBpbnQpIHsgcmV0dXJuIENsYXVzZVJl
c3VsdDsgfQogICAgIGludCBjcmVhdGVDbGF1c2VMaXN0KGludCkgeyByZXR1cm4gQ2xhdXNlTGlz
dFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVDbGF1c2VMaXN0KGludCwgaW50KSB7IHJldHVybiBD
bGF1c2VMaXN0UmVzdWx0OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2VzNi1kZWZhdWx0LXBhcmFtZXRlcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9lczYtZGVmYXVsdC1wYXJhbWV0ZXJzLmpzCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9lczYtZGVmYXVsdC1w
YXJhbWV0ZXJzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACitmdW5jdGlvbiBh
c3NlcnQoY29uZCwgbXNnID0gIiIpIHsKKyAgICBpZiAoIWNvbmQpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcihtc2cpOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jKSB7CisgICAgdmFy
IGhhZEVycm9yID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpCisgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICBoYWRFcnJvciA9IHRydWU7CisgICAgfQorICAgIGFzc2VydChoYWRF
cnJvciwgIkRpZCBub3QgdGhyb3ciKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3dFdmFsKHN0
cikgeworICAgIHZhciBoYWRFcnJvciA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGV2YWwo
c3RyKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGhhZEVycm9yID0gdHJ1ZTsKKyAgICB9
CisgICAgYXNzZXJ0KGhhZEVycm9yLCAiRGlkIG5vdCB0aHJvdyIpOworfQorCitmdW5jdGlvbiBi
YXNpYyh4LCB5PXgpIHsKKyAgICBhc3NlcnQoeSA9PT0geCwgImJhc2ljcyBkb24ndCB3b3JrLiIp
Cit9CitiYXNpYygyMCk7CitiYXNpYygiaGVsbG8iKTsKK2Jhc2ljKHtmb286IDIwfSk7CitiYXNp
Yyh1bmRlZmluZWQpOworCitmdW5jdGlvbiBiYXNpY0Vycm9yKHggPSB5LCB5KSB7IH0KK3Nob3Vs
ZFRocm93KGJhc2ljRXJyb3IpCisKK2Z1bmN0aW9uIGJhc2ljRXJyb3IyKHggPSB4KSB7IH0KK3No
b3VsZFRocm93KGJhc2ljRXJyb3IyKQorCis7KGZ1bmN0aW9uKCl7CisgICAgdmFyIHNjb3BlVmFy
aWFibGUgPSB7aGVsbG86ICJ3b3JsZCJ9OworICAgIGZ1bmN0aW9uIGJhc2ljU2NvcGUoeCA9IHNj
b3BlVmFyaWFibGUpIHsKKyAgICAgICAgYXNzZXJ0KHggPT09IHNjb3BlVmFyaWFibGUpOworICAg
IH0KKyAgICBiYXNpY1Njb3BlKCk7Cit9KSgpOworCitmdW5jdGlvbiBiYXNpY0Z1bmN0aW9uQ2Fw
dHVyZUluRGVmYXVsdCh0aGVBcmcgPSAyMCwgeSA9IGZ1bmN0aW9uKCkge3JldHVybiB0aGVBcmd9
KSB7CisgICAgYXNzZXJ0KHRoZUFyZyA9PT0geSgpLCAieSBzaG91bGQgcmV0dXJuIHguIik7Cisg
ICAgdGhlQXJnID0ge307CisgICAgYXNzZXJ0KHRoZUFyZyA9PT0geSgpLCAieSBzaG91bGQgcmV0
dXJuIHguIik7Cit9CitiYXNpY0Z1bmN0aW9uQ2FwdHVyZUluRGVmYXVsdCgpCitiYXNpY0Z1bmN0
aW9uQ2FwdHVyZUluRGVmYXVsdCh1bmRlZmluZWQpCisKK2Z1bmN0aW9uIGJhc2ljQ2FwdHVyZWQo
eCA9IDIwLCB5ID0geCkgeworICAgIGFzc2VydCh4ID09PSB5LCAieSBzaG91bGQgZXF1YWwgeCIp
OworICAgIGZ1bmN0aW9uIG11dGF0ZSgpIHsgeCA9ICJtdXRhdGlvbiI7IH0KKyAgICBtdXRhdGUo
KQorICAgIGFzc2VydCh4ICE9PSB5LCAieSBzaG91bGQgbm90IGVxdWFsIHgiKTsKK30KK2Jhc2lj
Q2FwdHVyZWQoKQorYmFzaWNDYXB0dXJlZCh1bmRlZmluZWQpCisKKy8vLy8gRklYTUU6IHRoaXMg
c2hvdWxkIG5vdCB3b3JrLgorLy9mdW5jdGlvbiB0cmlja3koZ2xvYmFsWCA9IChnbG9iYWxYID0g
IngiKSwgeSA9IChnbG9iYWxYID0gMjApKSB7CisvLyAgICBhc3NlcnQoZ2xvYmFsWCA9PT0gMjAp
OworLy8gICAgYXNzZXJ0KGdsb2JhbFggPT09IHkpOworLy99CisvL3Nob3VsZFRocm93KHRyaWNr
eSkKKworZnVuY3Rpb24gc3RyaWN0KHgsIHkgPSB4KSB7CisgICAgJ3VzZSBzdHJpY3QnOworICAg
IGFzc2VydCh4ID09PSB5KTsKK30KK3N0cmljdCgyMCk7CitzdHJpY3QodW5kZWZpbmVkKTsKKwor
ZnVuY3Rpb24gcGxheWdyb3VuZCh4ID0gImZvbyIsIHkgPSAiYmFyIikgeworICAgIHJldHVybiB7
eCwgeX0KK30KK2Fzc2VydChwbGF5Z3JvdW5kKCkueCA9PT0gImZvbyIpCithc3NlcnQocGxheWdy
b3VuZCh1bmRlZmluZWQpLnggPT09ICJmb28iKQorYXNzZXJ0KHBsYXlncm91bmQodW5kZWZpbmVk
LCAyMCkueCA9PT0gImZvbyIpCithc3NlcnQocGxheWdyb3VuZChudWxsKS54ID09PSBudWxsKQor
YXNzZXJ0KHBsYXlncm91bmQoKS55ID09PSAiYmFyIikKK2Fzc2VydChwbGF5Z3JvdW5kKHVuZGVm
aW5lZCwgdW5kZWZpbmVkKS55ID09PSAiYmFyIikKK2Fzc2VydChwbGF5Z3JvdW5kKCJoZWxsbyIs
IHVuZGVmaW5lZCkueSA9PT0gImJhciIpCithc3NlcnQocGxheWdyb3VuZCgiYmFyIikueCA9PT0g
cGxheWdyb3VuZCh1bmRlZmluZWQsIHVuZGVmaW5lZCkueSkKK2Fzc2VydChwbGF5Z3JvdW5kKDEw
KS54ID09PSAxMCkKK2Fzc2VydChwbGF5Z3JvdW5kKHVuZGVmaW5lZCwgMjApLnkgPT09IDIwKQor
YXNzZXJ0KHBsYXlncm91bmQodW5kZWZpbmVkLCBudWxsKS55ID09PSBudWxsKQorCisvLy8vIEZJ
WE1FOiBtYWtlIHRoaXMgd29yay4KKy8vZnVuY3Rpb24gc2NvcGluZyhmID0gZnVuY3Rpb24oKSB7
IHJldHVybiBsb2NhbDt9KSB7CisvLyAgICBhc3NlcnQoZigpID09PSB1bmRlZmluZWQpOworLy8g
ICAgdmFyIGxvY2FsID0gMTA7CisvLyAgICBhc3NlcnQoZigpID09PSB1bmRlZmluZWQpOworLy99
CisvL3Njb3BpbmcoKTsKKworZnVuY3Rpb24gYXVnbWVudHNBcmd1bWVudHMxKHggPSAyMCkgewor
ICAgIGFzc2VydCh4ID09PSAyMCk7CisKKyAgICBhcmd1bWVudHNbMF0gPSAxMDsKKyAgICBhc3Nl
cnQoeCA9PT0gMjApOworCisgICAgeCA9IDE1OworICAgIGFzc2VydCh4ID09PSAxNSk7CisgICAg
YXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gMTApOworfQorYXVnbWVudHNBcmd1bWVudHMxKHVuZGVm
aW5lZCk7CisKK2Z1bmN0aW9uIGF1Z21lbnRzQXJndW1lbnRzMih4ID0gMjApIHsKKyAgICBhc3Nl
cnQoeCA9PT0gMjApOworCisgICAgYXJndW1lbnRzWzBdID0gMTA7CisgICAgYXNzZXJ0KHggPT09
IDIwKTsKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSAxMCk7CisKKyAgICB4ID0gMTU7Cisg
ICAgYXNzZXJ0KHggPT09IDE1KTsKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSAxMCk7CisK
KyAgICBmdW5jdGlvbiBhdWdtZW50KCkgeyB4ID0gNDAgfQorICAgIGF1Z21lbnQoKQorICAgIGFz
c2VydCh4ID09PSA0MCk7CisgICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gMTApOworfQorYXVn
bWVudHNBcmd1bWVudHMyKHVuZGVmaW5lZCk7CisKK2Z1bmN0aW9uIGF1Z21lbnRzQXJndW1lbnRz
Myh4ID0gMTApIHsKKyAgICBhc3NlcnQoeCA9PT0gMTApOworCisgICAgYXNzZXJ0KGFyZ3VtZW50
c1swXSA9PT0gdW5kZWZpbmVkKTsKKyAgICB4ID0gMjA7CisgICAgYXNzZXJ0KGFyZ3VtZW50c1sw
XSA9PT0gdW5kZWZpbmVkKTsKK30KK2F1Z21lbnRzQXJndW1lbnRzMygpOworCitmdW5jdGlvbiBh
dWdtZW50c0FyZ3VtZW50czQoeCA9IDEwKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIGFzc2Vy
dCh4ID09PSAxMCk7CisKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQpOwor
ICAgIHggPSAyMDsKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQpOworfQor
YXVnbWVudHNBcmd1bWVudHM0KCk7CithdWdtZW50c0FyZ3VtZW50czQodW5kZWZpbmVkKTsKKwor
ZnVuY3Rpb24gYXVnbWVudHNBcmd1bWVudHM1KHggPSAxMCkgeworICAgICJ1c2Ugc3RyaWN0IjsK
KyAgICBhc3NlcnQoeCA9PT0gMjApOworCisgICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gMjAp
OworICAgIHggPSAyMDsKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSAyMCk7Cit9CithdWdt
ZW50c0FyZ3VtZW50czUoMjApOworCisvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsuCitzaG91bGRU
aHJvd0V2YWwoImZ1bmN0aW9uIGIoYSA9IDIwLCBhID0gNDApIHt9Iik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257418</attachid>
            <date>2015-07-23 18:55:47 -0700</date>
            <delta_ts>2015-07-23 19:03:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>59741</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3MjgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDE1LTA3LTIzICBTYWFtIGJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBbRVM2XSBBZGQgc3VwcG9ydCBmb3IgZGVmYXVsdCBwYXJhbWV0ZXJzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQwOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50
cyBFUzYgZGVmYXVsdCBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byB0aGUgRVM2CisgICAgICAgIHNw
ZWNpZmljYXRpb24uIFRoaXMgcGF0Y2ggYnVpbGRzIG9mZiB0aGUgY29tcG9uZW50cyBpbnRyb2R1
Y2VkIHdpdGggCisgICAgICAgICJsZXQiIHNjb3BpbmcgYW5kIHBhcnNpbmcgZnVuY3Rpb24gcGFy
YW1ldGVycyBpbiB0aGUgc2FtZSBwYXJzZXIKKyAgICAgICAgYXJlbmEgYXMgdGhlIGZ1bmN0aW9u
IGl0c2VsZi4gImxldCIgc2NvcGluZyBhbGxvd3MgZnVuY3Rpb25zIHdpdGggZGVmYXVsdCAKKyAg
ICAgICAgcGFyYW1ldGVyIHZhbHVlcyB0byBwbGFjZSB0aGVpciBwYXJhbWV0ZXJzIHVuZGVyIHRo
ZSBURFouIFBhcnNpbmcgZnVuY3Rpb24KKyAgICAgICAgcGFyYW1ldGVycyBpbiB0aGUgc2FtZSBw
YXJzZXIgYXJlbmEgYWxsb3dzIHRoZSBGdW5jdGlvblBhcmFtZXRlcnMgQVNUIG5vZGUKKyAgICAg
ICAgcmVmZXIgdG8gRXhwcmVzc2lvbk5vZGVzLgorCisgICAgICAgIFRoZSBtb3N0IHN1YnRsZSBw
YXJ0IG9mIHRoaXMgcGF0Y2ggaXMgaG93IHdlIGFsbG9jYXRlIGxleGljYWwgZW52aXJvbm1lbnRz
CisgICAgICAgIHdoZW4gZnVuY3Rpb25zIGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiBJ
ZiBhIGZ1bmN0aW9uIGhhcyBkZWZhdWx0CisgICAgICAgIHBhcmFtZXRlciB2YWx1ZXMgdGhlbiB0
aGVyZSBtdXN0IGJlIGEgc2VwYXJhdGUgbGV4aWNhbCBlbnZpcm9ubWVudCBmb3IKKyAgICAgICAg
aXRzIHBhcmFtZXRlcnMuIFRoZW4sIHRoZSBmdW5jdGlvbidzICJ2YXIiIGxleGljYWwgZW52aXJv
bm1lbnQgbXVzdCBoYXZlCisgICAgICAgIHRoZSBwYXJhbWV0ZXIgbGV4aWNhbCBlbnZpcm9ubWVu
dCBhcyBpdHMgcGFyZW50LiBUaGUgQnl0ZWNvZGVHZW5lcmF0b3IKKyAgICAgICAgdGFrZXMgZ3Jl
YXQgY2FyZSB0byBub3QgYWxsb2NhdGUgdGhlICJ2YXIiIGxleGljYWwgZW52aXJvbm1lbnQgYmVm
b3JlIGl0cworICAgICAgICByZWFsbHkgbmVlZGVkLgorCisgICAgICAgIFRoZSAiYXJndW1lbnRz
IiBvYmplY3QgZm9yIGEgZnVuY3Rpb24gd2l0aCBkZWZhdWx0IHBhcmFtZXRlcnMgd2lsbCBuZXZl
ciBiZSAKKyAgICAgICAgYSBtYXBwZWQgYXJ1Z21lbnRzIG9iamVjdC4gSXQgd2lsbCBhbHdheXMg
YmUgYSBjbG9uZWQgYXJ1Z21lbnRzIG9iamVjdC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjp+Qnl0ZWNvZGVHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1bHRQ
YXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVTdGFjayk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcik6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplVmFyTGV4aWNhbEVudmlyb25tZW50KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnZpc2libGVOYW1lRm9yUGFyYW1ldGVy
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkR2xvYmFsT2JqZWN0
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hMZXhpY2FsU2NvcGVJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3Bl
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcExleGljYWxTY29wZSk6Cisg
ICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjpsYXN0T3Bjb2RlSUQpOgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbk5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6Y3JlYXRlRWxlbWVudExpc3QpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpj
cmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6YXBw
ZW5kUGFyYW1ldGVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ2xhdXNlKToK
KyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQ2xhdXNlTGlzdCk6CisgICAgICAgICog
cGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUGFyYW1ldGVyczo6c2l6ZSk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUGFyYW1ldGVyczo6YXQpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvblBhcmFtZXRlcnM6Omhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMpOgorICAgICAgICAo
SlNDOjpGdW5jdGlvblBhcmFtZXRlcnM6OmFwcGVuZCk6CisgICAgICAgICogcGFyc2VyL1BhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OmNyZWF0ZUJp
bmRpbmdQYXR0ZXJuKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnRyeVBhcnNl
RGVzdHJ1Y3R1cmluZ1BhdHRlcm5FeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4pOgorICAgICAgICAoSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6UGFy
c2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBwYXJz
ZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3BlOjpkZWNsYXJlUGFyYW1ldGVyKToKKyAg
ICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVj
a2VyOjpjcmVhdGVFbGVtZW50TGlzdCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNy
ZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjph
cHBlbmRQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVDbGF1
c2UpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVDbGF1c2VMaXN0KToKKyAg
ICAgICAgKiB0ZXN0cy9zdHJlc3MvZXM2LWRlZmF1bHQtcGFyYW1ldGVycy5qczogQWRkZWQuCisg
ICAgICAgIChhc3NlcnQpOgorICAgICAgICAoc2hvdWxkVGhyb3cpOgorICAgICAgICAoc2hvdWxk
VGhyb3dTeW50YXhFcnJvcik6CisgICAgICAgIChzaG91bGRUaHJvd1REWik6CisgICAgICAgIChi
YXNpYyk6CisgICAgICAgIChiYXNpY0Z1bmN0aW9uQ2FwdHVyZUluRGVmYXVsdC5iYXNpY0Z1bmN0
aW9uQ2FwdHVyZUluRGVmYXVsdC5iYXNpY0NhcHR1cmVkKToKKyAgICAgICAgKGJhc2ljQ2FwdHVy
ZWQuYmFzaWNDYXB0dXJlZC50cmlja3kpOgorICAgICAgICAoc3RyaWN0KToKKyAgICAgICAgKHBs
YXlncm91bmQpOgorICAgICAgICAoc2NvcGluZyk6CisgICAgICAgIChhdWdtZW50c0FyZ3VtZW50
czEpOgorICAgICAgICAoYXVnbWVudHNBcmd1bWVudHMyKToKKyAgICAgICAgKGF1Z21lbnRzQXJn
dW1lbnRzMyk6CisgICAgICAgIChhdWdtZW50c0FyZ3VtZW50czQpOgorICAgICAgICAoYXVnbWVu
dHNBcmd1bWVudHM1KToKKwogMjAxNS0wNy0yMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBjb21waWxlIGFuZCBydW50aW1lIGZs
YWdzIGZvciBwcm9taXNlcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODcyMDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIExhYmVsOjpzZXRMb2Nh
dGlvbih1bnNpZ25lZCBsb2NhdGlvCiBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGUoKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJCeXRlY29kZSBH
ZW5lcmF0aW9uIik7Ci0gICAgCisKICAgICBtX2NvZGVCbG9jay0+c2V0VGhpc1JlZ2lzdGVyKG1f
dGhpc1JlZ2lzdGVyLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAKICAgICAvLyBJZiB3ZSBoYXZl
IGRlY2xhcmVkIGEgdmFyaWFibGUgbmFtZWQgImFyZ3VtZW50cyIgYW5kIHdlIGFyZSB1c2luZyBh
cmd1bWVudHMgdGhlbiB3ZSBzaG91bGQKQEAgLTcxLDExICs3MSw2IEBAIFBhcnNlckVycm9yIEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKICAgICBpZiAobV9uZWVkVG9Jbml0aWFsaXplQXJn
dW1lbnRzKQogICAgICAgICBpbml0aWFsaXplVmFyaWFibGUodmFyaWFibGUocHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cyksIG1fYXJndW1lbnRzUmVnaXN0ZXIpOwogCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2Rlc3RydWN0dXJpbmdQYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgIGF1dG8mIGVudHJ5ID0gbV9kZXN0cnVjdHVyaW5nUGFyYW1ldGVyc1tpXTsKLSAgICAgICAg
ZW50cnkuc2Vjb25kLT5iaW5kVmFsdWUoKnRoaXMsIGVudHJ5LmZpcnN0LmdldCgpKTsKLSAgICB9
Ci0KICAgICBwdXNoTGV4aWNhbFNjb3BlKG1fc2NvcGVOb2RlLCB0cnVlKTsKIAogICAgIHsKQEAg
LTIxNSwxMyArMjEwLDE0IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihW
TSYKICAgICBtX2NvZGVCbG9jay0+c2V0U3ltYm9sVGFibGVDb25zdGFudEluZGV4KHN5bWJvbFRh
YmxlQ29uc3RhbnRJbmRleCk7CiAKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gYm91bmRQYXJhbWV0
ZXJQcm9wZXJ0aWVzOwotICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5j
dGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFt
ZXRlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5h
dChpKTsKLSAgICAgICAgaWYgKHBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBwYXR0ZXJuLT5jb2xsZWN0Qm91bmRJZGVudGlmaWVycyhib3Vu
ZFBhcmFtZXRlclByb3BlcnRpZXMpOwotICAgICAgICBjb250aW51ZTsKKyAgICBGdW5jdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMgPSAqZnVuY3Rpb25Ob2RlLT5wYXJhbWV0ZXJzKCk7IAorICAg
IGlmICghcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpIHsgLy8gSWYgd2Ug
aGF2ZSBkZWZhdWx0IHBhcmFtZXRlcnMsIHRoZXNlIHdpbGwgYmUgYWxsb2NhdGVkIGluIGEgc2Vw
YXJhdGUgc2NvcGUuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5z
aXplKCk7IGkrKykgeworICAgICAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChp
KS5maXJzdDsKKyAgICAgICAgICAgIGlmIChwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBwYXR0ZXJuLT5jb2xsZWN0Qm91bmRJ
ZGVudGlmaWVycyhib3VuZFBhcmFtZXRlclByb3BlcnRpZXMpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgYm9vbCBzaG91bGRDYXB0dXJlU29tZU9mVGhlVGhpbmdzID0gbV9zaG91bGRFbWl0RGVi
dWdIb29rcyB8fCBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwpAQCAtMjY1LDQ1
ICsyNjEsMzYgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAg
IAogICAgIGlmIChzaG91bGRDYXB0dXJlU29tZU9mVGhlVGhpbmdzKSB7CiAgICAgICAgIG1fbGV4
aWNhbEVudmlyb25tZW50UmVnaXN0ZXIgPSBhZGRWYXIoKTsKLSAgICAgICAgbV9jb2RlQmxvY2st
PnNldEFjdGl2YXRpb25SZWdpc3RlcihtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLT52aXJ0
dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2xleGljYWxfZW52
aXJvbm1lbnQpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJv
bm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChz
Y29wZVJlZ2lzdGVyKCktPmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
c3ltYm9sVGFibGVDb25zdGFudEluZGV4KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFkZENvbnN0YW50VmFsdWUoanNVbmRlZmluZWQoKSktPmluZGV4KCkpOwotCi0gICAgICAgIGVt
aXRPcGNvZGUob3BfbW92KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVn
aXN0ZXIoKS0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGlj
YWxFbnZpcm9ubWVudFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICAgICAgLy8gV2UgY2FuIGFsbG9j
YXRlIHRoZSAidmFyIiBlbnZpcm9ubWVudCBpZiB3ZSBkb24ndCBoYXZlIGRlZmF1bHQgcGFyYW1l
dGVyIGV4cHJlc3Npb25zLiBJZiB3ZSBoYXZlCisgICAgICAgIC8vIGRlZmF1bHQgcGFyYW1ldGVy
IGV4cHJlc3Npb25zLCB3ZSBoYXZlIHRvIGhvbGQgb2ZmIG9uIGFsbG9jYXRpbmcgdGhlICJ2YXIi
IGVudmlyb25tZW50IGJlY2F1c2UKKyAgICAgICAgLy8gdGhlIHBhcmVudCBzY29wZSBvZiB0aGUg
InZhciIgZW52aXJvbm1lbnQgaXMgdGhlIHBhcmFtZXRlciBlbnZpcm9ubWVudC4KKyAgICAgICAg
aWYgKCFwYXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSkKKyAgICAgICAgICAg
IGluaXRpYWxpemVWYXJMZXhpY2FsRW52aXJvbm1lbnQoc3ltYm9sVGFibGVDb25zdGFudEluZGV4
KTsKICAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvZGUgYmxvY2sga25vd3MgYWJvdXQg
YWxsIG9mIG91ciBwYXJhbWV0ZXJzLCBhbmQgbWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVycwogICAg
IC8vIG5lZWRpbmcgZGVzdHJ1Y3R1cmluZyBhcmUgbm90ZWQuCiAgICAgbV9wYXJhbWV0ZXJzLmdy
b3cocGFyYW1ldGVycy5zaXplKCkgKyAxKTsgLy8gcmVzZXJ2ZSBzcGFjZSBmb3IgInRoaXMiCiAg
ICAgbV90aGlzUmVnaXN0ZXIuc2V0SW5kZXgoaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKS0+aW5k
ZXgoKSk7IC8vIHRoaXMKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5z
aXplKCk7ICsraSkgewotICAgICAgICBhdXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOwot
ICAgICAgICBSZWdpc3RlcklEKiByZWcgPSBpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpOwotICAg
ICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkKLSAgICAgICAgICAgIG1fZGVzdHJ1
Y3R1cmluZ1BhcmFtZXRlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHJlZywgcGF0dGVybikpOwot
ICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsr
aSkKKyAgICAgICAgaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKTsKICAgICAKICAgICAvLyBGaWd1
cmUgb3V0IHNvbWUgaW50ZXJlc3RpbmcgZmFjdHMgYWJvdXQgb3VyIGFyZ3VtZW50cy4KICAgICBi
b29sIGNhcHR1cmVzQW55QXJndW1lbnRCeU5hbWUgPSBmYWxzZTsKICAgICBpZiAoZnVuY3Rpb25O
b2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKSB7CiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVy
cyYgcGFyYW1ldGVycyA9ICpmdW5jdGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBhdXRvIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpOworICAgICAgICAgICAgYXV0byBwYXR0
ZXJuID0gcGFyYW1ldGVycy5hdChpKS5maXJzdDsKICAgICAgICAgICAgIGlmICghcGF0dGVybi0+
aXNCaW5kaW5nTm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaW5kaW5nTm9kZSo+
KHBhdHRlcm4pLT5ib3VuZFByb3BlcnR5KCk7CiAgICAgICAgICAgICBjYXB0dXJlc0FueUFyZ3Vt
ZW50QnlOYW1lIHw9IGNhcHR1cmVzKGlkZW50LmltcGwoKSk7CiAgICAgICAgIH0KICAgICB9Ci0K
KyAgICAKICAgICBpZiAoY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSkKICAgICAgICAgQVNTRVJU
KG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpOwotICAgIAorCiAgICAgLy8gTmVlZCB0byBr
bm93IHdoYXQgb3VyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBQYXJhbWV0ZXJzIGhhdmUgc29tZSBn
b29meSBiZWhhdmlvcnMgd2hlbiBpdAogICAgIC8vIGNvbWVzIHRvIGZ1bmN0aW9ucyBvZiB0aGUg
c2FtZSBuYW1lLgogICAgIGZvciAoRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gOiBmdW5jdGlv
bk5vZGUtPmZ1bmN0aW9uU3RhY2soKSkKQEAgLTMyMCw3ICszMDcsNyBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIt
PnJlZigpOwogICAgIH0KICAgICAKLSAgICBpZiAobmVlZHNBcmd1bWVudHMgJiYgIWNvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICBpZiAobmVlZHNBcmd1bWVudHMgJiYgIWNvZGVCbG9j
ay0+aXNTdHJpY3RNb2RlKCkgJiYgIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVl
cygpKSB7CiAgICAgICAgIC8vIElmIHdlIGNhcHR1cmVkIGFueSBmb3JtYWwgcGFyYW1ldGVyIGJ5
IG5hbWUsIHRoZW4gd2UgdXNlIFNjb3BlZEFyZ3VtZW50cy4gT3RoZXJ3aXNlIHdlCiAgICAgICAg
IC8vIHVzZSBEaXJlY3RBcmd1bWVudHMuIFdpdGggU2NvcGVkQXJndW1lbnRzLCB3ZSBsaWZ0IGFs
bCBvZiBvdXIgYXJndW1lbnRzIGludG8gdGhlCiAgICAgICAgIC8vIGFjdGl2YXRpb24uCkBAIC0z
MzUsNyArMzIyLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBmdW5jdGlvblN5bWJv
bFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgZnVuY3Rpb25T
eW1ib2xUYWJsZS0+c2V0QXJndW1lbnRPZmZzZXQodm0sIGksIG9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKFVuaXF1ZWRTdHJpbmdJbXBsKiBuYW1lID0gdmlzaWJsZU5hbWVGb3JQYXJhbWV0
ZXIocGFyYW1ldGVycy5hdChpKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoVW5pcXVlZFN0cmlu
Z0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpLmZp
cnN0KSkgewogICAgICAgICAgICAgICAgICAgICBWYXJPZmZzZXQgdmFyT2Zmc2V0KG9mZnNldCk7
CiAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkodmFyT2Zmc2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRvIHRoZXNlIHZhcmlhYmxlcyB2aWEgdGhl
IFNjb3BlZEFyZ3VtZW50cyBvYmplY3Qgd2lsbCBub3QgZG8KQEAgLTM2MywxOCArMzUwLDIwIEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgIC8v
IFdlJ3JlIGdvaW5nIHRvIHB1dCBhbGwgcGFyYW1ldGVycyBpbnRvIHRoZSBEaXJlY3RBcmd1bWVu
dHMgb2JqZWN0LiBGaXJzdCBlbnN1cmUKICAgICAgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0
YWJsZSBrbm93cyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLgogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoVW5pcXVlZFN0cmluZ0ltcGwqIG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihw
YXJhbWV0ZXJzLmF0KGkpKSkKKyAgICAgICAgICAgICAgICBpZiAoVW5pcXVlZFN0cmluZ0ltcGwq
IG5hbWUgPSB2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihwYXJhbWV0ZXJzLmF0KGkpLmZpcnN0KSkK
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25TeW1ib2xUYWJsZS0+c2V0KG5hbWUsIFN5bWJv
bFRhYmxlRW50cnkoVmFyT2Zmc2V0KERpcmVjdEFyZ3VtZW50c09mZnNldChpKSkpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVf
ZGlyZWN0X2FyZ3VtZW50cyk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9h
cmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgeworICAg
IH0gZWxzZSBpZiAoIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKSB7CiAg
ICAgICAgIC8vIENyZWF0ZSB0aGUgZm9ybWFsIHBhcmFtZXRlcnMgdGhlIG5vcm1hbCB3YXkuIEFu
eSBvZiB0aGVtIGNvdWxkIGJlIGNhcHR1cmVkLCBvciBub3QuIElmCi0gICAgICAgIC8vIGNhcHR1
cmVkLCBsaWZ0IHRoZW0gaW50byB0aGUgc2NvcGUuCisgICAgICAgIC8vIGNhcHR1cmVkLCBsaWZ0
IHRoZW0gaW50byB0aGUgc2NvcGUuIFdlIGNhbiBub3QgZG8gdGhpcyBpZiB3ZSBoYXZlIGRlZmF1
bHQgcGFyYW1ldGVyIGV4cHJlc3Npb25zCisgICAgICAgIC8vIGJlY2F1c2Ugd2hlbiBkZWZhdWx0
IHBhcmFtZXRlciBleHByZXNzaW9ucyBleGlzdCwgdGhleSBiZWxvbmcgaW4gdGhlaXIgb3duIGxl
eGljYWwgZW52aXJvbm1lbnQKKyAgICAgICAgLy8gc2VwYXJhdGUgZnJvbSB0aGUgInZhciIgbGV4
aWNhbCBlbnZpcm9ubWVudC4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFt
ZXRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBuYW1l
ID0gdmlzaWJsZU5hbWVGb3JQYXJhbWV0ZXIocGFyYW1ldGVycy5hdChpKSk7CisgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFt
ZXRlcnMuYXQoaSkuZmlyc3QpOwogICAgICAgICAgICAgaWYgKCFuYW1lKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCkBAIC0zODcsNyArMzc2LDcgQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTY29wZU9mZnNldCBvZmZzZXQgPSBmdW5jdGlvblN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3Bl
T2Zmc2V0KCk7CiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9Ci0gICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZGluZ05vZGUqPihwYXJhbWV0ZXJzLmF0KGkp
KS0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEJp
bmRpbmdOb2RlKj4ocGFyYW1ldGVycy5hdChpKS5maXJzdCktPmJvdW5kUHJvcGVydHkoKTsKICAg
ICAgICAgICAgIGZ1bmN0aW9uU3ltYm9sVGFibGUtPnNldChuYW1lLCBTeW1ib2xUYWJsZUVudHJ5
KFZhck9mZnNldChvZmZzZXQpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGVtaXRPcGNv
ZGUob3BfcHV0X3RvX3Njb3BlKTsKQEAgLTQwMCwxNSArMzg5LDE3IEBAIEJ5dGVjb2RlR2VuZXJh
dG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBp
ZiAobmVlZHNBcmd1bWVudHMgJiYgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgeworICAgIGlm
IChuZWVkc0FyZ3VtZW50cyAmJiAoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSB8fCBwYXJhbWV0
ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSkpIHsKICAgICAgICAgLy8gQWxsb2NhdGUg
YW4gb3V0LW9mLWJhbmRzIGFyZ3VtZW50cyBvYmplY3QuCiAgICAgICAgIGVtaXRPcGNvZGUob3Bf
Y3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgpKTsKICAgICB9CiAgICAgCiAgICAgLy8g
Tm93IGRlY2xhcmUgYWxsIHZhcmlhYmxlcy4KLSAgICBmb3IgKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50IDogYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzKQorICAgIGZvciAoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgOiBib3VuZFBhcmFtZXRlclByb3BlcnRpZXMpIHsKKyAgICAgICAgQVNTRVJUKCFw
YXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSk7CiAgICAgICAgIGNyZWF0ZVZh
cmlhYmxlKGlkZW50LCB2YXJLaW5kKGlkZW50LmltcGwoKSksIGZ1bmN0aW9uU3ltYm9sVGFibGUp
OworICAgIH0KICAgICBmb3IgKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uIDogZnVuY3Rpb25O
b2RlLT5mdW5jdGlvblN0YWNrKCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSBmdW5jdGlvbi0+aWRlbnQoKTsKICAgICAgICAgY3JlYXRlVmFyaWFibGUoaWRlbnQsIHZhcktp
bmQoaWRlbnQuaW1wbCgpKSwgZnVuY3Rpb25TeW1ib2xUYWJsZSk7CkBAIC00MjEsNyArNDEyLDcg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAvLyBW
YXJpYWJsZXMgbmFtZWQgImFyZ3VtZW50cyIgYXJlIG5ldmVyIGNvbnN0LgogICAgICAgICBjcmVh
dGVWYXJpYWJsZShJZGVudGlmaWVyOjpmcm9tVWlkKG1fdm0sIGVudHJ5LmtleS5nZXQoKSksIHZh
cktpbmQoZW50cnkua2V5LmdldCgpKSwgZnVuY3Rpb25TeW1ib2xUYWJsZSwgSWdub3JlRXhpc3Rp
bmcpOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRoZXJlIGFyZSBzb21lIHZhcmlhYmxlcyB0aGF0
IG5lZWQgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gVW5kZWZp
bmVkOgogICAgIC8vCiAgICAgLy8gLSAiYXJndW1lbnRzIjogdW5sZXNzIGl0J3MgdXNlZCBhcyBh
IGZ1bmN0aW9uIG9yIHBhcmFtZXRlciwgdGhpcyBzaG91bGQgcmVmZXIgdG8gdGhlCkBAIC00ODYs
NyArNDc3LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAg
ICAgICAKICAgICAgICAgYm9vbCBoYXZlUGFyYW1ldGVyTmFtZWRBcmd1bWVudHMgPSBmYWxzZTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBuYW1lID0gdmlzaWJsZU5hbWVGb3JQ
YXJhbWV0ZXIocGFyYW1ldGVycy5hdChpKSk7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogbmFtZSA9IHZpc2libGVOYW1lRm9yUGFyYW1ldGVyKHBhcmFtZXRlcnMuYXQoaSkuZmlyc3Qp
OwogICAgICAgICAgICAgaWYgKG5hbWUgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy5pbXBs
KCkpIHsKICAgICAgICAgICAgICAgICBoYXZlUGFyYW1ldGVyTmFtZWRBcmd1bWVudHMgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDk5LDcgKzQ5MCw3IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgIG1fbmVlZFRvSW5pdGlh
bGl6ZUFyZ3VtZW50cyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBtX25l
d1RhcmdldFJlZ2lzdGVyID0gYWRkVmFyKCk7CiAgICAgaWYgKGlzQ29uc3RydWN0b3IoKSkgewog
ICAgICAgICBlbWl0TW92ZShtX25ld1RhcmdldFJlZ2lzdGVyLCAmbV90aGlzUmVnaXN0ZXIpOwpA
QCAtNTE3LDEwICs1MDgsOCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
Vk0mCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICB9CiAKLSAgICBpZiAo
bV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcikKLSAgICAgICAgcHVzaFNjb3BlZENvbnRyb2xG
bG93Q29udGV4dCgpOwotICAgIG1fc3ltYm9sVGFibGVTdGFjay5hcHBlbmQoU3ltYm9sVGFibGVT
dGFja0VudHJ5eyBTdHJvbmc8U3ltYm9sVGFibGU+KCptX3ZtLCBmdW5jdGlvblN5bWJvbFRhYmxl
KSwgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciwgZmFsc2UsIHN5bWJvbFRhYmxlQ29uc3Rh
bnRJbmRleCB9KTsKICAgICBtX1REWlN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcigqcGFyZW50
U2NvcGVURFpWYXJpYWJsZXMsIGZhbHNlKSk7CisgICAgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0
ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVTdGFjayhwYXJhbWV0ZXJzLCBmdW5jdGlvbk5v
ZGUsIGZ1bmN0aW9uU3ltYm9sVGFibGUsIHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgY2FwdHVy
ZXMpOwogfQogCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBF
dmFsTm9kZSogZXZhbE5vZGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBjb25zdCBW
YXJpYWJsZUVudmlyb25tZW50KiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcykKQEAgLTU2NCw2ICs1
NTMsOTUgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcigpCiB7CiB9CiAK
K3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVz
QW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2soCisgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgU3ltYm9sVGFibGUqIGZ1bmN0aW9u
U3ltYm9sVGFibGUsIAorICAgIGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNvbnN0IHN0
ZDo6ZnVuY3Rpb248Ym9vbCAoVW5pcXVlZFN0cmluZ0ltcGwqKT4mIGNhcHR1cmVzKQoreworICAg
IElkZW50aWZpZXJTZXQgcGFyYW1ldGVyU2V0OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRp
ZmllciwgUmVmUHRyPFJlZ2lzdGVySUQ+Pj4gdmFsdWVzVG9Nb3ZlSW50b1ZhcnM7CisgICAgaWYg
KHBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKSB7CisgICAgICAgIC8vIFRo
ZSAidmFyIiBsZXhpY2FsIGVudmlyb25tZW50IHNob3VsZCBiZSBhbGxvY2F0ZWQgd2l0aCB0aGUg
cGFyYW1ldGVyIGFjdGl2YXRpb24KKyAgICAgICAgLy8gYXMgaXRzIHBhcmVudCBzY29wZS4gSGVu
Y2UsIGl0IHNob3VsZCBub3QgYmUgYWxsb2NhdGVkIHlldC4KKyAgICAgICAgVmFyaWFibGVFbnZp
cm9ubWVudCBlbnZpcm9ubWVudDsKKyAgICAgICAgVmVjdG9yPElkZW50aWZpZXI+IGFsbFBhcmFt
ZXRlck5hbWVzOyAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMu
c2l6ZSgpOyBpKyspCisgICAgICAgICAgICBwYXJhbWV0ZXJzLmF0KGkpLmZpcnN0LT5jb2xsZWN0
Qm91bmRJZGVudGlmaWVycyhhbGxQYXJhbWV0ZXJOYW1lcyk7CisgICAgICAgIGZvciAoYXV0byYg
aWRlbnQgOiBhbGxQYXJhbWV0ZXJOYW1lcykgeworICAgICAgICAgICAgcGFyYW1ldGVyU2V0LmFk
ZChpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBlbnZpcm9ubWVu
dC5hZGQoaWRlbnQpOworICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXRJ
c0xldCgpOyAvLyBXaGVuIHdlIGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMsIHBh
cmFtZXRlcnMgYWN0IGxpa2UgImxldCIgdmFyaWFibGVzLgorICAgICAgICAgICAgaWYgKGNhcHR1
cmVzKGlkZW50LmltcGwoKSkpCisgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5zZXRJc0NhcHR1cmVkKCk7CisgICAgICAgIH0KKworICAgICAgICBwdXNoTGV4aWNhbFNj
b3BlSW50ZXJuYWwoZW52aXJvbm1lbnQsIHRydWUsIG51bGxwdHIpOworCisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB0ZW1wID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBzdGQ6
OnBhaXI8RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqPiBwYXJhbWV0
ZXIgPSBwYXJhbWV0ZXJzLmF0KGkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBh
cmFtZXRlclZhbHVlID0gJnJlZ2lzdGVyRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEg
KyBpKSk7CisgICAgICAgICAgICBlbWl0TW92ZSh0ZW1wLmdldCgpLCBwYXJhbWV0ZXJWYWx1ZS5n
ZXQoKSk7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyLnNlY29uZCkgeworICAgICAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBjb25kaXRpb24gPSBlbWl0SXNVbmRlZmluZWQobmV3VGVt
cG9yYXJ5KCksIHBhcmFtZXRlclZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
TGFiZWw+IHNraXBEZWZhdWx0UGFyYW1ldGVyQmVjYXVzZU5vdFVuZGVmaW5lZCA9IG5ld0xhYmVs
KCk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBJZkZhbHNlKGNvbmRpdGlvbi5nZXQoKSwgc2tp
cERlZmF1bHRQYXJhbWV0ZXJCZWNhdXNlTm90VW5kZWZpbmVkLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBlbWl0Tm9kZSh0ZW1wLmdldCgpLCBwYXJhbWV0ZXIuc2Vjb25kKTsKKyAgICAgICAgICAg
ICAgICBlbWl0TGFiZWwoc2tpcERlZmF1bHRQYXJhbWV0ZXJCZWNhdXNlTm90VW5kZWZpbmVkLmdl
dCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyYW1ldGVyLmZpcnN0LT5iaW5k
VmFsdWUoKnRoaXMsIHRlbXAuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6
IEFkZCByZWZlcmVuY2VzIGluIGFsbCBkZWZhdWx0IHBhcmFtZXRlciBjb2RlIGluZGljYXRpbmcg
dGhlIHBvcnRpb24gb2YgdGhlIHNwZWMKKyAgICAgICAgLy8gaXQgaXMgaW1wbGVtZW50aW5nLiBU
aGVyZSBpcyBzb21lIHdlaXJkbmVzcyBoZXJlIGluIG91ciBvcmRlcmluZyBiZWNhdXNlCisgICAg
ICAgIC8vIHdlIHJlcXVpcmUgYWxsIGFkZFZhcigpIHRvIHRha2UgcGxhY2UgYmVmb3JlIGFsbG9j
YXRpbmcgdGVtcG9yYXJ5IHJlZ2lzdGVycy4KKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGZ1
bmN0aW9uTm9kZS0+dmFyRGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgICAgIGlmICghZW50cnku
dmFsdWUuaXNWYXIoKSkgLy8gVGhpcyBpcyBlaXRoZXIgYSBwYXJhbWV0ZXIgb3IgY2FsbGVlLgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAocGFyYW1ldGVyU2V0
LmNvbnRhaW5zKGVudHJ5LmtleSkpIHsKKyAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50
ID0gSWRlbnRpZmllcjo6ZnJvbVVpZChtX3ZtLCBlbnRyeS5rZXkuZ2V0KCkpOworICAgICAgICAg
ICAgICAgIFZhcmlhYmxlIHZhciA9IHZhcmlhYmxlKGlkZW50KTsKKyAgICAgICAgICAgICAgICBS
ZWdpc3RlcklEKiBzY29wZSA9IGVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyKTsKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBlbWl0R2V0RnJvbVNjb3BlKG5l
d1RlbXBvcmFyeSgpLCBzY29wZSwgdmFyLCBEb05vdFRocm93SWZOb3RGb3VuZCk7CisgICAgICAg
ICAgICAgICAgdmFsdWVzVG9Nb3ZlSW50b1ZhcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkZW50
LCB2YWx1ZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgY2Fu
IG5vdyBpbml0aWFsaXplIHRoZSAidmFyIiBlbnZpcm9ubWVudCBiZWNhdXNlIHRoZSBwYXJhbWV0
ZXIKKyAgICAgICAgLy8gZW52aXJvbm1lbnQgaGFzIGJlZW4gY3JlYXRlZC4KKyAgICAgICAgaWYg
KG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCisgICAgICAgICAgICBpbml0aWFsaXplVmFy
TGV4aWNhbEVudmlyb25tZW50KHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7CisgICAgfQorCisg
ICAgLy8gRmluYWwgYWN0IG9mIHdlaXJkbmVzcyBmb3IgZGVmYXVsdCBwYXJhbWV0ZXJzLiBJZiBh
ICJ2YXIiIGFsc28KKyAgICAvLyBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIHBhcmFtZXRlciwgaXQg
c2hvdWxkIHN0YXJ0IG91dCBhcyB0aGUKKyAgICAvLyB2YWx1ZSBvZiB0aGF0IHBhcmFtZXRlci4g
Tm90ZSwgdGhvdWdoLCB0aGF0IHRoZXkgd2lsbCBiZSBkaXN0aW5jdAorICAgIC8vIGJpbmRpbmdz
LgorCisgICAgaWYgKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCisgICAgICAgIHB1c2hT
Y29wZWRDb250cm9sRmxvd0NvbnRleHQoKTsKKyAgICBtX3N5bWJvbFRhYmxlU3RhY2suYXBwZW5k
KFN5bWJvbFRhYmxlU3RhY2tFbnRyeXsgU3Ryb25nPFN5bWJvbFRhYmxlPigqbV92bSwgZnVuY3Rp
b25TeW1ib2xUYWJsZSksIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIsIGZhbHNlLCBzeW1i
b2xUYWJsZUNvbnN0YW50SW5kZXggfSk7CisKKyAgICBpZiAoIXBhcmFtZXRlcnMuaGFzRGVmYXVs
dFBhcmFtZXRlclZhbHVlcygpKSB7CisgICAgICAgIC8vIEluaXRpYWxpemUgZGVzdHJ1Y3R1cmlu
ZyBwYXJhbWV0ZXJzIHRoZSBvbGQgd2F5IGFzIGlmIHdlIGRvbid0IGhhdmUgYW55IGRlZmF1bHQg
cGFyYW1ldGVyIHZhbHVlcy4KKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBkZWZhdWx0IHBhcmFtZXRl
ciB2YWx1ZXMsIHdlIGhhbmRsZSB0aGlzIGNhc2UgYWJvdmUuCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBEZXN0
cnVjdHVyaW5nUGF0dGVybk5vZGUqIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpLmZpcnN0Owor
ICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpIHsKKyAgICAgICAgICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcGFyYW1ldGVyVmFsdWUgPSAmcmVnaXN0ZXJGb3Iodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpKTsKKyAgICAgICAgICAgICAgICBwYXR0ZXJu
LT5iaW5kVmFsdWUoKnRoaXMsIHBhcmFtZXRlclZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXNU
b01vdmVJbnRvVmFycy5zaXplKCk7IGkrKykgeworICAgICAgICBWYXJpYWJsZSB2YXIgPSB2YXJp
YWJsZSh2YWx1ZXNUb01vdmVJbnRvVmFyc1tpXS5maXJzdCk7CisgICAgICAgIFJlZ2lzdGVySUQq
IHNjb3BlID0gZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOworICAgICAgICBlbWl0UHV0
VG9TY29wZShzY29wZSwgdmFyLCB2YWx1ZXNUb01vdmVJbnRvVmFyc1tpXS5zZWNvbmQuZ2V0KCks
IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKKyAgICB9Cit9CisKIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcigpCiB7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkpOwpAQCAtNTczLDYgKzY1MSwyMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6aW5pdGlhbGl6CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CiAKK3ZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmluaXRpYWxpemVWYXJMZXhpY2FsRW52aXJvbm1lbnQoaW50IHN5bWJvbFRh
YmxlQ29uc3RhbnRJbmRleCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2xleGljYWxFbnZpcm9u
bWVudFJlZ2lzdGVyKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0QWN0aXZhdGlvblJlZ2lzdGVyKG1f
bGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICBlbWl0
T3Bjb2RlKG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7CisgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUoanNVbmRlZmluZWQoKSktPmluZGV4KCkpOwor
CisgICAgZW1pdE9wY29kZShvcF9tb3YpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29w
ZVJlZ2lzdGVyKCktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGlj
YWxFbnZpcm9ubWVudFJlZ2lzdGVyLT5pbmRleCgpKTsKK30KKwogVW5pcXVlZFN0cmluZ0ltcGwq
IEJ5dGVjb2RlR2VuZXJhdG9yOjp2aXNpYmxlTmFtZUZvclBhcmFtZXRlcihEZXN0cnVjdHVyaW5n
UGF0dGVybk5vZGUqIHBhdHRlcm4pCiB7CiAgICAgaWYgKHBhdHRlcm4tPmlzQmluZGluZ05vZGUo
KSkgewpAQCAtMTI1OCw5ICsxMzUxLDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRMb2FkRwogICAgIHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3BlKFZhcmlhYmxlRW52aXJvbm1lbnRO
b2RlKiBub2RlLCBib29sIGNhbk9wdGltaXplVERaQ2hlY2tzLCBSZWdpc3RlcklEKiogY29uc3Rh
bnRTeW1ib2xUYWJsZVJlc3VsdCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hMZXhpY2Fs
U2NvcGVJbnRlcm5hbChWYXJpYWJsZUVudmlyb25tZW50JiBlbnZpcm9ubWVudCwgYm9vbCBjYW5P
cHRpbWl6ZVREWkNoZWNrcywgUmVnaXN0ZXJJRCoqIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQp
CiB7Ci0gICAgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQgPSBub2RlLT5sZXhpY2Fs
VmFyaWFibGVzKCk7CiAgICAgaWYgKCFlbnZpcm9ubWVudC5zaXplKCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMTMzNCw2ICsxNDI2LDEyIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hM
ZXhpY2FsU2NvcGUKICAgICB9CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hMZXhp
Y2FsU2NvcGUoVmFyaWFibGVFbnZpcm9ubWVudE5vZGUqIG5vZGUsIGJvb2wgY2FuT3B0aW1pemVU
RFpDaGVja3MsIFJlZ2lzdGVySUQqKiBjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0KQoreworICAg
IFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50ID0gbm9kZS0+bGV4aWNhbFZhcmlhYmxl
cygpOworICAgIHB1c2hMZXhpY2FsU2NvcGVJbnRlcm5hbChlbnZpcm9ubWVudCwgY2FuT3B0aW1p
emVURFpDaGVja3MsIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQpOworfQorCiB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjpwb3BMZXhpY2FsU2NvcGUoVmFyaWFibGVFbnZpcm9ubWVudE5vZGUqIG5v
ZGUpCiB7CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQgPSBub2RlLT5sZXhp
Y2FsVmFyaWFibGVzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxODcyMDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYyMSw2ICs2MjEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBPcGNvZGVJRCBsYXN0T3Bjb2RlSUQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RPcGNvZGVJRDsg
fQogCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBwdXNoTGV4aWNhbFNjb3BlSW50ZXJuYWwo
VmFyaWFibGVFbnZpcm9ubWVudCYsIGJvb2wgY2FuT3B0aW1pemVURFpDaGVja3MsIFJlZ2lzdGVy
SUQqKiBjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0KTsKKyAgICBwdWJsaWM6CiAgICAgICAgIHZv
aWQgcHVzaExleGljYWxTY29wZShWYXJpYWJsZUVudmlyb25tZW50Tm9kZSosIGJvb2wgY2FuT3B0
aW1pemVURFpDaGVja3MsIFJlZ2lzdGVySUQqKiBjb25zdGFudFN5bWJvbFRhYmxlUmVzdWx0ID0g
bnVsbHB0cik7CiAgICAgICAgIHZvaWQgcG9wTGV4aWNhbFNjb3BlKFZhcmlhYmxlRW52aXJvbm1l
bnROb2RlKik7CiAgICAgICAgIHZvaWQgcHJlcGFyZUxleGljYWxTY29wZUZvck5leHRGb3JMb29w
SXRlcmF0aW9uKFZhcmlhYmxlRW52aXJvbm1lbnROb2RlKiwgUmVnaXN0ZXJJRCogbG9vcFN5bWJv
bFRhYmxlKTsKQEAgLTcwOSw2ICs3MTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdENvbnN0cnVjdFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBmdW5jLCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywg
UmVnaXN0ZXJJRCogZmlyc3RGcmVlUmVnaXN0ZXIsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQs
IFJlZ2lzdGVySUQqIHByb2ZpbGVIb29rUmVnaXN0ZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdEVuZCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsVmFyYXJncyhPcGNv
ZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklEKiB0aGlz
UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGFyZ3VtZW50cywgUmVnaXN0ZXJJRCogZmlyc3RGcmVlUmVn
aXN0ZXIsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIFJlZ2lzdGVySUQqIHByb2ZpbGVIb29r
UmVnaXN0ZXIsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAKKyAgICAg
ICAgdm9pZCBpbml0aWFsaXplVmFyTGV4aWNhbEVudmlyb25tZW50KGludCBzeW1ib2xUYWJsZUNv
bnN0YW50SW5kZXgpOworICAgICAgICB2b2lkIGluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2soRnVuY3Rpb25QYXJhbWV0ZXJzJiwgRnVuY3Rp
b25Ob2RlKiwgU3ltYm9sVGFibGUqLCBpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBjb25z
dCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKFVuaXF1ZWRTdHJpbmdJbXBsKik+JiBjYXB0dXJlcyk7CisK
ICAgICBwdWJsaWM6CiAgICAgICAgIEpTU3RyaW5nKiBhZGRTdHJpbmdDb25zdGFudChjb25zdCBJ
ZGVudGlmaWVyJik7CiAgICAgICAgIEpTVGVtcGxhdGVSZWdpc3RyeUtleSogYWRkVGVtcGxhdGVS
ZWdpc3RyeUtleUNvbnN0YW50KGNvbnN0IFRlbXBsYXRlUmVnaXN0cnlLZXkmKTsKQEAgLTc2Nyw3
ICs3NzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFN3aXRjaEluZm8+IG1f
c3dpdGNoQ29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZvcklu
Q29udGV4dD4+IG1fZm9ySW5Db250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxUcnlDb250ZXh0
PiBtX3RyeUNvbnRleHRTdGFjazsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8UmVn
aXN0ZXJJRD4sIGNvbnN0IERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSo+PiBtX2Rlc3RydWN0dXJp
bmdQYXJhbWV0ZXJzOwogICAgICAgICBlbnVtIEZ1bmN0aW9uVmFyaWFibGVUeXBlIDogdWludDhf
dCB7IE5vcm1hbEZ1bmN0aW9uVmFyaWFibGUsIEdsb2JhbEZ1bmN0aW9uVmFyaWFibGUgfTsKICAg
ICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxGdW5jdGlvbkJvZHlOb2RlKiwgRnVuY3Rpb25WYXJpYWJs
ZVR5cGU+PiBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZTsKICAgICAgICAgYm9vbCBtX25lZWRUb0lu
aXRpYWxpemVBcmd1bWVudHMgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTg3MjAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDE5LDkgKzMwMTksOSBAQCB2b2lkIEZ1bmN0aW9uTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlCiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmls
ZXIoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFyYW1ldGVycy0+c2l6
ZSgpOyBpKyspIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgRGVzdHJ1Y3R1cmluZyBh
c3NpZ25tZW50cyBpbnRvIGFyZ3VtZW50cy4KLSAgICAgICAgICAgIGlmICghbV9wYXJhbWV0ZXJz
LT5hdChpKS0+aXNCaW5kaW5nTm9kZSgpKQorICAgICAgICAgICAgaWYgKCFtX3BhcmFtZXRlcnMt
PmF0KGkpLmZpcnN0LT5pc0JpbmRpbmdOb2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBCaW5kaW5nTm9kZSogcGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8QmluZGlu
Z05vZGUqPihtX3BhcmFtZXRlcnMtPmF0KGkpKTsKKyAgICAgICAgICAgIEJpbmRpbmdOb2RlKiBw
YXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KG1fcGFyYW1ldGVycy0+YXQoaSku
Zmlyc3QpOwogICAgICAgICAgICAgUmVnaXN0ZXJJRCByZWcoQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldChpKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKCZyZWcsIFBy
b2ZpbGVUeXBlQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50LCBudWxscHRyKTsKICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8ocGFyYW1ldGVyLT5kaXZv
dFN0YXJ0KCksIHBhcmFtZXRlci0+ZGl2b3RFbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4NzIwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4NywxMCArNjg3LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFsKEV4ZWNT
dGF0ZSogZXhlYywgRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewotCi0gICAgQVNTRVJUX1VOVVNF
RChleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUKLSAg
ICAgICAgfHwgIWV4ZWMtPmNvZGVCbG9jaygpLT5uZWVkc0FjdGl2YXRpb24oKQotICAgICAgICB8
fCBleGVjLT5oYXNBY3RpdmF0aW9uKCkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKIAogICAg
IGV4ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE4NzIwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNyAr
NDE4LDEwIEBAIHB1YmxpYzoKICAgICBFbGVtZW50Tm9kZSogY3JlYXRlRWxlbWVudExpc3QoRWxl
bWVudE5vZGUqIGVsZW1zLCBpbnQgZWxpc2lvbnMsIEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEVsZW1lbnROb2RlKGVsZW1zLCBlbGlzaW9ucywgZXhw
cik7IH0KIAogICAgIEZvcm1hbFBhcmFtZXRlckxpc3QgY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlz
dCgpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25QYXJhbWV0ZXJzKCk7IH0K
LSAgICB2b2lkIGFwcGVuZFBhcmFtZXRlcihGb3JtYWxQYXJhbWV0ZXJMaXN0IGxpc3QsIERlc3Ry
dWN0dXJpbmdQYXR0ZXJuIHBhdHRlcm4pIHsgbGlzdC0+YXBwZW5kKHBhdHRlcm4pOyB9CisgICAg
dm9pZCBhcHBlbmRQYXJhbWV0ZXIoRm9ybWFsUGFyYW1ldGVyTGlzdCBsaXN0LCBEZXN0cnVjdHVy
aW5nUGF0dGVybiBwYXR0ZXJuLCBFeHByZXNzaW9uTm9kZSogZGVmYXVsdFZhbHVlKSAKKyAgICB7
IAorICAgICAgICBsaXN0LT5hcHBlbmQocGF0dGVybiwgZGVmYXVsdFZhbHVlKTsgCisgICAgfQog
CiAgICAgQ2FzZUNsYXVzZU5vZGUqIGNyZWF0ZUNsYXVzZShFeHByZXNzaW9uTm9kZSogZXhwciwg
SlNDOjpTb3VyY2VFbGVtZW50cyogc3RhdGVtZW50cykgeyByZXR1cm4gbmV3IChtX3BhcnNlckFy
ZW5hKSBDYXNlQ2xhdXNlTm9kZShleHByLCBzdGF0ZW1lbnRzKTsgfQogICAgIENsYXVzZUxpc3RO
b2RlKiBjcmVhdGVDbGF1c2VMaXN0KENhc2VDbGF1c2VOb2RlKiBjbGF1c2UpIHsgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYSkgQ2xhdXNlTGlzdE5vZGUoY2xhdXNlKTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTg3MjAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjI1LDEyICsx
NjI1LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgRnVuY3Rpb25Q
YXJhbWV0ZXJzKCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF0dGVybnMuc2l6ZSgpOyB9Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgRGVz
dHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBhdCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9wYXR0
ZXJuc1tpbmRleF07IH0KLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChEZXN0cnVj
dHVyaW5nUGF0dGVybk5vZGUqIHBhdHRlcm4pIHsgQVNTRVJUKHBhdHRlcm4pOyBtX3BhdHRlcm5z
LmFwcGVuZChwYXR0ZXJuKTsgfQorICAgICAgICBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFpcjxEZXN0
cnVjdHVyaW5nUGF0dGVybk5vZGUqLCBFeHByZXNzaW9uTm9kZSo+IGF0KHVuc2lnbmVkIGluZGV4
KSB7IHJldHVybiBtX3BhdHRlcm5zW2luZGV4XTsgfQorICAgICAgICBib29sIGhhc0RlZmF1bHRQ
YXJhbWV0ZXJWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1
ZXM7IH0KKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChEZXN0cnVjdHVyaW5nUGF0
dGVybk5vZGUqIHBhdHRlcm4sIEV4cHJlc3Npb25Ob2RlKiBkZWZhdWx0VmFsdWUpIAorICAgICAg
ICB7IAorICAgICAgICAgICAgQVNTRVJUKHBhdHRlcm4pOyAKKyAgICAgICAgICAgIG1fcGF0dGVy
bnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHBhdHRlcm4sIGRlZmF1bHRWYWx1ZSkpOworICAgICAg
ICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkKKyAgICAgICAgICAgICAgICBtX2hhc0RlZmF1bHRQYXJh
bWV0ZXJWYWx1ZXMgPSB0cnVlOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogCi0gICAgICAg
IFZlY3RvcjxEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqLCAzPiBtX3BhdHRlcm5zOworICAgICAg
ICBWZWN0b3I8c3RkOjpwYWlyPERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSosIEV4cHJlc3Npb25O
b2RlKj4sIDM+IG1fcGF0dGVybnM7CisgICAgICAgIGJvb2wgbV9oYXNEZWZhdWx0UGFyYW1ldGVy
VmFsdWVzIHsgZmFsc2UgfTsKICAgICB9OwogCiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZSBm
aW5hbCA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgUGFyc2VyQXJlbmFEZWxldGFibGUg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24g
MTg3MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NzYsNyArNTc2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgbGFzdElkZW50ID0gMDsKLSAgICAgICAgICAgIGF1dG8gcGF0dGVybiA9IHBhcnNlRGVzdHJ1
Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwgZGVzdHJ1Y3R1cmluZ0tpbmRGcm9tRGVjbGFyYXRpb25U
eXBlKGRlY2xhcmF0aW9uVHlwZSksIGFzc2lnbm1lbnRDb250ZXh0KTsKKyAgICAgICAgICAgIGF1
dG8gcGF0dGVybiA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwgZGVzdHJ1Y3R1
cmluZ0tpbmRGcm9tRGVjbGFyYXRpb25UeXBlKGRlY2xhcmF0aW9uVHlwZSksIG51bGxwdHIsIG51
bGxwdHIsIGFzc2lnbm1lbnRDb250ZXh0KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhdHRl
cm4sICJDYW5ub3QgcGFyc2UgdGhpcyBkZXN0cnVjdHVyaW5nIHBhdHRlcm4iKTsKICAgICAgICAg
ICAgIGhhc0luaXRpYWxpemVyID0gbWF0Y2goRVFVQUwpOwogICAgICAgICAgICAgZmFpbElmVHJ1
ZShkZWNsYXJhdGlvbkxpc3RDb250ZXh0ID09IFZhckRlY2xhcmF0aW9uQ29udGV4dCAmJiAhaGFz
SW5pdGlhbGl6ZXIsICJFeHBlY3RlZCBhbiBpbml0aWFsaXplciBpbiBkZXN0cnVjdHVyaW5nIHZh
cmlhYmxlIGRlY2xhcmF0aW9uIik7CkBAIC02MDQsMjEgKzYwNCwyMiBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhl
clR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjdHVyaW5nUGF0
dGVybiBQYXJzZXI8TGV4ZXJUeXBlPjo6Y3JlYXRlQmluZGluZ1BhdHRlcm4oVHJlZUJ1aWxkZXIm
IGNvbnRleHQsIERlc3RydWN0dXJpbmdLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIG5hbWUs
IGludCBkZXB0aCwgSlNUb2tlbiB0b2tlbiwgQXNzaWdubWVudENvbnRleHQgYmluZGluZ0NvbnRl
eHQpCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVy
biBQYXJzZXI8TGV4ZXJUeXBlPjo6Y3JlYXRlQmluZGluZ1BhdHRlcm4oVHJlZUJ1aWxkZXImIGNv
bnRleHQsIERlc3RydWN0dXJpbmdLaW5kIGtpbmQsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGlu
dCBkZXB0aCwgSlNUb2tlbiB0b2tlbiwgQXNzaWdubWVudENvbnRleHQgYmluZGluZ0NvbnRleHQs
IGNvbnN0IElkZW50aWZpZXIqKiBkdXBsaWNhdGVJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCgh
bmFtZS5pc051bGwoKSk7CiAgICAgCiAgICAgQVNTRVJUKG5hbWUuaW1wbCgpLT5pc0F0b21pYygp
IHx8IG5hbWUuaW1wbCgpLT5pc1N5bWJvbCgpKTsKLSAgICBpZiAoZGVwdGgpIHsKLSAgICAgICAg
aWYgKGtpbmQgPT0gRGVzdHJ1Y3R1cmVUb1ZhcmlhYmxlcykKLSAgICAgICAgICAgIGZhaWxJZlRy
dWVJZlN0cmljdChkZWNsYXJlVmFyaWFibGUoJm5hbWUpICYgRGVjbGFyYXRpb25SZXN1bHQ6Oklu
dmFsaWRTdHJpY3RNb2RlLCAiQ2Fubm90IGRlY29uc3RydWN0IHRvIGEgdmFyaWFibGUgbmFtZWQg
JyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICBlbHNlIGlmIChr
aW5kID09IERlc3RydWN0dXJlVG9MZXQgfHwga2luZCA9PSBEZXN0cnVjdHVyZVRvQ29uc3QpIHsK
LSAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGRl
Y2xhcmVWYXJpYWJsZSgmbmFtZSwga2luZCA9PSBEZXN0cnVjdHVyZVRvTGV0ID8gRGVjbGFyYXRp
b25UeXBlOjpMZXREZWNsYXJhdGlvbiA6IERlY2xhcmF0aW9uVHlwZTo6Q29uc3REZWNsYXJhdGlv
bik7Ci0gICAgICAgICAgICBpZiAoZGVjbGFyYXRpb25SZXN1bHQgIT0gRGVjbGFyYXRpb25SZXN1
bHQ6OlZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KGRlY2xhcmF0
aW9uUmVzdWx0ICYgRGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWRTdHJpY3RNb2RlLCAiQ2Fubm90
IGRlc3RydWN0dXJlIHRvIGEgdmFyaWFibGUgbmFtZWQgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBz
dHJpY3QgbW9kZSIpOwotICAgICAgICAgICAgICAgIGZhaWxJZlRydWUoZGVjbGFyYXRpb25SZXN1
bHQgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZER1cGxpY2F0ZURlY2xhcmF0aW9uLCAiQ2Fu
bm90IGRlY2xhcmUgYSBsZXhpY2FsIHZhcmlhYmxlIHR3aWNlOiAnIiwgbmFtZS5pbXBsKCksICIn
Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBEZXN0cnVjdHVy
ZVRvUGFyYW1ldGVycykgeworCisgICAgaWYgKGtpbmQgPT0gRGVzdHJ1Y3R1cmVUb1ZhcmlhYmxl
cykKKyAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KGRlY2xhcmVWYXJpYWJsZSgmbmFtZSkgJiBE
ZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZFN0cmljdE1vZGUsICJDYW5ub3QgZGVjbGFyZSBhIHZh
cmlhYmxlIG5hbWVkICciLCBuYW1lLmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICBl
bHNlIGlmIChraW5kID09IERlc3RydWN0dXJlVG9MZXQgfHwga2luZCA9PSBEZXN0cnVjdHVyZVRv
Q29uc3QpIHsKKyAgICAgICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmF0aW9uUmVzdWx0
ID0gZGVjbGFyZVZhcmlhYmxlKCZuYW1lLCBraW5kID09IERlc3RydWN0dXJlVG9MZXQgPyBEZWNs
YXJhdGlvblR5cGU6OkxldERlY2xhcmF0aW9uIDogRGVjbGFyYXRpb25UeXBlOjpDb25zdERlY2xh
cmF0aW9uKTsKKyAgICAgICAgaWYgKGRlY2xhcmF0aW9uUmVzdWx0ICE9IERlY2xhcmF0aW9uUmVz
dWx0OjpWYWxpZCkgeworICAgICAgICAgICAgZmFpbElmVHJ1ZUlmU3RyaWN0KGRlY2xhcmF0aW9u
UmVzdWx0ICYgRGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWRTdHJpY3RNb2RlLCAiQ2Fubm90IGRl
c3RydWN0dXJlIHRvIGEgdmFyaWFibGUgbmFtZWQgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBzdHJp
Y3QgbW9kZSIpOworICAgICAgICAgICAgZmFpbElmVHJ1ZShkZWNsYXJhdGlvblJlc3VsdCAmIERl
Y2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkRHVwbGljYXRlRGVjbGFyYXRpb24sICJDYW5ub3QgZGVj
bGFyZSBhIGxleGljYWwgdmFyaWFibGUgdHdpY2U6ICciLCBuYW1lLmltcGwoKSwgIiciKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSBpZiAoa2luZCA9PSBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycykg
eworICAgICAgICBpZiAoZGVwdGgpIHsKICAgICAgICAgICAgIGF1dG8gYmluZGluZ1Jlc3VsdCA9
IGRlY2xhcmVCb3VuZFBhcmFtZXRlcigmbmFtZSk7CiAgICAgICAgICAgICBpZiAoYmluZGluZ1Jl
c3VsdCA9PSBTY29wZTo6U3RyaWN0QmluZGluZ0ZhaWxlZCAmJiBzdHJpY3RNb2RlKCkpIHsKICAg
ICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNFdmFsT3JBcmd1bWVudHMoJm5hbWUp
LCAiQ2Fubm90IGRlc3RydWN0dXJlIHRvIGEgcGFyYW1ldGVyIG5hbWUgJyIsIG5hbWUuaW1wbCgp
LCAiJyBpbiBzdHJpY3QgbW9kZSIpOwpAQCAtNjM1LDE4ICs2MzYsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAgICAgICAgICAgICAgICAgIHNlbWFudGlj
RmFpbCgiQ2Fubm90IGRlc3RydWN0dXJlIHRvICciLCBuYW1lLmltcGwoKSwgIicgYXMgaXQgaGFz
IGFscmVhZHkgYmVlbiBkZWNsYXJlZCIpOwogICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgi
Q2Fubm90IGRlc3RydWN0dXJlIHRvIGEgcGFyYW1ldGVyIG5hbWVkICciLCBuYW1lLmltcGwoKSwg
IiciKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKGtpbmQgPT0gRGVzdHJ1Y3R1cmVUb1ZhcmlhYmxlcykKLSAgICAgICAgICAgIGZhaWxJZlRy
dWVJZlN0cmljdChkZWNsYXJlVmFyaWFibGUoJm5hbWUpICYgRGVjbGFyYXRpb25SZXN1bHQ6Oklu
dmFsaWRTdHJpY3RNb2RlLCAiQ2Fubm90IGRlY2xhcmUgYSB2YXJpYWJsZSBuYW1lZCAnIiwgbmFt
ZS5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgIGVsc2UgaWYgKGtpbmQgPT0g
RGVzdHJ1Y3R1cmVUb0xldCB8fCBraW5kID09IERlc3RydWN0dXJlVG9Db25zdCkgewotICAgICAg
ICAgICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmF0aW9uUmVzdWx0ID0gZGVjbGFyZVZh
cmlhYmxlKCZuYW1lLCBraW5kID09IERlc3RydWN0dXJlVG9MZXQgPyBEZWNsYXJhdGlvblR5cGU6
OkxldERlY2xhcmF0aW9uIDogRGVjbGFyYXRpb25UeXBlOjpDb25zdERlY2xhcmF0aW9uKTsKLSAg
ICAgICAgICAgIGlmIChkZWNsYXJhdGlvblJlc3VsdCAhPSBEZWNsYXJhdGlvblJlc3VsdDo6VmFs
aWQpIHsKLSAgICAgICAgICAgICAgICBmYWlsSWZUcnVlSWZTdHJpY3QoZGVjbGFyYXRpb25SZXN1
bHQgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZFN0cmljdE1vZGUsICJDYW5ub3QgZGVzdHJ1
Y3R1cmUgdG8gYSB2YXJpYWJsZSBuYW1lZCAnIiwgbmFtZS5pbXBsKCksICInIGluIHN0cmljdCBt
b2RlIik7Ci0gICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShkZWNsYXJhdGlvblJlc3VsdCAmIERl
Y2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkRHVwbGljYXRlRGVjbGFyYXRpb24sICJDYW5ub3QgZGVj
bGFyZSBhIGxleGljYWwgdmFyaWFibGUgdHdpY2U6ICciLCBuYW1lLmltcGwoKSwgIiciKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChraW5kID09IERlc3RydWN0dXJlVG9QYXJh
bWV0ZXJzKSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBEZWNsYXJhdGlvblJlc3Vs
dE1hc2sgZGVjbGFyYXRpb25SZXN1bHQgPSBkZWNsYXJlUGFyYW1ldGVyKCZuYW1lKTsKICAgICAg
ICAgICAgIGlmICgoZGVjbGFyYXRpb25SZXN1bHQgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxp
ZFN0cmljdE1vZGUpICYmIHN0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgICAgIHNlbWFudGlj
RmFpbElmVHJ1ZShpc0V2YWxPckFyZ3VtZW50cygmbmFtZSksICJDYW5ub3QgZGVzdHJ1Y3R1cmUg
dG8gYSBwYXJhbWV0ZXIgbmFtZSAnIiwgbmFtZS5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7
CkBAIC02NTcsNiArNjQ3LDEzIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURl
c3RydWMKICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVjbGFyZSBh
IHBhcmFtZXRlciBuYW1lZCAnIiwgbmFtZS5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIGFzIGl0
IGhhcyBhbHJlYWR5IGJlZW4gZGVjbGFyZWQiKTsKICAgICAgICAgICAgICAgICBzZW1hbnRpY0Zh
aWwoIkNhbm5vdCBkZWNsYXJlIGEgcGFyYW1ldGVyIG5hbWVkICciLCBuYW1lLmltcGwoKSwgIicg
aW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWNsYXJh
dGlvblJlc3VsdCAmIERlY2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkRHVwbGljYXRlRGVjbGFyYXRp
b24pIHsKKyAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhbHdheXMgYW4gZXJyb3IgdG8gZGVm
aW5lIGEgZHVwbGljYXRlIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAvLyBJdCdzIG9ubHkg
YW4gZXJyb3Igd2hlbiB0aGVyZSBhcmUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLgorICAgICAg
ICAgICAgICAgIC8vIFdlIG5vdGUgdGhpcyB2YWx1ZSBub3cgc28gd2UgY2FuIGNoZWNrIGl0IGxh
dGVyLgorICAgICAgICAgICAgICAgIGlmIChkdXBsaWNhdGVJZGVudGlmaWVyKQorICAgICAgICAg
ICAgICAgICAgICAqZHVwbGljYXRlSWRlbnRpZmllciA9ICZuYW1lOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJpbmRpbmdMb2NhdGlv
bih0b2tlbi5tX2xvY2F0aW9uLCBuYW1lLCB0b2tlbi5tX3N0YXJ0UG9zaXRpb24sIHRva2VuLm1f
ZW5kUG9zaXRpb24sIGJpbmRpbmdDb250ZXh0KTsKQEAgLTY5NCwxMSArNjkxLDExIEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUUKIHRlbXBsYXRlIDx0eXBlbmFtZSBM
ZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjdHVyaW5n
UGF0dGVybiBQYXJzZXI8TGV4ZXJUeXBlPjo6dHJ5UGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybkV4
cHJlc3Npb24oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEFzc2lnbm1lbnRDb250ZXh0IGJpbmRpbmdD
b250ZXh0KQogewotICAgIHJldHVybiBwYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQs
IERlc3RydWN0dXJlVG9FeHByZXNzaW9ucywgYmluZGluZ0NvbnRleHQpOworICAgIHJldHVybiBw
YXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQsIERlc3RydWN0dXJlVG9FeHByZXNzaW9u
cywgbnVsbHB0ciwgbnVsbHB0ciwgYmluZGluZ0NvbnRleHQpOwogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1
Y3R1cmluZ1BhdHRlcm4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRl
cm4oVHJlZUJ1aWxkZXImIGNvbnRleHQsIERlc3RydWN0dXJpbmdLaW5kIGtpbmQsIEFzc2lnbm1l
bnRDb250ZXh0IGJpbmRpbmdDb250ZXh0LCBpbnQgZGVwdGgpCit0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVybiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VEZXN0cnVjdHVyaW5nUGF0dGVybihUcmVlQnVpbGRlciYgY29udGV4dCwgRGVzdHJ1Y3R1cmlu
Z0tpbmQga2luZCwgY29uc3QgSWRlbnRpZmllcioqIGR1cGxpY2F0ZUlkZW50aWZpZXIsIGJvb2wq
IGhhc0Rlc3RydWN0dXJpbmdQYXR0ZXJuLCBBc3NpZ25tZW50Q29udGV4dCBiaW5kaW5nQ29udGV4
dCwgaW50IGRlcHRoKQogewogICAgIGZhaWxJZlN0YWNrT3ZlcmZsb3coKTsKICAgICBpbnQgbm9u
TEhTQ291bnQgPSBtX25vbkxIU0NvdW50OwpAQCAtNzA5LDYgKzcwNiw5IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWMKICAgICAgICAgYXV0byBhcnJheVBhdHRlcm4g
PSBjb250ZXh0LmNyZWF0ZUFycmF5UGF0dGVybihtX3Rva2VuLm1fbG9jYXRpb24pOwogICAgICAg
ICBuZXh0KCk7CiAKKyAgICAgICAgaWYgKGhhc0Rlc3RydWN0dXJpbmdQYXR0ZXJuKQorICAgICAg
ICAgICAgKmhhc0Rlc3RydWN0dXJpbmdQYXR0ZXJuID0gdHJ1ZTsKKwogICAgICAgICBib29sIHJl
c3RFbGVtZW50V2FzRm91bmQgPSBmYWxzZTsKIAogICAgICAgICBkbyB7CkBAIC03MjQsNyArNzI0
LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKG1hdGNoKERPVERPVERPVCkpKSB7CiAgICAgICAgICAgICAgICAgSlNU
b2tlbkxvY2F0aW9uIGxvY2F0aW9uID0gbV90b2tlbi5tX2xvY2F0aW9uOwogICAgICAgICAgICAg
ICAgIG5leHQoKTsKLSAgICAgICAgICAgICAgICBhdXRvIGlubmVyUGF0dGVybiA9IHBhcnNlRGVz
dHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwga2luZCwgYmluZGluZ0NvbnRleHQsIGRlcHRoICsg
MSk7CisgICAgICAgICAgICAgICAgYXV0byBpbm5lclBhdHRlcm4gPSBwYXJzZURlc3RydWN0dXJp
bmdQYXR0ZXJuKGNvbnRleHQsIGtpbmQsIGR1cGxpY2F0ZUlkZW50aWZpZXIsIGhhc0Rlc3RydWN0
dXJpbmdQYXR0ZXJuLCBiaW5kaW5nQ29udGV4dCwgZGVwdGggKyAxKTsKICAgICAgICAgICAgICAg
ICBpZiAoa2luZCA9PSBEZXN0cnVjdHVyZVRvRXhwcmVzc2lvbnMgJiYgIWlubmVyUGF0dGVybikK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgZmFpbElmRmFs
c2UoaW5uZXJQYXR0ZXJuLCAiQ2Fubm90IHBhcnNlIHRoaXMgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJu
Iik7CkBAIC03MzcsMTIgKzczNywxMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVEZXN0cnVjCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBs
b2NhdGlvbiA9IG1fdG9rZW4ubV9sb2NhdGlvbjsKLSAgICAgICAgICAgIGF1dG8gaW5uZXJQYXR0
ZXJuID0gcGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBraW5kLCBiaW5kaW5nQ29u
dGV4dCwgZGVwdGggKyAxKTsKKyAgICAgICAgICAgIGF1dG8gaW5uZXJQYXR0ZXJuID0gcGFyc2VE
ZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBraW5kLCBkdXBsaWNhdGVJZGVudGlmaWVyLCBo
YXNEZXN0cnVjdHVyaW5nUGF0dGVybiwgYmluZGluZ0NvbnRleHQsIGRlcHRoICsgMSk7CiAgICAg
ICAgICAgICBpZiAoa2luZCA9PSBEZXN0cnVjdHVyZVRvRXhwcmVzc2lvbnMgJiYgIWlubmVyUGF0
dGVybikKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGZhaWxJZkZhbHNl
KGlubmVyUGF0dGVybiwgIkNhbm5vdCBwYXJzZSB0aGlzIGRlc3RydWN0dXJpbmcgcGF0dGVybiIp
OwogICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gZGVmYXVsdFZhbHVlID0gcGFyc2VEZWZhdWx0
VmFsdWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0KTsKLSAgICAgICAgICAgIGZhaWxJ
ZlRydWUoa2luZCA9PSBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycyAmJiBkZWZhdWx0VmFsdWUsICAi
RGVmYXVsdCB2YWx1ZXMgaW4gZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXJzIGFyZSBjdXJyZW50bHkg
bm90IHN1cHBvcnRlZCIpOwogICAgICAgICAgICAgY29udGV4dC5hcHBlbmRBcnJheVBhdHRlcm5F
bnRyeShhcnJheVBhdHRlcm4sIGxvY2F0aW9uLCBpbm5lclBhdHRlcm4sIGRlZmF1bHRWYWx1ZSk7
CiAgICAgICAgIH0gd2hpbGUgKGNvbnN1bWUoQ09NTUEpKTsKIApAQCAtNzU3LDYgKzc1Niw5IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWMKICAgICAgICAgYXV0byBv
YmplY3RQYXR0ZXJuID0gY29udGV4dC5jcmVhdGVPYmplY3RQYXR0ZXJuKG1fdG9rZW4ubV9sb2Nh
dGlvbik7CiAgICAgICAgIG5leHQoKTsKIAorICAgICAgICBpZiAoaGFzRGVzdHJ1Y3R1cmluZ1Bh
dHRlcm4pCisgICAgICAgICAgICAqaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4gPSB0cnVlOworCiAg
ICAgICAgIGRvIHsKICAgICAgICAgICAgIGJvb2wgd2FzU3RyaW5nID0gZmFsc2U7CiAKQEAgLTc3
Miw5ICs3NzQsOSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAg
ICAgICAgICAgICAgICAgSlNUb2tlbiBpZGVudGlmaWVyVG9rZW4gPSBtX3Rva2VuOwogICAgICAg
ICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZShDT0xPTikpCi0g
ICAgICAgICAgICAgICAgICAgIGlubmVyUGF0dGVybiA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRl
cm4oY29udGV4dCwga2luZCwgYmluZGluZ0NvbnRleHQsIGRlcHRoICsgMSk7CisgICAgICAgICAg
ICAgICAgICAgIGlubmVyUGF0dGVybiA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4
dCwga2luZCwgZHVwbGljYXRlSWRlbnRpZmllciwgaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4sIGJp
bmRpbmdDb250ZXh0LCBkZXB0aCArIDEpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgaW5uZXJQYXR0ZXJuID0gY3JlYXRlQmluZGluZ1BhdHRlcm4oY29udGV4dCwg
a2luZCwgKnByb3BlcnR5TmFtZSwgZGVwdGgsIGlkZW50aWZpZXJUb2tlbiwgYmluZGluZ0NvbnRl
eHQpOworICAgICAgICAgICAgICAgICAgICBpbm5lclBhdHRlcm4gPSBjcmVhdGVCaW5kaW5nUGF0
dGVybihjb250ZXh0LCBraW5kLCAqcHJvcGVydHlOYW1lLCBkZXB0aCArIDEsIGlkZW50aWZpZXJU
b2tlbiwgYmluZGluZ0NvbnRleHQsIGR1cGxpY2F0ZUlkZW50aWZpZXIpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBKU1Rva2VuVHlwZSB0b2tlblR5cGUgPSBtX3Rva2Vu
Lm1fdHlwZTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CkBAIC04
MDUsMTMgKzgwNywxMiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVj
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBmYWlsV2l0aE1lc3Nh
Z2UoIkV4cGVjdGVkIGEgJzonIHByaW9yIHRvIGEgbmFtZWQgZGVzdHJ1Y3R1cmluZyBwcm9wZXJ0
eSIpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbm5lclBhdHRlcm4gPSBw
YXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQsIGtpbmQsIGJpbmRpbmdDb250ZXh0LCBk
ZXB0aCArIDEpOworICAgICAgICAgICAgICAgIGlubmVyUGF0dGVybiA9IHBhcnNlRGVzdHJ1Y3R1
cmluZ1BhdHRlcm4oY29udGV4dCwga2luZCwgZHVwbGljYXRlSWRlbnRpZmllciwgaGFzRGVzdHJ1
Y3R1cmluZ1BhdHRlcm4sIGJpbmRpbmdDb250ZXh0LCBkZXB0aCArIDEpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGtpbmQgPT0gRGVzdHJ1Y3R1cmVUb0V4cHJlc3Npb25zICYmICFp
bm5lclBhdHRlcm4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBmYWls
SWZGYWxzZShpbm5lclBhdHRlcm4sICJDYW5ub3QgcGFyc2UgdGhpcyBkZXN0cnVjdHVyaW5nIHBh
dHRlcm4iKTsKICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGRlZmF1bHRWYWx1ZSA9IHBhcnNl
RGVmYXVsdFZhbHVlRm9yRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCk7Ci0gICAgICAgICAg
ICBmYWlsSWZUcnVlKGtpbmQgPT0gRGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMgJiYgZGVmYXVsdFZh
bHVlLCAiRGVmYXVsdCB2YWx1ZXMgaW4gZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXJzIGFyZSBjdXJy
ZW50bHkgbm90IHN1cHBvcnRlZCIpOwogICAgICAgICAgICAgQVNTRVJUKHByb3BlcnR5TmFtZSk7
CiAgICAgICAgICAgICBjb250ZXh0LmFwcGVuZE9iamVjdFBhdHRlcm5FbnRyeShvYmplY3RQYXR0
ZXJuLCBsb2NhdGlvbiwgd2FzU3RyaW5nLCAqcHJvcGVydHlOYW1lLCBpbm5lclBhdHRlcm4sIGRl
ZmF1bHRWYWx1ZSk7CiAgICAgICAgIH0gd2hpbGUgKGNvbnN1bWUoQ09NTUEpKTsKQEAgLTgzMSw3
ICs4MzIsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAg
ICAgICAgICBmYWlsV2l0aE1lc3NhZ2UoIkV4cGVjdGVkIGEgcGFyYW1ldGVyIHBhdHRlcm4gb3Ig
YSAnKScgaW4gcGFyYW1ldGVyIGxpc3QiKTsKICAgICAgICAgfQogICAgICAgICBmYWlsSWZUcnVl
KG1hdGNoKExFVCkgJiYgKGtpbmQgPT0gRGVzdHJ1Y3R1cmVUb0xldCB8fCBraW5kID09IERlc3Ry
dWN0dXJlVG9Db25zdCksICJDYW4ndCB1c2UgJ2xldCcgYXMgYW4gaWRlbnRpZmllciBuYW1lIGZv
ciBhIExleGljYWxEZWNsYXJhdGlvbiIpOwotICAgICAgICBwYXR0ZXJuID0gY3JlYXRlQmluZGlu
Z1BhdHRlcm4oY29udGV4dCwga2luZCwgKm1fdG9rZW4ubV9kYXRhLmlkZW50LCBkZXB0aCwgbV90
b2tlbiwgYmluZGluZ0NvbnRleHQpOworICAgICAgICBwYXR0ZXJuID0gY3JlYXRlQmluZGluZ1Bh
dHRlcm4oY29udGV4dCwga2luZCwgKm1fdG9rZW4ubV9kYXRhLmlkZW50LCBkZXB0aCwgbV90b2tl
biwgYmluZGluZ0NvbnRleHQsIGR1cGxpY2F0ZUlkZW50aWZpZXIpOwogICAgICAgICBuZXh0KCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0NDYsMTcgKzE0NDcsMzIgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVy
VHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBUcmVlRm9ybWFs
UGFyYW1ldGVyTGlzdCBsaXN0LCB1bnNpZ25lZCYgcGFyYW1ldGVyQ291bnQpCiB7Ci0gICAgYXV0
byBwYXJhbWV0ZXIgPSBwYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQsIERlc3RydWN0
dXJlVG9QYXJhbWV0ZXJzKTsKKyNkZWZpbmUgZmFpbEZyb21EdXBsaWNhdGUoKSBcCisgICAgaWYg
KGR1cGxpY2F0ZVBhcmFtZXRlcikge1wKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGRlZmF1
bHRWYWx1ZSwgIkR1cGxpY2F0ZSBwYXJhbWV0ZXIgJyIsIGR1cGxpY2F0ZVBhcmFtZXRlci0+aW1w
bCgpLCAiJyBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiB3aXRoIGRlZmF1bHQgcGFyYW1ldGVyIHZh
bHVlcyIpO1wKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGhhc0Rlc3RydWN0dXJpbmdQYXR0
ZXJuLCAiRHVwbGljYXRlIHBhcmFtZXRlciAnIiwgZHVwbGljYXRlUGFyYW1ldGVyLT5pbXBsKCks
ICInIG5vdCBhbGxvd2VkIGluIGZ1bmN0aW9uIHdpdGggZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXJz
Iik7XAorICAgIH0KKworICAgIGNvbnN0IElkZW50aWZpZXIqIGR1cGxpY2F0ZVBhcmFtZXRlciA9
IG51bGxwdHI7CisgICAgYm9vbCBoYXNEZXN0cnVjdHVyaW5nUGF0dGVybiA9IGZhbHNlOworICAg
IGF1dG8gcGFyYW1ldGVyID0gcGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0
cnVjdHVyZVRvUGFyYW1ldGVycywgJmR1cGxpY2F0ZVBhcmFtZXRlciwgJmhhc0Rlc3RydWN0dXJp
bmdQYXR0ZXJuKTsKICAgICBmYWlsSWZGYWxzZShwYXJhbWV0ZXIsICJDYW5ub3QgcGFyc2UgcGFy
YW1ldGVyIHBhdHRlcm4iKTsKLSAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihsaXN0LCBwYXJh
bWV0ZXIpOworICAgIGF1dG8gZGVmYXVsdFZhbHVlID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0
cnVjdHVyaW5nUGF0dGVybihjb250ZXh0KTsKKyAgICBwcm9wYWdhdGVFcnJvcigpOworICAgIGZh
aWxGcm9tRHVwbGljYXRlKCk7CisgICAgY29udGV4dC5hcHBlbmRQYXJhbWV0ZXIobGlzdCwgcGFy
YW1ldGVyLCBkZWZhdWx0VmFsdWUpOwogICAgIHBhcmFtZXRlckNvdW50Kys7CiAgICAgd2hpbGUg
KGNvbnN1bWUoQ09NTUEpKSB7Ci0gICAgICAgIHBhcmFtZXRlciA9IHBhcnNlRGVzdHJ1Y3R1cmlu
Z1BhdHRlcm4oY29udGV4dCwgRGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMpOworICAgICAgICBwYXJh
bWV0ZXIgPSBwYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQsIERlc3RydWN0dXJlVG9Q
YXJhbWV0ZXJzLCAmZHVwbGljYXRlUGFyYW1ldGVyLCAmaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4p
OwogICAgICAgICBmYWlsSWZGYWxzZShwYXJhbWV0ZXIsICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVy
IHBhdHRlcm4iKTsKLSAgICAgICAgY29udGV4dC5hcHBlbmRQYXJhbWV0ZXIobGlzdCwgcGFyYW1l
dGVyKTsKKyAgICAgICAgZGVmYXVsdFZhbHVlID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0cnVj
dHVyaW5nUGF0dGVybihjb250ZXh0KTsKKyAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKKyAgICAg
ICAgZmFpbEZyb21EdXBsaWNhdGUoKTsKKyAgICAgICAgY29udGV4dC5hcHBlbmRQYXJhbWV0ZXIo
bGlzdCwgcGFyYW1ldGVyLCBkZWZhdWx0VmFsdWUpOwogICAgICAgICBwYXJhbWV0ZXJDb3VudCsr
OwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKKyN1bmRlZiBmYWlsRnJvbUR1cGxpY2F0ZQogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgpAQCAtMTUzMCw3ICsxNTQ2LDcgQEAgdGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4gdGVtcGxhdGUgPAogICAgICAgICAgICAgICAgIGZ1
bmN0aW9uSW5mby5wYXJhbWV0ZXJDb3VudCA9IDE7CiAgICAgICAgICAgICAgICAgYXV0byBwYXJh
bWV0ZXIgPSBwYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQsIERlc3RydWN0dXJlVG9Q
YXJhbWV0ZXJzKTsKICAgICAgICAgICAgICAgICBmYWlsSWZGYWxzZShwYXJhbWV0ZXIsICJDYW5u
b3QgcGFyc2UgcGFyYW1ldGVyIHBhdHRlcm4iKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmFw
cGVuZFBhcmFtZXRlcihwYXJhbWV0ZXJMaXN0LCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgICAg
IGNvbnRleHQuYXBwZW5kUGFyYW1ldGVyKHBhcmFtZXRlckxpc3QsIHBhcmFtZXRlciwgMCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTU0Nyw5ICsxNTYzLDEzIEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBMZXhlclR5cGU+IHRlbXBsYXRlIDwKICAgICAgICAgZnVuY3Rpb25JbmZvLnBh
cmFtZXRlckNvdW50ID0gMDsKICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gU2V0dGVyTW9kZSkgewog
ICAgICAgICBmYWlsSWZUcnVlKG1hdGNoKENMT1NFUEFSRU4pLCAic2V0dGVyIGZ1bmN0aW9ucyBt
dXN0IGhhdmUgb25lIHBhcmFtZXRlciIpOwotICAgICAgICBhdXRvIHBhcmFtZXRlciA9IHBhcnNl
RGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwgRGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMpOwor
ICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBkdXBsaWNhdGVQYXJhbWV0ZXIgPSBudWxscHRyOwor
ICAgICAgICBhdXRvIHBhcmFtZXRlciA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4
dCwgRGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMsICZkdXBsaWNhdGVQYXJhbWV0ZXIpOwogICAgICAg
ICBmYWlsSWZGYWxzZShwYXJhbWV0ZXIsICJzZXR0ZXIgZnVuY3Rpb25zIG11c3QgaGF2ZSBvbmUg
cGFyYW1ldGVyIik7Ci0gICAgICAgIGNvbnRleHQuYXBwZW5kUGFyYW1ldGVyKHBhcmFtZXRlckxp
c3QsIHBhcmFtZXRlcik7CisgICAgICAgIGF1dG8gZGVmYXVsdFZhbHVlID0gcGFyc2VEZWZhdWx0
VmFsdWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0KTsKKyAgICAgICAgcHJvcGFnYXRl
RXJyb3IoKTsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGR1cGxpY2F0ZVBhcmFtZXRlciAm
JiBkZWZhdWx0VmFsdWUsICJEdXBsaWNhdGUgcGFyYW1ldGVyICciLCBkdXBsaWNhdGVQYXJhbWV0
ZXItPmltcGwoKSwgIicgbm90IGFsbG93ZWQgaW4gZnVuY3Rpb24gd2l0aCBkZWZhdWx0IHBhcmFt
ZXRlciB2YWx1ZXMiKTsKKyAgICAgICAgY29udGV4dC5hcHBlbmRQYXJhbWV0ZXIocGFyYW1ldGVy
TGlzdCwgcGFyYW1ldGVyLCBkZWZhdWx0VmFsdWUpOwogICAgICAgICBmdW5jdGlvbkluZm8ucGFy
YW1ldGVyQ291bnQgPSAxOwogICAgICAgICBmYWlsSWZUcnVlKG1hdGNoKENPTU1BKSwgInNldHRl
ciBmdW5jdGlvbnMgbXVzdCBoYXZlIG9uZSBwYXJhbWV0ZXIiKTsKICAgICAgICAgY29uc3VtZU9y
RmFpbChDTE9TRVBBUkVOLCAiRXhwZWN0ZWQgYSAnKScgYWZ0ZXIgYSBwYXJhbWV0ZXIgZGVjbGFy
YXRpb24iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNp
b24gMTg3MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUyLDYgKzM1Miw4IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgICAgICAg
ICByZXN1bHQgfD0gRGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWRTdHJpY3RNb2RlOwogICAgICAg
ICBpZiAoaXNBcmd1bWVudHNJZGVudCkKICAgICAgICAgICAgIG1fc2hhZG93c0FyZ3VtZW50cyA9
IHRydWU7CisgICAgICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICBy
ZXN1bHQgfD0gRGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWREdXBsaWNhdGVEZWNsYXJhdGlvbjsK
IAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTEwNDgsOCArMTA1MCw4IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBw
YXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiwgaW50JiBkZWNsYXJhdGlv
bnMsIFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVybiYgbGFzdFBhdHRlcm4sIFRyZWVFeHByZXNzaW9u
JiBsYXN0SW5pdGlhbGl6ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVudFN0YXJ0LCBKU1RleHRQb3Np
dGlvbiYgaW5pdFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVuZCwgVmFyRGVjbGFyYXRpb25M
aXN0Q29udGV4dCwgRGVjbGFyYXRpb25UeXBlLCBib29sJiBmb3JMb29wQ29uc3REb2VzTm90SGF2
ZUluaXRpYWxpemVyKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3Vy
Y2VFbGVtZW50cyBwYXJzZUFycm93RnVuY3Rpb25TaW5nbGVFeHByZXNzaW9uQm9keVNvdXJjZUVs
ZW1lbnRzKFRyZWVCdWlsZGVyJik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzc2lvbiBwYXJzZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7
Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJlZURlc3Ry
dWN0dXJpbmdQYXR0ZXJuIGNyZWF0ZUJpbmRpbmdQYXR0ZXJuKFRyZWVCdWlsZGVyJiwgRGVzdHJ1
Y3R1cmluZ0tpbmQsIGNvbnN0IElkZW50aWZpZXImLCBpbnQgZGVwdGgsIEpTVG9rZW4sIEFzc2ln
bm1lbnRDb250ZXh0KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lO
TElORSBUcmVlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4gcGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihU
cmVlQnVpbGRlciYsIERlc3RydWN0dXJpbmdLaW5kLCBBc3NpZ25tZW50Q29udGV4dCA9IEFzc2ln
bm1lbnRDb250ZXh0OjpEZWNsYXJhdGlvblN0YXRlbWVudCwgaW50IGRlcHRoID0gMCk7CisgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJlZURlc3RydWN0dXJp
bmdQYXR0ZXJuIGNyZWF0ZUJpbmRpbmdQYXR0ZXJuKFRyZWVCdWlsZGVyJiwgRGVzdHJ1Y3R1cmlu
Z0tpbmQsIGNvbnN0IElkZW50aWZpZXImLCBpbnQgZGVwdGgsIEpTVG9rZW4sIEFzc2lnbm1lbnRD
b250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiogZHVwbGljYXRlSWRlbnRpZmllcik7CisgICAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJlZURlc3RydWN0dXJpbmdQ
YXR0ZXJuIHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oVHJlZUJ1aWxkZXImLCBEZXN0cnVjdHVy
aW5nS2luZCwgY29uc3QgSWRlbnRpZmllcioqIGR1cGxpY2F0ZUlkZW50aWZpZXIgPSBudWxscHRy
LCBib29sKiBoYXNEZXN0cnVjdHVyaW5nUGF0dGVybiA9IG51bGxwdHIsIEFzc2lnbm1lbnRDb250
ZXh0ID0gQXNzaWdubWVudENvbnRleHQ6OkRlY2xhcmF0aW9uU3RhdGVtZW50LCBpbnQgZGVwdGgg
PSAwKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVl
RGVzdHJ1Y3R1cmluZ1BhdHRlcm4gdHJ5UGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybkV4cHJlc3Np
b24oVHJlZUJ1aWxkZXImLCBBc3NpZ25tZW50Q29udGV4dCk7CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJlZUV4cHJlc3Npb24gcGFyc2VEZWZhdWx0VmFs
dWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVybihUcmVlQnVpbGRlciYpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTg3MjAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxOSw3ICsyMTksNyBAQCBwdWJsaWM6CiAgICAgaW50IGNyZWF0ZUVsZW1l
bnRMaXN0KGludCwgaW50KSB7IHJldHVybiBFbGVtZW50c0xpc3RSZXN1bHQ7IH0KICAgICBpbnQg
Y3JlYXRlRWxlbWVudExpc3QoaW50LCBpbnQsIGludCkgeyByZXR1cm4gRWxlbWVudHNMaXN0UmVz
dWx0OyB9CiAgICAgaW50IGNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoKSB7IHJldHVybiBGb3Jt
YWxQYXJhbWV0ZXJMaXN0UmVzdWx0OyB9Ci0gICAgdm9pZCBhcHBlbmRQYXJhbWV0ZXIoaW50LCBE
ZXN0cnVjdHVyaW5nUGF0dGVybikgeyB9CisgICAgdm9pZCBhcHBlbmRQYXJhbWV0ZXIoaW50LCBE
ZXN0cnVjdHVyaW5nUGF0dGVybiwgaW50KSB7IH0KICAgICBpbnQgY3JlYXRlQ2xhdXNlKGludCwg
aW50KSB7IHJldHVybiBDbGF1c2VSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQ2xhdXNlTGlzdChp
bnQpIHsgcmV0dXJuIENsYXVzZUxpc3RSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQ2xhdXNlTGlz
dChpbnQsIGludCkgeyByZXR1cm4gQ2xhdXNlTGlzdFJlc3VsdDsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9lczYtZGVmYXVsdC1wYXJhbWV0ZXJzLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZXM2LWRlZmF1bHQt
cGFyYW1ldGVycy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvZXM2LWRlZmF1bHQtcGFyYW1ldGVycy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI0NCBAQAorZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIG1zZyA9ICIiKSB7CisgICAgaWYgKCFj
b25kKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTsKK30KK25vSW5saW5lKGFzc2VydCk7
CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMpIHsKKyAgICB2YXIgaGFkRXJyb3IgPSBmYWxz
ZTsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCkKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGhhZEVycm9yID0gdHJ1ZTsKKyAgICB9CisgICAgYXNzZXJ0KGhhZEVycm9yLCAiRGlkIG5vdCB0
aHJvdyIpOworfQorbm9JbmxpbmUoc2hvdWxkVGhyb3cpOworCitmdW5jdGlvbiBzaG91bGRUaHJv
d1N5bnRheEVycm9yKHN0cikgeworICAgIHZhciBoYWRFcnJvciA9IGZhbHNlOworICAgIHRyeSB7
CisgICAgICAgIGV2YWwoc3RyKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGlmIChlIGlu
c3RhbmNlb2YgU3ludGF4RXJyb3IpCisgICAgICAgICAgICBoYWRFcnJvciA9IHRydWU7CisgICAg
fQorICAgIGFzc2VydChoYWRFcnJvciwgIkRpZCBub3QgdGhyb3cgc3ludGF4IGVycm9yIik7Cit9
Citub0lubGluZShzaG91bGRUaHJvd1N5bnRheEVycm9yKTsKKworZnVuY3Rpb24gc2hvdWxkVGhy
b3dURFooZnVuYykgeworICAgIHZhciBoYXNUaHJvd24gPSBmYWxzZTsKKyAgICB0cnkgeworICAg
ICAgICBmdW5jKCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGlmIChlLm5hbWUuaW5kZXhP
ZigiUmVmZXJlbmNlRXJyb3IiKSAhPT0gLTEpCisgICAgICAgICAgICBoYXNUaHJvd24gPSB0cnVl
OworICAgIH0KKyAgICBhc3NlcnQoaGFzVGhyb3duKTsKK30KK25vSW5saW5lKHNob3VsZFRocm93
VERaKTsKKworZnVuY3Rpb24gYmFzaWMoeCwgeT14KSB7CisgICAgYXNzZXJ0KHkgPT09IHgsICJi
YXNpY3MgZG9uJ3Qgd29yay4iKQorfQorYmFzaWMoMjApOworYmFzaWMoImhlbGxvIik7CitiYXNp
Yyh7Zm9vOiAyMH0pOworYmFzaWModW5kZWZpbmVkKTsKKworOyhmdW5jdGlvbigpeworICAgIHZh
ciBzY29wZVZhcmlhYmxlID0ge2hlbGxvOiAid29ybGQifTsKKyAgICBmdW5jdGlvbiBiYXNpY1Nj
b3BlKHggPSBzY29wZVZhcmlhYmxlKSB7CisgICAgICAgIGFzc2VydCh4ID09PSBzY29wZVZhcmlh
YmxlKTsKKyAgICB9CisgICAgYmFzaWNTY29wZSgpOworfSkoKTsKKworZnVuY3Rpb24gYmFzaWNG
dW5jdGlvbkNhcHR1cmVJbkRlZmF1bHQodGhlQXJnID0gMjAsIHkgPSBmdW5jdGlvbigpIHtyZXR1
cm4gdGhlQXJnfSkgeworICAgIGFzc2VydCh0aGVBcmcgPT09IHkoKSwgInkgc2hvdWxkIHJldHVy
biB4LiIpOworICAgIHRoZUFyZyA9IHt9OworICAgIGFzc2VydCh0aGVBcmcgPT09IHkoKSwgInkg
c2hvdWxkIHJldHVybiB4LiIpOworfQorYmFzaWNGdW5jdGlvbkNhcHR1cmVJbkRlZmF1bHQoKQor
YmFzaWNGdW5jdGlvbkNhcHR1cmVJbkRlZmF1bHQodW5kZWZpbmVkKQorCitmdW5jdGlvbiBiYXNp
Y0NhcHR1cmVkKHggPSAyMCwgeSA9IHgpIHsKKyAgICBhc3NlcnQoeCA9PT0geSwgInkgc2hvdWxk
IGVxdWFsIHgiKTsKKyAgICBmdW5jdGlvbiBtdXRhdGUoKSB7IHggPSAibXV0YXRpb24iOyB9Cisg
ICAgbXV0YXRlKCkKKyAgICBhc3NlcnQoeCAhPT0geSwgInkgc2hvdWxkIG5vdCBlcXVhbCB4Iik7
Cit9CitiYXNpY0NhcHR1cmVkKCkKK2Jhc2ljQ2FwdHVyZWQodW5kZWZpbmVkKQorCitmdW5jdGlv
biB0cmlja3koZ2xvYmFsWCA9IChnbG9iYWxYID0gIngiKSwgeSA9IChnbG9iYWxYID0gMjApKSB7
CisgICAgYXNzZXJ0KGdsb2JhbFggPT09IDIwKTsKKyAgICBhc3NlcnQoZ2xvYmFsWCA9PT0geSk7
Cit9CitzaG91bGRUaHJvdyh0cmlja3kpOworCitmdW5jdGlvbiBzdHJpY3QoeCwgeSA9IHgpIHsK
KyAgICAndXNlIHN0cmljdCc7CisgICAgYXNzZXJ0KHggPT09IHkpOworfQorc3RyaWN0KDIwKTsK
K3N0cmljdCh1bmRlZmluZWQpOworCitmdW5jdGlvbiBwbGF5Z3JvdW5kKHggPSAiZm9vIiwgeSA9
ICJiYXIiKSB7CisgICAgcmV0dXJuIHt4LCB5fQorfQorYXNzZXJ0KHBsYXlncm91bmQoKS54ID09
PSAiZm9vIikKK2Fzc2VydChwbGF5Z3JvdW5kKHVuZGVmaW5lZCkueCA9PT0gImZvbyIpCithc3Nl
cnQocGxheWdyb3VuZCh1bmRlZmluZWQsIDIwKS54ID09PSAiZm9vIikKK2Fzc2VydChwbGF5Z3Jv
dW5kKG51bGwpLnggPT09IG51bGwpCithc3NlcnQocGxheWdyb3VuZCgpLnkgPT09ICJiYXIiKQor
YXNzZXJ0KHBsYXlncm91bmQodW5kZWZpbmVkLCB1bmRlZmluZWQpLnkgPT09ICJiYXIiKQorYXNz
ZXJ0KHBsYXlncm91bmQoImhlbGxvIiwgdW5kZWZpbmVkKS55ID09PSAiYmFyIikKK2Fzc2VydChw
bGF5Z3JvdW5kKCJiYXIiKS54ID09PSBwbGF5Z3JvdW5kKHVuZGVmaW5lZCwgdW5kZWZpbmVkKS55
KQorYXNzZXJ0KHBsYXlncm91bmQoMTApLnggPT09IDEwKQorYXNzZXJ0KHBsYXlncm91bmQodW5k
ZWZpbmVkLCAyMCkueSA9PT0gMjApCithc3NlcnQocGxheWdyb3VuZCh1bmRlZmluZWQsIG51bGwp
LnkgPT09IG51bGwpCisKK2Z1bmN0aW9uIHNjb3BpbmcoZiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4g
bG9jYWw7fSkgeworICAgIHNob3VsZFRocm93KGYpOworICAgIHZhciBsb2NhbCA9IDEwOworICAg
IHNob3VsZFRocm93KGYpOworfQorc2NvcGluZygpOworCitmdW5jdGlvbiBhdWdtZW50c0FyZ3Vt
ZW50czEoeCA9IDIwKSB7CisgICAgYXNzZXJ0KHggPT09IDIwKTsKKworICAgIGFyZ3VtZW50c1sw
XSA9IDEwOworICAgIGFzc2VydCh4ID09PSAyMCk7CisKKyAgICB4ID0gMTU7CisgICAgYXNzZXJ0
KHggPT09IDE1KTsKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSAxMCk7Cit9CithdWdtZW50
c0FyZ3VtZW50czEodW5kZWZpbmVkKTsKKworZnVuY3Rpb24gYXVnbWVudHNBcmd1bWVudHMyKHgg
PSAyMCkgeworICAgIGFzc2VydCh4ID09PSAyMCk7CisKKyAgICBhcmd1bWVudHNbMF0gPSAxMDsK
KyAgICBhc3NlcnQoeCA9PT0gMjApOworICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09IDEwKTsK
KworICAgIHggPSAxNTsKKyAgICBhc3NlcnQoeCA9PT0gMTUpOworICAgIGFzc2VydChhcmd1bWVu
dHNbMF0gPT09IDEwKTsKKworICAgIGZ1bmN0aW9uIGF1Z21lbnQoKSB7IHggPSA0MCB9CisgICAg
YXVnbWVudCgpCisgICAgYXNzZXJ0KHggPT09IDQwKTsKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBd
ID09PSAxMCk7Cit9CithdWdtZW50c0FyZ3VtZW50czIodW5kZWZpbmVkKTsKKworZnVuY3Rpb24g
YXVnbWVudHNBcmd1bWVudHMzKHggPSAxMCkgeworICAgIGFzc2VydCh4ID09PSAxMCk7CisKKyAg
ICBhc3NlcnQoYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQpOworICAgIHggPSAyMDsKKyAgICBh
c3NlcnQoYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQpOworfQorYXVnbWVudHNBcmd1bWVudHMz
KCk7CisKK2Z1bmN0aW9uIGF1Z21lbnRzQXJndW1lbnRzNCh4ID0gMTApIHsKKyAgICAidXNlIHN0
cmljdCI7CisgICAgYXNzZXJ0KHggPT09IDEwKTsKKworICAgIGFzc2VydChhcmd1bWVudHNbMF0g
PT09IHVuZGVmaW5lZCk7CisgICAgeCA9IDIwOworICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09
IHVuZGVmaW5lZCk7Cit9CithdWdtZW50c0FyZ3VtZW50czQoKTsKK2F1Z21lbnRzQXJndW1lbnRz
NCh1bmRlZmluZWQpOworCitmdW5jdGlvbiBhdWdtZW50c0FyZ3VtZW50czUoeCA9IDEwKSB7Cisg
ICAgInVzZSBzdHJpY3QiOworICAgIGFzc2VydCh4ID09PSAyMCk7CisKKyAgICBhc3NlcnQoYXJn
dW1lbnRzWzBdID09PSAyMCk7CisgICAgeCA9IDIwOworICAgIGFzc2VydChhcmd1bWVudHNbMF0g
PT09IDIwKTsKK30KK2F1Z21lbnRzQXJndW1lbnRzNSgyMCk7CisKKzsoZnVuY3Rpb24gKCkgewor
ICAgIHZhciBvdXRlciA9ICJvdXRlciI7CisgICAgZnVuY3Rpb24gZm9vKGEgPSBvdXRlciwgYiA9
IGZ1bmN0aW9uKCkgeyByZXR1cm4gYTsgfSwgYyA9IGZ1bmN0aW9uKHYpIHsgYSA9IHY7IH0pIHsK
KyAgICAgICAgdmFyIGE7CisgICAgICAgIGFzc2VydChhID09PSAib3V0ZXIiKTsKKyAgICAgICAg
YSA9IDIwOworICAgICAgICBhc3NlcnQoYSA9PT0gMjApOworICAgICAgICBhc3NlcnQoYigpID09
PSAib3V0ZXIiKTsKKyAgICAgICAgYygiaGVsbG8iKTsKKyAgICAgICAgYXNzZXJ0KGIoKSA9PT0g
ImhlbGxvIik7CisgICAgfQorCisgICAgZnVuY3Rpb24gYmFyKGEgPSBvdXRlciwgYiA9IGZ1bmN0
aW9uKCkgeyByZXR1cm4gYTsgfSwgYyA9IGZ1bmN0aW9uKHYpIHsgYSA9IHY7IH0pIHsKKyAgICAg
ICAgd2l0aCh7fSkgeworICAgICAgICAgICAgdmFyIGE7CisgICAgICAgICAgICBhc3NlcnQoYSA9
PT0gIm91dGVyIik7CisgICAgICAgICAgICBhID0gMjA7CisgICAgICAgICAgICBhc3NlcnQoYSA9
PT0gMjApOworICAgICAgICAgICAgYXNzZXJ0KGIoKSA9PT0gIm91dGVyIik7CisgICAgICAgICAg
ICBjKCJoZWxsbyIpOworICAgICAgICAgICAgYXNzZXJ0KGIoKSA9PT0gImhlbGxvIik7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBiYXooeCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4g
eTsgfSwgeSA9ICJ5IikgeworICAgICAgICBhc3NlcnQoeCgpID09PSAieSIpOworICAgICAgICBh
c3NlcnQoeCgpID09PSB5KTsKKyAgICAgICAgYXNzZXJ0KHkgPT09IHkpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGpheih4ID0gZnVuY3Rpb24oKSB7IHJldHVybiB5OyB9LCB5ID0gInkiKSB7Cisg
ICAgICAgIHJldHVybiB4OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRheih4ID0gMTAsIHkgPSBl
dmFsKCJ4ICsgMSIpKSB7CisgICAgICAgIGFzc2VydCh5ID09PSAxMSk7CisgICAgfQorCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgZm9vKCk7CisgICAgICAg
IGJhcigpOworICAgICAgICBiYXooKTsKKyAgICAgICAgYXNzZXJ0KGpheih1bmRlZmluZWQsIDIw
KSgpID09PSAyMCk7CisgICAgICAgIGFzc2VydChqYXoodW5kZWZpbmVkLCB1bmRlZmluZWQpKCkg
PT09ICJ5Iik7CisgICAgICAgIGFzc2VydChqYXoodW5kZWZpbmVkLCB7eDogIngifSkoKS54ID09
PSAieCIpOworICAgICAgICB0YXooKTsKKyAgICB9Cit9KSgpOworCisvLyBURFogZXJyb3JzLgor
OyhmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBiYXNpY0Vycm9yKHggPSB5LCB5KSB7IH0KKyAg
ICBmdW5jdGlvbiBiYXNpY0Vycm9yMih4ID0geCkgeyB9CisgICAgZnVuY3Rpb24gYmF6KHogPSB7
cDogeH0sIHggPSB6KSB7fQorICAgIGZ1bmN0aW9uIGJhcih4ID0ge3A6IFt4XX0pIHt9CisgICAg
ZnVuY3Rpb24gamF6KHggPSBldmFsKCJ5IiksIHkpIHsgfQorICAgIGZ1bmN0aW9uIGtheih4ID0g
ZXZhbCgiOyhmdW5jdGlvbigpIHsgcmV0dXJuIHl9KSgpOyIpLCB5KSB7IH0KKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBzaG91bGRUaHJvd1REWihiYXNpY0Vy
cm9yKTsKKyAgICAgICAgc2hvdWxkVGhyb3dURFooYmFzaWNFcnJvcjIpOworICAgICAgICBzaG91
bGRUaHJvd1REWihiYXopOworICAgICAgICBzaG91bGRUaHJvd1REWihiYXIpOworICAgICAgICBz
aG91bGRUaHJvd1REWihqYXopOworICAgICAgICBzaG91bGRUaHJvd1REWihrYXopOworICAgIH0K
K30pKCk7CisKKworCisvLyBTeW50YXggZXJyb3JzLgorc2hvdWxkVGhyb3dTeW50YXhFcnJvcigi
ZnVuY3Rpb24gYihhID0gMjAsIGEgPSA0MCkge30iKTsKK3Nob3VsZFRocm93U3ludGF4RXJyb3Io
ImZ1bmN0aW9uIGIoYWFhYWEgPSAyMCxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIs
cyx0LHUsdiwgYWFhYWEgPSA0MCkge30iKTsKK3Nob3VsZFRocm93U3ludGF4RXJyb3IoImZ1bmN0
aW9uIGIoYSA9IDIwLCB7YX0pIHt9Iik7CitzaG91bGRUaHJvd1N5bnRheEVycm9yKCJmdW5jdGlv
biBiKHthLCBhfSA9IDIwKSB7fSIpOworc2hvdWxkVGhyb3dTeW50YXhFcnJvcigiZnVuY3Rpb24g
Yih7YSwgYX0gPSAyMCkge30iKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzI4MCkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA3
LTIzICBTYWFtIGJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAgICAgICBbRVM2
XSBBZGQgc3VwcG9ydCBmb3IgZGVmYXVsdCBwYXJhbWV0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQwOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvZGVzdHJ1Y3R1cmluZy1hc3NpZ25tZW50
LWRlZmF1bHQtdmFsdWVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9wYXJzZXItc3ludGF4
LWNoZWNrLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvZGVzdHJ1Y3R1
cmluZy1hc3NpZ25tZW50LWRlZmF1bHQtdmFsdWVzLmpzOgorICAgICAgICAoc2hvdWxkVGhyb3cp
OiBEZWxldGVkLgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9wYXJzZXItc3ludGF4LWNoZWNr
LmpzOgorCiAyMDE1LTA3LTIzICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQVg6IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGlsZHJlbkNoYW5nZWQoKSBnZW5lcmF0
ZXMgdG9vIG1hbnkgQVhMaXZlUmVnaW9uQ2hhbmdlZCBub3RpZmljYXRpb25zCkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9kZXN0cnVjdHVyaW5nLWFzc2lnbm1lbnQtZGVmYXVsdC12YWx1ZXMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2Rlc3RydWN0dXJpbmctYXNzaWdu
bWVudC1kZWZhdWx0LXZhbHVlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE4NzIwMykKKysrIExh
eW91dFRlc3RzL2pzL2Rlc3RydWN0dXJpbmctYXNzaWdubWVudC1kZWZhdWx0LXZhbHVlcy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMyw2IEBAIFBBU1MgMzAsMzAKIFBB
U1MgMTIwLDEyMAogUEFTUyAzNjI4ODAwLDM2Mjg4MDAKIFBBU1MgMSwxCi1QQVNTIHRydWUsdHJ1
ZQotUEFTUyB0cnVlLHRydWUKLVBBU1MgdHJ1ZSx0cnVlCi1QQVNTIHRydWUsdHJ1ZQotUEFTUyB0
cnVlLHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQpJbmRleDogTGF5b3V0VGVzdHMvanMvcGFyc2VyLXN5bnRheC1jaGVjay1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcGFyc2VyLXN5bnRheC1jaGVjay1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDE4NzIwMykKKysrIExheW91dFRlc3RzL2pzL3BhcnNlci1zeW50YXgt
Y2hlY2stZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NjcsNiArODY3LDM0IEBAIFBB
U1MgSW52YWxpZDogIih7c2V0IFt4XSh4KXt9fSkiCiBQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBm
KCkgeyAoe3NldCBbeF0oeCl7fX0pIH0iCiBQQVNTIEludmFsaWQ6ICIoe1suLi54XTogMX0pIgog
UEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgKHtbLi4ueF06IDF9KSB9IgorUEFTUyBJbnZh
bGlkOiAiZnVuY3Rpb24gZih7YSwgYX0pIHt9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigp
IHsgZnVuY3Rpb24gZih7YSwgYX0pIHt9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKHth
fSwgYSkge30iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmKHthfSwg
YSkge30gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoW2IsIGJdKSB7fSIKK1BBU1MgSW52
YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGYoW2IsIGJdKSB7fSB9IgorUEFTUyBJbnZh
bGlkOiAiZnVuY3Rpb24gZihbYl0sIGIpIHt9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigp
IHsgZnVuY3Rpb24gZihbYl0sIGIpIHt9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKHth
OiB7Yn19LCBiKSB7fSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGYo
e2E6IHtifX0sIGIpIHt9IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKGEsIGIgPSAyMCkg
e30iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmKGEsIGIgPSAyMCkg
e30gfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYoYSA9IDIwLCBiID0gYSkge30iCitQQVNT
IFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmKGEgPSAyMCwgYiA9IGEpIHt9IH0i
CitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKHthID0gMjB9ID0ge2E6IDQwfSwgYiA9IGEpIHt9
IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZih7YSA9IDIwfSA9IHth
OiA0MH0sIGIgPSBhKSB7fSB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZihbYSxiLGNdID0g
WzEsMiwzXSkge30iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmKFth
LGIsY10gPSBbMSwyLDNdKSB7fSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZihhLCBhPTIw
KSB7fSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGYoYSwgYT0yMCkg
e30gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoe2F9ID0gMjAsIGE9MjApIHt9IgorUEFT
UyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZih7YX0gPSAyMCwgYT0yMCkge30g
fSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoW2EsYixhXSA9IFsxLDIsM10pIHt9IgorUEFT
UyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZihbYSxiLGFdID0gWzEsMiwzXSkg
e30gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoW2EsYixjXSA9IFsxLDIsM10sIGEpIHt9
IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZihbYSxiLGNdID0gWzEs
MiwzXSwgYSkge30gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoW2EsYixjXSA9IFsxLDIs
M10sIHthfSkge30iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmKFth
LGIsY10gPSBbMSwyLDNdLCB7YX0pIHt9IH0iCiBQQVNTIFZhbGlkOiAgICIoIGZ1bmN0aW9uKCl7
IHJldHVybiB0aGlzIHx8IGV2YWwoJ3RoaXMnKTsgfSgpLnggPSAneScgKSIKIFBBU1MgVmFsaWQ6
ICAgImZ1bmN0aW9uIGYoKSB7ICggZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMgfHwgZXZhbCgndGhp
cycpOyB9KCkueCA9ICd5JyApIH0iCiBQQVNTIEludmFsaWQ6ICJmdW5jdGlvbigpeyByZXR1cm4g
dGhpcyB8fCBldmFsKCd0aGlzJyk7IH0oKS54ID0gJ3knIgpJbmRleDogTGF5b3V0VGVzdHMvanMv
c2NyaXB0LXRlc3RzL2Rlc3RydWN0dXJpbmctYXNzaWdubWVudC1kZWZhdWx0LXZhbHVlcy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvZGVzdHJ1Y3R1cmluZy1h
c3NpZ25tZW50LWRlZmF1bHQtdmFsdWVzLmpzCShyZXZpc2lvbiAxODcyMDMpCisrKyBMYXlvdXRU
ZXN0cy9qcy9zY3JpcHQtdGVzdHMvZGVzdHJ1Y3R1cmluZy1hc3NpZ25tZW50LWRlZmF1bHQtdmFs
dWVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMjEgKzEwNSwzIEBAIGZ1bmN0aW9uIHRlc3Q4
KHgpIHsKIGFzc2VydCh0ZXN0OCg1KS5wLCAxMjApOwogYXNzZXJ0KHRlc3Q4KDEwKS5wLCAzNjI4
ODAwKTsKIGFzc2VydCh0ZXN0OCgwKS5wLCAxKTsKLQotLy8gRklYTUU6IFdoZW4gd2Ugc3VwcG9y
dCBkZWZhdWx0IHZhbHVlcyBpbiBmdW5jdGlvbiBwYXJhbWV0ZXJzLCB3ZSBzaG91bGQgcmVtb3Zl
IHRoaXMgdGVzdC4KLWZ1bmN0aW9uIHNob3VsZFRocm93KHN0cikgewotICAgIHZhciB0aHJvd24g
PSBmYWxzZTsKLSAgICB0cnkgewotICAgICAgICBldmFsKHN0cik7Ci0gICAgfSBjYXRjaChlKSB7
Ci0gICAgICAgIHRocm93biA9IHRydWU7Ci0gICAgfQotCi0gICAgYXNzZXJ0KHRydWUsIHRocm93
bik7Ci19Ci0KLXNob3VsZFRocm93KCIoZnVuY3Rpb24oe3ggPSA0MH0pIHt9KSIpOwotc2hvdWxk
VGhyb3coIihmdW5jdGlvbih7eX0sIHt4ID0gNDB9KSB7fSIpOwotc2hvdWxkVGhyb3coIihmdW5j
dGlvbihbeV0sIFt4ID0gNDBdKSB7fSkiKTsKLXNob3VsZFRocm93KCIoZnVuY3Rpb24oe3l9LCB7
eDoge3ogPSA1MH19KSB7fSkiKTsKLXNob3VsZFRocm93KCIoZnVuY3Rpb24oe3l9LCB7eDogW3og
PSA1MF19KSB7fSkiKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9wYXJzZXIt
c3ludGF4LWNoZWNrLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0
cy9wYXJzZXItc3ludGF4LWNoZWNrLmpzCShyZXZpc2lvbiAxODcyMDMpCisrKyBMYXlvdXRUZXN0
cy9qcy9zY3JpcHQtdGVzdHMvcGFyc2VyLXN5bnRheC1jaGVjay5qcwkod29ya2luZyBjb3B5KQpA
QCAtNTI2LDYgKzUyNiwyMCBAQCBpbnZhbGlkKCIoe2dldCBbeF0oKXt9fSkiKQogaW52YWxpZCgi
KHtzZXQgW3hdKCl7fX0pIikKIGludmFsaWQoIih7c2V0IFt4XSh4KXt9fSkiKQogaW52YWxpZCgi
KHtbLi4ueF06IDF9KSIpCitpbnZhbGlkKCJmdW5jdGlvbiBmKHthLCBhfSkge30iKTsKK2ludmFs
aWQoImZ1bmN0aW9uIGYoe2F9LCBhKSB7fSIpOworaW52YWxpZCgiZnVuY3Rpb24gZihbYiwgYl0p
IHt9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBmKFtiXSwgYikge30iKTsKK2ludmFsaWQoImZ1bmN0
aW9uIGYoe2E6IHtifX0sIGIpIHt9Iik7Cit2YWxpZCgiZnVuY3Rpb24gZihhLCBiID0gMjApIHt9
Iik7Cit2YWxpZCgiZnVuY3Rpb24gZihhID0gMjAsIGIgPSBhKSB7fSIpOwordmFsaWQoImZ1bmN0
aW9uIGYoe2EgPSAyMH0gPSB7YTogNDB9LCBiID0gYSkge30iKTsKK3ZhbGlkKCJmdW5jdGlvbiBm
KFthLGIsY10gPSBbMSwyLDNdKSB7fSIpOworaW52YWxpZCgiZnVuY3Rpb24gZihhLCBhPTIwKSB7
fSIpOworaW52YWxpZCgiZnVuY3Rpb24gZih7YX0gPSAyMCwgYT0yMCkge30iKTsKK2ludmFsaWQo
ImZ1bmN0aW9uIGYoW2EsYixhXSA9IFsxLDIsM10pIHt9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBm
KFthLGIsY10gPSBbMSwyLDNdLCBhKSB7fSIpOworaW52YWxpZCgiZnVuY3Rpb24gZihbYSxiLGNd
ID0gWzEsMiwzXSwge2F9KSB7fSIpOwogdmFsaWQoIiggZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMg
fHwgZXZhbCgndGhpcycpOyB9KCkueCA9ICd5JyApIik7CiBpbnZhbGlkKCJmdW5jdGlvbigpeyBy
ZXR1cm4gdGhpcyB8fCBldmFsKCd0aGlzJyk7IH0oKS54ID0gJ3knIik7CiBpbnZhbGlkKCIxICUg
KyIpOwo=
</data>
<flag name="review"
          id="282582"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>