<?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>154144</bug_id>
          
          <creation_ts>2016-02-11 17:42:19 -0800</creation_ts>
          <short_desc>The parser doesn&apos;t properly protect against global variable references in builtins</short_desc>
          <delta_ts>2016-02-12 16:13:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>154143</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1163962</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-11 17:42:19 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163982</commentid>
    <comment_count>1</comment_count>
      <attachid>271119</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-11 19:00:04 -0800</bug_when>
    <thetext>Created attachment 271119
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163985</commentid>
    <comment_count>2</comment_count>
      <attachid>271119</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-02-11 19:12:46 -0800</bug_when>
    <thetext>Comment on attachment 271119
patch

IIRC correctly the purpose of this logic wasn&apos;t to be correct wrt language semantics, just correct-enough to ensure that we didn&apos;t accidentally try to capture from the global object. It was essentially a safety thing for builtins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163988</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-11 19:20:52 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 271119 [details]
&gt; patch
&gt; 
&gt; IIRC correctly the purpose of this logic wasn&apos;t to be correct wrt language
&gt; semantics, just correct-enough to ensure that we didn&apos;t accidentally try to
&gt; capture from the global object. It was essentially a safety thing for
&gt; builtins.

Which logic are you talking about?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163992</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-11 19:25:47 -0800</bug_when>
    <thetext>I think you&apos;re probably talking about this loop:
-        if (!capturedVariables.isEmpty()) {
-            for (const auto&amp; capturedVariable : capturedVariables) {
-                if (scope-&gt;hasDeclaredVariable(capturedVariable))
-                    continue;
-
-                if (scope-&gt;hasDeclaredParameter(capturedVariable))
-                    continue;
-
-                RELEASE_ASSERT_NOT_REACHED();
-            }
-        }

And if so, we want the logic to be something like:
```
if (m_parsingBuiltin)
    RELEASE_ASSERT(capturedVariableCandidates().isEmpty());
```

Out of curiosity, why do we enforce this? Is it just that
global properties can be changed by user code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163993</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-02-11 19:29:25 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Comment on attachment 271119 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; IIRC correctly the purpose of this logic wasn&apos;t to be correct wrt language
&gt; &gt; semantics, just correct-enough to ensure that we didn&apos;t accidentally try to
&gt; &gt; capture from the global object. It was essentially a safety thing for
&gt; &gt; builtins.
&gt; 
&gt; Which logic are you talking about?

Literally the entirety of what you just removed.

Again, this is very much an &quot;IIRC&quot;, and all I can recall is that the particular set of rules it ended up enforcing were those necessary to disallow capturing global variables. I agree the mismatched naming vs. semantics warrant fixing, but with this change it becomes possible to accidentally capture unprivileged global variables, e.g. Object vs @Object.

Given the testing we could also change the logic that achieves this to be at bytecode generation time to fail out on any non-local resolve (which is probably a more sensible way to do it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163994</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-02-11 19:30:19 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I think you&apos;re probably talking about this loop:
&gt; -        if (!capturedVariables.isEmpty()) {
&gt; -            for (const auto&amp; capturedVariable : capturedVariables) {
&gt; -                if (scope-&gt;hasDeclaredVariable(capturedVariable))
&gt; -                    continue;
&gt; -
&gt; -                if (scope-&gt;hasDeclaredParameter(capturedVariable))
&gt; -                    continue;
&gt; -
&gt; -                RELEASE_ASSERT_NOT_REACHED();
&gt; -            }
&gt; -        }
&gt; 
&gt; And if so, we want the logic to be something like:
&gt; ```
&gt; if (m_parsingBuiltin)
&gt;     RELEASE_ASSERT(capturedVariableCandidates().isEmpty());
&gt; ```
&gt; 
&gt; Out of curiosity, why do we enforce this? Is it just that
&gt; global properties can be changed by user code?

Yup, which (among other things) leads to sadness in language semantics, as well as potential security issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164210</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-12 11:03:40 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; Comment on attachment 271119 [details]
&gt; &gt; &gt; patch
&gt; &gt; &gt; 
&gt; &gt; &gt; IIRC correctly the purpose of this logic wasn&apos;t to be correct wrt language
&gt; &gt; &gt; semantics, just correct-enough to ensure that we didn&apos;t accidentally try to
&gt; &gt; &gt; capture from the global object. It was essentially a safety thing for
&gt; &gt; &gt; builtins.
&gt; &gt; 
&gt; &gt; Which logic are you talking about?
&gt; 
&gt; Literally the entirety of what you just removed.
&gt; 
&gt; Again, this is very much an &quot;IIRC&quot;, and all I can recall is that the
&gt; particular set of rules it ended up enforcing were those necessary to
&gt; disallow capturing global variables. I agree the mismatched naming vs.
&gt; semantics warrant fixing, but with this change it becomes possible to
&gt; accidentally capture unprivileged global variables, e.g. Object vs @Object.
&gt; 
&gt; Given the testing we could also change the logic that achieves this to be at
&gt; bytecode generation time to fail out on any non-local resolve (which is
&gt; probably a more sensible way to do it).

Okay. I agree that we should enforce this. I was just observing
when reading the code that the code doesn&apos;t do anything.

We need to come up with some rules that work. I don&apos;t think
this can be done from the BytecodeGenerator. It would be possible
to do during Bytecode linking, though.

I think solving this in the parser still might be easiest. I think
the logic would go something like this.
```
after parsing is complete, do:
if (weAreParsingAProgram()) {
    if (captureVariableCandidates() \ definedVariables() != emptySet)
         crash()
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164211</commentid>
    <comment_count>8</comment_count>
      <attachid>271119</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-12 11:04:27 -0800</bug_when>
    <thetext>Comment on attachment 271119
patch

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

&gt; Source/JavaScriptCore/builtins/BuiltinExecutables.cpp:-115
&gt; -    for (const auto&amp; closedVariable : program-&gt;closedVariables()) {
&gt; -        if (closedVariable == vm.propertyNames-&gt;arguments.impl())
&gt; -            continue;
&gt; -        
&gt; -        if (closedVariable == vm.propertyNames-&gt;undefinedKeyword.impl())
&gt; -            continue;
&gt; -    }

Oliver, do you remember why we had this here?
Instead of strictly being in the parser?
This is a very curious loop, it looks like it&apos;s probably been edited to death.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164215</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-12 11:09:36 -0800</bug_when>
    <thetext>I wonder if we have any errors that have slipped through here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164246</commentid>
    <comment_count>10</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-12 11:57:49 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I wonder if we have any errors that have slipped through here.

Yup. We totally do!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164373</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-12 15:01:01 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; I wonder if we have any errors that have slipped through here.
&gt; 
&gt; Yup. We totally do!

Oh man, we get it wrong in so many places :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164397</commentid>
    <comment_count>12</comment_count>
      <attachid>271238</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-12 15:41:49 -0800</bug_when>
    <thetext>Created attachment 271238
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164398</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-12 15:42:25 -0800</bug_when>
    <thetext>Attachment 271238 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/Parser.cpp:304:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/parser/Parser.cpp:305:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/bindings/js/JSDOMGlobalObject.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 15 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>1164399</commentid>
    <comment_count>14</comment_count>
      <attachid>271239</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-12 15:43:05 -0800</bug_when>
    <thetext>Created attachment 271239
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164401</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-12 15:44:57 -0800</bug_when>
    <thetext>Attachment 271239 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSDOMGlobalObject.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 15 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>1164402</commentid>
    <comment_count>16</comment_count>
      <attachid>271239</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-12 15:45:06 -0800</bug_when>
    <thetext>Comment on attachment 271239
patch

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

r=me

&gt; Source/JavaScriptCore/parser/Parser.cpp:334
&gt; +            if (!lexicalVariables.contains(candidate) &amp;&amp; !varDeclarations.contains(candidate) &amp;&amp; !builtinNames.isPrivateName(*candidate.get())) {
&gt; +                dataLog(&quot;Bad global capture in builtin: &apos;&quot;, candidate, &quot;&apos;\n&quot;);
&gt; +                dataLog(m_source-&gt;view());
&gt; +                CRASH();
&gt;              }

Can we make this an ASSERT instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164403</commentid>
    <comment_count>17</comment_count>
      <attachid>271239</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-12 15:46:31 -0800</bug_when>
    <thetext>Comment on attachment 271239
patch

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

&gt; Source/JavaScriptCore/parser/Parser.cpp:302
&gt; +    scope-&gt;getCapturedVars(capturedVariables, modifiedParameter, modifiedArguments); // FIXME: make this just find out modifedParamerer/modifiedArguments

Maybe you should file a bug for this (and include the bug url here)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164407</commentid>
    <comment_count>18</comment_count>
      <attachid>271239</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-12 15:56:03 -0800</bug_when>
    <thetext>Comment on attachment 271239
patch

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

&gt;&gt; Source/JavaScriptCore/parser/Parser.cpp:302
&gt;&gt; +    scope-&gt;getCapturedVars(capturedVariables, modifiedParameter, modifiedArguments); // FIXME: make this just find out modifedParamerer/modifiedArguments
&gt; 
&gt; Maybe you should file a bug for this (and include the bug url here)?

oops, this FIXME should just be removed. I was anticipating rewriting this function but I didn&apos;t</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164409</commentid>
    <comment_count>19</comment_count>
      <attachid>271239</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-12 16:06:01 -0800</bug_when>
    <thetext>Comment on attachment 271239
patch

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

&gt;&gt; Source/JavaScriptCore/parser/Parser.cpp:334
&gt;&gt;              }
&gt; 
&gt; Can we make this an ASSERT instead?

I think this reporting is actually very helpful. I&apos;m going to keep it.
I&apos;m going to put the whole loop under #ifndef NDEBUG</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164413</commentid>
    <comment_count>20</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-12 16:13:14 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/196525</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271119</attachid>
            <date>2016-02-11 19:00:04 -0800</date>
            <delta_ts>2016-02-12 15:41:49 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>9065</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NDYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE2LTAyLTExICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlIHRyYWNrIGNsb3NlZCB2YXJpYWJsZXMgZm9yIGJ1aWx0aW5zIGZvciBubyByZWFzb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDE0NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHRyYWNrIHRo
aXMgaW5mb3JtYXRpb24gZm9yIGFic29sdXRlbHkgbm8gcmVhc29uLgorICAgICAgICBBbHNvLCB0
aGUgd2F5IHdlIGNvbGxlY3QgdGhpcyBpbmZvcm1hdGlvbiBpcyB0b3RhbGx5CisgICAgICAgIHdy
b25nIGluIGEgd29ybGQgd2l0aCBibG9jayBzY29waW5nLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyByZW1vdmVzIGEgYm9ndXMgdmFsaWRhdGlvbiBvbiBidWlsdGlucy4KKyAgICAgICAgVGhl
IGxvb3AgdGhhdCBkaWQgdGhpcyBhc3NlcnRlZCB0aGF0IGFsbCBjYXB0dXJlZCB2YXJzIGFyZQor
ICAgICAgICBlaXRoZXIgYSBwYXJhbWV0ZXIgb3IgYSBkZWNsYXJlZFZhcmlhYmxlLiBCdXQsIHRo
aW5ncworICAgICAgICBhcmUgb25seSBjYXB0dXJlZCBpZiB0aGV5J3JlIGEgZGVjbGFyZWRWYXJp
YWJsZSEgU28KKyAgICAgICAgaXQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSBmb3IgdGhpcyBsb29w
IHRvIGV4aXN0LiBJdCdzCisgICAgICAgIGFsd2F5cyB0cnVlLgorCisgICAgICAgICogYnVpbHRp
bnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXhlY3V0YWJs
ZUludGVybmFsKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUpOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtTm9k
ZTo6TW9kdWxlUHJvZ3JhbU5vZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6c2V0Q2xv
c2VkVmFyaWFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAg
ICAgKEpTQzo6U2NvcGVOb2RlOjpzZXRDbG9zZWRWYXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpQcm9ncmFtTm9kZTo6Y2xvc2VkVmFyaWFibGVzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBh
cnNlSW5uZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6ZGlkRmluaXNoUGFy
c2luZyk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpQYXJzZXI6
OnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUpOgorICAgICAgICAoSlNDOjpQYXJzZXI6OmxvY2F0
aW9uQmVmb3JlTGFzdFRva2VuKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjppc0Z1bmN0aW9uTWV0
YWRhdGFOb2RlKToKKyAgICAgICAgKEpTQzo6cGFyc2UpOgorICAgICAgICAoSlNDOjpQYXJzZXI6
OmNsb3NlZFZhcmlhYmxlcyk6IERlbGV0ZWQuCisKIDIwMTYtMDItMTEgIEJyaWFuIEJ1cmcgIDxi
YnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3RlSW5zcGVjdG9y
J3MgbGlzdGluZ3Mgc2hvdWxkIGluY2x1ZGUgd2hldGhlciBhbiBBdXRvbWF0aW9uVGFyZ2V0IGlz
IHBhaXJlZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVj
dXRhYmxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAJKHJldmlzaW9uIDE5NjQ2MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDYsMTMgKzEwNiw2IEBAIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGVF
eGVjdXQKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgYW4gaW5wdXQgc3RyaW5nIHRoYXQg
d291bGQgcmVzdWx0IGluIGEgc2luZ2xlIGFub255bW91cyBmdW5jdGlvbiBleHByZXNzaW9uLgog
ICAgIG1ldGFkYXRhLT5zZXRFbmRQb3NpdGlvbihwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChtZXRhZGF0YSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjbG9z
ZWRWYXJpYWJsZSA6IHByb2dyYW0tPmNsb3NlZFZhcmlhYmxlcygpKSB7Ci0gICAgICAgIGlmIChj
bG9zZWRWYXJpYWJsZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMuaW1wbCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2xvc2VkVmFyaWFibGUg
PT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkS2V5d29yZC5pbXBsKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICB9CiAgICAgbWV0YWRhdGEtPm92ZXJyaWRlTmFtZShuYW1lKTsKICAg
ICBWYXJpYWJsZUVudmlyb25tZW50IGR1bW15VERaVmFyaWFibGVzOwogICAgIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y3JlYXRlKCZ2bSwgc291cmNlLCBtZXRhZGF0YSwga2luZCwgY29uc3RydWN0QWJp
bGl0eSwgZHVtbXlURFpWYXJpYWJsZXMsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgV1RGTW92
ZShzb3VyY2VPdmVycmlkZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5jcHAJKHJldmlzaW9uIDE5NjQ2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMTEgKzEyMyw2IEBAIFByb2dyYW1Ob2Rl
OjpQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYgcGEKIHsKIH0KIAotdm9pZCBQcm9ncmFtTm9kZTo6
c2V0Q2xvc2VkVmFyaWFibGVzKFZlY3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiYmIGNs
b3NlZFZhcmlhYmxlcykKLXsKLSAgICBtX2Nsb3NlZFZhcmlhYmxlcyA9IFdURk1vdmUoY2xvc2Vk
VmFyaWFibGVzKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1vZHVs
ZVByb2dyYW1Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIE1vZHVsZVByb2dy
YW1Ob2RlOjpNb2R1bGVQcm9ncmFtTm9kZShQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgU291
cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJFbnZpcm9ubWVu
dCwgRnVuY3Rpb25TdGFjayYgZnVuY1N0YWNrLCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2Fs
VmFyaWFibGVzLCBGdW5jdGlvblBhcmFtZXRlcnMqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE5NjQ2MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5Niw4ICsxNTk2
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0U3RhdGVtZW50c0J5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogZGVzdGluYXRpb24pOwogICAgICAg
ICAKLSAgICAgICAgdm9pZCBzZXRDbG9zZWRWYXJpYWJsZXMoVmVjdG9yPFJlZlB0cjxVbmlxdWVk
U3RyaW5nSW1wbD4+JiYpIHsgfQotCiAgICAgICAgIHZvaWQgYW5hbHl6ZU1vZHVsZShNb2R1bGVB
bmFseXplciYpOwogCiAgICAgcHJvdGVjdGVkOgpAQCAtMTYyMywxMiArMTYyMSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9
IGZhbHNlOwogCi0gICAgICAgIHZvaWQgc2V0Q2xvc2VkVmFyaWFibGVzKFZlY3RvcjxSZWZQdHI8
VW5pcXVlZFN0cmluZ0ltcGw+PiYmKTsKLSAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxVbmlx
dWVkU3RyaW5nSW1wbD4+JiBjbG9zZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2Nsb3Nl
ZFZhcmlhYmxlczsgfQotCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7Ci0g
ICAgICAgIFZlY3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiBtX2Nsb3NlZFZhcmlhYmxl
czsKICAgICAgICAgdW5zaWduZWQgbV9zdGFydENvbHVtbjsKICAgICAgICAgdW5zaWduZWQgbV9l
bmRDb2x1bW47CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAJKHJldmlzaW9uIDE5NjQ2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDQ4ICszMjEsMTggQEAgU3RyaW5nIFBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKGNvbgogICAgIGlmIChtb2RpZmllZEFyZ3VtZW50
cykKICAgICAgICAgZmVhdHVyZXMgfD0gTW9kaWZpZWRBcmd1bWVudHNGZWF0dXJlOwogCi0gICAg
VmVjdG9yPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+IGNsb3NlZFZhcmlhYmxlczsKLSAgICBp
ZiAobV9wYXJzaW5nQnVpbHRpbikgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBi
ZSBjaGFuZ2VkIGlmIHdlIHdhbnQgdG8gYWxsb3cgYnVpbHRpbnMgdG8gdXNlIGxleGljYWwgZGVj
bGFyYXRpb25zLgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcmlhYmxlIDogdXNlZFZhcmlh
YmxlcykgewotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6
ZnJvbVVpZChtX3ZtLCB2YXJpYWJsZS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoc2NvcGUtPmhh
c0RlY2xhcmVkVmFyaWFibGUoaWRlbnRpZmllcikpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzY29wZS0+aGFzRGVjbGFyZWRQYXJhbWV0
ZXIoaWRlbnRpZmllcikpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IGlmICh2YXJpYWJsZSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMuaW1wbCgpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBjbG9zZWRWYXJpYWJsZXMu
YXBwZW5kKHZhcmlhYmxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY2FwdHVyZWRWYXJp
YWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNhcHR1cmVk
VmFyaWFibGUgOiBjYXB0dXJlZFZhcmlhYmxlcykgewotICAgICAgICAgICAgICAgIGlmIChzY29w
ZS0+aGFzRGVjbGFyZWRWYXJpYWJsZShjYXB0dXJlZFZhcmlhYmxlKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2NvcGUtPmhhc0RlY2xhcmVk
UGFyYW1ldGVyKGNhcHR1cmVkVmFyaWFibGUpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZGlkRmluaXNoUGFyc2luZyhzb3VyY2VF
bGVtZW50cywgY29udGV4dC5mdW5jRGVjbGFyYXRpb25zKCksIHZhckRlY2xhcmF0aW9ucywgZmVh
dHVyZXMsIGNvbnRleHQubnVtQ29uc3RhbnRzKCksIFdURk1vdmUoY2xvc2VkVmFyaWFibGVzKSk7
CisgICAgZGlkRmluaXNoUGFyc2luZyhzb3VyY2VFbGVtZW50cywgY29udGV4dC5mdW5jRGVjbGFy
YXRpb25zKCksIHZhckRlY2xhcmF0aW9ucywgZmVhdHVyZXMsIGNvbnRleHQubnVtQ29uc3RhbnRz
KCkpOwogCiAgICAgcmV0dXJuIHBhcnNlRXJyb3I7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBM
ZXhlclR5cGU+CiB2b2lkIFBhcnNlcjxMZXhlclR5cGU+OjpkaWRGaW5pc2hQYXJzaW5nKFNvdXJj
ZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cywgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3Rh
Y2smIGZ1bmNTdGFjaywgCi0gICAgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRGVjbGFyYXRpb25z
LCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiYmIGNsb3NlZFZhcmlhYmxlcykKKyAgICBWYXJpYWJs
ZUVudmlyb25tZW50JiB2YXJEZWNsYXJhdGlvbnMsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50
IG51bUNvbnN0YW50cykKIHsKICAgICBtX3NvdXJjZUVsZW1lbnRzID0gc291cmNlRWxlbWVudHM7
CiAgICAgbV9mdW5jRGVjbGFyYXRpb25zLnN3YXAoZnVuY1N0YWNrKTsKICAgICBtX3ZhckRlY2xh
cmF0aW9ucy5zd2FwKHZhckRlY2xhcmF0aW9ucyk7Ci0gICAgbV9jbG9zZWRWYXJpYWJsZXMgPSBj
bG9zZWRWYXJpYWJsZXM7CiAgICAgbV9mZWF0dXJlcyA9IGZlYXR1cmVzOwogICAgIG1fbnVtQ29u
c3RhbnRzID0gbnVtQ29uc3RhbnRzOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oCShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDYgQEAgcHVibGljOgog
CiAgICAgSlNUZXh0UG9zaXRpb24gcG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGV4ZXItPnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsgfQogICAgIEpTVG9r
ZW5Mb2NhdGlvbiBsb2NhdGlvbkJlZm9yZUxhc3RUb2tlbigpIGNvbnN0IHsgcmV0dXJuIG1fbGV4
ZXItPmxhc3RUb2tlbkxvY2F0aW9uKCk7IH0KLSAgICBWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJp
bmdJbXBsPj4mJiBjbG9zZWRWYXJpYWJsZXMoKSB7IHJldHVybiBXVEZNb3ZlKG1fY2xvc2VkVmFy
aWFibGVzKTsgfQogCiBwcml2YXRlOgogICAgIHN0cnVjdCBBbGxvd0luT3ZlcnJpZGUgewpAQCAt
OTk1LDcgKzk5NCw3IEBAIHByaXZhdGU6CiAgICAgUGFyc2VyKCk7CiAgICAgU3RyaW5nIHBhcnNl
SW5uZXIoY29uc3QgSWRlbnRpZmllciYsIFNvdXJjZVBhcnNlTW9kZSk7CiAKLSAgICB2b2lkIGRp
ZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqLCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rp
b25TdGFjayYsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBDb2RlRmVhdHVyZXMsIGludCwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+JiYpOworICAgIHZvaWQgZGlkRmluaXNo
UGFyc2luZyhTb3VyY2VFbGVtZW50cyosIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNr
JiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIENvZGVGZWF0dXJlcywgaW50KTsKIAogICAgIC8vIFVz
ZWQgdG8gZGV0ZXJtaW5lIHR5cGUgb2YgZXJyb3IgdG8gcmVwb3J0LgogICAgIGJvb2wgaXNGdW5j
dGlvbk1ldGFkYXRhTm9kZShTY29wZU5vZGUqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTQwNyw3
ICsxNDA2LDYgQEAgcHJpdmF0ZToKICAgICBUaGlzVERaTW9kZSBtX3RoaXNURFpNb2RlOwogICAg
IFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJEZWNsYXJhdGlvbnM7CiAgICAgRGVjbGFyYXRpb25T
dGFja3M6OkZ1bmN0aW9uU3RhY2sgbV9mdW5jRGVjbGFyYXRpb25zOwotICAgIFZlY3RvcjxSZWZQ
dHI8VW5pcXVlZFN0cmluZ0ltcGw+PiBtX2Nsb3NlZFZhcmlhYmxlczsKICAgICBDb2RlRmVhdHVy
ZXMgbV9mZWF0dXJlczsKICAgICBpbnQgbV9udW1Db25zdGFudHM7CiAgICAgRXhwcmVzc2lvbkVy
cm9yQ2xhc3NpZmllciogbV9leHByZXNzaW9uRXJyb3JDbGFzc2lmaWVyOwpAQCAtMTU0Miw4ICsx
NTQwLDYgQEAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHBhcnNlKAogICAgICAgICBpZiAo
YnVpbHRpbk1vZGUgPT0gSlNQYXJzZXJCdWlsdGluTW9kZTo6QnVpbHRpbikgewogICAgICAgICAg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgV1RGOjpkYXRhTG9nKCJFcnJvciBjb21w
aWxpbmcgYnVpbHRpbjogIiwgZXJyb3IubWVzc2FnZSgpLCAiXG4iKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXN1bHQtPnNldENsb3NlZFZhcmlhYmxlcyhwYXJzZXIuY2xv
c2VkVmFyaWFibGVzKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271238</attachid>
            <date>2016-02-12 15:41:49 -0800</date>
            <delta_ts>2016-02-12 15:43:05 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>22811</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NTIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE2LTAyLTEyICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBwYXJzZXIgZG9lc24ndCBwcm9wZXJseSBwcm90ZWN0IGFnYWluc3QgZ2xvYmFsIHZhcmlh
YmxlIHJlZmVyZW5jZXMgaW4gYnVpbHRpbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NDE0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgb3VyIGdsb2JhbCB2YXJpYWJsZSBy
ZWZlcmVuY2UgZGV0ZWN0aW9uCisgICAgICAgIGFsZ29yaXRobSB0aGF0IHdhcyBicm9rZW4uIEFm
dGVyIGZpeGluZyB0aGUgYWxnb3JpdGhtLCBJCisgICAgICAgIGRldGVjdGVkIG1hbnkgcGxhY2Vz
IHdoZXJlIHdlIHdlcmUgaW5jb3JyZWN0bHkgdXNpbmcgZ2xvYmFsCisgICAgICAgIHZhcmlhYmxl
cy4gSSd2ZSBmaXhlZCBhbGwgdGhvc2UuCisKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGluRXhl
Y3V0YWJsZXMuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVFeGVjdXRhYmxlSW50ZXJuYWwpOgor
ICAgICAgICAqIGJ1aWx0aW5zL051bWJlclByb3RvdHlwZS5qczoKKyAgICAgICAgKHRvTG9jYWxl
U3RyaW5nKToKKyAgICAgICAgKiBidWlsdGlucy9Qcm9taXNlQ29uc3RydWN0b3IuanM6CisgICAg
ICAgIChyYWNlKToKKyAgICAgICAgKHJlamVjdCk6CisgICAgICAgIChyZXNvbHZlKToKKyAgICAg
ICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3Jh
bU5vZGUpOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3JhbU5v
ZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6c2V0Q2xvc2VkVmFyaWFibGVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
OjpzZXRDbG9zZWRWYXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9k
ZTo6Y2xvc2VkVmFyaWFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6ZGlkRmluaXNoUGFyc2luZyk6CisgICAgICAgICog
cGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpTY29wZTo6c2V0SXNMZXhpY2FsU2NvcGUp
OgorICAgICAgICAoSlNDOjpTY29wZTo6aXNMZXhpY2FsU2NvcGUpOgorICAgICAgICAoSlNDOjpT
Y29wZTo6Y2xvc2VkVmFyaWFibGVDYW5kaWRhdGVzKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmRl
Y2xhcmVkVmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmxleGljYWxWYXJpYWJsZXMp
OgorICAgICAgICAoSlNDOjpTY29wZTo6ZmluYWxpemVMZXhpY2FsRW52aXJvbm1lbnQpOgorICAg
ICAgICAoSlNDOjpQYXJzZXI6OnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUpOgorICAgICAgICAo
SlNDOjpQYXJzZXI6OmxvY2F0aW9uQmVmb3JlTGFzdFRva2VuKToKKyAgICAgICAgKEpTQzo6UGFy
c2VyOjppc0Z1bmN0aW9uTWV0YWRhdGFOb2RlKToKKyAgICAgICAgKEpTQzo6cGFyc2UpOgorICAg
ICAgICAoSlNDOjpQYXJzZXI6OmNsb3NlZFZhcmlhYmxlcyk6IERlbGV0ZWQuCisKIDIwMTYtMDIt
MTIgIEpvbmF0aGFuIERhdmlzICA8am9uZEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFdlYkFz
c2VtYmx5IHRvIHRoZSBzdGF0dXMgcGFnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAJKHJldmlzaW9uIDE5NjQ2
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsMTMgKzEwNiw2IEBAIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBjcmVhdGVFeGVjdXQKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgYW4g
aW5wdXQgc3RyaW5nIHRoYXQgd291bGQgcmVzdWx0IGluIGEgc2luZ2xlIGFub255bW91cyBmdW5j
dGlvbiBleHByZXNzaW9uLgogICAgIG1ldGFkYXRhLT5zZXRFbmRQb3NpdGlvbihwb3NpdGlvbkJl
Zm9yZUxhc3ROZXdsaW5lKTsKICAgICBSRUxFQVNFX0FTU0VSVChtZXRhZGF0YSk7Ci0gICAgZm9y
IChjb25zdCBhdXRvJiBjbG9zZWRWYXJpYWJsZSA6IHByb2dyYW0tPmNsb3NlZFZhcmlhYmxlcygp
KSB7Ci0gICAgICAgIGlmIChjbG9zZWRWYXJpYWJsZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1
bWVudHMuaW1wbCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoY2xvc2VkVmFyaWFibGUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkS2V5d29yZC5p
bXBsKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICB9CiAgICAgbWV0YWRhdGEtPm92ZXJy
aWRlTmFtZShuYW1lKTsKICAgICBWYXJpYWJsZUVudmlyb25tZW50IGR1bW15VERaVmFyaWFibGVz
OwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCZ2bSwgc291cmNlLCBtZXRhZGF0YSwg
a2luZCwgY29uc3RydWN0QWJpbGl0eSwgZHVtbXlURFpWYXJpYWJsZXMsIERlcml2ZWRDb250ZXh0
VHlwZTo6Tm9uZSwgV1RGTW92ZShzb3VyY2VPdmVycmlkZSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL051bWJlclByb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTnVtYmVyUHJvdG90eXBlLmpzCShyZXZpc2lvbiAx
OTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTnVtYmVyUHJvdG90eXBl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIGZ1bmN0aW9uIHRvTG9jYWxlU3Ry
aW5nKC8qIGxvY2FsZXMsIG9wdGkKICAgICAvLyAxLiBMZXQgeCBiZSB0aGlzTnVtYmVyVmFsdWUo
dGhpcyB2YWx1ZSkuCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQoeCkuCiAgICAgdmFyIG51bWJl
ciA9IHRoaXM7Ci0gICAgaWYgKCEodHlwZW9mIG51bWJlciA9PT0gIm51bWJlciIgfHwgbnVtYmVy
IGluc3RhbmNlb2YgTnVtYmVyKSkKKyAgICBpZiAoISh0eXBlb2YgbnVtYmVyID09PSAibnVtYmVy
IiB8fCBudW1iZXIgaW5zdGFuY2VvZiBATnVtYmVyKSkKICAgICAgICAgdGhyb3cgbmV3IEBUeXBl
RXJyb3IoIk51bWJlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgY2FsbGVkIG9uIGluY29tcGF0
aWJsZSAiICsgdHlwZW9mIG51bWJlcik7CiAKICAgICAvLyAzLiBMZXQgbnVtYmVyRm9ybWF0IGJl
IENvbnN0cnVjdCglTnVtYmVyRm9ybWF0JSwgwqtsb2NhbGVzLCBvcHRpb25zwrspLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1Byb21pc2VDb25zdHJ1Y3Rvci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUHJvbWlzZUNvbnN0cnVj
dG9yLmpzCShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvUHJvbWlzZUNvbnN0cnVjdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBA
IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoIUBp
c09iamVjdCh0aGlzKSkKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigifHRoaXN8IGlzIG5v
dCBhIG9iamVjdCIpOworICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigifHRoaXN8IGlzIG5v
dCBhIG9iamVjdCIpOwogCiAgICAgLy8gRklYTUU6IEZpeCB0aGlzIGNvZGUgd2hlbiBAQHNwZWNp
ZXMgd2VsbC1rbm93biBzeW1ib2wgaXMgbGFuZGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY2MjQKQEAgLTg0LDcgKzg0LDcgQEAgZnVuY3Rpb24g
cmFjZShpdGVyYWJsZSkKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoIUBpc09iamVjdCh0
aGlzKSkKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigifHRoaXN8IGlzIG5vdCBhIG9iamVj
dCIpOworICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigifHRoaXN8IGlzIG5vdCBhIG9iamVj
dCIpOwogCiAgICAgLy8gRklYTUU6IEZpeCB0aGlzIGNvZGUgd2hlbiBAQHNwZWNpZXMgd2VsbC1r
bm93biBzeW1ib2wgaXMgbGFuZGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDY2MjQKQEAgLTEwOSw3ICsxMDksNyBAQCBmdW5jdGlvbiByZWplY3Qo
cmVhc29uKQogICAgICJ1c2Ugc3RyaWN0IjsKIAogICAgIGlmICghQGlzT2JqZWN0KHRoaXMpKQot
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ8dGhpc3wgaXMgbm90IGEgb2JqZWN0Iik7Cisg
ICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJ8dGhpc3wgaXMgbm90IGEgb2JqZWN0Iik7CiAK
ICAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7
CiAKQEAgLTEyMyw3ICsxMjMsNyBAQCBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKQogICAgICJ1c2Ug
c3RyaWN0IjsKIAogICAgIGlmICghQGlzT2JqZWN0KHRoaXMpKQotICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCJ8dGhpc3wgaXMgbm90IGEgb2JqZWN0Iik7CisgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJ8dGhpc3wgaXMgbm90IGEgb2JqZWN0Iik7CiAKICAgICBpZiAoQGlzUHJvbWlz
ZSh2YWx1ZSkpIHsKICAgICAgICAgdmFyIHZhbHVlQ29uc3RydWN0b3IgPSB2YWx1ZS5jb25zdHJ1
Y3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lv
biAxOTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIzLDExICsxMjMsNiBAQCBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUo
UGFyc2VyQXJlbmEmIHBhCiB7CiB9CiAKLXZvaWQgUHJvZ3JhbU5vZGU6OnNldENsb3NlZFZhcmlh
YmxlcyhWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4mJiBjbG9zZWRWYXJpYWJsZXMp
Ci17Ci0gICAgbV9jbG9zZWRWYXJpYWJsZXMgPSBXVEZNb3ZlKGNsb3NlZFZhcmlhYmxlcyk7Ci19
Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNb2R1bGVQcm9ncmFtTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBNb2R1bGVQcm9ncmFtTm9kZTo6TW9kdWxl
UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBj
aGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3Rh
Y2smIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgRnVu
Y3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMg
ZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTYsOCArMTU5Niw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFN0YXRlbWVudHNCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqIGRlc3RpbmF0aW9uKTsKICAgICAgICAgCi0gICAgICAgIHZv
aWQgc2V0Q2xvc2VkVmFyaWFibGVzKFZlY3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiYm
KSB7IH0KLQogICAgICAgICB2b2lkIGFuYWx5emVNb2R1bGUoTW9kdWxlQW5hbHl6ZXImKTsKIAog
ICAgIHByb3RlY3RlZDoKQEAgLTE2MjMsMTIgKzE2MjEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSBmYWxzZTsKIAotICAg
ICAgICB2b2lkIHNldENsb3NlZFZhcmlhYmxlcyhWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJ
bXBsPj4mJik7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+
PiYgY2xvc2VkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZWRWYXJpYWJsZXM7IH0K
LQogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwotICAgICAgICBWZWN0b3I8
UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4gbV9jbG9zZWRWYXJpYWJsZXM7CiAgICAgICAgIHVu
c2lnbmVkIG1fc3RhcnRDb2x1bW47CiAgICAgICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOwogICAg
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lv
biAxOTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksMTEgQEAgU3RyaW5nIFBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUlubmVyKGNvbgogICAgIElkZW50aWZpZXJTZXQgY2FwdHVyZWRWYXJpYWJsZXM7CiAg
ICAgYm9vbCBtb2RpZmllZFBhcmFtZXRlciA9IGZhbHNlOwogICAgIGJvb2wgbW9kaWZpZWRBcmd1
bWVudHMgPSBmYWxzZTsKLSAgICBzY29wZS0+Z2V0Q2FwdHVyZWRWYXJzKGNhcHR1cmVkVmFyaWFi
bGVzLCBtb2RpZmllZFBhcmFtZXRlciwgbW9kaWZpZWRBcmd1bWVudHMpOworICAgIHNjb3BlLT5n
ZXRDYXB0dXJlZFZhcnMoY2FwdHVyZWRWYXJpYWJsZXMsIG1vZGlmaWVkUGFyYW1ldGVyLCBtb2Rp
ZmllZEFyZ3VtZW50cyk7IC8vIEZJWE1FOiBtYWtlIHRoaXMganVzdCBmaW5kIG91dCBtb2RpZmVk
UGFyYW1lcmVyL21vZGlmaWVkQXJndW1lbnRzCisKKyAgICAvL1ZhcmlhYmxlRW52aXJvbm1lbnQg
bGV4aWNhbERlY2xhcmF0aW9uczsKKyAgICAvL2xleGljYWxEZWNsYXJhdGlvbnMuc3dhcChzY29w
ZS0+ZmluYWxpemVMZXhpY2FsRW52aXJvbm1lbnQoKSk7CisKICAgICBWYXJpYWJsZUVudmlyb25t
ZW50JiB2YXJEZWNsYXJhdGlvbnMgPSBzY29wZS0+ZGVjbGFyZWRWYXJpYWJsZXMoKTsKICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogY2FwdHVyZWRWYXJpYWJsZXMpCiAgICAgICAgIHZhckRlY2xhcmF0
aW9ucy5tYXJrVmFyaWFibGVBc0NhcHR1cmVkKGVudHJ5KTsKQEAgLTMyMSw0OCArMzI1LDMwIEBA
IFN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcihjb24KICAgICBpZiAobW9kaWZp
ZWRBcmd1bWVudHMpCiAgICAgICAgIGZlYXR1cmVzIHw9IE1vZGlmaWVkQXJndW1lbnRzRmVhdHVy
ZTsKIAotICAgIFZlY3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiBjbG9zZWRWYXJpYWJs
ZXM7Ci0gICAgaWYgKG1fcGFyc2luZ0J1aWx0aW4pIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
bmVlZHMgdG8gYmUgY2hhbmdlZCBpZiB3ZSB3YW50IHRvIGFsbG93IGJ1aWx0aW5zIHRvIHVzZSBs
ZXhpY2FsIGRlY2xhcmF0aW9ucy4KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YXJpYWJsZSA6
IHVzZWRWYXJpYWJsZXMpIHsKLSAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElk
ZW50aWZpZXI6OmZyb21VaWQobV92bSwgdmFyaWFibGUuZ2V0KCkpOwotICAgICAgICAgICAgaWYg
KHNjb3BlLT5oYXNEZWNsYXJlZFZhcmlhYmxlKGlkZW50aWZpZXIpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2NvcGUtPmhhc0RlY2xh
cmVkUGFyYW1ldGVyKGlkZW50aWZpZXIpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBpZiAodmFyaWFibGUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRz
LmltcGwoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgY2xvc2Vk
VmFyaWFibGVzLmFwcGVuZCh2YXJpYWJsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNh
cHR1cmVkVmFyaWFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBjYXB0dXJlZFZhcmlhYmxlIDogY2FwdHVyZWRWYXJpYWJsZXMpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc2NvcGUtPmhhc0RlY2xhcmVkVmFyaWFibGUoY2FwdHVyZWRWYXJpYWJsZSkpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKHNjb3BlLT5o
YXNEZWNsYXJlZFBhcmFtZXRlcihjYXB0dXJlZFZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIGlmIChtX3BhcnNpbmdCdWlsdGluICYmIGlzUHJvZ3JhbVBhcnNlTW9kZShwYXJz
ZU1vZGUpKSB7CisgICAgICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMg
PSBzY29wZS0+bGV4aWNhbFZhcmlhYmxlcygpOworICAgICAgICBjb25zdCBJZGVudGlmaWVyU2V0
JiBjbG9zZWRWYXJpYWJsZUNhbmRpZGF0ZXMgPSBzY29wZS0+Y2xvc2VkVmFyaWFibGVDYW5kaWRh
dGVzKCk7CisgICAgICAgIGNvbnN0IEJ1aWx0aW5OYW1lcyYgYnVpbHRpbk5hbWVzID0gbV92bS0+
cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCk7CisgICAgICAgIGZvciAoY29uc3QgUmVmUHRy
PFVuaXF1ZWRTdHJpbmdJbXBsPiYgY2FuZGlkYXRlIDogY2xvc2VkVmFyaWFibGVDYW5kaWRhdGVz
KSB7CisgICAgICAgICAgICBpZiAoIWxleGljYWxWYXJpYWJsZXMuY29udGFpbnMoY2FuZGlkYXRl
KSAmJiAhdmFyRGVjbGFyYXRpb25zLmNvbnRhaW5zKGNhbmRpZGF0ZSkgJiYgIWJ1aWx0aW5OYW1l
cy5pc1ByaXZhdGVOYW1lKCpjYW5kaWRhdGUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgZGF0
YUxvZygiQmFkIGdsb2JhbCBjYXB0dXJlIGluIGJ1aWx0aW46ICciLCBjYW5kaWRhdGUsICInXG4i
KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKG1fc291cmNlLT52aWV3KCkpOworICAgICAgICAg
ICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZGlk
RmluaXNoUGFyc2luZyhzb3VyY2VFbGVtZW50cywgY29udGV4dC5mdW5jRGVjbGFyYXRpb25zKCks
IHZhckRlY2xhcmF0aW9ucywgZmVhdHVyZXMsIGNvbnRleHQubnVtQ29uc3RhbnRzKCksIFdURk1v
dmUoY2xvc2VkVmFyaWFibGVzKSk7CisgICAgZGlkRmluaXNoUGFyc2luZyhzb3VyY2VFbGVtZW50
cywgY29udGV4dC5mdW5jRGVjbGFyYXRpb25zKCksIHZhckRlY2xhcmF0aW9ucywgZmVhdHVyZXMs
IGNvbnRleHQubnVtQ29uc3RhbnRzKCkpOwogCiAgICAgcmV0dXJuIHBhcnNlRXJyb3I7CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB2b2lkIFBhcnNlcjxMZXhlclR5cGU+Ojpk
aWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiBzb3VyY2VFbGVtZW50cywgRGVjbGFyYXRp
b25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmNTdGFjaywgCi0gICAgVmFyaWFibGVFbnZpcm9u
bWVudCYgdmFyRGVjbGFyYXRpb25zLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiYmIGNsb3NlZFZh
cmlhYmxlcykKKyAgICBWYXJpYWJsZUVudmlyb25tZW50JiB2YXJEZWNsYXJhdGlvbnMsIENvZGVG
ZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKICAgICBtX3NvdXJjZUVsZW1l
bnRzID0gc291cmNlRWxlbWVudHM7CiAgICAgbV9mdW5jRGVjbGFyYXRpb25zLnN3YXAoZnVuY1N0
YWNrKTsKICAgICBtX3ZhckRlY2xhcmF0aW9ucy5zd2FwKHZhckRlY2xhcmF0aW9ucyk7Ci0gICAg
bV9jbG9zZWRWYXJpYWJsZXMgPSBjbG9zZWRWYXJpYWJsZXM7CiAgICAgbV9mZWF0dXJlcyA9IGZl
YXR1cmVzOwogICAgIG1fbnVtQ29uc3RhbnRzID0gbnVtQ29uc3RhbnRzOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMs
NiArMjkzLDcgQEAgc3RydWN0IFNjb3BlIHsKICAgICB9CiAgICAgYm9vbCBpc0xleGljYWxTY29w
ZSgpIHsgcmV0dXJuIG1faXNMZXhpY2FsU2NvcGU7IH0KIAorICAgIGNvbnN0IElkZW50aWZpZXJT
ZXQmIGNsb3NlZFZhcmlhYmxlQ2FuZGlkYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VkVmFy
aWFibGVDYW5kaWRhdGVzOyB9CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRWYXJp
YWJsZXMoKSB7IHJldHVybiBtX2RlY2xhcmVkVmFyaWFibGVzOyB9CiAgICAgVmFyaWFibGVFbnZp
cm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcygpIHsgcmV0dXJuIG1fbGV4aWNhbFZhcmlhYmxlczsg
fQogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIGZpbmFsaXplTGV4aWNhbEVudmlyb25tZW50KCkg
CkBAIC02ODIsNyArNjgzLDYgQEAgcHVibGljOgogCiAgICAgSlNUZXh0UG9zaXRpb24gcG9zaXRp
b25CZWZvcmVMYXN0TmV3bGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGV4ZXItPnBvc2l0aW9uQmVm
b3JlTGFzdE5ld2xpbmUoKTsgfQogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbkJlZm9yZUxh
c3RUb2tlbigpIGNvbnN0IHsgcmV0dXJuIG1fbGV4ZXItPmxhc3RUb2tlbkxvY2F0aW9uKCk7IH0K
LSAgICBWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4mJiBjbG9zZWRWYXJpYWJsZXMo
KSB7IHJldHVybiBXVEZNb3ZlKG1fY2xvc2VkVmFyaWFibGVzKTsgfQogCiBwcml2YXRlOgogICAg
IHN0cnVjdCBBbGxvd0luT3ZlcnJpZGUgewpAQCAtOTk1LDcgKzk5NSw3IEBAIHByaXZhdGU6CiAg
ICAgUGFyc2VyKCk7CiAgICAgU3RyaW5nIHBhcnNlSW5uZXIoY29uc3QgSWRlbnRpZmllciYsIFNv
dXJjZVBhcnNlTW9kZSk7CiAKLSAgICB2b2lkIGRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVu
dHMqLCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayYsIFZhcmlhYmxlRW52aXJvbm1l
bnQmLCBDb2RlRmVhdHVyZXMsIGludCwgY29uc3QgVmVjdG9yPFJlZlB0cjxVbmlxdWVkU3RyaW5n
SW1wbD4+JiYpOworICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyosIERl
Y2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIENv
ZGVGZWF0dXJlcywgaW50KTsKIAogICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIHR5cGUgb2YgZXJy
b3IgdG8gcmVwb3J0LgogICAgIGJvb2wgaXNGdW5jdGlvbk1ldGFkYXRhTm9kZShTY29wZU5vZGUq
KSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTQwNyw3ICsxNDA3LDYgQEAgcHJpdmF0ZToKICAgICBU
aGlzVERaTW9kZSBtX3RoaXNURFpNb2RlOwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgbV92YXJE
ZWNsYXJhdGlvbnM7CiAgICAgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2sgbV9mdW5j
RGVjbGFyYXRpb25zOwotICAgIFZlY3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiBtX2Ns
b3NlZFZhcmlhYmxlczsKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAgICBpbnQgbV9u
dW1Db25zdGFudHM7CiAgICAgRXhwcmVzc2lvbkVycm9yQ2xhc3NpZmllciogbV9leHByZXNzaW9u
RXJyb3JDbGFzc2lmaWVyOwpAQCAtMTU0Miw4ICsxNTQxLDYgQEAgc3RkOjp1bmlxdWVfcHRyPFBh
cnNlZE5vZGU+IHBhcnNlKAogICAgICAgICBpZiAoYnVpbHRpbk1vZGUgPT0gSlNQYXJzZXJCdWls
dGluTW9kZTo6QnVpbHRpbikgewogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAg
ICAgICAgV1RGOjpkYXRhTG9nKCJFcnJvciBjb21waWxpbmcgYnVpbHRpbjogIiwgZXJyb3IubWVz
c2FnZSgpLCAiXG4iKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQt
PnNldENsb3NlZFZhcmlhYmxlcyhwYXJzZXIuY2xvc2VkVmFyaWFibGVzKCkpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MTk2NDYxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzMgQEAKKzIwMTYtMDItMTIgIFNhYW0gYmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgVGhlIHBhcnNlciBkb2Vzbid0IHByb3Blcmx5IHByb3RlY3QgYWdhaW5zdCBn
bG9iYWwgdmFyaWFibGUgcmVmZXJlbmNlcyBpbiBidWlsdGlucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MTQ0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIEpTIGJ1aWx0aW5zIHRvIG5vIGxv
bmdlciByZWZlcmVuY2UgZ2xvYmFsIHZhcmlhYmxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMg
YmVjYXVzZSBvbGQgdGVzdHMgY292ZXIgdGhlIGlzc3VlcyBoZXJlLgorCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9OYXZpZ2F0b3JVc2VyTWVkaWEuanM6CisgICAgICAgICh3ZWJraXRH
ZXRVc2VyTWVkaWEpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24uanM6CisgICAgICAgIChhZGRJY2VDYW5kaWRhdGUpOgorICAgICAgICAoZ2V0U3RhdHMp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5h
bHMuanM6CisgICAgICAgIChzZXRMb2NhbE9yUmVtb3RlRGVzY3JpcHRpb24pOgorICAgICAgICAq
IE1vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qczoKKyAgICAgICAg
KFJlcGxhY2VtZW50LnByb3RvdHlwZS5oYW5kbGVFdmVudCk6CisgICAgICAgICogTW9kdWxlcy9z
dHJlYW1zL0J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kuanM6CisgICAgICAgIChpbml0aWFsaXpl
Qnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSk6CisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL0Nv
dW50UXVldWluZ1N0cmF0ZWd5LmpzOgorICAgICAgICAoaW5pdGlhbGl6ZUNvdW50UXVldWluZ1N0
cmF0ZWd5KToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5h
bHMuanM6CisgICAgICAgICh0ZWVSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxP
YmplY3Q6OmFkZEJ1aWx0aW5HbG9iYWxzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3Jl
QnVpbHRpbk5hbWVzLmg6CisKIDIwMTYtMDItMTEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBh
cHBsZS5jb20+CiAKICAgICAgICAgT3B0aW1pemUgdGV4dHVyZS1jb21wbGV0ZSBjaGVja3MKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTmF2aWdhdG9yVXNlck1lZGlh
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTmF2
aWdhdG9yVXNlck1lZGlhLmpzCShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL05hdmlnYXRvclVzZXJNZWRpYS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQCBmdW5jdGlvbiB3ZWJraXRHZXRVc2VyTWVkaWEob3B0aW9ucywgc3Vj
CiAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVF
cnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKIAotICAgIGlmIChvcHRpb25zICE9PSBPYmpl
Y3Qob3B0aW9ucykpCisgICAgaWYgKG9wdGlvbnMgIT09IEBPYmplY3Qob3B0aW9ucykpCiAgICAg
ICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcmd1bWVudCAxIChvcHRpb25zKSB0byBOYXZpZ2F0
b3Iud2Via2l0R2V0VXNlck1lZGlhIG11c3QgYmUgYW4gb2JqZWN0Iik7CiAKICAgICBpZiAodHlw
ZW9mIHN1Y2Nlc3NDYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5qcwko
cmV2aXNpb24gMTk2NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBmdW5j
dGlvbiBhZGRJY2VDYW5kaWRhdGUoKQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTm90
IGVub3VnaCBhcmd1bWVudHMiKTsKIAogICAgIHZhciBjYW5kaWRhdGUgPSBhcmd1bWVudHNbMF07
Ci0gICAgaWYgKCEoY2FuZGlkYXRlIGluc3RhbmNlb2YgUlRDSWNlQ2FuZGlkYXRlKSkKKyAgICBp
ZiAoIShjYW5kaWRhdGUgaW5zdGFuY2VvZiBAUlRDSWNlQ2FuZGlkYXRlKSkKICAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIkFyZ3VtZW50IDEgKCdjYW5kaWRhdGUnKSB0byBSVENQZWVyQ29u
bmVjdGlvbi5hZGRJY2VDYW5kaWRhdGUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBSVENJY2VDYW5k
aWRhdGUiKTsKIAogICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKQEAgLTk5LDcgKzk5
LDcgQEAgZnVuY3Rpb24gZ2V0U3RhdHMoKQogCiAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHsK
ICAgICAgICAgc2VsZWN0b3IgPSBhcmd1bWVudHNbMF07Ci0gICAgICAgIGlmIChzZWxlY3RvciAh
PSBudWxsICYmICEoc2VsZWN0b3IgaW5zdGFuY2VvZiBNZWRpYVN0cmVhbVRyYWNrKSkKKyAgICAg
ICAgaWYgKHNlbGVjdG9yICE9IG51bGwgJiYgIShzZWxlY3RvciBpbnN0YW5jZW9mIEBNZWRpYVN0
cmVhbVRyYWNrKSkKICAgICAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcmd1bWVudCAx
ICgnc2VsZWN0b3InKSB0byBSVENQZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyBtdXN0IGJlIGFuIGlu
c3RhbmNlIG9mIE1lZGlhU3RyZWFtVHJhY2siKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb25JbnRlcm5hbHMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbkludGVybmFscy5qcwkocmV2aXNpb24gMTk2NDYxKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbkludGVybmFscy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBmdW5jdGlvbiBzZXRMb2NhbE9yUmVtb3RlRGVzY3Jp
cHRpb24ocGVlCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJOb3QgZW5vdWdoIGFyZ3Vt
ZW50cyIpOwogCiAgICAgdmFyIGRlc2NyaXB0aW9uID0gYXJnc1swXTsKLSAgICBpZiAoIShkZXNj
cmlwdGlvbiBpbnN0YW5jZW9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbikpCisgICAgaWYgKCEoZGVz
Y3JpcHRpb24gaW5zdGFuY2VvZiBAUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKSkKICAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIkFyZ3VtZW50IDEgKCdkZXNjcmlwdGlvbicpIHRvIFJUQ1BlZXJD
b25uZWN0aW9uLiIgKyBmdW5jdGlvbk5hbWUgKyAiIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uIik7CiAKICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qcwkocmV2aXNpb24gMTk2NDYxKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgUmVwbGFjZW1lbnQucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgaWYgKCFldmVudERhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICBpZiAodGhpc1tldmVudERhdGFdICYmIHRoaXNbZXZlbnREYXRhXSBpbnN0YW5j
ZW9mIEZ1bmN0aW9uKQorICAgICAgICAgICAgaWYgKHRoaXNbZXZlbnREYXRhXSAmJiB0eXBlb2Yg
dGhpc1tldmVudERhdGFdID09PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgICAgIHRoaXNbZXZl
bnREYXRhXS5jYWxsKHRoaXMsIGV2ZW50KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICB0aGlzLnBvc3RFdmVudChldmVudERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zdHJlYW1zL0J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL0J5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3ku
anMJKHJldmlzaW9uIDE5NjQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9C
eXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3
IEBAIGZ1bmN0aW9uIGluaXRpYWxpemVCeXRlTGVuZ3RoUXVldWluZ1N0cmEKIHsKICAgICAidXNl
IHN0cmljdCI7CiAKLSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImhpZ2hXYXRlck1h
cmsiLCB7CisgICAgQE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGlnaFdhdGVyTWFyayIs
IHsKICAgICAgICAgdmFsdWU6IHBhcmFtZXRlcnMuaGlnaFdhdGVyTWFyaywKICAgICAgICAgY29u
ZmlndXJhYmxlOiB0cnVlLAogICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL0NvdW50UXVldWluZ1N0cmF0ZWd5LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Db3VudFF1ZXVpbmdTdHJhdGVn
eS5qcwkocmV2aXNpb24gMTk2NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1z
L0NvdW50UXVldWluZ1N0cmF0ZWd5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBA
IGZ1bmN0aW9uIGluaXRpYWxpemVDb3VudFF1ZXVpbmdTdHJhdGVneSgKIHsKICAgICAidXNlIHN0
cmljdCI7CiAKLSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImhpZ2hXYXRlck1hcmsi
LCB7CisgICAgQE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGlnaFdhdGVyTWFyayIsIHsK
ICAgICAgICAgdmFsdWU6IHBhcmFtZXRlcnMuaGlnaFdhdGVyTWFyaywKICAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlLAogICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUludGVy
bmFscy5qcwkocmV2aXNpb24gMTk2NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJl
YW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04NywxMSAr
ODcsMTEgQEAgZnVuY3Rpb24gdGVlUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBzaG91bAogCiAgICAg
Y29uc3QgcHVsbEZ1bmN0aW9uID0gQHRlZVJlYWRhYmxlU3RyZWFtUHVsbEZ1bmN0aW9uKHRlZVN0
YXRlLCByZWFkZXIsIHNob3VsZENsb25lKTsKIAotICAgIGNvbnN0IGJyYW5jaDEgPSBuZXcgUmVh
ZGFibGVTdHJlYW0oeworICAgIGNvbnN0IGJyYW5jaDEgPSBuZXcgQFJlYWRhYmxlU3RyZWFtKHsK
ICAgICAgICAgInB1bGwiOiBwdWxsRnVuY3Rpb24sCiAgICAgICAgICJjYW5jZWwiOiBAdGVlUmVh
ZGFibGVTdHJlYW1CcmFuY2gxQ2FuY2VsRnVuY3Rpb24odGVlU3RhdGUsIHN0cmVhbSkKICAgICB9
KTsKLSAgICBjb25zdCBicmFuY2gyID0gbmV3IFJlYWRhYmxlU3RyZWFtKHsKKyAgICBjb25zdCBi
cmFuY2gyID0gbmV3IEBSZWFkYWJsZVN0cmVhbSh7CiAgICAgICAgICJwdWxsIjogcHVsbEZ1bmN0
aW9uLAogICAgICAgICAiY2FuY2VsIjogQHRlZVJlYWRhYmxlU3RyZWFtQnJhbmNoMkNhbmNlbEZ1
bmN0aW9uKHRlZVN0YXRlLCBzdHJlYW0pCiAgICAgfSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxOTY0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDExIEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2lu
Y2x1ZGUgIkpTTWVkaWFTdHJlYW1UcmFjay5oIgorI2luY2x1ZGUgIkpTUmVhZGFibGVTdHJlYW0u
aCIKICNpbmNsdWRlICJKU1JlYWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5oIgorI2lu
Y2x1ZGUgIkpTUlRDSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAiSlNSVENTZXNzaW9uRGVzY3Jp
cHRpb24uaCIKICNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCkBAIC03
OCw4ICs4MiwxMiBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjphZGRCdWlsdGluR2xvYmFsCiAg
ICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oY2xpZW50RGF0YS5i
dWlsdGluTmFtZXMoKS5zdHJlYW1SZWFkYWJsZVByaXZhdGVOYW1lKCksIGpzTnVtYmVyKDQpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFs
UHJvcGVydHlJbmZvKGNsaWVudERhdGEuYnVpbHRpbk5hbWVzKCkuc3RyZWFtV2FpdGluZ1ByaXZh
dGVOYW1lKCksIGpzTnVtYmVyKDUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBK
U0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKGNsaWVudERhdGEuYnVpbHRpbk5h
bWVzKCkuc3RyZWFtV3JpdGFibGVQcml2YXRlTmFtZSgpLCBqc051bWJlcig2KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5
SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlTmFt
ZSgpLCBKU01lZGlhU3RyZWFtVHJhY2s6OmdldENvbnN0cnVjdG9yKHZtLCB0aGlzKSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3Bl
cnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLlJlYWRhYmxlU3RyZWFtUHJpdmF0ZU5h
bWUoKSwgSlNSZWFkYWJsZVN0cmVhbTo6Z2V0Q29uc3RydWN0b3Iodm0sIHRoaXMpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVy
dHlJbmZvKGNsaWVudERhdGEuYnVpbHRpbk5hbWVzKCkuUmVhZGFibGVTdHJlYW1Db250cm9sbGVy
UHJpdmF0ZU5hbWUoKSwgcHJpdmF0ZVJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckNvbnN0cnVjdG9y
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xv
YmFsUHJvcGVydHlJbmZvKGNsaWVudERhdGEuYnVpbHRpbk5hbWVzKCkuUmVhZGFibGVTdHJlYW1S
ZWFkZXJQcml2YXRlTmFtZSgpLCBwcml2YXRlUmVhZGFibGVTdHJlYW1SZWFkZXJDb25zdHJ1Y3Rv
ciwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okds
b2JhbFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLlJUQ0ljZUNhbmRpZGF0
ZVByaXZhdGVOYW1lKCksIEpTUlRDSWNlQ2FuZGlkYXRlOjpnZXRDb25zdHJ1Y3Rvcih2bSwgdGhp
cyksIERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpH
bG9iYWxQcm9wZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5SVENTZXNzaW9uRGVz
Y3JpcHRpb25Qcml2YXRlTmFtZSgpLCBKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbjo6Z2V0Q29uc3Ry
dWN0b3Iodm0sIHRoaXMpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgIH07CiAgICAgYWRk
U3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2Jh
bHMpKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1
aWx0aW5OYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVCdWlsdGluTmFtZXMuaAkocmV2aXNpb24gMTk2NDYxKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw4
ICs2OCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgbWFjcm8odW5kZXJseWluZ1Npbmsp
IFwKICAgICBtYWNybyh1bmRlcmx5aW5nU291cmNlKSBcCiAgICAgbWFjcm8od3JpdGluZykgXAor
ICAgIG1hY3JvKE1lZGlhU3RyZWFtVHJhY2spIFwKKyAgICBtYWNybyhSZWFkYWJsZVN0cmVhbSkg
XAogICAgIG1hY3JvKFJlYWRhYmxlU3RyZWFtUmVhZGVyKSBcCiAgICAgbWFjcm8oUmVhZGFibGVT
dHJlYW1Db250cm9sbGVyKSBcCisgICAgbWFjcm8oUlRDSWNlQ2FuZGlkYXRlKSBcCisgICAgbWFj
cm8oUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKSBcCiAKIGNsYXNzIFdlYkNvcmVCdWlsdGluTmFtZXMg
ewogcHVibGljOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271239</attachid>
            <date>2016-02-12 15:43:05 -0800</date>
            <delta_ts>2016-02-12 15:45:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>22690</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NTIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE2LTAyLTEyICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBwYXJzZXIgZG9lc24ndCBwcm9wZXJseSBwcm90ZWN0IGFnYWluc3QgZ2xvYmFsIHZhcmlh
YmxlIHJlZmVyZW5jZXMgaW4gYnVpbHRpbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NDE0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgb3VyIGdsb2JhbCB2YXJpYWJsZSBy
ZWZlcmVuY2UgZGV0ZWN0aW9uCisgICAgICAgIGFsZ29yaXRobSB0aGF0IHdhcyBicm9rZW4uIEFm
dGVyIGZpeGluZyB0aGUgYWxnb3JpdGhtLCBJCisgICAgICAgIGRldGVjdGVkIG1hbnkgcGxhY2Vz
IHdoZXJlIHdlIHdlcmUgaW5jb3JyZWN0bHkgdXNpbmcgZ2xvYmFsCisgICAgICAgIHZhcmlhYmxl
cy4gSSd2ZSBmaXhlZCBhbGwgdGhvc2UuCisKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGluRXhl
Y3V0YWJsZXMuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVFeGVjdXRhYmxlSW50ZXJuYWwpOgor
ICAgICAgICAqIGJ1aWx0aW5zL051bWJlclByb3RvdHlwZS5qczoKKyAgICAgICAgKHRvTG9jYWxl
U3RyaW5nKToKKyAgICAgICAgKiBidWlsdGlucy9Qcm9taXNlQ29uc3RydWN0b3IuanM6CisgICAg
ICAgIChyYWNlKToKKyAgICAgICAgKHJlamVjdCk6CisgICAgICAgIChyZXNvbHZlKToKKyAgICAg
ICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6UHJvZ3Jh
bU5vZGUpOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtTm9kZTo6TW9kdWxlUHJvZ3JhbU5v
ZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9kZTo6c2V0Q2xvc2VkVmFyaWFibGVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2Rl
OjpzZXRDbG9zZWRWYXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFtTm9k
ZTo6Y2xvc2VkVmFyaWFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6ZGlkRmluaXNoUGFyc2luZyk6CisgICAgICAgICog
cGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpTY29wZTo6c2V0SXNMZXhpY2FsU2NvcGUp
OgorICAgICAgICAoSlNDOjpTY29wZTo6aXNMZXhpY2FsU2NvcGUpOgorICAgICAgICAoSlNDOjpT
Y29wZTo6Y2xvc2VkVmFyaWFibGVDYW5kaWRhdGVzKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmRl
Y2xhcmVkVmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6U2NvcGU6OmxleGljYWxWYXJpYWJsZXMp
OgorICAgICAgICAoSlNDOjpTY29wZTo6ZmluYWxpemVMZXhpY2FsRW52aXJvbm1lbnQpOgorICAg
ICAgICAoSlNDOjpQYXJzZXI6OnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUpOgorICAgICAgICAo
SlNDOjpQYXJzZXI6OmxvY2F0aW9uQmVmb3JlTGFzdFRva2VuKToKKyAgICAgICAgKEpTQzo6UGFy
c2VyOjppc0Z1bmN0aW9uTWV0YWRhdGFOb2RlKToKKyAgICAgICAgKEpTQzo6cGFyc2UpOgorICAg
ICAgICAoSlNDOjpQYXJzZXI6OmNsb3NlZFZhcmlhYmxlcyk6IERlbGV0ZWQuCisKIDIwMTYtMDIt
MTIgIEpvbmF0aGFuIERhdmlzICA8am9uZEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFdlYkFz
c2VtYmx5IHRvIHRoZSBzdGF0dXMgcGFnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5FeGVjdXRhYmxlcy5jcHAJKHJldmlzaW9uIDE5NjQ2
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluRXhlY3V0YWJsZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsMTMgKzEwNiw2IEBAIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBjcmVhdGVFeGVjdXQKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgYW4g
aW5wdXQgc3RyaW5nIHRoYXQgd291bGQgcmVzdWx0IGluIGEgc2luZ2xlIGFub255bW91cyBmdW5j
dGlvbiBleHByZXNzaW9uLgogICAgIG1ldGFkYXRhLT5zZXRFbmRQb3NpdGlvbihwb3NpdGlvbkJl
Zm9yZUxhc3ROZXdsaW5lKTsKICAgICBSRUxFQVNFX0FTU0VSVChtZXRhZGF0YSk7Ci0gICAgZm9y
IChjb25zdCBhdXRvJiBjbG9zZWRWYXJpYWJsZSA6IHByb2dyYW0tPmNsb3NlZFZhcmlhYmxlcygp
KSB7Ci0gICAgICAgIGlmIChjbG9zZWRWYXJpYWJsZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1
bWVudHMuaW1wbCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoY2xvc2VkVmFyaWFibGUgPT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZWZpbmVkS2V5d29yZC5p
bXBsKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICB9CiAgICAgbWV0YWRhdGEtPm92ZXJy
aWRlTmFtZShuYW1lKTsKICAgICBWYXJpYWJsZUVudmlyb25tZW50IGR1bW15VERaVmFyaWFibGVz
OwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCZ2bSwgc291cmNlLCBtZXRhZGF0YSwg
a2luZCwgY29uc3RydWN0QWJpbGl0eSwgZHVtbXlURFpWYXJpYWJsZXMsIERlcml2ZWRDb250ZXh0
VHlwZTo6Tm9uZSwgV1RGTW92ZShzb3VyY2VPdmVycmlkZSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL051bWJlclByb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTnVtYmVyUHJvdG90eXBlLmpzCShyZXZpc2lvbiAx
OTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTnVtYmVyUHJvdG90eXBl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIGZ1bmN0aW9uIHRvTG9jYWxlU3Ry
aW5nKC8qIGxvY2FsZXMsIG9wdGkKICAgICAvLyAxLiBMZXQgeCBiZSB0aGlzTnVtYmVyVmFsdWUo
dGhpcyB2YWx1ZSkuCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQoeCkuCiAgICAgdmFyIG51bWJl
ciA9IHRoaXM7Ci0gICAgaWYgKCEodHlwZW9mIG51bWJlciA9PT0gIm51bWJlciIgfHwgbnVtYmVy
IGluc3RhbmNlb2YgTnVtYmVyKSkKKyAgICBpZiAoISh0eXBlb2YgbnVtYmVyID09PSAibnVtYmVy
IiB8fCBudW1iZXIgaW5zdGFuY2VvZiBATnVtYmVyKSkKICAgICAgICAgdGhyb3cgbmV3IEBUeXBl
RXJyb3IoIk51bWJlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgY2FsbGVkIG9uIGluY29tcGF0
aWJsZSAiICsgdHlwZW9mIG51bWJlcik7CiAKICAgICAvLyAzLiBMZXQgbnVtYmVyRm9ybWF0IGJl
IENvbnN0cnVjdCglTnVtYmVyRm9ybWF0JSwgwqtsb2NhbGVzLCBvcHRpb25zwrspLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1Byb21pc2VDb25zdHJ1Y3Rvci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUHJvbWlzZUNvbnN0cnVj
dG9yLmpzCShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvUHJvbWlzZUNvbnN0cnVjdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBA
IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoIUBp
c09iamVjdCh0aGlzKSkKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigifHRoaXN8IGlzIG5v
dCBhIG9iamVjdCIpOworICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigifHRoaXN8IGlzIG5v
dCBhIG9iamVjdCIpOwogCiAgICAgLy8gRklYTUU6IEZpeCB0aGlzIGNvZGUgd2hlbiBAQHNwZWNp
ZXMgd2VsbC1rbm93biBzeW1ib2wgaXMgbGFuZGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY2MjQKQEAgLTg0LDcgKzg0LDcgQEAgZnVuY3Rpb24g
cmFjZShpdGVyYWJsZSkKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoIUBpc09iamVjdCh0
aGlzKSkKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigifHRoaXN8IGlzIG5vdCBhIG9iamVj
dCIpOworICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigifHRoaXN8IGlzIG5vdCBhIG9iamVj
dCIpOwogCiAgICAgLy8gRklYTUU6IEZpeCB0aGlzIGNvZGUgd2hlbiBAQHNwZWNpZXMgd2VsbC1r
bm93biBzeW1ib2wgaXMgbGFuZGVkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDY2MjQKQEAgLTEwOSw3ICsxMDksNyBAQCBmdW5jdGlvbiByZWplY3Qo
cmVhc29uKQogICAgICJ1c2Ugc3RyaWN0IjsKIAogICAgIGlmICghQGlzT2JqZWN0KHRoaXMpKQot
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ8dGhpc3wgaXMgbm90IGEgb2JqZWN0Iik7Cisg
ICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJ8dGhpc3wgaXMgbm90IGEgb2JqZWN0Iik7CiAK
ICAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7
CiAKQEAgLTEyMyw3ICsxMjMsNyBAQCBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKQogICAgICJ1c2Ug
c3RyaWN0IjsKIAogICAgIGlmICghQGlzT2JqZWN0KHRoaXMpKQotICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCJ8dGhpc3wgaXMgbm90IGEgb2JqZWN0Iik7CisgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJ8dGhpc3wgaXMgbm90IGEgb2JqZWN0Iik7CiAKICAgICBpZiAoQGlzUHJvbWlz
ZSh2YWx1ZSkpIHsKICAgICAgICAgdmFyIHZhbHVlQ29uc3RydWN0b3IgPSB2YWx1ZS5jb25zdHJ1
Y3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lv
biAxOTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIzLDExICsxMjMsNiBAQCBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUo
UGFyc2VyQXJlbmEmIHBhCiB7CiB9CiAKLXZvaWQgUHJvZ3JhbU5vZGU6OnNldENsb3NlZFZhcmlh
YmxlcyhWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4mJiBjbG9zZWRWYXJpYWJsZXMp
Ci17Ci0gICAgbV9jbG9zZWRWYXJpYWJsZXMgPSBXVEZNb3ZlKGNsb3NlZFZhcmlhYmxlcyk7Ci19
Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNb2R1bGVQcm9ncmFtTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBNb2R1bGVQcm9ncmFtTm9kZTo6TW9kdWxl
UHJvZ3JhbU5vZGUoUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVu
c2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIFNvdXJjZUVsZW1lbnRzKiBj
aGlsZHJlbiwgVmFyaWFibGVFbnZpcm9ubWVudCYgdmFyRW52aXJvbm1lbnQsIEZ1bmN0aW9uU3Rh
Y2smIGZ1bmNTdGFjaywgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcywgRnVu
Y3Rpb25QYXJhbWV0ZXJzKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMg
ZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTYsOCArMTU5Niw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFN0YXRlbWVudHNCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqIGRlc3RpbmF0aW9uKTsKICAgICAgICAgCi0gICAgICAgIHZv
aWQgc2V0Q2xvc2VkVmFyaWFibGVzKFZlY3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiYm
KSB7IH0KLQogICAgICAgICB2b2lkIGFuYWx5emVNb2R1bGUoTW9kdWxlQW5hbHl6ZXImKTsKIAog
ICAgIHByb3RlY3RlZDoKQEAgLTE2MjMsMTIgKzE2MjEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSBmYWxzZTsKIAotICAg
ICAgICB2b2lkIHNldENsb3NlZFZhcmlhYmxlcyhWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJ
bXBsPj4mJik7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+
PiYgY2xvc2VkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZWRWYXJpYWJsZXM7IH0K
LQogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwotICAgICAgICBWZWN0b3I8
UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4gbV9jbG9zZWRWYXJpYWJsZXM7CiAgICAgICAgIHVu
c2lnbmVkIG1fc3RhcnRDb2x1bW47CiAgICAgICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOwogICAg
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lv
biAxOTY0NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksOCBAQCBTdHJpbmcgUGFyc2VyPExleGVyVHlwZT46
OnBhcnNlSW5uZXIoY29uCiAgICAgSWRlbnRpZmllclNldCBjYXB0dXJlZFZhcmlhYmxlczsKICAg
ICBib29sIG1vZGlmaWVkUGFyYW1ldGVyID0gZmFsc2U7CiAgICAgYm9vbCBtb2RpZmllZEFyZ3Vt
ZW50cyA9IGZhbHNlOwotICAgIHNjb3BlLT5nZXRDYXB0dXJlZFZhcnMoY2FwdHVyZWRWYXJpYWJs
ZXMsIG1vZGlmaWVkUGFyYW1ldGVyLCBtb2RpZmllZEFyZ3VtZW50cyk7CisgICAgc2NvcGUtPmdl
dENhcHR1cmVkVmFycyhjYXB0dXJlZFZhcmlhYmxlcywgbW9kaWZpZWRQYXJhbWV0ZXIsIG1vZGlm
aWVkQXJndW1lbnRzKTsgLy8gRklYTUU6IG1ha2UgdGhpcyBqdXN0IGZpbmQgb3V0IG1vZGlmZWRQ
YXJhbWVyZXIvbW9kaWZpZWRBcmd1bWVudHMKKwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZh
ckRlY2xhcmF0aW9ucyA9IHNjb3BlLT5kZWNsYXJlZFZhcmlhYmxlcygpOwogICAgIGZvciAoYXV0
byYgZW50cnkgOiBjYXB0dXJlZFZhcmlhYmxlcykKICAgICAgICAgdmFyRGVjbGFyYXRpb25zLm1h
cmtWYXJpYWJsZUFzQ2FwdHVyZWQoZW50cnkpOwpAQCAtMzIxLDQ4ICszMjIsMzAgQEAgU3RyaW5n
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKGNvbgogICAgIGlmIChtb2RpZmllZEFyZ3Vt
ZW50cykKICAgICAgICAgZmVhdHVyZXMgfD0gTW9kaWZpZWRBcmd1bWVudHNGZWF0dXJlOwogCi0g
ICAgVmVjdG9yPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+IGNsb3NlZFZhcmlhYmxlczsKLSAg
ICBpZiAobV9wYXJzaW5nQnVpbHRpbikgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0
byBiZSBjaGFuZ2VkIGlmIHdlIHdhbnQgdG8gYWxsb3cgYnVpbHRpbnMgdG8gdXNlIGxleGljYWwg
ZGVjbGFyYXRpb25zLgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcmlhYmxlIDogdXNlZFZh
cmlhYmxlcykgewotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmll
cjo6ZnJvbVVpZChtX3ZtLCB2YXJpYWJsZS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoc2NvcGUt
Pmhhc0RlY2xhcmVkVmFyaWFibGUoaWRlbnRpZmllcikpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzY29wZS0+aGFzRGVjbGFyZWRQYXJh
bWV0ZXIoaWRlbnRpZmllcikpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgIGlmICh2YXJpYWJsZSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMuaW1wbCgp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBjbG9zZWRWYXJpYWJs
ZXMuYXBwZW5kKHZhcmlhYmxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY2FwdHVyZWRW
YXJpYWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNhcHR1
cmVkVmFyaWFibGUgOiBjYXB0dXJlZFZhcmlhYmxlcykgewotICAgICAgICAgICAgICAgIGlmIChz
Y29wZS0+aGFzRGVjbGFyZWRWYXJpYWJsZShjYXB0dXJlZFZhcmlhYmxlKSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2NvcGUtPmhhc0RlY2xh
cmVkUGFyYW1ldGVyKGNhcHR1cmVkVmFyaWFibGUpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgaWYgKG1fcGFyc2luZ0J1aWx0aW4gJiYgaXNQcm9ncmFtUGFyc2VNb2RlKHBhcnNlTW9kZSkp
IHsKKyAgICAgICAgVmFyaWFibGVFbnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcyA9IHNjb3Bl
LT5sZXhpY2FsVmFyaWFibGVzKCk7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXJTZXQmIGNsb3Nl
ZFZhcmlhYmxlQ2FuZGlkYXRlcyA9IHNjb3BlLT5jbG9zZWRWYXJpYWJsZUNhbmRpZGF0ZXMoKTsK
KyAgICAgICAgY29uc3QgQnVpbHRpbk5hbWVzJiBidWlsdGluTmFtZXMgPSBtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT5idWlsdGluTmFtZXMoKTsKKyAgICAgICAgZm9yIChjb25zdCBSZWZQdHI8VW5pcXVl
ZFN0cmluZ0ltcGw+JiBjYW5kaWRhdGUgOiBjbG9zZWRWYXJpYWJsZUNhbmRpZGF0ZXMpIHsKKyAg
ICAgICAgICAgIGlmICghbGV4aWNhbFZhcmlhYmxlcy5jb250YWlucyhjYW5kaWRhdGUpICYmICF2
YXJEZWNsYXJhdGlvbnMuY29udGFpbnMoY2FuZGlkYXRlKSAmJiAhYnVpbHRpbk5hbWVzLmlzUHJp
dmF0ZU5hbWUoKmNhbmRpZGF0ZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJC
YWQgZ2xvYmFsIGNhcHR1cmUgaW4gYnVpbHRpbjogJyIsIGNhbmRpZGF0ZSwgIidcbiIpOworICAg
ICAgICAgICAgICAgIGRhdGFMb2cobV9zb3VyY2UtPnZpZXcoKSk7CisgICAgICAgICAgICAgICAg
Q1JBU0goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBkaWRGaW5pc2hQ
YXJzaW5nKHNvdXJjZUVsZW1lbnRzLCBjb250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgdmFyRGVj
bGFyYXRpb25zLCBmZWF0dXJlcywgY29udGV4dC5udW1Db25zdGFudHMoKSwgV1RGTW92ZShjbG9z
ZWRWYXJpYWJsZXMpKTsKKyAgICBkaWRGaW5pc2hQYXJzaW5nKHNvdXJjZUVsZW1lbnRzLCBjb250
ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgdmFyRGVjbGFyYXRpb25zLCBmZWF0dXJlcywgY29udGV4
dC5udW1Db25zdGFudHMoKSk7CiAKICAgICByZXR1cm4gcGFyc2VFcnJvcjsKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHZvaWQgUGFyc2VyPExleGVyVHlwZT46OmRpZEZpbmlz
aFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNvdXJjZUVsZW1lbnRzLCBEZWNsYXJhdGlvblN0YWNr
czo6RnVuY3Rpb25TdGFjayYgZnVuY1N0YWNrLCAKLSAgICBWYXJpYWJsZUVudmlyb25tZW50JiB2
YXJEZWNsYXJhdGlvbnMsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cywg
Y29uc3QgVmVjdG9yPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+JiYgY2xvc2VkVmFyaWFibGVz
KQorICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIHZhckRlY2xhcmF0aW9ucywgQ29kZUZlYXR1cmVz
IGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQogewogICAgIG1fc291cmNlRWxlbWVudHMgPSBz
b3VyY2VFbGVtZW50czsKICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMuc3dhcChmdW5jU3RhY2spOwog
ICAgIG1fdmFyRGVjbGFyYXRpb25zLnN3YXAodmFyRGVjbGFyYXRpb25zKTsKLSAgICBtX2Nsb3Nl
ZFZhcmlhYmxlcyA9IGNsb3NlZFZhcmlhYmxlczsKICAgICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7
CiAgICAgbV9udW1Db25zdGFudHMgPSBudW1Db25zdGFudHM7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDE5NjQ2MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Myw2ICsyOTMs
NyBAQCBzdHJ1Y3QgU2NvcGUgewogICAgIH0KICAgICBib29sIGlzTGV4aWNhbFNjb3BlKCkgeyBy
ZXR1cm4gbV9pc0xleGljYWxTY29wZTsgfQogCisgICAgY29uc3QgSWRlbnRpZmllclNldCYgY2xv
c2VkVmFyaWFibGVDYW5kaWRhdGVzKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZWRWYXJpYWJsZUNh
bmRpZGF0ZXM7IH0KICAgICBWYXJpYWJsZUVudmlyb25tZW50JiBkZWNsYXJlZFZhcmlhYmxlcygp
IHsgcmV0dXJuIG1fZGVjbGFyZWRWYXJpYWJsZXM7IH0KICAgICBWYXJpYWJsZUVudmlyb25tZW50
JiBsZXhpY2FsVmFyaWFibGVzKCkgeyByZXR1cm4gbV9sZXhpY2FsVmFyaWFibGVzOyB9CiAgICAg
VmFyaWFibGVFbnZpcm9ubWVudCYgZmluYWxpemVMZXhpY2FsRW52aXJvbm1lbnQoKSAKQEAgLTY4
Miw3ICs2ODMsNiBAQCBwdWJsaWM6CiAKICAgICBKU1RleHRQb3NpdGlvbiBwb3NpdGlvbkJlZm9y
ZUxhc3ROZXdsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9sZXhlci0+cG9zaXRpb25CZWZvcmVMYXN0
TmV3bGluZSgpOyB9CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uQmVmb3JlTGFzdFRva2Vu
KCkgY29uc3QgeyByZXR1cm4gbV9sZXhlci0+bGFzdFRva2VuTG9jYXRpb24oKTsgfQotICAgIFZl
Y3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiYmIGNsb3NlZFZhcmlhYmxlcygpIHsgcmV0
dXJuIFdURk1vdmUobV9jbG9zZWRWYXJpYWJsZXMpOyB9CiAKIHByaXZhdGU6CiAgICAgc3RydWN0
IEFsbG93SW5PdmVycmlkZSB7CkBAIC05OTUsNyArOTk1LDcgQEAgcHJpdmF0ZToKICAgICBQYXJz
ZXIoKTsKICAgICBTdHJpbmcgcGFyc2VJbm5lcihjb25zdCBJZGVudGlmaWVyJiwgU291cmNlUGFy
c2VNb2RlKTsKIAotICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyosIERl
Y2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrJiwgVmFyaWFibGVFbnZpcm9ubWVudCYsIENv
ZGVGZWF0dXJlcywgaW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4m
Jik7CisgICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiwgRGVjbGFyYXRp
b25TdGFja3M6OkZ1bmN0aW9uU3RhY2smLCBWYXJpYWJsZUVudmlyb25tZW50JiwgQ29kZUZlYXR1
cmVzLCBpbnQpOwogCiAgICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgdHlwZSBvZiBlcnJvciB0byBy
ZXBvcnQuCiAgICAgYm9vbCBpc0Z1bmN0aW9uTWV0YWRhdGFOb2RlKFNjb3BlTm9kZSopIHsgcmV0
dXJuIGZhbHNlOyB9CkBAIC0xNDA3LDcgKzE0MDcsNiBAQCBwcml2YXRlOgogICAgIFRoaXNURFpN
b2RlIG1fdGhpc1REWk1vZGU7CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3ZhckRlY2xhcmF0
aW9uczsKICAgICBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayBtX2Z1bmNEZWNsYXJh
dGlvbnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+IG1fY2xvc2VkVmFy
aWFibGVzOwogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAgIGludCBtX251bUNvbnN0
YW50czsKICAgICBFeHByZXNzaW9uRXJyb3JDbGFzc2lmaWVyKiBtX2V4cHJlc3Npb25FcnJvckNs
YXNzaWZpZXI7CkBAIC0xNTQyLDggKzE1NDEsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9k
ZT4gcGFyc2UoCiAgICAgICAgIGlmIChidWlsdGluTW9kZSA9PSBKU1BhcnNlckJ1aWx0aW5Nb2Rl
OjpCdWlsdGluKSB7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICBX
VEY6OmRhdGFMb2coIkVycm9yIGNvbXBpbGluZyBidWlsdGluOiAiLCBlcnJvci5tZXNzYWdlKCks
ICJcbiIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0Q2xv
c2VkVmFyaWFibGVzKHBhcnNlci5jbG9zZWRWYXJpYWJsZXMoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTY0NjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MyBAQAorMjAxNi0wMi0xMiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAg
ICAgICBUaGUgcGFyc2VyIGRvZXNuJ3QgcHJvcGVybHkgcHJvdGVjdCBhZ2FpbnN0IGdsb2JhbCB2
YXJpYWJsZSByZWZlcmVuY2VzIGluIGJ1aWx0aW5zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQxNDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgSlMgYnVpbHRpbnMgdG8gbm8gbG9uZ2VyIHJl
ZmVyZW5jZSBnbG9iYWwgdmFyaWFibGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNl
IG9sZCB0ZXN0cyBjb3ZlciB0aGUgaXNzdWVzIGhlcmUuCisKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL05hdmlnYXRvclVzZXJNZWRpYS5qczoKKyAgICAgICAgKHdlYmtpdEdldFVzZXJN
ZWRpYSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5q
czoKKyAgICAgICAgKGFkZEljZUNhbmRpZGF0ZSk6CisgICAgICAgIChnZXRTdGF0cyk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbkludGVybmFscy5qczoK
KyAgICAgICAgKHNldExvY2FsT3JSZW1vdGVEZXNjcmlwdGlvbik6CisgICAgICAgICogTW9kdWxl
cy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmpzOgorICAgICAgICAoUmVwbGFj
ZW1lbnQucHJvdG90eXBlLmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMv
Qnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneS5qczoKKyAgICAgICAgKGluaXRpYWxpemVCeXRlTGVu
Z3RoUXVldWluZ1N0cmF0ZWd5KToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvQ291bnRRdWV1
aW5nU3RyYXRlZ3kuanM6CisgICAgICAgIChpbml0aWFsaXplQ291bnRRdWV1aW5nU3RyYXRlZ3kp
OgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUludGVybmFscy5qczoK
KyAgICAgICAgKHRlZVJlYWRhYmxlU3RyZWFtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6
YWRkQnVpbHRpbkdsb2JhbHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGlu
TmFtZXMuaDoKKwogMjAxNi0wMi0xMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KIAogICAgICAgICBPcHRpbWl6ZSB0ZXh0dXJlLWNvbXBsZXRlIGNoZWNrcwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9OYXZpZ2F0b3JVc2VyTWVkaWEuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9OYXZpZ2F0b3JV
c2VyTWVkaWEuanMJKHJldmlzaW9uIDE5NjQ2MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTmF2aWdhdG9yVXNlck1lZGlhLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3
ICszNiw3IEBAIGZ1bmN0aW9uIHdlYmtpdEdldFVzZXJNZWRpYShvcHRpb25zLCBzdWMKICAgICBp
ZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJO
b3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogCi0gICAgaWYgKG9wdGlvbnMgIT09IE9iamVjdChvcHRp
b25zKSkKKyAgICBpZiAob3B0aW9ucyAhPT0gQE9iamVjdChvcHRpb25zKSkKICAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIkFyZ3VtZW50IDEgKG9wdGlvbnMpIHRvIE5hdmlnYXRvci53ZWJr
aXRHZXRVc2VyTWVkaWEgbXVzdCBiZSBhbiBvYmplY3QiKTsKIAogICAgIGlmICh0eXBlb2Ygc3Vj
Y2Vzc0NhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmpzCShyZXZpc2lv
biAxOTY0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIGZ1bmN0aW9uIGFk
ZEljZUNhbmRpZGF0ZSgpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJOb3QgZW5vdWdo
IGFyZ3VtZW50cyIpOwogCiAgICAgdmFyIGNhbmRpZGF0ZSA9IGFyZ3VtZW50c1swXTsKLSAgICBp
ZiAoIShjYW5kaWRhdGUgaW5zdGFuY2VvZiBSVENJY2VDYW5kaWRhdGUpKQorICAgIGlmICghKGNh
bmRpZGF0ZSBpbnN0YW5jZW9mIEBSVENJY2VDYW5kaWRhdGUpKQogICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiQXJndW1lbnQgMSAoJ2NhbmRpZGF0ZScpIHRvIFJUQ1BlZXJDb25uZWN0aW9u
LmFkZEljZUNhbmRpZGF0ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFJUQ0ljZUNhbmRpZGF0ZSIp
OwogCiAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewpAQCAtOTksNyArOTksNyBAQCBm
dW5jdGlvbiBnZXRTdGF0cygpCiAKICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkgewogICAgICAg
ICBzZWxlY3RvciA9IGFyZ3VtZW50c1swXTsKLSAgICAgICAgaWYgKHNlbGVjdG9yICE9IG51bGwg
JiYgIShzZWxlY3RvciBpbnN0YW5jZW9mIE1lZGlhU3RyZWFtVHJhY2spKQorICAgICAgICBpZiAo
c2VsZWN0b3IgIT0gbnVsbCAmJiAhKHNlbGVjdG9yIGluc3RhbmNlb2YgQE1lZGlhU3RyZWFtVHJh
Y2spKQogICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFyZ3VtZW50IDEgKCdzZWxl
Y3RvcicpIHRvIFJUQ1BlZXJDb25uZWN0aW9uLmdldFN0YXRzIG11c3QgYmUgYW4gaW5zdGFuY2Ug
b2YgTWVkaWFTdHJlYW1UcmFjayIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbkludGVybmFscy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
SW50ZXJuYWxzLmpzCShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uSW50ZXJuYWxzLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC05Myw3ICs5Myw3IEBAIGZ1bmN0aW9uIHNldExvY2FsT3JSZW1vdGVEZXNjcmlwdGlvbihw
ZWUKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7
CiAKICAgICB2YXIgZGVzY3JpcHRpb24gPSBhcmdzWzBdOwotICAgIGlmICghKGRlc2NyaXB0aW9u
IGluc3RhbmNlb2YgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKSkKKyAgICBpZiAoIShkZXNjcmlwdGlv
biBpbnN0YW5jZW9mIEBSVENTZXNzaW9uRGVzY3JpcHRpb24pKQogICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiQXJndW1lbnQgMSAoJ2Rlc2NyaXB0aW9uJykgdG8gUlRDUGVlckNvbm5lY3Rp
b24uIiArIGZ1bmN0aW9uTmFtZSArICIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBSVENTZXNzaW9u
RGVzY3JpcHRpb24iKTsKIAogICAgIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50LmpzCShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBSZXBsYWNlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICBpZiAoIWV2ZW50RGF0YSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
ICAgIGlmICh0aGlzW2V2ZW50RGF0YV0gJiYgdGhpc1tldmVudERhdGFdIGluc3RhbmNlb2YgRnVu
Y3Rpb24pCisgICAgICAgICAgICBpZiAodGhpc1tldmVudERhdGFdICYmIHR5cGVvZiB0aGlzW2V2
ZW50RGF0YV0gPT09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICAgICAgdGhpc1tldmVudERhdGFd
LmNhbGwodGhpcywgZXZlbnQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRo
aXMucG9zdEV2ZW50KGV2ZW50RGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0
cmVhbXMvQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneS5qcwkocmV2
aXNpb24gMTk2NDYxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL0J5dGVMZW5n
dGhRdWV1aW5nU3RyYXRlZ3kuanMJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgZnVu
Y3Rpb24gaW5pdGlhbGl6ZUJ5dGVMZW5ndGhRdWV1aW5nU3RyYQogewogICAgICJ1c2Ugc3RyaWN0
IjsKIAotICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGlnaFdhdGVyTWFyayIsIHsK
KyAgICBAT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJoaWdoV2F0ZXJNYXJrIiwgewogICAg
ICAgICB2YWx1ZTogcGFyYW1ldGVycy5oaWdoV2F0ZXJNYXJrLAogICAgICAgICBjb25maWd1cmFi
bGU6IHRydWUsCiAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3N0cmVhbXMvQ291bnRRdWV1aW5nU3RyYXRlZ3kuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL0NvdW50UXVldWluZ1N0cmF0ZWd5LmpzCShy
ZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvQ291bnRR
dWV1aW5nU3RyYXRlZ3kuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgZnVuY3Rp
b24gaW5pdGlhbGl6ZUNvdW50UXVldWluZ1N0cmF0ZWd5KAogewogICAgICJ1c2Ugc3RyaWN0IjsK
IAotICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGlnaFdhdGVyTWFyayIsIHsKKyAg
ICBAT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJoaWdoV2F0ZXJNYXJrIiwgewogICAgICAg
ICB2YWx1ZTogcGFyYW1ldGVycy5oaWdoV2F0ZXJNYXJrLAogICAgICAgICBjb25maWd1cmFibGU6
IHRydWUsCiAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpz
CShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW1JbnRlcm5hbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTg3LDExICs4NywxMSBA
QCBmdW5jdGlvbiB0ZWVSZWFkYWJsZVN0cmVhbShzdHJlYW0sIHNob3VsCiAKICAgICBjb25zdCBw
dWxsRnVuY3Rpb24gPSBAdGVlUmVhZGFibGVTdHJlYW1QdWxsRnVuY3Rpb24odGVlU3RhdGUsIHJl
YWRlciwgc2hvdWxkQ2xvbmUpOwogCi0gICAgY29uc3QgYnJhbmNoMSA9IG5ldyBSZWFkYWJsZVN0
cmVhbSh7CisgICAgY29uc3QgYnJhbmNoMSA9IG5ldyBAUmVhZGFibGVTdHJlYW0oewogICAgICAg
ICAicHVsbCI6IHB1bGxGdW5jdGlvbiwKICAgICAgICAgImNhbmNlbCI6IEB0ZWVSZWFkYWJsZVN0
cmVhbUJyYW5jaDFDYW5jZWxGdW5jdGlvbih0ZWVTdGF0ZSwgc3RyZWFtKQogICAgIH0pOwotICAg
IGNvbnN0IGJyYW5jaDIgPSBuZXcgUmVhZGFibGVTdHJlYW0oeworICAgIGNvbnN0IGJyYW5jaDIg
PSBuZXcgQFJlYWRhYmxlU3RyZWFtKHsKICAgICAgICAgInB1bGwiOiBwdWxsRnVuY3Rpb24sCiAg
ICAgICAgICJjYW5jZWwiOiBAdGVlUmVhZGFibGVTdHJlYW1CcmFuY2gyQ2FuY2VsRnVuY3Rpb24o
dGVlU3RhdGUsIHN0cmVhbSkKICAgICB9KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE5NjQ2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsMTEgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAi
SlNNZWRpYVN0cmVhbVRyYWNrLmgiCisjaW5jbHVkZSAiSlNSZWFkYWJsZVN0cmVhbS5oIgogI2lu
Y2x1ZGUgIkpTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmgiCisjaW5jbHVkZSAi
SlNSVENJY2VDYW5kaWRhdGUuaCIKKyNpbmNsdWRlICJKU1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5o
IgogI2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKQEAgLTc4LDggKzgy
LDEyIEBAIHZvaWQgSlNET01HbG9iYWxPYmplY3Q6OmFkZEJ1aWx0aW5HbG9iYWwKICAgICAgICAg
SlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFByb3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5O
YW1lcygpLnN0cmVhbVJlYWRhYmxlUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoNCksIERvbnREZWxl
dGUgfCBSZWFkT25seSksCiAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0
eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5zdHJlYW1XYWl0aW5nUHJpdmF0ZU5hbWUo
KSwganNOdW1iZXIoNSksIERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEpTRE9NR2xv
YmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5z
dHJlYW1Xcml0YWJsZVByaXZhdGVOYW1lKCksIGpzTnVtYmVyKDYpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpLAorICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZvKGNs
aWVudERhdGEuYnVpbHRpbk5hbWVzKCkuTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVOYW1lKCksIEpT
TWVkaWFTdHJlYW1UcmFjazo6Z2V0Q29uc3RydWN0b3Iodm0sIHRoaXMpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpLAorICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJvcGVydHlJbmZv
KGNsaWVudERhdGEuYnVpbHRpbk5hbWVzKCkuUmVhZGFibGVTdHJlYW1Qcml2YXRlTmFtZSgpLCBK
U1JlYWRhYmxlU3RyZWFtOjpnZXRDb25zdHJ1Y3Rvcih2bSwgdGhpcyksIERvbnREZWxldGUgfCBS
ZWFkT25seSksCiAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9wZXJ0eUluZm8o
Y2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5SZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJQcml2YXRl
TmFtZSgpLCBwcml2YXRlUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQ29uc3RydWN0b3IsIERvbnRE
ZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpHbG9iYWxQcm9w
ZXJ0eUluZm8oY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5SZWFkYWJsZVN0cmVhbVJlYWRlclBy
aXZhdGVOYW1lKCksIHByaXZhdGVSZWFkYWJsZVN0cmVhbVJlYWRlckNvbnN0cnVjdG9yLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBKU0RPTUdsb2JhbE9iamVjdDo6R2xvYmFsUHJv
cGVydHlJbmZvKGNsaWVudERhdGEuYnVpbHRpbk5hbWVzKCkuUlRDSWNlQ2FuZGlkYXRlUHJpdmF0
ZU5hbWUoKSwgSlNSVENJY2VDYW5kaWRhdGU6OmdldENvbnN0cnVjdG9yKHZtLCB0aGlzKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6Okdsb2JhbFBy
b3BlcnR5SW5mbyhjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLlJUQ1Nlc3Npb25EZXNjcmlwdGlv
blByaXZhdGVOYW1lKCksIEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uOjpnZXRDb25zdHJ1Y3Rvcih2
bSwgdGhpcyksIERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgfTsKICAgICBhZGRTdGF0aWNH
bG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5h
bWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1
aWx0aW5OYW1lcy5oCShyZXZpc2lvbiAxOTY0NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDEy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyh1bmRlcmx5aW5nU2luaykgXAogICAg
IG1hY3JvKHVuZGVybHlpbmdTb3VyY2UpIFwKICAgICBtYWNybyh3cml0aW5nKSBcCisgICAgbWFj
cm8oTWVkaWFTdHJlYW1UcmFjaykgXAorICAgIG1hY3JvKFJlYWRhYmxlU3RyZWFtKSBcCiAgICAg
bWFjcm8oUmVhZGFibGVTdHJlYW1SZWFkZXIpIFwKICAgICBtYWNybyhSZWFkYWJsZVN0cmVhbUNv
bnRyb2xsZXIpIFwKKyAgICBtYWNybyhSVENJY2VDYW5kaWRhdGUpIFwKKyAgICBtYWNybyhSVENT
ZXNzaW9uRGVzY3JpcHRpb24pIFwKIAogY2xhc3MgV2ViQ29yZUJ1aWx0aW5OYW1lcyB7CiBwdWJs
aWM6Cg==
</data>
<flag name="review"
          id="296065"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>