<?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>109371</bug_id>
          
          <creation_ts>2013-02-09 22:22:17 -0800</creation_ts>
          <short_desc>DFG should not change its mind about what type speculations a node does, by encoding the checks in the NodeType, UseKind, and ArrayMode</short_desc>
          <delta_ts>2013-02-25 07:22:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>110072</dependson>
    
    <dependson>110590</dependson>
    
    <dependson>110756</dependson>
          <blocked>109388</blocked>
    
    <blocked>109389</blocked>
    
    <blocked>109393</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jberlin</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zarvai</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>829204</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-09 22:22:17 -0800</bug_when>
    <thetext>Currently the type guards that a node emits are usually determined by the predictions of the children.  But children can change as a result of CSE and CFG simplification.  Hence nodes can change behavior, and I&apos;m not convinced that this is OK.  Logically, it probably is, since type predictions are likely to get more, rather than less, specific - which then leads to more, rather than less, specific guards.  But I don&apos;t want to have to think about this.  It&apos;s unlikely that this behavior is profitable, and I worry that it leads to badness.  So, it&apos;s probably better to change the behavior so that the type guards that a node uses are locked in after prediction propagation and thereafter they don&apos;t change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829205</commentid>
    <comment_count>1</comment_count>
      <attachid>187463</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-09 22:23:47 -0800</bug_when>
    <thetext>Created attachment 187463
work in progress

This is going to be rough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829353</commentid>
    <comment_count>2</comment_count>
      <attachid>187494</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-10 13:54:22 -0800</bug_when>
    <thetext>Created attachment 187494
work in progress

Wrote more code, found more bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831633</commentid>
    <comment_count>3</comment_count>
      <attachid>188010</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-12 22:15:30 -0800</bug_when>
    <thetext>Created attachment 188010
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834673</commentid>
    <comment_count>4</comment_count>
      <attachid>188699</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-16 01:01:54 -0800</bug_when>
    <thetext>Created attachment 188699
fixup phase is done, I think

Now I just have to redo the rest of the compiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834965</commentid>
    <comment_count>5</comment_count>
      <attachid>188758</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-17 01:40:56 -0800</bug_when>
    <thetext>Created attachment 188758
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835057</commentid>
    <comment_count>6</comment_count>
      <attachid>188780</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-17 15:48:18 -0800</bug_when>
    <thetext>Created attachment 188780
work in progress

I think Fixup and CFA are done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835081</commentid>
    <comment_count>7</comment_count>
      <attachid>188788</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-17 18:54:17 -0800</bug_when>
    <thetext>Created attachment 188788
work in progress

Started refactoring the backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835187</commentid>
    <comment_count>8</comment_count>
      <attachid>188807</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-18 00:34:38 -0800</bug_when>
    <thetext>Created attachment 188807
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835701</commentid>
    <comment_count>9</comment_count>
      <attachid>188932</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-18 12:58:06 -0800</bug_when>
    <thetext>Created attachment 188932
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835804</commentid>
    <comment_count>10</comment_count>
      <attachid>188955</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-18 15:51:12 -0800</bug_when>
    <thetext>Created attachment 188955
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835944</commentid>
    <comment_count>11</comment_count>
      <attachid>188986</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-18 21:59:47 -0800</bug_when>
    <thetext>Created attachment 188986
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836029</commentid>
    <comment_count>12</comment_count>
      <attachid>189003</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-18 23:36:28 -0800</bug_when>
    <thetext>Created attachment 189003
DFGSpeculativeJIT64 is done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836831</commentid>
    <comment_count>13</comment_count>
      <attachid>189176</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-19 15:10:14 -0800</bug_when>
    <thetext>Created attachment 189176
it compiles (in 64-bit)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836885</commentid>
    <comment_count>14</comment_count>
      <attachid>189188</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-19 15:49:51 -0800</bug_when>
    <thetext>Created attachment 189188
it runs simple things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836888</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-19 15:51:33 -0800</bug_when>
    <thetext>Sample program:

function foo(a, b) {
    return a + 42 + b.f;
}

for (var i = 0; i &lt; 100; ++i)
    print(foo(i, {f:i}));

Sample disassembly with IR under the new locked-in type speculation regime:

Generated DFG JIT code for foo#CDdMUV:[0x7fca3b00f800-&gt;0x10e2dfd70, DFGFunctionCall], instruction count = 22:
    Optimized with execution counter = 1005.000000/1121.000000, 5
    Source: function foo(a, b) { return a + 42 + b.f; }
    Code at [0x25f415a014e0, 0x25f415a016a7):
          0x25f415a014e0: pop %rcx
          0x25f415a014e1: mov %rcx, -0x10(%r13)
          0x25f415a014e5: mov $0x7fca3b00f800, %r11
          0x25f415a014ef: mov %r11, -0x8(%r13)
          0x25f415a014f3: lea 0x18(%r13), %rdx
          0x25f415a014f7: mov $0x7fca3a002630, %r11
          0x25f415a01501: cmp %rdx, (%r11)
          0x25f415a01504: jb 0x25f415a0159b
          0x25f415a0150a: cmp %r14, -0x40(%r13)
          0x25f415a0150e: jb 0x25f415a01602
          0x25f415a01514: test %r15, -0x48(%r13)
          0x25f415a01518: jnz 0x25f415a01623
    Block #0 (bc#0):  (OSR target)
      Predecessors:
      Dominated by: #0
      Dominates: #0
      Phi Nodes:
          0x25f415a0151e: test $0x7, %r13b
          0x25f415a01522: jz 0x25f415a01529
          0x25f415a01528: int3 
       1:           &lt; 2:-&gt;	SetArgument(arg1(B&lt;Int32&gt;), bc#0)  predicting Int
       2:           &lt; 2:-&gt;	SetArgument(arg2(C&lt;Final&gt;), bc#0)  predicting Final
      16:           &lt; 3:0&gt;	GetLocal(@2, JS|PureInt, arg2(C&lt;Final&gt;), bc#0)  predicting Final
          0x25f415a01529: mov -0x48(%r13), %rax
      17:           &lt;!0:-&gt;	CheckStructure(Cell:@16&lt;Final&gt;, MustGen|CanExit, struct(0x10cdfc4f0: NonArray), bc#0)
          0x25f415a0152d: mov $0x10cdfc4f0, %r11
          0x25f415a01537: cmp %r11, (%rax)
          0x25f415a0153a: jnz 0x25f415a01644
       3:           &lt; 1:1&gt;	GetLocal(@1, JS|UseAsOther, arg1(B&lt;Int32&gt;), bc#1)  predicting Int
          0x25f415a01540: mov -0x40(%r13), %edx
       4:           &lt; 1:2&gt;	JSConstant(JS|UseAsOther, $0 = Int32: 42, bc#1)
       5:           &lt;!1:2&gt;	ValueAdd(Int32:@3&lt;Int32&gt;, Int32:@4&lt;Int32&gt;, JS|MustGen|MightClobber|UseAsOther|CanExit, bc#1)
          0x25f415a01544: mov $0xc9, %ecx
          0x25f415a01549: xor $0xe3, %ecx
          0x25f415a0154f: add %edx, %ecx
          0x25f415a01551: jo 0x25f415a01665
          0x25f415a01557: mov $0xffffffff, %r11
          0x25f415a01561: cmp %r11, %rcx
          0x25f415a01564: jbe 0x25f415a0156b
          0x25f415a0156a: int3 
       6:  skipped  &lt; 0:-&gt;	SetLocal(@5&lt;Int32&gt;, CanExit, r0(D), bc#1)
       8:           &lt;!0:-&gt;	Phantom(Cell:@16&lt;Final&gt;, MustGen, bc#6)
       9:           &lt; 1:0&gt;	GetByOffset(KnownCell:@16&lt;Final&gt;, JS|UseAsOther, id0{f}, 2, bc#6)  predicting Int
          0x25f415a0156b: mov 0x10(%rax), %rdx
      10:  skipped  &lt; 0:-&gt;	SetLocal(@9&lt;Int32&gt;, CanExit, r1(E), bc#6)
      11:           &lt;!1:0&gt;	ValueAdd(Int32:@5&lt;Int32&gt;, Int32:@9&lt;Int32&gt;, JS|MustGen|MightClobber|UseAsOther|CanExit, bc#15)
          0x25f415a0156f: add %edx, %ecx
          0x25f415a01571: jo 0x25f415a01686
          0x25f415a01577: mov $0xffffffff, %r11
          0x25f415a01581: cmp %r11, %rcx
          0x25f415a01584: jbe 0x25f415a0158b
          0x25f415a0158a: int3 
      12:  skipped  &lt; 0:-&gt;	SetLocal(@11&lt;Int32&gt;, CanExit, r0(F), bc#15)
      13:           &lt;!0:-&gt;	Flush(@2, MustGen, arg2(C&lt;Final&gt;), bc#20)  predicting Final
      14:           &lt;!0:-&gt;	Flush(@1, MustGen, arg1(B&lt;Int32&gt;), bc#20)  predicting Int
      15:           &lt;!0:-&gt;	Return(@11&lt;Int32&gt;, MustGen, bc#20)
          0x25f415a0158b: or %r14, %rcx
          0x25f415a0158e: mov %rcx, %rax
          0x25f415a01591: mov -0x10(%r13), %rdx
          0x25f415a01595: mov -0x28(%r13), %r13
          0x25f415a01599: push %rdx
          0x25f415a0159a: ret 
    (End Of Main Path)
          0x25f415a0159b: mov %rsp, %rdi
          0x25f415a0159e: mov %r13, 0x58(%rsp)
          0x25f415a015a3: mov $0x0, -0x2c(%r13)
          0x25f415a015ab: mov $0x10ba08ee0, %r11
          0x25f415a015b5: call %r11
          0x25f415a015b8: jmp 0x25f415a0150a
          0x25f415a015bd: pop %rcx
          0x25f415a015be: mov %rcx, -0x10(%r13)
          0x25f415a015c2: mov $0x7fca3b00f800, %r11
          0x25f415a015cc: mov %r11, -0x8(%r13)
          0x25f415a015d0: mov -0x30(%r13), %edx
          0x25f415a015d4: cmp $0x3, %edx
          0x25f415a015d7: jae 0x25f415a014f3
          0x25f415a015dd: mov %rsp, %rdi
          0x25f415a015e0: mov %r13, 0x58(%rsp)
          0x25f415a015e5: mov $0x1, -0x2c(%r13)
          0x25f415a015ed: mov $0x10ba0df30, %r11
          0x25f415a015f7: call %r11
          0x25f415a015fa: mov %rax, %r13
          0x25f415a015fd: jmp 0x25f415a014f3
          0x25f415a01602: test $0x7, %r13b
          0x25f415a01606: jz 0x25f415a0160d
          0x25f415a0160c: int3 
          0x25f415a0160d: mov $0x7fca39814288, %r11
          0x25f415a01617: mov $0x0, (%r11)
          0x25f415a0161e: jmp 0x25f415a016c0
          0x25f415a01623: test $0x7, %r13b
          0x25f415a01627: jz 0x25f415a0162e
          0x25f415a0162d: int3 
          0x25f415a0162e: mov $0x7fca39814288, %r11
          0x25f415a01638: mov $0x1, (%r11)
          0x25f415a0163f: jmp 0x25f415a016c0
          0x25f415a01644: test $0x7, %r13b
          0x25f415a01648: jz 0x25f415a0164f
          0x25f415a0164e: int3 
          0x25f415a0164f: mov $0x7fca39814288, %r11
          0x25f415a01659: mov $0x2, (%r11)
          0x25f415a01660: jmp 0x25f415a016c0
          0x25f415a01665: test $0x7, %r13b
          0x25f415a01669: jz 0x25f415a01670
          0x25f415a0166f: int3 
          0x25f415a01670: mov $0x7fca39814288, %r11
          0x25f415a0167a: mov $0x3, (%r11)
          0x25f415a01681: jmp 0x25f415a016c0
          0x25f415a01686: test $0x7, %r13b
          0x25f415a0168a: jz 0x25f415a01691
          0x25f415a01690: int3 
          0x25f415a01691: mov $0x7fca39814288, %r11
          0x25f415a0169b: mov $0x4, (%r11)
          0x25f415a016a2: jmp 0x25f415a016c0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836900</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-19 16:00:39 -0800</bug_when>
    <thetext>And here&apos;s the code from a release build:

Generated DFG JIT code for foo#CDdMUV:[0x105453000-&gt;0x105ecfd70, DFGFunctionCall], instruction count = 22:
    Optimized with execution counter = 1005.000000/1121.000000, 5
    Source: function foo(a, b) { return a + 42 + b.f; }
    Code at [0x4c16e48014e0, 0x4c16e4801636):
          0x4c16e48014e0: pop %rcx
          0x4c16e48014e1: mov %rcx, -0x10(%r13)
          0x4c16e48014e5: mov $0x105453000, %r11
          0x4c16e48014ef: mov %r11, -0x8(%r13)
          0x4c16e48014f3: lea 0x18(%r13), %rdx
          0x4c16e48014f7: mov $0x105408c90, %r11
          0x4c16e4801501: cmp %rdx, (%r11)
          0x4c16e4801504: jb 0x4c16e4801561
          0x4c16e480150a: cmp %r14, -0x40(%r13)
          0x4c16e480150e: jb 0x4c16e48015c8
          0x4c16e4801514: test %r15, -0x48(%r13)
          0x4c16e4801518: jnz 0x4c16e48015de
    Block #0 (bc#0):  (OSR target)
      Predecessors:
      Dominated by: #0
      Dominates: #0
      Phi Nodes:
       1:           &lt; 2:-&gt;	SetArgument(arg1(B&lt;Int32&gt;), bc#0)  predicting Int
       2:           &lt; 2:-&gt;	SetArgument(arg2(C&lt;Final&gt;), bc#0)  predicting Final
      16:           &lt; 3:0&gt;	GetLocal(@2, JS|PureInt, arg2(C&lt;Final&gt;), bc#0)  predicting Final
          0x4c16e480151e: mov -0x48(%r13), %rax
      17:           &lt;!0:-&gt;	CheckStructure(Cell:@16&lt;Final&gt;, MustGen|CanExit, struct(0x105dec5d0: NonArray), bc#0)
          0x4c16e4801522: mov $0x105dec5d0, %r11
          0x4c16e480152c: cmp %r11, (%rax)
          0x4c16e480152f: jnz 0x4c16e48015f4
       3:           &lt; 1:1&gt;	GetLocal(@1, JS|UseAsOther, arg1(B&lt;Int32&gt;), bc#1)  predicting Int
          0x4c16e4801535: mov -0x40(%r13), %edx
       4:           &lt; 1:2&gt;	JSConstant(JS|UseAsOther, $0 = Int32: 42, bc#1)
       5:           &lt;!1:2&gt;	ValueAdd(Int32:@3&lt;Int32&gt;, Int32:@4&lt;Int32&gt;, JS|MustGen|MightClobber|UseAsOther|CanExit, bc#1)
          0x4c16e4801539: mov %rdx, %rcx
          0x4c16e480153c: add $0x2a, %ecx
          0x4c16e480153f: jo 0x4c16e480160a
       6:  skipped  &lt; 0:-&gt;	SetLocal(@5&lt;Int32&gt;, CanExit, r0(D), bc#1)
       8:           &lt;!0:-&gt;	Phantom(Cell:@16&lt;Final&gt;, MustGen, bc#6)
       9:           &lt; 1:0&gt;	GetByOffset(KnownCell:@16&lt;Final&gt;, JS|UseAsOther, id0{f}, 2, bc#6)  predicting Int
          0x4c16e4801545: mov 0x10(%rax), %rdx
      10:  skipped  &lt; 0:-&gt;	SetLocal(@9&lt;Int32&gt;, CanExit, r1(E), bc#6)
      11:           &lt;!1:0&gt;	ValueAdd(Int32:@5&lt;Int32&gt;, Int32:@9&lt;Int32&gt;, JS|MustGen|MightClobber|UseAsOther|CanExit, bc#15)
          0x4c16e4801549: add %edx, %ecx
          0x4c16e480154b: jo 0x4c16e4801620
      12:  skipped  &lt; 0:-&gt;	SetLocal(@11&lt;Int32&gt;, CanExit, r0(F), bc#15)
      13:           &lt;!0:-&gt;	Flush(@2, MustGen, arg2(C&lt;Final&gt;), bc#20)  predicting Final
      14:           &lt;!0:-&gt;	Flush(@1, MustGen, arg1(B&lt;Int32&gt;), bc#20)  predicting Int
      15:           &lt;!0:-&gt;	Return(@11&lt;Int32&gt;, MustGen, bc#20)
          0x4c16e4801551: or %r14, %rcx
          0x4c16e4801554: mov %rcx, %rax
          0x4c16e4801557: mov -0x10(%r13), %rdx
          0x4c16e480155b: mov -0x28(%r13), %r13
          0x4c16e480155f: push %rdx
          0x4c16e4801560: ret 
    (End Of Main Path)
          0x4c16e4801561: mov %rsp, %rdi
          0x4c16e4801564: mov %r13, 0x58(%rsp)
          0x4c16e4801569: mov $0x0, -0x2c(%r13)
          0x4c16e4801571: mov $0x103f719b0, %r11
          0x4c16e480157b: call %r11
          0x4c16e480157e: jmp 0x4c16e480150a
          0x4c16e4801583: pop %rcx
          0x4c16e4801584: mov %rcx, -0x10(%r13)
          0x4c16e4801588: mov $0x105453000, %r11
          0x4c16e4801592: mov %r11, -0x8(%r13)
          0x4c16e4801596: mov -0x30(%r13), %edx
          0x4c16e480159a: cmp $0x3, %edx
          0x4c16e480159d: jae 0x4c16e48014f3
          0x4c16e48015a3: mov %rsp, %rdi
          0x4c16e48015a6: mov %r13, 0x58(%rsp)
          0x4c16e48015ab: mov $0x1, -0x2c(%r13)
          0x4c16e48015b3: mov $0x103f74470, %r11
          0x4c16e48015bd: call %r11
          0x4c16e48015c0: mov %rax, %r13
          0x4c16e48015c3: jmp 0x4c16e48014f3
          0x4c16e48015c8: mov $0x1054169d0, %r11
          0x4c16e48015d2: mov $0x0, (%r11)
          0x4c16e48015d9: jmp 0x4c16e4801640
          0x4c16e48015de: mov $0x1054169d0, %r11
          0x4c16e48015e8: mov $0x1, (%r11)
          0x4c16e48015ef: jmp 0x4c16e4801640
          0x4c16e48015f4: mov $0x1054169d0, %r11
          0x4c16e48015fe: mov $0x2, (%r11)
          0x4c16e4801605: jmp 0x4c16e4801640
          0x4c16e480160a: mov $0x1054169d0, %r11
          0x4c16e4801614: mov $0x3, (%r11)
          0x4c16e480161b: jmp 0x4c16e4801640
          0x4c16e4801620: mov $0x1054169d0, %r11
          0x4c16e480162a: mov $0x4, (%r11)
          0x4c16e4801631: jmp 0x4c16e4801640</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837068</commentid>
    <comment_count>17</comment_count>
      <attachid>189222</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-19 19:01:27 -0800</bug_when>
    <thetext>Created attachment 189222
it runs the most important program

I&apos;m referring to 3d-cube, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837102</commentid>
    <comment_count>18</comment_count>
      <attachid>189229</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-19 21:01:16 -0800</bug_when>
    <thetext>Created attachment 189229
runs SunSpider, V8, Kraken

Still need to test performance.  Still need to implement 32-bit.  Still need to run LayoutTests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837122</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-19 21:43:45 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created an attachment (id=189229) [details]
&gt; runs SunSpider, V8, Kraken
&gt; 
&gt; Still need to test performance.  Still need to implement 32-bit.  Still need to run LayoutTests.

It appears that this is performance-neutral and passes run-javascriptcore-tests.  Running LayoutTests now.  And then I&apos;ll work on 32-bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837776</commentid>
    <comment_count>20</comment_count>
      <attachid>189382</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-20 14:34:21 -0800</bug_when>
    <thetext>Created attachment 189382
half-way done with 32-bit, and all LayoutTests pass in 64-bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837902</commentid>
    <comment_count>21</comment_count>
      <attachid>189407</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-20 16:30:21 -0800</bug_when>
    <thetext>Created attachment 189407
32-bit is written

Still need to test it though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838124</commentid>
    <comment_count>22</comment_count>
      <attachid>189453</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-20 20:57:09 -0800</bug_when>
    <thetext>Created attachment 189453
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838128</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 21:03:59 -0800</bug_when>
    <thetext>Attachment 189453 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractValue.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAdjacencyList.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGEdge.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGEdge.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeFlags.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGUseKind.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGUseKind.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2189:  The parameter name &quot;source&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2189:  The parameter name &quot;edge&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2190:  The parameter name &quot;source&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2190:  The parameter name &quot;edge&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2191:  The parameter name &quot;source&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2191:  The parameter name &quot;edge&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.h:840:  _node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGGraph.h:842:  _childIdx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGGraph.h:856:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGGraph.h:862:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 10 in 30 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>838129</commentid>
    <comment_count>24</comment_count>
      <attachid>189455</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-20 21:08:36 -0800</bug_when>
    <thetext>Created attachment 189455
the patch

Rebased, and with some style fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838135</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 21:18:11 -0800</bug_when>
    <thetext>Attachment 189455 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractValue.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAdjacencyList.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGEdge.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGEdge.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeFlags.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGUseKind.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGUseKind.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGGraph.h:840:  _node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGGraph.h:842:  _childIdx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGGraph.h:856:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGGraph.h:862:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 4 in 30 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>838626</commentid>
    <comment_count>26</comment_count>
      <attachid>189455</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-02-21 11:24:12 -0800</bug_when>
    <thetext>Comment on attachment 189455
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:1298
&gt; +        ASSERT(!(value.m_type &amp; ~SpecCell)); // Edge filtering should have already ensured this.

What happens if there&apos;s a bug and this is wrong? will we handle it safely or should this be a RELEASE_ASSERT?

&gt; Source/JavaScriptCore/dfg/DFGNodeAllocator.h:41
&gt; +typedef Allocator&lt;Node, 112&gt; NodeAllocator;
&gt; +#else
&gt; +typedef Allocator&lt;Node, 80&gt; NodeAllocator;

What are these magic numbers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838724</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-21 12:51:33 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 189455 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=189455&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:1298
&gt; &gt; +        ASSERT(!(value.m_type &amp; ~SpecCell)); // Edge filtering should have already ensured this.
&gt; 
&gt; What happens if there&apos;s a bug and this is wrong? will we handle it safely or should this be a RELEASE_ASSERT?

We won&apos;t handle it safely.  If the CFA fails in this kind of fundamental way, then all bets are off.

By that same token, I don&apos;t expect to see this assertion firing.  We&apos;d probably have other obvious symptoms if it did.

It could be a RELEASE_ASSERT, but I&apos;ve put a lot of care into making the CFA fast.  This is critical for us.  Compiler performance must not regress.  This is one of those assertions that I&apos;d rather not bloat release code with.

We have ample coverage for this in debug builds.  There is a similar assertion via the verifyEdges() mechanism.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGNodeAllocator.h:41
&gt; &gt; +typedef Allocator&lt;Node, 112&gt; NodeAllocator;
&gt; &gt; +#else
&gt; &gt; +typedef Allocator&lt;Node, 80&gt; NodeAllocator;
&gt; 
&gt; What are these magic numbers?

These are the current sizes of Node in 32-bit and 64-bit, rounded up to multiple of 16.

I thought about making that more implicit - like having Allocator be parameterized by desired alignment - but I like this better because it also acts as an assertion that Node doesn&apos;t grow.  We generally don&apos;t want Node to grow without us finding out about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838728</commentid>
    <comment_count>28</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-02-21 12:57:11 -0800</bug_when>
    <thetext>
&gt; We have ample coverage for this in debug builds.  There is a similar assertion via the verifyEdges() mechanism.

Hmmm. okay.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGNodeAllocator.h:41
&gt; &gt; &gt; +typedef Allocator&lt;Node, 112&gt; NodeAllocator;
&gt; &gt; &gt; +#else
&gt; &gt; &gt; +typedef Allocator&lt;Node, 80&gt; NodeAllocator;
&gt; &gt; 
&gt; &gt; What are these magic numbers?
&gt; 
&gt; These are the current sizes of Node in 32-bit and 64-bit, rounded up to multiple of 16.
&gt; 
&gt; I thought about making that more implicit - like having Allocator be parameterized by desired alignment - but I like this better because it also acts as an assertion that Node doesn&apos;t grow.  We generally don&apos;t want Node to grow without us finding out about it.

Can we have a comment to that effect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838733</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-21 13:00:27 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt; We have ample coverage for this in debug builds.  There is a similar assertion via the verifyEdges() mechanism.
&gt; 
&gt; Hmmm. okay.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGNodeAllocator.h:41
&gt; &gt; &gt; &gt; +typedef Allocator&lt;Node, 112&gt; NodeAllocator;
&gt; &gt; &gt; &gt; +#else
&gt; &gt; &gt; &gt; +typedef Allocator&lt;Node, 80&gt; NodeAllocator;
&gt; &gt; &gt; 
&gt; &gt; &gt; What are these magic numbers?
&gt; &gt; 
&gt; &gt; These are the current sizes of Node in 32-bit and 64-bit, rounded up to multiple of 16.
&gt; &gt; 
&gt; &gt; I thought about making that more implicit - like having Allocator be parameterized by desired alignment - but I like this better because it also acts as an assertion that Node doesn&apos;t grow.  We generally don&apos;t want Node to grow without us finding out about it.
&gt; 
&gt; Can we have a comment to that effect?

Yup, added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838875</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-21 15:01:43 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/143654</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839134</commentid>
    <comment_count>31</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-02-21 18:52:41 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; Landed in http://trac.webkit.org/changeset/143654

Fixed a typo that broke the 32bit build in http://trac.webkit.org/changeset/143679</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839520</commentid>
    <comment_count>32</comment_count>
    <who name="Zoltan Arvai">zarvai</who>
    <bug_when>2013-02-22 05:54:33 -0800</bug_when>
    <thetext>Some fast/js tests are crashing on 32 bit Qt after this patch. See
https://bugs.webkit.org/show_bug.cgi?id=110590</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187463</attachid>
            <date>2013-02-09 22:23:47 -0800</date>
            <delta_ts>2013-02-10 13:54:22 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20128</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQyMzc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY3LDYgKzQ2Nyw4IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZSkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIHRvdGFsbHkgd3JvbmcuIGl0IG1p
Z2h0IGZpbHRlciB0aGUgZG91YmxlIGltbWVkaWF0ZQorICAgICAgICAgICAgLy8gdG8gaGF2ZSBh
biBlbXB0eSB2YWx1ZS4gOi0vCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKICAg
ICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5v
ZGVGbGFncygpKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJl
dmlzaW9uIDE0MjM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw5ICs0Nyw2IEBAIHB1YmxpYzoKICAgICBBZGph
Y2VuY3lMaXN0KCkgeyB9CiAgICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQpCi0jaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgICAgICA6IG1fa2luZChraW5kKQotI2VuZGlmCiAgICAgewog
ICAgICAgICBpZiAoa2luZCA9PSBWYXJpYWJsZSkgewogICAgICAgICAgICAgbV93b3Jkc1swXS5t
X2VuY29kZWRXb3JkID0gVUlOVF9NQVg7CkBAIC01OCwxOCArNTUsMTIgQEAgcHVibGljOgogICAg
IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgTm9kZSogY2hpbGQxLCBOb2Rl
KiBjaGlsZDIsIE5vZGUqIGNoaWxkMykKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDog
bV9raW5kKEZpeGVkKQotI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGtpbmQs
IGtpbmQgPT0gRml4ZWQpOwogICAgICAgICBpbml0aWFsaXplKGNoaWxkMSwgY2hpbGQyLCBjaGls
ZDMpOwogICAgIH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgdW5zaWduZWQg
Zmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgICAgICA6IG1fa2luZChWYXJpYWJsZSkKLSNlbmRpZgogICAgIHsKICAgICAgICAgQVNTRVJU
X1VOVVNFRChraW5kLCBraW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgc2V0Rmlyc3RDaGlsZChm
aXJzdENoaWxkKTsKQEAgLTc5LDIxICs3MCwxOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgRWRnZSYg
Y2hpbGQodW5zaWduZWQgaSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7
Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jk
c1tpXTsKICAgICB9ICAgIAogICAgIAogICAgIEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpCiAgICAg
ewogICAgICAgICBBU1NFUlQoaSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZp
eGVkKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfQogICAgIAogICAgIHZvaWQg
c2V0Q2hpbGQodW5zaWduZWQgaSwgRWRnZSBub2RlVXNlKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGkgPCBTaXplKTsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIG1f
d29yZHNbaV0gPSBub2RlVXNlOwogICAgIH0KICAgICAKQEAgLTEyNSw5ICsxMTMsNiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCByZXNldCgpCiAgICAgewotI2lmICFBU1NFUlRfRElTQUJMRUQK
LSAgICAgICAgbV9raW5kID0gRml4ZWQ7Ci0jZW5kaWYKICAgICAgICAgaW5pdGlhbGl6ZSgpOwog
ICAgIH0KICAgICAKQEAgLTE0MiwzNCArMTI3LDI0IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVk
IGZpcnN0Q2hpbGQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJp
YWJsZSk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQ7CiAgICAgfQog
ICAgIHZvaWQgc2V0Rmlyc3RDaGlsZCh1bnNpZ25lZCBmaXJzdENoaWxkKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIG1fd29yZHNbMF0ubV9lbmNv
ZGVkV29yZCA9IGZpcnN0Q2hpbGQ7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIG51bUNoaWxk
cmVuKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwog
ICAgICAgICByZXR1cm4gbV93b3Jkc1sxXS5tX2VuY29kZWRXb3JkOwogICAgIH0KICAgICB2b2lk
IHNldE51bUNoaWxkcmVuKHVuc2lnbmVkIG51bUNoaWxkcmVuKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIG1fd29yZHNbMV0ubV9lbmNvZGVkV29y
ZCA9IG51bUNoaWxkcmVuOwogICAgIH0KICAgICAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAg
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0jZW5kaWYKIHByaXZhdGU6CiAg
ICAgRWRnZSBtX3dvcmRzW1NpemVdOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBLaW5kIG1f
a2luZDsKLSNlbmRpZgogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAxNDIzNzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw3ICs0MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAvLyAg
IGFueXRoaW5nLiBZb3UgY2FuIGp1c3QgY2FsbCBmcmVlQWxsKCkgaW5zdGVhZC4KIC8vIC0gWW91
IGNhbGwgZnJlZSgpIG9uIGFsbCBUJ3MgdGhhdCB5b3UgYWxsb2NhdGVkLCBhbmQgbmV2ZXIgdXNl
IGZyZWVBbGwoKS4KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KKy8vIGZvcmNlZENlbGxTaXplOiBz
ZXQgdGhpcyB0byAwIGlmIHlvdSdyZSBoYXBweSB3aXRoIHRoZSBkZWZhdWx0IGFsaWdubWVudCwg
b3Igc2V0IGl0CisvLyB0byBhIG5vbi16ZXJvIHZhbHVlIGlmIHlvdSB3YW50IHRvIGZvcmNpYmx5
IGFsaWduIHRoZSBhbGxvY2F0aW9ucyB0byBhIGNlcnRhaW4KKy8vIHZhbHVlLiBXaGVuIHlvdSBk
byB0aGlzLCBBbGxvY2F0b3Igd2lsbCBBU1NFUlQgdGhhdCBmb3JjZWRDZWxsQWxpZ25tZW50ID49
IHNpemVvZihUKS4KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFs
aWdubWVudD4KIGNsYXNzIEFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgQWxsb2NhdG9yKCk7CkBA
IC02MywxMyArNjcsMjQgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsKICAg
ICB2b2lkKiBmcmVlTGlzdEFsbG9jYXRlKCk7CiAgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7Ci0K
KyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKCkKKyAgICB7CisgICAgICAgIGlmICgh
Zm9yY2VkQ2VsbEFsaWdubWVudCkKKyAgICAgICAgICAgIHJldHVybiBzaXplb2YoVCk7CisgICAg
ICAgIAorICAgICAgICBBU1NFUlQoZm9yY2VkQ2VsbEFsaWdubWVudCA+PSBzaXplb2YoVCkpOwor
ICAgICAgICByZXR1cm4gZm9yY2VkQ2VsbEFsaWdubWVudDsKKyAgICB9CisgICAgCiAgICAgc3Ry
dWN0IFJlZ2lvbiB7CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIDY0ICog
S0I7IH0KLSAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3RkOjpt
YXgoc2l6ZW9mKFJlZ2lvbiksIHNpemVvZihUKSk7IH0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVk
IG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUoKSAtIGhlYWRlclNpemUo
KSkgLyBzaXplb2YoVCk7IH0KLSAgICAgICAgVCogZGF0YSgpIHsgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRlclNpemUoKSk7IH0KLSAgICAg
ICAgYm9vbCBpc0luVGhpc1JlZ2lvbihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocG9pbnRlciAtIGRhdGEoKSkgPCBudW1iZXJPZlRoaW5nc1BlclJlZ2lv
bigpOyB9CisgICAgICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIHN0ZDo6
bWF4KHNpemVvZihSZWdpb24pLCBjZWxsU2l6ZSgpKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6
ZSgpKSAvIGNlbGxTaXplKCk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBwYXlsb2FkU2l6ZSgp
IHsgcmV0dXJuIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgKiBjZWxsU2l6ZSgpOyB9CisgICAg
ICAgIGNoYXIqIHBheWxvYWRCZWdpbigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhp
cykgKyBoZWFkZXJTaXplKCk7IH0KKyAgICAgICAgY2hhciogcGF5bG9hZEVuZCgpIHsgcmV0dXJu
IHBheWxvYWRCZWdpbigpICsgcGF5bG9hZFNpemUoKTsgfQorICAgICAgICBib29sIGlzSW5UaGlz
UmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oYml0
d2lzZV9jYXN0PGNoYXIqPihwb2ludGVyKSAtIHBheWxvYWRCZWdpbigpKSA8IHBheWxvYWRTaXpl
KCk7IH0KICAgICAgICAgc3RhdGljIFJlZ2lvbiogcmVnaW9uRm9yKGNvbnN0IFQqIHBvaW50ZXIp
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxSZWdpb24qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihw
b2ludGVyKSAmIH4oc2l6ZSgpIC0gMSkpOyB9CiAgICAgICAgIAogICAgICAgICBQYWdlQWxsb2Nh
dGlvbkFsaWduZWQgbV9hbGxvY2F0aW9uOwpAQCAtODIsMjYgKzk3LDI2IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgUmVnaW9uKiBtX3JlZ2lvbkhlYWQ7CiAgICAgdm9pZCoqIG1fZnJlZUxpc3RIZWFk
OwotICAgIFQqIG1fYnVtcEVuZDsKLSAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7CisgICAg
Y2hhciogbV9idW1wRW5kOworICAgIHNpemVfdCBtX2J1bXBSZW1haW5pbmc7CiB9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIEFsbG9jYXRvcjxUPjo6QWxsb2NhdG9yKCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitpbmxpbmUgQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpBbGxvY2F0b3IoKQogICAgIDogbV9yZWdp
b25IZWFkKDApCiAgICAgLCBtX2ZyZWVMaXN0SGVhZCgwKQogICAgICwgbV9idW1wUmVtYWluaW5n
KDApCiB7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+Ojp+
QWxsb2NhdG9yKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGln
bm1lbnQ+CitpbmxpbmUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+Ojp+QWxsb2Nh
dG9yKCkKIHsKICAgICByZXNldCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlT
X0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYXRlKCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIEFs
bG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6YWxsb2NhdGUoKQogewogICAgIHZvaWQq
IHJlc3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOwogICAgIGlmIChMSUtFTFkoISFyZXN1bHQpKQpAQCAt
MTA5LDggKzEyNCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjphbGxvY2EK
ICAgICByZXR1cm4gZnJlZUxpc3RBbGxvY2F0ZSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWUoVCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNl
ZENlbGxBbGlnbm1lbnQ+OjpmcmVlKFQqIG9iamVjdCkKIHsKICAgICBvYmplY3QtPn5UKCk7CiAg
ICAgCkBAIC0xMTksOCArMTM0LDggQEAgdm9pZCBBbGxvY2F0b3I8VD46OmZyZWUoVCogb2JqZWN0
KQogICAgIG1fZnJlZUxpc3RIZWFkID0gY2VsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlQWxsKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2ln
bmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxp
Z25tZW50Pjo6ZnJlZUFsbCgpCiB7CiAgICAgaWYgKCFtX3JlZ2lvbkhlYWQpIHsKICAgICAgICAg
QVNTRVJUKCFtX2J1bXBSZW1haW5pbmcpOwpAQCAtMTQyLDggKzE1Nyw4IEBAIHZvaWQgQWxsb2Nh
dG9yPFQ+OjpmcmVlQWxsKCkKICAgICBzdGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OnJlc2V0KCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9j
YXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6cmVzZXQoKQogewogICAgIGZyZWVSZWdpb25z
U3RhcnRpbmdBdChtX3JlZ2lvbkhlYWQpOwogICAgIApAQCAtMTUyLDM4ICsxNjcsMzggQEAgdm9p
ZCBBbGxvY2F0b3I8VD46OnJlc2V0KCkKICAgICBtX2J1bXBSZW1haW5pbmcgPSAwOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdW5zaWduZWQgQWxsb2NhdG9yPFQ+OjppbmRleE9mKGNvbnN0
IFQqIG9iamVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGln
bm1lbnQ+Cit1bnNpZ25lZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmluZGV4
T2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHVuc2lnbmVkIGJhc2VJbmRleCA9IDA7CiAgICAg
Zm9yIChSZWdpb24qIHJlZ2lvbiA9IG1fcmVnaW9uSGVhZDsgcmVnaW9uOyByZWdpb24gPSByZWdp
b24tPm1fbmV4dCkgewogICAgICAgICBpZiAocmVnaW9uLT5pc0luVGhpc1JlZ2lvbihvYmplY3Qp
KQotICAgICAgICAgICAgcmV0dXJuIGJhc2VJbmRleCArIChvYmplY3QgLSByZWdpb24tPmRhdGEo
KSk7CisgICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKGJpdHdpc2VfY2FzdDxjaGFyKj4o
b2JqZWN0KSAtIHJlZ2lvbi0+cGF5bG9hZEJlZ2luKCkpIC8gY2VsbFNpemUoKTsKICAgICAgICAg
YmFzZUluZGV4ICs9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKICAgICB9CiAg
ICAgQ1JBU0goKTsKICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFs
bG9jYXRvcjxUPiogQWxsb2NhdG9yPFQ+OjphbGxvY2F0b3JPZihjb25zdCBUKiBvYmplY3QpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgorQWxsb2Nh
dG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+KiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdu
bWVudD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKIHsKICAgICByZXR1cm4gUmVnaW9u
OjpyZWdpb25Gb3Iob2JqZWN0KS0+bV9hbGxvY2F0b3I7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YnVtcEFsbG9jYXRlKCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBTFdBWVNf
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6YnVtcEFsbG9j
YXRlKCkKIHsKLSAgICBpZiAodW5zaWduZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5nKSB7
Ci0gICAgICAgIHJlbWFpbmluZy0tOworICAgIGlmIChzaXplX3QgcmVtYWluaW5nID0gbV9idW1w
UmVtYWluaW5nKSB7CisgICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZSgpOwogICAgICAgICBt
X2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiBtX2J1bXBFbmQgLSAo
cmVtYWluaW5nICsgMSk7CisgICAgICAgIHJldHVybiBtX2J1bXBFbmQgLSAocmVtYWluaW5nICsg
Y2VsbFNpemUoKSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotdm9pZCogQWxsb2NhdG9yPFQ+OjpmcmVlTGlzdEFsbG9jYXRlKCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkKiBBbGxvY2F0b3I8
VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWVMaXN0QWxsb2NhdGUoKQogewogICAgIHZvaWQq
KiByZXN1bHQgPSBtX2ZyZWVMaXN0SGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCkBA
IC0xOTIsOCArMjA3LDggQEAgdm9pZCogQWxsb2NhdG9yPFQ+OjpmcmVlTGlzdEFsbG9jYXRlKCkK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCogQWxs
b2NhdG9yPFQ+OjphbGxvY2F0ZVNsb3coKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQg
Zm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25t
ZW50Pjo6YWxsb2NhdGVTbG93KCkKIHsKICAgICBBU1NFUlQoIW1fZnJlZUxpc3RIZWFkKTsKICAg
ICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CkBAIC0yMTYsOCArMjMxLDggQEAgdm9pZCogQWxs
b2NhdG9yPFQ+OjphbGxvY2F0ZVNsb3coKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0
KHR5cGVuYW1lIEFsbG9jYXRvcjxUPjo6UmVnaW9uKiByZWdpb24pCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9y
Y2VkQ2VsbEFsaWdubWVudD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdCh0eXBlbmFtZSBBbGxvY2F0
b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OlJlZ2lvbiogcmVnaW9uKQogewogICAgIHdoaWxl
IChyZWdpb24pIHsKICAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25leHQ7
CkBAIC0yMjYsMTEgKzI0MSwxMSBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZVJlZ2lvbnNTdGFy
dGluZ0F0CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8
VD46OnN0YXJ0QnVtcGluZ0luKHR5cGVuYW1lIEFsbG9jYXRvcjxUPjo6UmVnaW9uKiByZWdpb24p
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9p
ZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OnN0YXJ0QnVtcGluZ0luKHR5cGVu
YW1lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24pCiB7
Ci0gICAgbV9idW1wRW5kID0gcmVnaW9uLT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhpbmdz
UGVyUmVnaW9uKCk7Ci0gICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRoaW5n
c1BlclJlZ2lvbigpOworICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+cGF5bG9hZEVuZCgpOworICAg
IG1fYnVtcFJlbWFpbmluZyA9IFJlZ2lvbjo6cGF5bG9hZFNpemUoKTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5o
CShyZXZpc2lvbiAxNDIzNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSwxNSBAQCBzdHJ1Y3QgTm9kZVBvaW50ZXJU
cmFpdHMgewogCiBlbnVtIFVzZUtpbmQgewogICAgIFVudHlwZWRVc2UsCisgICAgSW50MzJVc2Us
CisgICAgUmVhbE51bWJlclVzZSwKICAgICBEb3VibGVVc2UsCisgICAgQm9vbGVhblVzZSwKKyAg
ICBDZWxsVXNlLAorICAgIE9iamVjdFVzZSwKKyAgICBPYmplY3RPck90aGVyVXNlLAorICAgIFN0
cmluZ1VzZSwKKyAgICBPdGhlclVzZSwKICAgICBMYXN0VXNlS2luZCAvLyBNdXN0IGFsd2F5cyBi
ZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0byBkZW5vdGUgdGhl
IG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdFZGdlLmgJKHJldmlzaW9uIDE0MjM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCi0gICAgc3RhdGlj
IHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gMjsgfQorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlm
dCgpIHsgcmV0dXJuIDQ7IH0KICAgICAKICAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5v
ZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0MjM3OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDYgKzQ1LDkgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBCZWZvcmVGaXhwb2ludCk7Cisg
ICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAog
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KQogICAgICAgICAgICAgZml4dXBCbG9j
ayhtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC03Niw2ICs3OSwxMDkgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpCisg
ICAgICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQodmFyaWFibGUt
PmxvY2FsKCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVk
VHlwZSA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAg
ICAgICBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEJpdEFuZDoKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6Cisg
ICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAg
Y2FzZSBCaXRVUlNoaWZ0OiB7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVu
LmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQy
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOiB7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogeworICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNl
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwor
ICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5jaGlsZDEoKS5zZXRVc2VLaW5kKERvdWJsZVVzZSk7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICBt
X2dyYXBoLmRlcmVmKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUJvb2xlYW4oKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxk
MSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJG
bGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEludDMyVG9Eb3Vi
bGU6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2hlY2tO
dW1iZXI6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLnNldFVzZUtpbmQo
RG91YmxlVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBWYWx1ZUFkZDogeworICAgICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkcmVuLmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAg
ICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAg
ICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkuc2V0VXNlS2luZChJ
bnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBH
ZXRCeUlkOiB7CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZv
cmVGaXhwb2ludCkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE4MCwyNiArMjg2LDYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5tdXN0
R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RH
ZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0WG9y
OgotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAg
ICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGls
ZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNo
aWxkMigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBDb21wYXJlRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAg
IGNhc2UgQ29tcGFyZUxlc3NFcToKQEAgLTI0NywyNiArMzMzLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZXRM
b2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Nh
cHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6
Ci0gICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNo
b3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2UoMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKICAgICAgICAgICAgIGlmIChtX2dyYXBo
LmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkKICAgICAgICAgICAgICAgICAmJiBub2Rl
LT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCkBAIC00OTMsMTUgKzU1OSwxOSBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKICAgICAgICAgTm9kZSogbm9k
ZSA9IGVkZ2Uubm9kZSgpOwotICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IFZhbHVlVG9JbnQzMikgeworICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKEludDMyVXNlKTsK
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgRWRnZSBv
bGRFZGdlID0gZWRnZTsKICAgICAgICAgRWRnZSBuZXdFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAg
ICAgICAgIAorICAgICAgICBpZiAobmV3RWRnZS51c2VLaW5kKCkgIT0gSW50MzJLaW5kKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5ld0VkZ2UtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSk7CisgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihuZXdF
ZGdlKTsKICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKICAgICAgICAgCkBAIC01MjYs
NiArNTk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsIEludDMyVG9Eb3VibGUsCiAgICAgICAgICAgICBtX2N1
cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBtX2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNoaWxk
SW5kZXgpLm5vZGUoKSk7CisgICAgICAgIHJlc3VsdC0+Y2hpbGRyZW4uY2hpbGQxKCkuc2V0VXNl
S2luZChEb3VibGVVc2UpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQyMzc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBQ
dXRUb0Jhc2VPcGVyYXRpb25EYXRhIHsKIAogZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogICAg
IERvbnRTcGVjdWxhdGVJbnRlZ2VyLAotICAgIFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRj
aE92ZXJmbG93LAorICAgIFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cywKICAg
ICBTcGVjdWxhdGVJbnRlZ2VyCiB9OwogCkBAIC03ODEsNyArNzgxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0
ZSA+IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFy
aXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cg
OiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUlu
dGVnZXIoYWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0
ZUNvbnN0YW50cyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKICAgICBib29s
IG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJp
YWJsZSwgTm9kZSogaW1tZWRpYXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE0MjM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewogICAgICAgICBzZXRPcEFuZERlZmF1
bHRGbGFncyhvcCk7Ci0gICAgICAgIEFTU0VSVCghIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3Mp
ID09IChjaGlsZHJlbi5raW5kKCkgPT0gQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUpKTsKICAgICB9
CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5v
IGltbWVkaWF0ZSB2YWx1ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZUFsbG9jYXRvci5oCShyZXZpc2lvbiAxNDIzNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10eXBlZGVmIEFsbG9jYXRv
cjxOb2RlPiBOb2RlQWxsb2NhdG9yOworI2lmIFVTRShKU1ZBTFVFNjQpCit0eXBlZGVmIEFsbG9j
YXRvcjxOb2RlLCAxMTI+IE5vZGVBbGxvY2F0b3I7CisjZWxzZQordHlwZWRlZiBBbGxvY2F0b3I8
Tm9kZSwgODA+IE5vZGVBbGxvY2F0b3I7CisjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187494</attachid>
            <date>2013-02-10 13:54:22 -0800</date>
            <delta_ts>2013-02-12 22:15:30 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28531</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQyMzc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY3LDYgKzQ2Nyw4IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZSkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIHRvdGFsbHkgd3JvbmcuIGl0IG1p
Z2h0IGZpbHRlciB0aGUgZG91YmxlIGltbWVkaWF0ZQorICAgICAgICAgICAgLy8gdG8gaGF2ZSBh
biBlbXB0eSB2YWx1ZS4gOi0vCiAgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKICAg
ICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5v
ZGVGbGFncygpKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwpA
QCAtNzYwLDE1ICs3NjIsMTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAg
aWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGljdGlvbigpKSkgewotICAgICAg
ICAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGljdGlvbigp
KSkKLSAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjU3Ry
aW5nKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGROb2RlKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBOb2RlKiBj
aGlsZE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgIGlmIChpc0NlbGxTcGVj
dWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIGlmIChpc1N0
cmluZ1NwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNTdHJpbmcpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY0NlbGwpOwor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTQy
Mzc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFkamFjZW5jeUxpc3Qo
KSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIGlm
IChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdv
cmQgPSBVSU5UX01BWDsKQEAgLTU4LDE4ICs1NSwxMiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAog
ICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwg
Tm9kZSogY2hpbGQzKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBtX2tpbmQoRml4
ZWQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBG
aXhlZCk7CiAgICAgICAgIGluaXRpYWxpemUoY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAg
fQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCB1bnNpZ25lZCBmaXJzdENoaWxk
LCB1bnNpZ25lZCBudW1DaGlsZHJlbikKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDog
bV9raW5kKFZhcmlhYmxlKQotI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGtp
bmQsIGtpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBzZXRGaXJzdENoaWxkKGZpcnN0Q2hpbGQp
OwpAQCAtNzksMjEgKzcwLDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBFZGdlJiBjaGlsZCh1bnNp
Z25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsKLSAgICAgICAg
QVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzW2ldOwogICAg
IH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQodW5zaWduZWQgaSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAg
ICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRDaGlsZCh1
bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAgewogICAgICAgICBBU1NFUlQoaSA8IFNpemUp
OwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgbV93b3Jkc1tpXSA9
IG5vZGVVc2U7CiAgICAgfQogICAgIApAQCAtMTI1LDkgKzExMyw2IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBt
X2tpbmQgPSBGaXhlZDsKLSNlbmRpZgogICAgICAgICBpbml0aWFsaXplKCk7CiAgICAgfQogICAg
IApAQCAtMTQyLDM0ICsxMjcsMjQgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZmlyc3RDaGls
ZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAg
ICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZDsKICAgICB9CiAgICAgdm9pZCBz
ZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCiAgICAgewotICAgICAgICBBU1NFUlQo
bV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1swXS5tX2VuY29kZWRXb3JkID0g
Zmlyc3RDaGlsZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oKSBjb25z
dAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIHJl
dHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CiAgICAgfQogICAgIHZvaWQgc2V0TnVtQ2hp
bGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5k
ID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1sxXS5tX2VuY29kZWRXb3JkID0gbnVtQ2hp
bGRyZW47CiAgICAgfQogICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSNlbmRpZgogcHJpdmF0ZToKICAgICBFZGdlIG1f
d29yZHNbU2l6ZV07Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQgbV9raW5kOwotI2Vu
ZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0MjM3OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vICAgYW55dGhpbmcu
IFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgogLy8gLSBZb3UgY2FsbCBmcmVl
KCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2UgZnJlZUFsbCgp
LgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gZm9yY2VkQ2VsbFNpemU6IHNldCB0aGlzIHRv
IDAgaWYgeW91J3JlIGhhcHB5IHdpdGggdGhlIGRlZmF1bHQgYWxpZ25tZW50LCBvciBzZXQgaXQK
Ky8vIHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91IHdhbnQgdG8gZm9yY2libHkgYWxpZ24gdGhl
IGFsbG9jYXRpb25zIHRvIGEgY2VydGFpbgorLy8gdmFsdWUuIFdoZW4geW91IGRvIHRoaXMsIEFs
bG9jYXRvciB3aWxsIEFTU0VSVCB0aGF0IGZvcmNlZENlbGxBbGlnbm1lbnQgPj0gc2l6ZW9mKFQp
LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgog
Y2xhc3MgQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICBBbGxvY2F0b3IoKTsKQEAgLTYzLDEzICs2
NywyNCBAQCBwcml2YXRlOgogICAgIHZvaWQqIGJ1bXBBbGxvY2F0ZSgpOwogICAgIHZvaWQqIGZy
ZWVMaXN0QWxsb2NhdGUoKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3coKTsKLQorICAgIAorICAg
IHN0YXRpYyBzaXplX3QgY2VsbFNpemUoKQorICAgIHsKKyAgICAgICAgaWYgKCFmb3JjZWRDZWxs
QWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihUKTsKKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVChmb3JjZWRDZWxsQWxpZ25tZW50ID49IHNpemVvZihUKSk7CisgICAgICAgIHJl
dHVybiBmb3JjZWRDZWxsQWxpZ25tZW50OworICAgIH0KKyAgICAKICAgICBzdHJ1Y3QgUmVnaW9u
IHsKICAgICAgICAgc3RhdGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBLQjsgfQotICAg
ICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXplb2Yo
UmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZU
aGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVv
ZihUKTsgfQotICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQotICAgICAgICBib29sIGlz
SW5UaGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7IH0KKyAg
ICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3RkOjptYXgoc2l6ZW9m
KFJlZ2lvbiksIGNlbGxTaXplKCkpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJP
ZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBoZWFkZXJTaXplKCkpIC8gY2Vs
bFNpemUoKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IHBheWxvYWRTaXplKCkgeyByZXR1cm4g
bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSAqIGNlbGxTaXplKCk7IH0KKyAgICAgICAgY2hhciog
cGF5bG9hZEJlZ2luKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRl
clNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkRW5kKCkgeyByZXR1cm4gcGF5bG9hZEJl
Z2luKCkgKyBwYXlsb2FkU2l6ZSgpOyB9CisgICAgICAgIGJvb2wgaXNJblRoaXNSZWdpb24oY29u
c3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHBvaW50ZXIpIC0gcGF5bG9hZEJlZ2luKCkpIDwgcGF5bG9hZFNpemUoKTsgfQogICAg
ICAgICBzdGF0aWMgUmVnaW9uKiByZWdpb25Gb3IoY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpICYg
fihzaXplKCkgLSAxKSk7IH0KICAgICAgICAgCiAgICAgICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25l
ZCBtX2FsbG9jYXRpb247CkBAIC04MiwyNiArOTcsMjYgQEAgcHJpdmF0ZToKICAgICAKICAgICBS
ZWdpb24qIG1fcmVnaW9uSGVhZDsKICAgICB2b2lkKiogbV9mcmVlTGlzdEhlYWQ7Ci0gICAgVCog
bV9idW1wRW5kOwotICAgIHVuc2lnbmVkIG1fYnVtcFJlbWFpbmluZzsKKyAgICBjaGFyKiBtX2J1
bXBFbmQ7CisgICAgc2l6ZV90IG1fYnVtcFJlbWFpbmluZzsKIH07CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+OjpBbGxvY2F0b3IoKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lubGluZSBBbGxvY2F0b3I8VCwg
Zm9yY2VkQ2VsbEFsaWdubWVudD46OkFsbG9jYXRvcigpCiAgICAgOiBtX3JlZ2lvbkhlYWQoMCkK
ICAgICAsIG1fZnJlZUxpc3RIZWFkKDApCiAgICAgLCBtX2J1bXBSZW1haW5pbmcoMCkKIHsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46On5BbGxvY2F0b3Io
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lu
bGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46On5BbGxvY2F0b3IoKQogewog
ICAgIHJlc2V0KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIHZv
aWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQs
IGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCogcmVzdWx0ID0g
YnVtcEFsbG9jYXRlKCk7CiAgICAgaWYgKExJS0VMWSghIXJlc3VsdCkpCkBAIC0xMDksOCArMTI0
LDggQEAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYQogICAgIHJldHVy
biBmcmVlTGlzdEFsbG9jYXRlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFs
bG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25l
ZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdu
bWVudD46OmZyZWUoVCogb2JqZWN0KQogewogICAgIG9iamVjdC0+flQoKTsKICAgICAKQEAgLTEx
OSw4ICsxMzQsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCiAgICAgbV9m
cmVlTGlzdEhlYWQgPSBjZWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxv
Y2F0b3I8VD46OmZyZWVBbGwoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2Vk
Q2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+Ojpm
cmVlQWxsKCkKIHsKICAgICBpZiAoIW1fcmVnaW9uSGVhZCkgewogICAgICAgICBBU1NFUlQoIW1f
YnVtcFJlbWFpbmluZyk7CkBAIC0xNDIsOCArMTU3LDggQEAgdm9pZCBBbGxvY2F0b3I8VD46OmZy
ZWVBbGwoKQogICAgIHN0YXJ0QnVtcGluZ0luKG1fcmVnaW9uSGVhZCk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQoKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZv
cmNlZENlbGxBbGlnbm1lbnQ+OjpyZXNldCgpCiB7CiAgICAgZnJlZVJlZ2lvbnNTdGFydGluZ0F0
KG1fcmVnaW9uSGVhZCk7CiAgICAgCkBAIC0xNTIsMzggKzE2NywzOCBAQCB2b2lkIEFsbG9jYXRv
cjxUPjo6cmVzZXQoKQogICAgIG1fYnVtcFJlbWFpbmluZyA9IDA7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci11bnNpZ25lZCBBbGxvY2F0b3I8VD46OmluZGV4T2YoY29uc3QgVCogb2JqZWN0
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3Vu
c2lnbmVkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6aW5kZXhPZihjb25zdCBU
KiBvYmplY3QpCiB7CiAgICAgdW5zaWduZWQgYmFzZUluZGV4ID0gMDsKICAgICBmb3IgKFJlZ2lv
biogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdpb247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0
KSB7CiAgICAgICAgIGlmIChyZWdpb24tPmlzSW5UaGlzUmVnaW9uKG9iamVjdCkpCi0gICAgICAg
ICAgICByZXR1cm4gYmFzZUluZGV4ICsgKG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAoYml0d2lzZV9jYXN0PGNoYXIqPihvYmplY3QpIC0g
cmVnaW9uLT5wYXlsb2FkQmVnaW4oKSkgLyBjZWxsU2l6ZSgpOwogICAgICAgICBiYXNlSW5kZXgg
Kz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwogICAgIH0KICAgICBDUkFTSCgp
OwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQWxsb2NhdG9yPFQ+
KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBbGxvY2F0b3I8VCwgZm9y
Y2VkQ2VsbEFsaWdubWVudD4qIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6YWxs
b2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHJldHVybiBSZWdpb246OnJlZ2lvbkZv
cihvYmplY3QpLT5tX2FsbG9jYXRvcjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZ
U19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjpidW1wQWxsb2NhdGUoKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUgdm9p
ZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpidW1wQWxsb2NhdGUoKQogewot
ICAgIGlmICh1bnNpZ25lZCByZW1haW5pbmcgPSBtX2J1bXBSZW1haW5pbmcpIHsKLSAgICAgICAg
cmVtYWluaW5nLS07CisgICAgaWYgKHNpemVfdCByZW1haW5pbmcgPSBtX2J1bXBSZW1haW5pbmcp
IHsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplKCk7CiAgICAgICAgIG1fYnVtcFJlbWFp
bmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1haW5pbmcg
KyAxKTsKKyAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1haW5pbmcgKyBjZWxsU2l6ZSgp
KTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lk
KiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFsbG9jYXRvcjxULCBmb3JjZWRD
ZWxsQWxpZ25tZW50Pjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCoqIHJlc3VsdCA9
IG1fZnJlZUxpc3RIZWFkOwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKQEAgLTE5Miw4ICsy
MDcsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkKiBBbGxvY2F0b3I8VD46
OmFsbG9jYXRlU2xvdygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxs
QWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxv
Y2F0ZVNsb3coKQogewogICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOwogICAgIEFTU0VSVCgh
bV9idW1wUmVtYWluaW5nKTsKQEAgLTIxNiw4ICsyMzEsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46
OmFsbG9jYXRlU2xvdygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQodHlwZW5hbWUg
QWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2ln
bmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxp
Z25tZW50Pjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KHR5cGVuYW1lIEFsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24pCiB7CiAgICAgd2hpbGUgKHJlZ2lvbikg
ewogICAgICAgICBSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb24tPm1fbmV4dDsKQEAgLTIyNiwx
MSArMjQxLDExIEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQKICAg
ICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6c3RhcnRC
dW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRv
cjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2Nh
dG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsKLSAgICBtX2J1
bXBFbmQgPSByZWdpb24tPmRhdGEoKSArIFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24o
KTsKLSAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9u
KCk7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5wYXlsb2FkRW5kKCk7CisgICAgbV9idW1wUmVt
YWluaW5nID0gUmVnaW9uOjpwYXlsb2FkU2l6ZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9u
IDE0MjM3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDcgKzg1LDE1IEBAIHN0cnVjdCBOb2RlUG9pbnRlclRyYWl0cyB7CiAK
IGVudW0gVXNlS2luZCB7CiAgICAgVW50eXBlZFVzZSwKKyAgICBJbnQzMlVzZSwKKyAgICBSZWFs
TnVtYmVyVXNlLAogICAgIERvdWJsZVVzZSwKKyAgICBCb29sZWFuVXNlLAorICAgIENlbGxVc2Us
CisgICAgT2JqZWN0VXNlLAorICAgIE9iamVjdE9yT3RoZXJVc2UsCisgICAgU3RyaW5nVXNlLAor
ICAgIE90aGVyVXNlLAogICAgIExhc3RVc2VLaW5kIC8vIE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0
IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9m
IGVudW0gZWxlbWVudHMuCiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2Uu
aAkocmV2aXNpb24gMTQyMzc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBzdGF0aWMgdWludDMyX3Qg
c2hpZnQoKSB7IHJldHVybiAyOyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1
cm4gNDsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwg
VXNlS2luZCB1c2VLaW5kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQyMzc5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
OSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEJlZm9yZUZpeHBvaW50KTsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1cEJsb2NrKG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc2
LDYgKzc5LDIyOCBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBzd2l0Y2gg
KG9wKSB7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkKKyAgICAgICAgICAg
ICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudCh2YXJpYWJsZS0+bG9jYWwoKSkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gdmFy
aWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQz
MlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAo
aXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4uY2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0QW5k
OgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2Fz
ZSBCaXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVS
U2hpZnQ6IHsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkp
OworICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXI6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6IHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAg
ICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LmNoaWxkMSgpLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5j
bGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVy
ZWYobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9v
bGVhbigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkuc2V0VXNl
S2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVN
dXN0R2VuZXJhdGUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZTogeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja051bWJlcjogewor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkuc2V0VXNlS2luZChEb3VibGVVc2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIFZhbHVlQWRkOiB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQx
KCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVy
RXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgIGlm
IChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2UoMCk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTmVnYXRl
OiB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDApOworICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aERpdjogeworICAgICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICYm
IG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1g4
NigpIHx8IGlzQVJNdjdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkcmVuLmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5qZWN0SW50
MzJUb0RvdWJsZU5vZGUoMCk7CisgICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5v
ZGUoMSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIHJlZidpbmcg
b24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9tCisgICAgICAg
ICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgorICAgICAgICAgICAgICAgIE5vZGUq
IG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJs
ZSwgKm5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
KERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxp
emUoRWRnZShuZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRnZSgpLCBFZGdlKCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgwKTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAgICAg
IGNhc2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAgICAgICAgICAgIGlm
IChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEo
KS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBub2Rl
LT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZHJlbi5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAg
ICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJpdGhTcXJ0OiB7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgp
LnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLnNldFVzZUtpbmQoSW50
MzJVc2UpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgVHlwZU9mOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgp
LnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNh
c2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2Fz
ZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOiB7CisgICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZHJlbi5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDkzODcKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRCeUlkOiB7CiAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTE4MCw1MCArNDA1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVy
KCkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5tdXN0R2VuZXJhdGUoKSkgewotICAgICAgICAg
ICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAg
ICAgbV9ncmFwaC5kZXJlZihub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAg
IGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlm
dDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDogewot
ICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0g
ICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAg
ICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVx
OgotICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogewotICAgICAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFO
b2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTG9naWNhbE5v
dDogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQnJhbmNoOiB7CiAgICAgICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKICAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCkBAIC0yNDcs
OTYgKzQyOCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgaWYgKCFub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxk
VXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBm
aXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0g
ICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVj
dWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3Vi
OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6IHsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTWluOgot
ICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAgICAg
JiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBm
aXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBcml0aERpdjogewotICAgICAg
ICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAgICAg
ICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChp
c1g4NigpIHx8IGlzQVJNdjdzKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKDApOwotICAgICAgICAgICAgICAgIGlu
amVjdEludDMyVG9Eb3VibGVOb2RlKDEpOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCB0byBkbyByZWYnaW5nIG9uIHRoZSBjaGlsZHJlbiBiZWNhdXNlIHdlJ3JlIHN0ZWFsaW5n
IHRoZW0gZnJvbQotICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBkaXZpc2lvbi4KLSAg
ICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4s
IFJlZk5vZGUsIFNwZWNEb3VibGUsICpub2RlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcChEb3VibGVBc0ludDMyKTsKLSAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5pbml0aWFsaXplKEVkZ2UobmV3RGl2aXNpb24sIERvdWJsZVVzZSksIEVkZ2Uo
KSwgRWRnZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5T
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBm
aXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CiAgICAgICAg
ICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CkBAIC00OTMs
MTUgKzU4NCwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQog
ICAgIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGVkZ2Uubm9kZSgpOwotICAgICAgICBpZiAobm9k
ZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisg
ICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikgeworICAgICAgICAgICAgZWRn
ZS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRnZTsKICAgICAgICAgRWRnZSBuZXdF
ZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAorICAgICAgICBpZiAobmV3RWRnZS51c2VL
aW5kKCkgIT0gSW50MzJLaW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CisgICAgICAgIAog
ICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRF
ZGdlKTsKICAgICAgICAgCkBAIC01MjYsNiArNjIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgTm9k
ZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIG1faW5k
ZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsIEludDMyVG9E
b3VibGUsCiAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBtX2dyYXBoLmNo
aWxkKG1fY3VycmVudE5vZGUsIGNoaWxkSW5kZXgpLm5vZGUoKSk7CisgICAgICAgIHJlc3VsdC0+
Y2hpbGRyZW4uY2hpbGQxKCkuc2V0VXNlS2luZChEb3VibGVVc2UpOwogICAgICAgICAKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQyMzc5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBQdXRUb0Jhc2VPcGVyYXRpb25EYXRhIHsKIAogZW51bSBB
ZGRTcGVjdWxhdGlvbk1vZGUgewogICAgIERvbnRTcGVjdWxhdGVJbnRlZ2VyLAotICAgIFNwZWN1
bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93LAorICAgIFNwZWN1bGF0ZUludGVnZXJB
bmRUcnVuY2F0ZUNvbnN0YW50cywKICAgICBTcGVjdWxhdGVJbnRlZ2VyCiB9OwogCkBAIC03ODEs
NyArNzgxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29U
b1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0ZSA+IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1
cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNh
blRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdl
ckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAg
cmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoYWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNw
ZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cyA6IERvbnRTcGVjdWxhdGVJbnRlZ2Vy
OwogICAgIH0KICAgICAKICAgICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwgTm9kZSogaW1tZWRpYXRlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0MjM3OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw2
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAg
ewogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7Ci0gICAgICAgIEFTU0VSVCghISht
X2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpID09IChjaGlsZHJlbi5raW5kKCkgPT0gQWRqYWNlbmN5
TGlzdDo6VmFyaWFibGUpKTsKICAgICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3
aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCShyZXZpc2lvbiAxNDIzNzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCi10eXBlZGVmIEFsbG9jYXRvcjxOb2RlPiBOb2RlQWxsb2NhdG9yOworI2lmIFVTRShK
U1ZBTFVFNjQpCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCAxMTI+IE5vZGVBbGxvY2F0b3I7Cisj
ZWxzZQordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgODA+IE5vZGVBbGxvY2F0b3I7CisjZW5kaWYK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188010</attachid>
            <date>2013-02-12 22:15:30 -0800</date>
            <delta_ts>2013-02-16 01:01:54 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56060</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQyNjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcgKzI0NSwxMSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAg
IAorICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgIAorICAgIERGR19OT0RFX0RPX1RP
X0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGZpbHRlckVkZ2VCeVVzZSk7CisgICAgCiAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pT
Q29uc3RhbnQ6CkBAIC00NjgsNiArNDcyLDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IHRoaXMgaXMgdG90YWxseSB3cm9uZy4gaXQgbWlnaHQgZmlsdGVyIHRoZSBkb3Vi
bGUgaW1tZWRpYXRlCisgICAgICAgICAgICAvLyB0byBoYXZlIGFuIGVtcHR5IHZhbHVlLiA6LS8K
ICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAogICAgICAgICAgICAgICAgIG5vZGUs
ICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQyNjk1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1OSw2ICsyNTksMTkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmaWx0ZXJCeVR5cGUoTm9kZSogbm9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAgaWYgKHZhbHVlLm1fdHlwZSAmIH50eXBlKQor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgdmFsdWUuZmlsdGVy
KHR5cGUpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVyRWRnZUJ5
VXNlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGZpbHRlckJ5VHlwZShlZGdlLm5vZGUoKSwg
dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpOworICAgIH0KKyAgICAKICAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MjY5
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAg
IAogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2Fz
ZSBvZiBtX3R5cGUgbm90CisgICAgICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rl
cywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlcygpOwogICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJy
YXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJl
LmZpbHRlcihvdGhlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFj
ZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTQyNjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAg
cHVibGljOgogICAgIEFkamFjZW5jeUxpc3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0
KEtpbmQga2luZCkKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQp
Ci0jZW5kaWYKICAgICB7CiAgICAgICAgIGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAg
ICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU4LDE4ICs1NSwx
MiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBO
b2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9kZSogY2hpbGQzKQotI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICAgICAgOiBtX2tpbmQoRml4ZWQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBGaXhlZCk7CiAgICAgICAgIGluaXRpYWxpemUoY2hp
bGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2lu
ZCBraW5kLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKFZhcmlhYmxlKQotI2VuZGlmCiAgICAg
ewogICAgICAgICBBU1NFUlRfVU5VU0VEKGtpbmQsIGtpbmQgPT0gVmFyaWFibGUpOwogICAgICAg
ICBzZXRGaXJzdENoaWxkKGZpcnN0Q2hpbGQpOwpAQCAtNzksMjEgKzcwLDE4IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBFZGdlJiBjaGlsZCh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKGkgPCBTaXplKTsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAg
ICAgIHJldHVybiBtX3dvcmRzW2ldOwogICAgIH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQo
dW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFT
U0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBzZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAg
ewogICAgICAgICBBU1NFUlQoaSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZp
eGVkKTsKICAgICAgICAgbV93b3Jkc1tpXSA9IG5vZGVVc2U7CiAgICAgfQogICAgIApAQCAtMTI1
LDkgKzExMyw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0jaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBtX2tpbmQgPSBGaXhlZDsKLSNlbmRpZgogICAgICAg
ICBpbml0aWFsaXplKCk7CiAgICAgfQogICAgIApAQCAtMTQyLDM0ICsxMjcsMjQgQEAgcHVibGlj
OgogCiAgICAgdW5zaWduZWQgZmlyc3RDaGlsZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NF
UlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNv
ZGVkV29yZDsKICAgICB9CiAgICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hp
bGQpCiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAg
bV93b3Jkc1swXS5tX2VuY29kZWRXb3JkID0gZmlyc3RDaGlsZDsKICAgICB9CiAgICAgCiAgICAg
dW5zaWduZWQgbnVtQ2hpbGRyZW4oKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2lu
ZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7
CiAgICAgfQogICAgIHZvaWQgc2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAg
ICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jk
c1sxXS5tX2VuY29kZWRXb3JkID0gbnVtQ2hpbGRyZW47CiAgICAgfQogICAgIAotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSNl
bmRpZgogcHJpdmF0ZToKICAgICBFZGdlIG1fd29yZHNbU2l6ZV07Ci0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIEtpbmQgbV9raW5kOwotI2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDE0MjY5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIC8vICAgYW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBp
bnN0ZWFkLgogLy8gLSBZb3UgY2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0
ZWQsIGFuZCBuZXZlciB1c2UgZnJlZUFsbCgpLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8g
Zm9yY2VkQ2VsbFNpemU6IHNldCB0aGlzIHRvIDAgaWYgeW91J3JlIGhhcHB5IHdpdGggdGhlIGRl
ZmF1bHQgYWxpZ25tZW50LCBvciBzZXQgaXQKKy8vIHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91
IHdhbnQgdG8gZm9yY2libHkgYWxpZ24gdGhlIGFsbG9jYXRpb25zIHRvIGEgY2VydGFpbgorLy8g
dmFsdWUuIFdoZW4geW91IGRvIHRoaXMsIEFsbG9jYXRvciB3aWxsIEFTU0VSVCB0aGF0IGZvcmNl
ZENlbGxBbGlnbm1lbnQgPj0gc2l6ZW9mKFQpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNp
Z25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgogY2xhc3MgQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAg
ICBBbGxvY2F0b3IoKTsKQEAgLTYzLDEzICs2NywyNCBAQCBwcml2YXRlOgogICAgIHZvaWQqIGJ1
bXBBbGxvY2F0ZSgpOwogICAgIHZvaWQqIGZyZWVMaXN0QWxsb2NhdGUoKTsKICAgICB2b2lkKiBh
bGxvY2F0ZVNsb3coKTsKLQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoKQorICAg
IHsKKyAgICAgICAgaWYgKCFmb3JjZWRDZWxsQWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJu
IHNpemVvZihUKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChmb3JjZWRDZWxsQWxpZ25tZW50
ID49IHNpemVvZihUKSk7CisgICAgICAgIHJldHVybiBmb3JjZWRDZWxsQWxpZ25tZW50OworICAg
IH0KKyAgICAKICAgICBzdHJ1Y3QgUmVnaW9uIHsKICAgICAgICAgc3RhdGljIHNpemVfdCBzaXpl
KCkgeyByZXR1cm4gNjQgKiBLQjsgfQotICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUo
KSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQotICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6
ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQotICAgICAgICBUKiBkYXRhKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVy
U2l6ZSgpKTsgfQotICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJl
ck9mVGhpbmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXpl
KCkgeyByZXR1cm4gc3RkOjptYXgoc2l6ZW9mKFJlZ2lvbiksIGNlbGxTaXplKCkpOyB9CisgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChz
aXplKCkgLSBoZWFkZXJTaXplKCkpIC8gY2VsbFNpemUoKTsgfQorICAgICAgICBzdGF0aWMgc2l6
ZV90IHBheWxvYWRTaXplKCkgeyByZXR1cm4gbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSAqIGNl
bGxTaXplKCk7IH0KKyAgICAgICAgY2hhciogcGF5bG9hZEJlZ2luKCkgeyByZXR1cm4gYml0d2lz
ZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRlclNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXls
b2FkRW5kKCkgeyByZXR1cm4gcGF5bG9hZEJlZ2luKCkgKyBwYXlsb2FkU2l6ZSgpOyB9CisgICAg
ICAgIGJvb2wgaXNJblRoaXNSZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpIC0gcGF5bG9hZEJlZ2lu
KCkpIDwgcGF5bG9hZFNpemUoKTsgfQogICAgICAgICBzdGF0aWMgUmVnaW9uKiByZWdpb25Gb3Io
Y29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KICAgICAgICAgCiAg
ICAgICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CkBAIC04MiwyNiArOTcs
MjYgQEAgcHJpdmF0ZToKICAgICAKICAgICBSZWdpb24qIG1fcmVnaW9uSGVhZDsKICAgICB2b2lk
KiogbV9mcmVlTGlzdEhlYWQ7Ci0gICAgVCogbV9idW1wRW5kOwotICAgIHVuc2lnbmVkIG1fYnVt
cFJlbWFpbmluZzsKKyAgICBjaGFyKiBtX2J1bXBFbmQ7CisgICAgc2l6ZV90IG1fYnVtcFJlbWFp
bmluZzsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+OjpB
bGxvY2F0b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OkFsbG9jYXRv
cigpCiAgICAgOiBtX3JlZ2lvbkhlYWQoMCkKICAgICAsIG1fZnJlZUxpc3RIZWFkKDApCiAgICAg
LCBtX2J1bXBSZW1haW5pbmcoMCkKIHsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGlu
ZSBBbGxvY2F0b3I8VD46On5BbGxvY2F0b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFs
aWdubWVudD46On5BbGxvY2F0b3IoKQogewogICAgIHJlc2V0KCk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoKQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZ
U19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0
ZSgpCiB7CiAgICAgdm9pZCogcmVzdWx0ID0gYnVtcEFsbG9jYXRlKCk7CiAgICAgaWYgKExJS0VM
WSghIXJlc3VsdCkpCkBAIC0xMDksOCArMTI0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxv
Y2F0b3I8VD46OmFsbG9jYQogICAgIHJldHVybiBmcmVlTGlzdEFsbG9jYXRlKCk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBB
bGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWUoVCogb2JqZWN0KQogewogICAg
IG9iamVjdC0+flQoKTsKICAgICAKQEAgLTExOSw4ICsxMzQsOCBAQCB2b2lkIEFsbG9jYXRvcjxU
Pjo6ZnJlZShUKiBvYmplY3QpCiAgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9y
PFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlQWxsKCkKIHsKICAgICBpZiAoIW1fcmVnaW9u
SGVhZCkgewogICAgICAgICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CkBAIC0xNDIsOCArMTU3
LDggQEAgdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQogICAgIHN0YXJ0QnVtcGluZ0luKG1f
cmVnaW9uSGVhZCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxU
Pjo6cmVzZXQoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpyZXNldCgpCiB7
CiAgICAgZnJlZVJlZ2lvbnNTdGFydGluZ0F0KG1fcmVnaW9uSGVhZCk7CiAgICAgCkBAIC0xNTIs
MzggKzE2NywzOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQoKQogICAgIG1fYnVtcFJlbWFp
bmluZyA9IDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci11bnNpZ25lZCBBbGxvY2F0b3I8
VD46OmluZGV4T2YoY29uc3QgVCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxs
QWxpZ25tZW50Pjo6aW5kZXhPZihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgdW5zaWduZWQgYmFz
ZUluZGV4ID0gMDsKICAgICBmb3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdp
b247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0KSB7CiAgICAgICAgIGlmIChyZWdpb24tPmlzSW5U
aGlzUmVnaW9uKG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKG9iamVj
dCAtIHJlZ2lvbi0+ZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAoYml0
d2lzZV9jYXN0PGNoYXIqPihvYmplY3QpIC0gcmVnaW9uLT5wYXlsb2FkQmVnaW4oKSkgLyBjZWxs
U2l6ZSgpOwogICAgICAgICBiYXNlSW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJl
Z2lvbigpOwogICAgIH0KICAgICBDUkFTSCgpOwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotQWxsb2NhdG9yPFQ+KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKGNv
bnN0IFQqIG9iamVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxB
bGlnbm1lbnQ+CitBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD4qIEFsbG9jYXRvcjxU
LCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQogewog
ICAgIHJldHVybiBSZWdpb246OnJlZ2lvbkZvcihvYmplY3QpLT5tX2FsbG9jYXRvcjsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+Ojpi
dW1wQWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFs
aWdubWVudD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGln
bm1lbnQ+OjpidW1wQWxsb2NhdGUoKQogewotICAgIGlmICh1bnNpZ25lZCByZW1haW5pbmcgPSBt
X2J1bXBSZW1haW5pbmcpIHsKLSAgICAgICAgcmVtYWluaW5nLS07CisgICAgaWYgKHNpemVfdCBy
ZW1haW5pbmcgPSBtX2J1bXBSZW1haW5pbmcpIHsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxT
aXplKCk7CiAgICAgICAgIG1fYnVtcFJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0
dXJuIG1fYnVtcEVuZCAtIChyZW1haW5pbmcgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1fYnVtcEVu
ZCAtIChyZW1haW5pbmcgKyBjZWxsU2l6ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2Nh
dGUoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4K
K3ZvaWQqIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZUxpc3RBbGxvY2F0
ZSgpCiB7CiAgICAgdm9pZCoqIHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOwogICAgIGlmIChVTkxJ
S0VMWSghcmVzdWx0KSkKQEAgLTE5Miw4ICsyMDcsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmZy
ZWVMaXN0QWxsb2NhdGUoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQs
IGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0ZVNsb3coKQogewogICAgIEFTU0VSVCghbV9m
cmVlTGlzdEhlYWQpOwogICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTIxNiw4ICsy
MzEsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVl
UmVnaW9uc1N0YXJ0aW5nQXQodHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lk
IEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0
KHR5cGVuYW1lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdp
b24pCiB7CiAgICAgd2hpbGUgKHJlZ2lvbikgewogICAgICAgICBSZWdpb24qIG5leHRSZWdpb24g
PSByZWdpb24tPm1fbmV4dDsKQEAgLTIyNiwxMSArMjQxLDExIEBAIHZvaWQgQWxsb2NhdG9yPFQ+
OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIEFsbG9jYXRvcjxUPjo6c3RhcnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQ+
OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENl
bGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6c3Rh
cnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpS
ZWdpb24qIHJlZ2lvbikKIHsKLSAgICBtX2J1bXBFbmQgPSByZWdpb24tPmRhdGEoKSArIFJlZ2lv
bjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKLSAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdp
b246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5w
YXlsb2FkRW5kKCk7CisgICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpwYXlsb2FkU2l6ZSgp
OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MjY5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEyICs4Myw2IEBAIHN0
cnVjdCBOb2RlUG9pbnRlclRyYWl0cyB7CiAgICAgc3RhdGljIHZvaWQgZHVtcChOb2RlKiB2YWx1
ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiB9OwogCi1lbnVtIFVzZUtpbmQgewotICAgIFVudHlwZWRV
c2UsCi0gICAgRG91YmxlVXNlLAotICAgIExhc3RVc2VLaW5kIC8vIE11c3QgYWx3YXlzIGJlIHRo
ZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgbnVt
YmVyIG9mIGVudW0gZWxlbWVudHMuCi19OwotCiAvLyBVc2UgUmVmQ2hpbGRyZW4gaWYgdGhlIGNo
aWxkIHJlZiBjb3VudHMgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQgdXNpbmcKIC8vIG90
aGVyIG1lYW5zIGFuZCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgogLy8gLSBUaGUg
bm9kZSB5b3UncmUgY3JlYXRpbmcgaXMgTXVzdEdlbmVyYXRlLgpAQCAtMTA2LDE5ICsxMDAsNiBA
QCBlbnVtIFJlZk5vZGVNb2RlIHsKICAgICBEb250UmVmTm9kZQogfTsKIAotaW5saW5lIGNvbnN0
IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaW5kIHVzZUtpbmQpCi17Ci0gICAgc3dpdGNoICh1
c2VLaW5kKSB7Ci0gICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICByZXR1cm4gIiI7Ci0gICAg
Y2FzZSBEb3VibGVVc2U6Ci0gICAgICAgIHJldHVybiAiZCI7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotfQotCiBpbmxpbmUgYm9vbCBpc0FSTXY3cygpCiB7CiAjaWYgQ1BVKEFQUExFX0FSTVY3UykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAkocmV2aXNpb24gMTQyNjk1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZv
aWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCh1
c2VLaW5kVG9TdHJpbmcodXNlS2luZCgpKSwgbm9kZSgpKTsKKyAgICBvdXQucHJpbnQodXNlS2lu
ZCgpLCAiOiIsIG5vZGUoKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAxNDI2OTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisj
aW5jbHVkZSAiREZHVXNlS2luZC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
QWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVy
biAyOyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQogICAgIAog
ICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5k
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkocmV2aXNpb24gMTQyNjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhw
b2ludFN0YXRlID09IEJlZm9yZUZpeHBvaW50KTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9m
b3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Js
b2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1cEJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc2LDIzOSArNzksMTM5IEBA
IHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAg
ICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3Rh
dGUgPiBCZWZvcmVGaXhwb2ludCkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTZXRMb2NhbDogeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIWlzSW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maWxlID0gCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgQXJyYXlNb2Rl
IGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7Ci0g
ICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5jb2RlT3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gQXJyYXlN
b2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2UpOwotICAg
ICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5
UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRl
eEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0
dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBhcnJheU1v
ZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUt
PnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0
aCgpKQorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkKKyAgICAgICAgICAg
ICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudCh2YXJpYWJsZS0+bG9jYWwoKSkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJh
eUxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2Vu
ZXJhdGUpOwotICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKLSAg
ICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNv
ZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpLCBOdW1iZXJVc2UsIEZvcndhcmRT
cGVjdWxhdGlvbik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9y
YWdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9k
ZSgpLmNhbkNTRVN0b3JhZ2UoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
ZWRUeXBlID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlz
Qm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBub2RlLT5zZXRB
cnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAotICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLAotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAg
ICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgMik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5h
cnJheU1vZGUoKTsKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpE
b3VibGUKLSAgICAgICAgICAgICAgICAmJiBhcnJheU1vZGUuYXJyYXlDbGFzcygpID09IEFycmF5
OjpPcmlnaW5hbEFycmF5Ci0gICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9u
KCkgPT0gQXJyYXk6OkluQm91bmRzCi0gICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLmNvbnZl
cnNpb24oKSA9PSBBcnJheTo6QXNJcwotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcnJheVByb3RvdHlwZUNoYWluSXNTYW5lKCkK
LSAgICAgICAgICAgICAgICAmJiAhKG5vZGUtPmZsYWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQot
ICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0
aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0gICAgICAgIGNhc2UgU3Ry
aW5nQ2hhckNvZGVBdDogewotICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIGhhdmUgbm8gZ29v
ZCB3YXkgb2YgcmVmaW5pbmcgdGhlc2UuCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlN
b2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKLSAgICAgICAgICAgIGJsZXNzQXJy
YXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKKyAgICAgICAg
Y2FzZSBCaXRBbmQ6CisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgor
ICAgICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAg
IGNhc2UgQml0VVJTaGlmdDogeworICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheVB1c2g6
IHsKLSAgICAgICAgICAgIC8vIE1heSBuZWVkIHRvIHJlZmluZSB0aGUgYXJyYXkgbW9kZSBpbiBj
YXNlIHRoZSB2YWx1ZSBwcmVkaWN0aW9uIGNvbnRyYXZlbmVzCi0gICAgICAgICAgICAvLyB0aGUg
YXJyYXkgcHJlZGljdGlvbi4gRm9yIGV4YW1wbGUsIHdlIG1heSBoYXZlIGV2aWRlbmNlIHNob3dp
bmcgdGhhdCB0aGUKLSAgICAgICAgICAgIC8vIGFycmF5IGlzIGluIEludDMyIG1vZGUsIGJ1dCB0
aGUgdmFsdWUgd2UncmUgc3RvcmluZyBpcyBsaWtlbHkgdG8gYmUgYSBkb3VibGUuCi0gICAgICAg
ICAgICAvLyBUaGVuIHdlIHNob3VsZCB0dXJuIHRoaXMgaW50byBhIGNvbnZlcnNpb24gdG8gRG91
YmxlIGFycmF5IGZvbGxvd2VkIGJ5IHRoZQotICAgICAgICAgICAgLy8gcHVzaC4gT24gdGhlIG90
aGVyIGhhbmQsIHdlIGFic29sdXRlbHkgZG9uJ3Qgd2FudCB0byByZWZpbmUgYmFzZWQgb24gdGhl
Ci0gICAgICAgICAgICAvLyBiYXNlIHByZWRpY3Rpb24uIElmIGl0IGhhcyBub24tY2VsbCBnYXJi
YWdlIGluIGl0LCB0aGVuIHdlIHdhbnQgdGhhdCB0byBiZQotICAgICAgICAgICAgLy8gaWdub3Jl
ZC4gVGhhdCdzIGJlY2F1c2UgQXJyYXlQdXNoIGNhbid0IGhhbmRsZSBhbnkgYXJyYXkgbW9kZXMg
dGhhdCBhcmVuJ3QKLSAgICAgICAgICAgIC8vIGFycmF5LXJlbGF0ZWQgLSBzbyBpZiByZWZpbmUo
KSB0dXJuZWQgdGhpcyBpbnRvIGEgIkdlbmVyaWMiIEFycmF5UHVzaCB0aGVuCi0gICAgICAgICAg
ICAvLyB0aGF0IHdvdWxkIGJyZWFrIHRoaW5ncy4KLSAgICAgICAgICAgIG5vZGUtPnNldEFycmF5
TW9kZSgKLSAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQ2VsbCwKLSAg
ICAgICAgICAgICAgICAgICAgU3BlY0ludDMyLAotICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDIoKS0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIDIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CisgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheVBvcDogewot
ICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAx
KTsKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKQotICAgICAgICAgICAgICAgICYm
IG5vZGUtPm11c3RHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxh
Z3MoTm9kZU11c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAg
ICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0WG9yOgotICAgICAgICBjYXNlIEJpdFJT
aGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDog
ewotICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6
Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToK
LSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRl
ckVxOgotICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogewotICAgICAgICAgICAgaWYgKE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYg
KCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5v
ZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7
Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNs
ZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJl
Zihub2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiBu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgwKTsKLQotICAgICAgICAgICAgTm9kZSogbG9naWNhbE5vdCA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsTm90LT5vcCgpID09IExv
Z2ljYWxOb3QKLSAgICAgICAgICAgICAgICAmJiBsb2dpY2FsTm90LT5hZGp1c3RlZFJlZkNvdW50
KCkgPT0gMSkgewotICAgICAgICAgICAgICAgIEVkZ2UgbmV3Q2hpbGRFZGdlID0gbG9naWNhbE5v
dC0+Y2hpbGQxKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkRWRnZS0+aGFzQm9vbGVh
blJlc3VsdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5ld0NoaWxkRWRn
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobG9naWNhbE5vdCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0Jl
VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAg
QmxvY2tJbmRleCB0b0JlTm90VGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7Ci0gICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleCh0b0JlTm90VGFrZW4p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBJbnQzMlRv
RG91YmxlOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFNl
dExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlz
Q2FwdHVyZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwLCBGb3J3YXJkU3Bl
Y3VsYXRpb24pOworICAgICAgICBjYXNlIENoZWNrTnVtYmVyOiB7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKERvdWJsZVVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNh
c2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpCisgICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2lu
ZChJbnQzMlVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5v
ZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgZml4RG91
YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKQotICAgICAg
ICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGlm
IChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZTogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNaW46Ci0gICAgICAgIGNhc2UgQXJpdGhNYXg6
Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTXVsOiB7Ci0g
ICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQor
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkg
eworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9k
ZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIEFyaXRoRGl2OiB7CiAgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpCiAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkgfHwgaXNBUk12N3MoKSkKKyAgICAgICAgICAg
ICAgICBpZiAoaXNYODYoKSB8fCBpc0FSTXY3cygpKSB7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoMCk7Ci0gICAg
ICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoMSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShub2RlLT5jaGlsZDIo
KSk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIHJlZidpbmcgb24g
dGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9tCiAgICAgICAgICAg
ICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgpAQCAtMzE2LDI0ICsyMTksMTY4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsICpub2RlKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcChEb3VibGVBc0ludDMyKTsKLSAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKEVkZ2UobmV3RGl2aXNpb24sIERvdWJsZVVzZSksIEVk
Z2UoKSwgRWRnZSgpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5pbml0aWFsaXpl
KEVkZ2UobmV3RGl2aXNpb24sIE51bWJlclVzZSksIEVkZ2UoKSwgRWRnZSgpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAgZml4RG91Ymxl
RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcml0aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAgICAgY2Fz
ZSBBcml0aE1vZDogeworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRn
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxk
MigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcml0aEFiczogewogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAgICAgJiYgbm9k
ZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgwKTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIExvZ2lj
YWxOb3Q6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
Qm9vbGVhbigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9v
bGVhblVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFR5cGVPZjogeworICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKFN0cmluZ1VzZSk7CisgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29t
cGFyZUVxOgorICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgorICAgICAgICBjYXNlIENv
bXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgIGNhc2UgQ29t
cGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcTogeworICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tYXByZUVxQ29uc3RhbnQpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7
CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDb21w
YXJlRXEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRT
cGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQy
KCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIo
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNl
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3Ro
ZXJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkgJiYg
bm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlU3RyaWN0RXFDb25zdGFudCkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNw
ZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIo
KS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0
cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CisgICAgICAgICAg
ICAvLyBDdXJyZW50bHkgd2UgaGF2ZSBubyBnb29kIHdheSBvZiByZWZpbmluZyB0aGVzZS4KKyAg
ICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0
cmluZykpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwg
bm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1v
ZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBT
cGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBibGVz
c0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0g
bm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBB
cnJheTo6RG91YmxlCisgICAgICAgICAgICAgICAgJiYgYXJyYXlNb2RlLmFycmF5Q2xhc3MoKSA9
PSBBcnJheTo6T3JpZ2luYWxBcnJheQorICAgICAgICAgICAgICAgICYmIGFycmF5TW9kZS5zcGVj
dWxhdGlvbigpID09IEFycmF5OjpJbkJvdW5kcworICAgICAgICAgICAgICAgICYmIGFycmF5TW9k
ZS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkFzSXMKKyAgICAgICAgICAgICAgICAmJiBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlQcm90b3R5cGVDaGFpbklz
U2FuZSgpCisgICAgICAgICAgICAgICAgJiYgIShub2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090
aGVyKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhT
cGVjdWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5w
cm9maWxlZDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgY2FzZSBB
cnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsK
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzQ5LDExICszOTYsMjEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCiAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+cHJlZGljdGlvbigpKSk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIDMpOworICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAzKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVu
cHJvZmlsZWQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCksIFJlYWxOdW1iZXJVc2UpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgogICAg
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKQEAgLTM2MiwxOSArNDE5LDEyNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CiAgICAg
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMygpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDMo
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdl
KG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNl
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAg
ICAgICAgICAgIC8vIE1heSBuZWVkIHRvIHJlZmluZSB0aGUgYXJyYXkgbW9kZSBpbiBjYXNlIHRo
ZSB2YWx1ZSBwcmVkaWN0aW9uIGNvbnRyYXZlbmVzCisgICAgICAgICAgICAvLyB0aGUgYXJyYXkg
cHJlZGljdGlvbi4gRm9yIGV4YW1wbGUsIHdlIG1heSBoYXZlIGV2aWRlbmNlIHNob3dpbmcgdGhh
dCB0aGUKKyAgICAgICAgICAgIC8vIGFycmF5IGlzIGluIEludDMyIG1vZGUsIGJ1dCB0aGUgdmFs
dWUgd2UncmUgc3RvcmluZyBpcyBsaWtlbHkgdG8gYmUgYSBkb3VibGUuCisgICAgICAgICAgICAv
LyBUaGVuIHdlIHNob3VsZCB0dXJuIHRoaXMgaW50byBhIGNvbnZlcnNpb24gdG8gRG91YmxlIGFy
cmF5IGZvbGxvd2VkIGJ5IHRoZQorICAgICAgICAgICAgLy8gcHVzaC4gT24gdGhlIG90aGVyIGhh
bmQsIHdlIGFic29sdXRlbHkgZG9uJ3Qgd2FudCB0byByZWZpbmUgYmFzZWQgb24gdGhlCisgICAg
ICAgICAgICAvLyBiYXNlIHByZWRpY3Rpb24uIElmIGl0IGhhcyBub24tY2VsbCBnYXJiYWdlIGlu
IGl0LCB0aGVuIHdlIHdhbnQgdGhhdCB0byBiZQorICAgICAgICAgICAgLy8gaWdub3JlZC4gVGhh
dCdzIGJlY2F1c2UgQXJyYXlQdXNoIGNhbid0IGhhbmRsZSBhbnkgYXJyYXkgbW9kZXMgdGhhdCBh
cmVuJ3QKKyAgICAgICAgICAgIC8vIGFycmF5LXJlbGF0ZWQgLSBzbyBpZiByZWZpbmUoKSB0dXJu
ZWQgdGhpcyBpbnRvIGEgIkdlbmVyaWMiIEFycmF5UHVzaCB0aGVuCisgICAgICAgICAgICAvLyB0
aGF0IHdvdWxkIGJyZWFrIHRoaW5ncy4KKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgK
KyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQ2VsbCwKKyAgICAgICAg
ICAgICAgICAgICAgU3BlY0ludDMyLAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIo
KS0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUt
PmNoaWxkMSgpLCBFZGdlKCksIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlJZDogeworICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghaXNJbnQz
MlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmll
ck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUg
PSAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKKyAgICAgICAgICAg
IGlmIChhcnJheVByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21P
YnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5o
YXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5
TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlv
bigpKTsKKyAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0
aCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUp
OworICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNs
b2JiZXJzV29ybGQpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAg
ICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmln
aW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkgPSBF
ZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+
YXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBBcnJheVBvcDogeworICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQnJhbmNo
OiB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCkpCisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSkp
OworCisgICAgICAgICAgICBOb2RlKiBsb2dpY2FsTm90ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OworICAgICAgICAgICAgaWYgKGxvZ2ljYWxOb3QtPm9wKCkgPT0gTG9naWNhbE5vdAorICAgICAg
ICAgICAgICAgICYmIGxvZ2ljYWxOb3QtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKSB7CisgICAg
ICAgICAgICAgICAgRWRnZSBuZXdDaGlsZEVkZ2UgPSBsb2dpY2FsTm90LT5jaGlsZDEoKTsKKyAg
ICAgICAgICAgICAgICBpZiAobmV3Q2hpbGRFZGdlLT5oYXNCb29sZWFuUmVzdWx0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3Q2hpbGRFZGdlKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5kZXJlZihsb2dpY2FsTm90KTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKG5ld0NoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVUYWtlbiA9IG5vZGUtPm5v
dFRha2VuQmxvY2tJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVO
b3RUYWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRUYWtlbkJsb2NrSW5kZXgodG9CZVRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0Tm90VGFrZW5CbG9ja0luZGV4KHRvQmVOb3RUYWtlbik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIE5ld0FycmF5OiB7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07KSB7CiAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBlKApAQCAtMzgzLDcgKzU0Niw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobm9kZS0+aW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoRG91YmxlKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykKLSAgICAgICAgICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShpKTsKKyAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC00NTcsNyArNjIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJs
ZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdl
Q2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBp
bmRleCwgRWRnZSYgc3RvcmFnZUNoaWxkKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGgubV9m
aXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00
ODUsNyArNjQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguY2hp
bGQobm9kZSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgICAgICBz
dG9yYWdlQ2hpbGQgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9IH0KICAgICB9CkBAIC00OTMsNDAgKzY1Niw0NCBAQCBwcml2YXRlOgogICAgIHZvaWQgZml4
SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGVkZ2Uubm9k
ZSgpOwotICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9JbnQz
MikgeworICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRn
ZTsKICAgICAgICAgRWRnZSBuZXdFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAorICAg
ICAgICBpZiAobmV3RWRnZS51c2VLaW5kKCkgIT0gSW50MzJLaW5kKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSk7CisgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAg
ICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKICAgICAgICAgCiAgICAgICAgIGVkZ2UgPSBuZXdF
ZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpeERvdWJsZUVkZ2UodW5zaWduZWQgY2hpbGRJ
bmRleCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlv
bikKKyAgICB2b2lkIGZpeERvdWJsZUVkZ2UoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0g
TnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1
bGF0aW9uKQogICAgIHsKICAgICAgICAgTm9kZSogc291cmNlID0gbV9jdXJyZW50Tm9kZTsKLSAg
ICAgICAgRWRnZSYgZWRnZSA9IG1fZ3JhcGguY2hpbGQoc291cmNlLCBjaGlsZEluZGV4KTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChlZGdlLT5wcmVkaWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0g
ICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgICAgIGVkZ2Uu
c2V0VXNlS2luZCh1c2VLaW5kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoY2hpbGRJbmRleCwgZGlyZWN0
aW9uKTsKKyAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoZWRnZSwgZGlyZWN0aW9uKTsK
ICAgICB9CiAKLSAgICB2b2lkIGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxk
SW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRp
b24pCisgICAgdm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5k
IHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJh
Y2t3YXJkU3BlY3VsYXRpb24pCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZD
aGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwKICAgICAgICAgICAgIGRpcmVjdGlvbiA9PSBC
YWNrd2FyZFNwZWN1bGF0aW9uID8gSW50MzJUb0RvdWJsZSA6IEZvcndhcmRJbnQzMlRvRG91Ymxl
LAotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgbV9ncmFwaC5jaGlsZCht
X2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS5ub2RlKCkpOworICAgICAgICAgICAgbV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwgRG91YmxlVXNlKSk7CisgICAgICAg
IHJlc3VsdC0+Y2hpbGQxKCkuc2V0VXNlS2luZChEb3VibGVVc2UpOwogICAgICAgICAKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKApA
QCAtNTM0LDcgKzcwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5p
bmRleCgpLCBtX2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNoaWxkSW5kZXgpLT5pbmRleCgp
LCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCByZXN1bHQtPmluZGV4KCkpOwogI2VuZGlmCiAKLSAg
ICAgICAgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVz
dWx0LCBEb3VibGVVc2UpOworICAgICAgICBtX2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNo
aWxkSW5kZXgpID0gRWRnZShyZXN1bHQsIHVzZUtpbmQpOwogICAgIH0KIAogICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTQyNjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw0NSArMzQ2LDE0IEBAIHZvaWQgR3JhcGg6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkKICAgICB9CiB9CiAKLS8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8g
YmUgaXRlcmF0aXZlLCBub3QgcmVjdXJzaXZlLgotI2RlZmluZSBET19UT19DSElMRFJFTihub2Rl
LCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBO
b2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBfY2hp
bGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4o
KTsgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hp
bGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAg
XAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFf
bm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAhX25vZGUtPmNoaWxkMigpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAm
JiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9u
b2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCghX25v
ZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5j
aGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhp
bmdUb0RvKF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCiB2b2lkIEdyYXBoOjpy
ZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKLSAgICBET19UT19DSElMRFJFTihvcCwgcmVmKTsKKyAg
ICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIHJlZik7CiB9CiAKIHZvaWQgR3Jh
cGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCiB7Ci0gICAgRE9fVE9fQ0hJTERSRU4ob3AsIGRl
cmVmKTsKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIGRlcmVmKTsKIH0K
IAogdm9pZCBHcmFwaDo6ZGV0aHJlYWQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkocmV2aXNpb24gMTQyNjk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBQdXRUb0Jh
c2VPcGVyYXRpb25EYXRhIHsKIAogZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogICAgIERvbnRT
cGVjdWxhdGVJbnRlZ2VyLAotICAgIFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJm
bG93LAorICAgIFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cywKICAgICBTcGVj
dWxhdGVJbnRlZ2VyCiB9OwogCkBAIC0xNzQsOSArMTc0LDkgQEAgcHVibGljOgogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHgg
PCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQog
ICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwg
c2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uo
bm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBl
cmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRH
ZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5j
aGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlv
bkZvckVkZ2Uobm9kZS0+Y2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBl
cmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC03ODEsNyArNzgxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0
ZSA+IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7
CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFy
aXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cg
OiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUlu
dGVnZXIoYWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0
ZUNvbnN0YW50cyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKICAgICBib29s
IG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJp
YWJsZSwgTm9kZSogaW1tZWRpYXRlKQpAQCAtODMwLDYgKzgzMCwzNiBAQCBpbmxpbmUgQmxvY2tJ
bmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5CiAgICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8Qmxv
Y2tJbmRleCwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXplKCks
IGJ5dGVjb2RlQmVnaW4sIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOwogfQogCisj
ZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8pIGRv
IHsgICAgICAgICAgICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfbm9kZS0+Zmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0Q2hp
bGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4
KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgaWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbygoZ3JhcGgpLm1fdmFyQXJn
Q2hpbGRyZW5bX2NoaWxkSWR4XSk7ICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0g
ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9u
b2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5j
aGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMygpKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGls
ZSAoZmFsc2UpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQyNjk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1
LDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAg
ICB7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKLSAgICAgICAgQVNTRVJUKCEh
KG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykgPT0gKGNoaWxkcmVuLmtpbmQoKSA9PSBBZGphY2Vu
Y3lMaXN0OjpWYXJpYWJsZSkpOwogICAgIH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2Rl
IHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgpAQCAtOTk1LDcgKzk5
NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQtLTsKICAgICB9
CiAgICAgCi0gICAgRWRnZSBjaGlsZDEoKQorICAgIEVkZ2UmIGNoaWxkMSgpCiAgICAgewogICAg
ICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJu
IGNoaWxkcmVuLmNoaWxkMSgpOwpAQCAtMTAwOSwxMyArMTAwOCwxMyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDFVbmNoZWNrZWQoKTsKICAgICB9CiAKLSAg
ICBFZGdlIGNoaWxkMigpCisgICAgRWRnZSYgY2hpbGQyKCkKICAgICB7CiAgICAgICAgIEFTU0VS
VCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4u
Y2hpbGQyKCk7CiAgICAgfQogCi0gICAgRWRnZSBjaGlsZDMoKQorICAgIEVkZ2UmIGNoaWxkMygp
CiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAg
ICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0MjY5NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXR5
cGVkZWYgQWxsb2NhdG9yPE5vZGU+IE5vZGVBbGxvY2F0b3I7CisjaWYgVVNFKEpTVkFMVUU2NCkK
K3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDExMj4gTm9kZUFsbG9jYXRvcjsKKyNlbHNlCit0eXBl
ZGVmIEFsbG9jYXRvcjxOb2RlLCA4MD4gTm9kZUFsbG9jYXRvcjsKKyNlbmRpZgogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNl
S2luZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VL
aW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1VzZUtpbmRfaAorI2RlZmlu
ZSBERkdVc2VLaW5kX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0g
VXNlS2luZCB7CisgICAgVW50eXBlZFVzZSwKKyAgICBJbnQzMlVzZSwKKyAgICBSZWFsTnVtYmVy
VXNlLAorICAgIE51bWJlclVzZSwKKyAgICBCb29sZWFuVXNlLAorICAgIENlbGxVc2UsCisgICAg
T2JqZWN0VXNlLAorICAgIE9iamVjdE9yT3RoZXJVc2UsCisgICAgU3RyaW5nVXNlLAorICAgIE90
aGVyVXNlLAorICAgIExhc3RVc2VLaW5kIC8vIE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5
IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0g
ZWxlbWVudHMuCit9OworCitBTFdBWVNfSU5MSU5FIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJG
b3IoVXNlS2luZCB1c2VLaW5kKQoreworICAgIHN3aXRjaCAodXNlS2luZCkgeworICAgIGNhc2Ug
VW50eXBlZFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNUb3A7CisgICAgY2FzZSBJbnQzMlVzZToK
KyAgICAgICAgcmV0dXJuIFNwZWNJbnQzMjsKKyAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAg
ICAgIHJldHVybiBTcGVjUmVhbE51bWJlcjsKKyAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAg
cmV0dXJuIFNwZWNOdW1iZXI7CisgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICByZXR1cm4g
U3BlY0Jvb2xlYW47CisgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICByZXR1cm4gU3BlY0NlbGw7
CisgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAgIHJldHVybiBTcGVjT2JqZWN0OworICAgIGNh
c2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNPYmplY3QgfCBTcGVjT3Ro
ZXI7CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIHJldHVybiBTcGVjU3RyaW5nOworICAg
IGNhc2UgT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT3RoZXI7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNw
ZWNUb3A7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFj
ZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6VXNl
S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdVc2VLaW5kX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188699</attachid>
            <date>2013-02-16 01:01:54 -0800</date>
            <delta_ts>2013-02-17 01:40:56 -0800</delta_ts>
            <desc>fixup phase is done, I think</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58502</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcgKzI0NSwxMSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAg
IAorICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgIAorICAgIERGR19OT0RFX0RPX1RP
X0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGZpbHRlckVkZ2VCeVVzZSk7CisgICAgCiAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pT
Q29uc3RhbnQ6CkBAIC00NjgsNiArNDcyLDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IHRoaXMgaXMgdG90YWxseSB3cm9uZy4gaXQgbWlnaHQgZmlsdGVyIHRoZSBkb3Vi
bGUgaW1tZWRpYXRlCisgICAgICAgICAgICAvLyB0byBoYXZlIGFuIGVtcHR5IHZhbHVlLiA6LS8K
ICAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAogICAgICAgICAgICAgICAgIG5vZGUs
ICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQzMDMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1OSw2ICsyNTksMTkgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmaWx0ZXJCeVR5cGUoTm9kZSogbm9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAgaWYgKHZhbHVlLm1fdHlwZSAmIH50eXBlKQor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgdmFsdWUuZmlsdGVy
KHR5cGUpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVyRWRnZUJ5
VXNlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGZpbHRlckJ5VHlwZShlZGdlLm5vZGUoKSwg
dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpOworICAgIH0KKyAgICAKICAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzAz
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAg
IAogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2Fz
ZSBvZiBtX3R5cGUgbm90CisgICAgICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rl
cywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlcygpOwogICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJy
YXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJl
LmZpbHRlcihvdGhlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFj
ZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAg
cHVibGljOgogICAgIEFkamFjZW5jeUxpc3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0
KEtpbmQga2luZCkKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQp
Ci0jZW5kaWYKICAgICB7CiAgICAgICAgIGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAg
ICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU4LDE4ICs1NSwx
MiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBO
b2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxkMiwgTm9kZSogY2hpbGQzKQotI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICAgICAgOiBtX2tpbmQoRml4ZWQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBGaXhlZCk7CiAgICAgICAgIGluaXRpYWxpemUoY2hp
bGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2lu
ZCBraW5kLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKFZhcmlhYmxlKQotI2VuZGlmCiAgICAg
ewogICAgICAgICBBU1NFUlRfVU5VU0VEKGtpbmQsIGtpbmQgPT0gVmFyaWFibGUpOwogICAgICAg
ICBzZXRGaXJzdENoaWxkKGZpcnN0Q2hpbGQpOwpAQCAtNzksMjEgKzcwLDE4IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBFZGdlJiBjaGlsZCh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKGkgPCBTaXplKTsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAg
ICAgIHJldHVybiBtX3dvcmRzW2ldOwogICAgIH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQo
dW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFT
U0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBzZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAg
ewogICAgICAgICBBU1NFUlQoaSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZp
eGVkKTsKICAgICAgICAgbV93b3Jkc1tpXSA9IG5vZGVVc2U7CiAgICAgfQogICAgIApAQCAtMTI1
LDkgKzExMyw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0jaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBtX2tpbmQgPSBGaXhlZDsKLSNlbmRpZgogICAgICAg
ICBpbml0aWFsaXplKCk7CiAgICAgfQogICAgIApAQCAtMTQyLDM0ICsxMjcsMjQgQEAgcHVibGlj
OgogCiAgICAgdW5zaWduZWQgZmlyc3RDaGlsZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NF
UlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNv
ZGVkV29yZDsKICAgICB9CiAgICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hp
bGQpCiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAg
bV93b3Jkc1swXS5tX2VuY29kZWRXb3JkID0gZmlyc3RDaGlsZDsKICAgICB9CiAgICAgCiAgICAg
dW5zaWduZWQgbnVtQ2hpbGRyZW4oKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2lu
ZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7
CiAgICAgfQogICAgIHZvaWQgc2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAg
ICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jk
c1sxXS5tX2VuY29kZWRXb3JkID0gbnVtQ2hpbGRyZW47CiAgICAgfQogICAgIAotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSNl
bmRpZgogcHJpdmF0ZToKICAgICBFZGdlIG1fd29yZHNbU2l6ZV07Ci0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIEtpbmQgbV9raW5kOwotI2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIC8vICAgYW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBp
bnN0ZWFkLgogLy8gLSBZb3UgY2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0
ZWQsIGFuZCBuZXZlciB1c2UgZnJlZUFsbCgpLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8g
Zm9yY2VkQ2VsbFNpemU6IHNldCB0aGlzIHRvIDAgaWYgeW91J3JlIGhhcHB5IHdpdGggdGhlIGRl
ZmF1bHQgYWxpZ25tZW50LCBvciBzZXQgaXQKKy8vIHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91
IHdhbnQgdG8gZm9yY2libHkgYWxpZ24gdGhlIGFsbG9jYXRpb25zIHRvIGEgY2VydGFpbgorLy8g
dmFsdWUuIFdoZW4geW91IGRvIHRoaXMsIEFsbG9jYXRvciB3aWxsIEFTU0VSVCB0aGF0IGZvcmNl
ZENlbGxBbGlnbm1lbnQgPj0gc2l6ZW9mKFQpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNp
Z25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgogY2xhc3MgQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAg
ICBBbGxvY2F0b3IoKTsKQEAgLTYzLDEzICs2NywyNCBAQCBwcml2YXRlOgogICAgIHZvaWQqIGJ1
bXBBbGxvY2F0ZSgpOwogICAgIHZvaWQqIGZyZWVMaXN0QWxsb2NhdGUoKTsKICAgICB2b2lkKiBh
bGxvY2F0ZVNsb3coKTsKLQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoKQorICAg
IHsKKyAgICAgICAgaWYgKCFmb3JjZWRDZWxsQWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJu
IHNpemVvZihUKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChmb3JjZWRDZWxsQWxpZ25tZW50
ID49IHNpemVvZihUKSk7CisgICAgICAgIHJldHVybiBmb3JjZWRDZWxsQWxpZ25tZW50OworICAg
IH0KKyAgICAKICAgICBzdHJ1Y3QgUmVnaW9uIHsKICAgICAgICAgc3RhdGljIHNpemVfdCBzaXpl
KCkgeyByZXR1cm4gNjQgKiBLQjsgfQotICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUo
KSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQotICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6
ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQotICAgICAgICBUKiBkYXRhKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVy
U2l6ZSgpKTsgfQotICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJl
ck9mVGhpbmdzUGVyUmVnaW9uKCk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXpl
KCkgeyByZXR1cm4gc3RkOjptYXgoc2l6ZW9mKFJlZ2lvbiksIGNlbGxTaXplKCkpOyB9CisgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChz
aXplKCkgLSBoZWFkZXJTaXplKCkpIC8gY2VsbFNpemUoKTsgfQorICAgICAgICBzdGF0aWMgc2l6
ZV90IHBheWxvYWRTaXplKCkgeyByZXR1cm4gbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSAqIGNl
bGxTaXplKCk7IH0KKyAgICAgICAgY2hhciogcGF5bG9hZEJlZ2luKCkgeyByZXR1cm4gYml0d2lz
ZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRlclNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXls
b2FkRW5kKCkgeyByZXR1cm4gcGF5bG9hZEJlZ2luKCkgKyBwYXlsb2FkU2l6ZSgpOyB9CisgICAg
ICAgIGJvb2wgaXNJblRoaXNSZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpIC0gcGF5bG9hZEJlZ2lu
KCkpIDwgcGF5bG9hZFNpemUoKTsgfQogICAgICAgICBzdGF0aWMgUmVnaW9uKiByZWdpb25Gb3Io
Y29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KICAgICAgICAgCiAg
ICAgICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CkBAIC04MiwyNiArOTcs
MjYgQEAgcHJpdmF0ZToKICAgICAKICAgICBSZWdpb24qIG1fcmVnaW9uSGVhZDsKICAgICB2b2lk
KiogbV9mcmVlTGlzdEhlYWQ7Ci0gICAgVCogbV9idW1wRW5kOwotICAgIHVuc2lnbmVkIG1fYnVt
cFJlbWFpbmluZzsKKyAgICBjaGFyKiBtX2J1bXBFbmQ7CisgICAgc2l6ZV90IG1fYnVtcFJlbWFp
bmluZzsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+OjpB
bGxvY2F0b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OkFsbG9jYXRv
cigpCiAgICAgOiBtX3JlZ2lvbkhlYWQoMCkKICAgICAsIG1fZnJlZUxpc3RIZWFkKDApCiAgICAg
LCBtX2J1bXBSZW1haW5pbmcoMCkKIHsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGlu
ZSBBbGxvY2F0b3I8VD46On5BbGxvY2F0b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFs
aWdubWVudD46On5BbGxvY2F0b3IoKQogewogICAgIHJlc2V0KCk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoKQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZ
U19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0
ZSgpCiB7CiAgICAgdm9pZCogcmVzdWx0ID0gYnVtcEFsbG9jYXRlKCk7CiAgICAgaWYgKExJS0VM
WSghIXJlc3VsdCkpCkBAIC0xMDksOCArMTI0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxv
Y2F0b3I8VD46OmFsbG9jYQogICAgIHJldHVybiBmcmVlTGlzdEFsbG9jYXRlKCk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBB
bGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWUoVCogb2JqZWN0KQogewogICAg
IG9iamVjdC0+flQoKTsKICAgICAKQEAgLTExOSw4ICsxMzQsOCBAQCB2b2lkIEFsbG9jYXRvcjxU
Pjo6ZnJlZShUKiBvYmplY3QpCiAgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9y
PFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlQWxsKCkKIHsKICAgICBpZiAoIW1fcmVnaW9u
SGVhZCkgewogICAgICAgICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CkBAIC0xNDIsOCArMTU3
LDggQEAgdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQogICAgIHN0YXJ0QnVtcGluZ0luKG1f
cmVnaW9uSGVhZCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxU
Pjo6cmVzZXQoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpyZXNldCgpCiB7
CiAgICAgZnJlZVJlZ2lvbnNTdGFydGluZ0F0KG1fcmVnaW9uSGVhZCk7CiAgICAgCkBAIC0xNTIs
MzggKzE2NywzOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQoKQogICAgIG1fYnVtcFJlbWFp
bmluZyA9IDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci11bnNpZ25lZCBBbGxvY2F0b3I8
VD46OmluZGV4T2YoY29uc3QgVCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxs
QWxpZ25tZW50Pjo6aW5kZXhPZihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgdW5zaWduZWQgYmFz
ZUluZGV4ID0gMDsKICAgICBmb3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdp
b247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0KSB7CiAgICAgICAgIGlmIChyZWdpb24tPmlzSW5U
aGlzUmVnaW9uKG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKG9iamVj
dCAtIHJlZ2lvbi0+ZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAoYml0
d2lzZV9jYXN0PGNoYXIqPihvYmplY3QpIC0gcmVnaW9uLT5wYXlsb2FkQmVnaW4oKSkgLyBjZWxs
U2l6ZSgpOwogICAgICAgICBiYXNlSW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJl
Z2lvbigpOwogICAgIH0KICAgICBDUkFTSCgpOwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotQWxsb2NhdG9yPFQ+KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKGNv
bnN0IFQqIG9iamVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxB
bGlnbm1lbnQ+CitBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD4qIEFsbG9jYXRvcjxU
LCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQogewog
ICAgIHJldHVybiBSZWdpb246OnJlZ2lvbkZvcihvYmplY3QpLT5tX2FsbG9jYXRvcjsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+Ojpi
dW1wQWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFs
aWdubWVudD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGln
bm1lbnQ+OjpidW1wQWxsb2NhdGUoKQogewotICAgIGlmICh1bnNpZ25lZCByZW1haW5pbmcgPSBt
X2J1bXBSZW1haW5pbmcpIHsKLSAgICAgICAgcmVtYWluaW5nLS07CisgICAgaWYgKHNpemVfdCBy
ZW1haW5pbmcgPSBtX2J1bXBSZW1haW5pbmcpIHsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxT
aXplKCk7CiAgICAgICAgIG1fYnVtcFJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0
dXJuIG1fYnVtcEVuZCAtIChyZW1haW5pbmcgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1fYnVtcEVu
ZCAtIChyZW1haW5pbmcgKyBjZWxsU2l6ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2Nh
dGUoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4K
K3ZvaWQqIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZUxpc3RBbGxvY2F0
ZSgpCiB7CiAgICAgdm9pZCoqIHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOwogICAgIGlmIChVTkxJ
S0VMWSghcmVzdWx0KSkKQEAgLTE5Miw4ICsyMDcsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmZy
ZWVMaXN0QWxsb2NhdGUoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci12b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQs
IGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0ZVNsb3coKQogewogICAgIEFTU0VSVCghbV9m
cmVlTGlzdEhlYWQpOwogICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTIxNiw4ICsy
MzEsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVl
UmVnaW9uc1N0YXJ0aW5nQXQodHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lk
IEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0
KHR5cGVuYW1lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdp
b24pCiB7CiAgICAgd2hpbGUgKHJlZ2lvbikgewogICAgICAgICBSZWdpb24qIG5leHRSZWdpb24g
PSByZWdpb24tPm1fbmV4dDsKQEAgLTIyNiwxMSArMjQxLDExIEBAIHZvaWQgQWxsb2NhdG9yPFQ+
OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIEFsbG9jYXRvcjxUPjo6c3RhcnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQ+
OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENl
bGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6c3Rh
cnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpS
ZWdpb24qIHJlZ2lvbikKIHsKLSAgICBtX2J1bXBFbmQgPSByZWdpb24tPmRhdGEoKSArIFJlZ2lv
bjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKLSAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdp
b246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5w
YXlsb2FkRW5kKCk7CisgICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpwYXlsb2FkU2l6ZSgp
OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEyICs4Myw2IEBAIHN0
cnVjdCBOb2RlUG9pbnRlclRyYWl0cyB7CiAgICAgc3RhdGljIHZvaWQgZHVtcChOb2RlKiB2YWx1
ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiB9OwogCi1lbnVtIFVzZUtpbmQgewotICAgIFVudHlwZWRV
c2UsCi0gICAgRG91YmxlVXNlLAotICAgIExhc3RVc2VLaW5kIC8vIE11c3QgYWx3YXlzIGJlIHRo
ZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgbnVt
YmVyIG9mIGVudW0gZWxlbWVudHMuCi19OwotCiAvLyBVc2UgUmVmQ2hpbGRyZW4gaWYgdGhlIGNo
aWxkIHJlZiBjb3VudHMgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQgdXNpbmcKIC8vIG90
aGVyIG1lYW5zIGFuZCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgogLy8gLSBUaGUg
bm9kZSB5b3UncmUgY3JlYXRpbmcgaXMgTXVzdEdlbmVyYXRlLgpAQCAtMTA2LDE5ICsxMDAsNiBA
QCBlbnVtIFJlZk5vZGVNb2RlIHsKICAgICBEb250UmVmTm9kZQogfTsKIAotaW5saW5lIGNvbnN0
IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaW5kIHVzZUtpbmQpCi17Ci0gICAgc3dpdGNoICh1
c2VLaW5kKSB7Ci0gICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICByZXR1cm4gIiI7Ci0gICAg
Y2FzZSBEb3VibGVVc2U6Ci0gICAgICAgIHJldHVybiAiZCI7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotfQotCiBpbmxpbmUgYm9vbCBpc0FSTXY3cygpCiB7CiAjaWYgQ1BVKEFQUExFX0FSTVY3UykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAkocmV2aXNpb24gMTQzMDMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZv
aWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCh1
c2VLaW5kVG9TdHJpbmcodXNlS2luZCgpKSwgbm9kZSgpKTsKKyAgICBvdXQucHJpbnQodXNlS2lu
ZCgpLCAiOiIsIG5vZGUoKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisj
aW5jbHVkZSAiREZHVXNlS2luZC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
QWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVy
biAyOyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQogICAgIAog
ICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5k
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhw
b2ludFN0YXRlID09IEJlZm9yZUZpeHBvaW50KTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9m
b3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Js
b2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1cEJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc2LDUwICs3OSwyNzUgQEAg
cHJpdmF0ZToKICNlbmRpZgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAg
ICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0
ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgp
CisgICAgICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQodmFyaWFi
bGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQorICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgeworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCksIE51bWJlclVzZSwgRm9yd2Fy
ZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChj
b2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2Jh
bERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSB2YXJpYWJsZS0+
YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlv
bihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKENlbGxVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24o
cHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNh
c2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRMU2hp
ZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDogeworICAgICAgICAgICAgZml4SW50RWRnZShu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBVSW50MzJUb051bWJlcjogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChJbnQzMlVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjogeworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG5vZGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgICAg
ICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRp
Y3Rpb25zKTsKLSAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgICAg
ICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKLSAgICAgICAgICAgICAgICBhcnJheU1v
ZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJl
ZGljdGlvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3Ro
KCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwg
Q2hlY2tTdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2lu
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0
cnVjdHVyZSgpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChEb3VibGVVc2UpOworICAgICAgICAgICAgICAgIG5vZGUt
PmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5k
ZXJlZihub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVC
b29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJv
b2xlYW5Vc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5l
cmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOiB7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENoZWNrTnVtYmVyOiB7CisgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKERvdWJsZVVzZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkp
IHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsK
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
aXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAgICBpZiAobV9ncmFw
aC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTmVnYXRl
OiB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQz
MlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aERpdjog
eworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1l
dGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAg
ICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChpc1g4NigpIHx8IGlzQVJNdjdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5z
dXBwb3J0c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9k
ZShub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRv
IGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBm
cm9tCisgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgorICAgICAgICAg
ICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9k
ZSwgU3BlY0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgTnVtYmVyVXNlKSwgRWRnZSgpLCBFZGdl
KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0
QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVz
dEdlbmVyYXRlKTsKLSAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7
Ci0gICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tB
cnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
MCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAg
ICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgY2FzZSBBcml0aE1pbjoKKyAgICAgICAgY2FzZSBB
cml0aE1heDoKKyAgICAgICAgY2FzZSBBcml0aE1vZDogeworICAgICAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtp
bmQoSW50MzJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRn
ZShzdG9yYWdlKTsKKyAgICAgICAgY2FzZSBBcml0aEFiczogeworICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAg
ICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFy
cmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBB
cml0aFNxcnQ6IHsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFR5cGVPZjog
eworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKFN0cmluZ1VzZSk7
CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2Vs
bCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQ29tcGFyZUVxOgorICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgorICAgICAgICBj
YXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcTogeworICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tYXByZUVxQ29uc3RhbnQpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAh
PSBDb21wYXJlRXEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+
Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9y
T3RoZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2Jq
ZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVj
dE9yT3RoZXJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVy
KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlU3RyaWN0RXFDb25zdGFudCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkg
eworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CisgICAg
ICAgICAgICAvLyBDdXJyZW50bHkgd2UgaGF2ZSBubyBnb29kIHdheSBvZiByZWZpbmluZyB0aGVz
ZS4KKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJy
YXk6OlN0cmluZykpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGls
ZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KKwogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICBub2RlLT5zZXRB
cnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKApAQCAt
MTI3LDcgKzM1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIFNwZWNOb25lLCBub2RlLT5m
bGFncygpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJy
YXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDMo
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2Rl
LT5hcnJheU1vZGUoKTsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5
OjpEb3VibGUKQEAgLTEzOCwxMyArMzY2LDc1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
JiYgIShub2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090aGVyKSkKICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhTcGVjdWxhdGlvbihBcnJheTo6U2FuZUNo
YWluKSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJh
eTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVB
dDogewotICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIGhhdmUgbm8gZ29vZCB3YXkgb2YgcmVm
aW5pbmcgdGhlc2UuCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJy
YXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAg
ICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAg
ICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAgICAgICAg
ICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKworICAgICAg
ICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9k
ZSgpLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCisg
ICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAg
ICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBi
bGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDMpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1v
ZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpTZWxl
Y3RVc2luZ1ByZWRpY3Rpb25zOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6R2Vu
ZXJpYzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2Up
OworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCksIFJlYWxOdW1iZXJV
c2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQzMkFycmF5OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2Vs
bFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDMoKS5zZXRVc2VLaW5kKEludDMyVXNl
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2Uobm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgorICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIApAQCAtMTYzLDExICs0NTMsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNDZWxsLAogICAgICAgICAgICAg
ICAgICAgICBTcGVjSW50MzIsCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5w
cmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hp
bGQxKCksIEVkZ2UoKSwgMik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUt
PmNoaWxkMSgpLCBFZGdlKCksIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtp
bmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAg
ICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTc2LDU4ICs0NjksMjYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9k
ZS0+Y2hpbGQxKCksIEVkZ2UoKSwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpCi0gICAgICAgICAgICAg
ICAgJiYgbm9kZS0+bXVzdEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5jbGVh
ckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYo
bm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgQml0QW5kOgotICAgICAgICBjYXNlIEJpdE9yOgotICAg
ICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAgICAgIGNhc2Ug
Qml0TFNoaWZ0OgotICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAgIGZpeElu
dEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkpOwotICAgICAgICAgICAgZml4SW50RWRnZShu
b2RlLT5jaGlsZHJlbi5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBjYXNlIENvbXBh
cmVMZXNzOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXI6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgY2FzZSBD
b21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0g
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJh
dGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTG9naWNhbE5v
dDogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoK
KyAgICAgICAgY2FzZSBSZWdFeHBUZXN0OiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2lu
ZChDZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKDApOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVC
b29sZWFuKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29s
ZWFuVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgZml4
RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgICAgIE5vZGUqIGxvZ2ljYWxO
b3QgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAobG9naWNhbE5vdC0+
b3AoKSA9PSBMb2dpY2FsTm90CkBAIC0yNzAsMTQ5ICs1MzEsMTY3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU2V0
TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDAsIEZvcndhcmRTcGVj
dWxhdGlvbik7CisgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAg
ICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAgICAg
ICAgICAgICBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCBpKS0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+bnVtQ2hpbGRyZW4oKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJ
bmRleCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3Bl
cmFuZEluZGV4XS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUt
Pm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XS5z
ZXRVc2VLaW5kKFJlYWxOdW1iZXJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MSk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkKLSAgICAgICAg
ICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7CisgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZTogewot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7
CisgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsKKyAgICAgICAgICAgIGlmIChpc090aGVyU3Bl
Y3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNlIGlm
IChpc09iamVjdFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQorICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0
aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBBcml0aE1vZDogewot
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDEpOworICAgICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoRnVuY3Rpb25Vc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTXVsOiB7Ci0gICAgICAg
ICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgor
ICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLQotICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3Bl
Y3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkgfHwgaXNBUk12
N3MoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaW5qZWN0
SW50MzJUb0RvdWJsZU5vZGUoMCk7Ci0gICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJs
ZU5vZGUoMSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIHJlZidp
bmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9tCi0gICAg
ICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgotICAgICAgICAgICAgICAgIE5v
ZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0Rv
dWJsZSwgKm5vZGUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wKERvdWJsZUFzSW50MzIpOwotICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRp
YWxpemUoRWRnZShuZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRnZSgpLCBFZGdlKCkpOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlJZDogeworICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGlmICghaXNJbnQzMlNw
ZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigp
KSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5nZXRBcnJheVByb2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlN
b2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKKyAgICAgICAgICAgIGlmIChhcnJh
eVByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4p
KTsKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChh
cnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYXJyYXlN
b2RlID0gYXJyYXlNb2RlLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0
ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZp
bmUobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAg
ICAgICAgICAgIGlmICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAg
ICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29y
bGQpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5vZGUt
PnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJp
dGhBYnM6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1
bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFy
cmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5n
dGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgaWYg
KCFzdG9yYWdlKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkgPSBFZGdl
KHN0b3JhZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsK
KyAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczogewotICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApOwotICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpOwotICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpOwotCi0gICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCi0gICAgICAgICAg
ICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBjaGls
ZDEtPnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9u
KCksCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIDMp
OworICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKKyAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2Ug
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246Cisg
ICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAg
ICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQo
KS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKDIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZB
cnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBj
YXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgICAgIGlmICghY2hpbGQz
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0g
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsKKyAgICAgICAgY2FzZSBDaGVja0FycmF5
OiB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChDZWxsVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdB
cnJheTogewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1D
aGlsZHJlbihub2RlKTsgaS0tOykgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5n
VHlwZSgKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVB
bmRUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+aW5kZXhpbmdUeXBlKCksIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJs
ZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVt
Q2hpbGRyZW4obm9kZSk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
aSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXlpZnk6CisgICAgICAgIGNhc2Ug
QXJyYXlpZnlUb1N0cnVjdHVyZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCku
Y2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CisgICAgICAgICAgICBpZiAoIShub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAg
ICAgICAgfQogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAt
NDgwLDcgKzc1OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBTcGVjTm9uZSwgR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IGFycmF5KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2Ug
YmFzZSwgRWRnZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQorICAgIHZvaWQgYmxl
c3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVkZ2UgaW5kZXgsIEVkZ2UmIHN0b3JhZ2VDaGls
ZCkKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZp
eHBvaW50KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTA4LDcgKzc4Nyw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG5vZGUsIHN0b3JhZ2VDaGlsZElk
eCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgc3RvcmFnZUNoaWxkID0gRWRnZShzdG9y
YWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSB9CiAgICAgfQpAQCAtNTE2LDQw
ICs3OTUsNDQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKICAg
ICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBlZGdlLm5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgIT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIpIHsKKyAgICAgICAgICAgIGVkZ2Uu
c2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7CiAgICAgICAgIEVkZ2UgbmV3RWRn
ZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAKKyAgICAgICAgaWYgKG5ld0VkZ2UudXNlS2lu
ZCgpICE9IEludDMyS2luZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChuZXdFZGdlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOworICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRn
ZSk7CiAgICAgICAgIAogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBmaXhEb3VibGVFZGdlKHVuc2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBmaXhEb3VibGVF
ZGdlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVzZSwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAg
IE5vZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7Ci0gICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dy
YXBoLmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7CiAgICAgICAgIAogICAgICAgICBpZiAoZWRn
ZS0+cHJlZGljdGlvbigpICYgU3BlY0RvdWJsZSkgewotICAgICAgICAgICAgZWRnZS5zZXRVc2VL
aW5kKERvdWJsZVVzZSk7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQodXNlS2luZCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGluamVjdElu
dDMyVG9Eb3VibGVOb2RlKGNoaWxkSW5kZXgsIGRpcmVjdGlvbik7CisgICAgICAgIGluamVjdElu
dDMyVG9Eb3VibGVOb2RlKGVkZ2UsIGRpcmVjdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBpbmpl
Y3RJbnQzMlRvRG91YmxlTm9kZSh1bnNpZ25lZCBjaGlsZEluZGV4LCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIHZvaWQgaW5qZWN0SW50
MzJUb0RvdWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBT
cGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAg
IHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNE
b3VibGUsCiAgICAgICAgICAgICBkaXJlY3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlvbiA/IElu
dDMyVG9Eb3VibGUgOiBGb3J3YXJkSW50MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1fY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRl
eCkubm9kZSgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2Uo
ZWRnZS5ub2RlKCksIERvdWJsZVVzZSkpOworICAgICAgICByZXN1bHQtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoRG91YmxlVXNlKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigKQEAgLTU1Nyw3ICs4NDAsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5jaGlsZCht
X2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgo
KSwgcmVzdWx0LT5pbmRleCgpKTsKICNlbmRpZgogCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9j
dXJyZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91YmxlVXNlKTsKKyAgICAg
ICAgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0
LCB1c2VLaW5kKTsKICAgICB9CiAKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDYsNDUgKzM0NiwxNCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAg
fQogfQogCi0vLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGJlIGl0ZXJhdGl2ZSwgbm90IHJlY3Vy
c2l2ZS4KLSNkZWZpbmUgRE9fVE9fQ0hJTERSRU4obm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKF9u
b2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hp
bGQoKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+
Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKLSAgICAgICAgICAgICAgICBf
Y2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKG1fdmFyQXJn
Q2hpbGRyZW5bX2NoaWxkSWR4XSk7ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQo
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
IGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICgh
X25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB9IHdoaWxlIChmYWxzZSkKLQogdm9pZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9kZSogb3ApCiB7
Ci0gICAgRE9fVE9fQ0hJTERSRU4ob3AsIHJlZik7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERS
RU4oKnRoaXMsIG9wLCByZWYpOwogfQogCiB2b2lkIEdyYXBoOjpkZXJlZkNoaWxkcmVuKE5vZGUq
IG9wKQogewotICAgIERPX1RPX0NISUxEUkVOKG9wLCBkZXJlZik7CisgICAgREZHX05PREVfRE9f
VE9fQ0hJTERSRU4oKnRoaXMsIG9wLCBkZXJlZik7CiB9CiAKIHZvaWQgR3JhcGg6OmRldGhyZWFk
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MzAz
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgUHV0VG9CYXNlT3BlcmF0aW9uRGF0YSB7CiAKIGVu
dW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKICAgICBEb250U3BlY3VsYXRlSW50ZWdlciwKLSAgICBT
cGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdywKKyAgICBTcGVjdWxhdGVJbnRl
Z2VyQW5kVHJ1bmNhdGVDb25zdGFudHMsCiAgICAgU3BlY3VsYXRlSW50ZWdlcgogfTsKIApAQCAt
MTc0LDkgKzE3NCw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJ
ZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsg
bm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgICAgICBwZXJmb3Jt
U3Vic3RpdHV0aW9uRm9yRWRnZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2Vu
ZXJhdGUpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlv
bkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAg
ICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigp
LCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRn
ZShub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAg
cGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQxKCksIHNob3VsZEdlbmVyYXRl
KTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMigp
LCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRn
ZShub2RlLT5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOwogICAgICAgICB9CiAgICAgfQogICAg
IApAQCAtNzgxLDcgKzc4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChkb3VibGVJbW1lZGlh
dGUgPCAtdHdvVG9UaGU0OCB8fCBkb3VibGVJbW1lZGlhdGUgPiB0d29Ub1RoZTQ4KQogICAgICAg
ICAgICAgcmV0dXJuIERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgICAgICAKLSAgICAgICAgcmV0
dXJuIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoYWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1
bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93IDogRG9udFNwZWN1bGF0ZUludGVnZXI7
CisgICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC0+YXJpdGhOb2RlRmxh
Z3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQW5kVHJ1bmNhdGVDb25zdGFudHMgOiBEb250U3BlY3Vs
YXRlSW50ZWdlcjsKICAgICB9CiAgICAgCiAgICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKE5vZGUqIG11bCwgTm9kZSogdmFyaWFibGUsIE5vZGUqIGltbWVkaWF0ZSkK
QEAgLTgzMCw2ICs4MzAsMzYgQEAgaW5saW5lIEJsb2NrSW5kZXggR3JhcGg6OmJsb2NrSW5kZXhG
b3JCeQogICAgIHJldHVybiAqYmluYXJ5U2VhcmNoPEJsb2NrSW5kZXgsIHVuc2lnbmVkPihsaW5r
aW5nVGFyZ2V0cywgbGlua2luZ1RhcmdldHMuc2l6ZSgpLCBieXRlY29kZUJlZ2luLCBHZXRCeXRl
Y29kZUJlZ2luRm9yQmxvY2soKnRoaXMpKTsKIH0KIAorI2RlZmluZSBERkdfTk9ERV9ET19UT19D
SElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAorICAgICAg
ICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBf
Y2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmICghIShncmFwaCku
bV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICB0aGluZ1RvRG8oKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pOyAg
ICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYg
KCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAhX25vZGUtPmNoaWxkMigp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAg
ICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0Rv
KF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCgh
X25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2Rl
LT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw2IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewogICAgICAgICBzZXRPcEFuZERl
ZmF1bHRGbGFncyhvcCk7Ci0gICAgICAgIEFTU0VSVCghIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFy
Z3MpID09IChjaGlsZHJlbi5raW5kKCkgPT0gQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUpKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4s
IG5vIGltbWVkaWF0ZSB2YWx1ZS4KQEAgLTk5NSw3ICs5OTQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIHJldHVybiBtX3JlZkNvdW50LS07CiAgICAgfQogICAgIAotICAgIEVkZ2UgY2hpbGQx
KCkKKyAgICBFZGdlJiBjaGlsZDEoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAm
IE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDEoKTsKQEAg
LTEwMDksMTMgKzEwMDgsMTMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gY2hpbGRy
ZW4uY2hpbGQxVW5jaGVja2VkKCk7CiAgICAgfQogCi0gICAgRWRnZSBjaGlsZDIoKQorICAgIEVk
Z2UmIGNoaWxkMigpCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1Zh
ckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMigpOwogICAgIH0KIAotICAg
IEVkZ2UgY2hpbGQzKCkKKyAgICBFZGdlJiBjaGlsZDMoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5j
aGlsZDMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9j
YXRvci5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi10eXBlZGVmIEFsbG9jYXRvcjxOb2RlPiBO
b2RlQWxsb2NhdG9yOworI2lmIFVTRShKU1ZBTFVFNjQpCit0eXBlZGVmIEFsbG9jYXRvcjxOb2Rl
LCAxMTI+IE5vZGVBbGxvY2F0b3I7CisjZWxzZQordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgODA+
IE5vZGVBbGxvY2F0b3I7CisjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdVc2VLaW5kX2gKKyNkZWZpbmUgREZHVXNlS2luZF9oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
U3BlY3VsYXRlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIFVzZUtpbmQgeworICAgIFVudHlwZWRV
c2UsCisgICAgSW50MzJVc2UsCisgICAgUmVhbE51bWJlclVzZSwKKyAgICBOdW1iZXJVc2UsCisg
ICAgQm9vbGVhblVzZSwKKyAgICBDZWxsVXNlLAorICAgIE9iamVjdFVzZSwKKyAgICBPYmplY3RP
ck90aGVyVXNlLAorICAgIEZ1bmN0aW9uVXNlLAorICAgIFN0cmluZ1VzZSwKKyAgICBPdGhlclVz
ZSwKKyAgICBMYXN0VXNlS2luZCAvLyBNdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0
aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1l
bnRzLgorfTsKKworQUxXQVlTX0lOTElORSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVz
ZUtpbmQgdXNlS2luZCkKK3sKKyAgICBzd2l0Y2ggKHVzZUtpbmQpIHsKKyAgICBjYXNlIFVudHlw
ZWRVc2U6CisgICAgICAgIHJldHVybiBTcGVjVG9wOworICAgIGNhc2UgSW50MzJVc2U6CisgICAg
ICAgIHJldHVybiBTcGVjSW50MzI7CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgICAgICBy
ZXR1cm4gU3BlY1JlYWxOdW1iZXI7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIHJldHVy
biBTcGVjTnVtYmVyOworICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNC
b29sZWFuOworICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNDZWxsOworICAg
IGNhc2UgT2JqZWN0VXNlOgorICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKKyAgICBjYXNlIE9i
amVjdE9yT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT2JqZWN0IHwgU3BlY090aGVyOwor
ICAgIGNhc2UgRnVuY3Rpb25Vc2U6CisgICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CisgICAg
Y2FzZSBTdHJpbmdVc2U6CisgICAgICAgIHJldHVybiBTcGVjU3RyaW5nOworICAgIGNhc2UgT3Ro
ZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT3RoZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNwZWNUb3A7Cisg
ICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6VXNlS2luZCk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdVc2VLaW5kX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188758</attachid>
            <date>2013-02-17 01:40:56 -0800</date>
            <delta_ts>2013-02-17 15:48:18 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79094</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNDggQEAgQWJzdHJh
Y3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9v
bGVhblJlc3VsdDsKIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobV9ibG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAg
CiAgICAgbV9kaWRDbG9iYmVyID0gZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIAogICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKQoreworICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5h
dChpbmRleEluQmxvY2spKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMo
Tm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBmaWx0ZXJFZGdlQnlVc2UpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdl
cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0
KGluZGV4SW5CbG9jaykpOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSkKK3sKICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoK
ICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6IHsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
bV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSWRl
bnRpdHk6IHsKICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAgICAgCkBAIC0yNjUsMTkgKzI4MywxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlmICh2
YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSkgewogICAgICAgICAg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBjYW5FeGl0ID0g
ZmFsc2U7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3ZhcmlhYmxlcy5vcGVyYW5k
KHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CiAgICAgICAgIGlmICghdmFyaWFibGVBY2Nl
c3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkp
Ci0gICAgICAgICAgICAgICAgY2FuRXhpdCB8PSB0cnVlOworICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkp
CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgZm9yTm9kZShu
b2RlKSA9IHZhbHVlOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjg2LDM1ICszMDEsMTAgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAodmFsdWUudmFsdWUo
KSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBmb3JOb2Rl
KG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkKLSAgICAgICAgICAg
IHx8IG1fZ3JhcGguaXNDcmVhdGVkVGhpc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKSB7Ci0gICAg
ICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkuc2V0KFNwZWNEb3VibGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5
cGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24o
KTsKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzQ2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAKICAgICAgICAgbV92
YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMjIsNyArMzEyLDYgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0Lgog
ICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpLmlzQ2xlYXIoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgpAQCAtMzY2LDcgKzM1NSw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVJ
bnQzMkJpbmFyeShub2RlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgxLDE2ICszNjksMTQgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgY2FzZSBEb3VibGVBc0ludDMyOiB7CiAg
ICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwpA
QCAtNDA0LDcgKzM5MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTQyMywxNCArNDA4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAg
c3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29s
ZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMy
KTsKICAgICAgICAgYnJlYWs7CkBAIC00NDUsNyArNDIyLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCkBAIC00NTMsMTAgKzQyOSw2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIENoZWNrTnVtYmVyOgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
CiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOiB7CiAgICAgICAgIEpTVmFs
dWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CkBAIC00NjcsMzAgKzQz
OSwyNSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkp
IHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5v
ZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJF
eHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOworICAgICAg
ICBjYXNlIE51bWJlclVzZToKICAgICAgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCiAgICAgICAgICAgICAgICAgJiYgaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKICAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBWYWx1ZUFkZCkgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIHRoaXMgeWV0LiA6LSgKLSAgICAgICAgbV9pc1ZhbGlk
ID0gZmFsc2U7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgICAgIApAQCAtNTAzLDE1ICs0NzAsMTkgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRl
SW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBO
dW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZTogewpAQCAtNTIyLDE1ICs0OTMsMTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5u
ZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMlVuYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51
bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGUpOwotICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QXJpdGhNdWw6IHsKQEAgLTU0MiwyMSArNTE3LDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJC
aW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAhbm9kZUNhblRy
dW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKQotICAgICAgICAgICAgICAgIHx8
ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkK
KyAgICAgICAgICAgICAgICB8fCAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0
aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAg
aWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkKKyAgICAgICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShu
b2RlKTsKLSAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlUmVhbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwotICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhEaXY6CkBAIC01OTMsMTUgKzU3MSwxOCBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsgLy8gZm9yY2luZyBj
YW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLgorICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNl
OgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAog
ICAgIGNhc2UgQXJpdGhBYnM6IHsKQEAgLTYxMiwxNSArNTkzLDE4IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyVW5hcnkobm9kZSwgdHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwot
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoU3FydDog
ewpAQCAtNjMxLDcgKzYxNSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC02NTMsMTggKzYzNiwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOwotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQtPnByZWRp
Y3Rpb24oKSkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBC
b29sZWFuVXNlOgorICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIE51bWJlclVz
ZToKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNT
dHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsK
LSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAg
ICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC03NjIsMTQgKzc0NiwxNyBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE5vZGUq
IGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgaWYgKGlzQ2VsbFNw
ZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgaWYgKGlz
U3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjQ2VsbCk7
CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBTdHJpbmdVc2U6CisgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5
cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTg0NSw2ICsxODMyLDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICByZXR1cm4gbV9pc1ZhbGlkOwogfQogCitib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAgIE5vZGUqIG5vZGUgPSBt
X2Jsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9kZSkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKKyAg
ICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsKK30KKwogaW5saW5l
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVP
cmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJz
KGNvZGVPcmlnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDUyIEBA
IHB1YmxpYzoKICAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBhc3QgdGhpcyBu
b2RlLiBOb3RhYmx5LCBpdCB3aWxsIHJldHVybiB0cnVlCiAgICAgLy8gZm9yIGJsb2NrIHRlcm1p
bmFscywgc28gbG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4gb3IgdmFyaWFu
dHMKICAgICAvLyBvZiBUaHJvdy4KLSAgICBib29sIGV4ZWN1dGUodW5zaWduZWQpOworICAgIC8v
CisgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gZG9pbmc6Cisg
ICAgLy8KKyAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7CisgICAgLy8g
ICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7CisgICAgLy8gICAgIHJlc3VsdCA9IHN0YXRl
LmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKKyAgICAvLyB9IGVsc2UKKyAgICAvLyAgICAgcmVzdWx0
ID0gdHJ1ZTsKKyAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAK
KyAgICAvLyBJbmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJdCBy
ZXNldHMgYW55IHN0YXRlIGluIHRoZSBub2RlLAorICAgIC8vIHRoYXQgaXMgcHJvZ3Jlc3NpdmVs
eSBidWlsdCB1cCBieSBleGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVjdHMoKS4gSW4KKyAg
ICAvLyBwYXJ0aWN1bGFyLCB0aGlzIHJlc2V0cyBjYW5FeGl0KCksIHNvIGlmIHlvdSB3YW50IHRv
ICJrbm93IiBiZXR3ZWVuIGNhbGxzIG9mCisgICAgLy8gc3RhcnRFeGVjdXRpbmcoKSBhbmQgZXhl
Y3V0ZUVkZ2VzKCkvRWZmZWN0cygpIHdoZXRoZXIgdGhlIGxhc3QgcnVuIG9mIHRoZQorICAgIC8v
IGFuYWx5c2lzIGNvbmNsdWRlZCB0aGF0IHRoZSBub2RlIGNhbiBleGl0LCB5b3Ugc2hvdWxkIHBy
b2JhYmx5IHNldCB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24gYXNpZGUgcHJpb3IgdG8gY2FsbGlu
ZyBzdGFydEV4ZWN1dGluZygpLgorICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcoTm9kZSopOworICAg
IHZvaWQgc3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICAv
LyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlzIHJ1
bnMgZmlsdGVyRWRnZUJ5VXNlKCkKKyAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUuIFlv
dSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZAorICAgIC8vIGZp
bHRlckVkZ2VCeVVzZSgpIChvciBzb21lIGVxdWl2YWxlbnQpIG9uIGVhY2ggZWRnZS4KKyAgICB2
b2lkIGV4ZWN1dGVFZGdlcyhOb2RlKik7CisgICAgdm9pZCBleGVjdXRlRWRnZXModW5zaWduZWQg
aW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVyRWRnZUJ5
VXNlKEVkZ2UgZWRnZSkKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBzd2l0
Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAg
ICAgY2FzZSBLbm93bk51bWJlclVzZToKKyAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAg
ICAgICAgICBBU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9yKGVk
Z2UudXNlS2luZCgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQK
KyAgICAgICAgCisgICAgICAgIGZpbHRlckJ5VHlwZShlZGdlLm5vZGUoKSwgdHlwZUZpbHRlckZv
cihlZGdlLnVzZUtpbmQoKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1
dGUgdGhlIGVmZmVjdHMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgY2hhbmdlcyB0aGUgYWJzdHJh
Y3QKKyAgICAvLyBzdGF0ZSBhc3N1bWluZyB0aGF0IGVkZ2VzIGhhdmUgYWxyZWFkeSBiZWVuIGZp
bHRlcmVkLgorICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsK
KyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSopOwog
ICAgIAogICAgIC8vIERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2JiZXIgdGhlIHdvcmxk
PwogICAgIGJvb2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsgfQpA
QCAtMjU5LDYgKzMwNCwxNCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2RlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBmb3JOb2RlKG5vZGUpOworICAgICAgICBpZiAodmFsdWUubV90eXBlICYgfnR5cGUpCisgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICB2YWx1ZS5maWx0ZXIodHlw
ZSk7CisgICAgfQorICAgIAogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgR3JhcGgm
IG1fZ3JhcGg7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw2ICsyMzQsOSBA
QCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlU2V0JiBvdGhlcikKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJl
IG9wdGltaXplZCBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIG1fdHlwZSBub3QKKyAgICAgICAgLy8g
aGF2aW5nIHN0cnVjdHVyZXMsIGFycmF5IG1vZGVzLCBvciBhIHNwZWNpZmljIHZhbHVlLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjYzCiAg
ICAgICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CiAgICAg
ICAgIG1fYXJyYXlNb2RlcyAmPSBvdGhlci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsKICAg
ICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCShyZXZpc2lvbiAxNDMw
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDcsOSArNDcsNiBAQCBwdWJsaWM6CiAgICAgQWRqYWNlbmN5TGlzdCgp
IHsgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kKQotI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICAgICAgOiBtX2tpbmQoa2luZCkKLSNlbmRpZgogICAgIHsKICAgICAgICAgaWYg
KGtpbmQgPT0gVmFyaWFibGUpIHsKICAgICAgICAgICAgIG1fd29yZHNbMF0ubV9lbmNvZGVkV29y
ZCA9IFVJTlRfTUFYOwpAQCAtNTgsMTggKzU1LDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAg
ICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIE5vZGUqIGNoaWxkMSwgTm9kZSogY2hpbGQyLCBO
b2RlKiBjaGlsZDMpCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICA6IG1fa2luZChGaXhl
ZCkKLSNlbmRpZgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChraW5kLCBraW5kID09IEZp
eGVkKTsKICAgICAgICAgaW5pdGlhbGl6ZShjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICB9
CiAgICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIHVuc2lnbmVkIGZpcnN0Q2hpbGQs
IHVuc2lnbmVkIG51bUNoaWxkcmVuKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBt
X2tpbmQoVmFyaWFibGUpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2lu
ZCwga2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIHNldEZpcnN0Q2hpbGQoZmlyc3RDaGlsZCk7
CkBAIC03OSwyMSArNzAsMTggQEAgcHVibGljOgogICAgIGNvbnN0IEVkZ2UmIGNoaWxkKHVuc2ln
bmVkIGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaSA8IFNpemUpOwotICAgICAgICBB
U1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAg
fSAgICAKICAgICAKICAgICBFZGdlJiBjaGlsZCh1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGkgPCBTaXplKTsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAg
ICAgIHJldHVybiBtX3dvcmRzW2ldOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldENoaWxkKHVu
c2lnbmVkIGksIEVkZ2Ugbm9kZVVzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7
Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICBtX3dvcmRzW2ldID0g
bm9kZVVzZTsKICAgICB9CiAgICAgCkBAIC0xMjUsOSArMTEzLDYgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgcmVzZXQoKQogICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIG1f
a2luZCA9IEZpeGVkOwotI2VuZGlmCiAgICAgICAgIGluaXRpYWxpemUoKTsKICAgICB9CiAgICAg
CkBAIC0xNDIsMzQgKzEyNywyNCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBmaXJzdENoaWxk
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAg
ICAgICByZXR1cm4gbV93b3Jkc1swXS5tX2VuY29kZWRXb3JkOwogICAgIH0KICAgICB2b2lkIHNl
dEZpcnN0Q2hpbGQodW5zaWduZWQgZmlyc3RDaGlsZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBm
aXJzdENoaWxkOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBudW1DaGlsZHJlbigpIGNvbnN0
CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgcmV0
dXJuIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZDsKICAgICB9CiAgICAgdm9pZCBzZXROdW1DaGls
ZHJlbih1bnNpZ25lZCBudW1DaGlsZHJlbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQg
PT0gVmFyaWFibGUpOwogICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGls
ZHJlbjsKICAgICB9CiAgICAgCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotI2VuZGlmCiBwcml2YXRlOgogICAgIEVkZ2UgbV93
b3Jkc1tTaXplXTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgS2luZCBtX2tpbmQ7Ci0jZW5k
aWYKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gICBhbnl0aGluZy4g
WW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGluc3RlYWQuCiAvLyAtIFlvdSBjYWxsIGZyZWUo
KSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCku
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CisvLyBmb3JjZWRDZWxsU2l6ZTogc2V0IHRoaXMgdG8g
MCBpZiB5b3UncmUgaGFwcHkgd2l0aCB0aGUgZGVmYXVsdCBhbGlnbm1lbnQsIG9yIHNldCBpdAor
Ly8gdG8gYSBub24temVybyB2YWx1ZSBpZiB5b3Ugd2FudCB0byBmb3JjaWJseSBhbGlnbiB0aGUg
YWxsb2NhdGlvbnMgdG8gYSBjZXJ0YWluCisvLyB2YWx1ZS4gV2hlbiB5b3UgZG8gdGhpcywgQWxs
b2NhdG9yIHdpbGwgQVNTRVJUIHRoYXQgZm9yY2VkQ2VsbEFsaWdubWVudCA+PSBzaXplb2YoVCku
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CiBj
bGFzcyBBbGxvY2F0b3IgewogcHVibGljOgogICAgIEFsbG9jYXRvcigpOwpAQCAtNjMsMTMgKzY3
LDI0IEBAIHByaXZhdGU6CiAgICAgdm9pZCogYnVtcEFsbG9jYXRlKCk7CiAgICAgdm9pZCogZnJl
ZUxpc3RBbGxvY2F0ZSgpOwogICAgIHZvaWQqIGFsbG9jYXRlU2xvdygpOwotCisgICAgCisgICAg
c3RhdGljIHNpemVfdCBjZWxsU2l6ZSgpCisgICAgeworICAgICAgICBpZiAoIWZvcmNlZENlbGxB
bGlnbm1lbnQpCisgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKFQpOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKGZvcmNlZENlbGxBbGlnbm1lbnQgPj0gc2l6ZW9mKFQpKTsKKyAgICAgICAgcmV0
dXJuIGZvcmNlZENlbGxBbGlnbm1lbnQ7CisgICAgfQorICAgIAogICAgIHN0cnVjdCBSZWdpb24g
ewogICAgICAgICBzdGF0aWMgc2l6ZV90IHNpemUoKSB7IHJldHVybiA2NCAqIEtCOyB9Ci0gICAg
ICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIHN0ZDo6bWF4KHNpemVvZihS
ZWdpb24pLCBzaXplb2YoVCkpOyB9Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlRo
aW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBoZWFkZXJTaXplKCkpIC8gc2l6ZW9m
KFQpOyB9Ci0gICAgICAgIFQqIGRhdGEoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KGJpdHdp
c2VfY2FzdDxjaGFyKj4odGhpcykgKyBoZWFkZXJTaXplKCkpOyB9Ci0gICAgICAgIGJvb2wgaXNJ
blRoaXNSZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHBvaW50ZXIgLSBkYXRhKCkpIDwgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsgfQorICAg
ICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXplb2Yo
UmVnaW9uKSwgY2VsbFNpemUoKSk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIG51bWJlck9m
VGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUoKSAtIGhlYWRlclNpemUoKSkgLyBjZWxs
U2l6ZSgpOyB9CisgICAgICAgIHN0YXRpYyBzaXplX3QgcGF5bG9hZFNpemUoKSB7IHJldHVybiBu
dW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpICogY2VsbFNpemUoKTsgfQorICAgICAgICBjaGFyKiBw
YXlsb2FkQmVnaW4oKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVy
U2l6ZSgpOyB9CisgICAgICAgIGNoYXIqIHBheWxvYWRFbmQoKSB7IHJldHVybiBwYXlsb2FkQmVn
aW4oKSArIHBheWxvYWRTaXplKCk7IH0KKyAgICAgICAgYm9vbCBpc0luVGhpc1JlZ2lvbihjb25z
dCBUKiBwb2ludGVyKSB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGJpdHdpc2VfY2FzdDxj
aGFyKj4ocG9pbnRlcikgLSBwYXlsb2FkQmVnaW4oKSkgPCBwYXlsb2FkU2l6ZSgpOyB9CiAgICAg
ICAgIHN0YXRpYyBSZWdpb24qIHJlZ2lvbkZvcihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBi
aXR3aXNlX2Nhc3Q8UmVnaW9uKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiB+
KHNpemUoKSAtIDEpKTsgfQogICAgICAgICAKICAgICAgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVk
IG1fYWxsb2NhdGlvbjsKQEAgLTgyLDI2ICs5NywyNiBAQCBwcml2YXRlOgogICAgIAogICAgIFJl
Z2lvbiogbV9yZWdpb25IZWFkOwogICAgIHZvaWQqKiBtX2ZyZWVMaXN0SGVhZDsKLSAgICBUKiBt
X2J1bXBFbmQ7Ci0gICAgdW5zaWduZWQgbV9idW1wUmVtYWluaW5nOworICAgIGNoYXIqIG1fYnVt
cEVuZDsKKyAgICBzaXplX3QgbV9idW1wUmVtYWluaW5nOwogfTsKIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46OkFsbG9jYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgoraW5saW5lIEFsbG9jYXRvcjxULCBm
b3JjZWRDZWxsQWxpZ25tZW50Pjo6QWxsb2NhdG9yKCkKICAgICA6IG1fcmVnaW9uSGVhZCgwKQog
ICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKICAgICAsIG1fYnVtcFJlbWFpbmluZygwKQogewogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIEFsbG9jYXRvcjxUPjo6fkFsbG9jYXRvcigp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgoraW5s
aW5lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6fkFsbG9jYXRvcigpCiB7CiAg
ICAgcmVzZXQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9p
ZCogQWxsb2NhdG9yPFQ+OjphbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25l
ZCBmb3JjZWRDZWxsQWxpZ25tZW50PgorQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VCwg
Zm9yY2VkQ2VsbEFsaWdubWVudD46OmFsbG9jYXRlKCkKIHsKICAgICB2b2lkKiByZXN1bHQgPSBi
dW1wQWxsb2NhdGUoKTsKICAgICBpZiAoTElLRUxZKCEhcmVzdWx0KSkKQEAgLTEwOSw4ICsxMjQs
OCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhCiAgICAgcmV0dXJu
IGZyZWVMaXN0QWxsb2NhdGUoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxs
b2NhdG9yPFQ+OjpmcmVlKFQqIG9iamVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVk
IGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25t
ZW50Pjo6ZnJlZShUKiBvYmplY3QpCiB7CiAgICAgb2JqZWN0LT5+VCgpOwogICAgIApAQCAtMTE5
LDggKzEzNCw4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlKFQqIG9iamVjdCkKICAgICBtX2Zy
ZWVMaXN0SGVhZCA9IGNlbGw7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9j
YXRvcjxUPjo6ZnJlZUFsbCgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRD
ZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZy
ZWVBbGwoKQogewogICAgIGlmICghbV9yZWdpb25IZWFkKSB7CiAgICAgICAgIEFTU0VSVCghbV9i
dW1wUmVtYWluaW5nKTsKQEAgLTE0Miw4ICsxNTcsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJl
ZUFsbCgpCiAgICAgc3RhcnRCdW1waW5nSW4obV9yZWdpb25IZWFkKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpyZXNldCgpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9y
Y2VkQ2VsbEFsaWdubWVudD46OnJlc2V0KCkKIHsKICAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQo
bV9yZWdpb25IZWFkKTsKICAgICAKQEAgLTE1MiwzOCArMTY3LDM4IEBAIHZvaWQgQWxsb2NhdG9y
PFQ+OjpyZXNldCgpCiAgICAgbV9idW1wUmVtYWluaW5nID0gMDsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXVuc2lnbmVkIEFsbG9jYXRvcjxUPjo6aW5kZXhPZihjb25zdCBUKiBvYmplY3Qp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgordW5z
aWduZWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjppbmRleE9mKGNvbnN0IFQq
IG9iamVjdCkKIHsKICAgICB1bnNpZ25lZCBiYXNlSW5kZXggPSAwOwogICAgIGZvciAoUmVnaW9u
KiByZWdpb24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQp
IHsKICAgICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKLSAgICAgICAg
ICAgIHJldHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAg
ICAgICAgcmV0dXJuIGJhc2VJbmRleCArIChiaXR3aXNlX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSBy
ZWdpb24tPnBheWxvYWRCZWdpbigpKSAvIGNlbGxTaXplKCk7CiAgICAgICAgIGJhc2VJbmRleCAr
PSBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7CiAgICAgfQogICAgIENSQVNIKCk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BbGxvY2F0b3I8VD4q
IEFsbG9jYXRvcjxUPjo6YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50PiogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxv
Y2F0b3JPZihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgcmV0dXJuIFJlZ2lvbjo6cmVnaW9uRm9y
KG9iamVjdCktPm1fYWxsb2NhdG9yOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlT
X0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmJ1bXBBbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgorQUxXQVlTX0lOTElORSB2b2lk
KiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmJ1bXBBbGxvY2F0ZSgpCiB7Ci0g
ICAgaWYgKHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykgewotICAgICAgICBy
ZW1haW5pbmctLTsKKyAgICBpZiAoc2l6ZV90IHJlbWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykg
eworICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemUoKTsKICAgICAgICAgbV9idW1wUmVtYWlu
aW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9idW1wRW5kIC0gKHJlbWFpbmluZyAr
IDEpOworICAgICAgICByZXR1cm4gbV9idW1wRW5kIC0gKHJlbWFpbmluZyArIGNlbGxTaXplKCkp
OwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQq
IEFsbG9jYXRvcjxUPjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1
bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENl
bGxBbGlnbm1lbnQ+OjpmcmVlTGlzdEFsbG9jYXRlKCkKIHsKICAgICB2b2lkKiogcmVzdWx0ID0g
bV9mcmVlTGlzdEhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQpAQCAtMTkyLDggKzIw
Nyw4IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQqIEFsbG9jYXRvcjxUPjo6
YWxsb2NhdGVTbG93KCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxB
bGlnbm1lbnQ+Cit2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmFsbG9j
YXRlU2xvdygpCiB7CiAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CiAgICAgQVNTRVJUKCFt
X2J1bXBSZW1haW5pbmcpOwpAQCAtMjE2LDggKzIzMSw4IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6
YWxsb2NhdGVTbG93KCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdCh0eXBlbmFtZSBB
bGxvY2F0b3I8VD46OlJlZ2lvbiogcmVnaW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGln
bm1lbnQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQodHlwZW5hbWUgQWxsb2NhdG9yPFQsIGZvcmNl
ZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsKICAgICB3aGlsZSAocmVnaW9uKSB7
CiAgICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0OwpAQCAtMjI2LDEx
ICsyNDEsMTEgQEAgdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdAogICAg
IH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpzdGFydEJ1
bXBpbmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8VD46OlJlZ2lvbiogcmVnaW9uKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9y
PFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpzdGFydEJ1bXBpbmdJbih0eXBlbmFtZSBBbGxvY2F0
b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OlJlZ2lvbiogcmVnaW9uKQogewotICAgIG1fYnVt
cEVuZCA9IHJlZ2lvbi0+ZGF0YSgpICsgUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigp
OwotICAgIG1fYnVtcFJlbWFpbmluZyA9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24o
KTsKKyAgICBtX2J1bXBFbmQgPSByZWdpb24tPnBheWxvYWRFbmQoKTsKKyAgICBtX2J1bXBSZW1h
aW5pbmcgPSBSZWdpb246OnBheWxvYWRTaXplKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2Niw3ICsxNDY2LDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQogICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7IC8vIE1hdGgubWluKHgpCiAgICAgICAgIC8v
IEZJWE1FOiB3aGF0IHdlJ2QgcmVhbGx5IGxpa2UgaXMgYSBWYWx1ZVRvTnVtYmVyLCBleGNlcHQg
d2UgZG9uJ3Qgc3VwcG9ydCB0aGF0IHJpZ2h0IG5vdy4gT2ggd2VsbC4KICAgICAgICAgTm9kZSog
cmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpOwotICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrTnVtYmVyLCByZXN1bHQpOworICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20sIEVkZ2UocmVzdWx0LCBOdW1iZXJVc2UpKTsKICAgICAgICAgc2V0SW50cmluc2lj
UmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIHJlc3VsdCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAko
cmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAkod29ya2luZyBjb3B5KQpAQCAtODMsMTIgKzgzLDYgQEAgc3RydWN0IE5vZGVQb2ludGVyVHJh
aXRzIHsKICAgICBzdGF0aWMgdm9pZCBkdW1wKE5vZGUqIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0
KTsKIH07CiAKLWVudW0gVXNlS2luZCB7Ci0gICAgVW50eXBlZFVzZSwKLSAgICBEb3VibGVVc2Us
Ci0gICAgTGFzdFVzZUtpbmQgLy8gTXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZW50cnkgaW4gdGhl
IGVudW0sIGFzIGl0IGlzIHVzZWQgdG8gZGVub3RlIHRoZSBudW1iZXIgb2YgZW51bSBlbGVtZW50
cy4KLX07Ci0KIC8vIFVzZSBSZWZDaGlsZHJlbiBpZiB0aGUgY2hpbGQgcmVmIGNvdW50cyBoYXZl
bid0IGFscmVhZHkgYmVlbiBhZGp1c3RlZCB1c2luZwogLy8gb3RoZXIgbWVhbnMgYW5kIGVpdGhl
ciBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6CiAvLyAtIFRoZSBub2RlIHlvdSdyZSBjcmVhdGlu
ZyBpcyBNdXN0R2VuZXJhdGUuCkBAIC0xMDYsMTkgKzEwMCw2IEBAIGVudW0gUmVmTm9kZU1vZGUg
ewogICAgIERvbnRSZWZOb2RlCiB9OwogCi1pbmxpbmUgY29uc3QgY2hhciogdXNlS2luZFRvU3Ry
aW5nKFVzZUtpbmQgdXNlS2luZCkKLXsKLSAgICBzd2l0Y2ggKHVzZUtpbmQpIHsKLSAgICBjYXNl
IFVudHlwZWRVc2U6Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICBjYXNlIERvdWJsZVVzZToKLSAg
ICAgICAgcmV0dXJuICJkIjsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIGlubGluZSBib29s
IGlzQVJNdjdzKCkKIHsKICNpZiBDUFUoQVBQTEVfQVJNVjdTKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBFZGdlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KHVzZUtpbmRUb1N0cmluZyh1c2VL
aW5kKCkpLCBub2RlKCkpOworICAgIG91dC5wcmludCh1c2VLaW5kKCksICI6Iiwgbm9kZSgpKTsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdFZGdlLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdVc2VLaW5k
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtOTYsNyArOTcsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBZGphY2VuY3lMaXN0OwogICAg
IAotICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7IH0KKyAgICBzdGF0aWMg
dWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiA0OyB9CiAgICAgCiAgICAgc3RhdGljIHVpbnRwdHJf
dCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDMw
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw2ICs0NSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigp
CiAgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gQmVmb3Jl
Rml4cG9pbnQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMp
OworICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKICAgICAgICAg
ICAgIGZpeHVwQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNzYsNTAgKzc5LDI2NSBAQCBwcml2YXRlOgogI2VuZGlmCiAg
ICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgR2V0QnlJZDogewot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQp
CisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkKKyAgICAgICAgICAgICAgICB8
fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudCh2YXJpYWJsZS0+bG9jYWwoKSkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNJbnQz
MlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICBpZiAodmFyaWFi
bGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZShub2RlLT5jaGlsZDEoKSwgTnVtYmVyVXNlLCBGb3J3YXJkU3BlY3VsYXRpb24pOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGlj
dGlvbigpOworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBl
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAg
ICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJp
dEFuZDoKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAg
IGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAgY2FzZSBC
aXRVUlNoaWZ0OiB7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7
CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duSW50MzJVc2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IERvdWJsZUFzSW50MzI6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgVmFsdWVUb0ludDMyOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3Mo
Tm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQ
cm9maWxlID0gCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihu
b2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7Ci0gICAg
ICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxl
LT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihu
b2RlLT5jb2RlT3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gQXJyYXlNb2Rl
Ojpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2UpOwotICAgICAg
ICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJv
ZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJl
LAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5v
ZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZTogeworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDogeworICAgICAgICAgICAgaWYgKGF0dGVtcHRU
b01ha2VJbnRlZ2VyQWRkKG5vZGUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgZml4RG91
YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAg
IGlmIChhdHRlbXB0VG9NYWtlSW50ZWdlckFkZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6IHsKKyAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsK
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAgICBpZiAobV9n
cmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAg
JiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
WDg2KCkgfHwgaXNBUk12N3MoKSkgeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGFycmF5
TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9k
ZS0+cHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLnN1cHBvcnRzTGVu
Z3RoKCkpCisgICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKG5vZGUtPmNo
aWxkMigpKTsKKworICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2lu
ZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KKyAgICAg
ICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCisgICAgICAgICAgICAgICAgTm9k
ZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91
YmxlLCAqbm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0
T3AoRG91YmxlQXNJbnQzMik7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlh
bGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBLbm93bk51bWJlclVzZSksIEVkZ2UoKSwgRWRnZSgpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG5vZGUtPnNldE9wKEdldEFycmF5
TGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5l
cmF0ZSk7Ci0gICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlQ2xvYmJlcnNXb3JsZCk7Ci0gICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOwotICAg
ICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogc3RvcmFnZSA9IGNoZWNrQXJyYXko
YXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksIDAsIGxl
bmd0aE5lZWRzU3RvcmFnZSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBp
ZiAoIXN0b3JhZ2UpCisgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAgICAgIGNhc2UgQXJpdGhN
YXg6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RG91Ymxl
RWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2Uoc3Rv
cmFnZSk7CisgICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1v
ZGUoKS5jYW5DU0VTdG9yYWdlKCkpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhT
cXJ0OiB7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2dp
Y2FsTm90OiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJv
b2xlYW5Vc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUeXBlT2Y6IHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChTdHJpbmdVc2UpOworICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAg
ICAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoK
KyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
OgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6IHsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IENvbWFwcmVFcUNvbnN0YW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ29tcGFyZUVxKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRT
cGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VL
aW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYm
IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxk
MigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogeworICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Cisg
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJp
bmcoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtp
bmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6
CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogeworICAgICAgICAgICAgLy8gQ3VycmVu
dGx5IHdlIGhhdmUgbm8gZ29vZCB3YXkgb2YgcmVmaW5pbmcgdGhlc2UuCisgICAgICAgICAgICBB
U1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKKyAg
ICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxk
MigpLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5k
KEludDMyVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2Fz
ZSBHZXRCeVZhbDogewogICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAogICAgICAgICAg
ICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKQEAgLTEyNyw3ICszNDUsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpLAog
ICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2Rl
LT5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CiAgICAg
ICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6RG91YmxlCkBAIC0xMzgsMTMg
KzM1Niw3NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICYmICEobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVVc2VkQXNPdGhlcikpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFy
cmF5TW9kZS53aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNhbmVDaGFpbikpOwogICAgICAgICAgICAg
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VL
aW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBT
dHJpbmdDaGFyQXQ6Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewotICAgICAgICAg
ICAgLy8gQ3VycmVudGx5IHdlIGhhdmUgbm8gZ29vZCB3YXkgb2YgcmVmaW5pbmcgdGhlc2UuCi0g
ICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpT
dHJpbmcpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCks
IG5vZGUtPmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5VmFs
OgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQx
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQy
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQz
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKworICAgICAgICAgICAgbm9kZS0+c2V0
QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAg
ICAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjaGlsZDMtPnBy
ZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0
aW9uKGNoaWxkMSwgY2hpbGQyLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0
KCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJh
eTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAg
ICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDMoKSwgUmVhbE51bWJlclVzZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzJBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2Up
OworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQzKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5v
ZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eToKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7
CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDMoKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTE2MywxMSArNDQ1LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQ2VsbCwKICAgICAgICAgICAgICAg
ICAgICAgU3BlY0ludDMyLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJl
ZGljdGlvbigpKSk7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxk
MSgpLCBFZGdlKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5j
aGlsZDEoKSwgRWRnZSgpLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkRvdWJsZToKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE3Niw1
OCArNDYyLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNo
aWxkMSgpLCBFZGdlKCksIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKQotICAgICAgICAgICAgICAgICYm
IG5vZGUtPm11c3RHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFn
cyhOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5j
aGlsZDEoKSwgRWRnZSgpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQml0QW5kOgotICAgICAgICBjYXNlIEJp
dE9yOgotICAgICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAg
ICAgIGNhc2UgQml0TFNoaWZ0OgotICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAg
ICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkpOwotICAgICAgICAgICAgZml4
SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBj
YXNlIENvbXBhcmVMZXNzOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXI6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAg
ICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hv
dWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6CisgICAgICAg
IGNhc2UgUmVnRXhwVGVzdDogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChDZWxsVXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoQ2VsbFVz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsK
KyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigp
KQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7
CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQo
T2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2Uobm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgICAgICBOb2RlKiBsb2dpY2FsTm90ID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgaWYgKGxvZ2ljYWxOb3QtPm9wKCkgPT0g
TG9naWNhbE5vdApAQCAtMjcwLDE0OSArNTI1LDE3NiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFNldExvY2FsOiB7
Ci0gICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQo
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwLCBGb3J3YXJkU3BlY3VsYXRpb24p
OworICAgICAgICBjYXNlIFRvUHJpbWl0aXZlOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgY2FzZSBW
YWx1ZUFkZDogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlKSkKKyAgICAgICAgY2FzZSBOZXdBcnJheTogeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykgeworICAg
ICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlwZSgKKyAgICAgICAgICAgICAgICAgICAg
bGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+aW5kZXhpbmdUeXBlKCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSkt
PnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdf
VFlQRVM6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIW5vZGUtPm51bUNoaWxkcmVuKCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBu
b2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJbmRl
eF0uc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGls
ZHJlbigpOyArK29wZXJhbmRJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Zh
ckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0uc2V0VXNlS2lu
ZChSZWFsTnVtYmVyVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlm
ICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpCi0gICAgICAgICAgICAgICAg
JiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MSk7CisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogeworICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6IHsKLSAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAg
ICBjYXNlIENvbnZlcnRUaGlzOiB7CisgICAgICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9u
KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNPYmpl
Y3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNaW46Ci0g
ICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAg
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICAm
JiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgx
KTsKKyAgICAgICAgY2FzZSBDcmVhdGVUaGlzOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEZ1bmN0aW9uVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDEpOworICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAgICAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChpc1g4NigpIHx8IGlzQVJNdjdzKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9E
b3VibGVOb2RlKDApOwotICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKDEp
OwotCi0gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyByZWYnaW5nIG9uIHRo
ZSBjaGlsZHJlbiBiZWNhdXNlIHdlJ3JlIHN0ZWFsaW5nIHRoZW0gZnJvbQotICAgICAgICAgICAg
ICAgIC8vIHRoZSBvcmlnaW5hbCBkaXZpc2lvbi4KLSAgICAgICAgICAgICAgICBOb2RlKiBuZXdE
aXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAg
IG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsICpu
b2RlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChEb3Vi
bGVBc0ludDMyKTsKLSAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKEVk
Z2UobmV3RGl2aXNpb24sIERvdWJsZVVzZSksIEVkZ2UoKSwgRWRnZSgpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7
Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgR2V0U2NvcGVSZWdpc3RlcnM6CisgICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOgorICAgICAg
ICBjYXNlIFNraXBUb3BTY29wZToKKyAgICAgICAgY2FzZSBTa2lwU2NvcGU6IHsKKyAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aEFiczog
ewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
Rm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKQorICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVj
dWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgICAgICBB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAorICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFz
ZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAg
ICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5n
UHJlZGljdGlvbnMpOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkgeworICAgICAgICAg
ICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFz
ZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbikpOworICAgICAgICAgICAgICAgIGFy
cmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJl
YWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5l
KAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2Rl
LT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNM
ZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNO
b25lLCBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVP
cmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVj
dGVkU3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZShub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgaWYgKCFhcnJheU1v
ZGUuc3VwcG9ydHNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IG5vZGUtPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5m
bGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdz
KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG5vZGUpOworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFy
cmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5n
dGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgaWYg
KCFzdG9yYWdlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKSA9IEVkZ2Uoc3RvcmFnZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhTcXJ0OiB7Ci0gICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDogewor
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQdXRC
eVZhbDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAgICAgICAgICBFZGdlIGNo
aWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgICAgICBFZGdlIGNo
aWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgICAgICAgICBFZGdlIGNo
aWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7Ci0KLSAgICAgICAgICAgIG5vZGUt
PnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUo
Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAotICAgICAgICAgICAg
ICAgICAgICBjaGlsZDItPnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQz
LT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgMyk7CisgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxl
OgorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIEZvcndhcmRDaGVj
a1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoK
KyAgICAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAg
ICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICBj
YXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZTogeworICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAg
ICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAg
ICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAg
ICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIp
OworICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChTdHJpbmdVc2UpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIE5ld0FycmF5OiB7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07KSB7Ci0gICAgICAg
ICAgICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBlKAotICAgICAgICAgICAgICAgICAgICBsZWFz
dFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKS0+cHJl
ZGljdGlvbigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobm9kZS0+aW5kZXhp
bmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykKLSAgICAgICAg
ICAgICAgICAgICAgZml4RG91YmxlRWRnZShpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBBcnJheWlmeToKKyAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOiB7CisgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtp
bmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAg
IEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEluc3RhbmNlT2Y6
IHsKKyAgICAgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3Bl
Y0NlbGwpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC00ODAsMTEgKzc2Miw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBTcGVjTm9uZSwgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwg
T3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5KTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWduZWQgc3Rv
cmFnZUNoaWxkSWR4KQorICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVk
Z2UgaW5kZXgsIEVkZ2UmIHN0b3JhZ2VDaGlsZCkKICAgICB7Ci0gICAgICAgIGlmIChtX2dyYXBo
Lm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudE5vZGU7CiAgICAgICAgIAog
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNTA4LDcgKzc4
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG5vZGUs
IHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgc3RvcmFnZUNo
aWxkID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSB9CiAg
ICAgfQpAQCAtNTE2LDQwICs3OTUsNDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpeEludEVkZ2Uo
RWRnZSYgZWRnZSkKICAgICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBlZGdlLm5vZGUoKTsKLSAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpKQorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIpIHsKKyAg
ICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRnZTsK
ICAgICAgICAgRWRnZSBuZXdFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAorICAgICAg
ICBpZiAobmV3RWRnZS51c2VLaW5kKCkgIT0gSW50MzJLaW5kKSB7CisgICAgICAgICAgICBlZGdl
LnNldFVzZUtpbmQoS25vd25JbnQzMlVzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChuZXdFZGdlLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpOworICAgICAgICAKICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAgICAg
IG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CiAgICAgICAgIAogICAgICAgICBlZGdlID0gbmV3RWRn
ZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXhEb3VibGVFZGdlKHVuc2lnbmVkIGNoaWxkSW5k
ZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24p
CisgICAgdm9pZCBmaXhEb3VibGVFZGdlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51
bWJlclVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxh
dGlvbikKICAgICB7CiAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7Ci0gICAg
ICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoZWRnZS0+cHJlZGljdGlvbigpICYgU3BlY0RvdWJsZSkgewotICAg
ICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKERvdWJsZVVzZSk7CisgICAgICAgICAgICBlZGdlLnNl
dFVzZUtpbmQodXNlS2luZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKGNoaWxkSW5kZXgsIGRpcmVjdGlv
bik7CisgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKGVkZ2UsIGRpcmVjdGlvbik7CiAg
ICAgfQogCi0gICAgdm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSh1bnNpZ25lZCBjaGlsZElu
ZGV4LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9u
KQorICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1
c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNr
d2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hp
bGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsCiAgICAgICAgICAgICBkaXJlY3Rpb24gPT0gQmFj
a3dhcmRTcGVjdWxhdGlvbiA/IEludDMyVG9Eb3VibGUgOiBGb3J3YXJkSW50MzJUb0RvdWJsZSwK
LSAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9j
dXJyZW50Tm9kZSwgY2hpbGRJbmRleCkubm9kZSgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5ub2RlKCksIERvdWJsZVVzZSkpOworICAgICAgICBy
ZXN1bHQtPmNoaWxkMSgpLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKICAgICAgICAgCiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigKQEAg
LTU1Nyw3ICs4NDIsNDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmlu
ZGV4KCksIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCktPmluZGV4KCks
IG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CiAjZW5kaWYKIAotICAg
ICAgICBtX2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNoaWxkSW5kZXgpID0gRWRnZShyZXN1
bHQsIERvdWJsZVVzZSk7CisgICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hp
bGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgdXNlS2luZCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
dHJ1bmNhdGVDb25zdGFudFRvSW50MzIoRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIE5vZGUq
IG9sZE5vZGUgPSBlZGdlLm5vZGUoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChvbGROb2Rl
LT5oYXNDb25zdGFudCgpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVP
ZkpTQ29uc3RhbnQob2xkTm9kZSk7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKEpTQzo6
dG9JbnQzMih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5pc0ludDMy
KCkpOworICAgICAgICBlZGdlLnNldE5vZGUobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNJ
bnQzMiwgSlNDb25zdGFudCwKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4s
IE9wSW5mbyhjb2RlQmxvY2soKS0+YWRkT3JGaW5kQ29uc3RhbnQodmFsdWUpKSkpOworICAgICAg
ICBtX2dyYXBoLmRlcmVmKG9sZE5vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRydW5jYXRl
Q29uc3RhbnRzSWZOZWNlc3NhcnkoTm9kZSogbm9kZSwgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUp
CisgICAgeworICAgICAgICBpZiAobW9kZSAhPSBTcGVjdWxhdGVJbnRlZ2VyQW5kVHJ1bmNhdGVD
b25zdGFudHMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
bm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhhc0NvbnN0
YW50KCkpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCisgICAg
ICAgICAgICB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRUb0ludDMyKG5vZGUtPmNoaWxkMigp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBhdHRlbXB0VG9NYWtlSW50ZWdlckFkZChOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBtX2dyYXBoLmFk
ZFNwZWN1bGF0aW9uTW9kZShub2RlKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gRG9udFNwZWN1bGF0
ZUludGVnZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB0
cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KG5vZGUsIG1vZGUpOworICAgICAgICBub2RlLT5j
aGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIEJh
c2ljQmxvY2sqIG1fYmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw0NSArMzQ2LDE0IEBAIHZvaWQgR3JhcGg6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICB9CiB9CiAKLS8vIEZJWE1FOiBDb252ZXJ0IHRo
aXMgdG8gYmUgaXRlcmF0aXZlLCBub3QgcmVjdXJzaXZlLgotI2RlZmluZSBET19UT19DSElMRFJF
Tihub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hp
bGRyZW4oKTsgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICghIW1fdmFy
QXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
aWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAhX25vZGUtPmNoaWxk
MigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdU
b0RvKF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VS
VCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9u
b2RlLT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCiB2b2lkIEdy
YXBoOjpyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKLSAgICBET19UT19DSElMRFJFTihvcCwgcmVm
KTsKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIHJlZik7CiB9CiAKIHZv
aWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCiB7Ci0gICAgRE9fVE9fQ0hJTERSRU4o
b3AsIGRlcmVmKTsKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIGRlcmVm
KTsKIH0KIAogdm9pZCBHcmFwaDo6ZGV0aHJlYWQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBQ
dXRUb0Jhc2VPcGVyYXRpb25EYXRhIHsKIAogZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogICAg
IERvbnRTcGVjdWxhdGVJbnRlZ2VyLAotICAgIFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRj
aE92ZXJmbG93LAorICAgIFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cywKICAg
ICBTcGVjdWxhdGVJbnRlZ2VyCiB9OwogCkBAIC0xNzQsOSArMTc0LDkgQEAgcHVibGljOgogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hp
bGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElk
eCsrKQogICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZv
ckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBz
aG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShu
b2RlLT5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0
aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMygpLCBzaG91bGRHZW5l
cmF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC03ODEsNyArNzgxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUlt
bWVkaWF0ZSA+IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUlu
dGVnZXI7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihh
ZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3Zl
cmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIoYWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJBbmRU
cnVuY2F0ZUNvbnN0YW50cyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKICAg
ICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2Rl
KiB2YXJpYWJsZSwgTm9kZSogaW1tZWRpYXRlKQpAQCAtODMwLDYgKzgzMCwzNiBAQCBpbmxpbmUg
QmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5CiAgICAgcmV0dXJuICpiaW5hcnlTZWFy
Y2g8QmxvY2tJbmRleCwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5z
aXplKCksIGJ5dGVjb2RlQmVnaW4sIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOwog
fQogCisjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1Rv
RG8pIGRvIHsgICAgICAgICAgICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfbm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxk
KCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZp
cnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCisgICAgICAgICAgICAgICAgX2No
aWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgaWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0p
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbygoZ3JhcGgpLm1f
dmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7ICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBp
ZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9u
b2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMygpKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
fSB3aGlsZSAoZmFsc2UpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQzMDMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1
LDcgKzk1LDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9u
ZSkKICAgICB7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKLSAgICAgICAgQVNT
RVJUKCEhKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykgPT0gKGNoaWxkcmVuLmtpbmQoKSA9PSBB
ZGphY2VuY3lMaXN0OjpWYXJpYWJsZSkpOwogICAgIH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3Qg
YSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgpAQCAtOTk1
LDcgKzk5NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQtLTsK
ICAgICB9CiAgICAgCi0gICAgRWRnZSBjaGlsZDEoKQorICAgIEVkZ2UmIGNoaWxkMSgpCiAgICAg
ewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAg
cmV0dXJuIGNoaWxkcmVuLmNoaWxkMSgpOwpAQCAtMTAwOSwxMyArMTAwOCwxMyBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDFVbmNoZWNrZWQoKTsKICAgICB9
CiAKLSAgICBFZGdlIGNoaWxkMigpCisgICAgRWRnZSYgY2hpbGQyKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hp
bGRyZW4uY2hpbGQyKCk7CiAgICAgfQogCi0gICAgRWRnZSBjaGlsZDMoKQorICAgIEVkZ2UmIGNo
aWxkMygpCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3Mp
KTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMygpOwpAQCAtMTAzMyw2ICsxMDMyLDEy
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLm51bUNoaWxkcmVuKCk7
CiAgICAgfQogICAgIAorICAgIFVzZUtpbmQgYmluYXJ5VXNlS2luZCgpCisgICAgeworICAgICAg
ICBBU1NFUlQoY2hpbGQxKCkudXNlS2luZCgpID09IGNoaWxkMigpLnVzZUtpbmQoKSk7CisgICAg
ICAgIHJldHVybiBjaGlsZDEoKS51c2VLaW5kKCk7CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCShy
ZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxv
Y2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCi10eXBlZGVmIEFsbG9jYXRvcjxOb2RlPiBOb2RlQWxsb2Nh
dG9yOworI2lmIFVTRShKU1ZBTFVFNjQpCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCAxMTI+IE5v
ZGVBbGxvY2F0b3I7CisjZWxzZQordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgODA+IE5vZGVBbGxv
Y2F0b3I7CisjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDggKzk2LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEZvcndhcmRJbnQzMlRvRG91YmxlLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgLyogVXNlZCB0
byBzcGVjdWxhdGUgdGhhdCBhIGRvdWJsZSB2YWx1ZSBpcyBhY3R1YWxseSBhbiBpbnRlZ2VyLiAq
L1wKICAgICBtYWNybyhEb3VibGVBc0ludDMyLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICAvKiBV
c2VkIHRvIHJlY29yZCBwbGFjZXMgd2hlcmUgd2UgbXVzdCBjaGVjayBpZiBhIHZhbHVlIGlzIGEg
bnVtYmVyLiAqL1wKLSAgICBtYWNybyhDaGVja051bWJlciwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIFwKICAgICAvKiBOb2RlcyBmb3IgYXJpdGhtZXRpYyBvcGVyYXRpb25zLiAqL1wKICAgICBt
YWNybyhBcml0aEFkZCwgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQ1LDEyICs1NDUsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgo
KS5pc0Z1bmN0aW9uQ29uc3RhbnQobm9kZSk7IH0KICAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNv
bnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZSk7IH0KICAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGUqIG5v
ZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpOyB9
Ci0gICAgaW50MzJfdCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKE5vZGUqIG5vZGUpCi0g
ICAgewotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKQotICAgICAgICAgICAgcmV0
dXJuIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpOwotICAgICAgICByZXR1cm4gSlNDOjp0b0lu
dDMyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKSk7Ci0gICAgfQogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCiAgICAgdm9pZCogYWRkcmVzc09mRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkgeyBy
ZXR1cm4gbV9qaXQuYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZSk7IH0KICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR1VzZUtpbmRfaAorI2RlZmluZSBERkdVc2VLaW5kX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJT
cGVjdWxhdGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gVXNlS2luZCB7CisgICAgVW50eXBlZFVz
ZSwKKyAgICBJbnQzMlVzZSwKKyAgICBLbm93bkludDMyVXNlLAorICAgIFJlYWxOdW1iZXJVc2Us
CisgICAgTnVtYmVyVXNlLAorICAgIEtub3duTnVtYmVyVXNlLAorICAgIEJvb2xlYW5Vc2UsCisg
ICAgQ2VsbFVzZSwKKyAgICBLbm93bkNlbGxVc2UsCisgICAgT2JqZWN0VXNlLAorICAgIE9iamVj
dE9yT3RoZXJVc2UsCisgICAgRnVuY3Rpb25Vc2UsCisgICAgU3RyaW5nVXNlLAorICAgIE90aGVy
VXNlLAorICAgIExhc3RVc2VLaW5kIC8vIE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGlu
IHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxl
bWVudHMuCit9OworCitBTFdBWVNfSU5MSU5FIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3Io
VXNlS2luZCB1c2VLaW5kKQoreworICAgIHN3aXRjaCAodXNlS2luZCkgeworICAgIGNhc2UgVW50
eXBlZFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNUb3A7CisgICAgY2FzZSBJbnQzMlVzZToKKyAg
ICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAgIHJldHVybiBTcGVjSW50MzI7CisgICAgY2Fz
ZSBLbm93bkludDMyVXNlOgorICAgICAgICByZXR1cm4gU3BlY0ludDMyOworICAgIGNhc2UgUmVh
bE51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNSZWFsTnVtYmVyOworICAgIGNhc2UgTnVt
YmVyVXNlOgorICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjTnVt
YmVyOworICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNCb29sZWFuOwor
ICAgIGNhc2UgQ2VsbFVzZToKKyAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgcmV0dXJu
IFNwZWNDZWxsOworICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICByZXR1cm4gU3BlY09iamVj
dDsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT2JqZWN0
IHwgU3BlY090aGVyOworICAgIGNhc2UgRnVuY3Rpb25Vc2U6CisgICAgICAgIHJldHVybiBTcGVj
RnVuY3Rpb247CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIHJldHVybiBTcGVjU3RyaW5n
OworICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT3RoZXI7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIFNwZWNUb3A7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25h
bWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRG
Rzo6VXNlS2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdVc2VLaW5kX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188780</attachid>
            <date>2013-02-17 15:48:18 -0800</date>
            <delta_ts>2013-02-17 18:54:17 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>108220</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNDggQEAgQWJzdHJh
Y3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9v
bGVhblJlc3VsdDsKIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobV9ibG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAg
CiAgICAgbV9kaWRDbG9iYmVyID0gZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIAogICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKQoreworICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5h
dChpbmRleEluQmxvY2spKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMo
Tm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBmaWx0ZXJFZGdlQnlVc2UpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdl
cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0
KGluZGV4SW5CbG9jaykpOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSkKK3sKICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoK
ICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6IHsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
bV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSWRl
bnRpdHk6IHsKICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAgICAgCkBAIC0yNjUsMTkgKzI4MywxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlmICh2
YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSkgewogICAgICAgICAg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBjYW5FeGl0ID0g
ZmFsc2U7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3ZhcmlhYmxlcy5vcGVyYW5k
KHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CiAgICAgICAgIGlmICghdmFyaWFibGVBY2Nl
c3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkp
Ci0gICAgICAgICAgICAgICAgY2FuRXhpdCB8PSB0cnVlOworICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkp
CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgZm9yTm9kZShu
b2RlKSA9IHZhbHVlOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjg2LDM1ICszMDEsMTAgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAodmFsdWUudmFsdWUo
KSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBmb3JOb2Rl
KG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkKLSAgICAgICAgICAg
IHx8IG1fZ3JhcGguaXNDcmVhdGVkVGhpc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKSB7Ci0gICAg
ICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkuc2V0KFNwZWNEb3VibGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5
cGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24o
KTsKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzQ2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAKICAgICAgICAgbV92
YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMjIsNyArMzEyLDYgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0Lgog
ICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpLmlzQ2xlYXIoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgpAQCAtMzY2LDcgKzM1NSw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVJ
bnQzMkJpbmFyeShub2RlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgxLDE2ICszNjksMTQgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgY2FzZSBEb3VibGVBc0ludDMyOiB7CiAg
ICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwpA
QCAtNDA0LDcgKzM5MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTQyMywxNCArNDA4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAg
c3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29s
ZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMy
KTsKICAgICAgICAgYnJlYWs7CkBAIC00NDUsNyArNDIyLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCkBAIC00NTMsMTAgKzQyOSw2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIENoZWNrTnVtYmVyOgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
CiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOiB7CiAgICAgICAgIEpTVmFs
dWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CkBAIC00NjcsMzAgKzQz
OSwyNSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkp
IHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5v
ZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJF
eHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOworICAgICAg
ICBjYXNlIE51bWJlclVzZToKICAgICAgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCiAgICAgICAgICAgICAgICAgJiYgaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKICAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBWYWx1ZUFkZCkgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIHRoaXMgeWV0LiA6LSgKLSAgICAgICAgbV9pc1ZhbGlk
ID0gZmFsc2U7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgICAgIApAQCAtNTAzLDE1ICs0NzAsMTkgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRl
SW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBO
dW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZTogewpAQCAtNTIyLDE1ICs0OTMsMTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5u
ZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMlVuYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51
bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGUpOwotICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QXJpdGhNdWw6IHsKQEAgLTU0MiwyMSArNTE3LDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJC
aW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAhbm9kZUNhblRy
dW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKQotICAgICAgICAgICAgICAgIHx8
ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkK
KyAgICAgICAgICAgICAgICB8fCAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0
aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAg
aWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkKKyAgICAgICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShu
b2RlKTsKLSAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlUmVhbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwotICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhEaXY6CkBAIC01OTMsMTUgKzU3MSwxOCBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsgLy8gZm9yY2luZyBj
YW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLgorICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNl
OgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAog
ICAgIGNhc2UgQXJpdGhBYnM6IHsKQEAgLTYxMiwxNSArNTkzLDE4IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyVW5hcnkobm9kZSwgdHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwot
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoU3FydDog
ewpAQCAtNjMxLDcgKzYxNSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC02NTMsMTggKzYzNiwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOwotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQtPnByZWRp
Y3Rpb24oKSkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBC
b29sZWFuVXNlOgorICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIE51bWJlclVz
ZToKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNT
dHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsK
LSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAg
ICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC03NjIsMTQgKzc0NiwxNyBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE5vZGUq
IGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgaWYgKGlzQ2VsbFNw
ZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgaWYgKGlz
U3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjQ2VsbCk7
CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBTdHJpbmdVc2U6CisgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5
cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtODI3LDU5ICs4MTQsMTMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xl
YW4pOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxQ29uc3Rh
bnQpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbiBleGl0IGlmIHdlIGhhdmVuJ3QgZmlyZWQgdGhl
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZCB3YXRjaHBvaW50IHlldC4KLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE5vZGUqIGxl
ZnQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbm9kZS0+
Y2hpbGQyKCkubm9kZSgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBmaWx0ZXI7Ci0gICAgICAg
IFNwZWN1bGF0ZWRUeXBlQ2hlY2tlciBjaGVja2VyOwotICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkpIHsKLSAgICAgICAgICAgIGZpbHRlciA9IFNw
ZWNJbnQzMjsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc0ludDMyU3BlY3VsYXRpb247Ci0gICAg
ICAgIH0gZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkg
ewotICAgICAgICAgICAgZmlsdGVyID0gU3BlY051bWJlcjsKLSAgICAgICAgICAgIGNoZWNrZXIg
PSBpc051bWJlclNwZWN1bGF0aW9uOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0g
Q29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5n
KCkgfHwgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9IAotICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYm
IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIo
U3BlY09iamVjdCk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNP
YmplY3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIHJpZ2h0LT5zaG91bGRTcGVj
dWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3Qp
OwotICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjT2JqZWN0IHwgU3Bl
Y090aGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkgJiYgcmlnaHQtPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihTcGVjT2JqZWN0
IHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3Bl
Y09iamVjdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gCi0gICAg
ICAgICAgICBmaWx0ZXIgPSBTcGVjVG9wOwotICAgICAgICAgICAgY2hlY2tlciA9IGlzQW55U3Bl
Y3VsYXRpb247Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZpbHRlciA9IFNwZWNU
b3A7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICB9
Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhY2hlY2tlcihmb3JOb2Rl
KGxlZnQpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUocmlnaHQpLm1f
dHlwZSkpOwotICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihmaWx0ZXIpOwotICAgICAgICBm
b3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVyKTsKKyAgICAgICAgLy8gVGhpcyBpcyBvdmVybHkg
Y29uc2VydmF0aXZlLiBCdXQgdGhlIG9ubHkgdGhpbmcgdGhpcyBwcmV2ZW50cyBpcyBzdG9yZSBl
bGltaW5hdGlvbiwKKyAgICAgICAgLy8gYW5kIGhvdyBsaWtlbHkgaXMgaXQsIHJlYWxseSwgdGhh
dCB5b3UnbGwgaGF2ZSByZWR1bmRhbnQgc3RvcmVzIGFjcm9zcyBhIGNvbXBhcmlzb24KKyAgICAg
ICAgLy8gb3BlcmF0aW9uPyBDb21wYXJpc29uIG9wZXJhdGlvbnMgYXJlIHR5cGljYWxseSBhdCB0
aGUgZW5kIG9mIGJhc2ljIGJsb2Nrcywgc28KKyAgICAgICAgLy8gdW5sZXNzIHdlIGhhdmUgZ2xv
YmFsIHN0b3JlIGVsaW1pbmF0aW9uIChzdXBlciB1bmxpa2VseSBnaXZlbiBob3cgdW5wcm9maXRh
YmxlIHRoYXQKKyAgICAgICAgLy8gb3B0aW1pemF0aW9uIGlzIHRvIGJlZ2luIHdpdGgpLCB5b3Ug
YXJlbid0IGdvaW5nIHRvIGJlIHdhbnRpbmcgdG8gc3RvcmUgZWxpbWluYXRlCisgICAgICAgIC8v
IGFjcm9zcyBhbiBlcXVhbGl0eSBvcC4KKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC04OTYsNDMgKzgzNywxNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7
Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KSB7Ci0g
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnRO
b2RlLCByaWdodE5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVOdW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHRO
b2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIHJpZ2h0Tm9kZS0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0g
ICAgICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAg
ICAgICBmb3JOb2RlKHJpZ2h0Tm9kZSkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2
ZS4KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJD
b2RlQXQ6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0No
YXJBdDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC05NTIsMTUgKzg2
NywxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNT
dHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKQEAgLTk2OCw3ICs4ODAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsK
ICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKQEAgLTk4MCw0
OCArODkxLDM4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0
QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMDQ1LDEwNCArOTQ2LDIzIEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQog
ICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlm
IChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIo
U3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwotICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAg
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1i
ZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChj
aGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0
ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAg
IGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5m
aWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
Q2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBDUkFTSCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xMTUwLDE2ICs5NzAs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICAKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY1Jl
YWxOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9y
aWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY051bWJl
cik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE3MiwxMSArOTgyLDYgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBSZWdFeHBF
eGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAg
ICAgICAgICAgICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIApAQCAtMTIwMSwyNCArMTAwNiwxMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIGNvbnN0YW50IHByb3BhZ2F0aW9uLCBidXQg
d2UgY2FuIGRvIGJldHRlcjoKICAgICAgICAgLy8gV2UgY2FuIHNwZWNpYWxpemUgdGhlIHNvdXJj
ZSB2YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2ggZGlyZWN0aW9uIG9mCiAgICAgICAgIC8vIHRoZSBi
cmFuY2guCi0gICAgICAgIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChj
aGlsZC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZCkuZmlsdGVyKFNw
ZWNPYmplY3QgfCBTcGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUp
OwotICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2ZS4KICAgICAgICAgbV9icmFuY2hE
aXJlY3Rpb24gPSBUYWtlQm90aDsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAg
CiAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgVGhyb3c6CkBAIC0xMjI4LDE3ICsxMDIyLDE0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFRvUHJpbWl0aXZlOiB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwotICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShjaGls
ZCkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkQ29uc3QgJiYgY2hpbGRDb25zdC5p
c051bWJlcigpICYmIHRyeVNldENvbnN0YW50KG5vZGUsIGNoaWxkQ29uc3QpKSB7CiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IEludDMyVXNlKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyNzMsMzkgKzEwNjQs
MTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGRlc3RpbmF0aW9uLnNl
dCh0eXBlKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgU3RyQ2F0OgotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheToKICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGlu
Z1R5cGUoKSkgewotICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTExfVU5E
RUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5udW1DaGls
ZHJlbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsg
b3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RD
aGlsZCgpICsgb3BlcmFuZEluZGV4XSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBub2RlLT5u
dW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSW5kZXhd
KS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0
aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0
cnVlOwogICAgICAgICBicmVhazsKQEAgLTEzMTgsNyArMTA4NSw2IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKIAogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToK
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNBcnJheSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVh
azsKQEAgLTEzNDUsMzIgKzExMTEsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlvbihjaGlsZC0+
cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgc291cmNlLmZpbHRlcihTcGVjT3RoZXIpOwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNl
IE90aGVyVXNlOgogICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNPYmplY3RPdGhlcik7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlz
T2JqZWN0U3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIHNv
dXJjZS5maWx0ZXIoU3BlY09iamVjdCk7CisgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAg
ICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKLSAgICAgICAgZGVzdGluYXRpb24ubWVyZ2Uo
U3BlY09iamVjdE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBDcmVh
dGVUaGlzOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUo
bm9kZSk7Ci0gICAgICAgIAotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxh
dGlvbihzb3VyY2UubV90eXBlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc291cmNlLmZpbHRl
cihTcGVjRnVuY3Rpb24pOwotICAgICAgICBkZXN0aW5hdGlvbi5zZXQoU3BlY0ZpbmFsT2JqZWN0
KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ZpbmFsT2JqZWN0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTEzNzksMTkgKzExMzksMTYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgTmV3T2JqZWN0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRl
QWN0aXZhdGlvbjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9y
aWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMg
PSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBcmd1bWVu
dHM6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5h
cmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwog
ICAgICAgICBicmVhazsKQEAgLTE0MDUsMTAgKzExNjIsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6
CiAgICAgICAgIGlmIChpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgbV92YXJp
YWJsZXMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkgewotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRz
UmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpCiAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
QEAgLTE0MjgsNyArMTE4NCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudHNM
ZW5ndGhTYWZlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgLy8g
VGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgYXJndW1lbnRz
IG9iamVjdCBoYWQgYSBnZXR0ZXIKICAgICAgICAgLy8gaW5zdGFsbGVkIG9uIHRoZSBsZW5ndGgg
cHJvcGVydHkuCiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwpAQCAtMTQ0Miw3ICsxMTk3LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRv
ZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKICAgICAgICAg
Ly8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgZW5kcyB1cCBiZWluZyBmdXJ0
aGVyIG9wdGltaXplZCBieSB0aGUKICAgICAgICAgLy8gQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS4KLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCkBAIC0xNDUxLDggKzEyMDUsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVj
dHVyZXMgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMKICAgICAgICAgLy8gYSBn
ZXR0ZXIuIFdlIGRvbid0IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCiAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAvLyBCdXQgd2Ug
ZG8gc3BlY3VsYXRlIHRoYXQgdGhlIGluZGV4IGlzIGFuIGludGVnZXIuCi0gICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAvLyBBbmQgdGhl
IHJlc3VsdCBpcyB1bmtub3duLgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAg
ICAgICAgYnJlYWs7CkBAIC0xNDYwLDI5ICsxMjEyLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3
RnVuY3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+ZnVuY3Rpb25TdHJ1
Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToK
LSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFNl
dENhbGxlZToKICAgICBjYXNlIFNldE15U2NvcGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0U2NvcGU6
IC8vIEZJWE1FOiBXZSBjb3VsZCBnZXQgcmlkIG9mIHRoZXNlIGlmIHdlIGtub3cgdGhhdCB0aGUg
SlNGdW5jdGlvbiBpcyBhIGNvbnN0YW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2MjAyCiAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgIGNhc2UgU2tpcFRvcFNj
b3BlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0NlbGxPdGhlcik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTa2lw
U2NvcGU6IHsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIEpTVmFs
dWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAo
Y2hpbGQgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNo
aWxkLmFzQ2VsbCgpKS0+bmV4dCgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwpAQCAtMTQ5MywxOCArMTI0MCwxNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgfQogCiAgICAgY2FzZSBHZXRTY29wZVJlZ2lzdGVyczoKLSAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsg
Ly8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIEdldFNjb3BlZFZhcjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgUHV0U2NvcGVkVmFyOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLT5jb2RlT3JpZ2luKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE1MTYsOCArMTI1OSw2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKLQogICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAg
ICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwgc3RydWN0dXJlLApAQCAtMTU1
Myw3ICsxMjk0LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAvLyBtb3JlIHRob3JvdWdobHkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDYyMDAKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGVsaW1pbmF0ZSB0
aGVzZSBlbnRpcmVseSBpZiB3ZSBrbm93IHRoZSBleGFjdCB2YWx1ZSB0aGF0IGZsb3dzIGludG8g
dGhpcy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNjIwMQotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwp
OwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9
CkBAIC0xNTYyLDYgKzEzMDIsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2Yg
Y29uc3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5
cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBl
bnN1cmVkIHRoaXMuCiAgICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJlIGNoZWNrIGlzIGF0dGVt
cHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgogICAgICAgICAvLyB0aGUg
ZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0YW50IGZvbGRpbmcgcGhh
c2Ugc2hvdWxkCiAgICAgICAgIC8vIHR1cm4gdGhpcyBpbnRvIGEgd2F0Y2hwb2ludCBpbnN0ZWFk
LgpAQCAtMTU2OSw5ICsxMzEwLDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1
YnNldE9mKHNldCkKICAgICAgICAgICAgIHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
LmlzU3Vic2V0T2Yoc2V0KSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgIXZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSkpOworICAgICAgICBpZiAoIXZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CiAgICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTg5LDcgKzEzMjksNiBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIGluZmluaXR5IG9m
IHN0cnVjdHVyZXMuCiAgICAgICAgIEFTU0VSVCh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkpOwogICAgICAg
ICAKLSAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2xlYXIoKSB8fCBpc0NlbGxTcGVjdWxhdGlvbih2
YWx1ZS5tX3R5cGUpKTsgLy8gVmFsdWUgY291bGQgYmUgY2xlYXIgaWYgd2UndmUgcHJvdmVuIG11
c3QtZXhpdCBkdWUgdG8gYSBzcGVjdWxhdGlvbiBzdGF0aWNhbGx5IGtub3duIHRvIGJlIGJhZC4K
ICAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZl
U3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CkBAIC0x
NTk4LDcgKzEzMzcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21Q
dXRTdHJ1Y3R1cmU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBp
ZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xl
YXIoKSkgewogICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChub2RlLT5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CkBAIC0xNjA4LDE0ICsxMzQ2LDExIEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIEdldEJ1dHRlcmZs
eToKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZSku
Y2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDaGVja0FycmF5OiB7CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsK
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBi
eSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBp
cyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCkBAIC0xNjI4LDcgKzEz
NjMsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwpAQCAtMTY3Nyw5ICsxNDEx
LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBB
U1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpDb252ZXJ0CiAg
ICAgICAgICAgICB8fCBub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OlJh
Z2VDb252ZXJ0KTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+YXJyYXlN
b2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKQEAgLTE2OTIsMzUgKzE0MjMsMjAgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmIChu
b2RlLT5jaGlsZDIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwog
ICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U6IHsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5v
ZGUobm9kZSkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7IAogICAgIH0KICAgICBjYXNlIEdldEJ5
T2Zmc2V0OgotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkp
IHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OiB7Ci0gICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwotICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGNhbkV4
aXQgfD0gIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSk7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwot
ICAgICAgICB9Ci0gICAgICAgIGNhbkV4aXQgfD0gIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMTc2NCwxMiArMTQ4MCwxMCBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
PmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIApAQCAtMTc3OSwzNCArMTQ5MywyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICBj
YXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBw
cm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIC8vIEFnYWluLCBzYWRseSwgd2UgZG9uJ3Qg
cHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJbnN0YW5jZU9mCi0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9l
cyBhbiB1bmNvbmRpdGlvbmFsIGNlbGwKLSAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKLSAgICAgICAgaWYgKCEobm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4p
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2Ug
Rmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2lu
dDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgpAQCAtMTgzNCw3ICsxNTM3LDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAg
ICAgY2FzZSBOb3A6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIExhc3RO
b2RlVHlwZToKQEAgLTE4NDUsNiArMTU0NywxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgcmV0dXJuIG1faXNWYWxpZDsKIH0KIAorYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICBOb2RlKiBub2Rl
ID0gbV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICBpZiAoIXN0YXJ0RXhlY3V0aW5nKG5v
ZGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBleGVjdXRlRWRnZXMobm9kZSk7
CisgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7Cit9CisKIGlu
bGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2spCiB7CiAgICAgY2xvYmJlckNhcHR1cmVk
VmFycyhjb2RlT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw1
MiBAQCBwdWJsaWM6CiAgICAgLy8gaWYgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBwYXN0IHRo
aXMgbm9kZS4gTm90YWJseSwgaXQgd2lsbCByZXR1cm4gdHJ1ZQogICAgIC8vIGZvciBibG9jayB0
ZXJtaW5hbHMsIHNvIGxvbmcgYXMgdGhvc2UgdGVybWluYWxzIGFyZSBub3QgUmV0dXJuIG9yIHZh
cmlhbnRzCiAgICAgLy8gb2YgVGhyb3cuCi0gICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkKTsKKyAg
ICAvLworICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBiZSBlcXVpdmFsZW50IHRvIGRvaW5n
OgorICAgIC8vCisgICAgLy8gaWYgKHN0YXRlLnN0YXJ0RXhlY3V0aW5nKGluZGV4KSkgeworICAg
IC8vICAgICBzdGF0ZS5leGVjdXRlRWRnZXMoaW5kZXgpOworICAgIC8vICAgICByZXN1bHQgPSBz
dGF0ZS5leGVjdXRlRWZmZWN0cyhpbmRleCk7CisgICAgLy8gfSBlbHNlCisgICAgLy8gICAgIHJl
c3VsdCA9IHRydWU7CisgICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7Cisg
ICAgCisgICAgLy8gSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbiBvZiB0aGUgbm9kZS4g
SXQgcmVzZXRzIGFueSBzdGF0ZSBpbiB0aGUgbm9kZSwKKyAgICAvLyB0aGF0IGlzIHByb2dyZXNz
aXZlbHkgYnVpbHQgdXAgYnkgZXhlY3V0ZUVkZ2VzKCkgYW5kIGV4ZWN1dGVFZmZlY3RzKCkuIElu
CisgICAgLy8gcGFydGljdWxhciwgdGhpcyByZXNldHMgY2FuRXhpdCgpLCBzbyBpZiB5b3Ugd2Fu
dCB0byAia25vdyIgYmV0d2VlbiBjYWxscyBvZgorICAgIC8vIHN0YXJ0RXhlY3V0aW5nKCkgYW5k
IGV4ZWN1dGVFZGdlcygpL0VmZmVjdHMoKSB3aGV0aGVyIHRoZSBsYXN0IHJ1biBvZiB0aGUKKyAg
ICAvLyBhbmFseXNpcyBjb25jbHVkZWQgdGhhdCB0aGUgbm9kZSBjYW4gZXhpdCwgeW91IHNob3Vs
ZCBwcm9iYWJseSBzZXQgdGhhdAorICAgIC8vIGluZm9ybWF0aW9uIGFzaWRlIHByaW9yIHRvIGNh
bGxpbmcgc3RhcnRFeGVjdXRpbmcoKS4KKyAgICB2b2lkIHN0YXJ0RXhlY3V0aW5nKE5vZGUqKTsK
KyAgICB2b2lkIHN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgCisg
ICAgLy8gQWJzdHJhY3RseSBleGVjdXRlIHRoZSBlZGdlcyBvZiB0aGUgZ2l2ZW4gbm9kZS4gVGhp
cyBydW5zIGZpbHRlckVkZ2VCeVVzZSgpCisgICAgLy8gb24gYWxsIGVkZ2VzIG9mIHRoZSBub2Rl
LiBZb3UgY2FuIHNraXAgdGhpcyBzdGVwLCBpZiB5b3UgaGF2ZSBhbHJlYWR5IHVzZWQKKyAgICAv
LyBmaWx0ZXJFZGdlQnlVc2UoKSAob3Igc29tZSBlcXVpdmFsZW50KSBvbiBlYWNoIGVkZ2UuCisg
ICAgdm9pZCBleGVjdXRlRWRnZXMoTm9kZSopOworICAgIHZvaWQgZXhlY3V0ZUVkZ2VzKHVuc2ln
bmVkIGluZGV4SW5CbG9jayk7CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckVk
Z2VCeVVzZShFZGdlIGVkZ2UpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAg
c3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6Cisg
ICAgICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgor
ICAgICAgICAgICAgQVNTRVJUKCEoZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZUZpbHRlckZv
cihlZGdlLnVzZUtpbmQoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVECisgICAgICAgIAorICAgICAgICBmaWx0ZXJCeVR5cGUoZWRnZS5ub2RlKCksIHR5cGVGaWx0
ZXJGb3IoZWRnZS51c2VLaW5kKCkpKTsKKyAgICB9CisgICAgCisgICAgLy8gQWJzdHJhY3RseSBl
eGVjdXRlIHRoZSBlZmZlY3RzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlzIGNoYW5nZXMgdGhlIGFi
c3RyYWN0CisgICAgLy8gc3RhdGUgYXNzdW1pbmcgdGhhdCBlZGdlcyBoYXZlIGFscmVhZHkgYmVl
biBmaWx0ZXJlZC4KKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayk7CisgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUq
KTsKICAgICAKICAgICAvLyBEaWQgdGhlIGxhc3QgZXhlY3V0ZWQgbm9kZSBjbG9iYmVyIHRoZSB3
b3JsZD8KICAgICBib29sIGRpZENsb2JiZXIoKSBjb25zdCB7IHJldHVybiBtX2RpZENsb2JiZXI7
IH0KQEAgLTI1OSw2ICszMDQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmaWx0ZXJCeVR5cGUoTm9kZSogbm9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAgaWYgKHZhbHVlLm1fdHlwZSAmIH50eXBlKQor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgdmFsdWUuZmlsdGVy
KHR5cGUpOworICAgIH0KKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEdy
YXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0
LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3Vs
ZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90CisgICAgICAg
IC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2
MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOwog
ICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7
CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24g
MTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFkamFjZW5jeUxp
c3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7CiAgICAgICAg
IGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2Rl
ZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU4LDE4ICs1NSwxMiBAQCBwdWJsaWM6CiAgICAgfQogICAg
IAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxk
MiwgTm9kZSogY2hpbGQzKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBtX2tpbmQo
Rml4ZWQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9
PSBGaXhlZCk7CiAgICAgICAgIGluaXRpYWxpemUoY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAg
ICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCB1bnNpZ25lZCBmaXJzdENo
aWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAg
IDogbV9raW5kKFZhcmlhYmxlKQotI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VE
KGtpbmQsIGtpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBzZXRGaXJzdENoaWxkKGZpcnN0Q2hp
bGQpOwpAQCAtNzksMjEgKzcwLDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBFZGdlJiBjaGlsZCh1
bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsKLSAgICAg
ICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzW2ldOwog
ICAgIH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQodW5zaWduZWQgaSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwog
ICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRDaGls
ZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAgewogICAgICAgICBBU1NFUlQoaSA8IFNp
emUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgbV93b3Jkc1tp
XSA9IG5vZGVVc2U7CiAgICAgfQogICAgIApAQCAtMTI1LDkgKzExMyw2IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAg
ICBtX2tpbmQgPSBGaXhlZDsKLSNlbmRpZgogICAgICAgICBpbml0aWFsaXplKCk7CiAgICAgfQog
ICAgIApAQCAtMTQyLDM0ICsxMjcsMjQgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZmlyc3RD
aGlsZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsK
ICAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZDsKICAgICB9CiAgICAgdm9p
ZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCiAgICAgewotICAgICAgICBBU1NF
UlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1swXS5tX2VuY29kZWRXb3Jk
ID0gZmlyc3RDaGlsZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oKSBj
b25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAg
IHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CiAgICAgfQogICAgIHZvaWQgc2V0TnVt
Q2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBBU1NFUlQobV9r
aW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1sxXS5tX2VuY29kZWRXb3JkID0gbnVt
Q2hpbGRyZW47CiAgICAgfQogICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBLaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSNlbmRpZgogcHJpdmF0ZToKICAgICBFZGdl
IG1fd29yZHNbU2l6ZV07Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQgbV9raW5kOwot
I2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDcgKzQzLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vICAgYW55dGhp
bmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgogLy8gLSBZb3UgY2FsbCBm
cmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2UgZnJlZUFs
bCgpLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gZm9yY2VkQ2VsbFNpemU6IHNldCB0aGlz
IHRvIDAgaWYgeW91J3JlIGhhcHB5IHdpdGggdGhlIGRlZmF1bHQgYWxpZ25tZW50LCBvciBzZXQg
aXQKKy8vIHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91IHdhbnQgdG8gZm9yY2libHkgYWxpZ24g
dGhlIGFsbG9jYXRpb25zIHRvIGEgY2VydGFpbgorLy8gdmFsdWUuIFdoZW4geW91IGRvIHRoaXMs
IEFsbG9jYXRvciB3aWxsIEFTU0VSVCB0aGF0IGZvcmNlZENlbGxBbGlnbm1lbnQgPj0gc2l6ZW9m
KFQpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50
PgogY2xhc3MgQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICBBbGxvY2F0b3IoKTsKQEAgLTYzLDEz
ICs2NywyNCBAQCBwcml2YXRlOgogICAgIHZvaWQqIGJ1bXBBbGxvY2F0ZSgpOwogICAgIHZvaWQq
IGZyZWVMaXN0QWxsb2NhdGUoKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3coKTsKLQorICAgIAor
ICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoKQorICAgIHsKKyAgICAgICAgaWYgKCFmb3JjZWRD
ZWxsQWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihUKTsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVChmb3JjZWRDZWxsQWxpZ25tZW50ID49IHNpemVvZihUKSk7CisgICAgICAg
IHJldHVybiBmb3JjZWRDZWxsQWxpZ25tZW50OworICAgIH0KKyAgICAKICAgICBzdHJ1Y3QgUmVn
aW9uIHsKICAgICAgICAgc3RhdGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBLQjsgfQot
ICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXpl
b2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVy
T2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNp
emVvZihUKTsgfQotICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQotICAgICAgICBib29s
IGlzSW5UaGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7IH0K
KyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3RkOjptYXgoc2l6
ZW9mKFJlZ2lvbiksIGNlbGxTaXplKCkpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBudW1i
ZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBoZWFkZXJTaXplKCkpIC8g
Y2VsbFNpemUoKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IHBheWxvYWRTaXplKCkgeyByZXR1
cm4gbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSAqIGNlbGxTaXplKCk7IH0KKyAgICAgICAgY2hh
ciogcGF5bG9hZEJlZ2luKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhl
YWRlclNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkRW5kKCkgeyByZXR1cm4gcGF5bG9h
ZEJlZ2luKCkgKyBwYXlsb2FkU2l6ZSgpOyB9CisgICAgICAgIGJvb2wgaXNJblRoaXNSZWdpb24o
Y29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihiaXR3aXNlX2Nh
c3Q8Y2hhcio+KHBvaW50ZXIpIC0gcGF5bG9hZEJlZ2luKCkpIDwgcGF5bG9hZFNpemUoKTsgfQog
ICAgICAgICBzdGF0aWMgUmVnaW9uKiByZWdpb25Gb3IoY29uc3QgVCogcG9pbnRlcikgeyByZXR1
cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIp
ICYgfihzaXplKCkgLSAxKSk7IH0KICAgICAgICAgCiAgICAgICAgIFBhZ2VBbGxvY2F0aW9uQWxp
Z25lZCBtX2FsbG9jYXRpb247CkBAIC04MiwyNiArOTcsMjYgQEAgcHJpdmF0ZToKICAgICAKICAg
ICBSZWdpb24qIG1fcmVnaW9uSGVhZDsKICAgICB2b2lkKiogbV9mcmVlTGlzdEhlYWQ7Ci0gICAg
VCogbV9idW1wRW5kOwotICAgIHVuc2lnbmVkIG1fYnVtcFJlbWFpbmluZzsKKyAgICBjaGFyKiBt
X2J1bXBFbmQ7CisgICAgc2l6ZV90IG1fYnVtcFJlbWFpbmluZzsKIH07CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+OjpBbGxvY2F0b3IoKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lubGluZSBBbGxvY2F0b3I8
VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OkFsbG9jYXRvcigpCiAgICAgOiBtX3JlZ2lvbkhlYWQo
MCkKICAgICAsIG1fZnJlZUxpc3RIZWFkKDApCiAgICAgLCBtX2J1bXBSZW1haW5pbmcoMCkKIHsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46On5BbGxvY2F0
b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4K
K2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46On5BbGxvY2F0b3IoKQog
ewogICAgIHJlc2V0KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5F
IHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5z
aWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9y
PFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCogcmVzdWx0
ID0gYnVtcEFsbG9jYXRlKCk7CiAgICAgaWYgKExJS0VMWSghIXJlc3VsdCkpCkBAIC0xMDksOCAr
MTI0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYQogICAgIHJl
dHVybiBmcmVlTGlzdEFsbG9jYXRlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lk
IEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNp
Z25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFs
aWdubWVudD46OmZyZWUoVCogb2JqZWN0KQogewogICAgIG9iamVjdC0+flQoKTsKICAgICAKQEAg
LTExOSw4ICsxMzQsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCiAgICAg
bV9mcmVlTGlzdEhlYWQgPSBjZWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBB
bGxvY2F0b3I8VD46OmZyZWVBbGwoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9y
Y2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+
OjpmcmVlQWxsKCkKIHsKICAgICBpZiAoIW1fcmVnaW9uSGVhZCkgewogICAgICAgICBBU1NFUlQo
IW1fYnVtcFJlbWFpbmluZyk7CkBAIC0xNDIsOCArMTU3LDggQEAgdm9pZCBBbGxvY2F0b3I8VD46
OmZyZWVBbGwoKQogICAgIHN0YXJ0QnVtcGluZ0luKG1fcmVnaW9uSGVhZCk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQoKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQs
IGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpyZXNldCgpCiB7CiAgICAgZnJlZVJlZ2lvbnNTdGFydGlu
Z0F0KG1fcmVnaW9uSGVhZCk7CiAgICAgCkBAIC0xNTIsMzggKzE2NywzOCBAQCB2b2lkIEFsbG9j
YXRvcjxUPjo6cmVzZXQoKQogICAgIG1fYnVtcFJlbWFpbmluZyA9IDA7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci11bnNpZ25lZCBBbGxvY2F0b3I8VD46OmluZGV4T2YoY29uc3QgVCogb2Jq
ZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4K
K3Vuc2lnbmVkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6aW5kZXhPZihjb25z
dCBUKiBvYmplY3QpCiB7CiAgICAgdW5zaWduZWQgYmFzZUluZGV4ID0gMDsKICAgICBmb3IgKFJl
Z2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdpb247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9u
ZXh0KSB7CiAgICAgICAgIGlmIChyZWdpb24tPmlzSW5UaGlzUmVnaW9uKG9iamVjdCkpCi0gICAg
ICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAoYml0d2lzZV9jYXN0PGNoYXIqPihvYmplY3Qp
IC0gcmVnaW9uLT5wYXlsb2FkQmVnaW4oKSkgLyBjZWxsU2l6ZSgpOwogICAgICAgICBiYXNlSW5k
ZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwogICAgIH0KICAgICBDUkFT
SCgpOwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQWxsb2NhdG9y
PFQ+KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBbGxvY2F0b3I8VCwg
Zm9yY2VkQ2VsbEFsaWdubWVudD4qIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6
YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHJldHVybiBSZWdpb246OnJlZ2lv
bkZvcihvYmplY3QpLT5tX2FsbG9jYXRvcjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFM
V0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjpidW1wQWxsb2NhdGUoKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUg
dm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpidW1wQWxsb2NhdGUoKQog
ewotICAgIGlmICh1bnNpZ25lZCByZW1haW5pbmcgPSBtX2J1bXBSZW1haW5pbmcpIHsKLSAgICAg
ICAgcmVtYWluaW5nLS07CisgICAgaWYgKHNpemVfdCByZW1haW5pbmcgPSBtX2J1bXBSZW1haW5p
bmcpIHsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplKCk7CiAgICAgICAgIG1fYnVtcFJl
bWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1haW5p
bmcgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1haW5pbmcgKyBjZWxsU2l6
ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12
b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCoqIHJlc3Vs
dCA9IG1fZnJlZUxpc3RIZWFkOwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKQEAgLTE5Miw4
ICsyMDcsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkKiBBbGxvY2F0b3I8
VD46OmFsbG9jYXRlU2xvdygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRD
ZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+Ojph
bGxvY2F0ZVNsb3coKQogewogICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOwogICAgIEFTU0VS
VCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTIxNiw4ICsyMzEsOCBAQCB2b2lkKiBBbGxvY2F0b3I8
VD46OmFsbG9jYXRlU2xvdygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQodHlwZW5h
bWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVu
c2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxs
QWxpZ25tZW50Pjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KHR5cGVuYW1lIEFsbG9jYXRvcjxULCBm
b3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24pCiB7CiAgICAgd2hpbGUgKHJlZ2lv
bikgewogICAgICAgICBSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb24tPm1fbmV4dDsKQEAgLTIy
NiwxMSArMjQxLDExIEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6c3Rh
cnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9j
YXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5hbWUgQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsKLSAgICBt
X2J1bXBFbmQgPSByZWdpb24tPmRhdGEoKSArIFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdp
b24oKTsKLSAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVn
aW9uKCk7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5wYXlsb2FkRW5kKCk7CisgICAgbV9idW1w
UmVtYWluaW5nID0gUmVnaW9uOjpwYXlsb2FkU2l6ZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjYsNyArMTQ2
Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRoLm1pbih4KQogICAgICAg
ICAvLyBGSVhNRTogd2hhdCB3ZSdkIHJlYWxseSBsaWtlIGlzIGEgVmFsdWVUb051bWJlciwgZXhj
ZXB0IHdlIGRvbid0IHN1cHBvcnQgdGhhdCByaWdodCBub3cuIE9oIHdlbGwuCiAgICAgICAgIE5v
ZGUqIHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKTsK
LSAgICAgICAgYWRkVG9HcmFwaChDaGVja051bWJlciwgcmVzdWx0KTsKKyAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVyVXNlKSk7CiAgICAgICAgIHNldEludHJp
bnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCByZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEyICs4Myw2IEBAIHN0cnVjdCBOb2RlUG9pbnRl
clRyYWl0cyB7CiAgICAgc3RhdGljIHZvaWQgZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0m
IG91dCk7CiB9OwogCi1lbnVtIFVzZUtpbmQgewotICAgIFVudHlwZWRVc2UsCi0gICAgRG91Ymxl
VXNlLAotICAgIExhc3RVc2VLaW5kIC8vIE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGlu
IHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxl
bWVudHMuCi19OwotCiAvLyBVc2UgUmVmQ2hpbGRyZW4gaWYgdGhlIGNoaWxkIHJlZiBjb3VudHMg
aGF2ZW4ndCBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQgdXNpbmcKIC8vIG90aGVyIG1lYW5zIGFuZCBl
aXRoZXIgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgogLy8gLSBUaGUgbm9kZSB5b3UncmUgY3Jl
YXRpbmcgaXMgTXVzdEdlbmVyYXRlLgpAQCAtMTA2LDE5ICsxMDAsNiBAQCBlbnVtIFJlZk5vZGVN
b2RlIHsKICAgICBEb250UmVmTm9kZQogfTsKIAotaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRU
b1N0cmluZyhVc2VLaW5kIHVzZUtpbmQpCi17Ci0gICAgc3dpdGNoICh1c2VLaW5kKSB7Ci0gICAg
Y2FzZSBVbnR5cGVkVXNlOgotICAgICAgICByZXR1cm4gIiI7Ci0gICAgY2FzZSBEb3VibGVVc2U6
Ci0gICAgICAgIHJldHVybiAiZCI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiBpbmxpbmUg
Ym9vbCBpc0FSTXY3cygpCiB7CiAjaWYgQ1BVKEFQUExFX0FSTVY3UykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRWRnZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCh1c2VLaW5kVG9TdHJpbmco
dXNlS2luZCgpKSwgbm9kZSgpKTsKKyAgICBvdXQucHJpbnQodXNlS2luZCgpLCAiOiIsIG5vZGUo
KSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVO
QUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHVXNl
S2luZC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTk2LDcgKzk3
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsK
ICAgICAKLSAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiAyOyB9CisgICAgc3Rh
dGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQogICAgIAogICAgIHN0YXRpYyB1aW50
cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24g
MTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBy
dW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEJl
Zm9yZUZpeHBvaW50KTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVk
Q1BTKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAg
ICAgICAgICBmaXh1cEJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc2LDUwICs3OSwyNjUgQEAgcHJpdmF0ZToKICNlbmRp
ZgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEdldEJ5SWQ6
IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBv
aW50KQorICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpCisgICAgICAgICAgICAg
ICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlz
SW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKHZh
cmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCksIE51bWJlclVzZSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRl
bnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVk
VHlwZSkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBl
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkp
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBCaXRBbmQ6CisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAg
ICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNh
c2UgQml0VVJTaGlmdDogeworICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJl
cjogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkludDMyVXNl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBEb3VibGVBc0ludDMyOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIFZhbHVlVG9JbnQzMjogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZs
YWdzKE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9k
ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFy
cmF5UHJvZmlsZSA9IAotICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgICAgIEFycmF5TW9k
ZSBhcnJheU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOwot
ICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgICAgIGFycmF5UHJv
ZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+Y29kZU9yaWdpbikpOwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFycmF5
TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKLSAg
ICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkp
OwotICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJh
eVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVj
dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKERvdWJsZVVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFn
cyhOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkg
eworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6IHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAgICAgICAgIGlmIChhdHRl
bXB0VG9NYWtlSW50ZWdlckFkZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAg
ICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7Cisg
ICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUp
KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aERpdjogeworICAg
ICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIGlm
IChpc1g4NigpIHx8IGlzQVJNdjdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBh
cnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCks
IG5vZGUtPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0
c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShub2Rl
LT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIHJl
Zidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9tCisg
ICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgorICAgICAgICAgICAgICAg
IE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3Bl
Y0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUt
PnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmlu
aXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVkZ2Uo
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlLT5zZXRPcChHZXRB
cnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0
R2VuZXJhdGUpOwotICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsK
LSAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0Fy
cmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAw
LCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAg
ICAgaWYgKCFzdG9yYWdlKQorICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNlIEFy
aXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3Bl
Y3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2lu
ZChJbnQzMlVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdl
KHN0b3JhZ2UpOworICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAgICAg
ICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJy
YXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
aXRoU3FydDogeworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
TG9naWNhbE5vdDogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBlbHNlIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHlwZU9mOiB7CisgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6
CisgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgQ29tcGFyZUxl
c3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJlR3Jl
YXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOiB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBDb21hcHJlRXFDb25zdGFudCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENvbXBhcmVFcSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0
ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0
VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3Qo
KSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkg
eworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRl
U3RyaW5nKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRV
c2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIC8vIEN1
cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgorICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5nKSk7
CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5j
aGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAg
IGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAgICAg
ICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCkBAIC0xMjcsNyArMzQ1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24o
KSwKICAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwg
bm9kZS0+Y2hpbGQyKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwog
ICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQpAQCAtMTM4
LDEzICszNTYsNzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhKG5vZGUtPmZsYWdz
KCkgJiBOb2RlVXNlZEFzT3RoZXIpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9k
ZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAgICAg
ICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNp
ZGVkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNh
c2UgU3RyaW5nQ2hhckF0OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAgICAg
ICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNl
LgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJh
eTo6U3RyaW5nKSk7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxk
MSgpLCBub2RlLT5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRC
eVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICBFZGdlIGNo
aWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdlIGNo
aWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdlIGNo
aWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CisKKyAgICAgICAgICAgIG5vZGUt
PnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUo
CisgICAgICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAg
ICAgICAgICBjaGlsZDItPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQz
LT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJheU9w
ZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9kZUZv
clB1dCgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVk
aWN0aW9uczoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCksIFJlYWxOdW1iZXJVc2UpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5
OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5Ogor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNl
KTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMygpLnNldFVzZUtpbmQoSW50MzJVc2Up
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRn
ZShub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0
QXJyYXk6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNl
bGxVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJV
c2UpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCkBAIC0xNjMsMTEgKzQ0NSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAg
ICAgICAgICAgIFNwZWNJbnQzMiwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkt
PnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5j
aGlsZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9k
ZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2lu
ZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFy
cmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0x
NzYsNTggKzQ2MiwyNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKLSAgICAgICAgICAgICAg
ICAmJiBub2RlLT5tdXN0R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFy
RmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihu
b2RlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9k
ZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgY2Fz
ZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNoaWZ0Ogot
ICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7Ci0gICAg
ICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAg
ICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0g
ICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7
Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgorICAg
ICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKENl
bGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MCk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5V
c2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZU9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNhbE5vdCA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90LT5vcCgp
ID09IExvZ2ljYWxOb3QKQEAgLTI3MCwxNDkgKzUyNSwxNzggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZXRMb2Nh
bDogewotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNwZWN1bGF0
aW9uKTsKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNh
c2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpCisgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspIHsK
KyAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCisgICAgICAgICAgICAgICAg
ICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IGkpLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5udW1DaGlsZHJlbigpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4
IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCisgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5k
SW5kZXhdLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVt
Q2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSW5kZXhdLnNldFVz
ZUtpbmQoUmVhbE51bWJlclVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICAgICAg
aWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKQotICAgICAgICAgICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKDEpOworICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAg
ICAgICAgY2FzZSBDb252ZXJ0VGhpczogeworICAgICAgICAgICAgaWYgKGlzT3RoZXJTcGVjdWxh
dGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKE90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlz
T2JqZWN0U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpCisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTWlu
OgotICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAg
ICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMSk7CisgICAgICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChGdW5jdGlvblVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAg
IGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CisgICAg
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSB8fCBpc0FSTXY3cygp
KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQz
MlRvRG91YmxlTm9kZSgwKTsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9k
ZSgxKTsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBv
biB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KLSAgICAgICAg
ICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9kZSog
bmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91Ymxl
LCAqbm9kZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0T3Ao
RG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6
ZShFZGdlKG5ld0RpdmlzaW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdl
KDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgorICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKKyAg
ICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CisgICAgICAgIGNhc2UgU2tpcFNjb3BlOiB7CisgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhB
YnM6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgY2FzZSBHZXRCeUlkOiB7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgaWYgKCFpc0ludDMy
U3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVy
TnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICAg
ICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKKyAgICAgICAgICAgICAgICBtX2dyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUo
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RV
c2luZ1ByZWRpY3Rpb25zKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsKKyAgICAg
ICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAg
ICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5
OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJl
ZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwg
bm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnN1cHBv
cnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5l
eHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghYXJy
YXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+Y2xlYXJG
bGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1v
ZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJh
eShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwg
bGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAg
IGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3FydDogewot
ICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6
IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgp
KQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
UHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAgICAgRWRn
ZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgRWRn
ZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgRWRn
ZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotCi0gICAgICAgICAgICBu
b2RlLT5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVm
aW5lKAotICAgICAgICAgICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIGNo
aWxkMy0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJy
YXlPcGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIDMpOworICAgICAgICBjYXNlIENoZWNrRXhlY3V0
YWJsZToKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBGb3J3YXJk
Q2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6CisgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50Ogor
ICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAg
ICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6IHsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5Ogot
ICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAg
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjYXNl
IEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5
OgotICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgyKTsKKyAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5n
OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykgewotICAg
ICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlwZSgKLSAgICAgICAgICAgICAgICAgICAg
bGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+aW5kZXhpbmdUeXBlKCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSkt
PnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUtPmlu
ZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCi0gICAg
ICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7Ci0gICAgICAgICAgICB9CisgICAgICAg
IGNhc2UgQXJyYXlpZnk6CisgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogeworICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRV
c2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnN0YW5j
ZU9mOiB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBhcHBlYXJzIGJyb2tlbjogQ2hlY2tI
YXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRpb25hbCBjZWxsCisgICAgICAgICAg
ICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3
OQorICAgICAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVj
Q2VsbCkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
Q2VsbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgIH0KIAogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTQ4MCwxMSArNzY0LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXkpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9y
YWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRn
ZSBpbmRleCwgRWRnZSYgc3RvcmFnZUNoaWxkKQogICAgIHsKLSAgICAgICAgaWYgKG1fZ3JhcGgu
bV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Tm9kZTsKICAgICAgICAgCiAg
ICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CkBAIC01MDgsNyArNzg5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGguY2hpbGQobm9kZSwg
c3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgICAgICBzdG9yYWdlQ2hp
bGQgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IH0KICAg
ICB9CkBAIC01MTYsNDAgKzc5Nyw0NiBAQCBwcml2YXRlOgogICAgIHZvaWQgZml4SW50RWRnZShF
ZGdlJiBlZGdlKQogICAgIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGVkZ2Uubm9kZSgpOwotICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpCisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikgeworICAg
ICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKEtub3duSW50MzJVc2UpOwogICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBFZGdlIG9sZEVkZ2UgPSBlZGdlOwog
ICAgICAgICBFZGdlIG5ld0VkZ2UgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgCisgICAgICAg
IGlmIChuZXdFZGdlLnVzZUtpbmQoKSAhPSBJbnQzMktpbmQpIHsKKyAgICAgICAgICAgIGVkZ2Uu
c2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSk7CisgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAgICAg
bV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKICAgICAgICAgCiAgICAgICAgIGVkZ2UgPSBuZXdFZGdl
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpeERvdWJsZUVkZ2UodW5zaWduZWQgY2hpbGRJbmRl
eCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikK
KyAgICB2b2lkIGZpeERvdWJsZUVkZ2UoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVt
YmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uKQogICAgIHsKICAgICAgICAgTm9kZSogc291cmNlID0gbV9jdXJyZW50Tm9kZTsKLSAgICAg
ICAgRWRnZSYgZWRnZSA9IG1fZ3JhcGguY2hpbGQoc291cmNlLCBjaGlsZEluZGV4KTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChlZGdlLT5wcmVkaWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0gICAg
ICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgICAgIGVkZ2Uuc2V0
VXNlS2luZCh1c2VLaW5kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoY2hpbGRJbmRleCwgZGlyZWN0aW9u
KTsKKyAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoZWRnZSwgZGlyZWN0aW9uKTsKICAg
ICB9CiAKLSAgICB2b2lkIGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxkSW5k
ZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24p
CisgICAgdm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVz
ZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3
YXJkU3BlY3VsYXRpb24pCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGls
ZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwKICAgICAgICAgICAgIGRpcmVjdGlvbiA9PSBCYWNr
d2FyZFNwZWN1bGF0aW9uID8gSW50MzJUb0RvdWJsZSA6IEZvcndhcmRJbnQzMlRvRG91YmxlLAot
ICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgbV9ncmFwaC5jaGlsZChtX2N1
cnJlbnROb2RlLCBjaGlsZEluZGV4KS5ub2RlKCkpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwgRG91YmxlVXNlKSk7CisgICAgICAgIHJl
c3VsdC0+Y2hpbGQxKCkuc2V0VXNlS2luZChEb3VibGVVc2UpOwogICAgICAgICAKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKApAQCAt
NTU3LDcgKzg0NCw0OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aW5k
ZXgoKSwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS0+aW5kZXgoKSwg
bV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgcmVzdWx0LT5pbmRleCgpKTsKICNlbmRpZgogCi0gICAg
ICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3Vs
dCwgRG91YmxlVXNlKTsKKyAgICAgICAgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGls
ZEluZGV4KSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5kKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0
cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSog
b2xkTm9kZSA9IGVkZ2Uubm9kZSgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG9sZE5vZGUt
Pmhhc0NvbnN0YW50KCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9m
SlNDb25zdGFudChvbGROb2RlKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0ganNOdW1iZXIoSlNDOjp0
b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkpKTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIo
KSk7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0lu
dDMyLCBKU0NvbnN0YW50LAorICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwg
T3BJbmZvKGNvZGVCbG9jaygpLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7CisgICAgICAg
IG1fZ3JhcGguZGVyZWYob2xkTm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ1bmNhdGVD
b25zdGFudHNJZk5lY2Vzc2FyeShOb2RlKiBub2RlLCBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSkK
KyAgICB7CisgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNv
bnN0YW50cykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChu
b2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSB8fCBub2RlLT5jaGlsZDIoKS0+aGFzQ29uc3Rh
bnQoKSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIHRydW5jYXRlQ29uc3RhbnRUb0ludDMyKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgdHJ1bmNhdGVDb25zdGFudFRvSW50MzIobm9kZS0+Y2hpbGQyKCkp
OworICAgIH0KKyAgICAKKyAgICBib29sIGF0dGVtcHRUb01ha2VJbnRlZ2VyQWRkKE5vZGUqIG5v
ZGUpCisgICAgeworICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IG1fZ3JhcGguYWRk
U3BlY3VsYXRpb25Nb2RlKG5vZGUpOworICAgICAgICBpZiAobW9kZSA9PSBEb250U3BlY3VsYXRl
SW50ZWdlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHRy
dW5jYXRlQ29uc3RhbnRzSWZOZWNlc3Nhcnkobm9kZSwgbW9kZSk7CisgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRV
c2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDQ1ICszNDYsMTQgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIH0KIH0KIAotLy8gRklYTUU6IENvbnZlcnQgdGhp
cyB0byBiZSBpdGVyYXRpdmUsIG5vdCByZWN1cnNpdmUuCi0jZGVmaW5lIERPX1RPX0NISUxEUkVO
KG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdz
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGls
ZHJlbigpOyBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKCEhbV92YXJB
cmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pOyAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBp
ZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQy
KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg
ICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1Rv
RG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJU
KCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25v
ZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0KIHZvaWQgR3Jh
cGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9wKQogewotICAgIERPX1RPX0NISUxEUkVOKG9wLCByZWYp
OworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKCp0aGlzLCBvcCwgcmVmKTsKIH0KIAogdm9p
ZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKLSAgICBET19UT19DSElMRFJFTihv
cCwgZGVyZWYpOworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKCp0aGlzLCBvcCwgZGVyZWYp
OwogfQogCiB2b2lkIEdyYXBoOjpkZXRocmVhZCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFB1
dFRvQmFzZU9wZXJhdGlvbkRhdGEgewogCiBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAgICAg
RG9udFNwZWN1bGF0ZUludGVnZXIsCi0gICAgU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNo
T3ZlcmZsb3csCisgICAgU3BlY3VsYXRlSW50ZWdlckFuZFRydW5jYXRlQ29uc3RhbnRzLAogICAg
IFNwZWN1bGF0ZUludGVnZXIKIH07CiAKQEAgLTE3NCw5ICsxNzQsOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4
KyspCiAgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9y
RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAg
ICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNo
b3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5v
ZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3Rp
dHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAg
ICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQzKCksIHNob3VsZEdlbmVy
YXRlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTc4MSw3ICs3ODEsNyBAQCBwcml2YXRl
OgogICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91YmxlSW1t
ZWRpYXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50
ZWdlcjsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFk
ZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVy
ZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRydW5j
YXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckFuZFRy
dW5jYXRlQ29uc3RhbnRzIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAogICAg
IGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwsIE5vZGUq
IHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCkBAIC04MzAsNiArODMwLDM2IEBAIGlubGluZSBC
bG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnkKICAgICByZXR1cm4gKmJpbmFyeVNlYXJj
aDxCbG9ja0luZGV4LCB1bnNpZ25lZD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJnZXRzLnNp
emUoKSwgYnl0ZWNvZGVCZWdpbiwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7CiB9
CiAKKyNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5nVG9E
bykgZG8geyAgICAgICAgICAgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9ub2Rl
LT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQo
KTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+Zmly
c3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAgICAgICBfY2hp
bGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKChncmFwaCkubV92
YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlm
ICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25v
ZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQzKCkpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9
IHdoaWxlIChmYWxzZSkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUs
NyArOTUsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25l
KQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwotICAgICAgICBBU1NF
UlQoISEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSA9PSAoY2hpbGRyZW4ua2luZCgpID09IEFk
amFjZW5jeUxpc3Q6OlZhcmlhYmxlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVjdCBh
IG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCkBAIC05OTUs
NyArOTk0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9yZWZDb3VudC0tOwog
ICAgIH0KICAgICAKLSAgICBFZGdlIGNoaWxkMSgpCisgICAgRWRnZSYgY2hpbGQxKCkKICAgICB7
CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICBy
ZXR1cm4gY2hpbGRyZW4uY2hpbGQxKCk7CkBAIC0xMDA5LDEzICsxMDA4LDEzIEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMVVuY2hlY2tlZCgpOwogICAgIH0K
IAotICAgIEVkZ2UgY2hpbGQyKCkKKyAgICBFZGdlJiBjaGlsZDIoKQogICAgIHsKICAgICAgICAg
QVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJldHVybiBjaGls
ZHJlbi5jaGlsZDIoKTsKICAgICB9CiAKLSAgICBFZGdlIGNoaWxkMygpCisgICAgRWRnZSYgY2hp
bGQzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykp
OwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQzKCk7CkBAIC0xMDMzLDYgKzEwMzIsMTIg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gY2hpbGRyZW4ubnVtQ2hpbGRyZW4oKTsK
ICAgICB9CiAgICAgCisgICAgVXNlS2luZCBiaW5hcnlVc2VLaW5kKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChjaGlsZDEoKS51c2VLaW5kKCkgPT0gY2hpbGQyKCkudXNlS2luZCgpKTsKKyAgICAg
ICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtpbmQoKTsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKLXR5cGVkZWYgQWxsb2NhdG9yPE5vZGU+IE5vZGVBbGxvY2F0
b3I7CisjaWYgVVNFKEpTVkFMVUU2NCkKK3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDExMj4gTm9k
ZUFsbG9jYXRvcjsKKyNlbHNlCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCA4MD4gTm9kZUFsbG9j
YXRvcjsKKyNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTYsOCArOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8o
Rm9yd2FyZEludDMyVG9Eb3VibGUsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICAvKiBVc2VkIHRv
IHNwZWN1bGF0ZSB0aGF0IGEgZG91YmxlIHZhbHVlIGlzIGFjdHVhbGx5IGFuIGludGVnZXIuICov
XAogICAgIG1hY3JvKERvdWJsZUFzSW50MzIsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIC8qIFVz
ZWQgdG8gcmVjb3JkIHBsYWNlcyB3aGVyZSB3ZSBtdXN0IGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBu
dW1iZXIuICovXAotICAgIG1hY3JvKENoZWNrTnVtYmVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJhdGlvbnMuICovXAogICAgIG1h
Y3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NDUsMTIgKzU0NSw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgp
LmlzRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQogICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29u
c3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25z
dGFudChub2RlKTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9k
ZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0K
LSAgICBpbnQzMl90IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIoTm9kZSogbm9kZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1
cm4gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50
MzIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKLSAgICB9CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlKiBub2RlKSB7IHJl
dHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlKTsgfQogI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHVXNlS2luZF9oCisjZGVmaW5lIERGR1VzZUtpbmRfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlNw
ZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBVc2VLaW5kIHsKKyAgICBVbnR5cGVkVXNl
LAorICAgIEludDMyVXNlLAorICAgIEtub3duSW50MzJVc2UsCisgICAgUmVhbE51bWJlclVzZSwK
KyAgICBOdW1iZXJVc2UsCisgICAgS25vd25OdW1iZXJVc2UsCisgICAgQm9vbGVhblVzZSwKKyAg
ICBDZWxsVXNlLAorICAgIEtub3duQ2VsbFVzZSwKKyAgICBPYmplY3RVc2UsCisgICAgT2JqZWN0
T3JPdGhlclVzZSwKKyAgICBGdW5jdGlvblVzZSwKKyAgICBTdHJpbmdVc2UsCisgICAgT3RoZXJV
c2UsCisgICAgTGFzdFVzZUtpbmQgLy8gTXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZW50cnkgaW4g
dGhlIGVudW0sIGFzIGl0IGlzIHVzZWQgdG8gZGVub3RlIHRoZSBudW1iZXIgb2YgZW51bSBlbGVt
ZW50cy4KK307CisKK0FMV0FZU19JTkxJTkUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihV
c2VLaW5kIHVzZUtpbmQpCit7CisgICAgc3dpdGNoICh1c2VLaW5kKSB7CisgICAgY2FzZSBVbnR5
cGVkVXNlOgorICAgICAgICByZXR1cm4gU3BlY1RvcDsKKyAgICBjYXNlIEludDMyVXNlOgorICAg
IGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNJbnQzMjsKKyAgICBjYXNl
IEtub3duSW50MzJVc2U6CisgICAgICAgIHJldHVybiBTcGVjSW50MzI7CisgICAgY2FzZSBSZWFs
TnVtYmVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY1JlYWxOdW1iZXI7CisgICAgY2FzZSBOdW1i
ZXJVc2U6CisgICAgY2FzZSBLbm93bk51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNOdW1i
ZXI7CisgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICByZXR1cm4gU3BlY0Jvb2xlYW47Cisg
ICAgY2FzZSBDZWxsVXNlOgorICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICByZXR1cm4g
U3BlY0NlbGw7CisgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAgIHJldHVybiBTcGVjT2JqZWN0
OworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNPYmplY3Qg
fCBTcGVjT3RoZXI7CisgICAgY2FzZSBGdW5jdGlvblVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNG
dW5jdGlvbjsKKyAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmc7
CisgICAgY2FzZSBPdGhlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNPdGhlcjsKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gU3BlY1RvcDsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFt
ZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZH
OjpVc2VLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR1VzZUtpbmRfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188788</attachid>
            <date>2013-02-17 18:54:17 -0800</date>
            <delta_ts>2013-02-18 00:34:38 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>129937</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNDggQEAgQWJzdHJh
Y3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9v
bGVhblJlc3VsdDsKIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobV9ibG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAg
CiAgICAgbV9kaWRDbG9iYmVyID0gZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIAogICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKQoreworICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5h
dChpbmRleEluQmxvY2spKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMo
Tm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBmaWx0ZXJFZGdlQnlVc2UpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdl
cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0
KGluZGV4SW5CbG9jaykpOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSkKK3sKICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoK
ICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6IHsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
bV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSWRl
bnRpdHk6IHsKICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAgICAgCkBAIC0yNjUsMTkgKzI4MywxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlmICh2
YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSkgewogICAgICAgICAg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBjYW5FeGl0ID0g
ZmFsc2U7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3ZhcmlhYmxlcy5vcGVyYW5k
KHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CiAgICAgICAgIGlmICghdmFyaWFibGVBY2Nl
c3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkp
Ci0gICAgICAgICAgICAgICAgY2FuRXhpdCB8PSB0cnVlOworICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkp
CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgZm9yTm9kZShu
b2RlKSA9IHZhbHVlOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjg2LDM1ICszMDEsMTAgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAodmFsdWUudmFsdWUo
KSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBmb3JOb2Rl
KG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkKLSAgICAgICAgICAg
IHx8IG1fZ3JhcGguaXNDcmVhdGVkVGhpc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKSB7Ci0gICAg
ICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLm9w
ZXJhbmQobm9kZS0+bG9jYWwoKSkuc2V0KFNwZWNEb3VibGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5
cGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24o
KTsKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzQ2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAKICAgICAgICAgbV92
YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMjIsNyArMzEyLDYgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAg
ICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0Lgog
ICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpLmlzQ2xlYXIoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgpAQCAtMzY2LDcgKzM1NSw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVJ
bnQzMkJpbmFyeShub2RlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgxLDE2ICszNjksMTQgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgY2FzZSBEb3VibGVBc0ludDMyOiB7CiAg
ICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwpA
QCAtNDA0LDcgKzM5MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTQyMywxNCArNDA4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAg
c3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29s
ZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMy
KTsKICAgICAgICAgYnJlYWs7CkBAIC00NDUsNyArNDIyLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCkBAIC00NTMsMTAgKzQyOSw2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIENoZWNrTnVtYmVyOgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
CiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOiB7CiAgICAgICAgIEpTVmFs
dWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CkBAIC00NjcsMzAgKzQz
OSwyNSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkp
IHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5v
ZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkp
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJF
eHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOworICAgICAg
ICBjYXNlIE51bWJlclVzZToKICAgICAgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlv
bihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCiAgICAgICAgICAgICAgICAgJiYgaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKICAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBWYWx1ZUFkZCkgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNTdHJpbmcgfCBTcGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIHRoaXMgeWV0LiA6LSgKLSAgICAgICAgbV9pc1ZhbGlk
ID0gZmFsc2U7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgICAgIApAQCAtNTAzLDE1ICs0NzAsMTkgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRl
SW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBO
dW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZTogewpAQCAtNTIyLDE1ICs0OTMsMTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5u
ZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMlVuYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51
bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGUpOwotICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QXJpdGhNdWw6IHsKQEAgLTU0MiwyMSArNTE3LDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJC
aW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAhbm9kZUNhblRy
dW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKQotICAgICAgICAgICAgICAgIHx8
ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAg
ICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkK
KyAgICAgICAgICAgICAgICB8fCAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0
aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAg
aWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkKKyAgICAgICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShu
b2RlKTsKLSAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlUmVhbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwotICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQXJpdGhEaXY6CkBAIC01OTMsMTUgKzU3MSwxOCBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsgLy8gZm9yY2luZyBj
YW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLgorICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNl
OgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAog
ICAgIGNhc2UgQXJpdGhBYnM6IHsKQEAgLTYxMiwxNSArNTkzLDE4IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyVW5hcnkobm9kZSwgdHJ1ZSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwot
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEFyaXRoU3FydDog
ewpAQCAtNjMxLDcgKzYxNSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC02NTMsMTggKzYzNiwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOwotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQtPnByZWRp
Y3Rpb24oKSkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBC
b29sZWFuVXNlOgorICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIE51bWJlclVz
ZToKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNT
dHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsK
LSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAg
ICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC03NjIsMTQgKzc0NiwxNyBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE5vZGUq
IGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgaWYgKGlzQ2VsbFNw
ZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgaWYgKGlz
U3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjQ2VsbCk7
CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBTdHJpbmdVc2U6CisgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5
cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtODI3LDU5ICs4MTQsMTMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xl
YW4pOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxQ29uc3Rh
bnQpIHsKLSAgICAgICAgICAgIC8vIFdlIGNhbiBleGl0IGlmIHdlIGhhdmVuJ3QgZmlyZWQgdGhl
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZCB3YXRjaHBvaW50IHlldC4KLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE5vZGUqIGxl
ZnQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbm9kZS0+
Y2hpbGQyKCkubm9kZSgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBmaWx0ZXI7Ci0gICAgICAg
IFNwZWN1bGF0ZWRUeXBlQ2hlY2tlciBjaGVja2VyOwotICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkpIHsKLSAgICAgICAgICAgIGZpbHRlciA9IFNw
ZWNJbnQzMjsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc0ludDMyU3BlY3VsYXRpb247Ci0gICAg
ICAgIH0gZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkg
ewotICAgICAgICAgICAgZmlsdGVyID0gU3BlY051bWJlcjsKLSAgICAgICAgICAgIGNoZWNrZXIg
PSBpc051bWJlclNwZWN1bGF0aW9uOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0g
Q29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5n
KCkgfHwgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9IAotICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYm
IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIo
U3BlY09iamVjdCk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNP
YmplY3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIHJpZ2h0LT5zaG91bGRTcGVj
dWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3Qp
OwotICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjT2JqZWN0IHwgU3Bl
Y090aGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkgJiYgcmlnaHQtPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihTcGVjT2JqZWN0
IHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3Bl
Y09iamVjdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gCi0gICAg
ICAgICAgICBmaWx0ZXIgPSBTcGVjVG9wOwotICAgICAgICAgICAgY2hlY2tlciA9IGlzQW55U3Bl
Y3VsYXRpb247Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZpbHRlciA9IFNwZWNU
b3A7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICB9
Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhY2hlY2tlcihmb3JOb2Rl
KGxlZnQpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFjaGVja2VyKGZvck5vZGUocmlnaHQpLm1f
dHlwZSkpOwotICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihmaWx0ZXIpOwotICAgICAgICBm
b3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVyKTsKKyAgICAgICAgLy8gVGhpcyBpcyBvdmVybHkg
Y29uc2VydmF0aXZlLiBCdXQgdGhlIG9ubHkgdGhpbmcgdGhpcyBwcmV2ZW50cyBpcyBzdG9yZSBl
bGltaW5hdGlvbiwKKyAgICAgICAgLy8gYW5kIGhvdyBsaWtlbHkgaXMgaXQsIHJlYWxseSwgdGhh
dCB5b3UnbGwgaGF2ZSByZWR1bmRhbnQgc3RvcmVzIGFjcm9zcyBhIGNvbXBhcmlzb24KKyAgICAg
ICAgLy8gb3BlcmF0aW9uPyBDb21wYXJpc29uIG9wZXJhdGlvbnMgYXJlIHR5cGljYWxseSBhdCB0
aGUgZW5kIG9mIGJhc2ljIGJsb2Nrcywgc28KKyAgICAgICAgLy8gdW5sZXNzIHdlIGhhdmUgZ2xv
YmFsIHN0b3JlIGVsaW1pbmF0aW9uIChzdXBlciB1bmxpa2VseSBnaXZlbiBob3cgdW5wcm9maXRh
YmxlIHRoYXQKKyAgICAgICAgLy8gb3B0aW1pemF0aW9uIGlzIHRvIGJlZ2luIHdpdGgpLCB5b3Ug
YXJlbid0IGdvaW5nIHRvIGJlIHdhbnRpbmcgdG8gc3RvcmUgZWxpbWluYXRlCisgICAgICAgIC8v
IGFjcm9zcyBhbiBlcXVhbGl0eSBvcC4KKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC04OTYsNDMgKzgzNywxNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7
Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KSB7Ci0g
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnRO
b2RlLCByaWdodE5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVOdW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHRO
b2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIHJpZ2h0Tm9kZS0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0g
ICAgICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAg
ICAgICBmb3JOb2RlKHJpZ2h0Tm9kZSkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2
ZS4KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJD
b2RlQXQ6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0No
YXJBdDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC05NTIsMTUgKzg2
NywxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNT
dHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKQEAgLTk2OCw3ICs4ODAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsK
ICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKQEAgLTk4MCw0
OCArODkxLDM4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0
QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMDQ1LDEwNCArOTQ2LDIzIEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQog
ICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlm
IChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIo
U3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwotICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAg
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1i
ZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChj
aGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0
ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZp
bHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3Bl
Y051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAg
IGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5m
aWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
Q2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBDUkFTSCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xMTUwLDE2ICs5NzAs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICAKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY1Jl
YWxOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9y
aWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY051bWJl
cik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE3MiwxMSArOTgyLDYgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBSZWdFeHBF
eGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAg
ICAgICAgICAgICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIApAQCAtMTIwMSwyNCArMTAwNiwxMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIGNvbnN0YW50IHByb3BhZ2F0aW9uLCBidXQg
d2UgY2FuIGRvIGJldHRlcjoKICAgICAgICAgLy8gV2UgY2FuIHNwZWNpYWxpemUgdGhlIHNvdXJj
ZSB2YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2ggZGlyZWN0aW9uIG9mCiAgICAgICAgIC8vIHRoZSBi
cmFuY2guCi0gICAgICAgIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChj
aGlsZC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZCkuZmlsdGVyKFNw
ZWNPYmplY3QgfCBTcGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUp
OwotICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2ZS4KICAgICAgICAgbV9icmFuY2hE
aXJlY3Rpb24gPSBUYWtlQm90aDsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAg
CiAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgVGhyb3c6CkBAIC0xMjI4LDE3ICsxMDIyLDE0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFRvUHJpbWl0aXZlOiB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwotICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShjaGls
ZCkudmFsdWUoKTsKKyAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0ID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkQ29uc3QgJiYgY2hpbGRDb25zdC5p
c051bWJlcigpICYmIHRyeVNldENvbnN0YW50KG5vZGUsIGNoaWxkQ29uc3QpKSB7CiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IEludDMyVXNlKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyNzMsMzkgKzEwNjQs
MTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGRlc3RpbmF0aW9uLnNl
dCh0eXBlKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgU3RyQ2F0OgotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheToKICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGlu
Z1R5cGUoKSkgewotICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTExfVU5E
RUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5udW1DaGls
ZHJlbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsg
b3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RD
aGlsZCgpICsgb3BlcmFuZEluZGV4XSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBub2RlLT5u
dW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSW5kZXhd
KS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0
aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0
cnVlOwogICAgICAgICBicmVhazsKQEAgLTEzMTgsNyArMTA4NSw2IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKIAogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToK
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNBcnJheSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVh
azsKQEAgLTEzNDUsMzIgKzExMTEsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlvbihjaGlsZC0+
cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgc291cmNlLmZpbHRlcihTcGVjT3RoZXIpOwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNl
IE90aGVyVXNlOgogICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNPYmplY3RPdGhlcik7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlz
T2JqZWN0U3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIHNv
dXJjZS5maWx0ZXIoU3BlY09iamVjdCk7CisgICAgICAgIGNhc2UgT2JqZWN0VXNlOgogICAgICAg
ICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKLSAgICAgICAgZGVzdGluYXRpb24ubWVyZ2Uo
U3BlY09iamVjdE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBDcmVh
dGVUaGlzOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUo
bm9kZSk7Ci0gICAgICAgIAotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxh
dGlvbihzb3VyY2UubV90eXBlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc291cmNlLmZpbHRl
cihTcGVjRnVuY3Rpb24pOwotICAgICAgICBkZXN0aW5hdGlvbi5zZXQoU3BlY0ZpbmFsT2JqZWN0
KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ZpbmFsT2JqZWN0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTEzNzksMTkgKzExMzksMTYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgTmV3T2JqZWN0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRl
QWN0aXZhdGlvbjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9y
aWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMg
PSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBcmd1bWVu
dHM6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5h
cmd1bWVudHNTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwog
ICAgICAgICBicmVhazsKQEAgLTE0MDUsMTAgKzExNjIsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6
CiAgICAgICAgIGlmIChpc0VtcHR5U3BlY3VsYXRpb24oCiAgICAgICAgICAgICAgICAgbV92YXJp
YWJsZXMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkgewotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRz
UmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpCiAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
QEAgLTE0MjgsNyArMTE4NCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudHNM
ZW5ndGhTYWZlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgLy8g
VGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgYXJndW1lbnRz
IG9iamVjdCBoYWQgYSBnZXR0ZXIKICAgICAgICAgLy8gaW5zdGFsbGVkIG9uIHRoZSBsZW5ndGgg
cHJvcGVydHkuCiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwpAQCAtMTQ0Miw3ICsxMTk3LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRv
ZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKICAgICAgICAg
Ly8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgZW5kcyB1cCBiZWluZyBmdXJ0
aGVyIG9wdGltaXplZCBieSB0aGUKICAgICAgICAgLy8gQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS4KLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCkBAIC0xNDUxLDggKzEyMDUsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVj
dHVyZXMgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMKICAgICAgICAgLy8gYSBn
ZXR0ZXIuIFdlIGRvbid0IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCiAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICAvLyBCdXQgd2Ug
ZG8gc3BlY3VsYXRlIHRoYXQgdGhlIGluZGV4IGlzIGFuIGludGVnZXIuCi0gICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAvLyBBbmQgdGhl
IHJlc3VsdCBpcyB1bmtub3duLgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAg
ICAgICAgYnJlYWs7CkBAIC0xNDYwLDI5ICsxMjEyLDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3
RnVuY3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+ZnVuY3Rpb25TdHJ1
Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToK
LSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFNl
dENhbGxlZToKICAgICBjYXNlIFNldE15U2NvcGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0U2NvcGU6
IC8vIEZJWE1FOiBXZSBjb3VsZCBnZXQgcmlkIG9mIHRoZXNlIGlmIHdlIGtub3cgdGhhdCB0aGUg
SlNGdW5jdGlvbiBpcyBhIGNvbnN0YW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2MjAyCiAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgIGNhc2UgU2tpcFRvcFNj
b3BlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0NlbGxPdGhlcik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTa2lw
U2NvcGU6IHsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIEpTVmFs
dWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAo
Y2hpbGQgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShqc0Nhc3Q8SlNTY29wZSo+KGNo
aWxkLmFzQ2VsbCgpKS0+bmV4dCgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwpAQCAtMTQ5MywxOCArMTI0MCwxNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgfQogCiAgICAgY2FzZSBHZXRTY29wZVJlZ2lzdGVyczoKLSAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsg
Ly8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIEdldFNjb3BlZFZhcjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgUHV0U2NvcGVkVmFyOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLT5jb2RlT3JpZ2luKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE1MTYsOCArMTI1OSw2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKLQogICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAg
ICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fZ2xvYmFsRGF0YSwgc3RydWN0dXJlLApAQCAtMTU1
Myw3ICsxMjk0LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAvLyBtb3JlIHRob3JvdWdobHkuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDYyMDAKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGVsaW1pbmF0ZSB0
aGVzZSBlbnRpcmVseSBpZiB3ZSBrbm93IHRoZSBleGFjdCB2YWx1ZSB0aGF0IGZsb3dzIGludG8g
dGhpcy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNjIwMQotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwp
OwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9
CkBAIC0xNTYyLDYgKzEzMDIsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2Yg
Y29uc3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5
cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBl
bnN1cmVkIHRoaXMuCiAgICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJlIGNoZWNrIGlzIGF0dGVt
cHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgogICAgICAgICAvLyB0aGUg
ZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0YW50IGZvbGRpbmcgcGhh
c2Ugc2hvdWxkCiAgICAgICAgIC8vIHR1cm4gdGhpcyBpbnRvIGEgd2F0Y2hwb2ludCBpbnN0ZWFk
LgpAQCAtMTU2OSw5ICsxMzEwLDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1
YnNldE9mKHNldCkKICAgICAgICAgICAgIHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
LmlzU3Vic2V0T2Yoc2V0KSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgIXZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSkpOworICAgICAgICBpZiAoIXZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CiAgICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTg5LDcgKzEzMjksNiBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIGluZmluaXR5IG9m
IHN0cnVjdHVyZXMuCiAgICAgICAgIEFTU0VSVCh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkpOwogICAgICAg
ICAKLSAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2xlYXIoKSB8fCBpc0NlbGxTcGVjdWxhdGlvbih2
YWx1ZS5tX3R5cGUpKTsgLy8gVmFsdWUgY291bGQgYmUgY2xlYXIgaWYgd2UndmUgcHJvdmVuIG11
c3QtZXhpdCBkdWUgdG8gYSBzcGVjdWxhdGlvbiBzdGF0aWNhbGx5IGtub3duIHRvIGJlIGJhZC4K
ICAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZl
U3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CkBAIC0x
NTk4LDcgKzEzMzcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21Q
dXRTdHJ1Y3R1cmU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBp
ZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xl
YXIoKSkgewogICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChub2RlLT5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CkBAIC0xNjA4LDE0ICsxMzQ2LDExIEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIEdldEJ1dHRlcmZs
eToKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZSku
Y2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDaGVja0FycmF5OiB7CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsK
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyBmb2xsb3dlZCBi
eSBvcGVyYXRpb25zIChsaWtlIEdldEJ5VmFsKSB0aGF0IGFsd2F5cyBleGl0LCBzbyB0aGVyZSBp
cyBubyBwb2ludCBpbiB1cyB0cnlpbmcgdG8gYmUgY2xldmVyIGhlcmUuCkBAIC0xNjI4LDcgKzEz
NjMsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZToKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVudHMpOwpAQCAtMTY3Nyw5ICsxNDEx
LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBB
U1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpDb252ZXJ0CiAg
ICAgICAgICAgICB8fCBub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OlJh
Z2VDb252ZXJ0KTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+YXJyYXlN
b2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKQEAgLTE2OTIsMzUgKzE0MjMsMjAgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmIChu
b2RlLT5jaGlsZDIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwog
ICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U6IHsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5v
ZGUobm9kZSkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7IAogICAgIH0KICAgICBjYXNlIEdldEJ5
T2Zmc2V0OgotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkp
IHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OiB7Ci0gICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwotICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGNhbkV4
aXQgfD0gIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSk7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwot
ICAgICAgICB9Ci0gICAgICAgIGNhbkV4aXQgfD0gIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMTc2NCwxMiArMTQ4MCwxMCBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
PmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIApAQCAtMTc3OSwzNCArMTQ5MywyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICBj
YXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBw
cm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIC8vIEFnYWluLCBzYWRseSwgd2UgZG9uJ3Qg
cHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJbnN0YW5jZU9mCi0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9l
cyBhbiB1bmNvbmRpdGlvbmFsIGNlbGwKLSAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKLSAgICAgICAgaWYgKCEobm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4p
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2Ug
Rmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2lu
dDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgpAQCAtMTgzNCw3ICsxNTM3LDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAg
ICAgY2FzZSBOb3A6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIExhc3RO
b2RlVHlwZToKQEAgLTE4NDUsNiArMTU0NywxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgcmV0dXJuIG1faXNWYWxpZDsKIH0KIAorYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICBOb2RlKiBub2Rl
ID0gbV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICBpZiAoIXN0YXJ0RXhlY3V0aW5nKG5v
ZGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBleGVjdXRlRWRnZXMobm9kZSk7
CisgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7Cit9CisKIGlu
bGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2spCiB7CiAgICAgY2xvYmJlckNhcHR1cmVk
VmFycyhjb2RlT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw1
MiBAQCBwdWJsaWM6CiAgICAgLy8gaWYgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBwYXN0IHRo
aXMgbm9kZS4gTm90YWJseSwgaXQgd2lsbCByZXR1cm4gdHJ1ZQogICAgIC8vIGZvciBibG9jayB0
ZXJtaW5hbHMsIHNvIGxvbmcgYXMgdGhvc2UgdGVybWluYWxzIGFyZSBub3QgUmV0dXJuIG9yIHZh
cmlhbnRzCiAgICAgLy8gb2YgVGhyb3cuCi0gICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkKTsKKyAg
ICAvLworICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBiZSBlcXVpdmFsZW50IHRvIGRvaW5n
OgorICAgIC8vCisgICAgLy8gaWYgKHN0YXRlLnN0YXJ0RXhlY3V0aW5nKGluZGV4KSkgeworICAg
IC8vICAgICBzdGF0ZS5leGVjdXRlRWRnZXMoaW5kZXgpOworICAgIC8vICAgICByZXN1bHQgPSBz
dGF0ZS5leGVjdXRlRWZmZWN0cyhpbmRleCk7CisgICAgLy8gfSBlbHNlCisgICAgLy8gICAgIHJl
c3VsdCA9IHRydWU7CisgICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7Cisg
ICAgCisgICAgLy8gSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbiBvZiB0aGUgbm9kZS4g
SXQgcmVzZXRzIGFueSBzdGF0ZSBpbiB0aGUgbm9kZSwKKyAgICAvLyB0aGF0IGlzIHByb2dyZXNz
aXZlbHkgYnVpbHQgdXAgYnkgZXhlY3V0ZUVkZ2VzKCkgYW5kIGV4ZWN1dGVFZmZlY3RzKCkuIElu
CisgICAgLy8gcGFydGljdWxhciwgdGhpcyByZXNldHMgY2FuRXhpdCgpLCBzbyBpZiB5b3Ugd2Fu
dCB0byAia25vdyIgYmV0d2VlbiBjYWxscyBvZgorICAgIC8vIHN0YXJ0RXhlY3V0aW5nKCkgYW5k
IGV4ZWN1dGVFZGdlcygpL0VmZmVjdHMoKSB3aGV0aGVyIHRoZSBsYXN0IHJ1biBvZiB0aGUKKyAg
ICAvLyBhbmFseXNpcyBjb25jbHVkZWQgdGhhdCB0aGUgbm9kZSBjYW4gZXhpdCwgeW91IHNob3Vs
ZCBwcm9iYWJseSBzZXQgdGhhdAorICAgIC8vIGluZm9ybWF0aW9uIGFzaWRlIHByaW9yIHRvIGNh
bGxpbmcgc3RhcnRFeGVjdXRpbmcoKS4KKyAgICB2b2lkIHN0YXJ0RXhlY3V0aW5nKE5vZGUqKTsK
KyAgICB2b2lkIHN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgCisg
ICAgLy8gQWJzdHJhY3RseSBleGVjdXRlIHRoZSBlZGdlcyBvZiB0aGUgZ2l2ZW4gbm9kZS4gVGhp
cyBydW5zIGZpbHRlckVkZ2VCeVVzZSgpCisgICAgLy8gb24gYWxsIGVkZ2VzIG9mIHRoZSBub2Rl
LiBZb3UgY2FuIHNraXAgdGhpcyBzdGVwLCBpZiB5b3UgaGF2ZSBhbHJlYWR5IHVzZWQKKyAgICAv
LyBmaWx0ZXJFZGdlQnlVc2UoKSAob3Igc29tZSBlcXVpdmFsZW50KSBvbiBlYWNoIGVkZ2UuCisg
ICAgdm9pZCBleGVjdXRlRWRnZXMoTm9kZSopOworICAgIHZvaWQgZXhlY3V0ZUVkZ2VzKHVuc2ln
bmVkIGluZGV4SW5CbG9jayk7CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckVk
Z2VCeVVzZShFZGdlIGVkZ2UpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAg
c3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6Cisg
ICAgICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgor
ICAgICAgICAgICAgQVNTRVJUKCEoZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZUZpbHRlckZv
cihlZGdlLnVzZUtpbmQoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVECisgICAgICAgIAorICAgICAgICBmaWx0ZXJCeVR5cGUoZWRnZS5ub2RlKCksIHR5cGVGaWx0
ZXJGb3IoZWRnZS51c2VLaW5kKCkpKTsKKyAgICB9CisgICAgCisgICAgLy8gQWJzdHJhY3RseSBl
eGVjdXRlIHRoZSBlZmZlY3RzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlzIGNoYW5nZXMgdGhlIGFi
c3RyYWN0CisgICAgLy8gc3RhdGUgYXNzdW1pbmcgdGhhdCBlZGdlcyBoYXZlIGFscmVhZHkgYmVl
biBmaWx0ZXJlZC4KKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayk7CisgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUq
KTsKICAgICAKICAgICAvLyBEaWQgdGhlIGxhc3QgZXhlY3V0ZWQgbm9kZSBjbG9iYmVyIHRoZSB3
b3JsZD8KICAgICBib29sIGRpZENsb2JiZXIoKSBjb25zdCB7IHJldHVybiBtX2RpZENsb2JiZXI7
IH0KQEAgLTI1OSw2ICszMDQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmaWx0ZXJCeVR5cGUoTm9kZSogbm9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAgaWYgKHZhbHVlLm1fdHlwZSAmIH50eXBlKQor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgdmFsdWUuZmlsdGVy
KHR5cGUpOworICAgIH0KKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEdy
YXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0
LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3Vs
ZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90CisgICAgICAg
IC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2
MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOwog
ICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7
CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24g
MTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFkamFjZW5jeUxp
c3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7CiAgICAgICAg
IGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2Rl
ZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU4LDE4ICs1NSwxMiBAQCBwdWJsaWM6CiAgICAgfQogICAg
IAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxk
MiwgTm9kZSogY2hpbGQzKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBtX2tpbmQo
Rml4ZWQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9
PSBGaXhlZCk7CiAgICAgICAgIGluaXRpYWxpemUoY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAg
ICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCB1bnNpZ25lZCBmaXJzdENo
aWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAg
IDogbV9raW5kKFZhcmlhYmxlKQotI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VE
KGtpbmQsIGtpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBzZXRGaXJzdENoaWxkKGZpcnN0Q2hp
bGQpOwpAQCAtNzksMjEgKzcwLDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBFZGdlJiBjaGlsZCh1
bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsKLSAgICAg
ICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzW2ldOwog
ICAgIH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQodW5zaWduZWQgaSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwog
ICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRDaGls
ZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAgewogICAgICAgICBBU1NFUlQoaSA8IFNp
emUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgbV93b3Jkc1tp
XSA9IG5vZGVVc2U7CiAgICAgfQogICAgIApAQCAtMTI1LDkgKzExMyw2IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAg
ICBtX2tpbmQgPSBGaXhlZDsKLSNlbmRpZgogICAgICAgICBpbml0aWFsaXplKCk7CiAgICAgfQog
ICAgIApAQCAtMTQyLDM0ICsxMjcsMjQgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZmlyc3RD
aGlsZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsK
ICAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZDsKICAgICB9CiAgICAgdm9p
ZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCiAgICAgewotICAgICAgICBBU1NF
UlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1swXS5tX2VuY29kZWRXb3Jk
ID0gZmlyc3RDaGlsZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oKSBj
b25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAg
IHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CiAgICAgfQogICAgIHZvaWQgc2V0TnVt
Q2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBBU1NFUlQobV9r
aW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1sxXS5tX2VuY29kZWRXb3JkID0gbnVt
Q2hpbGRyZW47CiAgICAgfQogICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBLaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSNlbmRpZgogcHJpdmF0ZToKICAgICBFZGdl
IG1fd29yZHNbU2l6ZV07Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQgbV9raW5kOwot
I2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDcgKzQzLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vICAgYW55dGhp
bmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgogLy8gLSBZb3UgY2FsbCBm
cmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2UgZnJlZUFs
bCgpLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gZm9yY2VkQ2VsbFNpemU6IHNldCB0aGlz
IHRvIDAgaWYgeW91J3JlIGhhcHB5IHdpdGggdGhlIGRlZmF1bHQgYWxpZ25tZW50LCBvciBzZXQg
aXQKKy8vIHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91IHdhbnQgdG8gZm9yY2libHkgYWxpZ24g
dGhlIGFsbG9jYXRpb25zIHRvIGEgY2VydGFpbgorLy8gdmFsdWUuIFdoZW4geW91IGRvIHRoaXMs
IEFsbG9jYXRvciB3aWxsIEFTU0VSVCB0aGF0IGZvcmNlZENlbGxBbGlnbm1lbnQgPj0gc2l6ZW9m
KFQpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50
PgogY2xhc3MgQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICBBbGxvY2F0b3IoKTsKQEAgLTYzLDEz
ICs2NywyNCBAQCBwcml2YXRlOgogICAgIHZvaWQqIGJ1bXBBbGxvY2F0ZSgpOwogICAgIHZvaWQq
IGZyZWVMaXN0QWxsb2NhdGUoKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3coKTsKLQorICAgIAor
ICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoKQorICAgIHsKKyAgICAgICAgaWYgKCFmb3JjZWRD
ZWxsQWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihUKTsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVChmb3JjZWRDZWxsQWxpZ25tZW50ID49IHNpemVvZihUKSk7CisgICAgICAg
IHJldHVybiBmb3JjZWRDZWxsQWxpZ25tZW50OworICAgIH0KKyAgICAKICAgICBzdHJ1Y3QgUmVn
aW9uIHsKICAgICAgICAgc3RhdGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBLQjsgfQot
ICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXpl
b2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgbnVtYmVy
T2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgpKSAvIHNp
emVvZihUKTsgfQotICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQotICAgICAgICBib29s
IGlzSW5UaGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7IH0K
KyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3RkOjptYXgoc2l6
ZW9mKFJlZ2lvbiksIGNlbGxTaXplKCkpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBudW1i
ZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBoZWFkZXJTaXplKCkpIC8g
Y2VsbFNpemUoKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IHBheWxvYWRTaXplKCkgeyByZXR1
cm4gbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSAqIGNlbGxTaXplKCk7IH0KKyAgICAgICAgY2hh
ciogcGF5bG9hZEJlZ2luKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhl
YWRlclNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkRW5kKCkgeyByZXR1cm4gcGF5bG9h
ZEJlZ2luKCkgKyBwYXlsb2FkU2l6ZSgpOyB9CisgICAgICAgIGJvb2wgaXNJblRoaXNSZWdpb24o
Y29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihiaXR3aXNlX2Nh
c3Q8Y2hhcio+KHBvaW50ZXIpIC0gcGF5bG9hZEJlZ2luKCkpIDwgcGF5bG9hZFNpemUoKTsgfQog
ICAgICAgICBzdGF0aWMgUmVnaW9uKiByZWdpb25Gb3IoY29uc3QgVCogcG9pbnRlcikgeyByZXR1
cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIp
ICYgfihzaXplKCkgLSAxKSk7IH0KICAgICAgICAgCiAgICAgICAgIFBhZ2VBbGxvY2F0aW9uQWxp
Z25lZCBtX2FsbG9jYXRpb247CkBAIC04MiwyNiArOTcsMjYgQEAgcHJpdmF0ZToKICAgICAKICAg
ICBSZWdpb24qIG1fcmVnaW9uSGVhZDsKICAgICB2b2lkKiogbV9mcmVlTGlzdEhlYWQ7Ci0gICAg
VCogbV9idW1wRW5kOwotICAgIHVuc2lnbmVkIG1fYnVtcFJlbWFpbmluZzsKKyAgICBjaGFyKiBt
X2J1bXBFbmQ7CisgICAgc2l6ZV90IG1fYnVtcFJlbWFpbmluZzsKIH07CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+OjpBbGxvY2F0b3IoKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lubGluZSBBbGxvY2F0b3I8
VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OkFsbG9jYXRvcigpCiAgICAgOiBtX3JlZ2lvbkhlYWQo
MCkKICAgICAsIG1fZnJlZUxpc3RIZWFkKDApCiAgICAgLCBtX2J1bXBSZW1haW5pbmcoMCkKIHsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46On5BbGxvY2F0
b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4K
K2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46On5BbGxvY2F0b3IoKQog
ewogICAgIHJlc2V0KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNfSU5MSU5F
IHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5z
aWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9y
PFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCogcmVzdWx0
ID0gYnVtcEFsbG9jYXRlKCk7CiAgICAgaWYgKExJS0VMWSghIXJlc3VsdCkpCkBAIC0xMDksOCAr
MTI0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYQogICAgIHJl
dHVybiBmcmVlTGlzdEFsbG9jYXRlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lk
IEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNp
Z25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFs
aWdubWVudD46OmZyZWUoVCogb2JqZWN0KQogewogICAgIG9iamVjdC0+flQoKTsKICAgICAKQEAg
LTExOSw4ICsxMzQsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCiAgICAg
bV9mcmVlTGlzdEhlYWQgPSBjZWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBB
bGxvY2F0b3I8VD46OmZyZWVBbGwoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9y
Y2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+
OjpmcmVlQWxsKCkKIHsKICAgICBpZiAoIW1fcmVnaW9uSGVhZCkgewogICAgICAgICBBU1NFUlQo
IW1fYnVtcFJlbWFpbmluZyk7CkBAIC0xNDIsOCArMTU3LDggQEAgdm9pZCBBbGxvY2F0b3I8VD46
OmZyZWVBbGwoKQogICAgIHN0YXJ0QnVtcGluZ0luKG1fcmVnaW9uSGVhZCk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQoKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQs
IGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpyZXNldCgpCiB7CiAgICAgZnJlZVJlZ2lvbnNTdGFydGlu
Z0F0KG1fcmVnaW9uSGVhZCk7CiAgICAgCkBAIC0xNTIsMzggKzE2NywzOCBAQCB2b2lkIEFsbG9j
YXRvcjxUPjo6cmVzZXQoKQogICAgIG1fYnVtcFJlbWFpbmluZyA9IDA7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci11bnNpZ25lZCBBbGxvY2F0b3I8VD46OmluZGV4T2YoY29uc3QgVCogb2Jq
ZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4K
K3Vuc2lnbmVkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6aW5kZXhPZihjb25z
dCBUKiBvYmplY3QpCiB7CiAgICAgdW5zaWduZWQgYmFzZUluZGV4ID0gMDsKICAgICBmb3IgKFJl
Z2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdpb247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9u
ZXh0KSB7CiAgICAgICAgIGlmIChyZWdpb24tPmlzSW5UaGlzUmVnaW9uKG9iamVjdCkpCi0gICAg
ICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAoYml0d2lzZV9jYXN0PGNoYXIqPihvYmplY3Qp
IC0gcmVnaW9uLT5wYXlsb2FkQmVnaW4oKSkgLyBjZWxsU2l6ZSgpOwogICAgICAgICBiYXNlSW5k
ZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwogICAgIH0KICAgICBDUkFT
SCgpOwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQWxsb2NhdG9y
PFQ+KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBbGxvY2F0b3I8VCwg
Zm9yY2VkQ2VsbEFsaWdubWVudD4qIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6
YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHJldHVybiBSZWdpb246OnJlZ2lv
bkZvcihvYmplY3QpLT5tX2FsbG9jYXRvcjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFM
V0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjpidW1wQWxsb2NhdGUoKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUg
dm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpidW1wQWxsb2NhdGUoKQog
ewotICAgIGlmICh1bnNpZ25lZCByZW1haW5pbmcgPSBtX2J1bXBSZW1haW5pbmcpIHsKLSAgICAg
ICAgcmVtYWluaW5nLS07CisgICAgaWYgKHNpemVfdCByZW1haW5pbmcgPSBtX2J1bXBSZW1haW5p
bmcpIHsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplKCk7CiAgICAgICAgIG1fYnVtcFJl
bWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1haW5p
bmcgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1haW5pbmcgKyBjZWxsU2l6
ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12
b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCoqIHJlc3Vs
dCA9IG1fZnJlZUxpc3RIZWFkOwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKQEAgLTE5Miw4
ICsyMDcsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkKiBBbGxvY2F0b3I8
VD46OmFsbG9jYXRlU2xvdygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRD
ZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+Ojph
bGxvY2F0ZVNsb3coKQogewogICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOwogICAgIEFTU0VS
VCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTIxNiw4ICsyMzEsOCBAQCB2b2lkKiBBbGxvY2F0b3I8
VD46OmFsbG9jYXRlU2xvdygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQodHlwZW5h
bWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVu
c2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxs
QWxpZ25tZW50Pjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KHR5cGVuYW1lIEFsbG9jYXRvcjxULCBm
b3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24pCiB7CiAgICAgd2hpbGUgKHJlZ2lv
bikgewogICAgICAgICBSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb24tPm1fbmV4dDsKQEAgLTIy
NiwxMSArMjQxLDExIEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6c3Rh
cnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9j
YXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5hbWUgQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsKLSAgICBt
X2J1bXBFbmQgPSByZWdpb24tPmRhdGEoKSArIFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdp
b24oKTsKLSAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVn
aW9uKCk7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5wYXlsb2FkRW5kKCk7CisgICAgbV9idW1w
UmVtYWluaW5nID0gUmVnaW9uOjpwYXlsb2FkU2l6ZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjYsNyArMTQ2
Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRoLm1pbih4KQogICAgICAg
ICAvLyBGSVhNRTogd2hhdCB3ZSdkIHJlYWxseSBsaWtlIGlzIGEgVmFsdWVUb051bWJlciwgZXhj
ZXB0IHdlIGRvbid0IHN1cHBvcnQgdGhhdCByaWdodCBub3cuIE9oIHdlbGwuCiAgICAgICAgIE5v
ZGUqIHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKTsK
LSAgICAgICAgYWRkVG9HcmFwaChDaGVja051bWJlciwgcmVzdWx0KTsKKyAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVyVXNlKSk7CiAgICAgICAgIHNldEludHJp
bnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCByZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2OSw3ICs5NjksNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFjY2Vzc2luZyBhcmd1bWVudHMgdGhlbiBpdCdzIHBv
dGVudGlhbGx5IGFjY2Vzc2luZyBsb2NhbHMuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpBcmd1bWVudHMpCiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTEwMTQsMTggKzEwMTQsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbnVtIFByZWRpY3Rpb25IYW5kbGluZ01vZGUg
eyBSZXF1aXJlU2FtZVByZWRpY3Rpb24sIEFsbG93UHJlZGljdGlvbk1pc21hdGNoIH07Ci0gICAg
Ym9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVudCwgUHJlZGljdGlvbkhhbmRsaW5n
TW9kZSBwcmVkaWN0aW9uSGFuZGxpbmdNb2RlID0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uKQorICAg
IGJvb2wgc2V0UmVwbGFjZW1lbnQoTm9kZSogcmVwbGFjZW1lbnQpCiAgICAgewogICAgICAgICBp
ZiAoIXJlcGxhY2VtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAg
ICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBlcmZvcm0gcmVwbGFjZW1lbnRzIGlmIHRo
ZSBwcmVkaWN0aW9ucyBkb24ndAotICAgICAgICAvLyBhZ3JlZS4KLSAgICAgICAgaWYgKHByZWRp
Y3Rpb25IYW5kbGluZ01vZGUgPT0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uCi0gICAgICAgICAgICAm
JiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgIT0gcmVwbGFjZW1lbnQtPnByZWRpY3Rpb24o
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiICAgUmVwbGFjaW5n
IEAldSAtPiBAJXUiLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCByZXBsYWNlbWVudC0+aW5kZXgo
KSk7CiAjZW5kaWYKQEAgLTEyMjksNyArMTIyMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
SlNDb25zdGFudDoKICAgICAgICAgICAgIC8vIFRoaXMgaXMgc3RyYW5nZSwgYnV0IG5lY2Vzc2Fy
eS4gU29tZSBwaGFzZXMgd2lsbCBjb252ZXJ0IG5vZGVzIHRvIGNvbnN0YW50cywKICAgICAgICAg
ICAgIC8vIHdoaWNoIG1heSByZXN1bHQgaW4gZHVwbGljYXRlZCBjb25zdGFudHMuIFdlIHVzZSBD
U0UgdG8gY2xlYW4gdGhpcyB1cC4KLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50
Q1NFKG5vZGUpLCBBbGxvd1ByZWRpY3Rpb25NaXNtYXRjaCk7CisgICAgICAgICAgICBzZXRSZXBs
YWNlbWVudChjb25zdGFudENTRShub2RlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMiArODMsNiBAQCBz
dHJ1Y3QgTm9kZVBvaW50ZXJUcmFpdHMgewogICAgIHN0YXRpYyB2b2lkIGR1bXAoTm9kZSogdmFs
dWUsIFByaW50U3RyZWFtJiBvdXQpOwogfTsKIAotZW51bSBVc2VLaW5kIHsKLSAgICBVbnR5cGVk
VXNlLAotICAgIERvdWJsZVVzZSwKLSAgICBMYXN0VXNlS2luZCAvLyBNdXN0IGFsd2F5cyBiZSB0
aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0byBkZW5vdGUgdGhlIG51
bWJlciBvZiBlbnVtIGVsZW1lbnRzLgotfTsKLQogLy8gVXNlIFJlZkNoaWxkcmVuIGlmIHRoZSBj
aGlsZCByZWYgY291bnRzIGhhdmVuJ3QgYWxyZWFkeSBiZWVuIGFkanVzdGVkIHVzaW5nCiAvLyBv
dGhlciBtZWFucyBhbmQgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKIC8vIC0gVGhl
IG5vZGUgeW91J3JlIGNyZWF0aW5nIGlzIE11c3RHZW5lcmF0ZS4KQEAgLTEwNiwxOSArMTAwLDYg
QEAgZW51bSBSZWZOb2RlTW9kZSB7CiAgICAgRG9udFJlZk5vZGUKIH07CiAKLWlubGluZSBjb25z
dCBjaGFyKiB1c2VLaW5kVG9TdHJpbmcoVXNlS2luZCB1c2VLaW5kKQotewotICAgIHN3aXRjaCAo
dXNlS2luZCkgewotICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAgcmV0dXJuICIiOwotICAg
IGNhc2UgRG91YmxlVXNlOgotICAgICAgICByZXR1cm4gImQiOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLX0KLQogaW5saW5lIGJvb2wgaXNBUk12N3MoKQogewogI2lmIENQVShBUFBMRV9BUk1WN1Mp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
OSw3ICsxNDksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAg
ICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxk
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGRFZGdl
ID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVk
Z2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKQEAgLTE4MSwx
OCArMTgyLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0YXRl
LmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1
Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAg
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1
cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUq
IHByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
RG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3Jp
Z2luLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CkBAIC0yMDcsNyArMjA4LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgICAgIGNhc2Ug
UHV0QnlJZERpcmVjdDogewogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IG5vZGUtPmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5j
aGlsZDEoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7
CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50
aWZpZXJOdW1iZXIoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVy
ZSgpOwpAQCAtMjM4LDcgKzI0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNT
dWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9w
SW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNo
aWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0YSA9IDA7CkBAIC0y
NjQsMzggKzI2NiwzOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOworICAg
ICAgICAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsgLy8gVGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBh
cyB0aGUgcHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0byByZWZsZWN0IHRoZSBkb3VibGUgdXNl
LgotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVm
Q2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNo
aWxkKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdp
biwgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMu
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwotICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxk
cmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGls
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlv
bkRhdGEpLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4s
IE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWRnZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwg
R2V0QnV0dGVyZmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGNo
aWxkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgY2hpbGRFZGdl
KSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFB1dFN0cnVjdHVy
ZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9u
RGF0YSksIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9u
RGF0YSksIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CkBAIC0zOTEsMTMgKzM5Mywx
MyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwg
RG9udFJlZk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAg
ICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFr
Q29uc3RhbnQpOworICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1
Y3R1cmUoKSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25l
LCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBo
LmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnQpOworICAg
ICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgp
KSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgfQogICAgIAogICAgIC8vIFRo
aXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIENGQSBtYXkgcmVhY2ggY29uY2x1c2lvbnMgYWJv
dXQgY29uc3RhbnRzIGJhc2VkIG9uIGl0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDYgQEAgaW5s
aW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICBpZiAoIWNoYW5n
ZWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIGRmZy5yZXNldEV4aXRT
dGF0ZXMoKTsKLSAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNS
ZXRocmVhZGluZyhkZmcpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdFZGdlLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewotICAgIG91dC5wcmludCh1c2VLaW5kVG9TdHJpbmcodXNlS2luZCgpKSwg
bm9kZSgpKTsKKyAgICBvdXQucHJpbnQodXNlS2luZCgpLCAiOiIsIG5vZGUoKSk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vk
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklU
KQogCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBz
dGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiAyOyB9CisgICAgc3RhdGljIHVpbnQzMl90
IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdv
cmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNiArNDUsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEJlZm9yZUZpeHBvaW50
KTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAg
ICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1
cEJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTc2LDUwICs3OSwyNjUgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICAK
ICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAg
ICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpCisgICAgICAgICAgICAgICAgfHwgbV9ncmFw
aC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxh
dGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91
bGRVc2VEb3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9k
ZS0+Y2hpbGQxKCksIE51bWJlclVzZSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2Rl
LT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgpCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3RlZFR5cGUgPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsK
KyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAg
ICAgICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAg
ZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6Cisg
ICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJp
dFJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlm
dDogeworICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogeworICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVB
c0ludDMyOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZh
bHVlVG9JbnQzMjogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0
R2VuZXJhdGUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9
IAotICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUg
PSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOwotICAgICAgICAgICAg
aWYgKGFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29k
ZU9yaWdpbikpOwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9i
c2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKLSAgICAgICAgICAgICAg
ICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOwotICAgICAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUtPmhh
c0RlZmluaXRlU3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBS
ZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KERvdWJsZVVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdl
bmVyYXRlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkgeworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLmRlcmVmKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEludDMyVG9Eb3VibGU6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAgICAgICAgIGlmIChhdHRlbXB0VG9NYWtlSW50
ZWdlckFkZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAgICBpZiAoYXR0
ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7CisgICAgICAgICAgICBp
ZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubXVs
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aERpdjogeworICAgICAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1g4NigpIHx8
IGlzQVJNdjdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBh
cnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRp
Y3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpKQor
ICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShub2RlLT5jaGlsZDIoKSk7
CisKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIHJlZidpbmcgb24gdGhl
IGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9tCisgICAgICAgICAgICAg
ICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgorICAgICAgICAgICAgICAgIE5vZGUqIG5ld0Rp
dmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgKm5v
ZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJs
ZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRn
ZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVkZ2UoKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7
Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwot
ICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2Ji
ZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKLSAgICAgICAgICAg
IG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9k
ZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVk
c1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYgKCFzdG9y
YWdlKQorICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNlIEFyaXRoTWF4OgorICAg
ICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdl
cigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwor
ICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAgICAgICAgICAgICAgICAm
JiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY2Fu
Q1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoU3FydDogewor
ICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTG9naWNhbE5vdDog
eworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFu
KCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNl
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVP
YmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgVHlwZU9mOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNh
c2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAg
IGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAg
ICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBDb21hcHJlRXFDb25zdGFudCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNl
dFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENvbXBhcmVFcSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9i
amVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmpl
Y3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVP
YmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2Jq
ZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVj
dFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAg
ICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBo
YXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgorICAgICAgICAgICAgQVNTRVJUKG5v
ZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5nKSk7CisgICAgICAgICAg
ICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgbm9k
ZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93
bkNlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlW
YWw6IHsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAgICAgICAgICAgICAgICBu
b2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCkBAIC0xMjcsNyArMzQ1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAg
ICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwg
bm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgICAgICAgICAg
aWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQpAQCAtMTM4LDEzICszNTYsNzcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhKG5vZGUtPmZsYWdzKCkgJiBOb2RlVXNl
ZEFzT3RoZXIpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUu
d2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgICAgICBjYXNlIEFycmF5
OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3du
Q2VsbFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQz
MlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAgICAgICAgICAgIC8vIEN1
cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgotICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5nKSk7
Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5j
aGlsZDIoKSwgMik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CisKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9k
ZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAg
ICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjaGls
ZDItPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQzLT5wcmVkaWN0aW9u
KCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGls
ZDEsIGNoaWxkMiwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgICAgICBjYXNlIEFycmF5
OjpVbmRlY2lkZWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNl
RXhpdDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCksIFJlYWxOdW1iZXJVc2UpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
QXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICAgICAg
Y2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMygpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGls
ZDMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpG
bG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0xNjMsMTEgKzQ0NSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAgICAgICAgIFNw
ZWNJbnQzMiwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24o
KSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRn
ZSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCks
IEVkZ2UoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6
Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzYsNTggKzQ2Miwy
NyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwg
RWRnZSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQx
KCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKQotICAgICAgICAgICAg
ICAgICYmIG5vZGUtPm11c3RHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2xl
YXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVm
KG5vZGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgY2FzZSBCaXRPcjoKLSAg
ICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNoaWZ0OgotICAgICAgICBjYXNl
IEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7Ci0gICAgICAgICAgICBmaXhJ
bnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEludEVkZ2Uo
bm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgY2FzZSBDb21w
YXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAgICAgIGNhc2Ug
Q29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1
bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwot
ICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgICAgICBjYXNlIFJl
Z0V4cFRlc3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVz
ZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEJy
YW5jaDogewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9y
T3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUt
PmNoaWxkMSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNhbE5vdCA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90LT5vcCgpID09IExvZ2ljYWxO
b3QKQEAgLTI3MCwxNDkgKzUyNSwxOTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAg
ICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNhc2UgVmFsdWVBZGQ6
IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZSkpCisgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCisgICAgICAgICAgICAgICAgICAgIGxlYXN0VXBw
ZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLT5wcmVkaWN0
aW9uKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFub2RlLT5udW1DaGlsZHJlbigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVt
Q2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSW5kZXhdLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsg
KytvcGVyYW5kSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGls
ZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSW5kZXhdLnNldFVzZUtpbmQoUmVhbE51
bWJlclVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgx
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
YWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKQotICAgICAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAg
ICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBD
b252ZXJ0VGhpczogeworICAgICAgICAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlvbihub2RlLT5j
aGlsZDEoKS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKE90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0U3BlY3Vs
YXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTWluOgotICAgICAgICBj
YXNlIEFyaXRoTWF4OgotICAgICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+
Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAg
ICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChGdW5jdGlvblVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgxKTsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CisgICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAg
IGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSB8fCBpc0FSTXY3cygpKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9k
ZSgwKTsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSgxKTsKLQotICAg
ICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRy
ZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KLSAgICAgICAgICAgICAgICAvLyB0
aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9kZSogbmV3RGl2aXNpb24g
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCAqbm9kZSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQz
Mik7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0Rp
dmlzaW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldFNj
b3BlUmVnaXN0ZXJzOgorICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKKyAgICAgICAgY2FzZSBT
a2lwVG9wU2NvcGU6CisgICAgICAgIGNhc2UgU2tpcFNjb3BlOiB7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkK
KyAgICAgICAgY2FzZSBHZXRCeUlkOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24o
bm9kZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9
IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAorICAgICAgICAg
ICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdl
dEFycmF5UHJvZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBBcnJheU1vZGUo
QXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOworICAgICAgICAgICAgaWYgKGFycmF5UHJv
ZmlsZSkgeworICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbikpOwor
ICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5
UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUg
PSBhcnJheU1vZGUucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgICAgIGlmIChh
cnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3Ry
dWN0dXJlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwg
RG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChh
cnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZShu
b2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOworICAgICAg
ICAgICAgaWYgKCFhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgICAgICBub2RlLT5z
ZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihu
b2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUs
IG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNT
dG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFn
ZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0g
ICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotCi0gICAgICAgICAgICBub2RlLT5zZXRBcnJh
eU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAotICAgICAg
ICAgICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAg
Y2hpbGQyLT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+cHJlZGlj
dGlvbigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
Y2hpbGQxLCBjaGlsZDIsIDMpOworICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1
cmU6CisgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAgICAg
IGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAgICBjYXNl
IENoZWNrRnVuY3Rpb246CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgY2FzZSBQdXRC
eUlkRGlyZWN0OgorICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6IHsKKyAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJy
YXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50
MTZBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAg
ICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsKKyAgICAg
ICAgY2FzZSBDaGVja0FycmF5OiB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9k
ZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykgewotICAgICAgICAgICAgICAg
IG5vZGUtPnNldEluZGV4aW5nVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RVcHBlckJv
dW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
aW5kZXhpbmdUeXBlKCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSktPnByZWRpY3Rpb24o
KSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgp
ID09IEFycmF5V2l0aERvdWJsZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCi0gICAgICAgICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoaSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXlp
Znk6CisgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogeworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+
aGFzU3RvcmFnZVJlc3VsdCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICAgICAgaWYgKCFu
b2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQorICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNo
aWxkMigpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlOiB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFn
ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBJbnN0YW5jZU9mOiB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBhcHBlYXJz
IGJyb2tlbjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRpb25hbCBj
ZWxsCisgICAgICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNzQ3OQorICAgICAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgIH0KIAogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTQ4MCwxMSArNzc3LDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXkpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4
LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9u
KEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgRWRnZSYgc3RvcmFnZUNoaWxkKQogICAgIHsKLSAgICAg
ICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Tm9k
ZTsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
CkBAIC01MDgsNyArODAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghc3RvcmFnZSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3Jh
cGguY2hpbGQobm9kZSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAg
ICAgICBzdG9yYWdlQ2hpbGQgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9IH0KICAgICB9CkBAIC01MTYsNDAgKzgxMCw0NiBAQCBwcml2YXRlOgogICAgIHZv
aWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGVk
Z2Uubm9kZSgpOwotICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVl
VG9JbnQzMikgeworICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKEtub3duSW50MzJVc2UpOwog
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBFZGdlIG9s
ZEVkZ2UgPSBlZGdlOwogICAgICAgICBFZGdlIG5ld0VkZ2UgPSBub2RlLT5jaGlsZDEoKTsKICAg
ICAgICAgCisgICAgICAgIGlmIChuZXdFZGdlLnVzZUtpbmQoKSAhPSBJbnQzMktpbmQpIHsKKyAg
ICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5ld0VkZ2UtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSk7CisgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihuZXdF
ZGdlKTsKICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKICAgICAgICAgCiAgICAgICAg
IGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpeERvdWJsZUVkZ2UodW5z
aWduZWQgY2hpbGRJbmRleCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dh
cmRTcGVjdWxhdGlvbikKKyAgICB2b2lkIGZpeERvdWJsZUVkZ2UoRWRnZSYgZWRnZSwgVXNlS2lu
ZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBC
YWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgTm9kZSogc291cmNlID0gbV9jdXJy
ZW50Tm9kZTsKLSAgICAgICAgRWRnZSYgZWRnZSA9IG1fZ3JhcGguY2hpbGQoc291cmNlLCBjaGls
ZEluZGV4KTsKICAgICAgICAgCiAgICAgICAgIGlmIChlZGdlLT5wcmVkaWN0aW9uKCkgJiBTcGVj
RG91YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAg
ICAgICAgIGVkZ2Uuc2V0VXNlS2luZCh1c2VLaW5kKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoY2hpbGRJ
bmRleCwgZGlyZWN0aW9uKTsKKyAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoZWRnZSwg
ZGlyZWN0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVu
c2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3
YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShFZGdlJiBl
ZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRp
cmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgewogICAgICAgICBOb2RlKiByZXN1
bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxv
Y2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwKICAgICAgICAgICAgIGRp
cmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uID8gSW50MzJUb0RvdWJsZSA6IEZvcndhcmRJ
bnQzMlRvRG91YmxlLAotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgbV9n
cmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS5ub2RlKCkpOworICAgICAgICAg
ICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwgRG91YmxlVXNl
KSk7CisgICAgICAgIHJlc3VsdC0+Y2hpbGQxKCkuc2V0VXNlS2luZChEb3VibGVVc2UpOwogICAg
ICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAg
IGRhdGFMb2dGKApAQCAtNTU3LDcgKzg1Nyw0OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9j
dXJyZW50Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZElu
ZGV4KS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgcmVzdWx0LT5pbmRleCgpKTsK
ICNlbmRpZgogCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRl
eCkgPSBFZGdlKHJlc3VsdCwgRG91YmxlVXNlKTsKKyAgICAgICAgbV9ncmFwaC5jaGlsZChtX2N1
cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5kKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihFZGdlJiBlZGdlKQorICAgIHsK
KyAgICAgICAgTm9kZSogb2xkTm9kZSA9IGVkZ2Uubm9kZSgpOworICAgICAgICAKKyAgICAgICAg
QVNTRVJUKG9sZE5vZGUtPmhhc0NvbnN0YW50KCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChvbGROb2RlKTsKKyAgICAgICAgaWYgKHZhbHVlLmlz
SW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0g
anNOdW1iZXIoSlNDOjp0b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkpKTsKKyAgICAgICAgQVNTRVJU
KHZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwg
UmVmTm9kZSwgU3BlY0ludDMyLCBKU0NvbnN0YW50LAorICAgICAgICAgICAgbV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiwgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRPckZpbmRDb25zdGFudCh2YWx1
ZSkpKSk7CisgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkTm9kZSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2RlKiBub2RlLCBBZGRTcGVjdWxh
dGlvbk1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVn
ZXJBbmRUcnVuY2F0ZUNvbnN0YW50cykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSB8fCBub2RlLT5jaGls
ZDIoKS0+aGFzQ29uc3RhbnQoKSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aGFzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRUb0ludDMyKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJ1bmNhdGVDb25zdGFudFRvSW50MzIo
bm9kZS0+Y2hpbGQyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGF0dGVtcHRUb01ha2VJbnRl
Z2VyQWRkKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9k
ZSA9IG1fZ3JhcGguYWRkU3BlY3VsYXRpb25Nb2RlKG5vZGUpOworICAgICAgICBpZiAobW9kZSA9
PSBEb250U3BlY3VsYXRlSW50ZWdlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3Nhcnkobm9kZSwgbW9kZSk7Cisg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICBub2Rl
LT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDQ1ICszNDYsMTQg
QEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIH0KIH0KIAotLy8gRklY
TUU6IENvbnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5vdCByZWN1cnNpdmUuCi0jZGVmaW5l
IERPX1RPX0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSAr
IF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg
ICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFyZ0NoaWxkcmVuW19jaGls
ZElkeF0pOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gZWxzZSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAg
ICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5j
aGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDMo
KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoZmFs
c2UpCi0KIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9wKQogewotICAgIERPX1RPX0NI
SUxEUkVOKG9wLCByZWYpOworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKCp0aGlzLCBvcCwg
cmVmKTsKIH0KIAogdm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKLSAgICBE
T19UT19DSElMRFJFTihvcCwgZGVyZWYpOworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKCp0
aGlzLCBvcCwgZGVyZWYpOwogfQogCiB2b2lkIEdyYXBoOjpkZXRocmVhZCgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgc3RydWN0IFB1dFRvQmFzZU9wZXJhdGlvbkRhdGEgewogCiBlbnVtIEFkZFNwZWN1bGF0
aW9uTW9kZSB7CiAgICAgRG9udFNwZWN1bGF0ZUludGVnZXIsCi0gICAgU3BlY3VsYXRlSW50ZWdl
ckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3csCisgICAgU3BlY3VsYXRlSW50ZWdlckFuZFRydW5jYXRl
Q29uc3RhbnRzLAogICAgIFNwZWN1bGF0ZUludGVnZXIKIH07CiAKQEAgLTE3NCw5ICsxNzQsOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmly
c3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxk
cmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZv
ckVkZ2UobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdlbmVyYXRlKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3Jt
U3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJh
dGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRy
ZW4uY2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAg
ICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDIoKSwgc2hvdWxkR2VuZXJh
dGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQz
KCksIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTUzMCw5ICs1
MzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+
Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyU3BlY3VsYXRp
b24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCk7CisgICAgICAgIHJldHVybiBp
c051bWVyaWNhbChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpICYmIGlzTnVtZXJpY2FsKG5vZGUt
PmNoaWxkMigpLnVzZUtpbmQoKSk7CiAgICAgfQogICAgIAogICAgIC8vIE5vdGUgdGhhdCBhICd0
cnVlJyByZXR1cm4gZG9lcyBub3QgYWN0dWFsbHkgbWVhbiB0aGF0IHRoZSBCeVZhbCBhY2Nlc3Mg
Y2xvYmJlcnMgbm90aGluZy4KQEAgLTc4MSw3ICs3NzksNyBAQCBwcml2YXRlOgogICAgICAgICBp
ZiAoZG91YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91YmxlSW1tZWRpYXRlID4gdHdv
VG9UaGU0OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAg
ICAgCi0gICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC0+YXJpdGhOb2Rl
RmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERvbnRT
cGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihh
ZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckFuZFRydW5jYXRlQ29uc3Rh
bnRzIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAogICAgIGJvb2wgbXVsSW1t
ZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwsIE5vZGUqIHZhcmlhYmxlLCBO
b2RlKiBpbW1lZGlhdGUpCkBAIC04MzAsNiArODI4LDM2IEBAIGlubGluZSBCbG9ja0luZGV4IEdy
YXBoOjpibG9ja0luZGV4Rm9yQnkKICAgICByZXR1cm4gKmJpbmFyeVNlYXJjaDxCbG9ja0luZGV4
LCB1bnNpZ25lZD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNv
ZGVCZWdpbiwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7CiB9CiAKKyNkZWZpbmUg
REZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAg
ICAgICAgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+Zmlyc3RDaGlsZCgpICsg
X25vZGUtPm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKChncmFwaCkubV92YXJBcmdDaGlsZHJl
bltfY2hpbGRJZHhdKTsgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSBlbHNlIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
IV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNo
aWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMygp
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxz
ZSkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNiBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgIHsKICAg
ICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwotICAgICAgICBBU1NFUlQoISEobV9mbGFn
cyAmIE5vZGVIYXNWYXJBcmdzKSA9PSAoY2hpbGRyZW4ua2luZCgpID09IEFkamFjZW5jeUxpc3Q6
OlZhcmlhYmxlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1
cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCkBAIC0yOTQsMjIgKzI5MywyMiBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50KHN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0
YUluZGV4LCBOb2RlKiBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5z
aWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAg
ICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKLSAgICAgICAgY2hpbGRyZW4u
c2V0Q2hpbGQxKEVkZ2Uoc3RvcmFnZSkpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoc3Rv
cmFnZSk7CiAgICAgICAgIG1fb3AgPSBHZXRCeU9mZnNldDsKICAgICAgICAgbV9mbGFncyAmPSB+
Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvUHV0QnlP
ZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKKyAg
ICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5SWQg
fHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNj
ZXNzRGF0YUluZGV4OwogICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDMoY2hpbGRyZW4uY2hpbGQy
KCkpOwogICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDIoY2hpbGRyZW4uY2hpbGQxKCkpOwotICAg
ICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShzdG9yYWdlKSk7CisgICAgICAgIGNoaWxkcmVu
LnNldENoaWxkMShzdG9yYWdlKTsKICAgICAgICAgbV9vcCA9IFB1dEJ5T2Zmc2V0OwogICAgICAg
ICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9CkBAIC05OTUsNyArOTk0LDcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9yZWZDb3VudC0tOwogICAgIH0KICAg
ICAKLSAgICBFZGdlIGNoaWxkMSgpCisgICAgRWRnZSYgY2hpbGQxKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hp
bGRyZW4uY2hpbGQxKCk7CkBAIC0xMDA5LDEzICsxMDA4LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMVVuY2hlY2tlZCgpOwogICAgIH0KIAotICAgIEVk
Z2UgY2hpbGQyKCkKKyAgICBFZGdlJiBjaGlsZDIoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEo
bV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGls
ZDIoKTsKICAgICB9CiAKLSAgICBFZGdlIGNoaWxkMygpCisgICAgRWRnZSYgY2hpbGQzKCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAg
ICByZXR1cm4gY2hpbGRyZW4uY2hpbGQzKCk7CkBAIC0xMDMzLDYgKzEwMzIsMTcgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICByZXR1cm4gY2hpbGRyZW4ubnVtQ2hpbGRyZW4oKTsKICAgICB9CiAg
ICAgCisgICAgVXNlS2luZCBiaW5hcnlVc2VLaW5kKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChj
aGlsZDEoKS51c2VLaW5kKCkgPT0gY2hpbGQyKCkudXNlS2luZCgpKTsKKyAgICAgICAgcmV0dXJu
IGNoaWxkMSgpLnVzZUtpbmQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0JpbmFyeVVzZUtp
bmQoVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtp
bmQoKSA9PSB1c2VLaW5kICYmIGNoaWxkMigpLnVzZUtpbmQoKSA9PSB1c2VLaW5kOworICAgIH0K
KyAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX3ByZWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDEx
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdHlwZWRlZiBBbGxvY2F0
b3I8Tm9kZT4gTm9kZUFsbG9jYXRvcjsKKyNpZiBVU0UoSlNWQUxVRTY0KQordHlwZWRlZiBBbGxv
Y2F0b3I8Tm9kZSwgMTEyPiBOb2RlQWxsb2NhdG9yOworI2Vsc2UKK3R5cGVkZWYgQWxsb2NhdG9y
PE5vZGUsIDgwPiBOb2RlQWxsb2NhdG9yOworI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2
aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw4ICs5Niw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhGb3J3YXJkSW50MzJUb0RvdWJsZSwgTm9kZVJlc3VsdE51bWJl
cikgXAogICAgIC8qIFVzZWQgdG8gc3BlY3VsYXRlIHRoYXQgYSBkb3VibGUgdmFsdWUgaXMgYWN0
dWFsbHkgYW4gaW50ZWdlci4gKi9cCiAgICAgbWFjcm8oRG91YmxlQXNJbnQzMiwgTm9kZVJlc3Vs
dEludDMyKSBcCi0gICAgLyogVXNlZCB0byByZWNvcmQgcGxhY2VzIHdoZXJlIHdlIG11c3QgY2hl
Y2sgaWYgYSB2YWx1ZSBpcyBhIG51bWJlci4gKi9cCi0gICAgbWFjcm8oQ2hlY2tOdW1iZXIsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGFyaXRobWV0aWMgb3Bl
cmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQXJpdGhBZGQsIE5vZGVSZXN1bHROdW1iZXIgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTks
MjAgKzE1OTksMjAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbgog
ICAgICAgICAvLyBzbyBjYW4gYmUgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyByZWZlcmVu
Y2UgdGhlIGNvbXBhcmUuIAogICAgICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgp
ID09IDEpOwogCi0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgaWYgKG5v
ZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpCiAgICAgICAgICAgICBjb21waWxlUGVlcEhv
bGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbik7Ci0gICAgICAgIGVs
c2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmlzQmluYXJ5
VXNlS2luZChOdW1iZXJVc2UpKQogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJh
bmNoKG5vZGUsIGJyYW5jaE5vZGUsIGRvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVj
dWxhdGVTdHJpbmcoKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChT
dHJpbmdVc2UpKSB7CiAgICAgICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5j
aChub2RlLCBicmFuY2hOb2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRT
cGVjdWxhdGVPYmplY3QoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQo
T2JqZWN0VXNlKSkKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0
eShub2RlLCBicmFuY2hOb2RlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3Vs
YXRlT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IE9iamVjdFVzZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2Jq
ZWN0T3JPdGhlclVzZSkKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RUb09i
amVjdE9yT3RoZXJFcXVhbGl0eShub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIGJyYW5j
aE5vZGUpOwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KCkpCisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
T2JqZWN0T3JPdGhlclVzZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNl
KQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVx
dWFsaXR5KG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEoKSwgYnJhbmNoTm9kZSk7CiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKQEAgLTIxOTQsNyAr
MjE5NCw4IEBAIEdlbmVyYXRlZE9wZXJhbmRUeXBlIFNwZWN1bGF0aXZlSklUOjpjaGUKIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMihOb2RlKiBub2RlKQogewotICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgc3dp
dGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgbV9qaXQu
bW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkBAIC0yMjAyLDcgKzIyMDMsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIo
KSkgeworICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIHN3aXRjaCAoY2hlY2tHZW5lcmF0
ZWRUeXBlRm9yVG9JbnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CiAgICAgICAgIGNhc2Ug
R2VuZXJhdGVkT3BlcmFuZEludGVnZXI6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0yMjk0LDExICsyMjk1LDEzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRUeXBlVW5rbm93bjoKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7CisgICAgY2FzZSBCb29sZWFuVXNlOiB7CiAgICAg
ICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgCkBAIC0yMzA4
LDEwICsyMzExLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIK
ICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIAotICAgIC8vIERvIGl0IHRoZSBzYWZlIHdheS4KLSAgICBub25TcGVj
dWxhdGl2ZVZhbHVlVG9JbnQzMihub2RlKTsKLSAgICByZXR1cm47CisKKyAgICBjYXNlIFVudHlw
ZWRVc2U6IHsKKyAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUgd2F5LgorICAgICAgICBub25TcGVj
dWxhdGl2ZVZhbHVlVG9JbnQzMihub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVVJbnQzMlRvTnVtYmVyKE5vZGUqIG5vZGUpCkBAIC0yNTk4LDQ5ICsyNjA4LDY0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgbV9qaXQubW92ZShJ
bW0zMih0b0ludDMyKGQpKSwgc2NyYXRjaFJlZyk7CiAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0
Y2gpOwogICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7Ci0gICAgfSBlbHNlIGlmICh2YWx1
ZVVzZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigp
OwotICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT3AuZ3ByKCksIHNjcmF0Y2hSZWcpOwotICAgICAg
ICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgQVNTRVJUKGVs
ZW1lbnRTaXplID09IDEpOwotICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZSht
X2ppdCwgc2NyYXRjaFJlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRj
aCk7Ci0gICAgICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsKLSAgICB9IGVsc2UgaWYgKHJvdW5k
aW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEp
OwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2Up
OwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBGUFJUZW1wb3Jh
cnkgZmxvYXRTY3JhdGNoKHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIo
KTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY29tcGlsZUNs
YW1wRG91YmxlVG9CeXRlKG1faml0LCBncHIsIGZwciwgZmxvYXRTY3JhdGNoLmZwcigpKTsKLSAg
ICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKLSAgICAgICAgdmFsdWVHUFIgPSBncHI7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZh
bHVlVXNlKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgRlBS
UmVnIGZwciA9IHZhbHVlT3AuZnByKCk7Ci0gICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3By
KCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IG1faml0LmJyYW5jaERv
dWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwsIGZwciwgZnByKTsKLSAgICAgICAgbV9q
aXQueG9yUHRyKGdwciwgZ3ByKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZml4ZWQg
PSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIG5vdE5hTi5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVkOwotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBT
aWduZWRUeXBlZEFycmF5KQotICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNh
dGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0
ZUZhaWxlZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5j
aFRydW5jYXRlRG91YmxlVG9VaW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJ
ZlRydW5jYXRlRmFpbGVkKTsKLSAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChmYWlsZWQsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7Ci0KLSAgICAg
ICAgZml4ZWQubGluaygmbV9qaXQpOwotICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwotICAg
ICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgc3dpdGNoICh2YWx1ZVVzZS51c2VLaW5kKCkp
IHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJl
Zyk7CisgICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBjb21w
aWxlQ2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOworICAgICAgICAgICAgdmFsdWVHUFIg
PSBzY3JhdGNoUmVnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgaWYgKHJvdW5kaW5nID09
IENsYW1wUm91bmRpbmcpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0g
MSk7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMs
IHZhbHVlVXNlKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7CisgICAgICAg
ICAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7CisgICAgICAgICAgICAgICAgR1BS
UmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBjb21waWxlQ2xhbXBEb3Vi
bGVUb0J5dGUobV9qaXQsIGdwciwgZnByLCBmbG9hdFNjcmF0Y2guZnByKCkpOworICAgICAgICAg
ICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBn
cHI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CisgICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVP
cC5mcHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IG1faml0LmJyYW5jaERv
dWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwsIGZwciwgZnByKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC54b3JQdHIoZ3ByLCBncHIpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZpeGVkID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5vdE5hTi5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZmFpbGVkOworICAgICAgICAgICAgICAgIGlmIChzaWduZWRuZXNzID09IFNp
Z25lZFR5cGVkQXJyYXkpCisgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5j
aFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElm
VHJ1bmNhdGVGYWlsZWQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwg
TWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChmYWls
ZWQsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZml4ZWQubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHZhbHVlLmFkb3B0
KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisgICAgCiAgICAgQVNTRVJUX1VOVVNFRCh2
YWx1ZUdQUiwgdmFsdWVHUFIgIT0gcHJvcGVydHkpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBi
YXNlKTsKICAgICBBU1NFUlQodmFsdWVHUFIgIT0gc3RvcmFnZVJlZyk7CkBAIC0zMDIxLDkgKzMw
NDYsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8oTgogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG1faml0
LmdyYXBoKCkuYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgIHN3aXRjaCAo
bm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBp
ZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAg
ICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAKQEAgLTMwMzksNyArMzA2NSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgICAgICAgICAKICAgICAgICAgaWYg
KGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+
Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQz
MkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVD
YW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKQEAgLTMwODEsOCAr
MzEwNyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAg
ICAgaW50ZWdlclJlc3VsdChncHJSZXN1bHQsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgICAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5n
RGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsK
KyAgICAKKyAgICBjYXNlIE51bWJlclVzZTogewogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEsIG9wMik7CkBAIC0zMDk0LDE0ICszMTIwLDE3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3Vs
dC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBpZiAobm9kZS0+
b3AoKSA9PSBWYWx1ZUFkZCkgeworICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7
CiAgICAgICAgIGNvbXBpbGVWYWx1ZUFkZChub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICAKLSAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAotICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhTdWIoTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQ1
LDEyICs1NDUsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZSog
bm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0Z1bmN0aW9uQ29uc3RhbnQobm9kZSk7IH0K
ICAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1f
aml0LmdyYXBoKCkudmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7IH0KICAgICBkb3VibGUgdmFs
dWVPZk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFs
dWVPZk51bWJlckNvbnN0YW50KG5vZGUpOyB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mTnVtYmVyQ29u
c3RhbnRBc0ludDMyKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUp
OwotICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2Rl
KSk7Ci0gICAgfQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdm9pZCogYWRkcmVzc09mRG91
YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuYWRkcmVzc09mRG91YmxlQ29u
c3RhbnQobm9kZSk7IH0KICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
c2VLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Vz
ZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1VzZUtpbmRfaAorI2Rl
ZmluZSBERkdVc2VLaW5kX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Vu
dW0gVXNlS2luZCB7CisgICAgVW50eXBlZFVzZSwKKyAgICBJbnQzMlVzZSwKKyAgICBLbm93bklu
dDMyVXNlLAorICAgIFJlYWxOdW1iZXJVc2UsCisgICAgTnVtYmVyVXNlLAorICAgIEtub3duTnVt
YmVyVXNlLAorICAgIEJvb2xlYW5Vc2UsCisgICAgQ2VsbFVzZSwKKyAgICBLbm93bkNlbGxVc2Us
CisgICAgT2JqZWN0VXNlLAorICAgIE9iamVjdE9yT3RoZXJVc2UsCisgICAgRnVuY3Rpb25Vc2Us
CisgICAgU3RyaW5nVXNlLAorICAgIE90aGVyVXNlLAorICAgIExhc3RVc2VLaW5kIC8vIE11c3Qg
YWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRl
bm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMuCit9OworCitBTFdBWVNfSU5MSU5FIFNw
ZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNlS2luZCB1c2VLaW5kKQoreworICAgIHN3aXRj
aCAodXNlS2luZCkgeworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNU
b3A7CisgICAgY2FzZSBJbnQzMlVzZToKKyAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAg
IHJldHVybiBTcGVjSW50MzI7CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICByZXR1
cm4gU3BlY0ludDMyOworICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIFNw
ZWNSZWFsTnVtYmVyOworICAgIGNhc2UgTnVtYmVyVXNlOgorICAgIGNhc2UgS25vd25OdW1iZXJV
c2U6CisgICAgICAgIHJldHVybiBTcGVjTnVtYmVyOworICAgIGNhc2UgQm9vbGVhblVzZToKKyAg
ICAgICAgcmV0dXJuIFNwZWNCb29sZWFuOworICAgIGNhc2UgQ2VsbFVzZToKKyAgICBjYXNlIEtu
b3duQ2VsbFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNDZWxsOworICAgIGNhc2UgT2JqZWN0VXNl
OgorICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6
CisgICAgICAgIHJldHVybiBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIGNhc2UgRnVuY3Rp
b25Vc2U6CisgICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CisgICAgY2FzZSBTdHJpbmdVc2U6
CisgICAgICAgIHJldHVybiBTcGVjU3RyaW5nOworICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAg
IHJldHVybiBTcGVjT3RoZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNwZWNUb3A7CisgICAgfQorfQorCitBTFdB
WVNfSU5MSU5FIGJvb2wgaXNOdW1lcmljYWwoVXNlS2luZCBraW5kKQoreworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgSW50MzJVc2U6CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAg
IGNhc2UgUmVhbE51bWJlclVzZToKKyAgICBjYXNlIE51bWJlclVzZToKKyAgICBjYXNlIFJlYWxO
dW1iZXJVc2U6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFt
ZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZH
OjpVc2VLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR1VzZUtpbmRfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188807</attachid>
            <date>2013-02-18 00:34:38 -0800</date>
            <delta_ts>2013-02-18 12:58:06 -0800</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>149607</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNjEgQEAgQWJzdHJh
Y3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9v
bGVhblJlc3VsdDsKIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobV9ibG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAg
CiAgICAgbV9kaWRDbG9iYmVyID0gZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIAogICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKQoreworICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5h
dChpbmRleEluQmxvY2spKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMo
Tm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBmaWx0ZXJFZGdlQnlVc2UpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdl
cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0
KGluZGV4SW5CbG9jaykpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2UoRWRn
ZSBlZGdlKQoreworICAgIEFTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0
ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5
RWRnZXMoTm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBo
LCBub2RlLCB2ZXJpZnlFZGdlKTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpCisgICAgICAgIHZlcmlmeUVkZ2VzKG5vZGUpOworICAgIAogICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdlYWtKU0Nv
bnN0YW50OgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czogewogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBJZGVudGl0eTogewogICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTI2NSwxOSArMjk2LDE2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lKSB7CiAg
ICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBib29sIGNh
bkV4aXQgPSBmYWxzZTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVz
Lm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKICAgICAgICAgaWYgKCF2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKHZhbHVlLmlz
Q2xlYXIoKSkKLSAgICAgICAgICAgICAgICBjYW5FeGl0IHw9IHRydWU7CisgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUu
dmFsdWUoKSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBm
b3JOb2RlKG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yODYsMzUgKzMxNCwxMCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewot
ICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKQotICAg
ICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkp
IHsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgbV92YXJp
YWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGVkVHlwZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJl
ZGljdGlvbigpOwotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRU
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIAogICAg
ICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMyMiw3ICszMjUsNiBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVl
biBzZXQuCiAgICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNjYs
NyArMzY4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHNw
ZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODEsMTYgKzM4MiwxNCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50
MzI6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CkBAIC00MDQsNyArNDAzLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNDIzLDE0ICs0MjEsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKLSAgICAgICAgICAgIHNwZWN1
bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICBicmVhazsKQEAgLTQ0NSw3ICs0MzUsNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1
bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKQEAgLTQ1MywxMCArNDQyLDYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQ2hlY2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAg
ICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTQ2
NywzMCArNDUyLDI1IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAg
ICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3Mo
KSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBj
YXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVG
bGFncygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7
CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgogICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKICAgICAgICAgICAgICAg
ICAmJiBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5
cGUpKQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFZhbHVlQWRkKSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIpOwotICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAotICAgICAgICBt
X2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC01MDMsMTUgKzQ4MywxOSBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAg
ICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2Fu
VHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNo
IChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5v
ZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3Vi
bGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7CkBAIC01MjIsMTUgKzUwNiwxOSBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICht
X2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAg
IHNwZWN1bGF0ZUludDMyVW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9k
ZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJs
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBBcml0aE11bDogewpAQCAtNTQyLDIxICs1MzAsMjQgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFw
aC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLAotICAgICAgICAgICAgICAgICFu
b2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAg
ICAgICAgfHwgIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3Mo
KSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBj
YXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
KyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVG
bGFncygpKQorICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5v
ZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAg
ICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlKQorICAgICAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVy
QmluYXJ5KG5vZGUpOwotICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3Bl
Y3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBBcml0aERpdjoKQEAgLTU5MywxNSArNTg0LDE4IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5j
aGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUsIHRydWUpOyAvLyBm
b3JjaW5nIGNhbi1leGl0LCB3aGljaCBpcyBhIGJpdCBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUu
CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW50MzJVc2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNE
b3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAgICAgCiAgICAgY2FzZSBBcml0aEFiczogewpAQCAtNjEyLDE1ICs2MDYsMTggQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkK
LSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlLCB0cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNl
OgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Rv
dWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJp
dGhTcXJ0OiB7CkBAIC02MzEsNyArNjI4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShu
b2RlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTY1MywxOCArNjQ5LDE5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGls
ZC0+cHJlZGljdGlvbigpKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2Rl
KTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIo
KSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAg
ICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2Ug
TnVtYmVyVXNlOgorICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwg
JiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5
KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
Ci0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc2MiwxNCArNzU5
LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAo
aXNDZWxsU3BlY3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAg
ICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNw
ZWNDZWxsKTsKKworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewor
ICAgICAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAg
ICAgICAgYnJlYWs7CkBAIC04MjcsNTkgKzgyNywxMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjQm9vbGVhbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJl
RXFDb25zdGFudCkgewotICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBm
aXJlZCB0aGUgTWFzcXVlcmFkZXNBc1VuZGVmaW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFs
aWQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Tm9kZSogbGVmdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgTm9kZSogcmlnaHQg
PSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsK
LSAgICAgICAgU3BlY3VsYXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7Ci0gICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewotICAgICAgICAgICAgZmls
dGVyID0gU3BlY0ludDMyOwotICAgICAgICAgICAgY2hlY2tlciA9IGlzSW50MzJTcGVjdWxhdGlv
bjsKLSAgICAgICAgfSBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdCwg
cmlnaHQpKSB7Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwotICAgICAgICAgICAg
Y2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+
b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxh
dGVTdHJpbmcoKSB8fCByaWdodC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQp
LmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0
ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHQtPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3Bl
Y09iamVjdCk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmpl
Y3QgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBy
aWdodC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNw
ZWNPYmplY3QgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZp
bHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAKLSAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7Ci0gICAgICAgICAgICBjaGVja2VyID0g
aXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmlsdGVy
ID0gU3BlY1RvcDsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FueVNwZWN1bGF0aW9uOwotICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAgICAgICFjaGVja2Vy
KGZvck5vZGUobGVmdCkubV90eXBlKQotICAgICAgICAgICAgfHwgIWNoZWNrZXIoZm9yTm9kZShy
aWdodCkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKGZpbHRlcik7Ci0g
ICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICAvLyBUaGlzIGlz
IG92ZXJseSBjb25zZXJ2YXRpdmUuIEJ1dCB0aGUgb25seSB0aGluZyB0aGlzIHByZXZlbnRzIGlz
IHN0b3JlIGVsaW1pbmF0aW9uLAorICAgICAgICAvLyBhbmQgaG93IGxpa2VseSBpcyBpdCwgcmVh
bGx5LCB0aGF0IHlvdSdsbCBoYXZlIHJlZHVuZGFudCBzdG9yZXMgYWNyb3NzIGEgY29tcGFyaXNv
bgorICAgICAgICAvLyBvcGVyYXRpb24/IENvbXBhcmlzb24gb3BlcmF0aW9ucyBhcmUgdHlwaWNh
bGx5IGF0IHRoZSBlbmQgb2YgYmFzaWMgYmxvY2tzLCBzbworICAgICAgICAvLyB1bmxlc3Mgd2Ug
aGF2ZSBnbG9iYWwgc3RvcmUgZWxpbWluYXRpb24gKHN1cGVyIHVubGlrZWx5IGdpdmVuIGhvdyB1
bnByb2ZpdGFibGUgdGhhdAorICAgICAgICAvLyBvcHRpbWl6YXRpb24gaXMgdG8gYmVnaW4gd2l0
aCksIHlvdSBhcmVuJ3QgZ29pbmcgdG8gYmUgd2FudGluZyB0byBzdG9yZSBlbGltaW5hdGUKKyAg
ICAgICAgLy8gYWNyb3NzIGFuIGVxdWFsaXR5IG9wLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTg5Niw0MyAr
ODUwLDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNC
b29sZWFuKTsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZVN0cmljdEVxQ29uc3Rh
bnQpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmlu
YXJ5KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewotICAgICAg
ICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8
fCByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHROb2RlLT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobGVmdE5vZGUpLmZpbHRlcihTcGVjT2JqZWN0KTsK
LSAgICAgICAgICAgIGZvck5vZGUocmlnaHROb2RlKS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29u
c2VydmF0aXZlLgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3Ry
aW5nQ2hhckNvZGVBdDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
U3RyaW5nQ2hhckF0OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTk1
MiwxNSArODgwLDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTY4LDcgKzg5Myw2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihT
cGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHMoKSkgewogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpA
QCAtOTgwLDQ4ICs5MDQsMzggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAg
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlm
IChub2RlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTEwNDUsMTA0ICs5NTks
MjMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2Vs
bCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwp
OwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAg
ICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMyku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDhBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQz
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0Nl
bGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAg
ICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0g
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExNTAs
MTYgKzk4Myw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjUmVhbE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTcyLDExICs5OTUsNiBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNl
IFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KAotICAgICAgICAgICAgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCkBAIC0xMjAxLDI0ICsxMDE5LDEzIEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRp
b24sIGJ1dCB3ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0
aGUgc291cmNlIHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAg
Ly8gdGhlIGJyYW5jaC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFu
KCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5m
aWx0ZXIoU3BlY09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQt
PnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5h
cnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIo
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBt
X2JyYW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBUaHJvdzoKQEAgLTEyMjgsMTcgKzEwMzUsMTQgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JO
b2RlKGNoaWxkKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGls
ZENvbnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsK
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI3Mywz
OSArMTA3NywxNSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgICAgICB0eXBlIHw9IFNwZWNTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgZGVzdGlu
YXRpb24uc2V0KHR5cGUpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBTdHJDYXQ6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
U3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5
OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGUt
Pm51bUNoaWxkcmVuKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0lO
VDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5k
ZXggPSAwOyBvcGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRl
eCkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2Rl
LT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8
IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQotICAgICAgICAgICAgICAgIGZv
ck5vZGUobV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJh
bmRJbmRleF0pLmZpbHRlcihTcGVjUmVhbE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTMxOCw3ICsxMDk4LDYgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogCiAgICAgY2FzZSBOZXdBcnJheVdp
dGhTaXplOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0FycmF5KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMTM0NSwzMiArMTEyNCwyNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9u
KGNoaWxkLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNP
dGhlcik7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAg
ICAgIGNhc2UgT3RoZXJVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVj
dE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewotICAgICAg
ICAgICAgc291cmNlLmZpbHRlcihTcGVjT2JqZWN0KTsKKyAgICAgICAgY2FzZSBPYmplY3RVc2U6
CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJj
ZTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICBkZXN0aW5hdGlv
bi5tZXJnZShTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBj
YXNlIENyZWF0ZVRoaXM6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0g
Zm9yTm9kZShub2RlKTsKLSAgICAgICAgCi0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2Vs
bFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsKLSAgICAgICAgICAgIAotICAgICAgICBzb3Vy
Y2UuZmlsdGVyKFNwZWNGdW5jdGlvbik7Ci0gICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmlu
YWxPYmplY3QpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRmluYWxPYmplY3QpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTM3OSwxOSArMTE1MiwxNiBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5jb2RlT3JpZ2luKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3Ry
dWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0
ZUFyZ3VtZW50czoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9y
aWdpbiktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9
IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQwNSwxMCArMTE3NSw5IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90
Q3JlYXRlZDoKICAgICAgICAgaWYgKGlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAgICAgICAg
ICBtX3ZhcmlhYmxlcy5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5h
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxz
ZQogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIApAQCAtMTQyOCw3ICsxMTk3LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFy
Z3VtZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBh
cmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQgb24gdGhl
IGxlbmd0aCBwcm9wZXJ0eS4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4s
IGluZGV4SW5CbG9jayk7CkBAIC0xNDQyLDcgKzEyMTAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1
dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQog
ICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJl
aW5nIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHRoZQogICAgICAgICAvLyBBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKQEAgLTE0NTEsOCArMTIxOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBh
bGwgc3RydWN0dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAgICAg
ICAvLyBhIGdldHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIC8v
IEJ1dCB3ZSBkbyBzcGVjdWxhdGUgdGhhdCB0aGUgaW5kZXggaXMgYW4gaW50ZWdlci4KLSAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIC8v
IEFuZCB0aGUgcmVzdWx0IGlzIHVua25vd24uCiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRv
cCgpOwogICAgICAgICBicmVhazsKQEAgLTE0NjAsMjkgKzEyMjUsMjQgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAg
Y2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6
Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5mdW5j
dGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0
Q2FsbGVlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAg
IGNhc2UgU2V0Q2FsbGVlOgogICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBH
ZXRTY29wZTogLy8gRklYTUU6IFdlIGNvdWxkIGdldCByaWQgb2YgdGhlc2UgaWYgd2Uga25vdyB0
aGF0IHRoZSBKU0Z1bmN0aW9uIGlzIGEgY29uc3RhbnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDYyMDIKICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgY2FzZSBT
a2lwVG9wU2NvcGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIFNraXBTY29wZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAg
ICAgIGlmIChjaGlsZCAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxKU1Nj
b3BlKj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7CkBAIC0xNDkzLDE4ICsxMjUzLDE0IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0
ZXJzOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5j
bGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUtPmNvZGVPcmlnaW4p
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTUxNiw4ICsxMjcyLDYgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5m
aWx0ZXIoU3BlY0NlbGwpOwotCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAg
ICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
CkBAIC0xNTUzLDcgKzEzMDcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIC8vIG1vcmUgdGhvcm91Z2hseS4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMAogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZWxp
bWluYXRlIHRoZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVlIHRoYXQgZmxv
d3MgaW50byB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2MjAxCi0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTE1NjIsNiArMTMxNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewogICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUg
c2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFTU0VSVCghKHZh
bHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBh
bHJlYWR5IGVuc3VyZWQgdGhpcy4KICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sg
aXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAg
IC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9s
ZGluZyBwaGFzZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBvaW50
IGluc3RlYWQuCkBAIC0xNTY5LDkgKzEzMjMsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhdmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICB8fCAhaXND
ZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSk7CisgICAgICAgIGlmICghdmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CiAgICAgICAgIG1faGF2
ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTE1ODksNyArMTM0Miw2IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gaW5m
aW5pdHkgb2Ygc3RydWN0dXJlcy4KICAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSk7
CiAgICAgICAgIAotICAgICAgICBBU1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2ZSBw
cm92ZW4gbXVzdC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24gdG8g
YmUgYmFkLgogICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAg
ICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKQEAgLTE1OTgsNyArMTM1MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2Ug
UGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG5vZGUtPnN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKQEAgLTE2MDgsMTQgKzEzNTksMTEg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc0Nl
bGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCB0aGlzIGlzIGZv
bGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3YXlzIGV4aXQsIHNv
IHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIgaGVyZS4KQEAgLTE2
MjgsNyArMTM3Niw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CkBAIC0xNjc3
LDkgKzE0MjQsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNv
bnZlcnQKICAgICAgICAgICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBB
cnJheTo6UmFnZUNvbnZlcnQpOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2Rl
LT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwpAQCAtMTY5MiwzNSArMTQzNiwyMCBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5C
bG9jayk7CiAgICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1
cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgZm9yTm9kZShub2RlKS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNh
c2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VS
ZXN1bHQoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9CiAgICAgICAgIGZv
ck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFsc2U7Ci0gICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAg
ICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
Q2VsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5F
eGl0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0xNzY0LDEyICsx
NDkzLDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVh
azsKICAgICAgICAgCkBAIC0xNzc5LDM0ICsxNTA2LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFy
OgogICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJ
bnN0YW5jZToKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdl
IGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5j
ZQogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3
ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAg
ICAgICAgLy8gRklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxy
ZWFkeSBkb2VzIGFuIHVuY29uZGl0aW9uYWwgY2VsbAotICAgICAgICAvLyBjaGVjay4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQotICAgICAgICBpZiAoIShu
b2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKSAmJiAhKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAg
ICAgY2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgY2FzZSBC
cmVha3BvaW50OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENhbGw6CkBAIC0xODM0LDcgKzE1NTAsNiBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVT
dGFydDoKICAgICBjYXNlIE5vcDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgTGFzdE5vZGVUeXBlOgpAQCAtMTg0NSw2ICsxNTYwLDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICByZXR1cm4gbV9pc1ZhbGlkOwogfQogCitib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAgIE5v
ZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgIGlmICghc3RhcnRFeGVj
dXRpbmcobm9kZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVFZGdl
cyhub2RlKTsKKyAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsK
K30KKwogaW5saW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBjbG9iYmVy
Q2FwdHVyZWRWYXJzKGNvZGVPcmlnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgs
NyArMTU4LDUyIEBAIHB1YmxpYzoKICAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVl
IHBhc3QgdGhpcyBub2RlLiBOb3RhYmx5LCBpdCB3aWxsIHJldHVybiB0cnVlCiAgICAgLy8gZm9y
IGJsb2NrIHRlcm1pbmFscywgc28gbG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1
cm4gb3IgdmFyaWFudHMKICAgICAvLyBvZiBUaHJvdy4KLSAgICBib29sIGV4ZWN1dGUodW5zaWdu
ZWQpOworICAgIC8vCisgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQg
dG8gZG9pbmc6CisgICAgLy8KKyAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgp
KSB7CisgICAgLy8gICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7CisgICAgLy8gICAgIHJl
c3VsdCA9IHN0YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKKyAgICAvLyB9IGVsc2UKKyAgICAv
LyAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJs
b2NrKTsKKyAgICAKKyAgICAvLyBJbmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIHRo
ZSBub2RlLiBJdCByZXNldHMgYW55IHN0YXRlIGluIHRoZSBub2RlLAorICAgIC8vIHRoYXQgaXMg
cHJvZ3Jlc3NpdmVseSBidWlsdCB1cCBieSBleGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVj
dHMoKS4gSW4KKyAgICAvLyBwYXJ0aWN1bGFyLCB0aGlzIHJlc2V0cyBjYW5FeGl0KCksIHNvIGlm
IHlvdSB3YW50IHRvICJrbm93IiBiZXR3ZWVuIGNhbGxzIG9mCisgICAgLy8gc3RhcnRFeGVjdXRp
bmcoKSBhbmQgZXhlY3V0ZUVkZ2VzKCkvRWZmZWN0cygpIHdoZXRoZXIgdGhlIGxhc3QgcnVuIG9m
IHRoZQorICAgIC8vIGFuYWx5c2lzIGNvbmNsdWRlZCB0aGF0IHRoZSBub2RlIGNhbiBleGl0LCB5
b3Ugc2hvdWxkIHByb2JhYmx5IHNldCB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24gYXNpZGUgcHJp
b3IgdG8gY2FsbGluZyBzdGFydEV4ZWN1dGluZygpLgorICAgIHZvaWQgc3RhcnRFeGVjdXRpbmco
Tm9kZSopOworICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsK
KyAgICAKKyAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBu
b2RlLiBUaGlzIHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKKyAgICAvLyBvbiBhbGwgZWRnZXMgb2Yg
dGhlIG5vZGUuIFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNl
ZAorICAgIC8vIGZpbHRlckVkZ2VCeVVzZSgpIChvciBzb21lIGVxdWl2YWxlbnQpIG9uIGVhY2gg
ZWRnZS4KKyAgICB2b2lkIGV4ZWN1dGVFZGdlcyhOb2RlKik7CisgICAgdm9pZCBleGVjdXRlRWRn
ZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
ZmlsdGVyRWRnZUJ5VXNlKEVkZ2UgZWRnZSkKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgS25vd25JbnQz
MlVzZToKKyAgICAgICAgY2FzZSBLbm93bk51bWJlclVzZToKKyAgICAgICAgY2FzZSBLbm93bkNl
bGxVc2U6CisgICAgICAgICAgICBBU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBl
RmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmIC8vICFBU1NF
UlRfRElTQUJMRUQKKyAgICAgICAgCisgICAgICAgIGZpbHRlckJ5VHlwZShlZGdlLm5vZGUoKSwg
dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0
cmFjdGx5IGV4ZWN1dGUgdGhlIGVmZmVjdHMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgY2hhbmdl
cyB0aGUgYWJzdHJhY3QKKyAgICAvLyBzdGF0ZSBhc3N1bWluZyB0aGF0IGVkZ2VzIGhhdmUgYWxy
ZWFkeSBiZWVuIGZpbHRlcmVkLgorICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5k
ZXhJbkJsb2NrKTsKKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgTm9kZSopOwogICAgIAogICAgIC8vIERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2Ji
ZXIgdGhlIHdvcmxkPwogICAgIGJvb2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlk
Q2xvYmJlcjsgfQpAQCAtMjU5LDYgKzMwNCwxNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShO
b2RlKiBub2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOworICAgICAgICBpZiAodmFsdWUubV90eXBlICYg
fnR5cGUpCisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICB2YWx1
ZS5maWx0ZXIodHlwZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmVyaWZ5RWRnZShFZGdlKTsK
KyAgICB2b2lkIHZlcmlmeUVkZ2VzKE5vZGUqKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzQsNiArMjM0LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZv
aWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBG
SVhNRTogVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5
cGUgbm90CisgICAgICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBz
cGVjaWZpYyB2YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwOTY2MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9t
U3RydWN0dXJlcygpOwogICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zy
b21TdHJ1Y3R1cmVzKCk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihv
dGhlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxp
c3QuaAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
ZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgog
ICAgIEFkamFjZW5jeUxpc3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2lu
ZCkKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYK
ICAgICB7CiAgICAgICAgIGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dv
cmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU4LDE4ICs1NSwxMiBAQCBwdWJs
aWM6CiAgICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGls
ZDEsIE5vZGUqIGNoaWxkMiwgTm9kZSogY2hpbGQzKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAg
ICAgICAgOiBtX2tpbmQoRml4ZWQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoa2luZCwga2luZCA9PSBGaXhlZCk7CiAgICAgICAgIGluaXRpYWxpemUoY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMyk7CiAgICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCB1
bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKLSNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgICAgIDogbV9raW5kKFZhcmlhYmxlKQotI2VuZGlmCiAgICAgewogICAgICAg
ICBBU1NFUlRfVU5VU0VEKGtpbmQsIGtpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBzZXRGaXJz
dENoaWxkKGZpcnN0Q2hpbGQpOwpAQCAtNzksMjEgKzcwLDE4IEBAIHB1YmxpYzoKICAgICBjb25z
dCBFZGdlJiBjaGlsZCh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkg
PCBTaXplKTsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVy
biBtX3dvcmRzW2ldOwogICAgIH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQodW5zaWduZWQg
aSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tp
bmQgPT0gRml4ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBzZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAg
ICAgICAgbV93b3Jkc1tpXSA9IG5vZGVVc2U7CiAgICAgfQogICAgIApAQCAtMTI1LDkgKzExMyw2
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgICAgICBtX2tpbmQgPSBGaXhlZDsKLSNlbmRpZgogICAgICAgICBpbml0aWFs
aXplKCk7CiAgICAgfQogICAgIApAQCAtMTQyLDM0ICsxMjcsMjQgQEAgcHVibGljOgogCiAgICAg
dW5zaWduZWQgZmlyc3RDaGlsZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5k
ID09IFZhcmlhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZDsK
ICAgICB9CiAgICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCiAgICAg
ewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1sw
XS5tX2VuY29kZWRXb3JkID0gZmlyc3RDaGlsZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQg
bnVtQ2hpbGRyZW4oKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJp
YWJsZSk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CiAgICAgfQog
ICAgIHZvaWQgc2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgewotICAg
ICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1sxXS5tX2Vu
Y29kZWRXb3JkID0gbnVtQ2hpbGRyZW47CiAgICAgfQogICAgIAotI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSNlbmRpZgogcHJp
dmF0ZToKICAgICBFZGdlIG1fd29yZHNbU2l6ZV07Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAg
IEtpbmQgbV9raW5kOwotI2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0
MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIC8vICAgYW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgog
Ly8gLSBZb3UgY2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBu
ZXZlciB1c2UgZnJlZUFsbCgpLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gZm9yY2VkQ2Vs
bFNpemU6IHNldCB0aGlzIHRvIDAgaWYgeW91J3JlIGhhcHB5IHdpdGggdGhlIGRlZmF1bHQgYWxp
Z25tZW50LCBvciBzZXQgaXQKKy8vIHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91IHdhbnQgdG8g
Zm9yY2libHkgYWxpZ24gdGhlIGFsbG9jYXRpb25zIHRvIGEgY2VydGFpbgorLy8gdmFsdWUuIFdo
ZW4geW91IGRvIHRoaXMsIEFsbG9jYXRvciB3aWxsIEFTU0VSVCB0aGF0IGZvcmNlZENlbGxBbGln
bm1lbnQgPj0gc2l6ZW9mKFQpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3Jj
ZWRDZWxsQWxpZ25tZW50PgogY2xhc3MgQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICBBbGxvY2F0
b3IoKTsKQEAgLTYzLDEzICs2NywyNCBAQCBwcml2YXRlOgogICAgIHZvaWQqIGJ1bXBBbGxvY2F0
ZSgpOwogICAgIHZvaWQqIGZyZWVMaXN0QWxsb2NhdGUoKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNs
b3coKTsKLQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFmb3JjZWRDZWxsQWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihU
KTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChmb3JjZWRDZWxsQWxpZ25tZW50ID49IHNpemVv
ZihUKSk7CisgICAgICAgIHJldHVybiBmb3JjZWRDZWxsQWxpZ25tZW50OworICAgIH0KKyAgICAK
ICAgICBzdHJ1Y3QgUmVnaW9uIHsKICAgICAgICAgc3RhdGljIHNpemVfdCBzaXplKCkgeyByZXR1
cm4gNjQgKiBLQjsgfQotICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVy
biBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQotICAgICAgICBzdGF0aWMg
dW5zaWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVh
ZGVyU2l6ZSgpKSAvIHNpemVvZihUKTsgfQotICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gYml0
d2lzZV9jYXN0PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsg
fQotICAgICAgICBib29sIGlzSW5UaGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhpbmdz
UGVyUmVnaW9uKCk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1
cm4gc3RkOjptYXgoc2l6ZW9mKFJlZ2lvbiksIGNlbGxTaXplKCkpOyB9CisgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBo
ZWFkZXJTaXplKCkpIC8gY2VsbFNpemUoKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IHBheWxv
YWRTaXplKCkgeyByZXR1cm4gbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSAqIGNlbGxTaXplKCk7
IH0KKyAgICAgICAgY2hhciogcGF5bG9hZEJlZ2luKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PGNo
YXIqPih0aGlzKSArIGhlYWRlclNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkRW5kKCkg
eyByZXR1cm4gcGF5bG9hZEJlZ2luKCkgKyBwYXlsb2FkU2l6ZSgpOyB9CisgICAgICAgIGJvb2wg
aXNJblRoaXNSZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpIC0gcGF5bG9hZEJlZ2luKCkpIDwgcGF5
bG9hZFNpemUoKTsgfQogICAgICAgICBzdGF0aWMgUmVnaW9uKiByZWdpb25Gb3IoY29uc3QgVCog
cG9pbnRlcikgeyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHBvaW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KICAgICAgICAgCiAgICAgICAgIFBh
Z2VBbGxvY2F0aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CkBAIC04MiwyNiArOTcsMjYgQEAgcHJp
dmF0ZToKICAgICAKICAgICBSZWdpb24qIG1fcmVnaW9uSGVhZDsKICAgICB2b2lkKiogbV9mcmVl
TGlzdEhlYWQ7Ci0gICAgVCogbV9idW1wRW5kOwotICAgIHVuc2lnbmVkIG1fYnVtcFJlbWFpbmlu
ZzsKKyAgICBjaGFyKiBtX2J1bXBFbmQ7CisgICAgc2l6ZV90IG1fYnVtcFJlbWFpbmluZzsKIH07
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+OjpBbGxvY2F0b3Io
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lu
bGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OkFsbG9jYXRvcigpCiAgICAg
OiBtX3JlZ2lvbkhlYWQoMCkKICAgICAsIG1fZnJlZUxpc3RIZWFkKDApCiAgICAgLCBtX2J1bXBS
ZW1haW5pbmcoMCkKIHsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0
b3I8VD46On5BbGxvY2F0b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2Vk
Q2VsbEFsaWdubWVudD4KK2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46
On5BbGxvY2F0b3IoKQogewogICAgIHJlc2V0KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUg
dm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0ZSgpCiB7CiAg
ICAgdm9pZCogcmVzdWx0ID0gYnVtcEFsbG9jYXRlKCk7CiAgICAgaWYgKExJS0VMWSghIXJlc3Vs
dCkpCkBAIC0xMDksOCArMTI0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46
OmFsbG9jYQogICAgIHJldHVybiBmcmVlTGlzdEFsbG9jYXRlKCk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8
VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWUoVCogb2JqZWN0KQogewogICAgIG9iamVjdC0+
flQoKTsKICAgICAKQEAgLTExOSw4ICsxMzQsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShU
KiBvYmplY3QpCiAgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNl
ZENlbGxBbGlnbm1lbnQ+OjpmcmVlQWxsKCkKIHsKICAgICBpZiAoIW1fcmVnaW9uSGVhZCkgewog
ICAgICAgICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CkBAIC0xNDIsOCArMTU3LDggQEAgdm9p
ZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQogICAgIHN0YXJ0QnVtcGluZ0luKG1fcmVnaW9uSGVh
ZCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQo
KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3Zv
aWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpyZXNldCgpCiB7CiAgICAgZnJl
ZVJlZ2lvbnNTdGFydGluZ0F0KG1fcmVnaW9uSGVhZCk7CiAgICAgCkBAIC0xNTIsMzggKzE2Nywz
OCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQoKQogICAgIG1fYnVtcFJlbWFpbmluZyA9IDA7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci11bnNpZ25lZCBBbGxvY2F0b3I8VD46OmluZGV4
T2YoY29uc3QgVCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2Vk
Q2VsbEFsaWdubWVudD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50
Pjo6aW5kZXhPZihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgdW5zaWduZWQgYmFzZUluZGV4ID0g
MDsKICAgICBmb3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdpb247IHJlZ2lv
biA9IHJlZ2lvbi0+bV9uZXh0KSB7CiAgICAgICAgIGlmIChyZWdpb24tPmlzSW5UaGlzUmVnaW9u
KG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKG9iamVjdCAtIHJlZ2lv
bi0+ZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAoYml0d2lzZV9jYXN0
PGNoYXIqPihvYmplY3QpIC0gcmVnaW9uLT5wYXlsb2FkQmVnaW4oKSkgLyBjZWxsU2l6ZSgpOwog
ICAgICAgICBiYXNlSW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwog
ICAgIH0KICAgICBDUkFTSCgpOwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotQWxsb2NhdG9yPFQ+KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9i
amVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+
CitBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD4qIEFsbG9jYXRvcjxULCBmb3JjZWRD
ZWxsQWxpZ25tZW50Pjo6YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHJldHVy
biBSZWdpb246OnJlZ2lvbkZvcihvYmplY3QpLT5tX2FsbG9jYXRvcjsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjpidW1wQWxsb2Nh
dGUoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4K
K0FMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+Ojpi
dW1wQWxsb2NhdGUoKQogewotICAgIGlmICh1bnNpZ25lZCByZW1haW5pbmcgPSBtX2J1bXBSZW1h
aW5pbmcpIHsKLSAgICAgICAgcmVtYWluaW5nLS07CisgICAgaWYgKHNpemVfdCByZW1haW5pbmcg
PSBtX2J1bXBSZW1haW5pbmcpIHsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplKCk7CiAg
ICAgICAgIG1fYnVtcFJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fYnVt
cEVuZCAtIChyZW1haW5pbmcgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1h
aW5pbmcgKyBjZWxsU2l6ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci12b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFs
bG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiB7CiAg
ICAgdm9pZCoqIHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOwogICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKQEAgLTE5Miw4ICsyMDcsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxs
b2NhdGUoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12
b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1
bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENl
bGxBbGlnbm1lbnQ+OjphbGxvY2F0ZVNsb3coKQogewogICAgIEFTU0VSVCghbV9mcmVlTGlzdEhl
YWQpOwogICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTIxNiw4ICsyMzEsOCBAQCB2
b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0
YXJ0aW5nQXQodHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRv
cjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KHR5cGVuYW1l
IEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24pCiB7CiAg
ICAgd2hpbGUgKHJlZ2lvbikgewogICAgICAgICBSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb24t
Pm1fbmV4dDsKQEAgLTIyNiwxMSArMjQxLDExIEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVn
aW9uc1N0YXJ0aW5nQXQKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFs
bG9jYXRvcjxUPjo6c3RhcnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24q
IHJlZ2lvbikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1l
bnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6c3RhcnRCdW1waW5n
SW4odHlwZW5hbWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJl
Z2lvbikKIHsKLSAgICBtX2J1bXBFbmQgPSByZWdpb24tPmRhdGEoKSArIFJlZ2lvbjo6bnVtYmVy
T2ZUaGluZ3NQZXJSZWdpb24oKTsKLSAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246Om51bWJl
ck9mVGhpbmdzUGVyUmVnaW9uKCk7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5wYXlsb2FkRW5k
KCk7CisgICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpwYXlsb2FkU2l6ZSgpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0NjYsNyArMTQ2Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChi
b29sIHUKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRo
Lm1pbih4KQogICAgICAgICAvLyBGSVhNRTogd2hhdCB3ZSdkIHJlYWxseSBsaWtlIGlzIGEgVmFs
dWVUb051bWJlciwgZXhjZXB0IHdlIGRvbid0IHN1cHBvcnQgdGhhdCByaWdodCBub3cuIE9oIHdl
bGwuCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50
VG9PcGVyYW5kKDEpKTsKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja051bWJlciwgcmVzdWx0KTsK
KyAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVyVXNlKSk7CiAg
ICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCByZXN1
bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2OSw3
ICs5NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFjY2Vzc2luZyBhcmd1bWVu
dHMgdGhlbiBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2luZyBsb2NhbHMuCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpBcmd1bWVu
dHMpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTEwMTQsMTggKzEwMTQs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbnVtIFByZWRpY3Rp
b25IYW5kbGluZ01vZGUgeyBSZXF1aXJlU2FtZVByZWRpY3Rpb24sIEFsbG93UHJlZGljdGlvbk1p
c21hdGNoIH07Ci0gICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVudCwgUHJl
ZGljdGlvbkhhbmRsaW5nTW9kZSBwcmVkaWN0aW9uSGFuZGxpbmdNb2RlID0gUmVxdWlyZVNhbWVQ
cmVkaWN0aW9uKQorICAgIGJvb2wgc2V0UmVwbGFjZW1lbnQoTm9kZSogcmVwbGFjZW1lbnQpCiAg
ICAgewogICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKLSAgICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBlcmZvcm0gcmVw
bGFjZW1lbnRzIGlmIHRoZSBwcmVkaWN0aW9ucyBkb24ndAotICAgICAgICAvLyBhZ3JlZS4KLSAg
ICAgICAgaWYgKHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPT0gUmVxdWlyZVNhbWVQcmVkaWN0aW9u
Ci0gICAgICAgICAgICAmJiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgIT0gcmVwbGFjZW1l
bnQtPnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9n
RigiICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCByZXBs
YWNlbWVudC0+aW5kZXgoKSk7CiAjZW5kaWYKQEAgLTEyMjksNyArMTIyMiw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgICAgIC8vIFRoaXMgaXMgc3RyYW5n
ZSwgYnV0IG5lY2Vzc2FyeS4gU29tZSBwaGFzZXMgd2lsbCBjb252ZXJ0IG5vZGVzIHRvIGNvbnN0
YW50cywKICAgICAgICAgICAgIC8vIHdoaWNoIG1heSByZXN1bHQgaW4gZHVwbGljYXRlZCBjb25z
dGFudHMuIFdlIHVzZSBDU0UgdG8gY2xlYW4gdGhpcyB1cC4KLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpLCBBbGxvd1ByZWRpY3Rpb25NaXNtYXRjaCk7CisgICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChjb25zdGFudENTRShub2RlKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MywxMiArODMsNiBAQCBzdHJ1Y3QgTm9kZVBvaW50ZXJUcmFpdHMgewogICAgIHN0YXRpYyB2b2lk
IGR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOwogfTsKIAotZW51bSBVc2VLaW5k
IHsKLSAgICBVbnR5cGVkVXNlLAotICAgIERvdWJsZVVzZSwKLSAgICBMYXN0VXNlS2luZCAvLyBN
dXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0
byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgotfTsKLQogLy8gVXNlIFJlZkNo
aWxkcmVuIGlmIHRoZSBjaGlsZCByZWYgY291bnRzIGhhdmVuJ3QgYWxyZWFkeSBiZWVuIGFkanVz
dGVkIHVzaW5nCiAvLyBvdGhlciBtZWFucyBhbmQgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgaXMg
dHJ1ZToKIC8vIC0gVGhlIG5vZGUgeW91J3JlIGNyZWF0aW5nIGlzIE11c3RHZW5lcmF0ZS4KQEAg
LTEwNiwxOSArMTAwLDYgQEAgZW51bSBSZWZOb2RlTW9kZSB7CiAgICAgRG9udFJlZk5vZGUKIH07
CiAKLWlubGluZSBjb25zdCBjaGFyKiB1c2VLaW5kVG9TdHJpbmcoVXNlS2luZCB1c2VLaW5kKQot
ewotICAgIHN3aXRjaCAodXNlS2luZCkgewotICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAg
cmV0dXJuICIiOwotICAgIGNhc2UgRG91YmxlVXNlOgotICAgICAgICByZXR1cm4gImQiOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQogaW5saW5lIGJvb2wgaXNBUk12N3MoKQogewogI2lmIENQ
VShBUFBMRV9BUk1WN1MpCkBAIC0yMzYsNiArMjE3LDggQEAgZW51bSBVbmlmaWNhdGlvblN0YXRl
IHsKICAgICBHbG9iYWxseVVuaWZpZWQKIH07CiAKK2VudW0gT3BlcmFuZFNwZWN1bGF0aW9uTW9k
ZSB7IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
IH07CisKIGVudW0gU3BlY3VsYXRpb25EaXJlY3Rpb24geyBGb3J3YXJkU3BlY3VsYXRpb24sIEJh
Y2t3YXJkU3BlY3VsYXRpb24gfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgICAgIGNh
c2UgR2V0QnlJZEZsdXNoOiB7CiAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUt
PmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUo
KTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRl
bnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICgh
aXNDZWxsU3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24oKSkpCkBAIC0xODEsMTggKzE4Miwx
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9zdGF0ZS5mb3JOb2Rl
KGNoaWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0
KHN0cnVjdHVyZSkpKTsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hp
bGQpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0
eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOwogICAgICAgICAgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZD
aGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNo
aWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtMjA3LDcgKzIwOCw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWRE
aXJlY3Q6IHsKICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5j
b2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7
CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKQEAg
LTIzOCw3ICsyNDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9z
dGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yo
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3Ry
dWN0dXJlKSwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2Up
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSAwOwpAQCAtMjY0LDM4ICsy
NjYsMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAgICAg
ICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkgewogICAgICAgICAgICAg
ICAgICAgICBjaGlsZC0+cmVmKCk7IC8vIFRoZSBjaGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHBy
b3BlcnR5IGluZGV4LCBzbyByZWYgaXQgdG8gcmVmbGVjdCB0aGUgZG91YmxlIHVzZS4KLSAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGQ7CisgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVu
LCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZCk7Cisg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hp
bGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxk
RWRnZSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVm
Tm9kZSwgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwg
Y2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkg
PiBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRn
ZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8o
dHJhbnNpdGlvbkRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZEVkZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRl
cmZseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBjaGlsZCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0
YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIGNvZGVP
cmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBj
aGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBj
aGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtMzkxLDEzICszOTMsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsCi0gICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgd2Vha0NvbnN0YW50
KTsKKyAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkp
LCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tT
dHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQoY2VsbC0+c3RydWN0dXJlKCkpKSwgd2Vha0NvbnN0YW50KTsKKyAgICAgICAgICAg
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCBFZGdl
KHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIHRoZSBDRkEgbWF5IHJlYWNoIGNvbmNsdXNpb25zIGFib3V0IGNvbnN0
YW50cyBiYXNlZCBvbiBpdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDggKzE0NCw2IEBAIGlubGluZSBib29s
IGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgaWYgKCFjaGFuZ2VkKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICBkZmcucmVzZXRFeGl0U3RhdGVzKCk7
Ci0gICAgICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5jcHAJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEVkZ2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKLSAgICBvdXQucHJpbnQodXNlS2luZFRvU3RyaW5nKHVzZUtpbmQoKSksIG5vZGUoKSk7
CisgICAgb3V0LnByaW50KHVzZUtpbmQoKSwgIjoiLCBub2RlKCkpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2
aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2lu
Y2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC05Niw3ICs5Nyw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVp
bnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gMjsgfQorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgp
IHsgcmV0dXJuIDQ7IH0KICAgICAKICAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUq
IG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDkgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBCZWZvcmVGaXhwb2ludCk7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAogICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KQogICAgICAgICAgICAgZml4dXBCbG9jayht
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC03Niw1MCArNzksMjY1IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAg
IHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKKyAgICAgICAgY2FzZSBT
ZXRMb2NhbDogeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
dmFyaWFibGUtPmlzQ2FwdHVyZWQoKQorICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGguaXNDcmVh
dGVkVGhpc0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obm9k
ZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91
YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxk
MSgpLCBOdW1iZXJVc2UsIEZvcndhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRp
Zmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0ZWRUeXBlID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICBj
YXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6
CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKKyAg
ICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4SW50
RWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25JbnQzMlVzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjog
eworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50
MzI6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQz
MlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRl
KTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5nZXRBcnJheVByb2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlN
b2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKLSAgICAgICAgICAgIGlmIChhcnJh
eVByb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4p
KTsKLSAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChh
cnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlN
b2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0
ZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJl
cigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChEb3VibGVV
c2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7
CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAgICAgIG5v
ZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgbV9ncmFw
aC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJ
bnQzMlRvRG91YmxlOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIFZhbHVlQWRkOiB7CisgICAgICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQo
bm9kZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFk
ZDoKKyAgICAgICAgY2FzZSBBcml0aFN1YjogeworICAgICAgICAgICAgaWYgKGF0dGVtcHRUb01h
a2VJbnRlZ2VyQWRkKG5vZGUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Zml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdl
KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZTogeworICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRV
c2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
Zml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSB8fCBpc0FSTXY3
cygpKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50
MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2Rl
LnJlZmluZShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkp
OwotICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSkKKyAgICAgICAg
ICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUobm9kZS0+Y2hpbGQyKCkpOworCisgICAg
ICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyByZWYnaW5nIG9uIHRoZSBjaGlsZHJl
biBiZWNhdXNlIHdlJ3JlIHN0ZWFsaW5nIHRoZW0gZnJvbQorICAgICAgICAgICAgICAgIC8vIHRo
ZSBvcmlnaW5hbCBkaXZpc2lvbi4KKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsICpub2RlKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChEb3VibGVBc0ludDMy
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKEVkZ2UobmV3RGl2
aXNpb24sIEtub3duTnVtYmVyVXNlKSwgRWRnZSgpLCBFZGdlKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAg
ICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxk
KTsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUt
PmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdl
LCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAg
ICAgICAgY2FzZSBBcml0aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAgICAgY2Fz
ZSBBcml0aE1vZDogeworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRn
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAg
Y2FzZSBBcml0aEFiczogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+
Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNhbkNTRVN0b3Jh
Z2UoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aFNxcnQ6IHsKKyAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQorICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JP
dGhlcigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0
T3JPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFR5cGVPZjogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKFN0cmluZ1VzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAgICAgICBjYXNlIENvbXBh
cmVFcUNvbnN0YW50OgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENv
bXBhcmVMZXNzRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2Ug
Q29tcGFyZUdyZWF0ZXJFcTogeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tYXBy
ZUVxQ29uc3RhbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5k
KEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDb21wYXJlRXEpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmlu
ZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgp
KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2Up
OworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCkt
PnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1
bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRV
c2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQ29tcGFyZVN0cmljdEVxOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21w
YXJlU3RyaWN0RXFDb25zdGFudCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNl
dFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5n
KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkp
IHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBT
dHJpbmdDaGFyQ29kZUF0OiB7CisgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2UgaGF2ZSBubyBn
b29kIHdheSBvZiByZWZpbmluZyB0aGVzZS4KKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJh
eU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0cmluZykpOworICAgICAgICAgICAgYmxlc3NB
cnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxk
MygpKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNl
KTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAg
ICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+YXJy
YXlNb2RlKCkucmVmaW5lKApAQCAtMTI3LDcgKzM0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAg
ICAgIFNwZWNOb25lLCBub2RlLT5mbGFncygpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsK
KyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNo
aWxkMigpLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgICAgIGlmIChhcnJh
eU1vZGUudHlwZSgpID09IEFycmF5OjpEb3VibGUKQEAgLTEzOCwxMyArMzU2LDc3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgJiYgIShub2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090aGVy
KSkKICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhTcGVj
dWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5
OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9m
aWxlZDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgY2FzZSBBcnJh
eTo6R2VuZXJpYzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2Up
OworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKLSAg
ICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0gICAgICAgICAgICAvLyBDdXJyZW50bHkg
d2UgaGF2ZSBubyBnb29kIHdheSBvZiByZWZpbmluZyB0aGVzZS4KLSAgICAgICAgICAgIEFTU0VS
VChub2RlLT5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0cmluZykpOwotICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCks
IDIpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2Ug
UHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpOworCisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAg
ICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAg
ICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVk
aWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+cHJlZGljdGlvbigpKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQxLCBjaGls
ZDIsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNp
ZGVkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKG5vZGUtPmNoaWxkMygpLCBSZWFsTnVtYmVyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5Ogor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJy
YXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDMoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNl
dFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTYzLDEx
ICs0NDUsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKSAmIFNwZWNDZWxsLAogICAgICAgICAgICAgICAgICAgICBTcGVjSW50MzIs
CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCkpKTsKLSAg
ICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgMik7
CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBFZGdlKCks
IG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQo
S25vd25DZWxsVXNlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRn
ZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTc2LDU4ICs0NjIsMjcgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQb3A6IHsK
LSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwg
MSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBFZGdl
KCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKLSAgICAgICAgICAgICAgICAmJiBu
b2RlLT5tdXN0R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3Mo
Tm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNh
c2UgQml0WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hp
ZnQ6Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgZml4SW50RWRnZShu
b2RlLT5jaGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNo
aWxkcmVuLmNoaWxkMigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6
Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRl
cjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBjYXNlIENvbXBhcmVT
dHJpY3RFcTogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1i
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgTG9naWNhbE5vdDogewotICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMCk7CisgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0
OiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsK
LSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNl
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQz
MlVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEo
KSk7CiAKICAgICAgICAgICAgIE5vZGUqIGxvZ2ljYWxOb3QgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CiAgICAgICAgICAgICBpZiAobG9naWNhbE5vdC0+b3AoKSA9PSBMb2dpY2FsTm90CkBAIC0y
NzAsMTQ5ICs1MjUsMTkxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKDAsIEZvcndhcmRTcGVjdWxhdGlvbik7CisgICAgICAgIGNhc2Ug
VG9QcmltaXRpdmU6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAg
ICAgICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dy
YXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAgICAgICAgICAgICBsZWFzdFVwcGVyQm91bmRP
ZkluZGV4aW5nVHlwZUFuZFR5cGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5pbmRl
eGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKS0+cHJlZGljdGlvbigpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIEFTU0VSVCgh
bm9kZS0+bnVtQ2hpbGRyZW4oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51bUNoaWxkcmVu
KCk7ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxMX0RP
VUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJh
bmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFu
ZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9k
ZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XS5zZXRVc2VLaW5kKFJlYWxOdW1iZXJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5v
ZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2Fz
ZSBOZXdBcnJheVdpdGhTaXplOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZTogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgIGNhc2UgQ29udmVydFRo
aXM6IHsKKyAgICAgICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0
aE1heDoKLSAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1
bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICBjYXNl
IENyZWF0ZVRoaXM6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoRnVu
Y3Rpb25Vc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFyaXRoTXVsOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7Cisg
ICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgorICAgICAgICBjYXNlIEdldE15QXJndW1l
bnRCeVZhbFNhZmU6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50
MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIEFy
aXRoRGl2OiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZv
ckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
Ci0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzWDg2KCkgfHwgaXNBUk12N3MoKSkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoMCk7Ci0g
ICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoMSk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1
c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9tCi0gICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdp
bmFsIGRpdmlzaW9uLgotICAgICAgICAgICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ss
IERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgKm5vZGUpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOwotICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwg
RG91YmxlVXNlKSwgRWRnZSgpLCBFZGdlKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZVJlZ2lz
dGVyczoKKyAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6CisgICAgICAgIGNhc2UgU2tpcFRvcFNj
b3BlOgorICAgICAgICBjYXNlIFNraXBTY29wZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkK
LSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAg
IGNhc2UgR2V0QnlJZDogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVDZWxsKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG5vZGUtPnBy
ZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoY29k
ZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxE
YXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKKyAgICAgICAgICAgICAgICBt
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVBy
b2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsK
KyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbiht
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKKyAgICAgICAg
ICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUs
IEFycmF5OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlN
b2RlLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9m
aWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGlm
ICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0
QXJyYXlMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVz
dEdlbmVyYXRlKTsKKyAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7Cisg
ICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgTm9kZSogc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5j
b2RlT3JpZ2luLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSwg
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aFNxcnQ6IHsKLSAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMCk7CisgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBj
YXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKTsKLQotICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAot
ICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAg
ICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+
cHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwg
Y2hpbGQyLCAzKTsKKyAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgorICAg
ICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAgICBjYXNlIEZv
cndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgY2FzZSBDaGVja0Z1
bmN0aW9uOgorICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVj
dDoKKyAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOiB7CisgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS5t
b2RlRm9yUHV0KCkudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0g
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAg
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6
Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBp
ZiAoIWNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKDIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7CisgICAgICAgIGNhc2Ug
Q2hlY2tBcnJheTogeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKFN0cmluZ1VzZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgTmV3QXJyYXk6IHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgu
dmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBub2RlLT5z
ZXRJbmRleGluZ1R5cGUoCi0gICAgICAgICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5k
ZXhpbmdUeXBlQW5kVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmluZGV4aW5n
VHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJh
eVdpdGhEb3VibGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBo
LnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKGkpOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5aWZ5OgorICAg
ICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkp
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
R2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3Jh
Z2VSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtu
b3duQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5z
ZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewor
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
SW5zdGFuY2VPZjogeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46
IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2VzIGFuIHVuY29uZGl0aW9uYWwgY2VsbAorICAg
ICAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDc0NzkKKyAgICAgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkg
JiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0
ZXIoU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWYgIUFTU0VSVF9ESVNB
QkxFRAogICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC00ODAsMTEgKzc3Nyw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBTcGVjTm9uZSwgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9y
aWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5KTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWdu
ZWQgc3RvcmFnZUNoaWxkSWR4KQorICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJh
c2UsIEVkZ2UgaW5kZXgsIEVkZ2UmIHN0b3JhZ2VDaGlsZCkKICAgICB7Ci0gICAgICAgIGlmICht
X2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudE5vZGU7CiAgICAg
ICAgIAogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNTA4
LDcgKzgwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLmNoaWxk
KG5vZGUsIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgc3Rv
cmFnZUNoaWxkID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fSB9CiAgICAgfQpAQCAtNTE2LDQwICs4MTAsNDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpeElu
dEVkZ2UoRWRnZSYgZWRnZSkKICAgICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBlZGdlLm5vZGUo
KTsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKQorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIp
IHsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgRWRnZSBvbGRFZGdlID0g
ZWRnZTsKICAgICAgICAgRWRnZSBuZXdFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAor
ICAgICAgICBpZiAobmV3RWRnZS51c2VLaW5kKCkgIT0gSW50MzJLaW5kKSB7CisgICAgICAgICAg
ICBlZGdlLnNldFVzZUtpbmQoS25vd25JbnQzMlVzZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChuZXdFZGdlLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpOworICAgICAgICAKICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAg
ICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CiAgICAgICAgIAogICAgICAgICBlZGdlID0g
bmV3RWRnZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXhEb3VibGVFZGdlKHVuc2lnbmVkIGNo
aWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3Vs
YXRpb24pCisgICAgdm9pZCBmaXhEb3VibGVFZGdlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2lu
ZCA9IE51bWJlclVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRT
cGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIE5vZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7
Ci0gICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7
CiAgICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+cHJlZGljdGlvbigpICYgU3BlY0RvdWJsZSkg
ewotICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKERvdWJsZVVzZSk7CisgICAgICAgICAgICBl
ZGdlLnNldFVzZUtpbmQodXNlS2luZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKGNoaWxkSW5kZXgsIGRp
cmVjdGlvbik7CisgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKGVkZ2UsIGRpcmVjdGlv
bik7CiAgICAgfQogCi0gICAgdm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSh1bnNpZ25lZCBj
aGlsZEluZGV4LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1
bGF0aW9uKQorICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNl
S2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24g
PSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250
UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsCiAgICAgICAgICAgICBkaXJlY3Rpb24g
PT0gQmFja3dhcmRTcGVjdWxhdGlvbiA/IEludDMyVG9Eb3VibGUgOiBGb3J3YXJkSW50MzJUb0Rv
dWJsZSwKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hp
bGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkubm9kZSgpKTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5ub2RlKCksIERvdWJsZVVzZSkpOworICAg
ICAgICByZXN1bHQtPmNoaWxkMSgpLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKICAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9n
RigKQEAgLTU1Nyw3ICs4NTcsNDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fY3VycmVudE5v
ZGUtPmluZGV4KCksIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCktPmlu
ZGV4KCksIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CiAjZW5kaWYK
IAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNoaWxkSW5kZXgpID0gRWRn
ZShyZXN1bHQsIERvdWJsZVVzZSk7CisgICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9k
ZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgdXNlS2luZCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgdHJ1bmNhdGVDb25zdGFudFRvSW50MzIoRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAg
IE5vZGUqIG9sZE5vZGUgPSBlZGdlLm5vZGUoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChv
bGROb2RlLT5oYXNDb25zdGFudCgpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgu
dmFsdWVPZkpTQ29uc3RhbnQob2xkTm9kZSk7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IGpzTnVtYmVy
KEpTQzo6dG9JbnQzMih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5p
c0ludDMyKCkpOworICAgICAgICBlZGdlLnNldE5vZGUobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUs
IFNwZWNJbnQzMiwgSlNDb25zdGFudCwKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4sIE9wSW5mbyhjb2RlQmxvY2soKS0+YWRkT3JGaW5kQ29uc3RhbnQodmFsdWUpKSkpOwor
ICAgICAgICBtX2dyYXBoLmRlcmVmKG9sZE5vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRy
dW5jYXRlQ29uc3RhbnRzSWZOZWNlc3NhcnkoTm9kZSogbm9kZSwgQWRkU3BlY3VsYXRpb25Nb2Rl
IG1vZGUpCisgICAgeworICAgICAgICBpZiAobW9kZSAhPSBTcGVjdWxhdGVJbnRlZ2VyQW5kVHJ1
bmNhdGVDb25zdGFudHMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBB
U1NFUlQobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhh
c0NvbnN0YW50KCkpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkp
CisgICAgICAgICAgICB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRUb0ludDMyKG5vZGUtPmNo
aWxkMigpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBhdHRlbXB0VG9NYWtlSW50ZWdlckFkZChO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBtX2dy
YXBoLmFkZFNwZWN1bGF0aW9uTW9kZShub2RlKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gRG9udFNw
ZWN1bGF0ZUludGVnZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICB0cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KG5vZGUsIG1vZGUpOworICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgbm9kZS0+Y2hpbGQy
KCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAog
ICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw0NSArMzQ2LDE0IEBAIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICB9CiB9CiAKLS8vIEZJWE1FOiBDb252
ZXJ0IHRoaXMgdG8gYmUgaXRlcmF0aXZlLCBub3QgcmVjdXJzaXZlLgotI2RlZmluZSBET19UT19D
SElMRFJFTihub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFz
VmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICgh
IW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAhX25vZGUt
PmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
IEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdU
b0RvKF9ub2RlLT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCiB2
b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKLSAgICBET19UT19DSElMRFJFTihv
cCwgcmVmKTsKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIHJlZik7CiB9
CiAKIHZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCiB7Ci0gICAgRE9fVE9fQ0hJ
TERSRU4ob3AsIGRlcmVmKTsKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3As
IGRlcmVmKTsKIH0KIAogdm9pZCBHcmFwaDo6ZGV0aHJlYWQoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0
cnVjdCBQdXRUb0Jhc2VPcGVyYXRpb25EYXRhIHsKIAogZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUg
ewogICAgIERvbnRTcGVjdWxhdGVJbnRlZ2VyLAotICAgIFNwZWN1bGF0ZUludGVnZXJCdXRBbHdh
eXNXYXRjaE92ZXJmbG93LAorICAgIFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50
cywKICAgICBTcGVjdWxhdGVJbnRlZ2VyCiB9OwogCkBAIC0xNzQsOSArMTc0LDkgQEAgcHVibGlj
OgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQo
KTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBj
aGlsZElkeCsrKQogICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJl
bi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1
dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKLSAg
ICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9y
RWRnZShub2RlLT5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKKyAg
ICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMygpLCBzaG91
bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC01MzAsOSArNTMwLDcgQEAg
cHVibGljOgogICAgIAogICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigp
LT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVybiBpc051bWJlclNwZWN1bGF0aW9uKGxlZnQp
ICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOworICAgICAgICByZXR1cm4gaXNOdW1lcmlj
YWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBpc051bWVyaWNhbChub2RlLT5jaGlsZDIo
KS51c2VLaW5kKCkpOwogICAgIH0KICAgICAKICAgICAvLyBOb3RlIHRoYXQgYSAndHJ1ZScgcmV0
dXJuIGRvZXMgbm90IGFjdHVhbGx5IG1lYW4gdGhhdCB0aGUgQnlWYWwgYWNjZXNzIGNsb2JiZXJz
IG5vdGhpbmcuCkBAIC03ODEsNyArNzc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGRvdWJs
ZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0ZSA+IHR3b1RvVGhlNDgp
CiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAotICAg
ICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkp
ID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250U3BlY3VsYXRl
SW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoYWRkLT5hcml0
aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cyA6IERv
bnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKICAgICBib29sIG11bEltbWVkaWF0ZVNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwgTm9kZSogaW1t
ZWRpYXRlKQpAQCAtODMwLDYgKzgyOCwzNiBAQCBpbmxpbmUgQmxvY2tJbmRleCBHcmFwaDo6Ymxv
Y2tJbmRleEZvckJ5CiAgICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8QmxvY2tJbmRleCwgdW5zaWdu
ZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4s
IEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOwogfQogCisjZGVmaW5lIERGR19OT0RF
X0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBc
CisgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5u
dW1DaGlsZHJlbigpOyBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKCEh
KGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgICAgIHRoaW5nVG9EbygoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxk
SWR4XSk7ICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICFfbm9kZS0+
Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0
aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
QVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1Rv
RG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDMoKSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQzMDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDYgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CiAgICAgICAgIHNl
dE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKLSAgICAgICAgQVNTRVJUKCEhKG1fZmxhZ3MgJiBOb2Rl
SGFzVmFyQXJncykgPT0gKGNoaWxkcmVuLmtpbmQoKSA9PSBBZGphY2VuY3lMaXN0OjpWYXJpYWJs
ZSkpOwogICAgIH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBj
aGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgpAQCAtMjk0LDIyICsyOTMsMjIgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChz
dHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwg
Tm9kZSogc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX29wID09IEdldEJ5SWQgfHwgbV9vcCA9PSBHZXRCeUlkRmx1c2gpOwogICAgICAgICBtX29w
SW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7Ci0gICAgICAgIGNoaWxkcmVuLnNldENoaWxk
MShFZGdlKHN0b3JhZ2UpKTsKKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKHN0b3JhZ2UpOwog
ICAgICAgICBtX29wID0gR2V0QnlPZmZzZXQ7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9i
YmVyc1dvcmxkOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVu
c2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGUqIHN0b3JhZ2UpCisgICAgdm9pZCBj
b252ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBFZGdl
IHN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1fb3Ag
PT0gUHV0QnlJZERpcmVjdCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJ
bmRleDsKICAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQzKGNoaWxkcmVuLmNoaWxkMigpKTsKICAg
ICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQyKGNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAgICAgY2hp
bGRyZW4uc2V0Q2hpbGQxKEVkZ2Uoc3RvcmFnZSkpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGls
ZDEoc3RvcmFnZSk7CiAgICAgICAgIG1fb3AgPSBQdXRCeU9mZnNldDsKICAgICAgICAgbV9mbGFn
cyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQpAQCAtOTk1LDcgKzk5NCw3IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQtLTsKICAgICB9CiAgICAgCi0gICAg
RWRnZSBjaGlsZDEoKQorICAgIEVkZ2UmIGNoaWxkMSgpCiAgICAgewogICAgICAgICBBU1NFUlQo
IShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNo
aWxkMSgpOwpAQCAtMTAwOSwxMyArMTAwOCwxMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJl
dHVybiBjaGlsZHJlbi5jaGlsZDFVbmNoZWNrZWQoKTsKICAgICB9CiAKLSAgICBFZGdlIGNoaWxk
MigpCisgICAgRWRnZSYgY2hpbGQyKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3Mg
JiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQyKCk7CiAg
ICAgfQogCi0gICAgRWRnZSBjaGlsZDMoKQorICAgIEVkZ2UmIGNoaWxkMygpCiAgICAgewogICAg
ICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJu
IGNoaWxkcmVuLmNoaWxkMygpOwpAQCAtMTAzMyw2ICsxMDMyLDE3IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLm51bUNoaWxkcmVuKCk7CiAgICAgfQogICAgIAorICAg
IFVzZUtpbmQgYmluYXJ5VXNlS2luZCgpCisgICAgeworICAgICAgICBBU1NFUlQoY2hpbGQxKCku
dXNlS2luZCgpID09IGNoaWxkMigpLnVzZUtpbmQoKSk7CisgICAgICAgIHJldHVybiBjaGlsZDEo
KS51c2VLaW5kKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCaW5hcnlVc2VLaW5kKFVzZUtp
bmQgdXNlS2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKS51c2VLaW5kKCkgPT0g
dXNlS2luZCAmJiBjaGlsZDIoKS51c2VLaW5kKCkgPT0gdXNlS2luZDsKKyAgICB9CisgICAgCiAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gbV9w
cmVkaWN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2Nh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDE0MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXR5cGVkZWYgQWxsb2NhdG9yPE5vZGU+
IE5vZGVBbGxvY2F0b3I7CisjaWYgVVNFKEpTVkFMVUU2NCkKK3R5cGVkZWYgQWxsb2NhdG9yPE5v
ZGUsIDExMj4gTm9kZUFsbG9jYXRvcjsKKyNlbHNlCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCA4
MD4gTm9kZUFsbG9jYXRvcjsKKyNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0
MzAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTYsOCArOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oRm9yd2FyZEludDMyVG9Eb3VibGUsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAg
ICAvKiBVc2VkIHRvIHNwZWN1bGF0ZSB0aGF0IGEgZG91YmxlIHZhbHVlIGlzIGFjdHVhbGx5IGFu
IGludGVnZXIuICovXAogICAgIG1hY3JvKERvdWJsZUFzSW50MzIsIE5vZGVSZXN1bHRJbnQzMikg
XAotICAgIC8qIFVzZWQgdG8gcmVjb3JkIHBsYWNlcyB3aGVyZSB3ZSBtdXN0IGNoZWNrIGlmIGEg
dmFsdWUgaXMgYSBudW1iZXIuICovXAotICAgIG1hY3JvKENoZWNrTnVtYmVyLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJhdGlvbnMu
ICovXAogICAgIG1hY3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyOCAr
MzksMzAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlKiBub2RlLCBE
YXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRl
Z2VyKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewotICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBB
U1NFUlQoIShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgflNwZWNJbnQzMikpOworICAg
IAorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKIAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdE5vbmUpIHsKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAg
aWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50
KCkpIHsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUp
KSB7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFs
dWVPZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIp
OwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAg
ICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAg
ICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNOdW1i
ZXJDb25zdGFudChub2RlKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpz
TnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICBpZiAoaXNO
dW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSBqc051bWJlcih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaXNKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBq
c1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGluZm8u
c3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewpAQCAtMjY2LDkgKzI2OCw5IEBA
IEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlKiAKICAgICB9CiB9CiAKLUdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZSogbm9kZSkKK0dQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoRWRnZSBlZGdlKQogewotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07
CiAgICAgCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OSwyMCArMTU5OSwyMCBAQCBib29sIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuCiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRl
cnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAgIEFT
U0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKQorICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNl
KSkKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNo
Tm9kZSwgY29uZGl0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAg
ICAgICAgZWxzZSBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpCiAgICAgICAg
ICAgICBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgZG91Ymxl
Q29uZGl0aW9uKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsK
LSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkg
fHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ1VzZSkpIHsKICAgICAgICAgICAgICAg
ICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlv
biwgb3BlcmF0aW9uKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0
KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKQorICAgICAgICAg
ICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAgICAg
IGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGUpOwotICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYm
IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlICYmIG5v
ZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQogICAgICAgICAgICAg
ICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgYnJhbmNoTm9kZSk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUt
PmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkKKyAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG5vZGUtPmNo
aWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpCiAgICAgICAgICAgICAgICAgY29tcGlsZVBl
ZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQyKCksIG5vZGUt
PmNoaWxkMSgpLCBicmFuY2hOb2RlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0
aW9uLCBvcGVyYXRpb24pOwpAQCAtMjE5NCw3ICsyMTk0LDggQEAgR2VuZXJhdGVkT3BlcmFuZFR5
cGUgU3BlY3VsYXRpdmVKSVQ6OmNoZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVUb0ludDMyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKQEAgLTIyMDIsNyArMjIwMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZVRvSW50MzIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsK
ICAgICAgICAgc3dpdGNoIChjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpIHsKICAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSW50ZWdlcjogewog
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKQEAgLTIyOTQsMTEgKzIyOTUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlVG9JbnQzMgogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZFR5
cGVVbmtub3duOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsK
KyAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEpOwogICAgICAgICAKQEAgLTIzMDgsMTAgKzIzMTEsMTcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgLy8gRG8g
aXQgdGhlIHNhZmUgd2F5LgotICAgIG5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKG5vZGUpOwot
ICAgIHJldHVybjsKKworICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAvLyBEbyBpdCB0
aGUgc2FmZSB3YXkuCisgICAgICAgIG5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKG5vZGUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVUludDMyVG9OdW1iZXIoTm9kZSogbm9kZSkK
QEAgLTI1OTgsNDkgKzI2MDgsNjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9ySQogICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHRvSW50MzIoZCkpLCBzY3JhdGNoUmVn
KTsKICAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7CiAgICAgICAgIHZhbHVlR1BSID0gc2Ny
YXRjaFJlZzsKLSAgICB9IGVsc2UgaWYgKHZhbHVlVXNlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1
ZVVzZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICBHUFJS
ZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIG1faml0Lm1vdmUodmFsdWVP
cC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5k
aW5nKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgICAg
ICBjb21waWxlQ2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsKLSAgICAgICAg
fQotICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKLSAgICAgICAgdmFsdWVHUFIgPSBzY3Jh
dGNoUmVnOwotICAgIH0gZWxzZSBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAg
ICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7Ci0gICAg
ICAgIEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigpOwotICAgICAgICBHUFJSZWcgZ3ByID0gcmVz
dWx0LmdwcigpOwotICAgICAgICBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUobV9qaXQsIGdwciwg
ZnByLCBmbG9hdFNjcmF0Y2guZnByKCkpOwotICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwot
ICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKICAgICB9IGVsc2UgewotICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKLSAg
ICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90TmFOID0gbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVF
cXVhbCwgZnByLCBmcHIpOwotICAgICAgICBtX2ppdC54b3JQdHIoZ3ByLCBncHIpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmaXhlZCA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgbm90
TmFOLmxpbmsoJm1faml0KTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7
Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCi0gICAgICAgICAg
ICBmYWlsZWQgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIE1h
Y3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIs
IGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwotICAgICAgICAK
LSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGZhaWxlZCwgdGhpcywg
dG9JbnQzMiwgZ3ByLCBmcHIpKTsKLQotICAgICAgICBmaXhlZC5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7Ci0gICAgICAgIHZhbHVlR1BSID0gZ3ByOworICAgICAg
ICBzd2l0Y2ggKHZhbHVlVXNlLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7
CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVl
VXNlKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbV9qaXQu
bW92ZSh2YWx1ZU9wLmdwcigpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIGlmIChyb3VuZGlu
ZyA9PSBDbGFtcFJvdW5kaW5nKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXpl
ID09IDEpOworICAgICAgICAgICAgICAgIGNvbXBpbGVDbGFtcEludGVnZXJUb0J5dGUobV9qaXQs
IHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWUuYWRvcHQoc2Ny
YXRjaCk7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7
CisgICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOworICAgICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5
IGZsb2F0U2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVP
cC5mcHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAg
ICAgICAgICAgICAgIGNvbXBpbGVDbGFtcERvdWJsZVRvQnl0ZShtX2ppdCwgZ3ByLCBmcHIsIGZs
b2F0U2NyYXRjaC5mcHIoKSk7CisgICAgICAgICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsK
KyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVl
VXNlKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigpOworICAgICAgICAgICAgICAgIEdQ
UlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90TmFOID0gbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVF
cXVhbCwgZnByLCBmcHIpOworICAgICAgICAgICAgICAgIG1faml0LnhvclB0cihncHIsIGdwcik7
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZml4ZWQgPSBtX2ppdC5qdW1w
KCk7CisgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7CisgICAgICAg
ICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAg
ICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwg
Z3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hUcnVu
Y2F0ZURvdWJsZVRvVWludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVu
Y2F0ZUZhaWxlZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGZhaWxlZCwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmaXhlZC5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB2
YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
IH0KKyAgICAKICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlR1BSLCB2YWx1ZUdQUiAhPSBwcm9wZXJ0
eSk7CiAgICAgQVNTRVJUKHZhbHVlR1BSICE9IGJhc2UpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAh
PSBzdG9yYWdlUmVnKTsKQEAgLTI3ODIsOCArMjgwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVJbnN0YW5jZU9mRm8KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3Rh
bmNlT2YoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoKCEhKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkgJiB+U3BlY0NlbGwpICYmICEhKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlICYgflNwZWNDZWxsKSkKLSAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPmFkanVzdGVk
UmVmQ291bnQoKSA9PSAxKSB7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKSB7CiAgICAgICAgIC8vIEl0IG1pZ2h0IG5vdCBiZSBhIGNlbGwuIFNwZWN1bGF0
ZSBsZXNzIGFnZ3Jlc3NpdmVseS4KICAgICAgICAgLy8gT3I6IGl0IG1pZ2h0IG9ubHkgYmUgdXNl
ZCBvbmNlIChpLmUuIGJ5IHVzKSwgc28gd2UgZ2V0IHplcm8gYmVuZWZpdAogICAgICAgICAvLyBm
cm9tIHNwZWN1bGF0aW5nIGFueSBtb3JlIGFnZ3Jlc3NpdmVseSB0aGFuIHdlIGFic29sdXRlbHkg
bmVlZCB0by4KQEAgLTMwMjEsOSArMzA0NSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlU29mdE1vZHVsbyhOCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSog
bm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNl
IEludDMyVXNlOiB7CiAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25z
dGFudEFzSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3Qg
aW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApAQCAtMzAzOSw3ICsz
MDY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAg
ICAgICAgICAgIAogICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJl
ckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50
MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVG
bGFncygpKSkgewpAQCAtMzA4MSw4ICszMTA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFkZChOb2RlKiBubwogICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwog
ICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKQEAgLTMwOTQsMjIg
KzMxMTksMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLQotICAgIGlmIChub2RlLT5vcCgpID09IFZhbHVlQWRkKSB7CisgICAgICAgIAorICAg
IGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRChu
b2RlLT5vcCgpID09IFZhbHVlQWRkKTsKICAgICAgICAgY29tcGlsZVZhbHVlQWRkKG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0aGlz
IHlldC4gOi0oCi0gICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIDApOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2RlKiBub2RlKQogewotICAgIGlm
IChtX2ppdC5ncmFwaCgpLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICBz
d2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAg
ICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50
MzIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewpAQCAtMzEyOSw3ICszMTU4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKSkgewotICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZk51bWJlckNvbnN0
YW50QXNJbnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBp
bW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAg
IApAQCAtMzE1NywyMCArMzE4NiwyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJp
dGhTdWIoTm9kCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgRlBSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEpOworICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBG
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICBGUFJSZWcgcmVnMSA9IG9wMS5m
cHIoKTsKLSAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAgICBtX2ppdC5zdWJEb3VibGUo
cmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnBy
KCk7CisgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5zdWJE
b3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKIAotICAgIGRvdWJsZVJlc3VsdChyZXN1
bHQuZnByKCksIG5vZGUpOworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2Rl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKE5vZGUqIG5vZGUp
CiB7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2Fz
ZSBJbnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCkBA
IC0zMTg4LDE3ICszMjI2LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5l
Z2F0ZSgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7Ci0KLSAgICBtX2ppdC5uZWdhdGVEb3VibGUob3AxLmZwcigpLCByZXN1bHQu
ZnByKCkpOwotCi0gICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgY2Fz
ZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAg
ICAgICAKKyAgICAgICAgbV9qaXQubmVnYXRlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kZSogbm9kZSkKIHsKLSAg
ICBpZiAobV9qaXQuZ3JhcGgoKS5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Cisg
ICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7
CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0zMjI5LDE3ICsz
Mjc2LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKLSAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgIEZQUlJl
ZyByZWcxID0gb3AxLmZwcigpOwotICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwogICAgICAg
ICAKLSAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICBj
YXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEsIG9wMik7CiAgICAgICAgIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUp
OworICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJlZzIg
PSBvcDIuZnByKCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVn
MiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQu
ZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQogfQogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKQEAgLTMzNDksMjUg
KzM0MDQsMzMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJBcml0aAogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kZSogbm9kZSkKIHsKLSAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7
CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBjb21waWxlU29mdE1vZHVsbyhub2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
ICAgICAgICAgCi0gICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgb3Ay
RlBSID0gb3AyLmZwcigpOworICAgICAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZwcigpOworICAg
ICAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOwogICAgICAgICAKLSAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAKLSAgICBGUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOwotCi0gICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24s
IHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOworICAgICAgICBGUFJSZXN1bHQgcmVzdWx0
KHRoaXMpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRp
b24sIHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOwogICAgICAgICAKLSAgICBkb3VibGVS
ZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5m
cHIoKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3
aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCkBAIC0zMzc2LDMzICszNDM5LDMzIEBAIGJvb2wgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSogbm9kZSwKICAgICBpZiAoY29tcGlsZVBlZXBIb2xl
QnJhbmNoKG5vZGUsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uLCBvcGVyYXRpb24pKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIGlm
IChub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7CiAgICAgICAgIGNvbXBpbGVJbnRl
Z2VyQ29tcGFyZShub2RlLCBjb25kaXRpb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisKKyAgICBpZiAobm9kZS0+aXNC
aW5hcnlVc2VLaW5kKE51bWJlclVzZSkpIHsKICAgICAgICAgY29tcGlsZURvdWJsZUNvbXBhcmUo
bm9kZSwgZG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICAKICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBub2RlLT5jaGlsZDIoKS0+c2hv
dWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2lu
ZChTdHJpbmdVc2UpKSB7CiAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29t
cGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkg
eworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2Up
KSB7CiAgICAgICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3Vs
ZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IE9iamVjdFVzZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2Jq
ZWN0T3JPdGhlclVzZSkgewogICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhl
ckVxdWFsaXR5KG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09
IE9iamVjdFVzZSkgewogICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVx
dWFsaXR5KG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTM0OTAsNyArMzU1Myw4IEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVN0cmljdEVxKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Cisg
ICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7
CiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJh
bmNoKCk7CiAgICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKICAg
ICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxv
Y2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOwpAQCAtMzUwNCw4ICszNTY4LDggQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21waWxlSW50ZWdl
ckNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAK
KyAgICBjYXNlIE51bWJlclVzZTogewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxv
Y2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJs
b2NrICE9IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQu
Z3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKQEAgLTM1
MTksMTAgKzM1ODMsMTIgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5v
ZAogICAgICAgICBjb21waWxlRG91YmxlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlRXF1YWwpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCkt
PnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAKKyAgICBjYXNlIFN0cmluZ1VzZTog
ewogICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKLSAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigp
LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBP
YmplY3RVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0
UGVlcEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5U
X01BWCkgewogICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9i
bG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CkBAIC0zNTM2LDggKzM2MDIs
MTUgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBj
b21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7CisgICAgICAg
IAorICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVT
dHJpY3RFcShub2RlKTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlKE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNDMwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxNCArMTIx
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBHUFJSZWcgZmlsbElu
dGVnZXIoTm9kZSosIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7Ci0gICAgRlBSUmVnIGZpbGxE
b3VibGUoTm9kZSopOworICAgIEdQUlJlZyBmaWxsSW50ZWdlcihFZGdlLCBEYXRhRm9ybWF0JiBy
ZXR1cm5Gb3JtYXQpOworICAgIEZQUlJlZyBmaWxsRG91YmxlKEVkZ2UpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKKyAgICBHUFJSZWcgZmlsbEpT
VmFsdWUoRWRnZSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGJvb2wgZmlsbEpTVmFs
dWUoTm9kZSosIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYpOworICAgIGJvb2wgZmlsbEpTVmFs
dWUoRWRnZSwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7CiAjZW5kaWYKLSAgICBHUFJSZWcg
ZmlsbFN0b3JhZ2UoTm9kZSopOworICAgIEdQUlJlZyBmaWxsU3RvcmFnZShFZGdlKTsKIAogICAg
IC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhH
UFJSZWcgcmVnKQpAQCAtMjk2LDExICsyOTYsMTEgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVk
IGJ5IHRoZSBzcGVjdWxhdGl2ZSBvcGVyYW5kIHR5cGVzLCBiZWxvdywgdG8gZmlsbCBvcGVyYW5k
IHRvCiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGltcGxpY2l0bHkgZ2VuZXJhdGluZyBzcGVj
dWxhdGlvbiBjaGVja3MgYXMgbmVlZGVkLgotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KE5v
ZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKik7Ci0gICAgRlBSUmVnIGZpbGxT
cGVjdWxhdGVEb3VibGUoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJS
ZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludChFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQs
IFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmlj
dChFZGdlKTsKKyAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24pOwogICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJh
dGVkVHlwZUZvclRvSW50MzIoTm9kZSopOwogCiAgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRv
cihQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPik7CkBAIC01NDUsMTIgKzU0NSw2IEBAIHB1
YmxpYzoKICAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBt
X2ppdC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQogICAgIGludDMyX3QgdmFs
dWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1
ZU9mSW50MzJDb25zdGFudChub2RlKTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQobm9kZSk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIoTm9k
ZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCi0gICAg
ICAgICAgICByZXR1cm4gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVy
biBKU0M6OnRvSW50MzIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKLSAgICB9CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2Rl
KiBub2RlKSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlKTsgfQog
I2VuZGlmCkBAIC0yMzEyLDcgKzIzMDYsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEludGVnZXJPcGVy
YW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJ
VCogaml0LCBFZGdlIHVzZSkKKyAgICBleHBsaWNpdCBJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2
ZUpJVCogaml0LCBFZGdlIHVzZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21h
dGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKICAgICAgICAgLCBt
X25vZGUodXNlLm5vZGUoKSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVn
KQpAQCAtMjMyMSw3ICsyMzE1LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgewogICAgICAgICBB
U1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2Up
OworICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgdXNl
LnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKTsKICAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bV9ub2RlKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KQEAgLTI0MTUsNyArMjQwOSw3IEBA
IHByaXZhdGU6CiAKIGNsYXNzIEpTVmFsdWVPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKKyAgICBleHBs
aWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgT3BlcmFu
ZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAg
ICAgICA6IG1faml0KGppdCkKICAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKICNpZiBVU0Uo
SlNWQUxVRTY0KQpAQCAtMjQyNSw3ICsyNDE5LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBE
b3VibGVVc2UpOworICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24gfHwgdXNlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQogICAgICAgICAgICAgZ3ByKCk7CkBA
IC0yNTM2LDcgKzI1MzAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52
YWxpZEdQUlJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VS
VCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7CisgICAgICAgIEFTU0VSVCh1c2UudXNlS2lu
ZCgpID09IFVudHlwZWRVc2UpOwogICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQog
ICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQpAQCAtMjcwMCw3ICsyNjk0LDcgQEAgcHJpdmF0ZToK
IAogY2xhc3MgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBT
cGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAg
IGV4cGxpY2l0IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3Vs
YXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQogICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgp
KQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCkBAIC0yNzEwLDcgKzI3
MDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0g
RG91YmxlVXNlKTsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uIHx8ICh1c2UudXNlS2luZCgpID09IEludDMyVXNlIHx8IHVzZS51c2VLaW5kKCkgPT0gS25v
d25JbnQzMlVzZSkpOwogICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQogICAgICAg
ICAgICAgZ3ByKCk7CiAgICAgfQpAQCAtMjc1NSwxMyArMjc0OSwxMyBAQCBwcml2YXRlOgogCiBj
bGFzcyBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVz
ZSkKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQoU3BlY3VsYXRpdmVK
SVQqIGppdCwgRWRnZSB1c2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRp
Y09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCiAgICAgICAgICwgbV9u
b2RlKHVzZS5ub2RlKCkpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2lu
ZCgpICE9IERvdWJsZVVzZSk7CisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbiB8fCAodXNlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCB1c2UudXNlS2luZCgp
ID09IEtub3duSW50MzJVc2UpKTsKICAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkK
ICAgICAgICAgICAgIGdwcigpOwogICAgIH0KQEAgLTI3OTcsMTQgKzI3OTEsMTQgQEAgcHJpdmF0
ZToKIAogY2xhc3MgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgU3BlY3VsYXRlRG91YmxlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwg
U3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAg
ICBleHBsaWNpdCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3Vs
YXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQogICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgp
KQogICAgICAgICAsIG1fZnByT3JJbnZhbGlkKEludmFsaWRGUFJSZWcpCiAgICAgICAgICwgbV9k
aXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAg
ICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgPT0gRG91YmxlVXNlKTsKKyAgICAgICAgQVNTRVJUKG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8ICh1c2UudXNlS2luZCgpID09IE51bWJl
clVzZSB8fCB1c2UudXNlS2luZCgpID09IEtub3duTnVtYmVyVXNlKSk7CiAgICAgICAgIGlmIChq
aXQtPmlzRmlsbGVkKG1fbm9kZSkpCiAgICAgICAgICAgICBmcHIoKTsKICAgICB9CkBAIC0yODQx
LDE0ICsyODM1LDE0IEBAIHByaXZhdGU6CiAKIGNsYXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGl2ZUpJ
VCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dh
cmRTcGVjdWxhdGlvbikKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxh
dGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0g
QmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21h
dGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKICAgICAgICAgLCBt
X25vZGUodXNlLm5vZGUoKSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVn
KQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Cisg
ICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAodXNlLnVz
ZUtpbmQoKSA9PSBDZWxsVXNlIHx8IHVzZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlIHx8IHVz
ZS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlIHx8IHVzZS51c2VLaW5kKCkgPT0gRnVuY3Rpb25Vc2Ug
fHwgdXNlLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpKTsKICAgICAgICAgaWYgKGppdC0+aXNGaWxs
ZWQobV9ub2RlKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KQEAgLTI4ODUsMTQgKzI4Nzks
MTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBq
aXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNw
ZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0
aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBC
YWNrd2FyZFNwZWN1bGF0aW9uLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0
aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQogICAgICAgICAsIG1f
bm9kZSh1c2Uubm9kZSgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcp
CiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKKyAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IHVzZS51c2VL
aW5kKCkgPT0gQm9vbGVhblVzZSk7CiAgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkp
CiAgICAgICAgICAgICBncHIoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVXNlS2luZF9o
CisjZGVmaW5lIERGR1VzZUtpbmRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworZW51bSBVc2VLaW5kIHsKKyAgICBVbnR5cGVkVXNlLAorICAgIEludDMyVXNlLAorICAgIEtu
b3duSW50MzJVc2UsCisgICAgUmVhbE51bWJlclVzZSwKKyAgICBOdW1iZXJVc2UsCisgICAgS25v
d25OdW1iZXJVc2UsCisgICAgQm9vbGVhblVzZSwKKyAgICBDZWxsVXNlLAorICAgIEtub3duQ2Vs
bFVzZSwKKyAgICBPYmplY3RVc2UsCisgICAgT2JqZWN0T3JPdGhlclVzZSwKKyAgICBGdW5jdGlv
blVzZSwKKyAgICBTdHJpbmdVc2UsCisgICAgT3RoZXJVc2UsCisgICAgTGFzdFVzZUtpbmQgLy8g
TXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGVudW0sIGFzIGl0IGlzIHVzZWQg
dG8gZGVub3RlIHRoZSBudW1iZXIgb2YgZW51bSBlbGVtZW50cy4KK307CisKK0FMV0FZU19JTkxJ
TkUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLaW5kIHVzZUtpbmQpCit7CisgICAg
c3dpdGNoICh1c2VLaW5kKSB7CisgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICByZXR1cm4g
U3BlY1RvcDsKKyAgICBjYXNlIEludDMyVXNlOgorICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAg
ICAgICAgcmV0dXJuIFNwZWNJbnQzMjsKKyAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAg
IHJldHVybiBTcGVjSW50MzI7CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgICAgICByZXR1
cm4gU3BlY1JlYWxOdW1iZXI7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgY2FzZSBLbm93bk51
bWJlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNOdW1iZXI7CisgICAgY2FzZSBCb29sZWFuVXNl
OgorICAgICAgICByZXR1cm4gU3BlY0Jvb2xlYW47CisgICAgY2FzZSBDZWxsVXNlOgorICAgIGNh
c2UgS25vd25DZWxsVXNlOgorICAgICAgICByZXR1cm4gU3BlY0NlbGw7CisgICAgY2FzZSBPYmpl
Y3RVc2U6CisgICAgICAgIHJldHVybiBTcGVjT2JqZWN0OworICAgIGNhc2UgT2JqZWN0T3JPdGhl
clVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgY2FzZSBG
dW5jdGlvblVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNGdW5jdGlvbjsKKyAgICBjYXNlIFN0cmlu
Z1VzZToKKyAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmc7CisgICAgY2FzZSBPdGhlclVzZToKKyAg
ICAgICAgcmV0dXJuIFNwZWNPdGhlcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU3BlY1RvcDsKKyAgICB9Cit9CisK
K0FMV0FZU19JTkxJTkUgYm9vbCBpc051bWVyaWNhbChVc2VLaW5kIGtpbmQpCit7CisgICAgc3dp
dGNoIChraW5kKSB7CisgICAgY2FzZSBJbnQzMlVzZToKKyAgICBjYXNlIEtub3duSW50MzJVc2U6
CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgIGNhc2UgTnVtYmVyVXNlOgorICAgIGNhc2Ug
UmVhbE51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpERkc6OlVzZUtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVXNlS2luZF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188932</attachid>
            <date>2013-02-18 12:58:06 -0800</date>
            <delta_ts>2013-02-18 15:51:12 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>193903</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNjEgQEAgQWJzdHJh
Y3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9v
bGVhblJlc3VsdDsKIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobV9ibG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAg
CiAgICAgbV9kaWRDbG9iYmVyID0gZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIAogICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKQoreworICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5h
dChpbmRleEluQmxvY2spKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMo
Tm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBmaWx0ZXJFZGdlQnlVc2UpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdl
cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0
KGluZGV4SW5CbG9jaykpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2UoRWRn
ZSBlZGdlKQoreworICAgIEFTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0
ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5
RWRnZXMoTm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBo
LCBub2RlLCB2ZXJpZnlFZGdlKTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpCisgICAgICAgIHZlcmlmeUVkZ2VzKG5vZGUpOworICAgIAogICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdlYWtKU0Nv
bnN0YW50OgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czogewogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBJZGVudGl0eTogewogICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTI2NSwxOSArMjk2LDE2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lKSB7CiAg
ICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBib29sIGNh
bkV4aXQgPSBmYWxzZTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVz
Lm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKICAgICAgICAgaWYgKCF2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKHZhbHVlLmlz
Q2xlYXIoKSkKLSAgICAgICAgICAgICAgICBjYW5FeGl0IHw9IHRydWU7CisgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUu
dmFsdWUoKSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBm
b3JOb2RlKG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yODYsMzUgKzMxNCwxMCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewot
ICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKQotICAg
ICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkp
IHsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgbV92YXJp
YWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGVkVHlwZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJl
ZGljdGlvbigpOwotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRU
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIAogICAg
ICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMyMiw3ICszMjUsNiBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVl
biBzZXQuCiAgICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNjYs
NyArMzY4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHNw
ZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODEsMTYgKzM4MiwxNCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50
MzI6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CkBAIC00MDQsNyArNDAzLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNDIzLDE2ICs0MjEsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcih+U3BlY0NlbGwpOwot
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKQEAgLTQ0Nyw3ICs0MzUsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJl
clVuYXJ5KG5vZGUpOwogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKQEAgLTQ1NSwxMCArNDQyLDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAotICAgIGNhc2UgQ2hlY2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
ICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAgICAgSlNWYWx1
ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTQ2OSwzMCArNDUy
LDI1IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkg
ewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9k
ZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMy
VXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkK
KyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4
cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CisgICAgICAg
IGNhc2UgTnVtYmVyVXNlOgogICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKICAgICAgICAgICAgICAgICAmJiBpc1Jl
YWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQogICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09
IFZhbHVlQWRkKSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAotICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCkBAIC01MDUsMTUgKzQ4MywxOSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dy
YXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5i
aW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51
bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEFyaXRoTmVnYXRlOiB7CkBAIC01MjQsMTUgKzUwNiwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLm5l
Z2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
ZUludDMyVW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVt
YmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBB
cml0aE11bDogewpAQCAtNTQ0LDIxICs1MzAsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJp
bmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLAotICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwg
IW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMy
VXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKQor
ICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBp
ZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KQorICAgICAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZVJlYWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5v
ZGUpOwotICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBBcml0aERpdjoKQEAgLTU5NSwxNSArNTg0LDE4IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUsIHRydWUpOyAvLyBmb3JjaW5nIGNh
bi1leGl0LCB3aGljaCBpcyBhIGJpdCBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUuCisgICAgICAg
IHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBBcml0aEFiczogewpAQCAtNjE0LDE1ICs2MDYsMTggQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzJVbmFyeShub2RlLCB0cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0g
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7
CkBAIC02MzMsNyArNjI4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTY1NSwxOCArNjQ5LDE5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGlj
dGlvbigpKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAg
ICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgTnVtYmVyVXNl
OgorICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0
cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwot
ICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc2NCwxNCArNzU5LDE3IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSog
Y2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNDZWxsU3Bl
Y3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXNT
dHJpbmdTcGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsK
KworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBj
YXNlIFN0cmluZ1VzZToKKyAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlw
ZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJl
YWs7CkBAIC04MjksNTkgKzgyNywxMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVh
bik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFu
dCkgewotICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUg
TWFzcXVlcmFkZXNBc1VuZGVmaW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSogbGVm
dCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5j
aGlsZDIoKS5ub2RlKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKLSAgICAgICAg
U3BlY3VsYXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewotICAgICAgICAgICAgZmlsdGVyID0gU3Bl
Y0ludDMyOwotICAgICAgICAgICAgY2hlY2tlciA9IGlzSW50MzJTcGVjdWxhdGlvbjsKLSAgICAg
ICAgfSBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdCwgcmlnaHQpKSB7
Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwotICAgICAgICAgICAgY2hlY2tlciA9
IGlzTnVtYmVyU3BlY3VsYXRpb247Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBD
b21wYXJlRXEpIHsKLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSB8fCByaWdodC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0gCi0gICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYg
cmlnaHQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihT
cGVjT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09i
amVjdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1
bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCk7
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmplY3QgfCBTcGVj
T3RoZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiByaWdodC0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3Qg
fCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVj
T2JqZWN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAKLSAgICAg
ICAgICAgIGZpbHRlciA9IFNwZWNUb3A7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVj
dWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmlsdGVyID0gU3BlY1Rv
cDsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FueVNwZWN1bGF0aW9uOwotICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIH0K
LSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAgICAgICFjaGVja2VyKGZvck5vZGUo
bGVmdCkubV90eXBlKQotICAgICAgICAgICAgfHwgIWNoZWNrZXIoZm9yTm9kZShyaWdodCkubV90
eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZv
ck5vZGUocmlnaHQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICAvLyBUaGlzIGlzIG92ZXJseSBj
b25zZXJ2YXRpdmUuIEJ1dCB0aGUgb25seSB0aGluZyB0aGlzIHByZXZlbnRzIGlzIHN0b3JlIGVs
aW1pbmF0aW9uLAorICAgICAgICAvLyBhbmQgaG93IGxpa2VseSBpcyBpdCwgcmVhbGx5LCB0aGF0
IHlvdSdsbCBoYXZlIHJlZHVuZGFudCBzdG9yZXMgYWNyb3NzIGEgY29tcGFyaXNvbgorICAgICAg
ICAvLyBvcGVyYXRpb24/IENvbXBhcmlzb24gb3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IGF0IHRo
ZSBlbmQgb2YgYmFzaWMgYmxvY2tzLCBzbworICAgICAgICAvLyB1bmxlc3Mgd2UgaGF2ZSBnbG9i
YWwgc3RvcmUgZWxpbWluYXRpb24gKHN1cGVyIHVubGlrZWx5IGdpdmVuIGhvdyB1bnByb2ZpdGFi
bGUgdGhhdAorICAgICAgICAvLyBvcHRpbWl6YXRpb24gaXMgdG8gYmVnaW4gd2l0aCksIHlvdSBh
cmVuJ3QgZ29pbmcgdG8gYmUgd2FudGluZyB0byBzdG9yZSBlbGltaW5hdGUKKyAgICAgICAgLy8g
YWNyb3NzIGFuIGVxdWFsaXR5IG9wLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTg5OCw0MyArODUwLDE3IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsK
LSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpIHsKLSAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdE5v
ZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewotICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5v
ZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChs
ZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHROb2RlLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAg
ICAgICAgICAgIGZvck5vZGUobGVmdE5vZGUpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAg
ICAgIGZvck5vZGUocmlnaHROb2RlKS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZl
LgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNv
ZGVBdDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTk1NCwxNSArODgw
LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZVRvcCgpOwpAQCAtOTcwLDcgKzg5Myw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewog
ICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTgyLDQ4
ICs5MDQsMzggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhD
bGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNE
b3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTEwNDcsMTA0ICs5NTksMjMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAg
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJl
cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExNTIsMTYgKzk4Myw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IAogICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjUmVh
bE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjTnVtYmVy
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTc0LDExICs5OTUsNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFJlZ0V4cEV4
ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAg
ICAgICAgICAgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkKLSAgICAgICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxs
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCkBAIC0xMjAzLDI0ICsxMDE5LDEzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3
ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291cmNl
IHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhlIGJy
YW5jaC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNo
aWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoU3Bl
Y09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBtX2JyYW5jaERp
cmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBUaHJvdzoKQEAgLTEyMzAsMTcgKzEwMzUsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
VG9QcmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKGNoaWxk
KS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENvbnN0Lmlz
TnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI3NSwzOSArMTA3Nywx
NSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICB0eXBlIHw9IFNwZWNTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgZGVzdGluYXRpb24uc2V0
KHR5cGUpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBTdHJDYXQ6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5OgogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9VTkRF
Q0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGUtPm51bUNoaWxk
cmVuKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBv
cGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51
bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQotICAgICAgICAgICAgICAgIGZvck5vZGUobV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0p
LmZpbHRlcihTcGVjUmVhbE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
PmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTMyMCw3ICsxMDk4LDYgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgog
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0FycmF5KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTM0NywzMiArMTEyNCwyNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNoaWxkLT5w
cmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPdGhlcik7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
T3RoZXJVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVjdE90aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNP
YmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgc291
cmNlLmZpbHRlcihTcGVjT2JqZWN0KTsKKyAgICAgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShT
cGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIENyZWF0
ZVRoaXM6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShu
b2RlKTsKLSAgICAgICAgCi0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0
aW9uKHNvdXJjZS5tX3R5cGUpKTsKLSAgICAgICAgICAgIAotICAgICAgICBzb3VyY2UuZmlsdGVy
KFNwZWNGdW5jdGlvbik7Ci0gICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmluYWxPYmplY3Qp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRmluYWxPYmplY3QpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTM4MSwxOSArMTE1MiwxNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVB
Y3RpdmF0aW9uOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9
IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50
czoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFy
Z3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMTQwNywxMCArMTE3NSw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoK
ICAgICAgICAgaWYgKGlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAgICAgICAgICBtX3Zhcmlh
Ymxlcy5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApA
QCAtMTQzMCw3ICsxMTk3LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xl
bmd0aFNhZmU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBU
aGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMg
b2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBw
cm9wZXJ0eS4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CkBAIC0xNDQ0LDcgKzEyMTAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9l
cyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQogICAgICAgICAv
LyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJlaW5nIGZ1cnRo
ZXIgb3B0aW1pemVkIGJ5IHRoZQogICAgICAgICAvLyBBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKQEAgLTE0NTMsOCArMTIxOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0
dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAgICAgICAvLyBhIGdl
dHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIC8vIEJ1dCB3ZSBk
byBzcGVjdWxhdGUgdGhhdCB0aGUgaW5kZXggaXMgYW4gaW50ZWdlci4KLSAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIC8vIEFuZCB0aGUg
cmVzdWx0IGlzIHVua25vd24uCiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAg
ICAgICBicmVhazsKQEAgLTE0NjIsMjkgKzEyMjUsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdG
dW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVj
dHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgot
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU2V0
Q2FsbGVlOgogICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRTY29wZTog
Ly8gRklYTUU6IFdlIGNvdWxkIGdldCByaWQgb2YgdGhlc2UgaWYgd2Uga25vdyB0aGF0IHRoZSBK
U0Z1bmN0aW9uIGlzIGEgY29uc3RhbnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDYyMDIKICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgY2FzZSBTa2lwVG9wU2Nv
cGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNraXBT
Y29wZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgSlNWYWx1
ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChj
aGlsZCAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxKU1Njb3BlKj4oY2hp
bGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7CkBAIC0xNDk1LDE4ICsxMjUzLDE0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOyAv
LyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTUxOCw4ICsxMjcyLDYgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAg
ICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsCkBAIC0xNTU1
LDcgKzEzMDcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIC8vIG1vcmUgdGhvcm91Z2hseS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNjIwMAogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZWxpbWluYXRlIHRo
ZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVlIHRoYXQgZmxvd3MgaW50byB0
aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2MjAxCi0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTE1NjQsNiArMTMxNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBj
b25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlw
ZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVu
c3VyZWQgdGhpcy4KICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1w
dGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBm
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFz
ZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQu
CkBAIC0xNTcxLDkgKzEzMjMsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vi
c2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
aXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3Vs
YXRpb24odmFsdWUubV90eXBlKSk7CisgICAgICAgIGlmICghdmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVy
ZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTE1OTEsNyArMTM0Miw2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gaW5maW5pdHkgb2Yg
c3RydWN0dXJlcy4KICAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAg
IAotICAgICAgICBBU1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZh
bHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVz
dC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgog
ICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKQEAgLTE2
MDAsNyArMTM1MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1
dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGlm
ICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVh
cigpKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKQEAgLTE2MTAsMTQgKzEzNTksMTEgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5j
bGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFs
cmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxvd2VkIGJ5
IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRoZXJlIGlz
IG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIgaGVyZS4KQEAgLTE2MzAsNyArMTM3
Niw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CkBAIC0xNjc5LDkgKzE0MjQs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIEFT
U0VSVChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKICAg
ICAgICAgICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFn
ZUNvbnZlcnQpOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLT5hcnJheU1v
ZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSB0cnVlOwpAQCAtMTY5NCwzNSArMTQzNiwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAg
ICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6Ci0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkg
ewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9k
ZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlPZmZzZXQ6IHsKLSAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFsc2U7Ci0gICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhp
dCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0xNzY2LDEyICsxNDkzLDEwIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCkBAIC0xNzgxLDM0ICsxNTA2LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgIGNh
c2UgUHV0R2xvYmFsVmFyQ2hlY2s6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToK
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHBy
b3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBw
cm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAgICAgICAgLy8g
RklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2Vz
IGFuIHVuY29uZGl0aW9uYWwgY2VsbAotICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQotICAgICAgICBpZiAoIShub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKSAmJiAhKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBG
bHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgY2FzZSBCcmVha3BvaW50
OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIENhbGw6CkBAIC0xODM2LDcgKzE1NTAsNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAg
ICBjYXNlIE5vcDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgotICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5v
ZGVUeXBlOgpAQCAtMTg0Nyw2ICsxNTYwLDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICByZXR1cm4gbV9pc1ZhbGlkOwogfQogCitib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAgIE5vZGUqIG5vZGUg
PSBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9k
ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsK
KyAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsKK30KKwogaW5s
aW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBjbG9iYmVyQ2FwdHVyZWRW
YXJzKGNvZGVPcmlnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0MzI1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDUy
IEBAIHB1YmxpYzoKICAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBhc3QgdGhp
cyBub2RlLiBOb3RhYmx5LCBpdCB3aWxsIHJldHVybiB0cnVlCiAgICAgLy8gZm9yIGJsb2NrIHRl
cm1pbmFscywgc28gbG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4gb3IgdmFy
aWFudHMKICAgICAvLyBvZiBUaHJvdy4KLSAgICBib29sIGV4ZWN1dGUodW5zaWduZWQpOworICAg
IC8vCisgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gZG9pbmc6
CisgICAgLy8KKyAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7CisgICAg
Ly8gICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7CisgICAgLy8gICAgIHJlc3VsdCA9IHN0
YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKKyAgICAvLyB9IGVsc2UKKyAgICAvLyAgICAgcmVz
dWx0ID0gdHJ1ZTsKKyAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAg
ICAKKyAgICAvLyBJbmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJ
dCByZXNldHMgYW55IHN0YXRlIGluIHRoZSBub2RlLAorICAgIC8vIHRoYXQgaXMgcHJvZ3Jlc3Np
dmVseSBidWlsdCB1cCBieSBleGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVjdHMoKS4gSW4K
KyAgICAvLyBwYXJ0aWN1bGFyLCB0aGlzIHJlc2V0cyBjYW5FeGl0KCksIHNvIGlmIHlvdSB3YW50
IHRvICJrbm93IiBiZXR3ZWVuIGNhbGxzIG9mCisgICAgLy8gc3RhcnRFeGVjdXRpbmcoKSBhbmQg
ZXhlY3V0ZUVkZ2VzKCkvRWZmZWN0cygpIHdoZXRoZXIgdGhlIGxhc3QgcnVuIG9mIHRoZQorICAg
IC8vIGFuYWx5c2lzIGNvbmNsdWRlZCB0aGF0IHRoZSBub2RlIGNhbiBleGl0LCB5b3Ugc2hvdWxk
IHByb2JhYmx5IHNldCB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24gYXNpZGUgcHJpb3IgdG8gY2Fs
bGluZyBzdGFydEV4ZWN1dGluZygpLgorICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcoTm9kZSopOwor
ICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAg
ICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlz
IHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKKyAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUu
IFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZAorICAgIC8v
IGZpbHRlckVkZ2VCeVVzZSgpIChvciBzb21lIGVxdWl2YWxlbnQpIG9uIGVhY2ggZWRnZS4KKyAg
ICB2b2lkIGV4ZWN1dGVFZGdlcyhOb2RlKik7CisgICAgdm9pZCBleGVjdXRlRWRnZXModW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVyRWRn
ZUJ5VXNlKEVkZ2UgZWRnZSkKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBz
d2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAg
ICAgICAgY2FzZSBLbm93bk51bWJlclVzZToKKyAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6Cisg
ICAgICAgICAgICBBU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9y
KGVkZ2UudXNlS2luZCgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKKyAgICAgICAgCisgICAgICAgIGZpbHRlckJ5VHlwZShlZGdlLm5vZGUoKSwgdHlwZUZpbHRl
ckZvcihlZGdlLnVzZUtpbmQoKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0cmFjdGx5IGV4
ZWN1dGUgdGhlIGVmZmVjdHMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgY2hhbmdlcyB0aGUgYWJz
dHJhY3QKKyAgICAvLyBzdGF0ZSBhc3N1bWluZyB0aGF0IGVkZ2VzIGhhdmUgYWxyZWFkeSBiZWVu
IGZpbHRlcmVkLgorICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2Nr
KTsKKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSop
OwogICAgIAogICAgIC8vIERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2JiZXIgdGhlIHdv
cmxkPwogICAgIGJvb2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsg
fQpAQCAtMjU5LDYgKzMwNCwxNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2Rl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBmb3JOb2RlKG5vZGUpOworICAgICAgICBpZiAodmFsdWUubV90eXBlICYgfnR5cGUpCisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICB2YWx1ZS5maWx0ZXIo
dHlwZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmVyaWZ5RWRnZShFZGdlKTsKKyAgICB2b2lk
IHZlcmlmeUVkZ2VzKE5vZGUqKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwog
ICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzI1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQs
NiArMjM0LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmlsdGVy
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90Cisg
ICAgICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2
YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwOTY2MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJl
cygpOwogICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1
cmVzKCk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFkamFj
ZW5jeUxpc3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7CiAg
ICAgICAgIGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBdLm1f
ZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU4LDE4ICs1NSwxMiBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUq
IGNoaWxkMiwgTm9kZSogY2hpbGQzKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBt
X2tpbmQoRml4ZWQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwg
a2luZCA9PSBGaXhlZCk7CiAgICAgICAgIGluaXRpYWxpemUoY2hpbGQxLCBjaGlsZDIsIGNoaWxk
Myk7CiAgICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCB1bnNpZ25lZCBm
aXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgICAgIDogbV9raW5kKFZhcmlhYmxlKQotI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlRf
VU5VU0VEKGtpbmQsIGtpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBzZXRGaXJzdENoaWxkKGZp
cnN0Q2hpbGQpOwpAQCAtNzksMjEgKzcwLDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBFZGdlJiBj
aGlsZCh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsK
LSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRz
W2ldOwogICAgIH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQodW5zaWduZWQgaSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4
ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBz
ZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAgewogICAgICAgICBBU1NFUlQo
aSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgbV93
b3Jkc1tpXSA9IG5vZGVVc2U7CiAgICAgfQogICAgIApAQCAtMTI1LDkgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgICAgICBtX2tpbmQgPSBGaXhlZDsKLSNlbmRpZgogICAgICAgICBpbml0aWFsaXplKCk7CiAg
ICAgfQogICAgIApAQCAtMTQyLDM0ICsxMjcsMjQgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQg
Zmlyc3RDaGlsZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlh
YmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZDsKICAgICB9CiAg
ICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCiAgICAgewotICAgICAg
ICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1swXS5tX2VuY29k
ZWRXb3JkID0gZmlyc3RDaGlsZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtQ2hpbGRy
ZW4oKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAg
ICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CiAgICAgfQogICAgIHZvaWQg
c2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBBU1NF
UlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1sxXS5tX2VuY29kZWRXb3Jk
ID0gbnVtQ2hpbGRyZW47CiAgICAgfQogICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSNlbmRpZgogcHJpdmF0ZToKICAg
ICBFZGdlIG1fd29yZHNbU2l6ZV07Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQgbV9r
aW5kOwotI2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0MzI1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vICAg
YW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgogLy8gLSBZb3Ug
Y2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2Ug
ZnJlZUFsbCgpLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gZm9yY2VkQ2VsbFNpemU6IHNl
dCB0aGlzIHRvIDAgaWYgeW91J3JlIGhhcHB5IHdpdGggdGhlIGRlZmF1bHQgYWxpZ25tZW50LCBv
ciBzZXQgaXQKKy8vIHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91IHdhbnQgdG8gZm9yY2libHkg
YWxpZ24gdGhlIGFsbG9jYXRpb25zIHRvIGEgY2VydGFpbgorLy8gdmFsdWUuIFdoZW4geW91IGRv
IHRoaXMsIEFsbG9jYXRvciB3aWxsIEFTU0VSVCB0aGF0IGZvcmNlZENlbGxBbGlnbm1lbnQgPj0g
c2l6ZW9mKFQpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxp
Z25tZW50PgogY2xhc3MgQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICBBbGxvY2F0b3IoKTsKQEAg
LTYzLDEzICs2NywyNCBAQCBwcml2YXRlOgogICAgIHZvaWQqIGJ1bXBBbGxvY2F0ZSgpOwogICAg
IHZvaWQqIGZyZWVMaXN0QWxsb2NhdGUoKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3coKTsKLQor
ICAgIAorICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoKQorICAgIHsKKyAgICAgICAgaWYgKCFm
b3JjZWRDZWxsQWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihUKTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChmb3JjZWRDZWxsQWxpZ25tZW50ID49IHNpemVvZihUKSk7Cisg
ICAgICAgIHJldHVybiBmb3JjZWRDZWxsQWxpZ25tZW50OworICAgIH0KKyAgICAKICAgICBzdHJ1
Y3QgUmVnaW9uIHsKICAgICAgICAgc3RhdGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBL
QjsgfQotICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1h
eChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQg
bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgp
KSAvIHNpemVvZihUKTsgfQotICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0
PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQotICAgICAg
ICBib29sIGlzSW5UaGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9u
KCk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3RkOjpt
YXgoc2l6ZW9mKFJlZ2lvbiksIGNlbGxTaXplKCkpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBoZWFkZXJTaXpl
KCkpIC8gY2VsbFNpemUoKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IHBheWxvYWRTaXplKCkg
eyByZXR1cm4gbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSAqIGNlbGxTaXplKCk7IH0KKyAgICAg
ICAgY2hhciogcGF5bG9hZEJlZ2luKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSArIGhlYWRlclNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkRW5kKCkgeyByZXR1cm4g
cGF5bG9hZEJlZ2luKCkgKyBwYXlsb2FkU2l6ZSgpOyB9CisgICAgICAgIGJvb2wgaXNJblRoaXNS
ZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpIC0gcGF5bG9hZEJlZ2luKCkpIDwgcGF5bG9hZFNpemUo
KTsgfQogICAgICAgICBzdGF0aWMgUmVnaW9uKiByZWdpb25Gb3IoY29uc3QgVCogcG9pbnRlcikg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KICAgICAgICAgCiAgICAgICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CkBAIC04MiwyNiArOTcsMjYgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBSZWdpb24qIG1fcmVnaW9uSGVhZDsKICAgICB2b2lkKiogbV9mcmVlTGlzdEhlYWQ7
Ci0gICAgVCogbV9idW1wRW5kOwotICAgIHVuc2lnbmVkIG1fYnVtcFJlbWFpbmluZzsKKyAgICBj
aGFyKiBtX2J1bXBFbmQ7CisgICAgc2l6ZV90IG1fYnVtcFJlbWFpbmluZzsKIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+OjpBbGxvY2F0b3IoKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lubGluZSBBbGxv
Y2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OkFsbG9jYXRvcigpCiAgICAgOiBtX3JlZ2lv
bkhlYWQoMCkKICAgICAsIG1fZnJlZUxpc3RIZWFkKDApCiAgICAgLCBtX2J1bXBSZW1haW5pbmco
MCkKIHsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46On5B
bGxvY2F0b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46On5BbGxvY2F0
b3IoKQogewogICAgIHJlc2V0KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNf
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCog
cmVzdWx0ID0gYnVtcEFsbG9jYXRlKCk7CiAgICAgaWYgKExJS0VMWSghIXJlc3VsdCkpCkBAIC0x
MDksOCArMTI0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYQog
ICAgIHJldHVybiBmcmVlTGlzdEFsbG9jYXRlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2Vk
Q2VsbEFsaWdubWVudD46OmZyZWUoVCogb2JqZWN0KQogewogICAgIG9iamVjdC0+flQoKTsKICAg
ICAKQEAgLTExOSw4ICsxMzQsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3Qp
CiAgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
dm9pZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGln
bm1lbnQ+OjpmcmVlQWxsKCkKIHsKICAgICBpZiAoIW1fcmVnaW9uSGVhZCkgewogICAgICAgICBB
U1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CkBAIC0xNDIsOCArMTU3LDggQEAgdm9pZCBBbGxvY2F0
b3I8VD46OmZyZWVBbGwoKQogICAgIHN0YXJ0QnVtcGluZ0luKG1fcmVnaW9uSGVhZCk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQoKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2Nh
dG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpyZXNldCgpCiB7CiAgICAgZnJlZVJlZ2lvbnNT
dGFydGluZ0F0KG1fcmVnaW9uSGVhZCk7CiAgICAgCkBAIC0xNTIsMzggKzE2NywzOCBAQCB2b2lk
IEFsbG9jYXRvcjxUPjo6cmVzZXQoKQogICAgIG1fYnVtcFJlbWFpbmluZyA9IDA7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci11bnNpZ25lZCBBbGxvY2F0b3I8VD46OmluZGV4T2YoY29uc3Qg
VCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6aW5kZXhP
Zihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgdW5zaWduZWQgYmFzZUluZGV4ID0gMDsKICAgICBm
b3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdpb247IHJlZ2lvbiA9IHJlZ2lv
bi0+bV9uZXh0KSB7CiAgICAgICAgIGlmIChyZWdpb24tPmlzSW5UaGlzUmVnaW9uKG9iamVjdCkp
Ci0gICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAoYml0d2lzZV9jYXN0PGNoYXIqPihv
YmplY3QpIC0gcmVnaW9uLT5wYXlsb2FkQmVnaW4oKSkgLyBjZWxsU2l6ZSgpOwogICAgICAgICBi
YXNlSW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwogICAgIH0KICAg
ICBDUkFTSCgpOwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQWxs
b2NhdG9yPFQ+KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBbGxvY2F0
b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD4qIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25t
ZW50Pjo6YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHJldHVybiBSZWdpb246
OnJlZ2lvbkZvcihvYmplY3QpLT5tX2FsbG9jYXRvcjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjpidW1wQWxsb2NhdGUoKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19J
TkxJTkUgdm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpidW1wQWxsb2Nh
dGUoKQogewotICAgIGlmICh1bnNpZ25lZCByZW1haW5pbmcgPSBtX2J1bXBSZW1haW5pbmcpIHsK
LSAgICAgICAgcmVtYWluaW5nLS07CisgICAgaWYgKHNpemVfdCByZW1haW5pbmcgPSBtX2J1bXBS
ZW1haW5pbmcpIHsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplKCk7CiAgICAgICAgIG1f
YnVtcFJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChy
ZW1haW5pbmcgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1haW5pbmcgKyBj
ZWxsU2l6ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci12b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFsbG9jYXRvcjxU
LCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCoq
IHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKQEAg
LTE5Miw4ICsyMDcsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkKiBBbGxv
Y2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBm
b3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1l
bnQ+OjphbGxvY2F0ZVNsb3coKQogewogICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOwogICAg
IEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTIxNiw4ICsyMzEsOCBAQCB2b2lkKiBBbGxv
Y2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQo
dHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KHR5cGVuYW1lIEFsbG9jYXRv
cjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24pCiB7CiAgICAgd2hpbGUg
KHJlZ2lvbikgewogICAgICAgICBSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb24tPm1fbmV4dDsK
QEAgLTIyNiwxMSArMjQxLDExIEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0
aW5nQXQKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxU
Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lk
IEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5h
bWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsK
LSAgICBtX2J1bXBFbmQgPSByZWdpb24tPmRhdGEoKSArIFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQ
ZXJSZWdpb24oKTsKLSAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246Om51bWJlck9mVGhpbmdz
UGVyUmVnaW9uKCk7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5wYXlsb2FkRW5kKCk7CisgICAg
bV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpwYXlsb2FkU2l6ZSgpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjUs
NyArMTQ2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAg
ICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsgLy8gTWF0aC5t
aW4oeCkKICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMSkpOwotICAgICAgICBhZGRUb0dyYXBoKENoZWNrTnVtYmVyLCByZXN1bHQp
OworICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIEVkZ2UocmVzdWx0LCBOdW1iZXJVc2UpKTsK
ICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDMyNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTY5
LDcgKzk2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNzaW5nIGFyZ3Vt
ZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkFyZ3Vt
ZW50cykKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMTAxNCwxOCArMTAx
NCwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVudW0gUHJlZGlj
dGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQcmVkaWN0aW9u
TWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50LCBQ
cmVkaWN0aW9uSGFuZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJlU2Ft
ZVByZWRpY3Rpb24pCisgICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVudCkK
ICAgICB7CiAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAotICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9ybSBy
ZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0Ci0gICAgICAgIC8vIGFncmVlLgot
ICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVByZWRpY3Rp
b24KLSAgICAgICAgICAgICYmIG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSAhPSByZXBsYWNl
bWVudC0+cHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFM
b2dGKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJl
cGxhY2VtZW50LT5pbmRleCgpKTsKICNlbmRpZgpAQCAtMTIzMCw3ICsxMjIzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICAgICAgLy8gVGhpcyBpcyBzdHJh
bmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxsIGNvbnZlcnQgbm9kZXMgdG8gY29u
c3RhbnRzLAogICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGVkIGNv
bnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVwLgotICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSksIEFsbG93UHJlZGljdGlvbk1pc21hdGNoKTsKKyAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MzI1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgzLDEyICs4Myw2IEBAIHN0cnVjdCBOb2RlUG9pbnRlclRyYWl0cyB7CiAgICAgc3RhdGljIHZv
aWQgZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiB9OwogCi1lbnVtIFVzZUtp
bmQgewotICAgIFVudHlwZWRVc2UsCi0gICAgRG91YmxlVXNlLAotICAgIExhc3RVc2VLaW5kIC8v
IE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2Vk
IHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMuCi19OwotCiAvLyBVc2UgUmVm
Q2hpbGRyZW4gaWYgdGhlIGNoaWxkIHJlZiBjb3VudHMgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gYWRq
dXN0ZWQgdXNpbmcKIC8vIG90aGVyIG1lYW5zIGFuZCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBp
cyB0cnVlOgogLy8gLSBUaGUgbm9kZSB5b3UncmUgY3JlYXRpbmcgaXMgTXVzdEdlbmVyYXRlLgpA
QCAtMTA2LDE5ICsxMDAsNiBAQCBlbnVtIFJlZk5vZGVNb2RlIHsKICAgICBEb250UmVmTm9kZQog
fTsKIAotaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaW5kIHVzZUtpbmQp
Ci17Ci0gICAgc3dpdGNoICh1c2VLaW5kKSB7Ci0gICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAg
ICByZXR1cm4gIiI7Ci0gICAgY2FzZSBEb3VibGVVc2U6Ci0gICAgICAgIHJldHVybiAiZCI7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiBpbmxpbmUgYm9vbCBpc0FSTXY3cygpCiB7CiAjaWYg
Q1BVKEFQUExFX0FSTVY3UykKQEAgLTIzNiw2ICsyMTcsOCBAQCBlbnVtIFVuaWZpY2F0aW9uU3Rh
dGUgewogICAgIEdsb2JhbGx5VW5pZmllZAogfTsKIAorZW51bSBPcGVyYW5kU3BlY3VsYXRpb25N
b2RlIHsgQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24gfTsKKwogZW51bSBTcGVjdWxhdGlvbkRpcmVjdGlvbiB7IEZvcndhcmRTcGVjdWxhdGlvbiwg
QmFja3dhcmRTcGVjdWxhdGlvbiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsx
NDksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICAgICAg
Y2FzZSBHZXRCeUlkRmx1c2g6IHsKICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9k
ZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9k
ZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KCFpc0NlbGxTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKQEAgLTE4MSwxOCArMTgy
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZvck5v
ZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVT
ZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBj
aGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3Bl
cnR5U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CkBAIC0yMDcsNyArMjA4LDggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlJ
ZERpcmVjdDogewogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUt
PmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEo
KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwpA
QCAtMjM4LDcgKzI0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhz
dHJ1Y3R1cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRn
ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0YSA9IDA7CkBAIC0yNjQsMzgg
KzI2NiwzOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOworICAgICAgICAg
ICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkLT5yZWYoKTsgLy8gVGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUg
cHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgotICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZD
aGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hp
bGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBF
ZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5m
byh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkRWRnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0
dGVyZmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGNoaWxkKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAo
c3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
IGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
IGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CkBAIC0zOTEsMTMgKzM5MywxMyBAQCBw
cml2YXRlOgogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJl
Zk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAgICAgICAg
ICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29uc3Rh
bnQpOworICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUo
KSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVj
a1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnQpOworICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIEVk
Z2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgaXMg
bmVjZXNzYXJ5IGJlY2F1c2UgdGhlIENGQSBtYXkgcmVhY2ggY29uY2x1c2lvbnMgYWJvdXQgY29u
c3RhbnRzIGJhc2VkIG9uIGl0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDYgQEAgaW5saW5lIGJv
b2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICBpZiAoIWNoYW5nZWQpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIGRmZy5yZXNldEV4aXRTdGF0ZXMo
KTsKLSAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVh
ZGluZyhkZmcpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdF
ZGdlLmNwcAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIG91dC5wcmludCh1c2VLaW5kVG9TdHJpbmcodXNlS2luZCgpKSwgbm9kZSgp
KTsKKyAgICBvdXQucHJpbnQodXNlS2luZCgpLCAiOiIsIG5vZGUoKSk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShy
ZXZpc2lvbiAxNDMyNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBzdGF0aWMg
dWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiAyOyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0
KCkgeyByZXR1cm4gNDsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9k
ZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEJlZm9yZUZpeHBvaW50KTsKKyAg
ICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1cEJsb2Nr
KG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTc2LDUwICs3OSwyNjEgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpCisgICAgICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0Ny
ZWF0ZWRUaGlzQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihu
b2RlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VE
b3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hp
bGQxKCksIE51bWJlclVzZSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3RlZFR5cGUgPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBl
bHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAg
IGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdFJTaGlm
dDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewor
ICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJ
bnRFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogeworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMy
OiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9J
bnQzMjogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlID0gCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
cyk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJy
YXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0g
QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2Up
OwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rp
b24oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYm
IGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNr
U3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1
cmUoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKE5vdENlbGxVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6IHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAgICAgICAgIGlmIChh
dHRlbXB0VG9NYWtlSW50ZWdlckFkZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVk
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAg
ICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7
CisgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aERpdjogewor
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAg
IGlmIChpc1g4NigpIHx8IGlzQVJNdjdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCksIG5vZGUtPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBw
b3J0c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShu
b2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRv
IHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9t
CisgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgorICAgICAgICAgICAg
ICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwg
U3BlY0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVk
Z2UoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlLT5zZXRPcChH
ZXRBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVN
dXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
KTsKLSAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVj
a0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAg
ICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNl
IEFyaXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBF
ZGdlKHN0b3JhZ2UpOworICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAg
ICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+
YXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFyaXRoU3FydDogeworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgTG9naWNhbE5vdDogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBlbHNl
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAg
ICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHlwZU9mOiB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJl
RXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJl
R3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOiB7CisgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBDb21hcHJlRXFDb25zdGFudCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51
bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENvbXBhcmVF
cSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCku
c2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2Rl
LT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKKyAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5z
ZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIC8v
IEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgorICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5n
KSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2Rl
LT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAg
ICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCkBAIC0xMjcsNyArMzQxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rp
b24oKSwKICAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgp
OwogICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQpAQCAt
MTM4LDEzICszNTIsNzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhKG5vZGUtPmZs
YWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5
TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5k
ZWNpZGVkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CisgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCku
c2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgU3RyaW5nQ2hhckF0OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAg
ICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRo
ZXNlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShB
cnJheTo6U3RyaW5nKSk7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CisKKyAgICAgICAgICAgIG5v
ZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZp
bmUoCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAorICAgICAgICAg
ICAgICAgICAgICBjaGlsZDItPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQzLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9k
ZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9uczoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCksIFJlYWxOdW1iZXJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5
OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMygpLnNldFVzZUtpbmQoSW50MzJV
c2UpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZShub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93
bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50
MzJVc2UpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC0xNjMsMTEgKzQ0MSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAg
ICAgICAgICAgICAgIFNwZWNJbnQzMiwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xNzYsNDkgKzQ1OCwyNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRp
b24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNo
aWZ0OgotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7
Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbXBhcmVFcToK
LSAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgot
ICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
RXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo
IU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBm
aXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2Fs
Tm90OiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVj
OgorICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VL
aW5kKENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMCk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJv
b2xlYW5Vc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNh
bE5vdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90
LT5vcCgpID09IExvZ2ljYWxOb3QKQEAgLTI2MSwxNDkgKzUyMSwxOTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBT
ZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5p
c0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAg
ICAgIGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSkpCisgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCisgICAgICAgICAg
ICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5udW1DaGlsZHJlbigpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFu
ZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBv
cGVyYW5kSW5kZXhdLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSW5kZXhd
LnNldFVzZUtpbmQoUmVhbE51bWJlclVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgxKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKQotICAgICAg
ICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDEpOworICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKKyAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgw
KTsKKyAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogeworICAgICAgICAgICAgaWYgKGlzT3RoZXJT
cGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGlzT2JqZWN0U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpCisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
aXRoTWluOgotICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICBjYXNlIEFyaXRoTW9kOiB7
Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAg
ICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChGdW5jdGlvblVzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5T
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSB8fCBpc0FS
TXY3cygpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpbmpl
Y3RJbnQzMlRvRG91YmxlTm9kZSgwKTsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91
YmxlTm9kZSgxKTsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVm
J2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KLSAg
ICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAg
Tm9kZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVj
RG91YmxlLCAqbm9kZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9kZS0+
c2V0T3AoRG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5p
dGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgorICAgICAgICBjYXNlIFB1dFNjb3BlZFZh
cjoKKyAgICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CisgICAgICAgIGNhc2UgU2tpcFNjb3BlOiB7
CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJpdGhBYnM6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgY2FzZSBHZXRCeUlkOiB7CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgaWYgKCFp
c0ludDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgICAgICBpZiAoY29k
ZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxE
YXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKKyAgICAgICAgICAgICAgICBt
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVBy
b2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsK
KyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbiht
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKKyAgICAgICAg
ICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUs
IEFycmF5OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlN
b2RlLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9m
aWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGlm
ICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NF
UlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+
Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAg
ICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShh
cnJheU1vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hl
Y2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAg
ICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3Fy
dDogewotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBHZXRCeUlk
Rmx1c2g6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
Q2VsbCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAg
ICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAg
ICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAg
ICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotCi0gICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2Rl
KCkucmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKLSAg
ICAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAg
ICAgIGNoaWxkMy0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJs
ZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIDMpOworICAgICAgICBjYXNlIENoZWNr
RXhlY3V0YWJsZToKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBG
b3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQ6CisgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50OgorICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgIGNhc2UgUHV0QnlJZDoK
KyAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFu
Y2U6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5
OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgotICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCi0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAg
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgyKTsKKyAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6
U3RyaW5nOgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5n
VXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlwZSgKLSAgICAgICAgICAgICAg
ICAgICAgbGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+aW5kZXhpbmdUeXBlKCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgaSktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5v
ZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewotICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTsp
Ci0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQXJyYXlpZnk6CisgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTog
eworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIo
KS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDogewor
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQorICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlN
b2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CisgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBhcHBlYXJzIGJyb2tlbjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMg
YW4gdW5jb25kaXRpb25hbCBjZWxsCisgICAgICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQorICAgICAgICAgICAgaWYgKCEobm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAg
ICAgICAgIH0KIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAg
LTQ3MSwxMSArNzczLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFNwZWNOb25lLCBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgp
KSwgYXJyYXkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRn
ZSBiYXNlLCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCisgICAgdm9pZCBi
bGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgRWRnZSYgc3RvcmFnZUNo
aWxkKQogICAgIHsKLSAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3Jl
Rml4cG9pbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAogICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50Tm9kZTsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7CkBAIC00OTksNyArNzk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIG1fZ3JhcGguY2hpbGQobm9kZSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uo
c3RvcmFnZSk7CisgICAgICAgICAgICBzdG9yYWdlQ2hpbGQgPSBFZGdlKHN0b3JhZ2UpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IH0KICAgICB9CkBAIC01MDcsNDAgKzgwNiw0NiBA
QCBwcml2YXRlOgogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKICAgICAg
ICAgTm9kZSogbm9kZSA9IGVkZ2Uubm9kZSgpOwotICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBW
YWx1ZVRvSW50MzIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikgeworICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5k
KEtub3duSW50MzJVc2UpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBFZGdlIG9sZEVkZ2UgPSBlZGdlOwogICAgICAgICBFZGdlIG5ld0VkZ2UgPSBu
b2RlLT5jaGlsZDEoKTsKICAgICAgICAgCisgICAgICAgIGlmIChuZXdFZGdlLnVzZUtpbmQoKSAh
PSBJbnQzMktpbmQpIHsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93bkludDMyVXNl
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNT
RVJUKG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CisgICAgICAgIAogICAgICAg
ICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsK
ICAgICAgICAgCiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGZpeERvdWJsZUVkZ2UodW5zaWduZWQgY2hpbGRJbmRleCwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICB2b2lkIGZpeERvdWJsZUVkZ2Uo
RWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgTm9k
ZSogc291cmNlID0gbV9jdXJyZW50Tm9kZTsKLSAgICAgICAgRWRnZSYgZWRnZSA9IG1fZ3JhcGgu
Y2hpbGQoc291cmNlLCBjaGlsZEluZGV4KTsKICAgICAgICAgCiAgICAgICAgIGlmIChlZGdlLT5w
cmVkaWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQo
RG91YmxlVXNlKTsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZCh1c2VLaW5kKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW5qZWN0SW50MzJU
b0RvdWJsZU5vZGUoY2hpbGRJbmRleCwgZGlyZWN0aW9uKTsKKyAgICAgICAgaW5qZWN0SW50MzJU
b0RvdWJsZU5vZGUoZWRnZSwgZGlyZWN0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIGluamVjdElu
dDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBpbmplY3RJbnQzMlRv
RG91YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgewog
ICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJs
ZSwKICAgICAgICAgICAgIGRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uID8gSW50MzJU
b0RvdWJsZSA6IEZvcndhcmRJbnQzMlRvRG91YmxlLAotICAgICAgICAgICAgbV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS5u
b2RlKCkpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdl
Lm5vZGUoKSwgRG91YmxlVXNlKSk7CisgICAgICAgIHJlc3VsdC0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChEb3VibGVVc2UpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKApAQCAtNTQ4LDcgKzg1Myw0OCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5jaGlsZChtX2N1
cnJlbnROb2RlLCBjaGlsZEluZGV4KS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwg
cmVzdWx0LT5pbmRleCgpKTsKICNlbmRpZgogCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJy
ZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91YmxlVXNlKTsKKyAgICAgICAg
bV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0LCB1
c2VLaW5kKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihF
ZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSogb2xkTm9kZSA9IGVkZ2Uubm9kZSgpOwor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKG9sZE5vZGUtPmhhc0NvbnN0YW50KCkpOworICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChvbGROb2RlKTsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIHZhbHVlID0ganNOdW1iZXIoSlNDOjp0b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkp
KTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgIGVkZ2Uuc2V0Tm9k
ZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbV9pbmRleEluQmxvY2ss
IERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0ludDMyLCBKU0NvbnN0YW50LAorICAgICAg
ICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRP
ckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7CisgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkTm9kZSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2Rl
KiBub2RlLCBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGlmIChtb2Rl
ICE9IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3Rh
bnQoKSB8fCBub2RlLT5jaGlsZDIoKS0+aGFzQ29uc3RhbnQoKSk7CisgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRU
b0ludDMyKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJ1bmNh
dGVDb25zdGFudFRvSW50MzIobm9kZS0+Y2hpbGQyKCkpOworICAgIH0KKyAgICAKKyAgICBib29s
IGF0dGVtcHRUb01ha2VJbnRlZ2VyQWRkKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBZGRT
cGVjdWxhdGlvbk1vZGUgbW9kZSA9IG1fZ3JhcGguYWRkU3BlY3VsYXRpb25Nb2RlKG5vZGUpOwor
ICAgICAgICBpZiAobW9kZSA9PSBEb250U3BlY3VsYXRlSW50ZWdlcikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3Nh
cnkobm9kZSwgbW9kZSk7CisgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJV
c2UpOworICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDMyNTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQ2LDQ1ICszNDYsMTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQog
ICAgIH0KIH0KIAotLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5vdCBy
ZWN1cnNpdmUuCi0jZGVmaW5lIERPX1RPX0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlm
IChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJz
dENoaWxkKCk7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25v
ZGUtPmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCi0gICAgICAgICAgICAg
ICAgX2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3Zh
ckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNT
RVJUKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBp
ZiAoIV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxk
MygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSB3aGlsZSAoZmFsc2UpCi0KIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9w
KQogewotICAgIERPX1RPX0NISUxEUkVOKG9wLCByZWYpOworICAgIERGR19OT0RFX0RPX1RPX0NI
SUxEUkVOKCp0aGlzLCBvcCwgcmVmKTsKIH0KIAogdm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihO
b2RlKiBvcCkKIHsKLSAgICBET19UT19DSElMRFJFTihvcCwgZGVyZWYpOworICAgIERGR19OT0RF
X0RPX1RPX0NISUxEUkVOKCp0aGlzLCBvcCwgZGVyZWYpOwogfQogCiB2b2lkIEdyYXBoOjpkZXRo
cmVhZCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
NDMyNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFB1dFRvQmFzZU9wZXJhdGlvbkRhdGEgewog
CiBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAgICAgRG9udFNwZWN1bGF0ZUludGVnZXIsCi0g
ICAgU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3csCisgICAgU3BlY3VsYXRl
SW50ZWdlckFuZFRydW5jYXRlQ29uc3RhbnRzLAogICAgIFNwZWN1bGF0ZUludGVnZXIKIH07CiAK
QEAgLTE3NCw5ICsxNzQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQo
KSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAgcGVy
Zm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3Vs
ZEdlbmVyYXRlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0g
ICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGls
ZDIoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZv
ckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5l
cmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGls
ZDIoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZv
ckVkZ2Uobm9kZS0+Y2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgfQogICAgIH0K
ICAgICAKQEAgLTUzMCw5ICs1MzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1ByZWRp
Y3RlZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
bGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJu
IGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCk7
CisgICAgICAgIHJldHVybiBpc051bWVyaWNhbChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpICYm
IGlzTnVtZXJpY2FsKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSk7CiAgICAgfQogICAgIAogICAg
IC8vIE5vdGUgdGhhdCBhICd0cnVlJyByZXR1cm4gZG9lcyBub3QgYWN0dWFsbHkgbWVhbiB0aGF0
IHRoZSBCeVZhbCBhY2Nlc3MgY2xvYmJlcnMgbm90aGluZy4KQEAgLTc4MSw3ICs3NzksNyBAQCBw
cml2YXRlOgogICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91
YmxlSW1tZWRpYXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3Vs
YXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKGFkZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0
Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNh
blRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdl
ckFuZFRydW5jYXRlQ29uc3RhbnRzIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAg
IAogICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWws
IE5vZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCkBAIC04MzAsNiArODI4LDM2IEBAIGlu
bGluZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnkKICAgICByZXR1cm4gKmJpbmFy
eVNlYXJjaDxCbG9ja0luZGV4LCB1bnNpZ25lZD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJn
ZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlz
KSk7CiB9CiAKKyNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRo
aW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYg
KF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0
Q2hpbGQoKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9k
ZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAgICAg
ICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxk
SWR4XSkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKChncmFw
aCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgIFwKKyAgICAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NF
UlQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlm
ICghX25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQz
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICB9IHdoaWxlIChmYWxzZSkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDMyNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtOTUsNyArOTUsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNw
ZWNOb25lKQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwotICAgICAg
ICBBU1NFUlQoISEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSA9PSAoY2hpbGRyZW4ua2luZCgp
ID09IEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0
cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCkBA
IC0yOTQsMjIgKzI5MywyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNvbnZlcnRUb1N0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVy
ZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25l
ZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQorICAgIHZvaWQgY29udmVy
dFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9y
YWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdl
dEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsK
LSAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uoc3RvcmFnZSkpOworICAgICAgICBjaGls
ZHJlbi5zZXRDaGlsZDEoc3RvcmFnZSk7CiAgICAgICAgIG1fb3AgPSBHZXRCeU9mZnNldDsKICAg
ICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAotICAgIHZv
aWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwg
Tm9kZSogc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgbV9v
cEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwogICAgICAgICBjaGlsZHJlbi5zZXRDaGls
ZDMoY2hpbGRyZW4uY2hpbGQyKCkpOwogICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDIoY2hpbGRy
ZW4uY2hpbGQxKCkpOwotICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShzdG9yYWdlKSk7
CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShzdG9yYWdlKTsKICAgICAgICAgbV9vcCA9IFB1
dEJ5T2Zmc2V0OwogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9
CkBAIC05OTUsNyArOTk0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9yZWZD
b3VudC0tOwogICAgIH0KICAgICAKLSAgICBFZGdlIGNoaWxkMSgpCisgICAgRWRnZSYgY2hpbGQx
KCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwog
ICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQxKCk7CkBAIC0xMDA5LDEzICsxMDA4LDEzIEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMVVuY2hlY2tlZCgp
OwogICAgIH0KIAotICAgIEVkZ2UgY2hpbGQyKCkKKyAgICBFZGdlJiBjaGlsZDIoKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJl
dHVybiBjaGlsZHJlbi5jaGlsZDIoKTsKICAgICB9CiAKLSAgICBFZGdlIGNoaWxkMygpCisgICAg
RWRnZSYgY2hpbGQzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFz
VmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQzKCk7CkBAIC0xMDMzLDYg
KzEwMzIsMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gY2hpbGRyZW4ubnVtQ2hp
bGRyZW4oKTsKICAgICB9CiAgICAgCisgICAgVXNlS2luZCBiaW5hcnlVc2VLaW5kKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChjaGlsZDEoKS51c2VLaW5kKCkgPT0gY2hpbGQyKCkudXNlS2luZCgp
KTsKKyAgICAgICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtpbmQoKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc0JpbmFyeVVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNoaWxkMSgpLnVzZUtpbmQoKSA9PSB1c2VLaW5kICYmIGNoaWxkMigpLnVzZUtpbmQoKSA9
PSB1c2VLaW5kOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTQzMjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAotdHlwZWRlZiBBbGxvY2F0b3I8Tm9kZT4gTm9kZUFsbG9jYXRvcjsKKyNpZiBVU0UoSlNWQUxV
RTY0KQordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgMTEyPiBOb2RlQWxsb2NhdG9yOworI2Vsc2UK
K3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDgwPiBOb2RlQWxsb2NhdG9yOworI2VuZGlmCiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw4ICs5Niw2IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhGb3J3YXJkSW50MzJUb0RvdWJs
ZSwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIC8qIFVzZWQgdG8gc3BlY3VsYXRlIHRoYXQgYSBk
b3VibGUgdmFsdWUgaXMgYWN0dWFsbHkgYW4gaW50ZWdlci4gKi9cCiAgICAgbWFjcm8oRG91Ymxl
QXNJbnQzMiwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgLyogVXNlZCB0byByZWNvcmQgcGxhY2Vz
IHdoZXJlIHdlIG11c3QgY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIG51bWJlci4gKi9cCi0gICAgbWFj
cm8oQ2hlY2tOdW1iZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTm9kZXMg
Zm9yIGFyaXRobWV0aWMgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQXJpdGhBZGQsIE5vZGVS
ZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0MzI1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDI4ICszOSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxJbnRlZ2VyKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKK0dQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1
cm5Gb3JtYXQpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUt
PnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFTU0VSVCghKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5t
X3R5cGUgJiB+U3BlY0ludDMyKSk7CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8u
cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICBHUFJSZWcgZ3By
ID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAg
ICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdwcik7
CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNv
bnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSW50
ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0
YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7Ci0gICAgICAgICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZk51bWJlckNvbnN0YW50KG5v
ZGUpKTsKKyAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewor
ICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJD
b25zdGFudChlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkp
OwotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdl
Lm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRl
Z2VyKSB7CkBAIC0xMTcsMjcgKzExOSwyNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJ
bnRlZ2VyKE5vZGUqCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1Zh
bHVlKE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2Ug
ZWRnZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVk
Z2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdp
c3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBHUFJS
ZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkg
ewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICBpZiAo
ZWRnZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChl
ZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVh
bSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSk7CisgICAgICAgICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRn
ZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
TnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1i
ZXJDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFs
dWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoaXNKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICB9CkBAIC04MDIsMTggKzgw
NCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiB9CiAKIHRl
bXBsYXRlPGJvb2wgc3RyaWN0PgotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50SW50ZXJuYWwoTm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnRJbnRlcm5hbChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKICAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOwogI2Vu
ZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5
cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxS
ZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVk
Z2UpOworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bkludDMyVXNlIHx8ICEodmFs
dWUubV90eXBlICYgflNwZWNJbnQzMikpOworICAgIHZhbHVlLmZpbHRlcihTcGVjSW50MzIpOwor
ICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAg
ICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXRO
b25lOiB7Ci0gICAgICAgIGlmICgobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0
YW50KG5vZGUpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewor
ICAgICAgICBpZiAoKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChlZGdl
Lm5vZGUoKSkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CiAg
ICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERh
dGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CkBAIC04MjEs
MTAgKzgyNiwxMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAg
ICAgICAgIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAo
bm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkg
ewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZSkp
OwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25z
dGFudChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwgZ3ByKTsKICAgICAg
ICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0
dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwpA
QCAtODY1LDcgKzg3MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEkKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2Nr
KGdwcik7CiAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2pp
dC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIGRpcmVj
dGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3Jt
YXRKU0ludGVnZXIpOwogICAgICAgICAvLyBJZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJldHVybi4K
ICAgICAgICAgaWYgKCFzdHJpY3QpIHsKQEAgLTkxMCwxMCArOTE1LDEwIEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKIAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJs
ZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewotICAgICAgICBpZiAobm9kZS0+aGFz
Q29uc3RhbnQoKSAmJiBpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKKyAgICAgICAgaWYgKGVkZ2Ut
Pmhhc0NvbnN0YW50KCkgJiYgaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQz
MkNvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKKyAgICAgICAgICAgIEFT
U0VSVChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgp
KSksIGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsK
ICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KQEAgLTkzNiwzNSArOTQxLDM4IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICB9CiB9CiAKLUdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChOb2RlKiBub2RlLCBEYXRhRm9y
bWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChFZGdlIGVkZ2UsIERhdGFGb3JtYXQm
IHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIHJl
dHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KG5vZGUsIHJldHVybkZvcm1hdCwg
ZGlyZWN0aW9uKTsKKyAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUludEludGVybmFsPGZhbHNlPihl
ZGdlLCByZXR1cm5Gb3JtYXQsIGRpcmVjdGlvbik7CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKiBub2RlKQorR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KEVkZ2UgZWRnZSkKIHsKICAgICBEYXRhRm9ybWF0
IG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyOwotICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3Vs
YXRlSW50SW50ZXJuYWw8dHJ1ZT4obm9kZSwgbXVzdEJlRGF0YUZvcm1hdEludGVnZXIsIEJhY2t3
YXJkU3BlY3VsYXRpb24pOworICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWw8dHJ1ZT4oZWRnZSwgbXVzdEJlRGF0YUZvcm1hdEludGVnZXIsIEJhY2t3YXJkU3BlY3Vs
YXRpb24pOwogICAgIFJFTEVBU0VfQVNTRVJUKG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyID09IERh
dGFGb3JtYXRJbnRlZ2VyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1GUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uKQorRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91
YmxlKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY0RvdWJsZUAlZCAgICIs
IG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3Rh
dGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBL
bm93bk51bWJlclVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjTnVtYmVyKSk7CisgICAgdmFs
dWUuZmlsdGVyKFNwZWNOdW1iZXIpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5t
X3R5cGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1
YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0Tm9uZSkgewotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAg
ICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgR1BSUmVnIGdwciA9
IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsK
KyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAg
ICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpKSksIGdwcik7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnBy
ZXREb3VibGVUb0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQo
ZWRnZS5ub2RlKCkpKSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91
YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIApAQCAtOTcyLDkg
Kzk4MCw5IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNOdW1iZXJD
b25zdGFudChub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnBy
ZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKSkpLCBncHIpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0
RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSksIGdwcik7
CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAg
ICAgICAgICAgIHVubG9jayhncHIpOwogCkBAIC0xMDM5LDcgKzEwNDcsNyBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICAgICAg
aWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQg
aGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0
Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdwcik7CkBAIC0xMTAyLDEzICsxMTEwLDE2IEBAIEZQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICB9CiB9CiAKLUdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSogbm9kZSwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Q2VsbChFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNDZWxsQCVkICAgIiwg
bm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0
ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtu
b3duQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOworICAgIHZhbHVlLmZp
bHRlcihTcGVjQ2VsbCk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lz
dGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAt
MTEyMCw4ICsxMTMxLDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bAogICAgICAgICAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAg
aWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQo
KSkgeworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRn
ZS5ub2RlKCkpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAg
ICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29u
c3RhbnQpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwpAQCAtMTEzNyw3ICsxMTQ4
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogCiAgICAgICAg
IGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAg
IGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBk
aXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKICAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAg
ICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTE1Myw3ICsxMTY0LDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5n
cHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0NlbGxTcGVj
dWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2Us
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsK
ICAgICB9CkBAIC0xMTc3LDEzICsxMTg4LDEzIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUNlbGwKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2xlYW4oTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9u
KQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2Us
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNCb29sQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7
CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUp
Lm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9k
ZShlZGdlKS5tX3R5cGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVk
Z2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpIHsKQEAgLTExOTUsOCArMTIwNiw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0
ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYgKGVk
Z2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQm9v
bGVhbigpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3By
KTsKQEAgLTEyMTMsNyArMTIyNCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2wKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZv
cm1hdEpTKTsKICAgICAgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbih0eXBlKSkgewogICAg
ICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwg
U3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlk
R1BSUmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZh
bGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0K
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CkBAIC0xMjMyLDcgKzEyNDMsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVCb29sCiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIGlmICghaXNC
b29sZWFuU3BlY3VsYXRpb24odHlwZSkpIHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVh
blNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2Us
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9v
bGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CiAg
ICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAtMTI5MCwzNSArMTMwMSwy
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAKICAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAg
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkp
OwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+
U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
ICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5j
aGlsZDEoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUgJiB+U3BlY09iamVj
dCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRU
eXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQ
RV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiks
IG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGls
ZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5n
cHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAot
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAg
c3RydWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzMjYsMTQgKzEz
MjgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAg
ICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVjT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigp
LAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BS
LCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRy
KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAxNDMyNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDE0ICsxMDgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAg
ICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWls
KTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZv
cihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQog
ewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUt
PmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9j
YW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVV
c2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKIH0KIApAQCAtMTIzLDcgKzEyMyw3IEBAIE9TUkV4aXRK
dW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnMKIHsKICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKCk7Ci0gICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsK
KyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAg
IHVuc2lnbmVkIGluZGV4ID0gbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mT1NSRXhpdHMoKTsK
ICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbygpOwogICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBl
bmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgp
KSk7CkBAIC0xMzIsNyArMTMyLDcgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2
ZUpJVDo6cwogCiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRn
ZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVjayhraW5kLCBq
c1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAKQEAgLTE0MCwxNCArMTQwLDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgbV9qaXQuYXBwZW5kRXhp
dEluZm8oanVtcHNUb0ZhaWwpOwogICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0
KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hl
Y2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBzVG9GYWlsKTsKIH0K
IApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hl
Y2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0
KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7
CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3Zl
cnkpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0ZhaWwpOwogICAgIG1faml0LmNv
ZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9q
aXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBt
X3N0cmVhbS0+c2l6ZSgpLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJl
Y292ZXJpZXMoKSkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0aW9uQ2hlY2soRXgKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVz
ZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNv
dmVyeSYgcmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMg
fHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNW
YWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIApA
QCAtMTc4LDcgKzE3OCw3IEBAIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZl
SkkKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiAwOwotICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQo
KSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsK
ICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAg
T1NSRXhpdCYgZXhpdCA9IG1faml0LmNvZGVCbG9jaygpLT5vc3JFeGl0KAogICAgICAgICBtX2pp
dC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KApAQCAtMjgwLDE0ICsyODAsMTQg
QEAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgp
KTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwog
ICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFp
bCk7CiAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZh
bHVlUmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwg
bV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1l
bnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVNvdXJjZSwgbm9kZSwganVtcHNUb0ZhaWwpOwogICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9y
d2FyZCh2YWx1ZVJlY292ZXJ5KTsKIH0KQEAgLTMwMiw3ICszMDIsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFs
dWVSZWdzLCBOb2RlKiBub2RlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2lu
Z0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCiAgICAgZGF0YUxvZ0YoIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAj
ZW5kaWYKQEAgLTMxNCwxMyArMzE0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0
ZVNwZWN1bGF0aXYKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9k
ZVVzZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJl
bnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7CiAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwg
anNWYWx1ZVJlZ3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3Mg
anNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikK
IHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2Rl
LT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y2FuRXhpdCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJT
cGVjdWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOwogI2VuZGlmCkBAIC0zMzAsNiArMzMw
LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKICAgICBtX2Nv
bXBpbGVPa2F5ID0gZmFsc2U7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhK
U1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3Nl
ZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCit7CisgICAgQVNTRVJU
KG5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCkpOworICAgIG1fc3RhdGUu
Zm9yTm9kZShlZGdlKS5maWx0ZXIodHlwZXNQYXNzZWRUaHJvdWdoKTsKKyAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIHNvdXJjZSwgZWRnZSwganVtcFRvRmFpbCk7Cit9CisKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2Ug
ZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQorewor
ICAgIHR5cGVDaGVjayhzb3VyY2UsIGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFp
bCk7CisgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjp0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVk
Z2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cisg
ICAgdHlwZUNoZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWls
KTsKKyAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgY29u
dmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFk
ZFNsb3dQYXRoR2VuZXJhdG9yKFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRo
R2VuZXJhdG9yKQogewogICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzLmFwcGVuZChzbG93UGF0aEdl
bmVyYXRvci5sZWFrUHRyKCkpOwpAQCAtMTUwOSwyMCArMTUyOSwyMCBAQCBib29sIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuCiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRl
cnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAgIEFT
U0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKQorICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNl
KSkKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNo
Tm9kZSwgY29uZGl0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAg
ICAgICAgZWxzZSBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpCiAgICAgICAg
ICAgICBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgZG91Ymxl
Q29uZGl0aW9uKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsK
LSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkg
fHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ1VzZSkpIHsKICAgICAgICAgICAgICAg
ICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlv
biwgb3BlcmF0aW9uKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0
KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKQorICAgICAgICAg
ICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAgICAg
IGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGUpOwotICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYm
IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlICYmIG5v
ZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQogICAgICAgICAgICAg
ICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgYnJhbmNoTm9kZSk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUt
PmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkKKyAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG5vZGUtPmNo
aWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpCiAgICAgICAgICAgICAgICAgY29tcGlsZVBl
ZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQyKCksIG5vZGUt
PmNoaWxkMSgpLCBicmFuY2hOb2RlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0
aW9uLCBvcGVyYXRpb24pOwpAQCAtMTY0NSw2ICsxNjY1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBt
X2luZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAg
ICBtX2N1cnJlbnROb2RlID0gYmxvY2tbbV9pbmRleEluQmxvY2tdOworI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICAgICAgbV9jYW5FeGl0ID0gbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpOworI2Vu
ZGlmCisgICAgICAgIG1fc3RhdGUuc3RhcnRFeGVjdXRpbmcobV9jdXJyZW50Tm9kZSk7CiAgICAg
ICAgIG1faml0LnNldEZvck5vZGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1fY29kZU9yaWdp
bkZvck9TUiA9IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgIGlmICghbV9jdXJy
ZW50Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewpAQCAtMjEwNCw3ICsyMTI4LDggQEAgR2VuZXJh
dGVkT3BlcmFuZFR5cGUgU3BlY3VsYXRpdmVKSVQ6OmNoZQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVUb0ludDMyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKQEAgLTIxMTIsMTI2ICsyMTM3LDYwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkgewotICAgICAg
ICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgICAgIAotICAgICAgICBt
X2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgbV9qaXQuYW5kMzIo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgCi0g
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEludGVn
ZXI6IHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAg
ICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG9wMS5mb3JtYXQoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kRG91YmxlOiB7Ci0gICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBEb3VibGVVc2UpKTsgLy8gU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCB3aWxsIGFzc2VydCB0aGF0IHRoaXMgaXMgYSBkb3VibGUgdXNlLiBX
ZSBmb3JjZSBpdCB0byB0aGluayB0aGF0IGl0IHdhcyBhIGRvdWJsZSB1c2UsIHNpbmNlIHdlIGFy
ZSBpbmZlcnJpbmcgdGhhdCB3ZSBvdWdodCB0byBlbWl0IGEgZG91YmxlIHVzZSBxdWl0ZSBsYXRl
LgotICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOwotICAgICAgICBHUFJSZWcgZ3ByID0g
cmVzdWx0LmdwcigpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUcnVuY2F0ZWRUb0lu
dGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENv
bXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKKyAgICBjYXNlIE51bWJlclVzZTogewor
ICAgICAgICBzd2l0Y2ggKGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSkgeworICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOiB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAg
ICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgb3AxLmZvcm1hdCgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmREb3Vi
bGU6IHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBG
UFJSZWcgZnByID0gb3AxLmZwcigpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdl
ciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGls
ZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgCi0gICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMs
IHRvSW50MzIsIGdwciwgZnByKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZw
cikpOwogCi0gICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBub2RlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRKU1ZhbHVlOiB7Ci0gICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICBHUFJSZWcg
Z3ByID0gb3AxLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKLSAgICAgICAgRlBSUmVnIGZw
ciA9IHRlbXBGcHIuZnByKCk7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2Vy
ID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3QgY29udmVydGVkOwotCi0gICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiBTcGVjQ2VsbCkKLSAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEl0J3Mg
bm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8g
MC4KLSAgICAgICAgICAgICAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBn
cHIsIFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHcHIpOwotICAgICAgICAgICAgICAg
IGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSlNWYWx1ZTogeworICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKIAotICAgICAg
ICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEg
SlNWYWx1ZQotICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsKLSAgICAgICAgdW5i
b3hEb3VibGUocmVzdWx0R3ByLCBmcHIpOwotCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdwcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3By
LCBmcHIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7Ci0KLSAg
ICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzSW50ZWdl
ci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGdwciwgcmVz
dWx0R3ByKTsKLQotICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwotI2Vsc2UKLSAgICAg
ICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gY2hpbGROb2RlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl07Ci0KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLQotICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7
Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29udmVydGVkOwotCi0gICAgICAgIGlmIChpbmZv
LnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcikKLSAgICAgICAgICAgIG1f
aml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIGdw
ciA9IG9wMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3By
KCk7CiAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKICAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CiAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdw
ciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7CiAKICAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQot
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwotICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIg
PSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3Bl
Y0NlbGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBncHIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0
dXJucyBpbnRvIDAuCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQm9v
bGVhbiA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R3ByKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaXNCb29sZWFuLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBncHIsIFRydXN0ZWRJbW0zMihW
YWx1ZVRydWUpLCByZXN1bHRHcHIpOwogICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIs
IHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CisgICAgICAgICAgICAvLyBGaXJzdCwg
aWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQorICAg
ICAgICAgICAgbV9qaXQubW92ZShncHIsIHJlc3VsdEdwcik7CisgICAgICAgICAgICB1bmJveERv
dWJsZShyZXN1bHRHcHIsIGZwcik7CiAKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdwcik7CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3Vs
dEdwciwgZnByKTsKQEAgLTIyNDAsMTcgKzIxOTksOTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwogCiAgICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICAgICAgbV9qaXQu
emVyb0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHRHcHIpOwogCiAgICAgICAgICAgICBjb252ZXJ0
ZWQubGluaygmbV9qaXQpOwotICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgTm9kZSogY2hp
bGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IGNoaWxkTm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
ICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKKworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKworICAgICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQ
UigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgCisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29udmVydGVkOworCisgICAg
ICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIp
CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdH
UFIoKTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKKyAgICAgICAgICAgICAgICBG
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
dGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKworICAgICAgICAgICAg
ICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRh
Z0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBp
c051bWJlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgU3BlY0NlbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2Rl
LT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBp
bnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8gMC4KKyAgICAgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGlzQm9vbGVhbiA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVy
OjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdw
cik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaXNCb29s
ZWFuLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5
bG9hZEdQUiwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIs
IHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CisKKyAgICAgICAgICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOworICAgICAgICAgICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKKworICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIp
OworCisgICAgICAgICAgICAgICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IH0KICNlbmRpZgotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdwciwgbm9kZSk7CisgICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdwciwgbm9kZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY2FzZSBCb29sZWFuVXNlOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgCisgICAg
ICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5h
bmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICAKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIC8vIERvIGl0
IHRoZSBzYWZlIHdheS4KKyAgICAgICAgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVu
a25vd246CisgICAgICAgIAorICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQogfQog
CkBAIC0yNTM4LDQ5ICsyNTc4LDY0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckkKICAgICAgICAgbV9qaXQubW92ZShJbW0zMih0b0ludDMyKGQpKSwgc2NyYXRjaFJl
Zyk7CiAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwogICAgICAgICB2YWx1ZUdQUiA9IHNj
cmF0Y2hSZWc7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZVVzZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFs
dWVVc2UpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgR1BS
UmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICBtX2ppdC5tb3ZlKHZhbHVl
T3AuZ3ByKCksIHNjcmF0Y2hSZWcpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3Vu
ZGluZykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwotICAgICAgICAg
ICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7Ci0gICAgICAg
IH0KLSAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7Ci0gICAgICAgIHZhbHVlR1BSID0gc2Ny
YXRjaFJlZzsKLSAgICB9IGVsc2UgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAg
ICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICBGUFJUZW1wb3JhcnkgZmxvYXRTY3JhdGNoKHRoaXMpOwotICAg
ICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJl
c3VsdC5ncHIoKTsKLSAgICAgICAgY29tcGlsZUNsYW1wRG91YmxlVG9CeXRlKG1faml0LCBncHIs
IGZwciwgZmxvYXRTY3JhdGNoLmZwcigpKTsKLSAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsK
LSAgICAgICAgdmFsdWVHUFIgPSBncHI7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7Ci0g
ICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vdE5hTiA9IG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
RXF1YWwsIGZwciwgZnByKTsKLSAgICAgICAgbV9qaXQueG9yUHRyKGdwciwgZ3ByKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZml4ZWQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIG5v
dE5hTi5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVk
OwotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQotICAgICAgICAg
ICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBN
YWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9VaW50MzIoZnBy
LCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKLSAgICAgICAg
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChmYWlsZWQsIHRoaXMs
IHRvSW50MzIsIGdwciwgZnByKSk7Ci0KLSAgICAgICAgZml4ZWQubGluaygmbV9qaXQpOwotICAg
ICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwotICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAg
ICAgc3dpdGNoICh2YWx1ZVVzZS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTog
eworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1
ZVVzZSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICBpZiAocm91bmRp
bmcgPT0gQ2xhbXBSb3VuZGluZykgeworICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6
ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBjb21waWxlQ2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0
LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlLmFkb3B0KHNj
cmF0Y2gpOworICAgICAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE51bWJlclVzZTog
eworICAgICAgICAgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFy
eSBmbG9hdFNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVl
T3AuZnByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUobV9qaXQsIGdwciwgZnByLCBm
bG9hdFNjcmF0Y2guZnByKCkpOworICAgICAgICAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHI7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1
ZVVzZSk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBH
UFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vdE5hTiA9IG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
RXF1YWwsIGZwciwgZnByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC54b3JQdHIoZ3ByLCBncHIp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZpeGVkID0gbV9qaXQuanVt
cCgpOworICAgICAgICAgICAgICAgIG5vdE5hTi5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVkOworICAgICAg
ICAgICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgICAg
ICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIs
IGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1
bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1
bmNhdGVGYWlsZWQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChmYWlsZWQsIHRoaXMsIHRvSW50MzIsIGdwciwgZnBy
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZml4ZWQubGluaygmbV9qaXQp
OworICAgICAgICAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICAgICAg
dmFsdWVHUFIgPSBncHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICB9CisgICAgCiAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZUdQUiwgdmFsdWVHUFIgIT0gcHJvcGVy
dHkpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBiYXNlKTsKICAgICBBU1NFUlQodmFsdWVHUFIg
IT0gc3RvcmFnZVJlZyk7CkBAIC0yNzIyLDggKzI3NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSW5zdGFuY2VPZkZvCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0
YW5jZU9mKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCghIShub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpICYgflNwZWNDZWxsKSAmJiAhIShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0gICAgICAgIHx8IG5vZGUtPmNoaWxkMSgpLT5hZGp1c3Rl
ZFJlZkNvdW50KCkgPT0gMSkgeworICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSkgewogICAgICAgICAvLyBJdCBtaWdodCBub3QgYmUgYSBjZWxsLiBTcGVjdWxh
dGUgbGVzcyBhZ2dyZXNzaXZlbHkuCiAgICAgICAgIC8vIE9yOiBpdCBtaWdodCBvbmx5IGJlIHVz
ZWQgb25jZSAoaS5lLiBieSB1cyksIHNvIHdlIGdldCB6ZXJvIGJlbmVmaXQKICAgICAgICAgLy8g
ZnJvbSBzcGVjdWxhdGluZyBhbnkgbW9yZSBhZ2dyZXNzaXZlbHkgdGhhbiB3ZSBhYnNvbHV0ZWx5
IG5lZWQgdG8uCkBAIC0yOTYxLDkgKzMwMTUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVNvZnRNb2R1bG8oTgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUq
IG5vZGUpCiB7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkuYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2Fz
ZSBJbnQzMlVzZTogewogICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29u
c3RhbnRBc0ludDMyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90
IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKQEAgLTI5NzksNyAr
MzAzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAg
ICAgICAgICAgICAKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1i
ZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGlu
dDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2Rl
RmxhZ3MoKSkpIHsKQEAgLTMwMjEsOCArMzA3Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgaW50ZWdlclJlc3VsdChncHJSZXN1bHQsIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgICAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAKKyAgICBjYXNlIE51bWJlclVzZTogewogICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CkBAIC0zMDM0LDIy
ICszMDg5LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAg
ICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0KLSAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCkgeworICAgICAgICAKKyAg
ICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
bm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7CiAgICAgICAgIGNvbXBpbGVWYWx1ZUFkZChub2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhp
cyB5ZXQuIDotKAotICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCAwKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kZSogbm9kZSkKIHsKLSAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAg
c3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAg
ICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0lu
dDMyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKQEAgLTMwNjksNyArMzEyOCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25z
dGFudEFzSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3Qg
aW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgICAg
ICAKQEAgLTMwOTcsMjAgKzMxNTYsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
aXRoU3ViKE5vZAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIEZQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgRlBSUmVnIHJlZzEgPSBvcDEu
ZnByKCk7Ci0gICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgbV9qaXQuc3ViRG91Ymxl
KHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZw
cigpOworICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgbV9qaXQuc3Vi
RG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKLSAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9k
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZShOb2RlKiBub2Rl
KQogewotICAgIGlmIChtX2ppdC5ncmFwaCgpLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNh
c2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApA
QCAtMzEyOCwxNyArMzE5NiwyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhO
ZWdhdGUoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotCi0gICAgbV9qaXQubmVnYXRlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0
LmZwcigpKTsKLQotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgIGNh
c2UgTnVtYmVyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgCisgICAgICAgIG1faml0Lm5lZ2F0ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIo
KSk7CisgICAgICAgIAorICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0K
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgaWYgKG1faml0LmdyYXBoKCkubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewor
ICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMzE2OSwxNyAr
MzI0NiwyNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kCiAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLQotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7Ci0gICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7Ci0KLSAgICBGUFJS
ZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKICAgICAg
ICAgCi0gICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CisgICAg
Y2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxLCBvcDIpOworICAgICAgICAKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Cisg
ICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
bXVsRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAgICAgICAgIAotICAgIGRvdWJs
ZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0
LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIH0KIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCkBAIC0zMjg5LDI1
ICszMzc0LDMzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnRlZ2VyQXJpdGgKIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZGUqIG5vZGUpCiB7Ci0gICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAmJiBub2RlLT5jYW5T
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkg
eworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgY29tcGlsZVNvZnRNb2R1bG8obm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgIAotICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7Ci0gICAgRlBSUmVnIG9w
MkZQUiA9IG9wMi5mcHIoKTsKKyAgICAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKKyAg
ICAgICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5mcHIoKTsKICAgICAgICAgCi0gICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgCi0gICAgRlBSUmVz
dWx0IHJlc3VsdCh0aGlzKTsKLQotICAgIGNhbGxPcGVyYXRpb24oZm1vZEFzREZHT3BlcmF0aW9u
LCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKKyAgICAgICAgRlBSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24oZm1vZEFzREZHT3BlcmF0
aW9uLCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKKyAgICAgICAgCisgICAgICAgIGRv
dWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQog
ICAgICAgICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUgaXMgZnVzZWQg
d2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgpAQCAtMzMxNiwzMyArMzQwOSwzMyBAQCBib29sIFNw
ZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsCiAgICAgaWYgKGNvbXBpbGVQZWVwSG9s
ZUJyYW5jaChub2RlLCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0aW9uKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICBp
ZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewogICAgICAgICBjb21waWxlSW50
ZWdlckNvbXBhcmUobm9kZSwgY29uZGl0aW9uKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworCisgICAgaWYgKG5vZGUtPmlz
QmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7CiAgICAgICAgIGNvbXBpbGVEb3VibGVDb21wYXJl
KG5vZGUsIGRvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgCiAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtp
bmQoU3RyaW5nVXNlKSkgewogICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNv
bXBhcmUobm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkp
IHsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNl
KSkgewogICAgICAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBPYmplY3RVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9i
amVjdE9yT3RoZXJVc2UpIHsKICAgICAgICAgICAgIGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3Ro
ZXJFcXVhbGl0eShub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2RlLT5jaGlsZDIoKS0+
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9
PSBPYmplY3RVc2UpIHsKICAgICAgICAgICAgIGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJF
cXVhbGl0eShub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zNDMwLDcgKzM1MjMsOCBAQCBib29sIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDCiAKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVTdHJpY3RFcShOb2RlKiBub2RlKQogewotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewor
ICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJy
YW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7CiAg
ICAgICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Js
b2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKQEAgLTM0NDQsOCArMzUzOCw4IEBAIGJvb2wg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAgICAgY29tcGlsZUludGVn
ZXJDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9Ci0gICAgCi0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAg
CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJs
b2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5C
bG9jayAhPSBVSU5UX01BWCkgewogICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0
LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CkBAIC0z
NDU5LDEwICszNTUzLDEyIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShO
b2QKICAgICAgICAgY29tcGlsZURvdWJsZUNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUVxdWFsKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IG5vZGUtPmNoaWxkMigp
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdVc2U6
IHsKICAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7Ci0gICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIo
KS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
T2JqZWN0VXNlOiB7CiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVj
dFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlO
VF9NQVgpIHsKICAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1f
YmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOwpAQCAtMzQ3Niw4ICszNTcy
LDE1IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAgICAg
Y29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIAotICAgIHJldHVybiBub25TcGVjdWxhdGl2ZVN0cmljdEVxKG5vZGUpOworICAgICAg
ICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZl
U3RyaWN0RXEobm9kZSk7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZShOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTMgKzEy
MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgR1BSUmVnIGZpbGxJ
bnRlZ2VyKE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOworICAgIEdQUlJlZyBmaWxs
SW50ZWdlcihFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKKyAgICBHUFJSZWcgZmlsbEpTVmFs
dWUoRWRnZSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGJvb2wgZmlsbEpTVmFsdWUo
Tm9kZSosIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYpOworICAgIGJvb2wgZmlsbEpTVmFsdWUo
RWRnZSwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7CiAjZW5kaWYKLSAgICBHUFJSZWcgZmls
bFN0b3JhZ2UoTm9kZSopOworICAgIEdQUlJlZyBmaWxsU3RvcmFnZShFZGdlKTsKIAogICAgIC8v
IGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhHUFJS
ZWcgcmVnKQpAQCAtMjk1LDExICsyOTUsMTEgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVkIGJ5
IHRoZSBzcGVjdWxhdGl2ZSBvcGVyYW5kIHR5cGVzLCBiZWxvdywgdG8gZmlsbCBvcGVyYW5kIHRv
CiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGltcGxpY2l0bHkgZ2VuZXJhdGluZyBzcGVjdWxh
dGlvbiBjaGVja3MgYXMgbmVlZGVkLgotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KE5vZGUq
LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBH
UFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKik7Ci0gICAgRlBSUmVnIGZpbGxTcGVj
dWxhdGVEb3VibGUoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmls
bFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBH
UFJSZWcgZmlsbFNwZWN1bGF0ZUludChFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChF
ZGdlKTsKKyAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlLCBTcGVjdWxhdGlvbkRp
cmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24pOwogICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJhdGVk
VHlwZUZvclRvSW50MzIoTm9kZSopOwogCiAgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRvcihQ
YXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPik7CkBAIC01NDAsMTIgKzU0MCw2IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2pp
dC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQogICAgIGludDMyX3QgdmFsdWVP
ZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9m
SW50MzJDb25zdGFudChub2RlKTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
Tm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
bm9kZSk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIoTm9kZSog
bm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCi0gICAgICAg
ICAgICByZXR1cm4gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBK
U0M6OnRvSW50MzIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKLSAgICB9CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlKiBu
b2RlKSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlKTsgfQogI2Vu
ZGlmCkBAIC0yMTg4LDYgKzIxODIsMTIgQEAgcHVibGljOgogICAgIEp1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQqIGZvcndhcmRTcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQgPSBVbmNvdW50
YWJsZVdhdGNocG9pbnQpOwogICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIHNwZWN1bGF0
aW9uV2F0Y2hwb2ludChFeGl0S2luZCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwogICAgIAorICAg
IC8vIEhlbHBlcnMgZm9yIHBlcmZvcm1pbmcgdHlwZSBjaGVja3Mgb24gYW4gZWRnZSBzdG9yZWQg
aW4gdGhlIGdpdmVuIHJlZ2lzdGVycy4KKyAgICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRn
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKSB7IHJldHVybiBtX3N0YXRlLmZv
ck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVzUGFzc2VkVGhyb3VnaDsgfQorICAgIHZvaWQgdHlw
ZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5
cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7CisgICAg
dm9pZCBmb3J3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYpOworICAgIHZvaWQgdHlwZUNoZWNrKEpTVmFs
dWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgU3BlY3VsYXRpb25EaXJlY3Rp
b24pOworICAgIAogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVz
Y3JpcHRvcihBcnJheU1vZGUpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1bXBTbG93
Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBBcnJh
eU1vZGUsIEluZGV4aW5nVHlwZSwgYm9vbCBpbnZlcnQpOwpAQCAtMjI0Nyw2ICsyMjQ3LDkgQEAg
cHVibGljOgogICAgIC8vIFRoZSBjdXJyZW50IG5vZGUgYmVpbmcgZ2VuZXJhdGVkLgogICAgIEJs
b2NrSW5kZXggbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJlbnROb2RlOworI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICBib29sIG1fY2FuRXhpdDsKKyNlbmRpZgogICAgIHVuc2lnbmVkIG1faW5k
ZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5kIHBoeXNpY2FsIHJlZ2lzdGVyIG1hcHMuCiAg
ICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9nZW5lcmF0aW9uSW5mbzsKQEAgLTIzMDUs
MTcgKzIzMDgsMTcgQEAgcHVibGljOgogCiBjbGFzcyBJbnRlZ2VyT3BlcmFuZCB7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgSW50ZWdlck9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1
c2UpCisgICAgZXhwbGljaXQgSW50ZWdlck9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRn
ZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3Bl
Y3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9k
ZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKElu
dmFsaWRHUFJSZWcpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3Jt
YXROb25lKQogI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBB
U1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0Zp
bGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25JbnQzMlVzZSk7CisgICAgICAgIGlmIChq
aXQtPmlzRmlsbGVkKGVkZ2Uubm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KIApA
QCAtMjMyNSw5ICsyMzI4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dw
ck9ySW52YWxpZCk7CiAgICAgfQogCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQorICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2Rl
KCk7CiAgICAgfQogCiAgICAgRGF0YUZvcm1hdCBmb3JtYXQoKQpAQCAtMjM0MCwyNyArMjM0OCwy
NyBAQCBwdWJsaWM6CiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9ncHJP
ckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0g
bV9qaXQtPmZpbGxJbnRlZ2VyKG5vZGUoKSwgbV9mb3JtYXQpOworICAgICAgICAgICAgbV9ncHJP
ckludmFsaWQgPSBtX2ppdC0+ZmlsbEludGVnZXIobV9lZGdlLCBtX2Zvcm1hdCk7CiAgICAgICAg
IHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAg
IHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUo
KSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBO
b2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlk
OwogICAgIERhdGFGb3JtYXQgbV9mb3JtYXQ7CiB9OwogCiBjbGFzcyBKU1ZhbHVlT3BlcmFuZCB7
CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNWYWx1ZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGpp
dCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQgSlNWYWx1ZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQq
IGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNP
cGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9k
ZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCkBAIC0yMzY4LDE0ICsyMzc2LDE0IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0g
RG91YmxlVXNlKTsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIGlmIChqaXQtPmlz
RmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgIG1fcmVnaXN0ZXIucGFpci50YWdHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAg
ICAgICBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5v
ZGUoKSkpCiAgICAgICAgICAgICBmaWxsKCk7CiAjZW5kaWYKICAgICB9CkBAIC0yMzk2LDE3ICsy
NDA0LDIyIEBAIHB1YmxpYzoKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQorICAgIAorICAgIEVk
Z2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KIAog
ICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAg
ICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJ
bnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpT
VmFsdWUobm9kZSgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxK
U1ZhbHVlKG1fZWRnZSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAg
ICAgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKQpAQCAtMjQxOSw3ICsyNDMyLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZmlsbCgpCiAgICAgewogICAgICAgICBpZiAobV9yZWdpc3Rlci5wYWlyLnRh
Z0dQUiA9PSBJbnZhbGlkR1BSUmVnICYmIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSID09IElu
dmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2lzRG91YmxlID0gIW1faml0LT5maWxsSlNWYWx1
ZShub2RlKCksIG1fcmVnaXN0ZXIucGFpci50YWdHUFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2Fk
R1BSLCBtX3JlZ2lzdGVyLmZwcik7CisgICAgICAgICAgICBtX2lzRG91YmxlID0gIW1faml0LT5m
aWxsSlNWYWx1ZShtX2VkZ2UsIG1fcmVnaXN0ZXIucGFpci50YWdHUFIsIG1fcmVnaXN0ZXIucGFp
ci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7CiAgICAgfQogCiAgICAgR1BSUmVnIHRhZ0dQ
UigpCkBAIC0yNDUxLDEyICsyNDY0LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXNlKCkKICAg
ICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2Rl
KCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAg
Tm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
R1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTI0NzMs
MTQgKzI0ODYsMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2Ug
dXNlKQorICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgZWRnZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2Rl
KCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52
YWxpZEdQUlJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VS
VCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVk
KG1fbm9kZSkpCisgICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsK
KyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwog
ICAgIH0KICAgICAKQEAgLTI0OTAsMjYgKzI1MDMsMzEgQEAgcHVibGljOgogICAgICAgICBtX2pp
dC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAgICAgCisgICAgRWRnZSBlZGdlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQorICAgIAogICAgIE5v
ZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAg
cmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogICAgIAogICAgIEdQUlJlZyBncHIoKQogICAg
IHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAg
ICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3RvcmFnZShub2RlKCkpOworICAgICAg
ICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2UoZWRnZSgpKTsKICAgICAg
ICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAg
ICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9k
ZSgpKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsK
LSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJ
bnZhbGlkOwogfTsKIApAQCAtMjY0MSw5ICsyNjU5LDkgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFu
ZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAg
ICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAg
LCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQog
I2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Zvcm1hdChEYXRhRm9ybWF0Tm9uZSkKQEAgLTI2
NTEsOCArMjY2OSw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24p
CiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtp
bmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQor
ICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2Uu
dXNlS2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50MzJVc2Up
KTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigp
OwogICAgIH0KIApAQCAtMjY2MSwxMCArMjY3OSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9j
ayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2Uo
KS5ub2RlKCk7CiAgICAgfQogCiAgICAgRGF0YUZvcm1hdCBmb3JtYXQoKQpAQCAtMjY3NywxOCAr
MjcwMCwxOCBAQCBwdWJsaWM6CiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAo
bV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZh
bGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnQobm9kZSgpLCBtX2Zvcm1hdCwgbV9kaXJlY3Rp
b24pOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUlu
dChlZGdlKCksIG1fZm9ybWF0LCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2dwck9y
SW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9q
aXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogCiBw
cml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7Cisg
ICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAgIERhdGFGb3Jt
YXQgbV9mb3JtYXQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CkBAIC0y
Njk2LDE0ICsyNzE5LDE0IEBAIHByaXZhdGU6CiAKIGNsYXNzIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIE9wZXJh
bmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAg
ICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAg
ICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2lu
ZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisg
ICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51
c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25JbnQzMlVzZSkp
OworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7
CiAgICAgfQogCkBAIC0yNzEyLDQxICsyNzM1LDQ2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2Nr
KG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgp
Lm5vZGUoKTsKICAgICB9CiAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmICht
X2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFs
aWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludFN0cmljdChub2RlKCkpOworICAgICAgICAgICAg
bV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludFN0cmljdChlZGdlKCkpOwog
ICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNl
KCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVz
ZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7
Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9y
SW52YWxpZDsKIH07CiAKIGNsYXNzIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgewogcHVibGljOgot
ICAgIGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwg
RWRnZSB1c2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3Vs
YXRpb24pCisgICAgZXhwbGljaXQgU3BlY3VsYXRlRG91YmxlT3BlcmFuZChTcGVjdWxhdGl2ZUpJ
VCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3
YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09w
ZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2Rl
KHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9mcHJPcklu
dmFsaWQoSW52YWxpZEZQUlJlZykKICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQo
KSA9PSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAg
ICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNl
S2luZCgpID09IE51bWJlclVzZSB8fCB1c2UudXNlS2luZCgpID09IEtub3duTnVtYmVyVXNlIHx8
IGVkZ2UudXNlS2luZCgpID09IFJlYWxOdW1iZXJVc2UpKTsKKyAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGZwcigpOwogICAgIH0KIApAQCAtMjc1NSw0MiAr
Mjc4Myw0NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2Zwck9ySW52YWxpZCAhPSBJbnZh
bGlkRlBSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2Zwck9ySW52YWxpZCk7CiAgICAg
fQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9l
ZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAg
RlBSUmVnIGZwcigpCiAgICAgewogICAgICAgICBpZiAobV9mcHJPckludmFsaWQgPT0gSW52YWxp
ZEZQUlJlZykKLSAgICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxh
dGVEb3VibGUobm9kZSgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2Zwck9ySW52YWxp
ZCA9IG1faml0LT5maWxsU3BlY3VsYXRlRG91YmxlKGVkZ2UoKSwgbV9kaXJlY3Rpb24pOwogICAg
ICAgICByZXR1cm4gbV9mcHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkK
ICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShu
b2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0g
ICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEZQUlJlZyBtX2Zwck9ySW52
YWxpZDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CiAKIGNsYXNz
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVD
ZWxsT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICBleHBsaWNpdCBTcGVj
dWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVj
dWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAg
OiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9l
ZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICAg
ICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQp
OwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBp
ZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IENlbGxVc2UgfHwgZWRnZS51
c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IE9iamVjdFVzZSB8
fCBlZGdlLnVzZUtpbmQoKSA9PSBGdW5jdGlvblVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJp
bmdVc2UpKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAg
IGdwcigpOwogICAgIH0KIApAQCAtMjc5OSw0MiArMjgzMiw0NyBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgbV9qaXQt
PnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5v
ZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJu
IGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAg
ICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3By
T3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxsKG5vZGUoKSwgbV9kaXJlY3Rpb24p
OworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUNlbGwo
ZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25v
ZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAg
IFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2Vk
Z2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IG1fZGlyZWN0aW9uOwogfTsKIAogY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgewogcHVi
bGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklU
KiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2Fy
ZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9u
ID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0
b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAg
LCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBt
X2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVj
dGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2Uu
dXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9k
ZSkpCisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBl
ZGdlLnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAgLTI4NDQsMzAgKzI4
ODIsNDEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsK
ICAgICB9CiAgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2VkZ2U7CisgICAgfQorICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAg
fQogICAgIAogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZh
bGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0
LT5maWxsU3BlY3VsYXRlQm9vbGVhbihub2RlKCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVCb29sZWFuKGVkZ2UoKSwgbV9k
aXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAg
ICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2
ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQ
UlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlv
bjsKIH07CiAKKyNkZWZpbmUgREZHX1RZUEVfQ0hFQ0soc291cmNlLCBlZGdlLCB0eXBlc1Bhc3Nl
ZFRocm91Z2gsIGp1bXBUb0ZhaWwpIGRvIHsgXAorICAgICAgICBpZiAoIW5lZWRzVHlwZUNoZWNr
KChlZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCkpKSAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB0eXBlQ2hlY2soKHNvdXJjZSksIChlZGdlKSwgKHR5cGVzUGFzc2Vk
VGhyb3VnaCksIChqdW1wVG9GYWlsKSk7IFwKKyAgICB9IHdoaWxlICgwKQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1VzZUtpbmRfaAor
I2RlZmluZSBERkdVc2VLaW5kX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2VudW0gVXNlS2luZCB7CisgICAgVW50eXBlZFVzZSwKKyAgICBJbnQzMlVzZSwKKyAgICBLbm93
bkludDMyVXNlLAorICAgIFJlYWxOdW1iZXJVc2UsCisgICAgTnVtYmVyVXNlLAorICAgIEtub3du
TnVtYmVyVXNlLAorICAgIEJvb2xlYW5Vc2UsCisgICAgQ2VsbFVzZSwKKyAgICBLbm93bkNlbGxV
c2UsCisgICAgT2JqZWN0VXNlLAorICAgIE9iamVjdE9yT3RoZXJVc2UsCisgICAgRnVuY3Rpb25V
c2UsCisgICAgU3RyaW5nVXNlLAorICAgIE5vdENlbGxVc2UsCisgICAgT3RoZXJVc2UsCisgICAg
TGFzdFVzZUtpbmQgLy8gTXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGVudW0s
IGFzIGl0IGlzIHVzZWQgdG8gZGVub3RlIHRoZSBudW1iZXIgb2YgZW51bSBlbGVtZW50cy4KK307
CisKK0FMV0FZU19JTkxJTkUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLaW5kIHVz
ZUtpbmQpCit7CisgICAgc3dpdGNoICh1c2VLaW5kKSB7CisgICAgY2FzZSBVbnR5cGVkVXNlOgor
ICAgICAgICByZXR1cm4gU3BlY1RvcDsKKyAgICBjYXNlIEludDMyVXNlOgorICAgIGNhc2UgS25v
d25JbnQzMlVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNJbnQzMjsKKyAgICBjYXNlIEtub3duSW50
MzJVc2U6CisgICAgICAgIHJldHVybiBTcGVjSW50MzI7CisgICAgY2FzZSBSZWFsTnVtYmVyVXNl
OgorICAgICAgICByZXR1cm4gU3BlY1JlYWxOdW1iZXI7CisgICAgY2FzZSBOdW1iZXJVc2U6Cisg
ICAgY2FzZSBLbm93bk51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNOdW1iZXI7CisgICAg
Y2FzZSBCb29sZWFuVXNlOgorICAgICAgICByZXR1cm4gU3BlY0Jvb2xlYW47CisgICAgY2FzZSBD
ZWxsVXNlOgorICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICByZXR1cm4gU3BlY0NlbGw7
CisgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAgIHJldHVybiBTcGVjT2JqZWN0OworICAgIGNh
c2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNPYmplY3QgfCBTcGVjT3Ro
ZXI7CisgICAgY2FzZSBGdW5jdGlvblVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNGdW5jdGlvbjsK
KyAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmc7CisgICAgY2Fz
ZSBOb3RDZWxsVXNlOgorICAgICAgICByZXR1cm4gflNwZWNDZWxsOworICAgIGNhc2UgT3RoZXJV
c2U6CisgICAgICAgIHJldHVybiBTcGVjT3RoZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNwZWNUb3A7CisgICAg
fQorfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNOdW1lcmljYWwoVXNlS2luZCBraW5kKQorewor
ICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW50MzJVc2U6CisgICAgY2FzZSBLbm93bklu
dDMyVXNlOgorICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICBjYXNlIE51bWJlclVzZToKKyAg
ICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6REZHOjpVc2VLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1VzZUtpbmRfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188955</attachid>
            <date>2013-02-18 15:51:12 -0800</date>
            <delta_ts>2013-02-18 21:59:47 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>220367</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNjEgQEAgQWJzdHJh
Y3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9v
bGVhblJlc3VsdDsKIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobV9ibG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAg
CiAgICAgbV9kaWRDbG9iYmVyID0gZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIAogICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKQoreworICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5h
dChpbmRleEluQmxvY2spKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMo
Tm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBmaWx0ZXJFZGdlQnlVc2UpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdl
cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0
KGluZGV4SW5CbG9jaykpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2UoRWRn
ZSBlZGdlKQoreworICAgIEFTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0
ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5
RWRnZXMoTm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBo
LCBub2RlLCB2ZXJpZnlFZGdlKTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpCisgICAgICAgIHZlcmlmeUVkZ2VzKG5vZGUpOworICAgIAogICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdlYWtKU0Nv
bnN0YW50OgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czogewogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBJZGVudGl0eTogewogICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTI2NSwxOSArMjk2LDE2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lKSB7CiAg
ICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBib29sIGNh
bkV4aXQgPSBmYWxzZTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVz
Lm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKICAgICAgICAgaWYgKCF2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKHZhbHVlLmlz
Q2xlYXIoKSkKLSAgICAgICAgICAgICAgICBjYW5FeGl0IHw9IHRydWU7CisgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUu
dmFsdWUoKSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBm
b3JOb2RlKG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yODYsMzUgKzMxNCwxMCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewot
ICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKQotICAg
ICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkp
IHsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgbV92YXJp
YWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGVkVHlwZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJl
ZGljdGlvbigpOwotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRU
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIAogICAg
ICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMyMiw3ICszMjUsNiBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVl
biBzZXQuCiAgICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNjYs
NyArMzY4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHNw
ZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODEsMTYgKzM4MiwxNCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50
MzI6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CkBAIC00MDQsNyArNDAzLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNDIzLDE2ICs0MjEsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcih+U3BlY0NlbGwpOwot
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKQEAgLTQ0Nyw3ICs0MzUsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJl
clVuYXJ5KG5vZGUpOwogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKQEAgLTQ1NSwxMCArNDQyLDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAotICAgIGNhc2UgQ2hlY2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
ICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAgICAgSlNWYWx1
ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTQ2OSwzMCArNDUy
LDI1IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkg
ewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9k
ZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMy
VXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkK
KyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4
cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CisgICAgICAg
IGNhc2UgTnVtYmVyVXNlOgogICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKICAgICAgICAgICAgICAgICAmJiBpc1Jl
YWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQogICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09
IFZhbHVlQWRkKSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAotICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCkBAIC01MDUsMTUgKzQ4MywxOSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dy
YXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5i
aW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51
bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEFyaXRoTmVnYXRlOiB7CkBAIC01MjQsMTUgKzUwNiwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLm5l
Z2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
ZUludDMyVW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVt
YmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBB
cml0aE11bDogewpAQCAtNTQ0LDIxICs1MzAsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJp
bmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLAotICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwg
IW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMy
VXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKQor
ICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBp
ZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KQorICAgICAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZVJlYWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5v
ZGUpOwotICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBBcml0aERpdjoKQEAgLTU5NSwxNSArNTg0LDE4IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUsIHRydWUpOyAvLyBmb3JjaW5nIGNh
bi1leGl0LCB3aGljaCBpcyBhIGJpdCBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUuCisgICAgICAg
IHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBBcml0aEFiczogewpAQCAtNjE0LDE1ICs2MDYsMTggQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzJVbmFyeShub2RlLCB0cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0g
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7
CkBAIC02MzMsNyArNjI4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTY1NSwxOCArNjQ5LDE5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGlj
dGlvbigpKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAg
ICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgTnVtYmVyVXNl
OgorICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0
cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwot
ICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc2NCwxNCArNzU5LDE3IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSog
Y2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNDZWxsU3Bl
Y3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXNT
dHJpbmdTcGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsK
KworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBj
YXNlIFN0cmluZ1VzZToKKyAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlw
ZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJl
YWs7CkBAIC04MjksNTkgKzgyNywxMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVh
bik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFu
dCkgewotICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUg
TWFzcXVlcmFkZXNBc1VuZGVmaW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSogbGVm
dCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5j
aGlsZDIoKS5ub2RlKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKLSAgICAgICAg
U3BlY3VsYXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewotICAgICAgICAgICAgZmlsdGVyID0gU3Bl
Y0ludDMyOwotICAgICAgICAgICAgY2hlY2tlciA9IGlzSW50MzJTcGVjdWxhdGlvbjsKLSAgICAg
ICAgfSBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdCwgcmlnaHQpKSB7
Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwotICAgICAgICAgICAgY2hlY2tlciA9
IGlzTnVtYmVyU3BlY3VsYXRpb247Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBD
b21wYXJlRXEpIHsKLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSB8fCByaWdodC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0gCi0gICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYg
cmlnaHQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihT
cGVjT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09i
amVjdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1
bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCk7
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmplY3QgfCBTcGVj
T3RoZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiByaWdodC0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3Qg
fCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVj
T2JqZWN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAKLSAgICAg
ICAgICAgIGZpbHRlciA9IFNwZWNUb3A7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVj
dWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmlsdGVyID0gU3BlY1Rv
cDsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FueVNwZWN1bGF0aW9uOwotICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIH0K
LSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAgICAgICFjaGVja2VyKGZvck5vZGUo
bGVmdCkubV90eXBlKQotICAgICAgICAgICAgfHwgIWNoZWNrZXIoZm9yTm9kZShyaWdodCkubV90
eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZv
ck5vZGUocmlnaHQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICAvLyBUaGlzIGlzIG92ZXJseSBj
b25zZXJ2YXRpdmUuIEJ1dCB0aGUgb25seSB0aGluZyB0aGlzIHByZXZlbnRzIGlzIHN0b3JlIGVs
aW1pbmF0aW9uLAorICAgICAgICAvLyBhbmQgaG93IGxpa2VseSBpcyBpdCwgcmVhbGx5LCB0aGF0
IHlvdSdsbCBoYXZlIHJlZHVuZGFudCBzdG9yZXMgYWNyb3NzIGEgY29tcGFyaXNvbgorICAgICAg
ICAvLyBvcGVyYXRpb24/IENvbXBhcmlzb24gb3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IGF0IHRo
ZSBlbmQgb2YgYmFzaWMgYmxvY2tzLCBzbworICAgICAgICAvLyB1bmxlc3Mgd2UgaGF2ZSBnbG9i
YWwgc3RvcmUgZWxpbWluYXRpb24gKHN1cGVyIHVubGlrZWx5IGdpdmVuIGhvdyB1bnByb2ZpdGFi
bGUgdGhhdAorICAgICAgICAvLyBvcHRpbWl6YXRpb24gaXMgdG8gYmVnaW4gd2l0aCksIHlvdSBh
cmVuJ3QgZ29pbmcgdG8gYmUgd2FudGluZyB0byBzdG9yZSBlbGltaW5hdGUKKyAgICAgICAgLy8g
YWNyb3NzIGFuIGVxdWFsaXR5IG9wLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTg5OCw0MyArODUwLDE3IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsK
LSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpIHsKLSAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdE5v
ZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewotICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5v
ZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChs
ZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHROb2RlLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAg
ICAgICAgICAgIGZvck5vZGUobGVmdE5vZGUpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAg
ICAgIGZvck5vZGUocmlnaHROb2RlKS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZl
LgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNv
ZGVBdDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTk1NCwxNSArODgw
LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZVRvcCgpOwpAQCAtOTcwLDcgKzg5Myw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewog
ICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTgyLDQ4
ICs5MDQsMzggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhD
bGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNE
b3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTEwNDcsMTA0ICs5NTksMjMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAg
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJl
cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExNTIsMTYgKzk4Myw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IAogICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjUmVh
bE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjTnVtYmVy
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTc0LDExICs5OTUsNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFJlZ0V4cEV4
ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAg
ICAgICAgICAgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkKLSAgICAgICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxs
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCkBAIC0xMjAzLDI0ICsxMDE5LDEzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3
ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291cmNl
IHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhlIGJy
YW5jaC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNo
aWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoU3Bl
Y09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBtX2JyYW5jaERp
cmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBUaHJvdzoKQEAgLTEyMzAsMTcgKzEwMzUsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
VG9QcmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKGNoaWxk
KS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENvbnN0Lmlz
TnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI3NSwzOSArMTA3Nywx
NSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICB0eXBlIHw9IFNwZWNTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgZGVzdGluYXRpb24uc2V0
KHR5cGUpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBTdHJDYXQ6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5OgogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9VTkRF
Q0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGUtPm51bUNoaWxk
cmVuKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBv
cGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51
bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQotICAgICAgICAgICAgICAgIGZvck5vZGUobV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0p
LmZpbHRlcihTcGVjUmVhbE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
PmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTMyMCw3ICsxMDk4LDYgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgog
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0FycmF5KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTM0NywzMiArMTEyNCwyNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNoaWxkLT5w
cmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPdGhlcik7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
T3RoZXJVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVjdE90aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNP
YmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgc291
cmNlLmZpbHRlcihTcGVjT2JqZWN0KTsKKyAgICAgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShT
cGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIENyZWF0
ZVRoaXM6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShu
b2RlKTsKLSAgICAgICAgCi0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0
aW9uKHNvdXJjZS5tX3R5cGUpKTsKLSAgICAgICAgICAgIAotICAgICAgICBzb3VyY2UuZmlsdGVy
KFNwZWNGdW5jdGlvbik7Ci0gICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmluYWxPYmplY3Qp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRmluYWxPYmplY3QpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTM4MSwxOSArMTE1MiwxNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVB
Y3RpdmF0aW9uOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9
IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50
czoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFy
Z3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMTQwNywxMCArMTE3NSw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoK
ICAgICAgICAgaWYgKGlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAgICAgICAgICBtX3Zhcmlh
Ymxlcy5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApA
QCAtMTQzMCw3ICsxMTk3LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xl
bmd0aFNhZmU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBU
aGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMg
b2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBw
cm9wZXJ0eS4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CkBAIC0xNDQ0LDcgKzEyMTAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9l
cyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQogICAgICAgICAv
LyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJlaW5nIGZ1cnRo
ZXIgb3B0aW1pemVkIGJ5IHRoZQogICAgICAgICAvLyBBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKQEAgLTE0NTMsOCArMTIxOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0
dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAgICAgICAvLyBhIGdl
dHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIC8vIEJ1dCB3ZSBk
byBzcGVjdWxhdGUgdGhhdCB0aGUgaW5kZXggaXMgYW4gaW50ZWdlci4KLSAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIC8vIEFuZCB0aGUg
cmVzdWx0IGlzIHVua25vd24uCiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAg
ICAgICBicmVhazsKQEAgLTE0NjIsMjkgKzEyMjUsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdG
dW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVj
dHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgot
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU2V0
Q2FsbGVlOgogICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRTY29wZTog
Ly8gRklYTUU6IFdlIGNvdWxkIGdldCByaWQgb2YgdGhlc2UgaWYgd2Uga25vdyB0aGF0IHRoZSBK
U0Z1bmN0aW9uIGlzIGEgY29uc3RhbnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDYyMDIKICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgY2FzZSBTa2lwVG9wU2Nv
cGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNraXBT
Y29wZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgSlNWYWx1
ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChj
aGlsZCAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxKU1Njb3BlKj4oY2hp
bGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7CkBAIC0xNDk1LDE4ICsxMjUzLDE0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOyAv
LyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTUxOCw4ICsxMjcyLDYgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAg
ICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsCkBAIC0xNTU1
LDcgKzEzMDcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIC8vIG1vcmUgdGhvcm91Z2hseS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNjIwMAogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZWxpbWluYXRlIHRo
ZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVlIHRoYXQgZmxvd3MgaW50byB0
aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2MjAxCi0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTE1NjQsNiArMTMxNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBj
b25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlw
ZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVu
c3VyZWQgdGhpcy4KICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1w
dGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBm
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFz
ZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQu
CkBAIC0xNTcxLDkgKzEzMjMsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vi
c2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
aXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3Vs
YXRpb24odmFsdWUubV90eXBlKSk7CisgICAgICAgIGlmICghdmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVy
ZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTE1OTEsNyArMTM0Miw2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gaW5maW5pdHkgb2Yg
c3RydWN0dXJlcy4KICAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAg
IAotICAgICAgICBBU1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZh
bHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVz
dC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgog
ICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKQEAgLTE2
MDAsNyArMTM1MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1
dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGlm
ICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVh
cigpKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKQEAgLTE2MTAsMTQgKzEzNTksMTEgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5j
bGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFs
cmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxvd2VkIGJ5
IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRoZXJlIGlz
IG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIgaGVyZS4KQEAgLTE2MzAsNyArMTM3
Niw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CkBAIC0xNjc5LDkgKzE0MjQs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIEFT
U0VSVChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKICAg
ICAgICAgICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFn
ZUNvbnZlcnQpOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLT5hcnJheU1v
ZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSB0cnVlOwpAQCAtMTY5NCwzNSArMTQzNiwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAg
ICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6Ci0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkg
ewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9k
ZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlPZmZzZXQ6IHsKLSAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFsc2U7Ci0gICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhp
dCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0xNzY2LDEyICsxNDkzLDEwIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCkBAIC0xNzgxLDM0ICsxNTA2LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgIGNh
c2UgUHV0R2xvYmFsVmFyQ2hlY2s6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToK
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHBy
b3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBw
cm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAgICAgICAgLy8g
RklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2Vz
IGFuIHVuY29uZGl0aW9uYWwgY2VsbAotICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQotICAgICAgICBpZiAoIShub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKSAmJiAhKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBG
bHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgY2FzZSBCcmVha3BvaW50
OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIENhbGw6CkBAIC0xODM2LDcgKzE1NTAsNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAg
ICBjYXNlIE5vcDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgotICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5v
ZGVUeXBlOgpAQCAtMTg0Nyw2ICsxNTYwLDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICByZXR1cm4gbV9pc1ZhbGlkOwogfQogCitib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAgIE5vZGUqIG5vZGUg
PSBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9k
ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsK
KyAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsKK30KKwogaW5s
aW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBjbG9iYmVyQ2FwdHVyZWRW
YXJzKGNvZGVPcmlnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0MzI1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDUy
IEBAIHB1YmxpYzoKICAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBhc3QgdGhp
cyBub2RlLiBOb3RhYmx5LCBpdCB3aWxsIHJldHVybiB0cnVlCiAgICAgLy8gZm9yIGJsb2NrIHRl
cm1pbmFscywgc28gbG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4gb3IgdmFy
aWFudHMKICAgICAvLyBvZiBUaHJvdy4KLSAgICBib29sIGV4ZWN1dGUodW5zaWduZWQpOworICAg
IC8vCisgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gZG9pbmc6
CisgICAgLy8KKyAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7CisgICAg
Ly8gICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7CisgICAgLy8gICAgIHJlc3VsdCA9IHN0
YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKKyAgICAvLyB9IGVsc2UKKyAgICAvLyAgICAgcmVz
dWx0ID0gdHJ1ZTsKKyAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAg
ICAKKyAgICAvLyBJbmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJ
dCByZXNldHMgYW55IHN0YXRlIGluIHRoZSBub2RlLAorICAgIC8vIHRoYXQgaXMgcHJvZ3Jlc3Np
dmVseSBidWlsdCB1cCBieSBleGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVjdHMoKS4gSW4K
KyAgICAvLyBwYXJ0aWN1bGFyLCB0aGlzIHJlc2V0cyBjYW5FeGl0KCksIHNvIGlmIHlvdSB3YW50
IHRvICJrbm93IiBiZXR3ZWVuIGNhbGxzIG9mCisgICAgLy8gc3RhcnRFeGVjdXRpbmcoKSBhbmQg
ZXhlY3V0ZUVkZ2VzKCkvRWZmZWN0cygpIHdoZXRoZXIgdGhlIGxhc3QgcnVuIG9mIHRoZQorICAg
IC8vIGFuYWx5c2lzIGNvbmNsdWRlZCB0aGF0IHRoZSBub2RlIGNhbiBleGl0LCB5b3Ugc2hvdWxk
IHByb2JhYmx5IHNldCB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24gYXNpZGUgcHJpb3IgdG8gY2Fs
bGluZyBzdGFydEV4ZWN1dGluZygpLgorICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcoTm9kZSopOwor
ICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAg
ICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlz
IHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKKyAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUu
IFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZAorICAgIC8v
IGZpbHRlckVkZ2VCeVVzZSgpIChvciBzb21lIGVxdWl2YWxlbnQpIG9uIGVhY2ggZWRnZS4KKyAg
ICB2b2lkIGV4ZWN1dGVFZGdlcyhOb2RlKik7CisgICAgdm9pZCBleGVjdXRlRWRnZXModW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVyRWRn
ZUJ5VXNlKEVkZ2UgZWRnZSkKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBz
d2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAg
ICAgICAgY2FzZSBLbm93bk51bWJlclVzZToKKyAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6Cisg
ICAgICAgICAgICBBU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9y
KGVkZ2UudXNlS2luZCgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKKyAgICAgICAgCisgICAgICAgIGZpbHRlckJ5VHlwZShlZGdlLm5vZGUoKSwgdHlwZUZpbHRl
ckZvcihlZGdlLnVzZUtpbmQoKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0cmFjdGx5IGV4
ZWN1dGUgdGhlIGVmZmVjdHMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgY2hhbmdlcyB0aGUgYWJz
dHJhY3QKKyAgICAvLyBzdGF0ZSBhc3N1bWluZyB0aGF0IGVkZ2VzIGhhdmUgYWxyZWFkeSBiZWVu
IGZpbHRlcmVkLgorICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2Nr
KTsKKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSop
OwogICAgIAogICAgIC8vIERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2JiZXIgdGhlIHdv
cmxkPwogICAgIGJvb2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsg
fQpAQCAtMjU5LDYgKzMwNCwxNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2Rl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBmb3JOb2RlKG5vZGUpOworICAgICAgICBpZiAodmFsdWUubV90eXBlICYgfnR5cGUpCisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICB2YWx1ZS5maWx0ZXIo
dHlwZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmVyaWZ5RWRnZShFZGdlKTsKKyAgICB2b2lk
IHZlcmlmeUVkZ2VzKE5vZGUqKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwog
ICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzI1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQs
NiArMjM0LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmlsdGVy
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90Cisg
ICAgICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2
YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwOTY2MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJl
cygpOwogICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1
cmVzKCk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFkamFj
ZW5jeUxpc3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7CiAg
ICAgICAgIGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBdLm1f
ZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU4LDE4ICs1NSwxMiBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUq
IGNoaWxkMiwgTm9kZSogY2hpbGQzKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBt
X2tpbmQoRml4ZWQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwg
a2luZCA9PSBGaXhlZCk7CiAgICAgICAgIGluaXRpYWxpemUoY2hpbGQxLCBjaGlsZDIsIGNoaWxk
Myk7CiAgICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCB1bnNpZ25lZCBm
aXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgICAgIDogbV9raW5kKFZhcmlhYmxlKQotI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlRf
VU5VU0VEKGtpbmQsIGtpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBzZXRGaXJzdENoaWxkKGZp
cnN0Q2hpbGQpOwpAQCAtNzksMjEgKzcwLDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBFZGdlJiBj
aGlsZCh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsK
LSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRz
W2ldOwogICAgIH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQodW5zaWduZWQgaSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4
ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBz
ZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAgewogICAgICAgICBBU1NFUlQo
aSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgbV93
b3Jkc1tpXSA9IG5vZGVVc2U7CiAgICAgfQogICAgIApAQCAtMTI1LDkgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgICAgICBtX2tpbmQgPSBGaXhlZDsKLSNlbmRpZgogICAgICAgICBpbml0aWFsaXplKCk7CiAg
ICAgfQogICAgIApAQCAtMTQyLDM0ICsxMjcsMjQgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQg
Zmlyc3RDaGlsZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlh
YmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZDsKICAgICB9CiAg
ICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCiAgICAgewotICAgICAg
ICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1swXS5tX2VuY29k
ZWRXb3JkID0gZmlyc3RDaGlsZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtQ2hpbGRy
ZW4oKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAg
ICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CiAgICAgfQogICAgIHZvaWQg
c2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBBU1NF
UlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1sxXS5tX2VuY29kZWRXb3Jk
ID0gbnVtQ2hpbGRyZW47CiAgICAgfQogICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSNlbmRpZgogcHJpdmF0ZToKICAg
ICBFZGdlIG1fd29yZHNbU2l6ZV07Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQgbV9r
aW5kOwotI2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0MzI1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vICAg
YW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgogLy8gLSBZb3Ug
Y2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2Ug
ZnJlZUFsbCgpLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gZm9yY2VkQ2VsbFNpemU6IHNl
dCB0aGlzIHRvIDAgaWYgeW91J3JlIGhhcHB5IHdpdGggdGhlIGRlZmF1bHQgYWxpZ25tZW50LCBv
ciBzZXQgaXQKKy8vIHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91IHdhbnQgdG8gZm9yY2libHkg
YWxpZ24gdGhlIGFsbG9jYXRpb25zIHRvIGEgY2VydGFpbgorLy8gdmFsdWUuIFdoZW4geW91IGRv
IHRoaXMsIEFsbG9jYXRvciB3aWxsIEFTU0VSVCB0aGF0IGZvcmNlZENlbGxBbGlnbm1lbnQgPj0g
c2l6ZW9mKFQpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxp
Z25tZW50PgogY2xhc3MgQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICBBbGxvY2F0b3IoKTsKQEAg
LTYzLDEzICs2NywyNCBAQCBwcml2YXRlOgogICAgIHZvaWQqIGJ1bXBBbGxvY2F0ZSgpOwogICAg
IHZvaWQqIGZyZWVMaXN0QWxsb2NhdGUoKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3coKTsKLQor
ICAgIAorICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoKQorICAgIHsKKyAgICAgICAgaWYgKCFm
b3JjZWRDZWxsQWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihUKTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChmb3JjZWRDZWxsQWxpZ25tZW50ID49IHNpemVvZihUKSk7Cisg
ICAgICAgIHJldHVybiBmb3JjZWRDZWxsQWxpZ25tZW50OworICAgIH0KKyAgICAKICAgICBzdHJ1
Y3QgUmVnaW9uIHsKICAgICAgICAgc3RhdGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBL
QjsgfQotICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1h
eChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQg
bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgp
KSAvIHNpemVvZihUKTsgfQotICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0
PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQotICAgICAg
ICBib29sIGlzSW5UaGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9u
KCk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3RkOjpt
YXgoc2l6ZW9mKFJlZ2lvbiksIGNlbGxTaXplKCkpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBoZWFkZXJTaXpl
KCkpIC8gY2VsbFNpemUoKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IHBheWxvYWRTaXplKCkg
eyByZXR1cm4gbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSAqIGNlbGxTaXplKCk7IH0KKyAgICAg
ICAgY2hhciogcGF5bG9hZEJlZ2luKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSArIGhlYWRlclNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkRW5kKCkgeyByZXR1cm4g
cGF5bG9hZEJlZ2luKCkgKyBwYXlsb2FkU2l6ZSgpOyB9CisgICAgICAgIGJvb2wgaXNJblRoaXNS
ZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpIC0gcGF5bG9hZEJlZ2luKCkpIDwgcGF5bG9hZFNpemUo
KTsgfQogICAgICAgICBzdGF0aWMgUmVnaW9uKiByZWdpb25Gb3IoY29uc3QgVCogcG9pbnRlcikg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KICAgICAgICAgCiAgICAgICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CkBAIC04MiwyNiArOTcsMjYgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBSZWdpb24qIG1fcmVnaW9uSGVhZDsKICAgICB2b2lkKiogbV9mcmVlTGlzdEhlYWQ7
Ci0gICAgVCogbV9idW1wRW5kOwotICAgIHVuc2lnbmVkIG1fYnVtcFJlbWFpbmluZzsKKyAgICBj
aGFyKiBtX2J1bXBFbmQ7CisgICAgc2l6ZV90IG1fYnVtcFJlbWFpbmluZzsKIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+OjpBbGxvY2F0b3IoKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lubGluZSBBbGxv
Y2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OkFsbG9jYXRvcigpCiAgICAgOiBtX3JlZ2lv
bkhlYWQoMCkKICAgICAsIG1fZnJlZUxpc3RIZWFkKDApCiAgICAgLCBtX2J1bXBSZW1haW5pbmco
MCkKIHsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46On5B
bGxvY2F0b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46On5BbGxvY2F0
b3IoKQogewogICAgIHJlc2V0KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNf
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCog
cmVzdWx0ID0gYnVtcEFsbG9jYXRlKCk7CiAgICAgaWYgKExJS0VMWSghIXJlc3VsdCkpCkBAIC0x
MDksOCArMTI0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYQog
ICAgIHJldHVybiBmcmVlTGlzdEFsbG9jYXRlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2Vk
Q2VsbEFsaWdubWVudD46OmZyZWUoVCogb2JqZWN0KQogewogICAgIG9iamVjdC0+flQoKTsKICAg
ICAKQEAgLTExOSw4ICsxMzQsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3Qp
CiAgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
dm9pZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGln
bm1lbnQ+OjpmcmVlQWxsKCkKIHsKICAgICBpZiAoIW1fcmVnaW9uSGVhZCkgewogICAgICAgICBB
U1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CkBAIC0xNDIsOCArMTU3LDggQEAgdm9pZCBBbGxvY2F0
b3I8VD46OmZyZWVBbGwoKQogICAgIHN0YXJ0QnVtcGluZ0luKG1fcmVnaW9uSGVhZCk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQoKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2Nh
dG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpyZXNldCgpCiB7CiAgICAgZnJlZVJlZ2lvbnNT
dGFydGluZ0F0KG1fcmVnaW9uSGVhZCk7CiAgICAgCkBAIC0xNTIsMzggKzE2NywzOCBAQCB2b2lk
IEFsbG9jYXRvcjxUPjo6cmVzZXQoKQogICAgIG1fYnVtcFJlbWFpbmluZyA9IDA7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci11bnNpZ25lZCBBbGxvY2F0b3I8VD46OmluZGV4T2YoY29uc3Qg
VCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6aW5kZXhP
Zihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgdW5zaWduZWQgYmFzZUluZGV4ID0gMDsKICAgICBm
b3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdpb247IHJlZ2lvbiA9IHJlZ2lv
bi0+bV9uZXh0KSB7CiAgICAgICAgIGlmIChyZWdpb24tPmlzSW5UaGlzUmVnaW9uKG9iamVjdCkp
Ci0gICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAoYml0d2lzZV9jYXN0PGNoYXIqPihv
YmplY3QpIC0gcmVnaW9uLT5wYXlsb2FkQmVnaW4oKSkgLyBjZWxsU2l6ZSgpOwogICAgICAgICBi
YXNlSW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwogICAgIH0KICAg
ICBDUkFTSCgpOwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQWxs
b2NhdG9yPFQ+KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBbGxvY2F0
b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD4qIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25t
ZW50Pjo6YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHJldHVybiBSZWdpb246
OnJlZ2lvbkZvcihvYmplY3QpLT5tX2FsbG9jYXRvcjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjpidW1wQWxsb2NhdGUoKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19J
TkxJTkUgdm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpidW1wQWxsb2Nh
dGUoKQogewotICAgIGlmICh1bnNpZ25lZCByZW1haW5pbmcgPSBtX2J1bXBSZW1haW5pbmcpIHsK
LSAgICAgICAgcmVtYWluaW5nLS07CisgICAgaWYgKHNpemVfdCByZW1haW5pbmcgPSBtX2J1bXBS
ZW1haW5pbmcpIHsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplKCk7CiAgICAgICAgIG1f
YnVtcFJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChy
ZW1haW5pbmcgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1haW5pbmcgKyBj
ZWxsU2l6ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci12b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFsbG9jYXRvcjxU
LCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCoq
IHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKQEAg
LTE5Miw4ICsyMDcsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkKiBBbGxv
Y2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBm
b3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1l
bnQ+OjphbGxvY2F0ZVNsb3coKQogewogICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOwogICAg
IEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTIxNiw4ICsyMzEsOCBAQCB2b2lkKiBBbGxv
Y2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQo
dHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KHR5cGVuYW1lIEFsbG9jYXRv
cjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24pCiB7CiAgICAgd2hpbGUg
KHJlZ2lvbikgewogICAgICAgICBSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb24tPm1fbmV4dDsK
QEAgLTIyNiwxMSArMjQxLDExIEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0
aW5nQXQKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxU
Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lk
IEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5h
bWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsK
LSAgICBtX2J1bXBFbmQgPSByZWdpb24tPmRhdGEoKSArIFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQ
ZXJSZWdpb24oKTsKLSAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246Om51bWJlck9mVGhpbmdz
UGVyUmVnaW9uKCk7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5wYXlsb2FkRW5kKCk7CisgICAg
bV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpwYXlsb2FkU2l6ZSgpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjUs
NyArMTQ2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAg
ICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsgLy8gTWF0aC5t
aW4oeCkKICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMSkpOwotICAgICAgICBhZGRUb0dyYXBoKENoZWNrTnVtYmVyLCByZXN1bHQp
OworICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIEVkZ2UocmVzdWx0LCBOdW1iZXJVc2UpKTsK
ICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDMyNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTY5
LDcgKzk2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNzaW5nIGFyZ3Vt
ZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkFyZ3Vt
ZW50cykKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMTAxNCwxOCArMTAx
NCwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVudW0gUHJlZGlj
dGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQcmVkaWN0aW9u
TWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50LCBQ
cmVkaWN0aW9uSGFuZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJlU2Ft
ZVByZWRpY3Rpb24pCisgICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVudCkK
ICAgICB7CiAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAotICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9ybSBy
ZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0Ci0gICAgICAgIC8vIGFncmVlLgot
ICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVByZWRpY3Rp
b24KLSAgICAgICAgICAgICYmIG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSAhPSByZXBsYWNl
bWVudC0+cHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFM
b2dGKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJl
cGxhY2VtZW50LT5pbmRleCgpKTsKICNlbmRpZgpAQCAtMTIzMCw3ICsxMjIzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICAgICAgLy8gVGhpcyBpcyBzdHJh
bmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxsIGNvbnZlcnQgbm9kZXMgdG8gY29u
c3RhbnRzLAogICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGVkIGNv
bnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVwLgotICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSksIEFsbG93UHJlZGljdGlvbk1pc21hdGNoKTsKKyAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MzI1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgzLDEyICs4Myw2IEBAIHN0cnVjdCBOb2RlUG9pbnRlclRyYWl0cyB7CiAgICAgc3RhdGljIHZv
aWQgZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiB9OwogCi1lbnVtIFVzZUtp
bmQgewotICAgIFVudHlwZWRVc2UsCi0gICAgRG91YmxlVXNlLAotICAgIExhc3RVc2VLaW5kIC8v
IE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2Vk
IHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMuCi19OwotCiAvLyBVc2UgUmVm
Q2hpbGRyZW4gaWYgdGhlIGNoaWxkIHJlZiBjb3VudHMgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gYWRq
dXN0ZWQgdXNpbmcKIC8vIG90aGVyIG1lYW5zIGFuZCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBp
cyB0cnVlOgogLy8gLSBUaGUgbm9kZSB5b3UncmUgY3JlYXRpbmcgaXMgTXVzdEdlbmVyYXRlLgpA
QCAtMTA2LDE5ICsxMDAsNiBAQCBlbnVtIFJlZk5vZGVNb2RlIHsKICAgICBEb250UmVmTm9kZQog
fTsKIAotaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaW5kIHVzZUtpbmQp
Ci17Ci0gICAgc3dpdGNoICh1c2VLaW5kKSB7Ci0gICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAg
ICByZXR1cm4gIiI7Ci0gICAgY2FzZSBEb3VibGVVc2U6Ci0gICAgICAgIHJldHVybiAiZCI7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiBpbmxpbmUgYm9vbCBpc0FSTXY3cygpCiB7CiAjaWYg
Q1BVKEFQUExFX0FSTVY3UykKQEAgLTIzNiw2ICsyMTcsOCBAQCBlbnVtIFVuaWZpY2F0aW9uU3Rh
dGUgewogICAgIEdsb2JhbGx5VW5pZmllZAogfTsKIAorZW51bSBPcGVyYW5kU3BlY3VsYXRpb25N
b2RlIHsgQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24gfTsKKwogZW51bSBTcGVjdWxhdGlvbkRpcmVjdGlvbiB7IEZvcndhcmRTcGVjdWxhdGlvbiwg
QmFja3dhcmRTcGVjdWxhdGlvbiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsx
NDksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICAgICAg
Y2FzZSBHZXRCeUlkRmx1c2g6IHsKICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9k
ZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9k
ZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KCFpc0NlbGxTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKQEAgLTE4MSwxOCArMTgy
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZvck5v
ZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVT
ZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBj
aGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3Bl
cnR5U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CkBAIC0yMDcsNyArMjA4LDggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlJ
ZERpcmVjdDogewogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUt
PmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEo
KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwpA
QCAtMjM4LDcgKzI0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhz
dHJ1Y3R1cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRn
ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0YSA9IDA7CkBAIC0yNjQsMzgg
KzI2NiwzOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOworICAgICAgICAg
ICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkLT5yZWYoKTsgLy8gVGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUg
cHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgotICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZD
aGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hp
bGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBF
ZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5m
byh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkRWRnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0
dGVyZmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGNoaWxkKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAo
c3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
IGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
IGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CkBAIC0zOTEsMTMgKzM5MywxMyBAQCBw
cml2YXRlOgogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJl
Zk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAgICAgICAg
ICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29uc3Rh
bnQpOworICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUo
KSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVj
a1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnQpOworICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIEVk
Z2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgaXMg
bmVjZXNzYXJ5IGJlY2F1c2UgdGhlIENGQSBtYXkgcmVhY2ggY29uY2x1c2lvbnMgYWJvdXQgY29u
c3RhbnRzIGJhc2VkIG9uIGl0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDYgQEAgaW5saW5lIGJv
b2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICBpZiAoIWNoYW5nZWQpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIGRmZy5yZXNldEV4aXRTdGF0ZXMo
KTsKLSAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVh
ZGluZyhkZmcpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdF
ZGdlLmNwcAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIG91dC5wcmludCh1c2VLaW5kVG9TdHJpbmcodXNlS2luZCgpKSwgbm9kZSgp
KTsKKyAgICBvdXQucHJpbnQodXNlS2luZCgpLCAiOiIsIG5vZGUoKSk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShy
ZXZpc2lvbiAxNDMyNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBzdGF0aWMg
dWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiAyOyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0
KCkgeyByZXR1cm4gNDsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9k
ZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEJlZm9yZUZpeHBvaW50KTsKKyAg
ICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1cEJsb2Nr
KG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTc2LDUwICs3OSwyNjEgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpCisgICAgICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0Ny
ZWF0ZWRUaGlzQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihu
b2RlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VE
b3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hp
bGQxKCksIE51bWJlclVzZSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3RlZFR5cGUgPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBl
bHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAg
IGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdFJTaGlm
dDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewor
ICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJ
bnRFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogeworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMy
OiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9J
bnQzMjogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlID0gCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
cyk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJy
YXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0g
QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2Up
OwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rp
b24oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYm
IGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNr
U3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1
cmUoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKE5vdENlbGxVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6IHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAgICAgICAgIGlmIChh
dHRlbXB0VG9NYWtlSW50ZWdlckFkZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVk
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAg
ICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7
CisgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aERpdjogewor
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAg
IGlmIChpc1g4NigpIHx8IGlzQVJNdjdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCksIG5vZGUtPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBw
b3J0c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShu
b2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRv
IHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9t
CisgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgorICAgICAgICAgICAg
ICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwg
U3BlY0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVk
Z2UoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlLT5zZXRPcChH
ZXRBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVN
dXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
KTsKLSAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVj
a0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAg
ICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNl
IEFyaXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBF
ZGdlKHN0b3JhZ2UpOworICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAg
ICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+
YXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFyaXRoU3FydDogeworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgTG9naWNhbE5vdDogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBlbHNl
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAg
ICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHlwZU9mOiB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJl
RXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJl
R3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOiB7CisgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBDb21hcHJlRXFDb25zdGFudCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51
bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENvbXBhcmVF
cSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCku
c2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2Rl
LT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKKyAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5z
ZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIC8v
IEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgorICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5n
KSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2Rl
LT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAg
ICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCkBAIC0xMjcsNyArMzQxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rp
b24oKSwKICAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgp
OwogICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQpAQCAt
MTM4LDEzICszNTIsNzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhKG5vZGUtPmZs
YWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5
TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5k
ZWNpZGVkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CisgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCku
c2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgU3RyaW5nQ2hhckF0OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAg
ICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRo
ZXNlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShB
cnJheTo6U3RyaW5nKSk7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CisKKyAgICAgICAgICAgIG5v
ZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZp
bmUoCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAorICAgICAgICAg
ICAgICAgICAgICBjaGlsZDItPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQzLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9k
ZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9uczoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCksIFJlYWxOdW1iZXJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5
OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMygpLnNldFVzZUtpbmQoSW50MzJV
c2UpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZShub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93
bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50
MzJVc2UpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC0xNjMsMTEgKzQ0MSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAg
ICAgICAgICAgICAgIFNwZWNJbnQzMiwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xNzYsNDkgKzQ1OCwyNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRp
b24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNo
aWZ0OgotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7
Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbXBhcmVFcToK
LSAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgot
ICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
RXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo
IU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBm
aXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2Fs
Tm90OiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVj
OgorICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VL
aW5kKENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMCk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJv
b2xlYW5Vc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNh
bE5vdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90
LT5vcCgpID09IExvZ2ljYWxOb3QKQEAgLTI2MSwxNDkgKzUyMSwxOTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBT
ZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5p
c0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAg
ICAgIGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSkpCisgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCisgICAgICAgICAg
ICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5udW1DaGlsZHJlbigpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFu
ZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCisgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBv
cGVyYW5kSW5kZXhdLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSW5kZXhd
LnNldFVzZUtpbmQoUmVhbE51bWJlclVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgxKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKQotICAgICAg
ICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDEpOworICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKKyAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgw
KTsKKyAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogeworICAgICAgICAgICAgaWYgKGlzT3RoZXJT
cGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGlzT2JqZWN0U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpCisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
aXRoTWluOgotICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAgICAgICBjYXNlIEFyaXRoTW9kOiB7
Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAg
ICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChGdW5jdGlvblVzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5T
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSB8fCBpc0FS
TXY3cygpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpbmpl
Y3RJbnQzMlRvRG91YmxlTm9kZSgwKTsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91
YmxlTm9kZSgxKTsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVm
J2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KLSAg
ICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAg
Tm9kZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVj
RG91YmxlLCAqbm9kZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9kZS0+
c2V0T3AoRG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5p
dGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgorICAgICAgICBjYXNlIFB1dFNjb3BlZFZh
cjoKKyAgICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CisgICAgICAgIGNhc2UgU2tpcFNjb3BlOiB7
CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJpdGhBYnM6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgY2FzZSBHZXRCeUlkOiB7CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgaWYgKCFp
c0ludDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgICAgICBpZiAoY29k
ZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxE
YXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKKyAgICAgICAgICAgICAgICBt
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVBy
b2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsK
KyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbiht
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKKyAgICAgICAg
ICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUs
IEFycmF5OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlN
b2RlLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9m
aWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGlm
ICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NF
UlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+
Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAg
ICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShh
cnJheU1vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hl
Y2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAg
ICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3Fy
dDogewotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBHZXRCeUlk
Rmx1c2g6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
Q2VsbCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAg
ICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAg
ICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAg
ICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotCi0gICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2Rl
KCkucmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKLSAg
ICAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAg
ICAgIGNoaWxkMy0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJs
ZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIDMpOworICAgICAgICBjYXNlIENoZWNr
RXhlY3V0YWJsZToKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBG
b3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQ6CisgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50OgorICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgIGNhc2UgUHV0QnlJZDoK
KyAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFu
Y2U6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5
OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgotICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCi0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAg
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgyKTsKKyAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6
U3RyaW5nOgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5n
VXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlwZSgKLSAgICAgICAgICAgICAg
ICAgICAgbGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+aW5kZXhpbmdUeXBlKCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgaSktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5v
ZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewotICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTsp
Ci0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQXJyYXlpZnk6CisgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTog
eworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIo
KS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDogewor
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQorICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlN
b2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CisgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBhcHBlYXJzIGJyb2tlbjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMg
YW4gdW5jb25kaXRpb25hbCBjZWxsCisgICAgICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQorICAgICAgICAgICAgaWYgKCEobm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAg
ICAgICAgIH0KIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAg
LTQ3MSwxMSArNzczLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFNwZWNOb25lLCBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgp
KSwgYXJyYXkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRn
ZSBiYXNlLCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCisgICAgdm9pZCBi
bGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgRWRnZSYgc3RvcmFnZUNo
aWxkKQogICAgIHsKLSAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3Jl
Rml4cG9pbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAogICAgICAgICBOb2RlKiBu
b2RlID0gbV9jdXJyZW50Tm9kZTsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7CkBAIC00OTksNyArNzk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIG1fZ3JhcGguY2hpbGQobm9kZSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uo
c3RvcmFnZSk7CisgICAgICAgICAgICBzdG9yYWdlQ2hpbGQgPSBFZGdlKHN0b3JhZ2UpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IH0KICAgICB9CkBAIC01MDcsNDAgKzgwNiw0NiBA
QCBwcml2YXRlOgogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKICAgICAg
ICAgTm9kZSogbm9kZSA9IGVkZ2Uubm9kZSgpOwotICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBW
YWx1ZVRvSW50MzIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IFZhbHVlVG9JbnQzMikgeworICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5k
KEtub3duSW50MzJVc2UpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBFZGdlIG9sZEVkZ2UgPSBlZGdlOwogICAgICAgICBFZGdlIG5ld0VkZ2UgPSBu
b2RlLT5jaGlsZDEoKTsKICAgICAgICAgCisgICAgICAgIGlmIChuZXdFZGdlLnVzZUtpbmQoKSAh
PSBJbnQzMktpbmQpIHsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93bkludDMyVXNl
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNT
RVJUKG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CisgICAgICAgIAogICAgICAg
ICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsK
ICAgICAgICAgCiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGZpeERvdWJsZUVkZ2UodW5zaWduZWQgY2hpbGRJbmRleCwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICB2b2lkIGZpeERvdWJsZUVkZ2Uo
RWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgTm9k
ZSogc291cmNlID0gbV9jdXJyZW50Tm9kZTsKLSAgICAgICAgRWRnZSYgZWRnZSA9IG1fZ3JhcGgu
Y2hpbGQoc291cmNlLCBjaGlsZEluZGV4KTsKICAgICAgICAgCiAgICAgICAgIGlmIChlZGdlLT5w
cmVkaWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQo
RG91YmxlVXNlKTsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZCh1c2VLaW5kKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW5qZWN0SW50MzJU
b0RvdWJsZU5vZGUoY2hpbGRJbmRleCwgZGlyZWN0aW9uKTsKKyAgICAgICAgaW5qZWN0SW50MzJU
b0RvdWJsZU5vZGUoZWRnZSwgZGlyZWN0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIGluamVjdElu
dDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBpbmplY3RJbnQzMlRv
RG91YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgewog
ICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJs
ZSwKICAgICAgICAgICAgIGRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uID8gSW50MzJU
b0RvdWJsZSA6IEZvcndhcmRJbnQzMlRvRG91YmxlLAotICAgICAgICAgICAgbV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS5u
b2RlKCkpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdl
Lm5vZGUoKSwgRG91YmxlVXNlKSk7CisgICAgICAgIHJlc3VsdC0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChEb3VibGVVc2UpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKApAQCAtNTQ4LDcgKzg1Myw0OCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5jaGlsZChtX2N1
cnJlbnROb2RlLCBjaGlsZEluZGV4KS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwg
cmVzdWx0LT5pbmRleCgpKTsKICNlbmRpZgogCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJy
ZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91YmxlVXNlKTsKKyAgICAgICAg
bV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0LCB1
c2VLaW5kKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihF
ZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSogb2xkTm9kZSA9IGVkZ2Uubm9kZSgpOwor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKG9sZE5vZGUtPmhhc0NvbnN0YW50KCkpOworICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChvbGROb2RlKTsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIHZhbHVlID0ganNOdW1iZXIoSlNDOjp0b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkp
KTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgIGVkZ2Uuc2V0Tm9k
ZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbV9pbmRleEluQmxvY2ss
IERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0ludDMyLCBKU0NvbnN0YW50LAorICAgICAg
ICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRP
ckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7CisgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkTm9kZSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2Rl
KiBub2RlLCBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGlmIChtb2Rl
ICE9IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3Rh
bnQoKSB8fCBub2RlLT5jaGlsZDIoKS0+aGFzQ29uc3RhbnQoKSk7CisgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRU
b0ludDMyKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJ1bmNh
dGVDb25zdGFudFRvSW50MzIobm9kZS0+Y2hpbGQyKCkpOworICAgIH0KKyAgICAKKyAgICBib29s
IGF0dGVtcHRUb01ha2VJbnRlZ2VyQWRkKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBZGRT
cGVjdWxhdGlvbk1vZGUgbW9kZSA9IG1fZ3JhcGguYWRkU3BlY3VsYXRpb25Nb2RlKG5vZGUpOwor
ICAgICAgICBpZiAobW9kZSA9PSBEb250U3BlY3VsYXRlSW50ZWdlcikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3Nh
cnkobm9kZSwgbW9kZSk7CisgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJV
c2UpOworICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDMyNTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQ2LDQ1ICszNDYsMTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQog
ICAgIH0KIH0KIAotLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5vdCBy
ZWN1cnNpdmUuCi0jZGVmaW5lIERPX1RPX0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlm
IChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJz
dENoaWxkKCk7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25v
ZGUtPmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCi0gICAgICAgICAgICAg
ICAgX2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3Zh
ckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNT
RVJUKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBp
ZiAoIV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxk
MygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSB3aGlsZSAoZmFsc2UpCi0KIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9w
KQogewotICAgIERPX1RPX0NISUxEUkVOKG9wLCByZWYpOworICAgIERGR19OT0RFX0RPX1RPX0NI
SUxEUkVOKCp0aGlzLCBvcCwgcmVmKTsKIH0KIAogdm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihO
b2RlKiBvcCkKIHsKLSAgICBET19UT19DSElMRFJFTihvcCwgZGVyZWYpOworICAgIERGR19OT0RF
X0RPX1RPX0NISUxEUkVOKCp0aGlzLCBvcCwgZGVyZWYpOwogfQogCiB2b2lkIEdyYXBoOjpkZXRo
cmVhZCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
NDMyNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFB1dFRvQmFzZU9wZXJhdGlvbkRhdGEgewog
CiBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAgICAgRG9udFNwZWN1bGF0ZUludGVnZXIsCi0g
ICAgU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3csCisgICAgU3BlY3VsYXRl
SW50ZWdlckFuZFRydW5jYXRlQ29uc3RhbnRzLAogICAgIFNwZWN1bGF0ZUludGVnZXIKIH07CiAK
QEAgLTE3NCw5ICsxNzQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQo
KSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAgcGVy
Zm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3Vs
ZEdlbmVyYXRlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0g
ICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGls
ZDIoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZv
ckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5l
cmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGls
ZDIoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZv
ckVkZ2Uobm9kZS0+Y2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgfQogICAgIH0K
ICAgICAKQEAgLTUzMCw5ICs1MzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1ByZWRp
Y3RlZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
bGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJu
IGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCk7
CisgICAgICAgIHJldHVybiBpc051bWVyaWNhbChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpICYm
IGlzTnVtZXJpY2FsKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSk7CiAgICAgfQogICAgIAogICAg
IC8vIE5vdGUgdGhhdCBhICd0cnVlJyByZXR1cm4gZG9lcyBub3QgYWN0dWFsbHkgbWVhbiB0aGF0
IHRoZSBCeVZhbCBhY2Nlc3MgY2xvYmJlcnMgbm90aGluZy4KQEAgLTc4MSw3ICs3NzksNyBAQCBw
cml2YXRlOgogICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91
YmxlSW1tZWRpYXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3Vs
YXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRl
Z2VyKGFkZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0
Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNh
blRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdl
ckFuZFRydW5jYXRlQ29uc3RhbnRzIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAg
IAogICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWws
IE5vZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCkBAIC04MzAsNiArODI4LDM2IEBAIGlu
bGluZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnkKICAgICByZXR1cm4gKmJpbmFy
eVNlYXJjaDxCbG9ja0luZGV4LCB1bnNpZ25lZD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJn
ZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlz
KSk7CiB9CiAKKyNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRo
aW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYg
KF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0
Q2hpbGQoKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9k
ZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAgICAg
ICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxk
SWR4XSkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKChncmFw
aCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgIFwKKyAgICAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NF
UlQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlm
ICghX25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQz
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICB9IHdoaWxlIChmYWxzZSkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDMyNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtOTUsNyArOTUsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNw
ZWNOb25lKQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwotICAgICAg
ICBBU1NFUlQoISEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSA9PSAoY2hpbGRyZW4ua2luZCgp
ID09IEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0
cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCkBA
IC0yOTQsMjIgKzI5MywyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNvbnZlcnRUb1N0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVy
ZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25l
ZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQorICAgIHZvaWQgY29udmVy
dFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9y
YWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdl
dEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsK
LSAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uoc3RvcmFnZSkpOworICAgICAgICBjaGls
ZHJlbi5zZXRDaGlsZDEoc3RvcmFnZSk7CiAgICAgICAgIG1fb3AgPSBHZXRCeU9mZnNldDsKICAg
ICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAotICAgIHZv
aWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwg
Tm9kZSogc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgbV9v
cEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwogICAgICAgICBjaGlsZHJlbi5zZXRDaGls
ZDMoY2hpbGRyZW4uY2hpbGQyKCkpOwogICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDIoY2hpbGRy
ZW4uY2hpbGQxKCkpOwotICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShzdG9yYWdlKSk7
CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShzdG9yYWdlKTsKICAgICAgICAgbV9vcCA9IFB1
dEJ5T2Zmc2V0OwogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9
CkBAIC05OTUsNyArOTk0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9yZWZD
b3VudC0tOwogICAgIH0KICAgICAKLSAgICBFZGdlIGNoaWxkMSgpCisgICAgRWRnZSYgY2hpbGQx
KCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwog
ICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQxKCk7CkBAIC0xMDA5LDEzICsxMDA4LDEzIEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMVVuY2hlY2tlZCgp
OwogICAgIH0KIAotICAgIEVkZ2UgY2hpbGQyKCkKKyAgICBFZGdlJiBjaGlsZDIoKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJl
dHVybiBjaGlsZHJlbi5jaGlsZDIoKTsKICAgICB9CiAKLSAgICBFZGdlIGNoaWxkMygpCisgICAg
RWRnZSYgY2hpbGQzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFz
VmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQzKCk7CkBAIC0xMDMzLDYg
KzEwMzIsMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gY2hpbGRyZW4ubnVtQ2hp
bGRyZW4oKTsKICAgICB9CiAgICAgCisgICAgVXNlS2luZCBiaW5hcnlVc2VLaW5kKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChjaGlsZDEoKS51c2VLaW5kKCkgPT0gY2hpbGQyKCkudXNlS2luZCgp
KTsKKyAgICAgICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtpbmQoKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc0JpbmFyeVVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNoaWxkMSgpLnVzZUtpbmQoKSA9PSB1c2VLaW5kICYmIGNoaWxkMigpLnVzZUtpbmQoKSA9
PSB1c2VLaW5kOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTQzMjU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAotdHlwZWRlZiBBbGxvY2F0b3I8Tm9kZT4gTm9kZUFsbG9jYXRvcjsKKyNpZiBVU0UoSlNWQUxV
RTY0KQordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgMTEyPiBOb2RlQWxsb2NhdG9yOworI2Vsc2UK
K3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDgwPiBOb2RlQWxsb2NhdG9yOworI2VuZGlmCiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw4ICs5Niw2IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhGb3J3YXJkSW50MzJUb0RvdWJs
ZSwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIC8qIFVzZWQgdG8gc3BlY3VsYXRlIHRoYXQgYSBk
b3VibGUgdmFsdWUgaXMgYWN0dWFsbHkgYW4gaW50ZWdlci4gKi9cCiAgICAgbWFjcm8oRG91Ymxl
QXNJbnQzMiwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgLyogVXNlZCB0byByZWNvcmQgcGxhY2Vz
IHdoZXJlIHdlIG11c3QgY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIG51bWJlci4gKi9cCi0gICAgbWFj
cm8oQ2hlY2tOdW1iZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTm9kZXMg
Zm9yIGFyaXRobWV0aWMgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQXJpdGhBZGQsIE5vZGVS
ZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0MzI1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDI4ICszOSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxJbnRlZ2VyKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKK0dQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1
cm5Gb3JtYXQpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUt
PnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFTU0VSVCghKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5t
X3R5cGUgJiB+U3BlY0ludDMyKSk7CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8u
cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICBHUFJSZWcgZ3By
ID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAg
ICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdwcik7
CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNv
bnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSW50
ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0
YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7Ci0gICAgICAgICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZk51bWJlckNvbnN0YW50KG5v
ZGUpKTsKKyAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewor
ICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJD
b25zdGFudChlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkp
OwotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdl
Lm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRl
Z2VyKSB7CkBAIC0xMTcsMjcgKzExOSwyNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJ
bnRlZ2VyKE5vZGUqCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1Zh
bHVlKE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2Ug
ZWRnZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVk
Z2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdp
c3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBHUFJS
ZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkg
ewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICBpZiAo
ZWRnZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChl
ZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVh
bSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSk7CisgICAgICAgICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRn
ZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
TnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1i
ZXJDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFs
dWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoaXNKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICB9CkBAIC04MDIsMTggKzgw
NCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiB9CiAKIHRl
bXBsYXRlPGJvb2wgc3RyaWN0PgotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50SW50ZXJuYWwoTm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnRJbnRlcm5hbChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKICAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOwogI2Vu
ZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5
cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxS
ZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVk
Z2UpOworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bkludDMyVXNlIHx8ICEodmFs
dWUubV90eXBlICYgflNwZWNJbnQzMikpOworICAgIHZhbHVlLmZpbHRlcihTcGVjSW50MzIpOwor
ICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAg
ICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXRO
b25lOiB7Ci0gICAgICAgIGlmICgobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0
YW50KG5vZGUpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewor
ICAgICAgICBpZiAoKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChlZGdl
Lm5vZGUoKSkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CiAg
ICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERh
dGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CkBAIC04MjEs
MTAgKzgyNiwxMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAg
ICAgICAgIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAo
bm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkg
ewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZSkp
OwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25z
dGFudChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwgZ3ByKTsKICAgICAg
ICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0
dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwpA
QCAtODY1LDcgKzg3MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEkKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2Nr
KGdwcik7CiAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2pp
dC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIGRpcmVj
dGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3Jt
YXRKU0ludGVnZXIpOwogICAgICAgICAvLyBJZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJldHVybi4K
ICAgICAgICAgaWYgKCFzdHJpY3QpIHsKQEAgLTkxMCwxMCArOTE1LDEwIEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKIAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJs
ZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewotICAgICAgICBpZiAobm9kZS0+aGFz
Q29uc3RhbnQoKSAmJiBpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKKyAgICAgICAgaWYgKGVkZ2Ut
Pmhhc0NvbnN0YW50KCkgJiYgaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQz
MkNvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKKyAgICAgICAgICAgIEFT
U0VSVChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgp
KSksIGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsK
ICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KQEAgLTkzNiwzNSArOTQxLDM4IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICB9CiB9CiAKLUdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChOb2RlKiBub2RlLCBEYXRhRm9y
bWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChFZGdlIGVkZ2UsIERhdGFGb3JtYXQm
IHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIHJl
dHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KG5vZGUsIHJldHVybkZvcm1hdCwg
ZGlyZWN0aW9uKTsKKyAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUludEludGVybmFsPGZhbHNlPihl
ZGdlLCByZXR1cm5Gb3JtYXQsIGRpcmVjdGlvbik7CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKiBub2RlKQorR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KEVkZ2UgZWRnZSkKIHsKICAgICBEYXRhRm9ybWF0
IG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyOwotICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3Vs
YXRlSW50SW50ZXJuYWw8dHJ1ZT4obm9kZSwgbXVzdEJlRGF0YUZvcm1hdEludGVnZXIsIEJhY2t3
YXJkU3BlY3VsYXRpb24pOworICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWw8dHJ1ZT4oZWRnZSwgbXVzdEJlRGF0YUZvcm1hdEludGVnZXIsIEJhY2t3YXJkU3BlY3Vs
YXRpb24pOwogICAgIFJFTEVBU0VfQVNTRVJUKG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyID09IERh
dGFGb3JtYXRJbnRlZ2VyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1GUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uKQorRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91
YmxlKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY0RvdWJsZUAlZCAgICIs
IG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3Rh
dGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBL
bm93bk51bWJlclVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjTnVtYmVyKSk7CisgICAgdmFs
dWUuZmlsdGVyKFNwZWNOdW1iZXIpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5t
X3R5cGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1
YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0Tm9uZSkgewotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAg
ICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgR1BSUmVnIGdwciA9
IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsK
KyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAg
ICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpKSksIGdwcik7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnBy
ZXREb3VibGVUb0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQo
ZWRnZS5ub2RlKCkpKSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91
YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIApAQCAtOTcyLDkg
Kzk4MCw5IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNOdW1iZXJD
b25zdGFudChub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnBy
ZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKSkpLCBncHIpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0
RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSksIGdwcik7
CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAg
ICAgICAgICAgIHVubG9jayhncHIpOwogCkBAIC0xMDM5LDcgKzEwNDcsNyBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICAgICAg
aWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQg
aGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0
Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdwcik7CkBAIC0xMTAyLDEzICsxMTEwLDE2IEBAIEZQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICB9CiB9CiAKLUdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSogbm9kZSwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Q2VsbChFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNDZWxsQCVkICAgIiwg
bm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0
ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtu
b3duQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOworICAgIHZhbHVlLmZp
bHRlcihTcGVjQ2VsbCk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lz
dGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAt
MTEyMCw4ICsxMTMxLDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bAogICAgICAgICAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAg
aWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQo
KSkgeworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRn
ZS5ub2RlKCkpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAg
ICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29u
c3RhbnQpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwpAQCAtMTEzNyw3ICsxMTQ4
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogCiAgICAgICAg
IGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAg
IGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBk
aXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKICAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAg
ICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTE1Myw3ICsxMTY0LDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5n
cHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0NlbGxTcGVj
dWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2Us
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsK
ICAgICB9CkBAIC0xMTc3LDEzICsxMTg4LDEzIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUNlbGwKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2xlYW4oTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9u
KQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2Us
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNCb29sQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7
CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUp
Lm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9k
ZShlZGdlKS5tX3R5cGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVk
Z2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpIHsKQEAgLTExOTUsOCArMTIwNiw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0
ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYgKGVk
Z2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQm9v
bGVhbigpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3By
KTsKQEAgLTEyMTMsNyArMTIyNCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2wKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZv
cm1hdEpTKTsKICAgICAgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbih0eXBlKSkgewogICAg
ICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwg
U3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlk
R1BSUmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZh
bGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0K
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CkBAIC0xMjMyLDcgKzEyNDMsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVCb29sCiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIGlmICghaXNC
b29sZWFuU3BlY3VsYXRpb24odHlwZSkpIHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVh
blNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2Us
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9v
bGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CiAg
ICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAtMTI5MCwzNSArMTMwMSwy
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAKICAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAg
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkp
OwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+
U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
ICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5j
aGlsZDEoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUgJiB+U3BlY09iamVj
dCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRU
eXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQ
RV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiks
IG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGls
ZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5n
cHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAot
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAg
c3RydWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzMjYsMTQgKzEz
MjgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAg
ICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVjT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigp
LAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BS
LCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRy
KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzNjMsMjcg
KzEzNjIsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAg
CiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFs
aWQoKSkgeyAKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFk
ZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUo
bGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0
cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwot
ICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5i
cmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBH
UFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0
Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1f
aml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisg
ICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEz
OTksMjcgKzEzOTIsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZQogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVz
dCBiZSBhIGNlbGwuIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1
cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQo
KS0+aXNTdGlsbFZhbGlkKCkpIHsgCiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAoKG1f
c3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVj
dCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRU
eXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2Jq
ZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMp
OwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKChtX3N0YXRl
LmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3Bl
Y09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE0Mzcs
MTIgKzE0MjQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQog
ICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQg
bXVzdCBub3QgYmUgYSBjZWxsLiBDaGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHBy
b3ZlIHRoYXQgaXQgaXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLgotICAgIGlmICgobV9zdGF0
ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgJiB+U3BlY090aGVyKSB7
CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVy
KSkgewogICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9q
aXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLm5vZGUoKSwKKyAg
ICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRD
aGlsZC5ub2RlKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLAogICAgICAgICAgICAgbV9qaXQuYnJh
bmNoNjQoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRH
UFIsCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51
bGwpKSk7CkBAIC0xNDczLDI3ICsxNDYwLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZU9iamUKICAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBp
ZiAobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAg
ICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwg
U3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ax
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVy
ZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsK
IAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmICht
X3N0YXRlLmZvck5vZGUobGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hF
Q0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0
Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAK
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE1MDksMjcgKzE0OTAsMjEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhp
cyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlmIChtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9p
bnQoKSk7Ci0gICAgICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAm
IFNwZWNDZWxsKSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hp
bGQsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZH
X1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxk
LCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBz
dHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIp
OwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVj
Q2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAot
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIHN0cnVj
dHVyZUdQUiwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwK
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE1NDQsNyArMTUxOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGlu
IHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3Qgbm90IGJlIGEgY2VsbC4gQ2hlY2sgaWYgdGhh
dCBpcyBlbm91Z2ggdG8KICAgICAvLyBwcm92ZSB0aGF0IGl0IGlzIGVpdGhlciBudWxsIG9yIHVu
ZGVmaW5lZC4KLSAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiB+
U3BlY0NlbGwpICYgflNwZWNPdGhlcikKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKHJpZ2h0Q2hp
bGQsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkKICAgICAgICAgcmlnaHROb3RDZWxsLmxpbmsoJm1f
aml0KTsKICAgICBlbHNlIHsKICAgICAgICAganVtcChub3RUYWtlbiwgRm9yY2VKdW1wKTsKQEAg
LTE1NTMsOSArMTUyOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9i
amUKICAgICAgICAgbV9qaXQubW92ZShvcDJHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0
LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJl
c3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAg
IG1faml0LmJyYW5jaDY0KAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhvcDJHUFIpLCByaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgbV9qaXQuYnJh
bmNoNjQoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRH
UFIsCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51
bGwpKSk7CiAgICAgfQpAQCAtMTYwOSw3ICsxNTgzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KEVkZ2Ugbm9kZVVzZSwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5vZGVVc2UpCiB7
CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSk7CiAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTE2MTksMjcgKzE1OTMsMjIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENl
bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BS
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0K
LSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKLSAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVD
SygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2Vs
bCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3Ry
dWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdw
cigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFs
dWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogCi0gICAg
ICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsCi0gICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVf
Q0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3Bl
Y0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gCiAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0OCgKQEAgLTE2NjAsMTEgKzE2MjksMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIAogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwogCi0g
ICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5v
ZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVl
R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgCi0gICAg
ICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgbV9q
aXQuYnJhbmNoNjQoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAK
ICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwpAQCAtMTY3OCwxMiArMTY0NywxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGls
ZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUtPmNoaWxkMSgpLAotICAgICAgICAgICAgIWlz
T2JqZWN0T3JPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSk7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBj
YXNlIE9iamVjdE9yT3RoZXJVc2U6IHsKKyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dp
Y2FsTm90KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAKKyAg
ICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCB2YWx1ZSk7CiAgICAgICAgIG1faml0LmNvbXBhcmUzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3By
KCkpOwpAQCAtMTY5MSw3ICsxNjYxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z2ljYWxOb3QoTgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0
YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAKKyAgICBjYXNl
IE51bWJlclVzZTogewogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0xNzAzLDggKzE2NzQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKSB7CisgICAgY2FzZSBCb29sZWFuVXNlOiB7CiAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwpAQCAtMTcx
NiwzOSArMTY4Niw0OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChO
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7IC8vIEZJWE1FOiBXZSBjb3Vs
ZCByZXVzZSwgYnV0IG9uIHNwZWN1bGF0aW9uIGZhaWwgd291bGQgbmVlZCByZWNvdmVyeSB0byBy
ZXN0b3JlIHRhZyAoYWtpbiB0byBhZGQpLgogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2
YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSks
IG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8s
IHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsK
KyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWUuZ3ByKCkp
LCBub2RlLT5jaGlsZDEoKSwgU3BlY0Jvb2xlYW4sIG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAgICBtX2ppdC54b3I2NChUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdC5ncHIoKSk7
CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hv
dWxkIHVzZSBpdCBoZXJlLgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgICAg
IAorICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
ICAgICAKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIAotICAgIEdQUlJlZyBhcmcxR1BSID0g
YXJnMS5ncHIoKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAgICAgCi0gICAgYXJnMS51c2UoKTsKKyAgICAgICAgYXJnMS51c2Uo
KTsKICAgICAKLSAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7Ci0gICAgbV9qaXQu
eG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVz
dWx0R1BSKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRl
c3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSk7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogICAgIAotICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRo
aXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFHUFIpKTsKKyAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoc2xv
d0Nhc2UsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFH
UFIpKTsKICAgICAKLSAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CisgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBu
b2RlVXNlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRT
cGVjdWxhdGlvbkNoZWNrKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJC
cmFuY2goRWRnZSBub2RlVXNlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2Vu
KQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOwogICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMTc1OSwyMyArMTczOSwxOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsK
IAotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLAotICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9D
SEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVj
Q2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykg
ewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAg
ICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAg
ICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwog
CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IG1faml0LmJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKQEAgLTE3OTEsMTAgKzE3NjcsMTIg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIAogICAgIG5v
dENlbGwubGluaygmbV9qaXQpOwogICAgIAotICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykg
eworICAgIGlmIChuZWVkc1R5cGVDaGVjayhub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikp
IHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG1f
aml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCks
IHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVs
bCkpKTsKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgbV9qaXQuYnJhbmNoNjQoCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKICAgICB9CiAgICAganVtcChub3RU
YWtlbik7CiAgICAgCkBAIC0xODA2LDE0ICsxNzg0LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFrZW5C
bG9ja0luZGV4KCk7CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxv
Y2tJbmRleCgpOwogICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0T3JPdGhlcigpKSB7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6IHsKICAgICAgICAgZW1pdE9iamVjdE9yT3Ro
ZXJCcmFuY2gobm9kZS0+Y2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgCiAgICAgICAgICAgICAh
aXNPYmplY3RPck90aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIAorICAgIGNhc2Ug
SW50MzJVc2U6CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSkgewogICAgICAgICAgICAgYm9vbCBpbnZlcnQgPSBm
YWxzZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygp
KSB7CkBAIC0xODM3LDUyICsxODE3LDUyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFu
Y2goTm9kZSogbm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKKyAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgY2FzZSBCb29sZWFuVXNlOiB7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKICAgICAgICAgCi0gICAgYm9vbCBwcmVkaWN0Qm9vbGVhbiA9IGlzQm9vbGVhblNwZWN1bGF0
aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOwotICAgIAotICAgIGlmIChwcmVkaWN0
Qm9vbGVhbikgewotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwor
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEJvb2xlYW5Vc2UpIHsKKyAg
ICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVz
dWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7Ci0gICAg
ICAgICAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Olplcm87Ci0gICAgICAgICAg
ICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAgICAgICAgICAgICAgICB0YWtlbiA9IG5v
dFRha2VuOwotICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgeworICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsKKyAgICAgICAgICAgICAg
ICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgICAgICAgICAgdGFrZW4g
PSBub3RUYWtlbjsKKyAgICAgICAgICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNv
bmRpdGlvbiwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMih0cnVlKSwgdGFrZW4pOwotICAgICAgICAg
ICAganVtcChub3RUYWtlbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBicmFuY2g2
NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKLSAg
ICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkp
LCB0YWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgdmFsdWVH
UFIsIFRydXN0ZWRJbW0zMih0cnVlKSwgdGFrZW4pOworICAgICAgICAgICAgICAgIGp1bXAobm90
VGFrZW4pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKKyAgICAg
ICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSwgdGFrZW4pOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5q
dW1wKCkpOwotICAgICAgICB9Ci0gICAgICAgIHZhbHVlLnVzZSgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIG5vdFRha2VuKTsKLSAgICAg
ICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGFrZW4pOworICAgICAgICAgICAgYnJhbmNoNjQo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgbm90VGFrZW4pOworICAgICAgICAg
ICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGFrZW4pOwogICAgIAotICAgICAgICBpZiAoIXBy
ZWRpY3RCb29sZWFuKSB7Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghcHJlZGljdEJvb2xlYW4pIHsKKyAgICAgICAgICAgICAgICBicmFu
Y2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsK
KyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgdGFrZW4pOworICAgICAgICAgICAgfQogICAgIAotICAgICAgICB2YWx1ZS51c2Uo
KTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRK
U1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpT
VmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOworICAgICAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgIAotICAgICAgICBicmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOwotICAgICAgICBqdW1w
KG5vdFRha2VuKTsKLSAgICB9CisgICAgICAgICAgICBicmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOworICAgICAgICAgICAganVtcChub3RUYWtl
bik7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNDMyNTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA4LDE0ICsxMDgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhF
eAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7
CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAg
ICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5jb2RlQmxvY2so
KS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBo
KCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0t
PnNpemUoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlv
bkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsK
IH0KIApAQCAtMTIzLDcgKzEyMyw3IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRp
dmVKSVQ6OnMKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiBPU1JF
eGl0SnVtcFBsYWNlaG9sZGVyKCk7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlw
ZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gbV9qaXQu
Y29kZUJsb2NrKCktPm51bWJlck9mT1NSRXhpdHMoKTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5m
bygpOwogICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwg
anNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CkBAIC0xMzIsNyArMTMyLDcgQEAg
T1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogCiBPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VS
VChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7
CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAg
ICByZXR1cm4gc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5v
ZGUoKSk7CiB9CiAKQEAgLTE0MCwxNCArMTQwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnRO
b2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8
IG1fY2FuRXhpdCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcHNUb0ZhaWwpOwogICAg
IG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNv
dXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUp
LCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBFZGdlIG5vZGVVc2UsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0Zh
aWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50
Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8
fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwg
bm9kZVVzZS5ub2RlKCksIGp1bXBzVG9GYWlsKTsKIH0KIApAQCAtMTU1LDcgKzE1NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1l
bnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCkt
PmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwogICAgIG1faml0LmFwcGVuZEV4
aXRJbmZvKGp1bXBUb0ZhaWwpOwogICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0
KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpLCBtX2ppdC5j
b2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMoKSkpOwpAQCAtMTYzLDcg
KzE2Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCiB7Ci0gICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhp
dCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQp
OwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2Rl
KCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIApAQCAtMTc4LDcgKzE3OCw3IEBAIEp1bXBS
ZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSkkKIHsKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5m
byhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0LmNv
ZGVCbG9jaygpLT5vc3JFeGl0KAogICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NS
RXhpdChPU1JFeGl0KApAQCAtMjgwLDE0ICsyODAsMTQgQEAgSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludCogU3BlY3VsYXRpdmVKSQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CiAgICAgY29udmVydExhc3RPU1JF
eGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpm
b3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFs
dWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVt
cHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgp
KTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwog
ICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcHNUb0Zh
aWwpOwogICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCh2YWx1ZVJlY292ZXJ5KTsKIH0K
QEAgLTMwMiw3ICszMDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNr
KEV4CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2RlKQogewot
ICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNh
bkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5F
eGl0KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWN1
bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAjZW5kaWYKQEAgLTMxNCwxMyArMzE0LDEz
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9kZVVzZSkKIHsKLSAgICBBU1NFUlQobV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAg
IEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1ZVJlZ3MsIG5vZGVVc2Uubm9k
ZSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUs
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VS
VChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVjdWxhdGl2ZUpJVCB3YXMgdGVybWlu
YXRlZC5cbiIpOwogI2VuZGlmCkBAIC0zMzAsNiArMzMwLDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKICAgICBtX2NvbXBpbGVPa2F5ID0gZmFsc2U7CiB9CiAK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRn
ZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwpCit7CisgICAgQVNTRVJUKG5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5
cGVzUGFzc2VkVGhyb3VnaCkpOworICAgIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5maWx0ZXIodHlw
ZXNQYXNzZWRUaHJvdWdoKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHNvdXJjZSwg
ZWRnZSwganVtcFRvRmFpbCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRUeXBl
Q2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlw
ZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBW
YWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQoreworICAgIHR5cGVDaGVjayhzb3VyY2UsIGVk
Z2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFpbCk7CisgICAgY29udmVydExhc3RPU1JF
eGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjp0
eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgdHlwZUNoZWNrKHNvdXJjZSwgZWRn
ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKTsKKyAgICBpZiAoZGlyZWN0aW9uID09
IEZvcndhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJk
KCk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFkZFNsb3dQYXRoR2VuZXJhdG9yKFBhc3NP
d25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoR2VuZXJhdG9yKQogewogICAgIG1fc2xv
d1BhdGhHZW5lcmF0b3JzLmFwcGVuZChzbG93UGF0aEdlbmVyYXRvci5sZWFrUHRyKCkpOwpAQCAt
MTUwOSwyMCArMTUyOSwyMCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVC
cmFuCiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJl
ZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAgIEFTU0VSVChub2RlLT5hZGp1c3RlZFJlZkNv
dW50KCkgPT0gMSk7CiAKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICBp
ZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkKICAgICAgICAgICAgIGNvbXBpbGVQ
ZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uKTsKLSAgICAg
ICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNC
aW5hcnlVc2VLaW5kKE51bWJlclVzZSkpCiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVEb3Vi
bGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgZG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNob3Vs
ZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VL
aW5kKFN0cmluZ1VzZSkpIHsKICAgICAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNl
S2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVx
dWFsaXR5KG5vZGUsIGJyYW5jaE5vZGUpOwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRT
cGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9
PSBPYmplY3RPck90aGVyVXNlKQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVj
dFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwg
YnJhbmNoTm9kZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxh
dGVPYmplY3QoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBPYmplY3RPck90aGVyVXNlICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmpl
Y3RVc2UpCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90
aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMSgpLCBicmFuY2hOb2RlKTsK
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwpAQCAtMTY0
NSw2ICsxNjY1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYK
IAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLnNp
emUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2tb
bV9pbmRleEluQmxvY2tdOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgbV9jYW5FeGl0
ID0gbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpOworI2VuZGlmCisgICAgICAgIG1fc3RhdGUuc3Rh
cnRFeGVjdXRpbmcobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1faml0LnNldEZvck5vZGUobV9j
dXJyZW50Tm9kZSk7CiAgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW47CiAgICAgICAgIGlmICghbV9jdXJyZW50Tm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkgewpAQCAtMjEwNCw3ICsyMTI4LDggQEAgR2VuZXJhdGVkT3BlcmFuZFR5cGUgU3BlY3VsYXRp
dmVKSVQ6OmNoZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyKE5v
ZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNh
c2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEp
OwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTIxMTIs
MTI2ICsyMTM3LDYwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkgewotICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKLSAgICAgICAgbV9qaXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
MigxKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBzd2l0
Y2ggKGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkg
ewotICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEludGVnZXI6IHsKLSAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUs
IG9wMS5mb3JtYXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBHZW5lcmF0
ZWRPcGVyYW5kRG91YmxlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIEVkZ2Uobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBEb3VibGVVc2UpKTsgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB3aWxsIGFz
c2VydCB0aGF0IHRoaXMgaXMgYSBkb3VibGUgdXNlLiBXZSBmb3JjZSBpdCB0byB0aGluayB0aGF0
IGl0IHdhcyBhIGRvdWJsZSB1c2UsIHNpbmNlIHdlIGFyZSBpbmZlcnJpbmcgdGhhdCB3ZSBvdWdo
dCB0byBlbWl0IGEgZG91YmxlIHVzZSBxdWl0ZSBsYXRlLgotICAgICAgICBGUFJSZWcgZnByID0g
b3AxLmZwcigpOwotICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RUcnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVu
Y2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRl
RmFpbGVkKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBzd2l0Y2ggKGNoZWNrR2Vu
ZXJhdGVkVHlwZUZvclRvSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICBj
YXNlIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSwgb3AxLmZvcm1hdCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmREb3VibGU6IHsKKyAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRl
RG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWls
ZWQpOwogICAgICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7Cisg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVk
VG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOwogCi0gICAgICAgIGludGVnZXJS
ZXN1bHQoZ3ByLCBub2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIEdlbmVy
YXRlZE9wZXJhbmRKU1ZhbHVlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICBHUFJSZWcgZ3ByID0gb3AxLmdwcigpOwotICAgICAg
ICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICBGUFJUZW1wb3Jhcnkg
dGVtcEZwcih0aGlzKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGcHIuZnByKCk7Ci0KLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29udmVydGVkOwotCi0gICAgICAg
IGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwot
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNO
dW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiBT
cGVjQ2VsbCkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENv
bXBpbGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEgY2VsbDogc28gdHJ1ZSB0dXJu
cyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8gMC4KLSAgICAgICAgICAgICAgICBtX2pp
dC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBncHIsIFRydXN0ZWRJbW0zMihWYWx1ZVRy
dWUpLCByZXN1bHRHcHIpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQu
anVtcCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpc051bWJlci5saW5r
KCZtX2ppdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwg
bm9kZSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5l
cmF0ZWRPcGVyYW5kSlNWYWx1ZTogeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKIAotICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhl
cmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQotICAgICAgICBtX2ppdC5t
b3ZlKGdwciwgcmVzdWx0R3ByKTsKLSAgICAgICAgdW5ib3hEb3VibGUocmVzdWx0R3ByLCBmcHIp
OwotCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOwotICAgICAgICBzaWxlbnRG
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7Ci0KLSAgICAgICAgY29udmVydGVkLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGdwciwgcmVzdWx0R3ByKTsKLQotICAgICAgICBjb252
ZXJ0ZWQubGluaygmbV9qaXQpOwotI2Vsc2UKLSAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gY2hpbGROb2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0KLSAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICBHUFJS
ZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRH
cHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3QgY29udmVydGVkOwotCi0gICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdEpTSW50ZWdlcikKLSAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVz
dWx0R3ByKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBHUFJSZWcgdGFnR1BSID0gb3Ax
LnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IG9wMS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgdGVtcEZwcih0aGlzKTsKICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZw
cigpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7
CiAKICAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5v
ZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9k
ZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3By
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpOwotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0NlbGwpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5
bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1
YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNv
IHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCi0gICAgICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQm9vbGVhbiA9IG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRh
ZykpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0R3ByKTsKLSAgICAgICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaXNCb29sZWFu
LmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BS
LCByZXN1bHRHcHIpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29t
cGlsZXI6OkVxdWFsLCBncHIsIFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHcHIpOwog
ICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBp
c051bWJlci5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRj
aC5mcHIoKSk7CisgICAgICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBh
IGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQorICAgICAgICAgICAgbV9qaXQubW92ZShncHIs
IHJlc3VsdEdwcik7CisgICAgICAgICAgICB1bmJveERvdWJsZShyZXN1bHRHcHIsIGZwcik7CiAK
ICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7CiAgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3VsdEdwciwgZnByKTsKQEAgLTIyNDAsMTcg
KzIxOTksOTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogICAg
ICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCiAgICAgICAgICAgICBp
c0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BS
LCByZXN1bHRHcHIpOworICAgICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByLCBy
ZXN1bHRHcHIpOwogCiAgICAgICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwotICAgICAg
ICB9CisjZWxzZQorICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGNo
aWxkTm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKworICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICAgICAg
R1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdEdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3QgY29udmVydGVkOworCisgICAgICAgICAgICBpZiAoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIpCisgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKKyAgICAgICAgICAgICAgICBG
UFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0g
dGVtcEZwci5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKKworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpKTsKKworICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0NlbGwpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEl0J3Mgbm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5z
IGludG8gMC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQm9v
bGVhbiA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgaXNCb29sZWFuLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpc051bWJlci5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRj
aC5mcHIoKSk7CisKKyAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHcHIpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3By
LCBmcHIpOworICAgICAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3By
KTsKKworICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKwor
ICAgICAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworCisgICAgICAgICAgICAgICAgY29u
dmVydGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdEdwciwgbm9kZSk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdEdwciwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgY2FzZSBCb29sZWFuVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5P
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigp
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5hbmQzMihKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAKKyAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2Fz
ZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIC8vIERvIGl0IHRoZSBzYWZlIHdheS4KKyAgICAgICAg
bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQogfQogCkBAIC0yNTM4LDQ5ICsyNTc4LDY0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgbV9qaXQu
bW92ZShJbW0zMih0b0ludDMyKGQpKSwgc2NyYXRjaFJlZyk7CiAgICAgICAgIHZhbHVlLmFkb3B0
KHNjcmF0Y2gpOwogICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7Ci0gICAgfSBlbHNlIGlm
ICh2YWx1ZVVzZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
LmdwcigpOwotICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT3AuZ3ByKCksIHNjcmF0Y2hSZWcpOwot
ICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgQVNT
RVJUKGVsZW1lbnRTaXplID09IDEpOwotICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdlclRv
Qnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFsdWUuYWRvcHQo
c2NyYXRjaCk7Ci0gICAgICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsKLSAgICB9IGVsc2UgaWYg
KHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXpl
ID09IDEpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFs
dWVVc2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBGUFJU
ZW1wb3JhcnkgZmxvYXRTY3JhdGNoKHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVP
cC5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY29t
cGlsZUNsYW1wRG91YmxlVG9CeXRlKG1faml0LCBncHIsIGZwciwgZmxvYXRTY3JhdGNoLmZwcigp
KTsKLSAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKLSAgICAgICAgdmFsdWVHUFIgPSBncHI7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRo
aXMsIHZhbHVlVXNlKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7Ci0gICAgICAgIEdQUlJlZyBncHIgPSByZXN1
bHQuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IG1faml0LmJy
YW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwsIGZwciwgZnByKTsKLSAgICAg
ICAgbV9qaXQueG9yUHRyKGdwciwgZ3ByKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
Zml4ZWQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIG5vdE5hTi5saW5rKCZtX2ppdCk7Ci0KLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVkOwotICAgICAgICBpZiAoc2lnbmVkbmVz
cyA9PSBTaWduZWRUeXBlZEFycmF5KQotICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNo
VHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZU
cnVuY2F0ZUZhaWxlZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhaWxlZCA9IG1faml0
LmJyYW5jaFRydW5jYXRlRG91YmxlVG9VaW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpC
cmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKLSAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChmYWlsZWQsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7Ci0K
LSAgICAgICAgZml4ZWQubGluaygmbV9qaXQpOwotICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQp
OwotICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgc3dpdGNoICh2YWx1ZVVzZS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CisgICAgICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0g
c2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2Ny
YXRjaFJlZyk7CisgICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAg
ICBjb21waWxlQ2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOworICAgICAgICAgICAgdmFs
dWVHUFIgPSBzY3JhdGNoUmVnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgaWYgKHJvdW5k
aW5nID09IENsYW1wUm91bmRpbmcpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNp
emUgPT0gMSk7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9w
KHRoaXMsIHZhbHVlVXNlKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOworICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7Cisg
ICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7CisgICAgICAgICAgICAg
ICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBjb21waWxlQ2xh
bXBEb3VibGVUb0J5dGUobV9qaXQsIGdwciwgZnByLCBmbG9hdFNjcmF0Y2guZnByKCkpOworICAg
ICAgICAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgdmFsdWVH
UFIgPSBncHI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CisgICAgICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0g
dmFsdWVPcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0Lmdwcigp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IG1faml0LmJy
YW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwsIGZwciwgZnByKTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC54b3JQdHIoZ3ByLCBncHIpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZpeGVkID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5v
dE5hTi5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVkOworICAgICAgICAgICAgICAgIGlmIChzaWduZWRuZXNz
ID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IG1faml0
LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJy
YW5jaElmVHJ1bmNhdGVGYWlsZWQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIs
IGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bChmYWlsZWQsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgZml4ZWQubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHZhbHVl
LmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHI7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisgICAgCiAgICAgQVNTRVJUX1VO
VVNFRCh2YWx1ZUdQUiwgdmFsdWVHUFIgIT0gcHJvcGVydHkpOwogICAgIEFTU0VSVCh2YWx1ZUdQ
UiAhPSBiYXNlKTsKICAgICBBU1NFUlQodmFsdWVHUFIgIT0gc3RvcmFnZVJlZyk7CkBAIC0yNzIy
LDggKzI3NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgaWYgKCghIShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKSAmJiAh
IShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0g
ICAgICAgIHx8IG5vZGUtPmNoaWxkMSgpLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSkgeworICAg
IGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgewogICAgICAgICAv
LyBJdCBtaWdodCBub3QgYmUgYSBjZWxsLiBTcGVjdWxhdGUgbGVzcyBhZ2dyZXNzaXZlbHkuCiAg
ICAgICAgIC8vIE9yOiBpdCBtaWdodCBvbmx5IGJlIHVzZWQgb25jZSAoaS5lLiBieSB1cyksIHNv
IHdlIGdldCB6ZXJvIGJlbmVmaXQKICAgICAgICAgLy8gZnJvbSBzcGVjdWxhdGluZyBhbnkgbW9y
ZSBhZ2dyZXNzaXZlbHkgdGhhbiB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8uCkBAIC0yOTYxLDkgKzMw
MTUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8oTgogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG1faml0
LmdyYXBoKCkuYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgIHN3aXRjaCAo
bm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBp
ZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAg
ICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAKQEAgLTI5NzksNyArMzAzNCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgICAgICAgICAKICAgICAgICAgaWYg
KGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+
Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQz
MkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVD
YW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKQEAgLTMwMjEsOCAr
MzA3Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAg
ICAgaW50ZWdlclJlc3VsdChncHJSZXN1bHQsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgICAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5n
RGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsK
KyAgICAKKyAgICBjYXNlIE51bWJlclVzZTogewogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEsIG9wMik7CkBAIC0zMDM0LDIyICszMDg5LDI2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3Vs
dC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBpZiAobm9kZS0+
b3AoKSA9PSBWYWx1ZUFkZCkgeworICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7
CiAgICAgICAgIGNvbXBpbGVWYWx1ZUFkZChub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICAKLSAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAotICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhTdWIoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VL
aW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIGlmIChpc051bWJlckNvbnN0
YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnQzMl90
IGltbTIgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUtPmNoaWxkMigpLm5vZGUo
KSk7CisgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKIAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhO
b2RlRmxhZ3MoKSkpIHsKQEAgLTMwNjksNyArMzEyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGlm
IChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgICAg
IGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgICAgICAKQEAgLTMwOTcsMjAgKzMxNTYsMjkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgICAgICAKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOwotICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAg
ICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBvcDEpOwogCi0gICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgRlBSUmVnIHJlZzIg
PSBvcDIuZnByKCk7Ci0gICAgbV9qaXQuc3ViRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIo
KSk7CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOworICAgICAgICBGUFJSZWcgcmVn
MiA9IG9wMi5mcHIoKTsKKyAgICAgICAgbV9qaXQuc3ViRG91YmxlKHJlZzEsIHJlZzIsIHJlc3Vs
dC5mcHIoKSk7CiAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZShOb2RlKiBub2RlKQogewotICAgIGlmIChtX2ppdC5ncmFw
aCgpLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApAQCAtMzEyOCwxNyArMzE5NiwyNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdhdGUoCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgbV9q
aXQubmVnYXRlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKLQotICAgIGRvdWJsZVJl
c3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm5l
Z2F0ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIAorICAgICAgICBk
b3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFyaXRoTXVsKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkubXVs
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5
VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMzE2OSwxNyArMzI0NiwyNSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kCiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEsIG9wMik7Ci0KLSAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAg
ICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKICAgICAgICAgCi0gICAgbV9qaXQubXVsRG91Ymxl
KHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOworICAgICAgICAKKyAg
ICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJlZyByZWcyID0gb3Ay
LmZwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJl
c3VsdC5mcHIoKSk7CiAgICAgICAgIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5v
ZGUpOworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogI2lmIENQ
VShYODYpIHx8IENQVShYODZfNjQpCkBAIC0zMjg5LDI1ICszMzc0LDMzIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbnRlZ2VyQXJpdGgKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFyaXRoTW9kKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKQotICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAg
ICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsK
ICAgICAgICAgY29tcGlsZVNvZnRNb2R1bG8obm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIAotICAgIEZQUlJlZyBv
cDFGUFIgPSBvcDEuZnByKCk7Ci0gICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5mcHIoKTsKKyAgICAg
ICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKKyAgICAgICAgRlBSUmVnIG9wMkZQUiA9IG9w
Mi5mcHIoKTsKICAgICAgICAgCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKICAgICAgICAgCi0gICAgRlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLQotICAg
IGNhbGxPcGVyYXRpb24oZm1vZEFzREZHT3BlcmF0aW9uLCByZXN1bHQuZnByKCksIG9wMUZQUiwg
b3AyRlBSKTsKKyAgICAgICAgRlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAg
ICAgIGNhbGxPcGVyYXRpb24oZm1vZEFzREZHT3BlcmF0aW9uLCByZXN1bHQuZnByKCksIG9wMUZQ
Uiwgb3AyRlBSKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICBkb3VibGVSZXN1
bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUgaXMgZnVzZWQgd2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNo
LgpAQCAtMzMxNiwzMyArMzQwOSwzMyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5v
ZGUqIG5vZGUsCiAgICAgaWYgKGNvbXBpbGVQZWVwSG9sZUJyYW5jaChub2RlLCBjb25kaXRpb24s
IGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0aW9uKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5k
KEludDMyVXNlKSkgewogICAgICAgICBjb21waWxlSW50ZWdlckNvbXBhcmUobm9kZSwgY29uZGl0
aW9uKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkgeworCisgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2Up
KSB7CiAgICAgICAgIGNvbXBpbGVEb3VibGVDb21wYXJlKG5vZGUsIGRvdWJsZUNvbmRpdGlvbik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7
CisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nVXNlKSkgewogICAgICAg
ICAgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUobm9kZSwgY29uZGl0aW9uLCBv
cGVyYXRpb24pOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgCisgICAgICAgIGlm
IChub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkgewogICAgICAgICAgICAgY29tcGls
ZU9iamVjdEVxdWFsaXR5KG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVy
KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2Ug
JiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UpIHsKICAgICAg
ICAgICAgIGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9i
amVjdE9yT3RoZXIoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkp
IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVy
VXNlICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKICAgICAgICAg
ICAgIGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShub2RlLT5jaGlsZDIoKSwg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBA
IC0zNDMwLDcgKzM1MjMsOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFG
b3JDCiAKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2RlKiBub2RlKQog
ewotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5
VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICB1bnNpZ25lZCBicmFu
Y2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAoYnJh
bmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICBOb2RlKiBicmFuY2hO
b2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJs
b2NrKTsKQEAgLTM0NDQsOCArMzUzOCw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
dHJpY3RFcShOb2QKICAgICAgICAgY29tcGlsZUludGVnZXJDb21wYXJlKG5vZGUsIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgCisgICAgY2FzZSBOdW1iZXJVc2U6IHsK
ICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFu
Y2goKTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewogICAg
ICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9j
a10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CkBAIC0zNDU5LDEwICszNTUzLDEyIEBAIGJvb2wg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAgICAgY29tcGlsZURvdWJs
ZUNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZVN0cmluZygpIHx8IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSkKKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdVc2U6IHsKICAgICAgICAgcmV0dXJuIG5vblNw
ZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0
KCkpIHsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgT2JqZWN0VXNlOiB7CiAgICAgICAgIHVu
c2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAg
ICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgIE5v
ZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFu
Y2hJbmRleEluQmxvY2spOwpAQCAtMzQ3Niw4ICszNTcyLDE1IEBAIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5v
ZGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIHJldHVybiBub25T
cGVjdWxhdGl2ZVN0cmljdEVxKG5vZGUpOworICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6
IHsKKyAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7CisgICAgfQor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTQzMjU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTMgKzEyMSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgR1BSUmVnIGZpbGxJbnRlZ2VyKE5vZGUqLCBEYXRhRm9ybWF0
JiByZXR1cm5Gb3JtYXQpOworICAgIEdQUlJlZyBmaWxsSW50ZWdlcihFZGdlLCBEYXRhRm9ybWF0
JiByZXR1cm5Gb3JtYXQpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGZpbGxKU1Zh
bHVlKE5vZGUqKTsKKyAgICBHUFJSZWcgZmlsbEpTVmFsdWUoRWRnZSk7CiAjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgIGJvb2wgZmlsbEpTVmFsdWUoTm9kZSosIEdQUlJlZyYsIEdQUlJlZyYs
IEZQUlJlZyYpOworICAgIGJvb2wgZmlsbEpTVmFsdWUoRWRnZSwgR1BSUmVnJiwgR1BSUmVnJiwg
RlBSUmVnJik7CiAjZW5kaWYKLSAgICBHUFJSZWcgZmlsbFN0b3JhZ2UoTm9kZSopOworICAgIEdQ
UlJlZyBmaWxsU3RvcmFnZShFZGdlKTsKIAogICAgIC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBG
UFIgcmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKQpAQCAtMjk1LDExICsyOTUs
MTEgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBzcGVjdWxhdGl2ZSBvcGVyYW5k
IHR5cGVzLCBiZWxvdywgdG8gZmlsbCBvcGVyYW5kIHRvCiAgICAgLy8gbWFjaGluZSByZWdpc3Rl
cnMsIGltcGxpY2l0bHkgZ2VuZXJhdGluZyBzcGVjdWxhdGlvbiBjaGVja3MgYXMgbmVlZGVkLgot
ICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3Jt
YXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0
cmljdChOb2RlKik7Ci0gICAgRlBSUmVnIGZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSosIFNwZWN1
bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9k
ZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludChF
ZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChFZGdlKTsKKyAgICBGUFJSZWcgZmlsbFNw
ZWN1bGF0ZURvdWJsZShFZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZp
bGxTcGVjdWxhdGVDZWxsKEVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwogICAgIEdl
bmVyYXRlZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIoTm9kZSopOwog
CiAgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRvcihQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJh
dG9yPik7CkBAIC01NDAsMTIgKzU0MCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnVuY3Rpb25D
b25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzRnVuY3Rpb25Db25z
dGFudChub2RlKTsgfQogICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9k
ZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChub2RlKTsgfQog
ICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9q
aXQuZ3JhcGgoKS52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KLSAgICBpbnQzMl90IHZh
bHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIodmFsdWVPZk51bWJl
ckNvbnN0YW50KG5vZGUpKTsKLSAgICB9CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICB2b2lk
KiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5hZGRy
ZXNzT2ZEb3VibGVDb25zdGFudChub2RlKTsgfQogI2VuZGlmCkBAIC0yMDIzLDkgKzIwMTcsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBF
ZGdlIHJpZ2h0Q2hpbGQpOwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUqKTsKLSAgICB2
b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlLCBib29sIG5lZWRT
cGVjdWxhdGlvbkNoZWNrKTsKKyAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5v
dChFZGdlIHZhbHVlKTsKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKLSAgICB2
b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2UgdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4s
IEJsb2NrSW5kZXggbm90VGFrZW4sIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOworICAgIHZv
aWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwg
QmxvY2tJbmRleCBub3RUYWtlbik7CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUqKTsKICAgICAK
ICAgICB2b2lkIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24pOwpAQCAtMjE4OCw2ICsyMTgyLDEyIEBAIHB1YmxpYzoKICAgICBK
dW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBmb3J3YXJkU3BlY3VsYXRpb25XYXRjaHBvaW50KEV4
aXRLaW5kID0gVW5jb3VudGFibGVXYXRjaHBvaW50KTsKICAgICBKdW1wUmVwbGFjZW1lbnRXYXRj
aHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uKTsKICAgICAKKyAgICAvLyBIZWxwZXJzIGZvciBwZXJmb3JtaW5nIHR5cGUgY2hlY2tzIG9u
IGFuIGVkZ2Ugc3RvcmVkIGluIHRoZSBnaXZlbiByZWdpc3RlcnMuCisgICAgYm9vbCBuZWVkc1R5
cGVDaGVjayhFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCkgeyBy
ZXR1cm4gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlc1Bhc3NlZFRocm91Z2g7
IH0KKyAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwpOworICAgIHZvaWQgZm9yd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJj
ZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmKTsKKyAgICB2b2lk
IHR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlw
ZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICAKICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKICAgICAKICAgICBKSVRDb21waWxl
cjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4
aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUsIGJvb2wgaW52ZXJ0KTsKQEAgLTIy
NDcsNiArMjI0Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJlaW5nIGdl
bmVyYXRlZC4KICAgICBCbG9ja0luZGV4IG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9k
ZTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYm9vbCBtX2NhbkV4aXQ7CisjZW5kaWYKICAg
ICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAgICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCBy
ZWdpc3RlciBtYXBzLgogICAgIFZlY3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlv
bkluZm87CkBAIC0yMzA1LDE3ICsyMzA4LDE3IEBAIHB1YmxpYzoKIAogY2xhc3MgSW50ZWdlck9w
ZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZl
SklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0
aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0
b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAg
LCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBt
X2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBt
X2Zvcm1hdChEYXRhRm9ybWF0Tm9uZSkKICNlbmRpZgogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
aml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAg
ICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50MzJVc2Up
OworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChlZGdlLm5vZGUoKSkpCiAgICAgICAgICAgICBn
cHIoKTsKICAgICB9CiAKQEAgLTIzMjUsOSArMjMyOCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1f
aml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KIAorICAgIEVkZ2UgZWRnZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KKyAgICAKICAgICBOb2Rl
KiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJl
dHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogICAgIERhdGFGb3JtYXQgZm9ybWF0KCkKQEAg
LTIzNDAsMjcgKzIzNDgsMjcgQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAg
ICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBt
X2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSW50ZWdlcihub2RlKCksIG1fZm9ybWF0KTsKKyAg
ICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxJbnRlZ2VyKG1fZWRnZSwgbV9m
b3JtYXQpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAg
IHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAg
bV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJ
VCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJl
ZyBtX2dwck9ySW52YWxpZDsKICAgICBEYXRhRm9ybWF0IG1fZm9ybWF0OwogfTsKIAogY2xhc3Mg
SlNWYWx1ZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IEpTVmFsdWVPcGVyYW5kKFNw
ZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IEpTVmFsdWVPcGVyYW5k
KFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBt
b2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkK
LSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcp
CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMjM2OCwxNCArMjM3NiwxNCBAQCBwdWJsaWM6
CiAjZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1
c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7CisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBtX3JlZ2lzdGVyLnBhaXIudGFnR1BSID0gSW52
YWxpZEdQUlJlZzsKICAgICAgICAgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIgPSBJbnZhbGlk
R1BSUmVnOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBpZiAo
aml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZmlsbCgpOwogI2VuZGlmCiAgICAg
fQpAQCAtMjM5NiwxNyArMjQwNCwyMiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICNlbmRpZgogICAg
IH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
ZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9n
cHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlk
ID0gbV9qaXQtPmZpbGxKU1ZhbHVlKG5vZGUoKSk7CisgICAgICAgICAgICBtX2dwck9ySW52YWxp
ZCA9IG1faml0LT5maWxsSlNWYWx1ZShtX2VkZ2UpOwogICAgICAgICByZXR1cm4gbV9ncHJPcklu
dmFsaWQ7CiAgICAgfQogICAgIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzKCkKQEAgLTI0MTksNyAr
MjQzMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbGwoKQogICAgIHsKICAgICAgICAgaWYgKG1f
cmVnaXN0ZXIucGFpci50YWdHUFIgPT0gSW52YWxpZEdQUlJlZyAmJiBtX3JlZ2lzdGVyLnBhaXIu
cGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9pc0RvdWJsZSA9ICFt
X2ppdC0+ZmlsbEpTVmFsdWUobm9kZSgpLCBtX3JlZ2lzdGVyLnBhaXIudGFnR1BSLCBtX3JlZ2lz
dGVyLnBhaXIucGF5bG9hZEdQUiwgbV9yZWdpc3Rlci5mcHIpOworICAgICAgICAgICAgbV9pc0Rv
dWJsZSA9ICFtX2ppdC0+ZmlsbEpTVmFsdWUobV9lZGdlLCBtX3JlZ2lzdGVyLnBhaXIudGFnR1BS
LCBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiwgbV9yZWdpc3Rlci5mcHIpOwogICAgIH0KIAog
ICAgIEdQUlJlZyB0YWdHUFIoKQpAQCAtMjQ1MSwxMiArMjQ2NCwxMiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAg
IG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVK
SVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCkBAIC0yNDczLDE0ICsyNDg2LDE0IEBAIHByaXZhdGU6CiAKIGNsYXNzIFN0b3JhZ2VP
cGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTdG9yYWdlT3BlcmFuZChTcGVjdWxhdGl2
ZUpJVCogaml0LCBFZGdlIHVzZSkKKyAgICBleHBsaWNpdCBTdG9yYWdlT3BlcmFuZChTcGVjdWxh
dGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UpCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAs
IG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1f
Z3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQp
OwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBp
ZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkg
PT0gVW50eXBlZFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAg
ICAgICAgICBncHIoKTsKICAgICB9CiAgICAgCkBAIC0yNDkwLDI2ICsyNTAzLDMxIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogICAgIAor
ICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAg
IH0KKyAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KICAgICAKICAgICBH
UFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlk
R1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2Uo
bm9kZSgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdl
KGVkZ2UoKSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAg
ICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBTcGVjdWxh
dGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAg
IEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKQEAgLTI2NDEsOSArMjY1OSw5IEBAIHByaXZh
dGU6CiAKIGNsYXNzIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVz
ZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikK
KyAgICBleHBsaWNpdCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3Bl
Y3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRT
cGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5u
b2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQo
SW52YWxpZEdQUlJlZykKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9mb3JtYXQoRGF0YUZv
cm1hdE5vbmUpCkBAIC0yNjUxLDggKzI2NjksOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXJl
Y3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAg
QVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9
PSBLbm93bkludDMyVXNlKSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAg
ICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTI2NjEsMTAgKzI2NzksMTUgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAg
ICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KKyAgICAKKyAgICBFZGdl
IGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CiAKICAg
ICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAg
ICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogICAgIERhdGFGb3JtYXQgZm9ybWF0
KCkKQEAgLTI2NzcsMTggKzI3MDAsMTggQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKQogICAg
IHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAg
ICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50KG5vZGUoKSwgbV9m
b3JtYXQsIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQt
PmZpbGxTcGVjdWxhdGVJbnQoZWRnZSgpLCBtX2Zvcm1hdCwgbV9kaXJlY3Rpb24pOwogICAgICAg
ICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAg
ICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2Rl
KCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAg
Tm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxp
ZDsKICAgICBEYXRhRm9ybWF0IG1fZm9ybWF0OwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1f
ZGlyZWN0aW9uOwpAQCAtMjY5NiwxNCArMjcxOSwxNCBAQCBwcml2YXRlOgogCiBjbGFzcyBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKKyAgICBl
eHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwg
RWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5k
U3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uu
bm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlk
KEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBB
U1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0Zp
bGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNlS2luZCgpID09
IEtub3duSW50MzJVc2UpKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAg
ICAgICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjcxMiw0MSArMjczNSw0NiBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAg
ICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQorICAgIAorICAgIEVkZ2Ug
ZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KIAogICAg
IE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAg
ICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAgR1BSUmVnIGdwcigpCiAgICAg
ewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAg
ICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnRTdHJpY3Qobm9kZSgp
KTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnRT
dHJpY3QoZWRnZSgpKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7Cisg
ICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3Vs
YXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAg
ICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCiBjbGFzcyBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24g
PSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1v
ZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQot
ICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAg
ICAgICAsIG1fZnByT3JJbnZhbGlkKEludmFsaWRGUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rp
b24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNT
RVJUKHVzZS51c2VLaW5kKCkgPT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxs
ZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBOdW1iZXJVc2UgfHwgdXNlLnVzZUtpbmQoKSA9PSBL
bm93bk51bWJlclVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBSZWFsTnVtYmVyVXNlKSk7CisgICAg
ICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBmcHIoKTsKICAgICB9
CiAKQEAgLTI3NTUsNDIgKzI3ODMsNDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9mcHJP
ckludmFsaWQgIT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2sobV9mcHJP
ckludmFsaWQpOwogICAgIH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgp
OwogICAgIH0KIAogICAgIEZQUlJlZyBmcHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZnByT3JJ
bnZhbGlkID09IEludmFsaWRGUFJSZWcpCi0gICAgICAgICAgICBtX2Zwck9ySW52YWxpZCA9IG1f
aml0LT5maWxsU3BlY3VsYXRlRG91YmxlKG5vZGUoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAg
ICAgbV9mcHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZURvdWJsZShlZGdlKCksIG1f
ZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZnByT3JJbnZhbGlkOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAg
ICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRp
dmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBG
UFJSZWcgbV9mcHJPckludmFsaWQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rp
b247CiB9OwogCiBjbGFzcyBTcGVjdWxhdGVDZWxsT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgU3BlY3VsYXRlQ2VsbE9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2Us
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisg
ICAgZXhwbGljaXQgU3BlY3VsYXRlQ2VsbE9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRn
ZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3Vs
YXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgp
KQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFs
aWRHUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91Ymxl
VXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJU
KG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBD
ZWxsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSB8fCBlZGdlLnVzZUtpbmQo
KSA9PSBPYmplY3RVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gRnVuY3Rpb25Vc2UgfHwgZWRnZS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUo
KSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTI3OTksNDIgKzI4MzIsNDcgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7
CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KKyAgICAKKyAg
ICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9
CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7
CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogICAgIEdQUlJlZyBncHIo
KQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0g
ICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQ2VsbChub2Rl
KCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZp
bGxTcGVjdWxhdGVDZWxsKGVkZ2UoKSwgbV9kaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9n
cHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAg
IG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0K
IAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2Rl
OworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CiAKIGNsYXNzIFNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVCb29sZWFuT3BlcmFu
ZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVCb29s
ZWFuT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlv
bk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2pp
dChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVk
Z2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICAgICAgLCBt
X2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAg
ICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0
LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSk7CisgICAgICAgIGlm
IChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAgICAg
CkBAIC0yODQ0LDMwICsyODgyLDQxIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayht
X2dwck9ySW52YWxpZCk7CiAgICAgfQogICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KKyAgICAKICAgICBOb2RlKiBub2RlKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdl
KCkubm9kZSgpOwogICAgIH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAg
IGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJP
ckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUJvb2xlYW4obm9kZSgpLCBtX2RpcmVjdGlv
bik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQm9v
bGVhbihlZGdlKCksIG1fZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlk
OwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNl
KG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6
CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdl
IG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCisjZGVmaW5lIERGR19UWVBFX0NIRUNLKHNvdXJjZSwg
ZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKSBkbyB7IFwKKyAgICAgICAgaWYg
KCFuZWVkc1R5cGVDaGVjaygoZWRnZSksICh0eXBlc1Bhc3NlZFRocm91Z2gpKSkgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdHlwZUNoZWNrKChzb3VyY2UpLCAoZWRn
ZSksICh0eXBlc1Bhc3NlZFRocm91Z2gpLCAoanVtcFRvRmFpbCkpOyBcCisgICAgfSB3aGlsZSAo
MCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdVc2VLaW5kX2gKKyNkZWZpbmUgREZHVXNlS2luZF9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiU3BlY3VsYXRlZFR5
cGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitlbnVtIFVzZUtpbmQgeworICAgIFVudHlwZWRVc2UsCisgICAgSW50
MzJVc2UsCisgICAgS25vd25JbnQzMlVzZSwKKyAgICBSZWFsTnVtYmVyVXNlLAorICAgIE51bWJl
clVzZSwKKyAgICBLbm93bk51bWJlclVzZSwKKyAgICBCb29sZWFuVXNlLAorICAgIENlbGxVc2Us
CisgICAgS25vd25DZWxsVXNlLAorICAgIE9iamVjdFVzZSwKKyAgICBPYmplY3RPck90aGVyVXNl
LAorICAgIEZ1bmN0aW9uVXNlLAorICAgIFN0cmluZ1VzZSwKKyAgICBOb3RDZWxsVXNlLAorICAg
IE90aGVyVXNlLAorICAgIExhc3RVc2VLaW5kIC8vIE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVu
dHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVu
dW0gZWxlbWVudHMuCit9OworCitBTFdBWVNfSU5MSU5FIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0
ZXJGb3IoVXNlS2luZCB1c2VLaW5kKQoreworICAgIHN3aXRjaCAodXNlS2luZCkgeworICAgIGNh
c2UgVW50eXBlZFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNUb3A7CisgICAgY2FzZSBJbnQzMlVz
ZToKKyAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAgIHJldHVybiBTcGVjSW50MzI7Cisg
ICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICByZXR1cm4gU3BlY0ludDMyOworICAgIGNh
c2UgUmVhbE51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNSZWFsTnVtYmVyOworICAgIGNh
c2UgTnVtYmVyVXNlOgorICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIHJldHVybiBT
cGVjTnVtYmVyOworICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNCb29s
ZWFuOworICAgIGNhc2UgQ2VsbFVzZToKKyAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAg
cmV0dXJuIFNwZWNDZWxsOworICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICByZXR1cm4gU3Bl
Y09iamVjdDsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVj
T2JqZWN0IHwgU3BlY090aGVyOworICAgIGNhc2UgRnVuY3Rpb25Vc2U6CisgICAgICAgIHJldHVy
biBTcGVjRnVuY3Rpb247CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIHJldHVybiBTcGVj
U3RyaW5nOworICAgIGNhc2UgTm90Q2VsbFVzZToKKyAgICAgICAgcmV0dXJuIH5TcGVjQ2VsbDsK
KyAgICBjYXNlIE90aGVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY090aGVyOworICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBTcGVjVG9wOworICAgIH0KK30KKworQUxXQVlTX0lOTElORSBib29sIGlzTnVtZXJpY2FsKFVz
ZUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEludDMyVXNlOgor
ICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgY2Fz
ZSBOdW1iZXJVc2U6CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6VXNlS2luZCk7CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdVc2VLaW5k
X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188986</attachid>
            <date>2013-02-18 21:59:47 -0800</date>
            <delta_ts>2013-02-18 23:36:28 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>241125</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNjEgQEAgQWJzdHJh
Y3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9v
bGVhblJlc3VsdDsKIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobV9ibG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAg
CiAgICAgbV9kaWRDbG9iYmVyID0gZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIAogICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKQoreworICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5h
dChpbmRleEluQmxvY2spKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMo
Tm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBmaWx0ZXJFZGdlQnlVc2UpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdl
cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0
KGluZGV4SW5CbG9jaykpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2UoRWRn
ZSBlZGdlKQoreworICAgIEFTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0
ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5
RWRnZXMoTm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBo
LCBub2RlLCB2ZXJpZnlFZGdlKTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpCisgICAgICAgIHZlcmlmeUVkZ2VzKG5vZGUpOworICAgIAogICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdlYWtKU0Nv
bnN0YW50OgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czogewogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBJZGVudGl0eTogewogICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTI2NSwxOSArMjk2LDE2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lKSB7CiAg
ICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBib29sIGNh
bkV4aXQgPSBmYWxzZTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVz
Lm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKICAgICAgICAgaWYgKCF2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKHZhbHVlLmlz
Q2xlYXIoKSkKLSAgICAgICAgICAgICAgICBjYW5FeGl0IHw9IHRydWU7CisgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUu
dmFsdWUoKSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBm
b3JOb2RlKG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yODYsMzUgKzMxNCwxMCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewot
ICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKQotICAg
ICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkp
IHsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgbV92YXJp
YWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGVkVHlwZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJl
ZGljdGlvbigpOwotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRU
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIAogICAg
ICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMyMiw3ICszMjUsNiBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVl
biBzZXQuCiAgICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNjYs
NyArMzY4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHNw
ZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODEsMTYgKzM4MiwxNCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50
MzI6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CkBAIC00MDQsNyArNDAzLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNDIzLDE2ICs0MjEsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcih+U3BlY0NlbGwpOwot
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKQEAgLTQ0Nyw3ICs0MzUsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJl
clVuYXJ5KG5vZGUpOwogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKQEAgLTQ1NSwxMCArNDQyLDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAotICAgIGNhc2UgQ2hlY2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
ICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAgICAgSlNWYWx1
ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTQ2OSwzMCArNDUy
LDI1IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkg
ewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9k
ZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMy
VXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkK
KyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4
cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CisgICAgICAg
IGNhc2UgTnVtYmVyVXNlOgogICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKICAgICAgICAgICAgICAgICAmJiBpc1Jl
YWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQogICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09
IFZhbHVlQWRkKSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAotICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCkBAIC01MDUsMTUgKzQ4MywxOSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dy
YXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5i
aW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51
bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEFyaXRoTmVnYXRlOiB7CkBAIC01MjQsMTUgKzUwNiwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLm5l
Z2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
ZUludDMyVW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVt
YmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBB
cml0aE11bDogewpAQCAtNTQ0LDIxICs1MzAsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJp
bmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLAotICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwg
IW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMy
VXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKQor
ICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBp
ZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KQorICAgICAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZVJlYWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5v
ZGUpOwotICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBBcml0aERpdjoKQEAgLTU5NSwxNSArNTg0LDE4IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUsIHRydWUpOyAvLyBmb3JjaW5nIGNh
bi1leGl0LCB3aGljaCBpcyBhIGJpdCBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUuCisgICAgICAg
IHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBBcml0aEFiczogewpAQCAtNjE0LDE1ICs2MDYsMTggQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzJVbmFyeShub2RlLCB0cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0g
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7
CkBAIC02MzMsNyArNjI4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTY1NSwxOCArNjQ5LDE5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGlj
dGlvbigpKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAg
ICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgTnVtYmVyVXNl
OgorICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0
cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwot
ICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc2NCwxNCArNzU5LDE3IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSog
Y2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNDZWxsU3Bl
Y3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXNT
dHJpbmdTcGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsK
KworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBj
YXNlIFN0cmluZ1VzZToKKyAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlw
ZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJl
YWs7CkBAIC04MjksNTkgKzgyNywxMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVh
bik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFu
dCkgewotICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUg
TWFzcXVlcmFkZXNBc1VuZGVmaW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSogbGVm
dCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5j
aGlsZDIoKS5ub2RlKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKLSAgICAgICAg
U3BlY3VsYXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewotICAgICAgICAgICAgZmlsdGVyID0gU3Bl
Y0ludDMyOwotICAgICAgICAgICAgY2hlY2tlciA9IGlzSW50MzJTcGVjdWxhdGlvbjsKLSAgICAg
ICAgfSBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdCwgcmlnaHQpKSB7
Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwotICAgICAgICAgICAgY2hlY2tlciA9
IGlzTnVtYmVyU3BlY3VsYXRpb247Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBD
b21wYXJlRXEpIHsKLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSB8fCByaWdodC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0gCi0gICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYg
cmlnaHQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihT
cGVjT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09i
amVjdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1
bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCk7
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmplY3QgfCBTcGVj
T3RoZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiByaWdodC0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3Qg
fCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVj
T2JqZWN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAKLSAgICAg
ICAgICAgIGZpbHRlciA9IFNwZWNUb3A7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVj
dWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmlsdGVyID0gU3BlY1Rv
cDsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FueVNwZWN1bGF0aW9uOwotICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIH0K
LSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAgICAgICFjaGVja2VyKGZvck5vZGUo
bGVmdCkubV90eXBlKQotICAgICAgICAgICAgfHwgIWNoZWNrZXIoZm9yTm9kZShyaWdodCkubV90
eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZv
ck5vZGUocmlnaHQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICAvLyBUaGlzIGlzIG92ZXJseSBj
b25zZXJ2YXRpdmUuIEJ1dCB0aGUgb25seSB0aGluZyB0aGlzIHByZXZlbnRzIGlzIHN0b3JlIGVs
aW1pbmF0aW9uLAorICAgICAgICAvLyBhbmQgaG93IGxpa2VseSBpcyBpdCwgcmVhbGx5LCB0aGF0
IHlvdSdsbCBoYXZlIHJlZHVuZGFudCBzdG9yZXMgYWNyb3NzIGEgY29tcGFyaXNvbgorICAgICAg
ICAvLyBvcGVyYXRpb24/IENvbXBhcmlzb24gb3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IGF0IHRo
ZSBlbmQgb2YgYmFzaWMgYmxvY2tzLCBzbworICAgICAgICAvLyB1bmxlc3Mgd2UgaGF2ZSBnbG9i
YWwgc3RvcmUgZWxpbWluYXRpb24gKHN1cGVyIHVubGlrZWx5IGdpdmVuIGhvdyB1bnByb2ZpdGFi
bGUgdGhhdAorICAgICAgICAvLyBvcHRpbWl6YXRpb24gaXMgdG8gYmVnaW4gd2l0aCksIHlvdSBh
cmVuJ3QgZ29pbmcgdG8gYmUgd2FudGluZyB0byBzdG9yZSBlbGltaW5hdGUKKyAgICAgICAgLy8g
YWNyb3NzIGFuIGVxdWFsaXR5IG9wLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTg5OCw0MyArODUwLDE3IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsK
LSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpIHsKLSAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdE5v
ZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewotICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5v
ZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChs
ZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHROb2RlLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAg
ICAgICAgICAgIGZvck5vZGUobGVmdE5vZGUpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAg
ICAgIGZvck5vZGUocmlnaHROb2RlKS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZl
LgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNv
ZGVBdDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTk1NCwxNSArODgw
LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZVRvcCgpOwpAQCAtOTcwLDcgKzg5Myw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewog
ICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTgyLDQ4
ICs5MDQsMzggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhD
bGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNE
b3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTEwNDcsMTA0ICs5NTksMjMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAg
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJl
cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExNTIsMTYgKzk4Myw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IAogICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjUmVh
bE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjTnVtYmVy
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTc0LDExICs5OTUsNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFJlZ0V4cEV4
ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAg
ICAgICAgICAgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkKLSAgICAgICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxs
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCkBAIC0xMjAzLDI0ICsxMDE5LDEzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3
ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291cmNl
IHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhlIGJy
YW5jaC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNo
aWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoU3Bl
Y09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBtX2JyYW5jaERp
cmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBUaHJvdzoKQEAgLTEyMzAsMTcgKzEwMzUsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
VG9QcmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKGNoaWxk
KS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENvbnN0Lmlz
TnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI3NSwzOSArMTA3Nywx
NSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICB0eXBlIHw9IFNwZWNTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgZGVzdGluYXRpb24uc2V0
KHR5cGUpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBTdHJDYXQ6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5OgogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9VTkRF
Q0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGUtPm51bUNoaWxk
cmVuKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBv
cGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51
bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQotICAgICAgICAgICAgICAgIGZvck5vZGUobV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0p
LmZpbHRlcihTcGVjUmVhbE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
PmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTMyMCw3ICsxMDk4LDYgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgog
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0FycmF5KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTM0NywzMiArMTEyNCwyNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNoaWxkLT5w
cmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPdGhlcik7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
T3RoZXJVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVjdE90aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNP
YmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgc291
cmNlLmZpbHRlcihTcGVjT2JqZWN0KTsKKyAgICAgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShT
cGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIENyZWF0
ZVRoaXM6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShu
b2RlKTsKLSAgICAgICAgCi0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0
aW9uKHNvdXJjZS5tX3R5cGUpKTsKLSAgICAgICAgICAgIAotICAgICAgICBzb3VyY2UuZmlsdGVy
KFNwZWNGdW5jdGlvbik7Ci0gICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmluYWxPYmplY3Qp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRmluYWxPYmplY3QpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTM4MSwxOSArMTE1MiwxNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVB
Y3RpdmF0aW9uOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9
IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50
czoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFy
Z3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMTQwNywxMCArMTE3NSw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoK
ICAgICAgICAgaWYgKGlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAgICAgICAgICBtX3Zhcmlh
Ymxlcy5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApA
QCAtMTQzMCw3ICsxMTk3LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xl
bmd0aFNhZmU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBU
aGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMg
b2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBw
cm9wZXJ0eS4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CkBAIC0xNDQ0LDcgKzEyMTAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9l
cyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQogICAgICAgICAv
LyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJlaW5nIGZ1cnRo
ZXIgb3B0aW1pemVkIGJ5IHRoZQogICAgICAgICAvLyBBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKQEAgLTE0NTMsOCArMTIxOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0
dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAgICAgICAvLyBhIGdl
dHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIC8vIEJ1dCB3ZSBk
byBzcGVjdWxhdGUgdGhhdCB0aGUgaW5kZXggaXMgYW4gaW50ZWdlci4KLSAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIC8vIEFuZCB0aGUg
cmVzdWx0IGlzIHVua25vd24uCiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAg
ICAgICBicmVhazsKQEAgLTE0NjIsMjkgKzEyMjUsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdG
dW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVj
dHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgot
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU2V0
Q2FsbGVlOgogICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRTY29wZTog
Ly8gRklYTUU6IFdlIGNvdWxkIGdldCByaWQgb2YgdGhlc2UgaWYgd2Uga25vdyB0aGF0IHRoZSBK
U0Z1bmN0aW9uIGlzIGEgY29uc3RhbnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDYyMDIKICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgY2FzZSBTa2lwVG9wU2Nv
cGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNraXBT
Y29wZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgSlNWYWx1
ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChj
aGlsZCAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxKU1Njb3BlKj4oY2hp
bGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7CkBAIC0xNDk1LDE4ICsxMjUzLDE0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOyAv
LyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTUxOCw4ICsxMjcyLDYgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAg
ICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsCkBAIC0xNTU1
LDcgKzEzMDcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIC8vIG1vcmUgdGhvcm91Z2hseS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNjIwMAogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZWxpbWluYXRlIHRo
ZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVlIHRoYXQgZmxvd3MgaW50byB0
aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2MjAxCi0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTE1NjQsNiArMTMxNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBj
b25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlw
ZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVu
c3VyZWQgdGhpcy4KICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1w
dGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBm
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFz
ZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQu
CkBAIC0xNTcxLDkgKzEzMjMsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vi
c2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
aXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3Vs
YXRpb24odmFsdWUubV90eXBlKSk7CisgICAgICAgIGlmICghdmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVy
ZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTE1OTEsNyArMTM0Miw2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gaW5maW5pdHkgb2Yg
c3RydWN0dXJlcy4KICAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAg
IAotICAgICAgICBBU1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZh
bHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVz
dC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgog
ICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKQEAgLTE2
MDAsNyArMTM1MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1
dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGlm
ICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVh
cigpKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKQEAgLTE2MTAsMTQgKzEzNTksMTEgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5j
bGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFs
cmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxvd2VkIGJ5
IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRoZXJlIGlz
IG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIgaGVyZS4KQEAgLTE2MzAsNyArMTM3
Niw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CkBAIC0xNjc5LDkgKzE0MjQs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIEFT
U0VSVChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKICAg
ICAgICAgICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFn
ZUNvbnZlcnQpOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLT5hcnJheU1v
ZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSB0cnVlOwpAQCAtMTY5NCwzNSArMTQzNiwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAg
ICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6Ci0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkg
ewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9k
ZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlPZmZzZXQ6IHsKLSAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFsc2U7Ci0gICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhp
dCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0xNzY2LDEyICsxNDkzLDEwIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCkBAIC0xNzgxLDM0ICsxNTA2LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgIGNh
c2UgUHV0R2xvYmFsVmFyQ2hlY2s6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToK
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHBy
b3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBw
cm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAgICAgICAgLy8g
RklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2Vz
IGFuIHVuY29uZGl0aW9uYWwgY2VsbAotICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQotICAgICAgICBpZiAoIShub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKSAmJiAhKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBG
bHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgY2FzZSBCcmVha3BvaW50
OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIENhbGw6CkBAIC0xODM2LDcgKzE1NTAsNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAg
ICBjYXNlIE5vcDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgotICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5v
ZGVUeXBlOgpAQCAtMTg0Nyw2ICsxNTYwLDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICByZXR1cm4gbV9pc1ZhbGlkOwogfQogCitib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAgIE5vZGUqIG5vZGUg
PSBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9k
ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsK
KyAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsKK30KKwogaW5s
aW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBjbG9iYmVyQ2FwdHVyZWRW
YXJzKGNvZGVPcmlnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDUy
IEBAIHB1YmxpYzoKICAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBhc3QgdGhp
cyBub2RlLiBOb3RhYmx5LCBpdCB3aWxsIHJldHVybiB0cnVlCiAgICAgLy8gZm9yIGJsb2NrIHRl
cm1pbmFscywgc28gbG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4gb3IgdmFy
aWFudHMKICAgICAvLyBvZiBUaHJvdy4KLSAgICBib29sIGV4ZWN1dGUodW5zaWduZWQpOworICAg
IC8vCisgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gZG9pbmc6
CisgICAgLy8KKyAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7CisgICAg
Ly8gICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7CisgICAgLy8gICAgIHJlc3VsdCA9IHN0
YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKKyAgICAvLyB9IGVsc2UKKyAgICAvLyAgICAgcmVz
dWx0ID0gdHJ1ZTsKKyAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAg
ICAKKyAgICAvLyBJbmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJ
dCByZXNldHMgYW55IHN0YXRlIGluIHRoZSBub2RlLAorICAgIC8vIHRoYXQgaXMgcHJvZ3Jlc3Np
dmVseSBidWlsdCB1cCBieSBleGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVjdHMoKS4gSW4K
KyAgICAvLyBwYXJ0aWN1bGFyLCB0aGlzIHJlc2V0cyBjYW5FeGl0KCksIHNvIGlmIHlvdSB3YW50
IHRvICJrbm93IiBiZXR3ZWVuIGNhbGxzIG9mCisgICAgLy8gc3RhcnRFeGVjdXRpbmcoKSBhbmQg
ZXhlY3V0ZUVkZ2VzKCkvRWZmZWN0cygpIHdoZXRoZXIgdGhlIGxhc3QgcnVuIG9mIHRoZQorICAg
IC8vIGFuYWx5c2lzIGNvbmNsdWRlZCB0aGF0IHRoZSBub2RlIGNhbiBleGl0LCB5b3Ugc2hvdWxk
IHByb2JhYmx5IHNldCB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24gYXNpZGUgcHJpb3IgdG8gY2Fs
bGluZyBzdGFydEV4ZWN1dGluZygpLgorICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcoTm9kZSopOwor
ICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAg
ICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlz
IHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKKyAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUu
IFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZAorICAgIC8v
IGZpbHRlckVkZ2VCeVVzZSgpIChvciBzb21lIGVxdWl2YWxlbnQpIG9uIGVhY2ggZWRnZS4KKyAg
ICB2b2lkIGV4ZWN1dGVFZGdlcyhOb2RlKik7CisgICAgdm9pZCBleGVjdXRlRWRnZXModW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVyRWRn
ZUJ5VXNlKEVkZ2UgZWRnZSkKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBz
d2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAg
ICAgICAgY2FzZSBLbm93bk51bWJlclVzZToKKyAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6Cisg
ICAgICAgICAgICBBU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9y
KGVkZ2UudXNlS2luZCgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKKyAgICAgICAgCisgICAgICAgIGZpbHRlckJ5VHlwZShlZGdlLm5vZGUoKSwgdHlwZUZpbHRl
ckZvcihlZGdlLnVzZUtpbmQoKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0cmFjdGx5IGV4
ZWN1dGUgdGhlIGVmZmVjdHMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgY2hhbmdlcyB0aGUgYWJz
dHJhY3QKKyAgICAvLyBzdGF0ZSBhc3N1bWluZyB0aGF0IGVkZ2VzIGhhdmUgYWxyZWFkeSBiZWVu
IGZpbHRlcmVkLgorICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2Nr
KTsKKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSop
OwogICAgIAogICAgIC8vIERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2JiZXIgdGhlIHdv
cmxkPwogICAgIGJvb2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsg
fQpAQCAtMjU5LDYgKzMwNCwxNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2Rl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBmb3JOb2RlKG5vZGUpOworICAgICAgICBpZiAodmFsdWUubV90eXBlICYgfnR5cGUpCisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICB2YWx1ZS5maWx0ZXIo
dHlwZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmVyaWZ5RWRnZShFZGdlKTsKKyAgICB2b2lk
IHZlcmlmeUVkZ2VzKE5vZGUqKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwog
ICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQs
NiArMjM0LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmlsdGVy
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90Cisg
ICAgICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2
YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwOTY2MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJl
cygpOwogICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1
cmVzKCk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFkamFj
ZW5jeUxpc3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7CiAg
ICAgICAgIGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBdLm1f
ZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU4LDE4ICs1NSwxMiBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUq
IGNoaWxkMiwgTm9kZSogY2hpbGQzKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBt
X2tpbmQoRml4ZWQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwg
a2luZCA9PSBGaXhlZCk7CiAgICAgICAgIGluaXRpYWxpemUoY2hpbGQxLCBjaGlsZDIsIGNoaWxk
Myk7CiAgICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCB1bnNpZ25lZCBm
aXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgICAgIDogbV9raW5kKFZhcmlhYmxlKQotI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlRf
VU5VU0VEKGtpbmQsIGtpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBzZXRGaXJzdENoaWxkKGZp
cnN0Q2hpbGQpOwpAQCAtNzksMjEgKzcwLDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBFZGdlJiBj
aGlsZCh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsK
LSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRz
W2ldOwogICAgIH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQodW5zaWduZWQgaSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4
ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBz
ZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAgewogICAgICAgICBBU1NFUlQo
aSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgbV93
b3Jkc1tpXSA9IG5vZGVVc2U7CiAgICAgfQogICAgIApAQCAtMTI1LDkgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgICAgICBtX2tpbmQgPSBGaXhlZDsKLSNlbmRpZgogICAgICAgICBpbml0aWFsaXplKCk7CiAg
ICAgfQogICAgIApAQCAtMTQyLDM0ICsxMjcsMjQgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQg
Zmlyc3RDaGlsZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlh
YmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZDsKICAgICB9CiAg
ICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCiAgICAgewotICAgICAg
ICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1swXS5tX2VuY29k
ZWRXb3JkID0gZmlyc3RDaGlsZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtQ2hpbGRy
ZW4oKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAg
ICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CiAgICAgfQogICAgIHZvaWQg
c2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBBU1NF
UlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1sxXS5tX2VuY29kZWRXb3Jk
ID0gbnVtQ2hpbGRyZW47CiAgICAgfQogICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSNlbmRpZgogcHJpdmF0ZToKICAg
ICBFZGdlIG1fd29yZHNbU2l6ZV07Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQgbV9r
aW5kOwotI2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0MzI3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vICAg
YW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgogLy8gLSBZb3Ug
Y2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2Ug
ZnJlZUFsbCgpLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gZm9yY2VkQ2VsbFNpemU6IHNl
dCB0aGlzIHRvIDAgaWYgeW91J3JlIGhhcHB5IHdpdGggdGhlIGRlZmF1bHQgYWxpZ25tZW50LCBv
ciBzZXQgaXQKKy8vIHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91IHdhbnQgdG8gZm9yY2libHkg
YWxpZ24gdGhlIGFsbG9jYXRpb25zIHRvIGEgY2VydGFpbgorLy8gdmFsdWUuIFdoZW4geW91IGRv
IHRoaXMsIEFsbG9jYXRvciB3aWxsIEFTU0VSVCB0aGF0IGZvcmNlZENlbGxBbGlnbm1lbnQgPj0g
c2l6ZW9mKFQpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxp
Z25tZW50PgogY2xhc3MgQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICBBbGxvY2F0b3IoKTsKQEAg
LTYzLDEzICs2NywyNCBAQCBwcml2YXRlOgogICAgIHZvaWQqIGJ1bXBBbGxvY2F0ZSgpOwogICAg
IHZvaWQqIGZyZWVMaXN0QWxsb2NhdGUoKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3coKTsKLQor
ICAgIAorICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoKQorICAgIHsKKyAgICAgICAgaWYgKCFm
b3JjZWRDZWxsQWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihUKTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChmb3JjZWRDZWxsQWxpZ25tZW50ID49IHNpemVvZihUKSk7Cisg
ICAgICAgIHJldHVybiBmb3JjZWRDZWxsQWxpZ25tZW50OworICAgIH0KKyAgICAKICAgICBzdHJ1
Y3QgUmVnaW9uIHsKICAgICAgICAgc3RhdGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBL
QjsgfQotICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1h
eChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQg
bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgp
KSAvIHNpemVvZihUKTsgfQotICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0
PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQotICAgICAg
ICBib29sIGlzSW5UaGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9u
KCk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3RkOjpt
YXgoc2l6ZW9mKFJlZ2lvbiksIGNlbGxTaXplKCkpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBoZWFkZXJTaXpl
KCkpIC8gY2VsbFNpemUoKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IHBheWxvYWRTaXplKCkg
eyByZXR1cm4gbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSAqIGNlbGxTaXplKCk7IH0KKyAgICAg
ICAgY2hhciogcGF5bG9hZEJlZ2luKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSArIGhlYWRlclNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkRW5kKCkgeyByZXR1cm4g
cGF5bG9hZEJlZ2luKCkgKyBwYXlsb2FkU2l6ZSgpOyB9CisgICAgICAgIGJvb2wgaXNJblRoaXNS
ZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpIC0gcGF5bG9hZEJlZ2luKCkpIDwgcGF5bG9hZFNpemUo
KTsgfQogICAgICAgICBzdGF0aWMgUmVnaW9uKiByZWdpb25Gb3IoY29uc3QgVCogcG9pbnRlcikg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KICAgICAgICAgCiAgICAgICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CkBAIC04MiwyNiArOTcsMjYgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBSZWdpb24qIG1fcmVnaW9uSGVhZDsKICAgICB2b2lkKiogbV9mcmVlTGlzdEhlYWQ7
Ci0gICAgVCogbV9idW1wRW5kOwotICAgIHVuc2lnbmVkIG1fYnVtcFJlbWFpbmluZzsKKyAgICBj
aGFyKiBtX2J1bXBFbmQ7CisgICAgc2l6ZV90IG1fYnVtcFJlbWFpbmluZzsKIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+OjpBbGxvY2F0b3IoKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lubGluZSBBbGxv
Y2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OkFsbG9jYXRvcigpCiAgICAgOiBtX3JlZ2lv
bkhlYWQoMCkKICAgICAsIG1fZnJlZUxpc3RIZWFkKDApCiAgICAgLCBtX2J1bXBSZW1haW5pbmco
MCkKIHsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46On5B
bGxvY2F0b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46On5BbGxvY2F0
b3IoKQogewogICAgIHJlc2V0KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNf
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCog
cmVzdWx0ID0gYnVtcEFsbG9jYXRlKCk7CiAgICAgaWYgKExJS0VMWSghIXJlc3VsdCkpCkBAIC0x
MDksOCArMTI0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYQog
ICAgIHJldHVybiBmcmVlTGlzdEFsbG9jYXRlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2Vk
Q2VsbEFsaWdubWVudD46OmZyZWUoVCogb2JqZWN0KQogewogICAgIG9iamVjdC0+flQoKTsKICAg
ICAKQEAgLTExOSw4ICsxMzQsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3Qp
CiAgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
dm9pZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGln
bm1lbnQ+OjpmcmVlQWxsKCkKIHsKICAgICBpZiAoIW1fcmVnaW9uSGVhZCkgewogICAgICAgICBB
U1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CkBAIC0xNDIsOCArMTU3LDggQEAgdm9pZCBBbGxvY2F0
b3I8VD46OmZyZWVBbGwoKQogICAgIHN0YXJ0QnVtcGluZ0luKG1fcmVnaW9uSGVhZCk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQoKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2Nh
dG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpyZXNldCgpCiB7CiAgICAgZnJlZVJlZ2lvbnNT
dGFydGluZ0F0KG1fcmVnaW9uSGVhZCk7CiAgICAgCkBAIC0xNTIsMzggKzE2NywzOCBAQCB2b2lk
IEFsbG9jYXRvcjxUPjo6cmVzZXQoKQogICAgIG1fYnVtcFJlbWFpbmluZyA9IDA7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci11bnNpZ25lZCBBbGxvY2F0b3I8VD46OmluZGV4T2YoY29uc3Qg
VCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6aW5kZXhP
Zihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgdW5zaWduZWQgYmFzZUluZGV4ID0gMDsKICAgICBm
b3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdpb247IHJlZ2lvbiA9IHJlZ2lv
bi0+bV9uZXh0KSB7CiAgICAgICAgIGlmIChyZWdpb24tPmlzSW5UaGlzUmVnaW9uKG9iamVjdCkp
Ci0gICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAoYml0d2lzZV9jYXN0PGNoYXIqPihv
YmplY3QpIC0gcmVnaW9uLT5wYXlsb2FkQmVnaW4oKSkgLyBjZWxsU2l6ZSgpOwogICAgICAgICBi
YXNlSW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwogICAgIH0KICAg
ICBDUkFTSCgpOwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQWxs
b2NhdG9yPFQ+KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBbGxvY2F0
b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD4qIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25t
ZW50Pjo6YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHJldHVybiBSZWdpb246
OnJlZ2lvbkZvcihvYmplY3QpLT5tX2FsbG9jYXRvcjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjpidW1wQWxsb2NhdGUoKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19J
TkxJTkUgdm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpidW1wQWxsb2Nh
dGUoKQogewotICAgIGlmICh1bnNpZ25lZCByZW1haW5pbmcgPSBtX2J1bXBSZW1haW5pbmcpIHsK
LSAgICAgICAgcmVtYWluaW5nLS07CisgICAgaWYgKHNpemVfdCByZW1haW5pbmcgPSBtX2J1bXBS
ZW1haW5pbmcpIHsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplKCk7CiAgICAgICAgIG1f
YnVtcFJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChy
ZW1haW5pbmcgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1haW5pbmcgKyBj
ZWxsU2l6ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci12b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFsbG9jYXRvcjxU
LCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCoq
IHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKQEAg
LTE5Miw4ICsyMDcsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkKiBBbGxv
Y2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBm
b3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1l
bnQ+OjphbGxvY2F0ZVNsb3coKQogewogICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOwogICAg
IEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTIxNiw4ICsyMzEsOCBAQCB2b2lkKiBBbGxv
Y2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQo
dHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KHR5cGVuYW1lIEFsbG9jYXRv
cjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24pCiB7CiAgICAgd2hpbGUg
KHJlZ2lvbikgewogICAgICAgICBSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb24tPm1fbmV4dDsK
QEAgLTIyNiwxMSArMjQxLDExIEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0
aW5nQXQKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxU
Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lk
IEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5h
bWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsK
LSAgICBtX2J1bXBFbmQgPSByZWdpb24tPmRhdGEoKSArIFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQ
ZXJSZWdpb24oKTsKLSAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246Om51bWJlck9mVGhpbmdz
UGVyUmVnaW9uKCk7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5wYXlsb2FkRW5kKCk7CisgICAg
bV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpwYXlsb2FkU2l6ZSgpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjUs
NyArMTQ2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAg
ICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsgLy8gTWF0aC5t
aW4oeCkKICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMSkpOwotICAgICAgICBhZGRUb0dyYXBoKENoZWNrTnVtYmVyLCByZXN1bHQp
OworICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIEVkZ2UocmVzdWx0LCBOdW1iZXJVc2UpKTsK
ICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTY5
LDcgKzk2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNzaW5nIGFyZ3Vt
ZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkFyZ3Vt
ZW50cykKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMTAxNCwxOCArMTAx
NCwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVudW0gUHJlZGlj
dGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQcmVkaWN0aW9u
TWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50LCBQ
cmVkaWN0aW9uSGFuZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJlU2Ft
ZVByZWRpY3Rpb24pCisgICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVudCkK
ICAgICB7CiAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAotICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9ybSBy
ZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0Ci0gICAgICAgIC8vIGFncmVlLgot
ICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVByZWRpY3Rp
b24KLSAgICAgICAgICAgICYmIG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSAhPSByZXBsYWNl
bWVudC0+cHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFM
b2dGKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJl
cGxhY2VtZW50LT5pbmRleCgpKTsKICNlbmRpZgpAQCAtMTIzMCw3ICsxMjIzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICAgICAgLy8gVGhpcyBpcyBzdHJh
bmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxsIGNvbnZlcnQgbm9kZXMgdG8gY29u
c3RhbnRzLAogICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGVkIGNv
bnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVwLgotICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSksIEFsbG93UHJlZGljdGlvbk1pc21hdGNoKTsKKyAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MzI3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgzLDEyICs4Myw2IEBAIHN0cnVjdCBOb2RlUG9pbnRlclRyYWl0cyB7CiAgICAgc3RhdGljIHZv
aWQgZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiB9OwogCi1lbnVtIFVzZUtp
bmQgewotICAgIFVudHlwZWRVc2UsCi0gICAgRG91YmxlVXNlLAotICAgIExhc3RVc2VLaW5kIC8v
IE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2Vk
IHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMuCi19OwotCiAvLyBVc2UgUmVm
Q2hpbGRyZW4gaWYgdGhlIGNoaWxkIHJlZiBjb3VudHMgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gYWRq
dXN0ZWQgdXNpbmcKIC8vIG90aGVyIG1lYW5zIGFuZCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBp
cyB0cnVlOgogLy8gLSBUaGUgbm9kZSB5b3UncmUgY3JlYXRpbmcgaXMgTXVzdEdlbmVyYXRlLgpA
QCAtMTA2LDE5ICsxMDAsNiBAQCBlbnVtIFJlZk5vZGVNb2RlIHsKICAgICBEb250UmVmTm9kZQog
fTsKIAotaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaW5kIHVzZUtpbmQp
Ci17Ci0gICAgc3dpdGNoICh1c2VLaW5kKSB7Ci0gICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAg
ICByZXR1cm4gIiI7Ci0gICAgY2FzZSBEb3VibGVVc2U6Ci0gICAgICAgIHJldHVybiAiZCI7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiBpbmxpbmUgYm9vbCBpc0FSTXY3cygpCiB7CiAjaWYg
Q1BVKEFQUExFX0FSTVY3UykKQEAgLTIzNiw2ICsyMTcsOCBAQCBlbnVtIFVuaWZpY2F0aW9uU3Rh
dGUgewogICAgIEdsb2JhbGx5VW5pZmllZAogfTsKIAorZW51bSBPcGVyYW5kU3BlY3VsYXRpb25N
b2RlIHsgQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24gfTsKKwogZW51bSBTcGVjdWxhdGlvbkRpcmVjdGlvbiB7IEZvcndhcmRTcGVjdWxhdGlvbiwg
QmFja3dhcmRTcGVjdWxhdGlvbiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsx
NDksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICAgICAg
Y2FzZSBHZXRCeUlkRmx1c2g6IHsKICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9k
ZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9k
ZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KCFpc0NlbGxTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKQEAgLTE4MSwxOCArMTgy
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZvck5v
ZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVT
ZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBj
aGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3Bl
cnR5U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CkBAIC0yMDcsNyArMjA4LDggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlJ
ZERpcmVjdDogewogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUt
PmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEo
KTsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwpA
QCAtMjM4LDcgKzI0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhz
dHJ1Y3R1cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRn
ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0YSA9IDA7CkBAIC0yNjQsMzgg
KzI2NiwzOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOworICAgICAgICAg
ICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkLT5yZWYoKTsgLy8gVGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUg
cHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgotICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZD
aGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hp
bGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBF
ZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5m
byh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkRWRnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0
dGVyZmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGNoaWxkKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAo
c3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
IGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
IGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CkBAIC0zOTEsMTMgKzM5MywxMyBAQCBw
cml2YXRlOgogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJl
Zk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAgICAgICAg
ICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29uc3Rh
bnQpOworICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUo
KSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVj
a1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnQpOworICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIEVk
Z2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgaXMg
bmVjZXNzYXJ5IGJlY2F1c2UgdGhlIENGQSBtYXkgcmVhY2ggY29uY2x1c2lvbnMgYWJvdXQgY29u
c3RhbnRzIGJhc2VkIG9uIGl0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDYgQEAgaW5saW5lIGJv
b2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICBpZiAoIWNoYW5nZWQpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIGRmZy5yZXNldEV4aXRTdGF0ZXMo
KTsKLSAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVh
ZGluZyhkZmcpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdF
ZGdlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIG91dC5wcmludCh1c2VLaW5kVG9TdHJpbmcodXNlS2luZCgpKSwgbm9kZSgp
KTsKKyAgICBvdXQucHJpbnQodXNlS2luZCgpLCAiOiIsIG5vZGUoKSk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShy
ZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBzdGF0aWMg
dWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiAyOyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0
KCkgeyByZXR1cm4gNDsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9k
ZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEJlZm9yZUZpeHBvaW50KTsKKyAg
ICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1cEJsb2Nr
KG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTc2LDUwICs3OSwyNjEgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpCisgICAgICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0Ny
ZWF0ZWRUaGlzQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihu
b2RlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VE
b3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hp
bGQxKCksIE51bWJlclVzZSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3RlZFR5cGUgPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBl
bHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAg
IGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdFJTaGlm
dDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewor
ICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJ
bnRFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogeworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMy
OiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9J
bnQzMjogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlID0gCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
cyk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJy
YXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0g
QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2Up
OwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rp
b24oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYm
IGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNr
U3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1
cmUoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKE5vdENlbGxVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6IHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAgICAgICAgIGlmIChh
dHRlbXB0VG9NYWtlSW50ZWdlckFkZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVk
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAg
ICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7
CisgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aERpdjogewor
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAg
IGlmIChpc1g4NigpIHx8IGlzQVJNdjdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCksIG5vZGUtPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBw
b3J0c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShu
b2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRv
IHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9t
CisgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgorICAgICAgICAgICAg
ICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwg
U3BlY0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVk
Z2UoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlLT5zZXRPcChH
ZXRBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVN
dXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
KTsKLSAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVj
a0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAg
ICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNl
IEFyaXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBF
ZGdlKHN0b3JhZ2UpOworICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAg
ICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+
YXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFyaXRoU3FydDogeworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgTG9naWNhbE5vdDogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBlbHNl
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAg
ICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHlwZU9mOiB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJl
RXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJl
R3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOiB7CisgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBDb21hcHJlRXFDb25zdGFudCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51
bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENvbXBhcmVF
cSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCku
c2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2Rl
LT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKKyAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5z
ZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIC8v
IEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgorICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5n
KSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2Rl
LT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAg
ICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCkBAIC0xMjcsNyArMzQxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rp
b24oKSwKICAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgp
OwogICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQpAQCAt
MTM4LDEzICszNTIsNzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhKG5vZGUtPmZs
YWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5
TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5k
ZWNpZGVkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CisgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCku
c2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgU3RyaW5nQ2hhckF0OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAg
ICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRo
ZXNlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShB
cnJheTo6U3RyaW5nKSk7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CisKKyAgICAgICAgICAgIG5v
ZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZp
bmUoCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAorICAgICAgICAg
ICAgICAgICAgICBjaGlsZDItPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQzLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9k
ZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9uczoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCksIFJlYWxOdW1iZXJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5
OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMygpLnNldFVzZUtpbmQoSW50MzJV
c2UpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZShub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93
bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50
MzJVc2UpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC0xNjMsMTEgKzQ0MSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAg
ICAgICAgICAgICAgIFNwZWNJbnQzMiwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xNzYsNDkgKzQ1OCwyNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRp
b24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNo
aWZ0OgotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7
Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbXBhcmVFcToK
LSAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgot
ICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
RXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo
IU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBm
aXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2Fs
Tm90OiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVj
OgorICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VL
aW5kKENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMCk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJv
b2xlYW5Vc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNh
bE5vdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90
LT5vcCgpID09IExvZ2ljYWxOb3QKQEAgLTI2MSwxNDkgKzUyMSwxOTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBT
ZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5p
c0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAvLyBG
SVhNRTogQWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgorICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDE3NQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAg
ICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAg
ICAgICAgICAgICBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCBpKS0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFO
S19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+bnVtQ2hpbGRyZW4oKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJh
bmRJbmRleCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsg
b3BlcmFuZEluZGV4XS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5v
ZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4
XS5zZXRVc2VLaW5kKFJlYWxOdW1iZXJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVk
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMSk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkKLSAgICAg
ICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7CisgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZTog
ewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MCk7CisgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsKKyAgICAgICAgICAgIGlmIChpc090aGVy
U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNl
IGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBBcml0aE1vZDog
ewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1l
dGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAg
ICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDEpOworICAgICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Cisg
ICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSB8fCBpc0FSTXY3
cygpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpbmplY3RJ
bnQzMlRvRG91YmxlTm9kZSgwKTsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91Ymxl
Tm9kZSgxKTsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2lu
ZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KLSAgICAg
ICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9k
ZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91
YmxlLCAqbm9kZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0
T3AoRG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlh
bGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgorICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjoK
KyAgICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CisgICAgICAgIGNhc2UgU2tpcFNjb3BlOiB7Cisg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJp
dGhBYnM6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1
bGF0ZUludGVnZXIoKSkKKyAgICAgICAgY2FzZSBHZXRCeUlkOiB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgaWYgKCFpc0lu
dDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgICAgICBpZiAoY29kZUJs
b2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRh
KCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2Zp
bGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7
CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpTZWxl
Y3RVc2luZ1ByZWRpY3Rpb25zKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsKKyAg
ICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dy
YXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKKyAgICAgICAgICAg
ICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFy
cmF5OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2Rl
LnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnN1
cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxl
LT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGlmICgh
YXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+Y2xl
YXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAg
bV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJh
eU1vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tB
cnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
MCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAg
ICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3FydDog
ewotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBHZXRCeUlkRmx1
c2g6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2Vs
bCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgUHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAgICAg
RWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAg
RWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAg
RWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotCi0gICAgICAgICAg
ICBub2RlLT5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCku
cmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKLSAgICAg
ICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAg
IGNoaWxkMy0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsZXNz
QXJyYXlPcGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIDMpOworICAgICAgICBjYXNlIENoZWNrRXhl
Y3V0YWJsZToKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBGb3J3
YXJkQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ6CisgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OgorICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAg
ICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6
IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5
OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5Ogot
ICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBj
YXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCi0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAg
ICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgyKTsKKyAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U3Ry
aW5nOgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykgewot
ICAgICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlwZSgKLSAgICAgICAgICAgICAgICAg
ICAgbGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+aW5kZXhpbmdUeXBlKCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
aSktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUt
PmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCi0g
ICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgIGNhc2UgQXJyYXlpZnk6CisgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5z
ZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICAgICAgaWYgKCFu
b2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQorICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAg
ICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2Rl
KCkuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBhcHBlYXJzIGJyb2tlbjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4g
dW5jb25kaXRpb25hbCBjZWxsCisgICAgICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQorICAgICAgICAgICAgaWYgKCEobm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAg
ICAgIH0KIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTQ3
MSwxMSArNzc1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwg
YXJyYXkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBi
YXNlLCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVz
c0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgRWRnZSYgc3RvcmFnZUNoaWxk
KQogICAgIHsKLSAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4
cG9pbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAogICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50Tm9kZTsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CkBAIC00OTksNyArODAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fZ3JhcGguY2hpbGQobm9kZSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3Rv
cmFnZSk7CisgICAgICAgICAgICBzdG9yYWdlQ2hpbGQgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9IH0KICAgICB9CkBAIC01MDcsNDAgKzgwOCw0NiBAQCBw
cml2YXRlOgogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKICAgICAgICAg
Tm9kZSogbm9kZSA9IGVkZ2Uubm9kZSgpOwotICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1
ZVRvSW50MzIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmIChub2Rl
LT5vcCgpICE9IFZhbHVlVG9JbnQzMikgeworICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKEtu
b3duSW50MzJVc2UpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBFZGdlIG9sZEVkZ2UgPSBlZGdlOwogICAgICAgICBFZGdlIG5ld0VkZ2UgPSBub2Rl
LT5jaGlsZDEoKTsKICAgICAgICAgCisgICAgICAgIGlmIChuZXdFZGdlLnVzZUtpbmQoKSAhPSBJ
bnQzMktpbmQpIHsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJU
KG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CisgICAgICAgIAogICAgICAgICBt
X2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKICAg
ICAgICAgCiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZp
eERvdWJsZUVkZ2UodW5zaWduZWQgY2hpbGRJbmRleCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICB2b2lkIGZpeERvdWJsZUVkZ2UoRWRn
ZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgTm9kZSog
c291cmNlID0gbV9jdXJyZW50Tm9kZTsKLSAgICAgICAgRWRnZSYgZWRnZSA9IG1fZ3JhcGguY2hp
bGQoc291cmNlLCBjaGlsZEluZGV4KTsKICAgICAgICAgCiAgICAgICAgIGlmIChlZGdlLT5wcmVk
aWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91
YmxlVXNlKTsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZCh1c2VLaW5kKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW5qZWN0SW50MzJUb0Rv
dWJsZU5vZGUoY2hpbGRJbmRleCwgZGlyZWN0aW9uKTsKKyAgICAgICAgaW5qZWN0SW50MzJUb0Rv
dWJsZU5vZGUoZWRnZSwgZGlyZWN0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIGluamVjdEludDMy
VG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRp
cmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBpbmplY3RJbnQzMlRvRG91
YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgewogICAg
ICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwK
ICAgICAgICAgICAgIGRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uID8gSW50MzJUb0Rv
dWJsZSA6IEZvcndhcmRJbnQzMlRvRG91YmxlLAotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbiwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS5ub2Rl
KCkpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5v
ZGUoKSwgRG91YmxlVXNlKSk7CisgICAgICAgIHJlc3VsdC0+Y2hpbGQxKCkuc2V0VXNlS2luZChE
b3VibGVVc2UpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKApAQCAtNTQ4LDcgKzg1NSw0OCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5jaGlsZChtX2N1cnJl
bnROb2RlLCBjaGlsZEluZGV4KS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgcmVz
dWx0LT5pbmRleCgpKTsKICNlbmRpZgogCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50
Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91YmxlVXNlKTsKKyAgICAgICAgbV9n
cmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0LCB1c2VL
aW5kKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihFZGdl
JiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSogb2xkTm9kZSA9IGVkZ2Uubm9kZSgpOworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKG9sZE5vZGUtPmhhc0NvbnN0YW50KCkpOworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChvbGROb2RlKTsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIHZhbHVlID0ganNOdW1iZXIoSlNDOjp0b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkpKTsK
KyAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZSht
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERv
bnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0ludDMyLCBKU0NvbnN0YW50LAorICAgICAgICAg
ICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRPckZp
bmRDb25zdGFudCh2YWx1ZSkpKSk7CisgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkTm9kZSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2RlKiBu
b2RlLCBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGlmIChtb2RlICE9
IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQo
KSB8fCBub2RlLT5jaGlsZDIoKS0+aGFzQ29uc3RhbnQoKSk7CisgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRUb0lu
dDMyKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJ1bmNhdGVD
b25zdGFudFRvSW50MzIobm9kZS0+Y2hpbGQyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGF0
dGVtcHRUb01ha2VJbnRlZ2VyQWRkKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBZGRTcGVj
dWxhdGlvbk1vZGUgbW9kZSA9IG1fZ3JhcGguYWRkU3BlY3VsYXRpb25Nb2RlKG5vZGUpOworICAg
ICAgICBpZiAobW9kZSA9PSBEb250U3BlY3VsYXRlSW50ZWdlcikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3Nhcnko
bm9kZSwgbW9kZSk7CisgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2Up
OworICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQ2LDQ1ICszNDYsMTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAg
IH0KIH0KIAotLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5vdCByZWN1
cnNpdmUuCi0jZGVmaW5lIERPX1RPX0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChf
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENo
aWxkKCk7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUt
PmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCi0gICAgICAgICAgICAgICAg
X2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFy
Z0NoaWxkcmVuW19jaGlsZElkeF0pOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJU
KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAo
IV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMygp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgfSB3aGlsZSAoZmFsc2UpCi0KIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9wKQog
ewotICAgIERPX1RPX0NISUxEUkVOKG9wLCByZWYpOworICAgIERGR19OT0RFX0RPX1RPX0NISUxE
UkVOKCp0aGlzLCBvcCwgcmVmKTsKIH0KIAogdm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2Rl
KiBvcCkKIHsKLSAgICBET19UT19DSElMRFJFTihvcCwgZGVyZWYpOworICAgIERGR19OT0RFX0RP
X1RPX0NISUxEUkVOKCp0aGlzLCBvcCwgZGVyZWYpOwogfQogCiB2b2lkIEdyYXBoOjpkZXRocmVh
ZCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDMy
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFB1dFRvQmFzZU9wZXJhdGlvbkRhdGEgewogCiBl
bnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAgICAgRG9udFNwZWN1bGF0ZUludGVnZXIsCi0gICAg
U3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3csCisgICAgU3BlY3VsYXRlSW50
ZWdlckFuZFRydW5jYXRlQ29uc3RhbnRzLAogICAgIFNwZWN1bGF0ZUludGVnZXIKIH07CiAKQEAg
LTE3NCw5ICsxNzQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSAr
IG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdl
bmVyYXRlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAg
ICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIo
KSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVk
Z2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAg
IHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0
ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDIo
KSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVk
Z2Uobm9kZS0+Y2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKQEAgLTUzMCw5ICs1MzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1ByZWRpY3Rl
ZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVm
dCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlz
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCk7Cisg
ICAgICAgIHJldHVybiBpc051bWVyaWNhbChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpICYmIGlz
TnVtZXJpY2FsKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSk7CiAgICAgfQogICAgIAogICAgIC8v
IE5vdGUgdGhhdCBhICd0cnVlJyByZXR1cm4gZG9lcyBub3QgYWN0dWFsbHkgbWVhbiB0aGF0IHRo
ZSBCeVZhbCBhY2Nlc3MgY2xvYmJlcnMgbm90aGluZy4KQEAgLTc4MSw3ICs3NzksNyBAQCBwcml2
YXRlOgogICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91Ymxl
SW1tZWRpYXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRl
SW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2Vy
KGFkZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hP
dmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRy
dW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckFu
ZFRydW5jYXRlQ29uc3RhbnRzIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAog
ICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwsIE5v
ZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCkBAIC04MzAsNiArODI4LDM2IEBAIGlubGlu
ZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnkKICAgICByZXR1cm4gKmJpbmFyeVNl
YXJjaDxCbG9ja0luZGV4LCB1bnNpZ25lZD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJnZXRz
LnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7
CiB9CiAKKyNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5n
VG9EbykgZG8geyAgICAgICAgICAgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9u
b2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hp
bGQoKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+
Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAgICAgICBf
Y2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4
XSkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKChncmFwaCku
bV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICgh
X25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlIChmYWxzZSkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDMyNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTUsNyArOTUsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNO
b25lKQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwotICAgICAgICBB
U1NFUlQoISEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSA9PSAoY2hpbGRyZW4ua2luZCgpID09
IEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVj
dCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCkBAIC0y
OTQsMjIgKzI5MywyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNvbnZlcnRUb1N0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgp
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBz
dG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRv
R2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9yYWdl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdldEJ5
SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKLSAg
ICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uoc3RvcmFnZSkpOworICAgICAgICBjaGlsZHJl
bi5zZXRDaGlsZDEoc3RvcmFnZSk7CiAgICAgICAgIG1fb3AgPSBHZXRCeU9mZnNldDsKICAgICAg
ICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAotICAgIHZvaWQg
Y29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9k
ZSogc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgbV9vcElu
Zm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwogICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDMo
Y2hpbGRyZW4uY2hpbGQyKCkpOwogICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDIoY2hpbGRyZW4u
Y2hpbGQxKCkpOwotICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShzdG9yYWdlKSk7Cisg
ICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShzdG9yYWdlKTsKICAgICAgICAgbV9vcCA9IFB1dEJ5
T2Zmc2V0OwogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9CkBA
IC05OTUsNyArOTk0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9yZWZDb3Vu
dC0tOwogICAgIH0KICAgICAKLSAgICBFZGdlIGNoaWxkMSgpCisgICAgRWRnZSYgY2hpbGQxKCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAg
ICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQxKCk7CkBAIC0xMDA5LDEzICsxMDA4LDEzIEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMVVuY2hlY2tlZCgpOwog
ICAgIH0KIAotICAgIEVkZ2UgY2hpbGQyKCkKKyAgICBFZGdlJiBjaGlsZDIoKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJldHVy
biBjaGlsZHJlbi5jaGlsZDIoKTsKICAgICB9CiAKLSAgICBFZGdlIGNoaWxkMygpCisgICAgRWRn
ZSYgY2hpbGQzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFy
QXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQzKCk7CkBAIC0xMDMzLDYgKzEw
MzIsMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gY2hpbGRyZW4ubnVtQ2hpbGRy
ZW4oKTsKICAgICB9CiAgICAgCisgICAgVXNlS2luZCBiaW5hcnlVc2VLaW5kKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChjaGlsZDEoKS51c2VLaW5kKCkgPT0gY2hpbGQyKCkudXNlS2luZCgpKTsK
KyAgICAgICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtpbmQoKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc0JpbmFyeVVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNoaWxkMSgpLnVzZUtpbmQoKSA9PSB1c2VLaW5kICYmIGNoaWxkMigpLnVzZUtpbmQoKSA9PSB1
c2VLaW5kOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAot
dHlwZWRlZiBBbGxvY2F0b3I8Tm9kZT4gTm9kZUFsbG9jYXRvcjsKKyNpZiBVU0UoSlNWQUxVRTY0
KQordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgMTEyPiBOb2RlQWxsb2NhdG9yOworI2Vsc2UKK3R5
cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDgwPiBOb2RlQWxsb2NhdG9yOworI2VuZGlmCiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw4ICs5Niw2IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhGb3J3YXJkSW50MzJUb0RvdWJsZSwg
Tm9kZVJlc3VsdE51bWJlcikgXAogICAgIC8qIFVzZWQgdG8gc3BlY3VsYXRlIHRoYXQgYSBkb3Vi
bGUgdmFsdWUgaXMgYWN0dWFsbHkgYW4gaW50ZWdlci4gKi9cCiAgICAgbWFjcm8oRG91YmxlQXNJ
bnQzMiwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgLyogVXNlZCB0byByZWNvcmQgcGxhY2VzIHdo
ZXJlIHdlIG11c3QgY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIG51bWJlci4gKi9cCi0gICAgbWFjcm8o
Q2hlY2tOdW1iZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9y
IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQXJpdGhBZGQsIE5vZGVSZXN1
bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0MzI3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDI4ICszOSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxJbnRlZ2VyKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKK0dQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5G
b3JtYXQpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZp
cnR1YWxSZWdpc3RlcigpOworICAgIEFTU0VSVCghKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5
cGUgJiB+U3BlY0ludDMyKSk7CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICBHUFJSZWcgZ3ByID0g
YWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAg
ICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdwcik7Cisg
ICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdl
cigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZv
cm1hdEludGVnZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUp
KTsKKyAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAg
ICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25z
dGFudChlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOwot
ICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
OworICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5v
ZGUoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2Vy
KSB7CkBAIC0xMTcsMjcgKzExOSwyNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRl
Z2VyKE5vZGUqCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVl
KE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgZWRn
ZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewot
ICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICBpZiAoZWRn
ZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChlZGdl
Lm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwg
Z3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVt
YmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNW
YWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJD
b25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6
OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaXNKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBq
c1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICB9CkBAIC04MDIsMTggKzgwNCwy
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiB9CiAKIHRlbXBs
YXRlPGJvb2wgc3RyaWN0PgotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
SW50ZXJuYWwoTm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVJbnRJbnRlcm5hbChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKICAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlm
Ci0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdp
c3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2Up
OworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bkludDMyVXNlIHx8ICEodmFsdWUu
bV90eXBlICYgflNwZWNJbnQzMikpOworICAgIHZhbHVlLmZpbHRlcihTcGVjSW50MzIpOworICAg
IFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAg
c3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25l
OiB7Ci0gICAgICAgIGlmICgobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50
KG5vZGUpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAg
ICAgICBpZiAoKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChlZGdlLm5v
ZGUoKSkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CiAgICAg
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFG
b3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CkBAIC04MjEsMTAg
KzgyNiwxMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAg
ICAgIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9k
ZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewog
ICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckNvbnN0YW50KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZSkpOwot
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFu
dChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwgZ3ByKTsKICAgICAgICAg
ICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0dXJu
Rm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwpAQCAt
ODY1LDcgKzg3MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkK
ICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdw
cik7CiAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIGRpcmVjdGlv
bik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRK
U0ludGVnZXIpOwogICAgICAgICAvLyBJZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJldHVybi4KICAg
ICAgICAgaWYgKCFzdHJpY3QpIHsKQEAgLTkxMCwxMCArOTE1LDEwIEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKIAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToK
ICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewotICAgICAgICBpZiAobm9kZS0+aGFzQ29u
c3RhbnQoKSAmJiBpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhh
c0NvbnN0YW50KCkgJiYgaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAg
ICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNv
bnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKKyAgICAgICAgICAgIEFTU0VS
VChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSks
IGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAg
ICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KQEAgLTkzNiwzNSArOTQxLDM4IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICB9CiB9CiAKLUdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChOb2RlKiBub2RlLCBEYXRhRm9ybWF0
JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJl
dHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIHJldHVy
biBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KG5vZGUsIHJldHVybkZvcm1hdCwgZGly
ZWN0aW9uKTsKKyAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUludEludGVybmFsPGZhbHNlPihlZGdl
LCByZXR1cm5Gb3JtYXQsIGRpcmVjdGlvbik7CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKiBub2RlKQorR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KEVkZ2UgZWRnZSkKIHsKICAgICBEYXRhRm9ybWF0IG11
c3RCZURhdGFGb3JtYXRJbnRlZ2VyOwotICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRl
SW50SW50ZXJuYWw8dHJ1ZT4obm9kZSwgbXVzdEJlRGF0YUZvcm1hdEludGVnZXIsIEJhY2t3YXJk
U3BlY3VsYXRpb24pOworICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50ZXJu
YWw8dHJ1ZT4oZWRnZSwgbXVzdEJlRGF0YUZvcm1hdEludGVnZXIsIEJhY2t3YXJkU3BlY3VsYXRp
b24pOwogICAgIFJFTEVBU0VfQVNTRVJUKG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyID09IERhdGFG
b3JtYXRJbnRlZ2VyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1GUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rp
b24gZGlyZWN0aW9uKQorRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91Ymxl
KEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY0RvdWJsZUAlZCAgICIsIG5v
ZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUu
Zm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
bV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBLbm93
bk51bWJlclVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjTnVtYmVyKSk7CisgICAgdmFsdWUu
ZmlsdGVyKFNwZWNOdW1iZXIpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5
cGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxS
ZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2
aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0Tm9uZSkgewotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAg
ICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFs
bG9jYXRlKCk7CiAKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKKyAg
ICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAg
ICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHN0YXRp
Y19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpKSksIGdwcik7CisgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXRE
b3VibGVUb0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQoZWRn
ZS5ub2RlKCkpKSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91Ymxl
KGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIApAQCAtOTcyLDkgKzk4
MCw5IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmcHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25z
dGFudChub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2Rl
KCkpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXRE
b3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKSkpLCBncHIpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91
YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSksIGdwcik7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAgICAg
ICAgICAgIHVubG9jayhncHIpOwogCkBAIC0xMDM5LDcgKzEwNDcsNyBAQCBGUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpz
VmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICAgICAgaWYg
KCFpc051bWJlclNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVy
ZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0Lm1v
dmUoanNWYWx1ZUdwciwgdGVtcEdwcik7CkBAIC0xMTAyLDEzICsxMTEwLDE2IEBAIEZQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bChFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNDZWxsQCVkICAgIiwgbm9k
ZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5m
b3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBt
X3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3du
Q2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOworICAgIHZhbHVlLmZpbHRl
cihTcGVjQ2VsbCk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVy
KCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAtMTEy
MCw4ICsxMTMxLDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAog
ICAgICAgICAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYg
KG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZh
bHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkg
eworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5u
b2RlKCkpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3Rh
bnQpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwpAQCAtMTEzNyw3ICsxMTQ4LDcg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogCiAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlm
ICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJl
Y3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKICAgICAgICAgaW5m
by5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAg
IHJldHVybiBncHI7CiAgICAgfQpAQCAtMTE1Myw3ICsxMTY0LDcgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIo
KTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxh
dGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAg
ICB9CkBAIC0xMTc3LDEzICsxMTg4LDEzIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUNlbGwKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2xlYW4oTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQor
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2UsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNCb29sQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7CiAj
ZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1f
dHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShl
ZGdlKS5tX3R5cGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkpIHsKQEAgLTExOTUsOCArMTIwNiw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUJvb2wKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgp
OwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYgKGVkZ2Ut
Pmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVh
bigpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsK
QEAgLTEyMTMsNyArMTIyNCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUJvb2wKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1h
dEpTKTsKICAgICAgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbih0eXBlKSkgewogICAgICAg
ICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVl
RmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3Bl
Y3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BS
UmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwg
U3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlk
R1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0KICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVh
bik7CkBAIC0xMjMyLDcgKzEyNDMsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sCiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIGlmICghaXNCb29s
ZWFuU3BlY3VsYXRpb24odHlwZSkpIHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNw
ZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVh
blNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CiAgICAg
ICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAtMTI5MCwzNSArMTMwMSwyNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAKICAgICBpZiAo
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwot
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+U3Bl
Y09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAg
ICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGls
ZDEoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUgJiB+U3BlY09iamVjdCkg
ewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwKLSAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9D
SEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5v
ZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAg
ICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIo
KSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVj
dHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIo
KTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlm
IChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAotICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
REZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFH
UFIpLCBub2RlLT5jaGlsZDEoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzMjYsMTQgKzEzMjgs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAot
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAg
c3RydWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDJHUFIpLCBub2RlLT5jaGlsZDIoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzNjMsMjcgKzEz
NjIsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgCiAg
ICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQo
KSkgeyAKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChz
cGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobGVm
dENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAg
ICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVs
c2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJS
ZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hp
bGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MUdQUiksIGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0
LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAg
ICAgICAgICAgICAgc3RydWN0dXJlR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzOTks
MjcgKzEzOTIsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQog
ICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBi
ZSBhIGNlbGwuIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
aXNTdGlsbFZhbGlkKCkpIHsgCiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAoKG1fc3Rh
dGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkg
ewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBl
LCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0
LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwog
ICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZv
ck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNW
YWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3BlY09i
amVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE0MzcsMTIg
KzE0MjQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAg
IAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVz
dCBub3QgYmUgYSBjZWxsLiBDaGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3Zl
IHRoYXQgaXQgaXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLgotICAgIGlmICgobV9zdGF0ZS5m
b3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgJiB+U3BlY090aGVyKSB7Cisg
ICAgaWYgKG5lZWRzVHlwZUNoZWNrKHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkg
ewogICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQu
YW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLm5vZGUoKSwKKyAgICAg
ICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGls
ZC5ub2RlKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
NjQoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIs
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwp
KSk7CkBAIC0xNDczLDI3ICsxNDYwLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZU9iamUKICAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAo
bV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3Bl
Y09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0
aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAog
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0
YXRlLmZvck5vZGUobGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hp
bGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCAKQEAgLTE1MDksMjcgKzE0OTAsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBi
cmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlmIChtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQo
KSk7Ci0gICAgICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFNw
ZWNDZWxsKSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQs
Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAo
flNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1
Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwot
ICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2Vs
bCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
REZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENo
aWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZUdQUiwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCAKQEAgLTE1NDQsNyArMTUxOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRo
aXMgYnJhbmNoLCByaWdodENoaWxkIG11c3Qgbm90IGJlIGEgY2VsbC4gQ2hlY2sgaWYgdGhhdCBp
cyBlbm91Z2ggdG8KICAgICAvLyBwcm92ZSB0aGF0IGl0IGlzIGVpdGhlciBudWxsIG9yIHVuZGVm
aW5lZC4KLSAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiB+U3Bl
Y0NlbGwpICYgflNwZWNPdGhlcikKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKHJpZ2h0Q2hpbGQs
IFNwZWNDZWxsIHwgU3BlY090aGVyKSkKICAgICAgICAgcmlnaHROb3RDZWxsLmxpbmsoJm1faml0
KTsKICAgICBlbHNlIHsKICAgICAgICAganVtcChub3RUYWtlbiwgRm9yY2VKdW1wKTsKQEAgLTE1
NTMsOSArMTUyOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUK
ICAgICAgICAgbV9qaXQubW92ZShvcDJHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmFu
ZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3Vs
dEdQUik7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
QmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAgIG1f
aml0LmJyYW5jaDY0KAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhvcDJHUFIpLCByaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgbV9qaXQuYnJhbmNo
NjQoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIs
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwp
KSk7CiAgICAgfQpAQCAtMTYwOSw3ICsxNTgzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlQWRkKE5vZAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90
KEVkZ2Ugbm9kZVVzZSwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5vZGVVc2UpCiB7CiAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSk7CiAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKQEAgLTE2MTksMjcgKzE1OTMsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwg
PSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0KLSAg
ICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKLSAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkg
fCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0
dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigp
OwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogCi0gICAgICAg
IGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsCi0gICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hF
Q0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0Nl
bGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gCiAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKQEAgLTE2NjAsMTEgKzE2MjksMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdE9yT3RoZQogICAgIAogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwogCi0gICAg
aWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGVV
c2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgCi0gICAgICAg
ICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgbV9qaXQu
YnJhbmNoNjQoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKICAg
ICAgICAgICAgICAgICByZXN1bHRHUFIsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwpAQCAtMTY3OCwxMiArMTY0NywxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVMb2dpY2FsTm90KE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9i
amVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUtPmNoaWxkMSgpLAotICAgICAgICAgICAgIWlzT2Jq
ZWN0T3JPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlKSk7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNl
IE9iamVjdE9yT3RoZXJVc2U6IHsKKyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAKKyAgICBj
YXNlIEludDMyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2
YWx1ZSk7CiAgICAgICAgIG1faml0LmNvbXBhcmUzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZh
bHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkp
OwpAQCAtMTY5MSw3ICsxNjYxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2lj
YWxOb3QoTgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZv
cm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAKKyAgICBjYXNlIE51
bWJlclVzZTogewogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0xNzAzLDggKzE2NzQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCk7Ci0gICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KSB7CisgICAgY2FzZSBCb29sZWFuVXNlOiB7CiAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwpAQCAtMTcxNiwz
OSArMTY4Niw0OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7IC8vIEZJWE1FOiBXZSBjb3VsZCBy
ZXVzZSwgYnV0IG9uIHNwZWN1bGF0aW9uIGZhaWwgd291bGQgbmVlZCByZWNvdmVyeSB0byByZXN0
b3JlIHRhZyAoYWtpbiB0byBhZGQpLgogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1
ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5v
ZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJl
c3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAg
ICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWUuZ3ByKCkpLCBu
b2RlLT5jaGlsZDEoKSwgU3BlY0Jvb2xlYW4sIG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdC5ncHIoKSk7CiAg
ICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxk
IHVzZSBpdCBoZXJlLgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwg
RGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAg
ICAKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIAotICAgIEdQUlJlZyBhcmcxR1BSID0gYXJn
MS5ncHIoKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBH
UFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAgICAgCi0gICAgYXJnMS51c2UoKTsKKyAgICAgICAgYXJnMS51c2UoKTsK
ICAgICAKLSAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7Ci0gICAgbV9qaXQueG9y
NjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0
R1BSKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q2
NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSk7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogICAgIAotICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMs
IGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFHUFIpKTsKKyAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nh
c2UsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFHUFIp
KTsKICAgICAKLSAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIs
IG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CisgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIs
IG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2Rl
VXNlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRTcGVj
dWxhdGlvbkNoZWNrKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFu
Y2goRWRnZSBub2RlVXNlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuKQog
ewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOwogICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMTc1OSwyMyArMTczOSwxOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKIAot
ICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLAotICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVD
SygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2Vs
bCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIG5vZGVVc2UsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAg
ICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZh
bHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQ
dHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAg
ICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1f
aml0LmJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKQEAgLTE3OTEsMTAgKzE3NjcsMTIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIAogICAgIG5vdENl
bGwubGluaygmbV9qaXQpOwogICAgIAotICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewor
ICAgIGlmIChuZWVkc1R5cGVDaGVjayhub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsK
ICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG1faml0
LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNj
cmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgbm9kZVVzZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkp
KTsKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgbV9qaXQuYnJhbmNoNjQoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKICAgICB9CiAgICAganVtcChub3RUYWtl
bik7CiAgICAgCkBAIC0xODA2LDE0ICsxNzg0LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRCcmFuY2goTm9kZSogbm8KICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFrZW5CbG9j
a0luZGV4KCk7CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2tJ
bmRleCgpOwogICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlcigpKSB7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsK
KyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6IHsKICAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJC
cmFuY2gobm9kZS0+Y2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgCiAgICAgICAgICAgICAhaXNP
YmplY3RPck90aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIAorICAgIGNhc2UgSW50
MzJVc2U6CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBJbnQzMlVzZSkgewogICAgICAgICAgICAgYm9vbCBpbnZlcnQgPSBmYWxz
ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7
CkBAIC0xODM3LDU2ICsxODE3LDYyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2go
Tm9kZSogbm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKKyAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgY2FzZSBCb29sZWFuVXNlOiB7CisgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
ICAgICAgICAgCi0gICAgYm9vbCBwcmVkaWN0Qm9vbGVhbiA9IGlzQm9vbGVhblNwZWN1bGF0aW9u
KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOwotICAgIAotICAgIGlmIChwcmVkaWN0Qm9v
bGVhbikgewotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOworICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEJvb2xlYW5Vc2UpIHsKKyAgICAg
ICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0
Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7Ci0gICAgICAg
ICAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Olplcm87Ci0gICAgICAgICAgICAg
ICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRh
a2VuOwotICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgeworICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsKKyAgICAgICAgICAgICAgICAg
ICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgICAgICAgICAgdGFrZW4gPSBu
b3RUYWtlbjsKKyAgICAgICAgICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNvbmRp
dGlvbiwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMih0cnVlKSwgdGFrZW4pOwotICAgICAgICAgICAg
anVtcChub3RUYWtlbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBicmFuY2g2NChN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKLSAgICAg
ICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0
YWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgdmFsdWVHUFIs
IFRydXN0ZWRJbW0zMih0cnVlKSwgdGFrZW4pOworICAgICAgICAgICAgICAgIGp1bXAobm90VGFr
ZW4pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKKyAgICAgICAg
ICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
dGFrZW4pOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5qdW1w
KCkpOwotICAgICAgICB9Ci0gICAgICAgIHZhbHVlLnVzZSgpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSAmIFNwZWNJbnQzMikgewotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgYnJhbmNo
NjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgdGFrZW4pOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgdHlw
ZUNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNCb29sZWFu
LCBtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWUudXNlKCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVj
SW50MzIpIHsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bWJlcigwKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgdGFrZW4pOworICAgICAgICAgICAgfQogICAgIAotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNCb29sZWFuKSB7Ci0gICAgICAgICAgICBicmFu
Y2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsK
LSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCB0YWtlbik7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpICYgU3BlY0Jvb2xlYW4pIHsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKKyAgICAg
ICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSwgdGFrZW4pOworICAgICAgICAgICAgfQogICAgIAotICAgICAgICB2YWx1ZS51c2UoKTsKKyAg
ICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVl
VG9Cb29sZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVU
b0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOworICAgICAgICAgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgIAotICAgICAgICBicmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOwotICAgICAgICBqdW1wKG5vdFRh
a2VuKTsKKyAgICAgICAgICAgIGJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
cmVzdWx0R1BSLCB0YWtlbik7CisgICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgbm9SZXN1bHQo
bm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQpAQCAtMjEzMSwxOSArMjExNyw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKLSAgICBjYXNlIENoZWNrTnVtYmVyOiB7Ci0gICAgICAgIGlmICghaXNOdW1i
ZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsK
LSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMS5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAg
ICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICB9Ci0gICAgICAgIG5vUmVz
dWx0KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjYXNlIFZhbHVlQWRkOgog
ICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNvbXBpbGVBZGQobm9kZSk7CkBAIC0yMTYyLDIy
ICsyMTM1LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewor
ICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBjb21waWxlSW50ZWdlckFyaXRo
RGl2Rm9yWDg2KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAg
RlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigp
OwotICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQot
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgICAgICBGUFJSZWcg
cmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgICAgIG1faml0LmRpdkRvdWJsZShyZWcxLCByZWcy
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IGNhc2UgQXJpdGhNb2Q6IHsKQEAgLTIxODYsOCArMjE2Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0g
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW50MzJVc2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yMjAxLDE4ICsy
MTgxLDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5hYnNEb3VibGUob3AxLmZw
cigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBu
b2RlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2ppdC5hYnNEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0
aE1heDogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAg
ICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgc3dpdGNo
IChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogewogICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKQEAgLTIyMzEsMzcgKzIyMTgsNDQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgIGNhc2Ug
TnVtYmVyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZG9uZTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOwogICAgICAg
ICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1faml0LmJyYW5jaERv
dWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiA6IE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxLmZwcigpLCBvcDIuZnByKCkpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1faml0LmJyYW5jaERv
dWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiA6IE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxLmZwcigpLCBvcDIuZnByKCkpOwog
ICAgICAgICAKLSAgICAgICAgLy8gb3AyIGlzIGVhdGhlciB0aGUgbGVzc2VyIG9uZSBvciBvbmUg
b2YgdGhlbiBpcyBOYU4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AyTGVzcyA9IG1f
aml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWwgOiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFs
LCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgICAgICAvLyBvcDIgaXMgZWF0aGVyIHRo
ZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlzIE5hTgorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgb3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/
IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgOiBNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTGVzc1RoYW5PckVxdWFsLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CiAgICAgICAg
IAotICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGljaCBvZiBvcDEs
IG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCi0gICAgICAgIC8vIG9wMSAr
IG9wMiBhbmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4KLSAgICAgICAgbV9qaXQuYWRkRG91Ymxl
KG9wMS5mcHIoKSwgb3AyLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgLy8gVW5vcmRlcmVkIGNhc2UuIFdlIGRvbid0
IGtub3cgd2hpY2ggb2Ygb3AxLCBvcDIgaXMgTmFOLiBNYW51ZmFjdHVyZSBOYU4gYnkgYWRkaW5n
IAorICAgICAgICAgICAgLy8gb3AxICsgb3AyIGFuZCBwdXR0aW5nIGl0IGludG8gcmVzdWx0Lgor
ICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKG9wMS5mcHIoKSwgb3AyLmZwcigpLCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAg
Ci0gICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOwotICAgICAgICBtX2ppdC5tb3ZlRG91Ymxl
KG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIG9wMkxlc3MubGluaygmbV9q
aXQpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDIuZnByKCksIHJlc3VsdC5mcHIo
KSk7CiAgICAgICAgIAotICAgICAgICBpZiAob3AxLmZwcigpICE9IHJlc3VsdC5mcHIoKSkgewot
ICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIGlmIChv
cDEuZnByKCkgIT0gcmVzdWx0LmZwcigpKSB7CisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZt
X2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZw
cigpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwogICAgICAgICAKLSAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
ICAgICAgICAgCi0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRo
U3FydDogewpAQCAtMjYxNywxOCArMjYxMSwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czog
ewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKKyAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMywgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKIAogICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7
CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBl
KCkgPT0gQXJyYXk6OkludDMyCi0gICAgICAgICAgICAgICAgJiYgIWlzSW50MzJTcGVjdWxhdGlv
bihtX3N0YXRlLmZvck5vZGUoY2hpbGQzKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVSZWcpLCBjaGlsZDMsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVSZWcsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOworICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkludDMy
KSB7CisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHZhbHVlUmVnKSwgY2hpbGQzLCBTcGVjSW50MzIsCisgICAgICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBl
KCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMgJiYgSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkp
IHsKQEAgLTI5MzEsMTAgKzI5MjUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAK
LSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMy
ICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5t
X3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
ICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLT5jaGlsZDIoKSwK
LSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMikgeworICAgICAg
ICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjSW50MzIsCisgICAgICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkludDMyICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CkBAIC0y
OTYyLDEzICsyOTU3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CiAgICAgICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSB2YWx1ZS5mcHIoKTsKIAot
ICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
bmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0g
aW50bwotICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91Ymxl
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCB2YWx1ZUZQUiwgdmFs
dWVGUFIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIG5vZGUtPmNoaWxkMigpLCBTcGVjUmVhbE51bWJl
ciwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVlRlBSLCB2YWx1ZUZQUikpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0
aEdQUik7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZW
ZWN0b3JMZW5ndGgoKSkpOwpAQCAtMzE3MSw3ICszMTYyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1p
dGl2ZTogewotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICAvLyBJdCdzIHJlYWxseSBwcm9maXRh
YmxlIHRvIHNwZWN1bGF0ZSBpbnRlZ2VyLCBzaW5jZSBpdCdzIHJlYWxseSBjaGVhcCwKICAgICAg
ICAgICAgIC8vIGl0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IHJlYWwgd29yaywgYW5k
IHdlIGVtaXQgYSBsb3QgbGVzcyBjb2RlLgogICAgICAgICAgICAgCkBAIC0zMTg2LDMwICszMTc4
LDM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN0
cmluZyBzcGVjdWxhdGlvbiBoZXJlLgotICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEpOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIAotICAgICAgICBHUFJSZWcgb3AxR1BS
ID0gb3AxLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBvcDEudXNlKCk7
CisgICAgICAgICAgICBvcDEudXNlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIShtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH4oU3BlY051bWJlciB8IFNwZWNCb29s
ZWFuKSkpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0
aXZlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgaWYgKCEobV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjQm9vbGVhbikp
KQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFk
eVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
b3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAot
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlv
blRvUHJpbWl0aXZlLCByZXN1bHRHUFIsIG9wMUdQUikpOwotICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbChub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0aXZlLCByZXN1bHRHUFIs
IG9wMUdQUikpOworICAgICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTMyNTEsMTQg
KzMyNDgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKICAg
ICAgICAgICAgICAgICAgICAgRlBSUmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
dXNlKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVl
ZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50
bwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwgU3BlY1JlYWxOdW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBS
LCBvcEZQUikpOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShvcEZQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJsZSkgKiBvcGVy
YW5kSWR4KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
QEAgLTMyNjYsMTAgKzMyNTksMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6IHsKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1
c2UpOwogICAgICAgICAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS0+aW5kZXhpbmdUeXBlKCkpICYm
ICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9w
R1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZVJlZ3Mob3BHUFIpLCB1c2UsIFNwZWNJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChvcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpT
VmFsdWUpICogb3BlcmFuZElkeCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMz
MTksMTQgKzMzMTMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAg
ICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7CiAgICAgICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgICAgIGlmICghaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhl
c2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAgICAgICAv
LyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwg
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIERGR19UWVBFX0NI
RUNLKAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCB1c2UsIFNwZWNSZWFsTnVt
YmVyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwg
b3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKG9wRlBSLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1
ZmZlciArIG9wZXJhbmRJZHgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzMzNCwxMCAr
MzMyNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKICAgICAgICAgICAgICAgICBHUFJS
ZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihu
b2RlLT5pbmRleGluZ1R5cGUoKSkgJiYgIWlzSW50MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUodXNlKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcEdQUiksIHVz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpCZWxvdywgb3BHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAg
ICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlUmVncyhvcEdQUiksIHVzZSwgU3BlY0ludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQob3BHUFIsIGJ1ZmZl
ciArIG9wZXJhbmRJZHgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzU1OSwxNSArMzU1
MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgaWYgKGlzT2JqZWN0U3Bl
Y3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUpOwot
ICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0g
ICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlv
bihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIE90aGVyVXNlOiB7CiAgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcg
dGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwpAQCAtMzU4NCwzMCArMzU2OCw0MiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGlzT2JqZWN0U3BlY3VsYXRpb24o
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgY2FzZSBPYmplY3RVc2U6
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHRoaXNW
YWx1ZSk7CiAgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigp
OwogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHRoaXNWYWx1ZUdQUiksIG5v
ZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBK
SVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAg
ICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNoaWxk
MSgpLCBPYmplY3RVc2UsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHRo
aXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB0aGlzVmFsdWVH
UFIgPSB0aGlzVmFsdWUuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OwotICAgICAgICAKLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VGhpcywgcmVzdWx0LmdwcigpLCB0aGlzVmFsdWVH
UFIpOwotICAgICAgICAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQ
UlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbnZlcnRUaGlzLCByZXN1bHQuZ3ByKCksIHRoaXNWYWx1ZUdQUik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNDMyNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA4LDE0ICsxMDgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0
dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5v
ZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwg
bV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBt
X2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwg
dGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
RWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQo
KSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsK
ICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgp
LCBqdW1wVG9GYWlsKTsKIH0KIApAQCAtMTIzLDcgKzEyMyw3IEBAIE9TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnMKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKCk7Ci0gICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NF
UlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHVuc2lnbmVk
IGluZGV4ID0gbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mT1NSRXhpdHMoKTsKICAgICBtX2pp
dC5hcHBlbmRFeGl0SW5mbygpOwogICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0
KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CkBAIC0x
MzIsNyArMTMyLDcgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwog
CiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNl
KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5v
ZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwg
bV9jYW5FeGl0KTsKICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291
cmNlLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAKQEAgLTE0MCwxNCArMTQwLDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVt
cHNUb0ZhaWwpOwogICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQo
a2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlw
ZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwg
anNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBzVG9GYWlsKTsKIH0KIApAQCAtMTU1
LDcgKzE1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAg
IEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgbV9q
aXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwogICAg
IG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0ZhaWwpOwogICAgIG1faml0LmNvZGVCbG9jaygp
LT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgo
KS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+
c2l6ZSgpLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMo
KSkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9u
Q2hlY2soRXgKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVj
b3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJy
ZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJj
ZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIApAQCAtMTc4LDcg
KzE3OCw3IEBAIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSkkKIHsKICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2pp
dC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgT1NSRXhpdCYg
ZXhpdCA9IG1faml0LmNvZGVCbG9jaygpLT5vc3JFeGl0KAogICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KApAQCAtMjgwLDE0ICsyODAsMTQgQEAgSnVtcFJl
cGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpz
VmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1
bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CiAgICAg
Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1Zh
bHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3Zl
cnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50
Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8
fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwg
bm9kZSwganVtcHNUb0ZhaWwpOwogICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCh2YWx1
ZVJlY292ZXJ5KTsKIH0KQEAgLTMwMiw3ICszMDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGlvbkNoZWNrKEV4CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBO
b2RlKiBub2RlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAg
ZGF0YUxvZ0YoIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAjZW5kaWYKQEAg
LTMxNCwxMyArMzE0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0
aXYKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9kZVVzZSkKIHsK
LSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5j
YW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7CiAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1ZVJl
Z3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJl
Z3MsIE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0
KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7
CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVjdWxhdGl2
ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOwogI2VuZGlmCkBAIC0zMzAsNiArMzMwLDI2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKICAgICBtX2NvbXBpbGVPa2F5
ID0gZmFsc2U7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhKU1ZhbHVlU291
cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCit7CisgICAgQVNTRVJUKG5lZWRzVHlw
ZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCkpOworICAgIG1fc3RhdGUuZm9yTm9kZShl
ZGdlKS5maWx0ZXIodHlwZXNQYXNzZWRUaHJvdWdoKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIHNvdXJjZSwgZWRnZSwganVtcFRvRmFpbCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQoreworICAgIHR5cGVD
aGVjayhzb3VyY2UsIGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFpbCk7CisgICAg
Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjp0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgdHlwZUNo
ZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKTsKKyAgICBp
ZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgY29udmVydExhc3RP
U1JFeGl0VG9Gb3J3YXJkKCk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFkZFNsb3dQYXRo
R2VuZXJhdG9yKFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoR2VuZXJhdG9y
KQogewogICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzLmFwcGVuZChzbG93UGF0aEdlbmVyYXRvci5s
ZWFrUHRyKCkpOwpAQCAtMTUwOSwyMCArMTUyOSwyMCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVCcmFuCiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBu
b2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAgIEFTU0VSVChub2Rl
LT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKQorICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkKICAgICAg
ICAgICAgIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29u
ZGl0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpCiAgICAgICAgICAgICBjb21w
aWxlUGVlcEhvbGVEb3VibGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgZG91YmxlQ29uZGl0aW9u
KTsKICAgICAgICAgZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+
Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ1VzZSkpIHsKICAgICAgICAgICAgICAgICBub25TcGVj
dWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0
aW9uKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9k
ZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKQorICAgICAgICAgICAgaWYgKG5v
ZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAgICAgIGNvbXBpbGVQ
ZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGUpOwotICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNo
aWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICBlbHNl
IGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlICYmIG5vZGUtPmNoaWxk
MigpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQogICAgICAgICAgICAgICAgIGNvbXBp
bGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMSgpLCBu
b2RlLT5jaGlsZDIoKSwgYnJhbmNoTm9kZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigp
LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG5vZGUtPmNoaWxkMigpLnVz
ZUtpbmQoKSA9PSBPYmplY3RVc2UpCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2Jq
ZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMSgp
LCBicmFuY2hOb2RlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG5vblNw
ZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uLCBvcGVy
YXRpb24pOwpAQCAtMTY0NSw2ICsxNjY1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoQmFzaWNCbG9jayYKIAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5C
bG9jayA8IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAgICBtX2N1cnJl
bnROb2RlID0gYmxvY2tbbV9pbmRleEluQmxvY2tdOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICAgICAgbV9jYW5FeGl0ID0gbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpOworI2VuZGlmCisgICAg
ICAgIG1fc3RhdGUuc3RhcnRFeGVjdXRpbmcobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1faml0
LnNldEZvck5vZGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9
IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgIGlmICghbV9jdXJyZW50Tm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewpAQCAtMTkwNiwxMyArMTkzMCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlRG91YmxlUHV0QnlWCiAKICAgICBGUFJSZWcgdmFsdWVSZWcgPSB2YWx1
ZS5mcHIoKTsKICAgICAKLSAgICBpZiAoIWlzUmVhbE51bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShjaGlsZDMpLm1fdHlwZSkpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3
YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KLSAg
ICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICBt
X2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQsIHZhbHVlUmVnLCB2YWx1ZVJlZykpOwotICAgIH0KKyAgICBERkdfVFlQRV9DSEVDSygKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoKSwgY2hpbGQzLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgbV9q
aXQuYnJhbmNoRG91YmxlKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQsIHZhbHVlUmVnLCB2YWx1ZVJlZykpOwogICAgIAogICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjEwNCw3ICsyMTI1LDggQEAgR2VuZXJh
dGVkT3BlcmFuZFR5cGUgU3BlY3VsYXRpdmVKSVQ6OmNoZQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVUb0ludDMyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKQEAgLTIxMTIsMTI2ICsyMTM0LDYwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkgewotICAgICAg
ICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgICAgIAotICAgICAgICBt
X2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgbV9qaXQuYW5kMzIo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgCi0g
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEludGVn
ZXI6IHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAg
ICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG9wMS5mb3JtYXQoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kRG91YmxlOiB7Ci0gICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBEb3VibGVVc2UpKTsgLy8gU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCB3aWxsIGFzc2VydCB0aGF0IHRoaXMgaXMgYSBkb3VibGUgdXNlLiBX
ZSBmb3JjZSBpdCB0byB0aGluayB0aGF0IGl0IHdhcyBhIGRvdWJsZSB1c2UsIHNpbmNlIHdlIGFy
ZSBpbmZlcnJpbmcgdGhhdCB3ZSBvdWdodCB0byBlbWl0IGEgZG91YmxlIHVzZSBxdWl0ZSBsYXRl
LgotICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOwotICAgICAgICBHUFJSZWcgZ3ByID0g
cmVzdWx0LmdwcigpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUcnVuY2F0ZWRUb0lu
dGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENv
bXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKKyAgICBjYXNlIE51bWJlclVzZTogewor
ICAgICAgICBzd2l0Y2ggKGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSkgeworICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOiB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAg
ICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgb3AxLmZvcm1hdCgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmREb3Vi
bGU6IHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAg
ICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBG
UFJSZWcgZnByID0gb3AxLmZwcigpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdl
ciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGls
ZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgCi0gICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMs
IHRvSW50MzIsIGdwciwgZnByKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZw
cikpOwogCi0gICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBub2RlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRKU1ZhbHVlOiB7Ci0gICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICBHUFJSZWcg
Z3ByID0gb3AxLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKLSAgICAgICAgRlBSUmVnIGZw
ciA9IHRlbXBGcHIuZnByKCk7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2Vy
ID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3QgY29udmVydGVkOwotCi0gICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiBTcGVjQ2VsbCkKLSAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEl0J3Mg
bm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8g
MC4KLSAgICAgICAgICAgICAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBn
cHIsIFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHcHIpOwotICAgICAgICAgICAgICAg
IGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSlNWYWx1ZTogeworICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKIAotICAgICAg
ICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEg
SlNWYWx1ZQotICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsKLSAgICAgICAgdW5i
b3hEb3VibGUocmVzdWx0R3ByLCBmcHIpOwotCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdwcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3By
LCBmcHIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7Ci0KLSAg
ICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotCi0gICAgICAgIGlzSW50ZWdl
ci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGdwciwgcmVz
dWx0R3ByKTsKLQotICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwotI2Vsc2UKLSAgICAg
ICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gY2hpbGROb2RlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl07Ci0KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLQotICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7
Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29udmVydGVkOwotCi0gICAgICAgIGlmIChpbmZv
LnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcikKLSAgICAgICAgICAgIG1f
aml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIGdw
ciA9IG9wMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3By
KCk7CiAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKICAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CiAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdw
ciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7CiAKICAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQot
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwotICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIg
PSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3Bl
Y0NlbGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBncHIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0
dXJucyBpbnRvIDAuCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQm9v
bGVhbiA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAgICAgICAgbV9q
aXQuY29tcGFyZTY0KEpJVENvbXBpbGVyOjpFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoVmFsdWVU
cnVlKSwgcmVzdWx0R3ByKTsKICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aXNCb29sZWFuLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShw
YXlsb2FkR1BSLCByZXN1bHRHcHIpOwotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIs
IHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CisgICAgICAgICAgICAvLyBGaXJzdCwg
aWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQorICAg
ICAgICAgICAgbV9qaXQubW92ZShncHIsIHJlc3VsdEdwcik7CisgICAgICAgICAgICB1bmJveERv
dWJsZShyZXN1bHRHcHIsIGZwcik7CiAKICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdwcik7CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3Vs
dEdwciwgZnByKTsKQEAgLTIyNDAsMTcgKzIxOTYsOTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwogCiAgICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICAgICAgbV9qaXQu
emVyb0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHRHcHIpOwogCiAgICAgICAgICAgICBjb252ZXJ0
ZWQubGluaygmbV9qaXQpOwotICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgTm9kZSogY2hp
bGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IGNoaWxkTm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
ICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKKworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKworICAgICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQ
UigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgCisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29udmVydGVkOworCisgICAg
ICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIp
CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdH
UFIoKTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKKyAgICAgICAgICAgICAgICBG
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
dGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKworICAgICAgICAgICAg
ICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRh
Z0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBp
c051bWJlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgU3BlY0NlbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2Rl
LT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBp
bnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8gMC4KKyAgICAgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGlzQm9vbGVhbiA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVy
OjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdw
cik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaXNCb29s
ZWFuLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5
bG9hZEdQUiwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIs
IHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CisKKyAgICAgICAgICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOworICAgICAgICAgICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKKworICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIp
OworCisgICAgICAgICAgICAgICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IH0KICNlbmRpZgotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdwciwgbm9kZSk7CisgICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdwciwgbm9kZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY2FzZSBCb29sZWFuVXNlOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgCisgICAg
ICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5h
bmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICAKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIC8vIERvIGl0
IHRoZSBzYWZlIHdheS4KKyAgICAgICAgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVu
a25vd246CisgICAgICAgIAorICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQogfQog
CkBAIC0yNTM4LDQ5ICsyNTc1LDY0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckkKICAgICAgICAgbV9qaXQubW92ZShJbW0zMih0b0ludDMyKGQpKSwgc2NyYXRjaFJl
Zyk7CiAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwogICAgICAgICB2YWx1ZUdQUiA9IHNj
cmF0Y2hSZWc7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZVVzZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFs
dWVVc2UpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgR1BS
UmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICBtX2ppdC5tb3ZlKHZhbHVl
T3AuZ3ByKCksIHNjcmF0Y2hSZWcpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3Vu
ZGluZykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwotICAgICAgICAg
ICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7Ci0gICAgICAg
IH0KLSAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7Ci0gICAgICAgIHZhbHVlR1BSID0gc2Ny
YXRjaFJlZzsKLSAgICB9IGVsc2UgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAg
ICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICBGUFJUZW1wb3JhcnkgZmxvYXRTY3JhdGNoKHRoaXMpOwotICAg
ICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJl
c3VsdC5ncHIoKTsKLSAgICAgICAgY29tcGlsZUNsYW1wRG91YmxlVG9CeXRlKG1faml0LCBncHIs
IGZwciwgZmxvYXRTY3JhdGNoLmZwcigpKTsKLSAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsK
LSAgICAgICAgdmFsdWVHUFIgPSBncHI7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7Ci0g
ICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vdE5hTiA9IG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
RXF1YWwsIGZwciwgZnByKTsKLSAgICAgICAgbV9qaXQueG9yUHRyKGdwciwgZ3ByKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZml4ZWQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIG5v
dE5hTi5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVk
OwotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQotICAgICAgICAg
ICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBN
YWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9VaW50MzIoZnBy
LCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKLSAgICAgICAg
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChmYWlsZWQsIHRoaXMs
IHRvSW50MzIsIGdwciwgZnByKSk7Ci0KLSAgICAgICAgZml4ZWQubGluaygmbV9qaXQpOwotICAg
ICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwotICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAg
ICAgc3dpdGNoICh2YWx1ZVVzZS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTog
eworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1
ZVVzZSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICBpZiAocm91bmRp
bmcgPT0gQ2xhbXBSb3VuZGluZykgeworICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6
ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBjb21waWxlQ2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0
LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlLmFkb3B0KHNj
cmF0Y2gpOworICAgICAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE51bWJlclVzZTog
eworICAgICAgICAgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFy
eSBmbG9hdFNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVl
T3AuZnByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgICAgICAgICBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUobV9qaXQsIGdwciwgZnByLCBm
bG9hdFNjcmF0Y2guZnByKCkpOworICAgICAgICAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHI7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1
ZVVzZSk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBH
UFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vdE5hTiA9IG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
RXF1YWwsIGZwciwgZnByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC54b3JQdHIoZ3ByLCBncHIp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZpeGVkID0gbV9qaXQuanVt
cCgpOworICAgICAgICAgICAgICAgIG5vdE5hTi5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVkOworICAgICAg
ICAgICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgICAg
ICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIs
IGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1
bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1
bmNhdGVGYWlsZWQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChmYWlsZWQsIHRoaXMsIHRvSW50MzIsIGdwciwgZnBy
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZml4ZWQubGluaygmbV9qaXQp
OworICAgICAgICAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICAgICAg
dmFsdWVHUFIgPSBncHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICB9CisgICAgCiAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZUdQUiwgdmFsdWVHUFIgIT0gcHJvcGVy
dHkpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBiYXNlKTsKICAgICBBU1NFUlQodmFsdWVHUFIg
IT0gc3RvcmFnZVJlZyk7CkBAIC0yNzIyLDggKzI3NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSW5zdGFuY2VPZkZvCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0
YW5jZU9mKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCghIShub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpICYgflNwZWNDZWxsKSAmJiAhIShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0gICAgICAgIHx8IG5vZGUtPmNoaWxkMSgpLT5hZGp1c3Rl
ZFJlZkNvdW50KCkgPT0gMSkgeworICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSkgewogICAgICAgICAvLyBJdCBtaWdodCBub3QgYmUgYSBjZWxsLiBTcGVjdWxh
dGUgbGVzcyBhZ2dyZXNzaXZlbHkuCiAgICAgICAgIC8vIE9yOiBpdCBtaWdodCBvbmx5IGJlIHVz
ZWQgb25jZSAoaS5lLiBieSB1cyksIHNvIHdlIGdldCB6ZXJvIGJlbmVmaXQKICAgICAgICAgLy8g
ZnJvbSBzcGVjdWxhdGluZyBhbnkgbW9yZSBhZ2dyZXNzaXZlbHkgdGhhbiB3ZSBhYnNvbHV0ZWx5
IG5lZWQgdG8uCkBAIC0yOTYxLDkgKzMwMTIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVNvZnRNb2R1bG8oTgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUq
IG5vZGUpCiB7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkuYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2Fz
ZSBJbnQzMlVzZTogewogICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29u
c3RhbnRBc0ludDMyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90
IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKQEAgLTI5NzksNyAr
MzAzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAg
ICAgICAgICAgICAKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1i
ZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGlu
dDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2Rl
RmxhZ3MoKSkpIHsKQEAgLTMwMjEsOCArMzA3Myw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgaW50ZWdlclJlc3VsdChncHJSZXN1bHQsIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgICAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAKKyAgICBjYXNlIE51bWJlclVzZTogewogICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CkBAIC0zMDM0LDIy
ICszMDg2LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAg
ICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0KLSAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCkgeworICAgICAgICAKKyAg
ICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
bm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7CiAgICAgICAgIGNvbXBpbGVWYWx1ZUFkZChub2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhp
cyB5ZXQuIDotKAotICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCAwKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kZSogbm9kZSkKIHsKLSAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAg
c3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAg
ICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0lu
dDMyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKQEAgLTMwNjksNyArMzEyNSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25z
dGFudEFzSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3Qg
aW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgICAg
ICAKQEAgLTMwOTcsMjAgKzMxNTMsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
aXRoU3ViKE5vZAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIEZQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgRlBSUmVnIHJlZzEgPSBvcDEu
ZnByKCk7Ci0gICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgbV9qaXQuc3ViRG91Ymxl
KHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZw
cigpOworICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgbV9qaXQuc3Vi
RG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKLSAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9k
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZShOb2RlKiBub2Rl
KQogewotICAgIGlmIChtX2ppdC5ncmFwaCgpLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNh
c2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApA
QCAtMzEyOCwxNyArMzE5MywyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhO
ZWdhdGUoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotCi0gICAgbV9qaXQubmVnYXRlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0
LmZwcigpKTsKLQotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgIGNh
c2UgTnVtYmVyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgCisgICAgICAgIG1faml0Lm5lZ2F0ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIo
KSk7CisgICAgICAgIAorICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0K
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgaWYgKG1faml0LmdyYXBoKCkubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewor
ICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMzE2OSwxNyAr
MzI0MywyNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kCiAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLQotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7Ci0gICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7Ci0KLSAgICBGUFJS
ZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKICAgICAg
ICAgCi0gICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CisgICAg
Y2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxLCBvcDIpOworICAgICAgICAKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Cisg
ICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
bXVsRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIAorICAgICAgICBk
b3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICAgICAgCi0gICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIH0KIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCkBAIC0zMjg5LDI1
ICszMzcxLDMzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnRlZ2VyQXJpdGgKIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZGUqIG5vZGUpCiB7Ci0gICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAmJiBub2RlLT5jYW5T
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkg
eworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgY29tcGlsZVNvZnRNb2R1bG8obm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgIAotICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7Ci0gICAgRlBSUmVnIG9w
MkZQUiA9IG9wMi5mcHIoKTsKKyAgICAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKKyAg
ICAgICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5mcHIoKTsKICAgICAgICAgCi0gICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgCi0gICAgRlBSUmVz
dWx0IHJlc3VsdCh0aGlzKTsKLQotICAgIGNhbGxPcGVyYXRpb24oZm1vZEFzREZHT3BlcmF0aW9u
LCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKKyAgICAgICAgRlBSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24oZm1vZEFzREZHT3BlcmF0
aW9uLCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKKyAgICAgICAgCisgICAgICAgIGRv
dWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQog
ICAgICAgICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUgaXMgZnVzZWQg
d2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgpAQCAtMzMxNiwzMyArMzQwNiwzMyBAQCBib29sIFNw
ZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsCiAgICAgaWYgKGNvbXBpbGVQZWVwSG9s
ZUJyYW5jaChub2RlLCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0aW9uKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICBp
ZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewogICAgICAgICBjb21waWxlSW50
ZWdlckNvbXBhcmUobm9kZSwgY29uZGl0aW9uKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworCisgICAgaWYgKG5vZGUtPmlz
QmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7CiAgICAgICAgIGNvbXBpbGVEb3VibGVDb21wYXJl
KG5vZGUsIGRvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgCiAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtp
bmQoU3RyaW5nVXNlKSkgewogICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNv
bXBhcmUobm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkp
IHsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNl
KSkgewogICAgICAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBPYmplY3RVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9i
amVjdE9yT3RoZXJVc2UpIHsKICAgICAgICAgICAgIGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3Ro
ZXJFcXVhbGl0eShub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2RlLT5jaGlsZDIoKS0+
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9
PSBPYmplY3RVc2UpIHsKICAgICAgICAgICAgIGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJF
cXVhbGl0eShub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zNDMwLDcgKzM1MjAsOCBAQCBib29sIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDCiAKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVTdHJpY3RFcShOb2RlKiBub2RlKQogewotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewor
ICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJy
YW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7CiAg
ICAgICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Js
b2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKQEAgLTM0NDQsOCArMzUzNSw4IEBAIGJvb2wg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAgICAgY29tcGlsZUludGVn
ZXJDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9Ci0gICAgCi0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAg
CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJs
b2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5C
bG9jayAhPSBVSU5UX01BWCkgewogICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0
LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CkBAIC0z
NDU5LDEwICszNTUwLDEyIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShO
b2QKICAgICAgICAgY29tcGlsZURvdWJsZUNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUVxdWFsKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IG5vZGUtPmNoaWxkMigp
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdVc2U6
IHsKICAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7Ci0gICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIo
KS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
T2JqZWN0VXNlOiB7CiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVj
dFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlO
VF9NQVgpIHsKICAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1f
YmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOwpAQCAtMzQ3Niw4ICszNTY5
LDE1IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAgICAg
Y29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIAotICAgIHJldHVybiBub25TcGVjdWxhdGl2ZVN0cmljdEVxKG5vZGUpOworICAgICAg
ICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZl
U3RyaWN0RXEobm9kZSk7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZShOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTMgKzEy
MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgR1BSUmVnIGZpbGxJ
bnRlZ2VyKE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOworICAgIEdQUlJlZyBmaWxs
SW50ZWdlcihFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKKyAgICBHUFJSZWcgZmlsbEpTVmFs
dWUoRWRnZSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGJvb2wgZmlsbEpTVmFsdWUo
Tm9kZSosIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYpOworICAgIGJvb2wgZmlsbEpTVmFsdWUo
RWRnZSwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7CiAjZW5kaWYKLSAgICBHUFJSZWcgZmls
bFN0b3JhZ2UoTm9kZSopOworICAgIEdQUlJlZyBmaWxsU3RvcmFnZShFZGdlKTsKIAogICAgIC8v
IGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhHUFJS
ZWcgcmVnKQpAQCAtMjk1LDExICsyOTUsMTEgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVkIGJ5
IHRoZSBzcGVjdWxhdGl2ZSBvcGVyYW5kIHR5cGVzLCBiZWxvdywgdG8gZmlsbCBvcGVyYW5kIHRv
CiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGltcGxpY2l0bHkgZ2VuZXJhdGluZyBzcGVjdWxh
dGlvbiBjaGVja3MgYXMgbmVlZGVkLgotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KE5vZGUq
LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBH
UFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKik7Ci0gICAgRlBSUmVnIGZpbGxTcGVj
dWxhdGVEb3VibGUoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmls
bFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBH
UFJSZWcgZmlsbFNwZWN1bGF0ZUludChFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChF
ZGdlKTsKKyAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlLCBTcGVjdWxhdGlvbkRp
cmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24pOwogICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJhdGVk
VHlwZUZvclRvSW50MzIoTm9kZSopOwogCiAgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRvcihQ
YXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPik7CkBAIC01NDAsMTIgKzU0MCw2IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2pp
dC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQogICAgIGludDMyX3QgdmFsdWVP
ZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9m
SW50MzJDb25zdGFudChub2RlKTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
Tm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
bm9kZSk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIoTm9kZSog
bm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCi0gICAgICAg
ICAgICByZXR1cm4gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBK
U0M6OnRvSW50MzIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKLSAgICB9CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlKiBu
b2RlKSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlKTsgfQogI2Vu
ZGlmCkBAIC0yMDIzLDkgKzIwMTcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlT2JqZWN0
RXF1YWxpdHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVx
dWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpOwogICAgIHZvaWQgY29tcGls
ZVZhbHVlQWRkKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5v
dChFZGdlIHZhbHVlLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKKyAgICB2b2lkIGNvbXBp
bGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlKTsKICAgICB2b2lkIGNvbXBpbGVM
b2dpY2FsTm90KE5vZGUqKTsKLSAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ug
dmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIGJvb2wgbmVlZFNw
ZWN1bGF0aW9uQ2hlY2spOworICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2
YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbik7CiAgICAgdm9pZCBl
bWl0QnJhbmNoKE5vZGUqKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShO
b2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtMjE4OCw2ICsy
MTgyLDEyIEBAIHB1YmxpYzoKICAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBmb3J3YXJk
U3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kID0gVW5jb3VudGFibGVXYXRjaHBvaW50KTsK
ICAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhp
dEtpbmQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAKKyAgICAvLyBIZWxwZXJzIGZvciBw
ZXJmb3JtaW5nIHR5cGUgY2hlY2tzIG9uIGFuIGVkZ2Ugc3RvcmVkIGluIHRoZSBnaXZlbiByZWdp
c3RlcnMuCisgICAgYm9vbCBuZWVkc1R5cGVDaGVjayhFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBl
IHR5cGVzUGFzc2VkVGhyb3VnaCkgeyByZXR1cm4gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlw
ZSAmIH50eXBlc1Bhc3NlZFRocm91Z2g7IH0KKyAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVlU291
cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOworICAgIHZvaWQgZm9yd2FyZFR5cGVD
aGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBl
c1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmKTsKKyAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwg
RWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICAKICAgICBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2Rl
KTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlN
b2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5
cGUsIGJvb2wgaW52ZXJ0KTsKQEAgLTIyNDcsNiArMjI0Nyw5IEBAIHB1YmxpYzoKICAgICAvLyBU
aGUgY3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KICAgICBCbG9ja0luZGV4IG1fYmxvY2s7
CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYm9v
bCBtX2NhbkV4aXQ7CisjZW5kaWYKICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAgICAv
LyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgogICAgIFZlY3RvcjxHZW5lcmF0
aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87CkBAIC0yMzA1LDE3ICsyMzA4LDE3IEBAIHB1
YmxpYzoKIAogY2xhc3MgSW50ZWdlck9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IElu
dGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0
IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFuZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAg
ICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBt
X2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Zvcm1hdChEYXRhRm9ybWF0Tm9uZSkKICNlbmRpZgog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5k
KCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNl
S2luZCgpID09IEtub3duSW50MzJVc2UpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChlZGdl
Lm5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTIzMjUsOSArMjMyOCwx
NCBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAg
IH0KIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdl
OworICAgIH0KKyAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogICAg
IERhdGFGb3JtYXQgZm9ybWF0KCkKQEAgLTIzNDAsMjcgKzIzNDgsMjcgQEAgcHVibGljOgogICAg
IEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFs
aWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSW50ZWdl
cihub2RlKCksIG1fZm9ybWF0KTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQt
PmZpbGxJbnRlZ2VyKG1fZWRnZSwgbV9mb3JtYXQpOwogICAgICAgICByZXR1cm4gbV9ncHJPcklu
dmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0
LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJp
dmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAg
IEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBEYXRhRm9ybWF0
IG1fZm9ybWF0OwogfTsKIAogY2xhc3MgSlNWYWx1ZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4
cGxpY2l0IEpTVmFsdWVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAg
IGV4cGxpY2l0IEpTVmFsdWVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwg
T3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9u
KQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAg
ICAgICAgLCBtX2VkZ2UoZWRnZSkKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAsIG1fZ3By
T3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMjM2
OCwxNCArMjM3NiwxNCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7CisgICAg
ICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAoaml0
LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQog
ICAgICAgICAgICAgZ3ByKCk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBtX3Jl
Z2lzdGVyLnBhaXIudGFnR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICAgICAgbV9yZWdpc3Rlci5w
YWlyLnBheWxvYWRHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChtX25vZGUpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAg
ICAgZmlsbCgpOwogI2VuZGlmCiAgICAgfQpAQCAtMjM5NiwxNyArMjQwNCwyMiBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdl
KCkubm9kZSgpOwogICAgIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIGdwcigp
CiAgICAgewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAg
ICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxKU1ZhbHVlKG5vZGUoKSk7Cisg
ICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSlNWYWx1ZShtX2VkZ2UpOwog
ICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIEpTVmFsdWVSZWdzIGpz
VmFsdWVSZWdzKCkKQEAgLTI0MTksNyArMjQzMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbGwo
KQogICAgIHsKICAgICAgICAgaWYgKG1fcmVnaXN0ZXIucGFpci50YWdHUFIgPT0gSW52YWxpZEdQ
UlJlZyAmJiBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnKQotICAg
ICAgICAgICAgbV9pc0RvdWJsZSA9ICFtX2ppdC0+ZmlsbEpTVmFsdWUobm9kZSgpLCBtX3JlZ2lz
dGVyLnBhaXIudGFnR1BSLCBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiwgbV9yZWdpc3Rlci5m
cHIpOworICAgICAgICAgICAgbV9pc0RvdWJsZSA9ICFtX2ppdC0+ZmlsbEpTVmFsdWUobV9lZGdl
LCBtX3JlZ2lzdGVyLnBhaXIudGFnR1BSLCBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiwgbV9y
ZWdpc3Rlci5mcHIpOwogICAgIH0KIAogICAgIEdQUlJlZyB0YWdHUFIoKQpAQCAtMjQ1MSwxMiAr
MjQ2NCwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2pp
dC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHBy
aXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAg
ICBFZGdlIG1fZWRnZTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEdQUlJlZyBtX2dwck9ySW52
YWxpZDsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0yNDczLDE0ICsyNDg2LDE0IEBAIHBy
aXZhdGU6CiAKIGNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBT
dG9yYWdlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKKyAgICBleHBsaWNp
dCBTdG9yYWdlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UpCiAgICAgICAg
IDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1f
ZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAg
ewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAh
PSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAg
ICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAgICAgIGlmIChqaXQt
PmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAgICAgCkBAIC0y
NDkwLDI2ICsyNTAzLDMxIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9y
SW52YWxpZCk7CiAgICAgfQogICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KKyAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9k
ZSgpOwogICAgIH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmICht
X2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFs
aWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2Uobm9kZSgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZh
bGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGVkZ2UoKSk7CiAgICAgICAgIHJldHVybiBtX2dwck9y
SW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9q
aXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogICAg
IAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2Rl
OworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKQEAg
LTI2NDEsOSArMjY1OSw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZChTcGVj
dWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9u
ID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUg
bW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQp
Ci0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAg
ICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICNpZm5kZWYgTkRFQlVHCiAg
ICAgICAgICwgbV9mb3JtYXQoRGF0YUZvcm1hdE5vbmUpCkBAIC0yNjUxLDggKzI2NjksOCBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNl
KTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUKG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQz
MlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7CisgICAgICAgIGlmIChq
aXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTI2
NjEsMTAgKzI2NzksMTUgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQg
IT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQp
OwogICAgIH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0K
IAogICAgIERhdGFGb3JtYXQgZm9ybWF0KCkKQEAgLTI2NzcsMTggKzI3MDAsMTggQEAgcHVibGlj
OgogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09
IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxs
U3BlY3VsYXRlSW50KG5vZGUoKSwgbV9mb3JtYXQsIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnQoZWRnZSgpLCBtX2Zvcm1h
dCwgbV9kaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsK
KyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVj
dWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwog
ICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBEYXRhRm9ybWF0IG1fZm9ybWF0OwogICAg
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwpAQCAtMjY5NiwxNCArMjcxOSwxNCBA
QCBwcml2YXRlOgogCiBjbGFzcyBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZChTcGVjdWxhdGl2ZUpJ
VCogaml0LCBFZGdlIHVzZSkKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2Rl
IG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0
KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQog
ICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBB
U1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2Up
OwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQobW9k
ZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IEludDMy
VXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50MzJVc2UpKTsKKyAgICAgICAgaWYgKGpp
dC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjcx
Miw0MSArMjczNSw0NiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAh
PSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7
CiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQog
CiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0g
SW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxT
cGVjdWxhdGVJbnRTdHJpY3Qobm9kZSgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0g
bV9qaXQtPmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoZWRnZSgpKTsKICAgICAgICAgcmV0dXJuIG1f
Z3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAg
ICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9
CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9k
ZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCiBj
bGFzcyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxp
Y2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdl
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uLCBP
cGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24p
CiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAg
ICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZnByT3JJbnZhbGlkKEludmFsaWRGUFJS
ZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgPT0gRG91YmxlVXNlKTsK
LSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUKG1vZGUg
PT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBOdW1iZXJV
c2UgfHwgdXNlLnVzZUtpbmQoKSA9PSBLbm93bk51bWJlclVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9
PSBSZWFsTnVtYmVyVXNlKSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAg
ICAgICAgICAgICBmcHIoKTsKICAgICB9CiAKQEAgLTI3NTUsNDIgKzI3ODMsNDcgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQobV9mcHJPckludmFsaWQgIT0gSW52YWxpZEZQUlJlZyk7CiAgICAg
ICAgIG1faml0LT51bmxvY2sobV9mcHJPckludmFsaWQpOwogICAgIH0KKyAgICAKKyAgICBFZGdl
IGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CiAKICAg
ICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAg
ICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogICAgIEZQUlJlZyBmcHIoKQogICAg
IHsKICAgICAgICAgaWYgKG1fZnByT3JJbnZhbGlkID09IEludmFsaWRGUFJSZWcpCi0gICAgICAg
ICAgICBtX2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlRG91YmxlKG5vZGUoKSwg
bV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9mcHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNw
ZWN1bGF0ZURvdWJsZShlZGdlKCksIG1fZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZnBy
T3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBt
X2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAK
IHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsK
KyAgICBFZGdlIG1fZWRnZTsKICAgICBGUFJSZWcgbV9mcHJPckludmFsaWQ7CiAgICAgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCiBjbGFzcyBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRlQ2VsbE9wZXJhbmQoU3BlY3Vs
YXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9
IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgZXhwbGljaXQgU3BlY3VsYXRlQ2VsbE9wZXJhbmQo
U3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUg
PSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAg
ICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAg
ICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24o
ZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJU
KHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bV9ub2RlKSkKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
IHx8IChlZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3du
Q2VsbFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UgfHwgZWRnZS51c2VLaW5kKCkg
PT0gRnVuY3Rpb25Vc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSk7CisgICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAK
QEAgLTI3OTksNDIgKzI4MzIsNDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9ncHJPcklu
dmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPcklu
dmFsaWQpOwogICAgIH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwog
ICAgIH0KIAogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZh
bGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0
LT5maWxsU3BlY3VsYXRlQ2VsbChub2RlKCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1f
Z3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxsKGVkZ2UoKSwgbV9kaXJlY3Rp
b24pOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZv
aWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9q
aXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCog
bV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBt
X2dwck9ySW52YWxpZDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07
CiAKIGNsYXNzIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwg
U3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAg
ICBleHBsaWNpdCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBF
ZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3Vs
YXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVj
dWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2Rl
KCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52
YWxpZEdQUlJlZykKICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3Vi
bGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NF
UlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0g
Qm9vbGVhblVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAg
ICAgICBncHIoKTsKICAgICB9CiAgICAgCkBAIC0yODQ0LDMwICsyODgyLDQxIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogICAgIAorICAg
IEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0K
KyAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25v
ZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KICAgICAKICAgICBHUFJS
ZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BS
UmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUJv
b2xlYW4obm9kZSgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9
IG1faml0LT5maWxsU3BlY3VsYXRlQm9vbGVhbihlZGdlKCksIG1fZGlyZWN0aW9uKTsKICAgICAg
ICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAg
ICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9k
ZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAg
IE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFs
aWQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCisjZGVmaW5l
IERGR19UWVBFX0NIRUNLKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9G
YWlsKSBkbyB7IFwKKyAgICAgICAgaWYgKCFuZWVkc1R5cGVDaGVjaygoZWRnZSksICh0eXBlc1Bh
c3NlZFRocm91Z2gpKSkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
dHlwZUNoZWNrKChzb3VyY2UpLCAoZWRnZSksICh0eXBlc1Bhc3NlZFRocm91Z2gpLCAoanVtcFRv
RmFpbCkpOyBcCisgICAgfSB3aGlsZSAoMCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdVc2VLaW5kX2gKKyNkZWZpbmUgREZHVXNlS2lu
ZF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIFVzZUtpbmQgewor
ICAgIFVudHlwZWRVc2UsCisgICAgSW50MzJVc2UsCisgICAgS25vd25JbnQzMlVzZSwKKyAgICBS
ZWFsTnVtYmVyVXNlLAorICAgIE51bWJlclVzZSwKKyAgICBLbm93bk51bWJlclVzZSwKKyAgICBC
b29sZWFuVXNlLAorICAgIENlbGxVc2UsCisgICAgS25vd25DZWxsVXNlLAorICAgIE9iamVjdFVz
ZSwKKyAgICBPYmplY3RPck90aGVyVXNlLAorICAgIFN0cmluZ1VzZSwKKyAgICBOb3RDZWxsVXNl
LAorICAgIE90aGVyVXNlLAorICAgIExhc3RVc2VLaW5kIC8vIE11c3QgYWx3YXlzIGJlIHRoZSBs
YXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVy
IG9mIGVudW0gZWxlbWVudHMuCit9OworCitBTFdBWVNfSU5MSU5FIFNwZWN1bGF0ZWRUeXBlIHR5
cGVGaWx0ZXJGb3IoVXNlS2luZCB1c2VLaW5kKQoreworICAgIHN3aXRjaCAodXNlS2luZCkgewor
ICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNUb3A7CisgICAgY2FzZSBJ
bnQzMlVzZToKKyAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAgIHJldHVybiBTcGVjSW50
MzI7CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICByZXR1cm4gU3BlY0ludDMyOwor
ICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNSZWFsTnVtYmVyOwor
ICAgIGNhc2UgTnVtYmVyVXNlOgorICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIHJl
dHVybiBTcGVjTnVtYmVyOworICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgcmV0dXJuIFNw
ZWNCb29sZWFuOworICAgIGNhc2UgQ2VsbFVzZToKKyAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAg
ICAgICAgcmV0dXJuIFNwZWNDZWxsOworICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICByZXR1
cm4gU3BlY09iamVjdDsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CisgICAgICAgIHJldHVy
biBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAgIGNhc2UgU3RyaW5nVXNlOgorICAgICAgICBy
ZXR1cm4gU3BlY1N0cmluZzsKKyAgICBjYXNlIE5vdENlbGxVc2U6CisgICAgICAgIHJldHVybiB+
U3BlY0NlbGw7CisgICAgY2FzZSBPdGhlclVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNPdGhlcjsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gU3BlY1RvcDsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBpc051
bWVyaWNhbChVc2VLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJ
bnQzMlVzZToKKyAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgY2FzZSBSZWFsTnVtYmVyVXNl
OgorICAgIGNhc2UgTnVtYmVyVXNlOgorICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlVzZUtpbmQpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHVXNlS2luZF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189003</attachid>
            <date>2013-02-18 23:36:28 -0800</date>
            <delta_ts>2013-02-19 15:10:14 -0800</delta_ts>
            <desc>DFGSpeculativeJIT64 is done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>258952</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNjEgQEAgQWJzdHJh
Y3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9v
bGVhblJlc3VsdDsKIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlQobV9ibG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAg
CiAgICAgbV9kaWRDbG9iYmVyID0gZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIAogICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKQoreworICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5h
dChpbmRleEluQmxvY2spKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMo
Tm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBmaWx0ZXJFZGdlQnlVc2UpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdl
cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0
KGluZGV4SW5CbG9jaykpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2UoRWRn
ZSBlZGdlKQoreworICAgIEFTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0
ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5
RWRnZXMoTm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBo
LCBub2RlLCB2ZXJpZnlFZGdlKTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZm
ZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpCisgICAgICAgIHZlcmlmeUVkZ2VzKG5vZGUpOworICAgIAogICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdlYWtKU0Nv
bnN0YW50OgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czogewogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBJZGVudGl0eTogewogICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTI2NSwxOSArMjk2LDE2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lKSB7CiAg
ICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBib29sIGNh
bkV4aXQgPSBmYWxzZTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVz
Lm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKICAgICAgICAgaWYgKCF2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKHZhbHVlLmlz
Q2xlYXIoKSkKLSAgICAgICAgICAgICAgICBjYW5FeGl0IHw9IHRydWU7CisgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUu
dmFsdWUoKSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBm
b3JOb2RlKG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yODYsMzUgKzMxNCwxMCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1
ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewot
ICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKQotICAg
ICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkp
IHsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgbV92YXJp
YWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGVkVHlwZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJl
ZGljdGlvbigpOwotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRU
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIAogICAg
ICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMyMiw3ICszMjUsNiBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVl
biBzZXQuCiAgICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNjYs
NyArMzY4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHNw
ZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODEsMTYgKzM4MiwxNCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50
MzI6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CkBAIC00MDQsNyArNDAzLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNDIzLDE2ICs0MjEsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcih+U3BlY0NlbGwpOwot
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIp
OwogICAgICAgICBicmVhazsKQEAgLTQ0Nyw3ICs0MzUsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJl
clVuYXJ5KG5vZGUpOwogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKQEAgLTQ1NSwxMCArNDQyLDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAotICAgIGNhc2UgQ2hlY2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
ICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAgICAgSlNWYWx1
ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTQ2OSwzMCArNDUy
LDI1IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkg
ewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9k
ZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMy
VXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkK
KyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4
cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CisgICAgICAg
IGNhc2UgTnVtYmVyVXNlOgogICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKICAgICAgICAgICAgICAgICAmJiBpc1Jl
YWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQogICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09
IFZhbHVlQWRkKSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQzMiB8IFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAotICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCkBAIC01MDUsMTUgKzQ4MywxOSBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dy
YXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5i
aW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51
bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEFyaXRoTmVnYXRlOiB7CkBAIC01MjQsMTUgKzUwNiwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLm5l
Z2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
ZUludDMyVW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVt
YmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBB
cml0aE11bDogewpAQCAtNTQ0LDIxICs1MzAsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJp
bmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLAotICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwg
IW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMy
VXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKQor
ICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBp
ZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KQorICAgICAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZVJlYWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5v
ZGUpOwotICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24o
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBBcml0aERpdjoKQEAgLTU5NSwxNSArNTg0LDE4IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUsIHRydWUpOyAvLyBmb3JjaW5nIGNh
bi1leGl0LCB3aGljaCBpcyBhIGJpdCBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUuCisgICAgICAg
IHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBBcml0aEFiczogewpAQCAtNjE0LDE1ICs2MDYsMTggQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzJVbmFyeShub2RlLCB0cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0g
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7
CkBAIC02MzMsNyArNjI4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTY1NSwxOCArNjQ5LDE5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGlj
dGlvbigpKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAg
ICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgTnVtYmVyVXNl
OgorICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0
cmluZykgfCBTcGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwot
ICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc2NCwxNCArNzU5LDE3IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSog
Y2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNDZWxsU3Bl
Y3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXNT
dHJpbmdTcGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsK
KworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBj
YXNlIFN0cmluZ1VzZToKKyAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlw
ZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJl
YWs7CkBAIC04MjksNTkgKzgyNywxMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVh
bik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFu
dCkgewotICAgICAgICAgICAgLy8gV2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUg
TWFzcXVlcmFkZXNBc1VuZGVmaW5kIHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSogbGVm
dCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5j
aGlsZDIoKS5ub2RlKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKLSAgICAgICAg
U3BlY3VsYXRlZFR5cGVDaGVja2VyIGNoZWNrZXI7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewotICAgICAgICAgICAgZmlsdGVyID0gU3Bl
Y0ludDMyOwotICAgICAgICAgICAgY2hlY2tlciA9IGlzSW50MzJTcGVjdWxhdGlvbjsKLSAgICAg
ICAgfSBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdCwgcmlnaHQpKSB7
Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjTnVtYmVyOwotICAgICAgICAgICAgY2hlY2tlciA9
IGlzTnVtYmVyU3BlY3VsYXRpb247Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBD
b21wYXJlRXEpIHsKLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSB8fCByaWdodC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0gCi0gICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYg
cmlnaHQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihT
cGVjT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09i
amVjdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1
bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCk7
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmplY3QgfCBTcGVj
T3RoZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiByaWdodC0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3Qg
fCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVj
T2JqZWN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAKLSAgICAg
ICAgICAgIGZpbHRlciA9IFNwZWNUb3A7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVj
dWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmlsdGVyID0gU3BlY1Rv
cDsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FueVNwZWN1bGF0aW9uOwotICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIH0K
LSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAgICAgICFjaGVja2VyKGZvck5vZGUo
bGVmdCkubV90eXBlKQotICAgICAgICAgICAgfHwgIWNoZWNrZXIoZm9yTm9kZShyaWdodCkubV90
eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZv
ck5vZGUocmlnaHQpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICAvLyBUaGlzIGlzIG92ZXJseSBj
b25zZXJ2YXRpdmUuIEJ1dCB0aGUgb25seSB0aGluZyB0aGlzIHByZXZlbnRzIGlzIHN0b3JlIGVs
aW1pbmF0aW9uLAorICAgICAgICAvLyBhbmQgaG93IGxpa2VseSBpcyBpdCwgcmVhbGx5LCB0aGF0
IHlvdSdsbCBoYXZlIHJlZHVuZGFudCBzdG9yZXMgYWNyb3NzIGEgY29tcGFyaXNvbgorICAgICAg
ICAvLyBvcGVyYXRpb24/IENvbXBhcmlzb24gb3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IGF0IHRo
ZSBlbmQgb2YgYmFzaWMgYmxvY2tzLCBzbworICAgICAgICAvLyB1bmxlc3Mgd2UgaGF2ZSBnbG9i
YWwgc3RvcmUgZWxpbWluYXRpb24gKHN1cGVyIHVubGlrZWx5IGdpdmVuIGhvdyB1bnByb2ZpdGFi
bGUgdGhhdAorICAgICAgICAvLyBvcHRpbWl6YXRpb24gaXMgdG8gYmVnaW4gd2l0aCksIHlvdSBh
cmVuJ3QgZ29pbmcgdG8gYmUgd2FudGluZyB0byBzdG9yZSBlbGltaW5hdGUKKyAgICAgICAgLy8g
YWNyb3NzIGFuIGVxdWFsaXR5IG9wLgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTg5OCw0MyArODUwLDE3IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsK
LSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpIHsKLSAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdE5v
ZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcihsZWZ0Tm9kZSwgcmlnaHROb2RlKSkgewotICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGxlZnROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5v
ZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChs
ZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHROb2RlLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAg
ICAgICAgICAgIGZvck5vZGUobGVmdE5vZGUpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAg
ICAgIGZvck5vZGUocmlnaHROb2RlKS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZl
LgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNv
ZGVBdDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTk1NCwxNSArODgw
LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZVRvcCgpOwpAQCAtOTcwLDcgKzg5Myw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewog
ICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTgyLDQ4
ICs5MDQsMzggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhD
bGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNE
b3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTEwNDcsMTA0ICs5NTksMjMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAg
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJl
cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExNTIsMTYgKzk4Myw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IAogICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjUmVh
bE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjTnVtYmVy
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTc0LDExICs5OTUsNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFJlZ0V4cEV4
ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAg
ICAgICAgICAgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkKLSAgICAgICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxs
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCkBAIC0xMjAzLDI0ICsxMDE5LDEzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3
ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291cmNl
IHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhlIGJy
YW5jaC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNo
aWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoU3Bl
Y09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBtX2JyYW5jaERp
cmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBUaHJvdzoKQEAgLTEyMzAsMTcgKzEwMzUsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
VG9QcmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKGNoaWxk
KS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENvbnN0Lmlz
TnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI3NSwzOSArMTA3Nywx
NSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICB0eXBlIHw9IFNwZWNTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgZGVzdGluYXRpb24uc2V0
KHR5cGUpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBTdHJDYXQ6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5OgogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9VTkRF
Q0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGUtPm51bUNoaWxk
cmVuKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBv
cGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51
bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQotICAgICAgICAgICAgICAgIGZvck5vZGUobV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0p
LmZpbHRlcihTcGVjUmVhbE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
PmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTMyMCw3ICsxMDk4LDYgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgog
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0FycmF5KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTM0NywzMiArMTEyNCwyNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNoaWxkLT5w
cmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPdGhlcik7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
T3RoZXJVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVjdE90aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNP
YmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgc291
cmNlLmZpbHRlcihTcGVjT2JqZWN0KTsKKyAgICAgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShT
cGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIENyZWF0
ZVRoaXM6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShu
b2RlKTsKLSAgICAgICAgCi0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0
aW9uKHNvdXJjZS5tX3R5cGUpKTsKLSAgICAgICAgICAgIAotICAgICAgICBzb3VyY2UuZmlsdGVy
KFNwZWNGdW5jdGlvbik7Ci0gICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmluYWxPYmplY3Qp
OworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRmluYWxPYmplY3QpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTM4MSwxOSArMTE1MiwxNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVB
Y3RpdmF0aW9uOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9
IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50
czoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFy
Z3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMTQwNywxMCArMTE3NSw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoK
ICAgICAgICAgaWYgKGlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAgICAgICAgICBtX3Zhcmlh
Ymxlcy5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApA
QCAtMTQzMCw3ICsxMTk3LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xl
bmd0aFNhZmU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBU
aGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMg
b2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBw
cm9wZXJ0eS4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CkBAIC0xNDQ0LDcgKzEyMTAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9l
cyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQogICAgICAgICAv
LyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJlaW5nIGZ1cnRo
ZXIgb3B0aW1pemVkIGJ5IHRoZQogICAgICAgICAvLyBBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKQEAgLTE0NTMsOCArMTIxOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0
dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAgICAgICAvLyBhIGdl
dHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIC8vIEJ1dCB3ZSBk
byBzcGVjdWxhdGUgdGhhdCB0aGUgaW5kZXggaXMgYW4gaW50ZWdlci4KLSAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIC8vIEFuZCB0aGUg
cmVzdWx0IGlzIHVua25vd24uCiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAg
ICAgICBicmVhazsKQEAgLTE0NjIsMjkgKzEyMjUsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdG
dW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVj
dHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgot
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU2V0
Q2FsbGVlOgogICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRTY29wZTog
Ly8gRklYTUU6IFdlIGNvdWxkIGdldCByaWQgb2YgdGhlc2UgaWYgd2Uga25vdyB0aGF0IHRoZSBK
U0Z1bmN0aW9uIGlzIGEgY29uc3RhbnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDYyMDIKICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgY2FzZSBTa2lwVG9wU2Nv
cGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNraXBT
Y29wZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgSlNWYWx1
ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChj
aGlsZCAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxKU1Njb3BlKj4oY2hp
bGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7CkBAIC0xNDk1LDE4ICsxMjUzLDE0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOyAv
LyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTUxOCw4ICsxMjcyLDYgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAg
ICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsCkBAIC0xNTU1
LDcgKzEzMDcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIC8vIG1vcmUgdGhvcm91Z2hseS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNjIwMAogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZWxpbWluYXRlIHRo
ZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVlIHRoYXQgZmxvd3MgaW50byB0
aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2MjAxCi0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTE1NjQsNiArMTMxNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBj
b25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlw
ZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVu
c3VyZWQgdGhpcy4KICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1w
dGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBm
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFz
ZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQu
CkBAIC0xNTcxLDkgKzEzMjMsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vi
c2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
aXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3Vs
YXRpb24odmFsdWUubV90eXBlKSk7CisgICAgICAgIGlmICghdmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVy
ZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTE1OTEsNyArMTM0Miw2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gaW5maW5pdHkgb2Yg
c3RydWN0dXJlcy4KICAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAg
IAotICAgICAgICBBU1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZh
bHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVz
dC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgog
ICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKQEAgLTE2
MDAsNyArMTM1MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1
dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGlm
ICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVh
cigpKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKQEAgLTE2MTAsMTQgKzEzNTksMTEgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5j
bGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFs
cmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxvd2VkIGJ5
IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRoZXJlIGlz
IG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIgaGVyZS4KQEAgLTE2MzAsNyArMTM3
Niw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CkBAIC0xNjc5LDkgKzE0MjQs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIEFT
U0VSVChub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKICAg
ICAgICAgICAgIHx8IG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFn
ZUNvbnZlcnQpOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLT5hcnJheU1v
ZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSB0cnVlOwpAQCAtMTY5NCwzNSArMTQzNiwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAg
ICAgICAgIHZhbHVlLmZpbHRlcihzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5jbGVhcigpOwogICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6Ci0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkg
ewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9k
ZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlPZmZzZXQ6IHsKLSAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFsc2U7Ci0gICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhp
dCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkubV90eXBlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0xNzY2LDEyICsxNDkzLDEwIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCkBAIC0xNzgxLDM0ICsxNTA2LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgIGNh
c2UgUHV0R2xvYmFsVmFyQ2hlY2s6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToK
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHBy
b3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBw
cm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAgICAgICAgLy8g
RklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2Vz
IGFuIHVuY29uZGl0aW9uYWwgY2VsbAotICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQotICAgICAgICBpZiAoIShub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKSAmJiAhKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBG
bHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgY2FzZSBCcmVha3BvaW50
OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIENhbGw6CkBAIC0xODM2LDcgKzE1NTAsNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAg
ICBjYXNlIE5vcDoKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgotICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5v
ZGVUeXBlOgpAQCAtMTg0Nyw2ICsxNTYwLDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICByZXR1cm4gbV9pc1ZhbGlkOwogfQogCitib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAgIE5vZGUqIG5vZGUg
PSBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9k
ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsK
KyAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsKK30KKwogaW5s
aW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBjbG9iYmVyQ2FwdHVyZWRW
YXJzKGNvZGVPcmlnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDUy
IEBAIHB1YmxpYzoKICAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBhc3QgdGhp
cyBub2RlLiBOb3RhYmx5LCBpdCB3aWxsIHJldHVybiB0cnVlCiAgICAgLy8gZm9yIGJsb2NrIHRl
cm1pbmFscywgc28gbG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4gb3IgdmFy
aWFudHMKICAgICAvLyBvZiBUaHJvdy4KLSAgICBib29sIGV4ZWN1dGUodW5zaWduZWQpOworICAg
IC8vCisgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gZG9pbmc6
CisgICAgLy8KKyAgICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7CisgICAg
Ly8gICAgIHN0YXRlLmV4ZWN1dGVFZGdlcyhpbmRleCk7CisgICAgLy8gICAgIHJlc3VsdCA9IHN0
YXRlLmV4ZWN1dGVFZmZlY3RzKGluZGV4KTsKKyAgICAvLyB9IGVsc2UKKyAgICAvLyAgICAgcmVz
dWx0ID0gdHJ1ZTsKKyAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAg
ICAKKyAgICAvLyBJbmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJ
dCByZXNldHMgYW55IHN0YXRlIGluIHRoZSBub2RlLAorICAgIC8vIHRoYXQgaXMgcHJvZ3Jlc3Np
dmVseSBidWlsdCB1cCBieSBleGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVjdHMoKS4gSW4K
KyAgICAvLyBwYXJ0aWN1bGFyLCB0aGlzIHJlc2V0cyBjYW5FeGl0KCksIHNvIGlmIHlvdSB3YW50
IHRvICJrbm93IiBiZXR3ZWVuIGNhbGxzIG9mCisgICAgLy8gc3RhcnRFeGVjdXRpbmcoKSBhbmQg
ZXhlY3V0ZUVkZ2VzKCkvRWZmZWN0cygpIHdoZXRoZXIgdGhlIGxhc3QgcnVuIG9mIHRoZQorICAg
IC8vIGFuYWx5c2lzIGNvbmNsdWRlZCB0aGF0IHRoZSBub2RlIGNhbiBleGl0LCB5b3Ugc2hvdWxk
IHByb2JhYmx5IHNldCB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24gYXNpZGUgcHJpb3IgdG8gY2Fs
bGluZyBzdGFydEV4ZWN1dGluZygpLgorICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcoTm9kZSopOwor
ICAgIHZvaWQgc3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAg
ICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlz
IHJ1bnMgZmlsdGVyRWRnZUJ5VXNlKCkKKyAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUu
IFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZAorICAgIC8v
IGZpbHRlckVkZ2VCeVVzZSgpIChvciBzb21lIGVxdWl2YWxlbnQpIG9uIGVhY2ggZWRnZS4KKyAg
ICB2b2lkIGV4ZWN1dGVFZGdlcyhOb2RlKik7CisgICAgdm9pZCBleGVjdXRlRWRnZXModW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVyRWRn
ZUJ5VXNlKEVkZ2UgZWRnZSkKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBz
d2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAg
ICAgICAgY2FzZSBLbm93bk51bWJlclVzZToKKyAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6Cisg
ICAgICAgICAgICBBU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9y
KGVkZ2UudXNlS2luZCgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKKyAgICAgICAgCisgICAgICAgIGZpbHRlckJ5VHlwZShlZGdlLm5vZGUoKSwgdHlwZUZpbHRl
ckZvcihlZGdlLnVzZUtpbmQoKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0cmFjdGx5IGV4
ZWN1dGUgdGhlIGVmZmVjdHMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgY2hhbmdlcyB0aGUgYWJz
dHJhY3QKKyAgICAvLyBzdGF0ZSBhc3N1bWluZyB0aGF0IGVkZ2VzIGhhdmUgYWxyZWFkeSBiZWVu
IGZpbHRlcmVkLgorICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2Nr
KTsKKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSop
OwogICAgIAogICAgIC8vIERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2JiZXIgdGhlIHdv
cmxkPwogICAgIGJvb2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsg
fQpAQCAtMjU5LDYgKzMwNCwxNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2Rl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBmb3JOb2RlKG5vZGUpOworICAgICAgICBpZiAodmFsdWUubV90eXBlICYgfnR5cGUpCisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICB2YWx1ZS5maWx0ZXIo
dHlwZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdmVyaWZ5RWRnZShFZGdlKTsKKyAgICB2b2lk
IHZlcmlmeUVkZ2VzKE5vZGUqKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwog
ICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQs
NiArMjM0LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmlsdGVy
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90Cisg
ICAgICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2
YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwOTY2MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJl
cygpOwogICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1
cmVzKCk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFkamFj
ZW5jeUxpc3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7CiAg
ICAgICAgIGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBdLm1f
ZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU4LDE4ICs1NSwxMiBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBOb2RlKiBjaGlsZDEsIE5vZGUq
IGNoaWxkMiwgTm9kZSogY2hpbGQzKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBt
X2tpbmQoRml4ZWQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwg
a2luZCA9PSBGaXhlZCk7CiAgICAgICAgIGluaXRpYWxpemUoY2hpbGQxLCBjaGlsZDIsIGNoaWxk
Myk7CiAgICAgfQogICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCB1bnNpZ25lZCBm
aXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgICAgIDogbV9raW5kKFZhcmlhYmxlKQotI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlRf
VU5VU0VEKGtpbmQsIGtpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBzZXRGaXJzdENoaWxkKGZp
cnN0Q2hpbGQpOwpAQCAtNzksMjEgKzcwLDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBFZGdlJiBj
aGlsZCh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsK
LSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRz
W2ldOwogICAgIH0gICAgCiAgICAgCiAgICAgRWRnZSYgY2hpbGQodW5zaWduZWQgaSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4
ZWQpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1tpXTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBz
ZXRDaGlsZCh1bnNpZ25lZCBpLCBFZGdlIG5vZGVVc2UpCiAgICAgewogICAgICAgICBBU1NFUlQo
aSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgbV93
b3Jkc1tpXSA9IG5vZGVVc2U7CiAgICAgfQogICAgIApAQCAtMTI1LDkgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgICAgICBtX2tpbmQgPSBGaXhlZDsKLSNlbmRpZgogICAgICAgICBpbml0aWFsaXplKCk7CiAg
ICAgfQogICAgIApAQCAtMTQyLDM0ICsxMjcsMjQgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQg
Zmlyc3RDaGlsZCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlh
YmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZDsKICAgICB9CiAg
ICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCiAgICAgewotICAgICAg
ICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1swXS5tX2VuY29k
ZWRXb3JkID0gZmlyc3RDaGlsZDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtQ2hpbGRy
ZW4oKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAg
ICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CiAgICAgfQogICAgIHZvaWQg
c2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBBU1NF
UlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgbV93b3Jkc1sxXS5tX2VuY29kZWRXb3Jk
ID0gbnVtQ2hpbGRyZW47CiAgICAgfQogICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSNlbmRpZgogcHJpdmF0ZToKICAg
ICBFZGdlIG1fd29yZHNbU2l6ZV07Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQgbV9r
aW5kOwotI2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0MzI3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vICAg
YW55dGhpbmcuIFlvdSBjYW4ganVzdCBjYWxsIGZyZWVBbGwoKSBpbnN0ZWFkLgogLy8gLSBZb3Ug
Y2FsbCBmcmVlKCkgb24gYWxsIFQncyB0aGF0IHlvdSBhbGxvY2F0ZWQsIGFuZCBuZXZlciB1c2Ug
ZnJlZUFsbCgpLgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gZm9yY2VkQ2VsbFNpemU6IHNl
dCB0aGlzIHRvIDAgaWYgeW91J3JlIGhhcHB5IHdpdGggdGhlIGRlZmF1bHQgYWxpZ25tZW50LCBv
ciBzZXQgaXQKKy8vIHRvIGEgbm9uLXplcm8gdmFsdWUgaWYgeW91IHdhbnQgdG8gZm9yY2libHkg
YWxpZ24gdGhlIGFsbG9jYXRpb25zIHRvIGEgY2VydGFpbgorLy8gdmFsdWUuIFdoZW4geW91IGRv
IHRoaXMsIEFsbG9jYXRvciB3aWxsIEFTU0VSVCB0aGF0IGZvcmNlZENlbGxBbGlnbm1lbnQgPj0g
c2l6ZW9mKFQpLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxp
Z25tZW50PgogY2xhc3MgQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICBBbGxvY2F0b3IoKTsKQEAg
LTYzLDEzICs2NywyNCBAQCBwcml2YXRlOgogICAgIHZvaWQqIGJ1bXBBbGxvY2F0ZSgpOwogICAg
IHZvaWQqIGZyZWVMaXN0QWxsb2NhdGUoKTsKICAgICB2b2lkKiBhbGxvY2F0ZVNsb3coKTsKLQor
ICAgIAorICAgIHN0YXRpYyBzaXplX3QgY2VsbFNpemUoKQorICAgIHsKKyAgICAgICAgaWYgKCFm
b3JjZWRDZWxsQWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihUKTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChmb3JjZWRDZWxsQWxpZ25tZW50ID49IHNpemVvZihUKSk7Cisg
ICAgICAgIHJldHVybiBmb3JjZWRDZWxsQWxpZ25tZW50OworICAgIH0KKyAgICAKICAgICBzdHJ1
Y3QgUmVnaW9uIHsKICAgICAgICAgc3RhdGljIHNpemVfdCBzaXplKCkgeyByZXR1cm4gNjQgKiBL
QjsgfQotICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1h
eChzaXplb2YoUmVnaW9uKSwgc2l6ZW9mKFQpKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQg
bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVyU2l6ZSgp
KSAvIHNpemVvZihUKTsgfQotICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0
PFQqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpKTsgfQotICAgICAg
ICBib29sIGlzSW5UaGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihwb2ludGVyIC0gZGF0YSgpKSA8IG51bWJlck9mVGhpbmdzUGVyUmVnaW9u
KCk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3RkOjpt
YXgoc2l6ZW9mKFJlZ2lvbiksIGNlbGxTaXplKCkpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBoZWFkZXJTaXpl
KCkpIC8gY2VsbFNpemUoKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IHBheWxvYWRTaXplKCkg
eyByZXR1cm4gbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSAqIGNlbGxTaXplKCk7IH0KKyAgICAg
ICAgY2hhciogcGF5bG9hZEJlZ2luKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSArIGhlYWRlclNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkRW5kKCkgeyByZXR1cm4g
cGF5bG9hZEJlZ2luKCkgKyBwYXlsb2FkU2l6ZSgpOyB9CisgICAgICAgIGJvb2wgaXNJblRoaXNS
ZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpIC0gcGF5bG9hZEJlZ2luKCkpIDwgcGF5bG9hZFNpemUo
KTsgfQogICAgICAgICBzdGF0aWMgUmVnaW9uKiByZWdpb25Gb3IoY29uc3QgVCogcG9pbnRlcikg
eyByZXR1cm4gYml0d2lzZV9jYXN0PFJlZ2lvbio+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpICYgfihzaXplKCkgLSAxKSk7IH0KICAgICAgICAgCiAgICAgICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBtX2FsbG9jYXRpb247CkBAIC04MiwyNiArOTcsMjYgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBSZWdpb24qIG1fcmVnaW9uSGVhZDsKICAgICB2b2lkKiogbV9mcmVlTGlzdEhlYWQ7
Ci0gICAgVCogbV9idW1wRW5kOwotICAgIHVuc2lnbmVkIG1fYnVtcFJlbWFpbmluZzsKKyAgICBj
aGFyKiBtX2J1bXBFbmQ7CisgICAgc2l6ZV90IG1fYnVtcFJlbWFpbmluZzsKIH07CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+OjpBbGxvY2F0b3IoKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK2lubGluZSBBbGxv
Y2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OkFsbG9jYXRvcigpCiAgICAgOiBtX3JlZ2lv
bkhlYWQoMCkKICAgICAsIG1fZnJlZUxpc3RIZWFkKDApCiAgICAgLCBtX2J1bXBSZW1haW5pbmco
MCkKIHsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46On5B
bGxvY2F0b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK2lubGluZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46On5BbGxvY2F0
b3IoKQogewogICAgIHJlc2V0KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BTFdBWVNf
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoKQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19JTkxJTkUgdm9pZCogQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCog
cmVzdWx0ID0gYnVtcEFsbG9jYXRlKCk7CiAgICAgaWYgKExJS0VMWSghIXJlc3VsdCkpCkBAIC0x
MDksOCArMTI0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYQog
ICAgIHJldHVybiBmcmVlTGlzdEFsbG9jYXRlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2Vk
Q2VsbEFsaWdubWVudD46OmZyZWUoVCogb2JqZWN0KQogewogICAgIG9iamVjdC0+flQoKTsKICAg
ICAKQEAgLTExOSw4ICsxMzQsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZShUKiBvYmplY3Qp
CiAgICAgbV9mcmVlTGlzdEhlYWQgPSBjZWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
dm9pZCBBbGxvY2F0b3I8VD46OmZyZWVBbGwoKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGln
bm1lbnQ+OjpmcmVlQWxsKCkKIHsKICAgICBpZiAoIW1fcmVnaW9uSGVhZCkgewogICAgICAgICBB
U1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CkBAIC0xNDIsOCArMTU3LDggQEAgdm9pZCBBbGxvY2F0
b3I8VD46OmZyZWVBbGwoKQogICAgIHN0YXJ0QnVtcGluZ0luKG1fcmVnaW9uSGVhZCk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6cmVzZXQoKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2Nh
dG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpyZXNldCgpCiB7CiAgICAgZnJlZVJlZ2lvbnNT
dGFydGluZ0F0KG1fcmVnaW9uSGVhZCk7CiAgICAgCkBAIC0xNTIsMzggKzE2NywzOCBAQCB2b2lk
IEFsbG9jYXRvcjxUPjo6cmVzZXQoKQogICAgIG1fYnVtcFJlbWFpbmluZyA9IDA7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci11bnNpZ25lZCBBbGxvY2F0b3I8VD46OmluZGV4T2YoY29uc3Qg
VCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK3Vuc2lnbmVkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6aW5kZXhP
Zihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgdW5zaWduZWQgYmFzZUluZGV4ID0gMDsKICAgICBm
b3IgKFJlZ2lvbiogcmVnaW9uID0gbV9yZWdpb25IZWFkOyByZWdpb247IHJlZ2lvbiA9IHJlZ2lv
bi0+bV9uZXh0KSB7CiAgICAgICAgIGlmIChyZWdpb24tPmlzSW5UaGlzUmVnaW9uKG9iamVjdCkp
Ci0gICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKG9iamVjdCAtIHJlZ2lvbi0+ZGF0YSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAoYml0d2lzZV9jYXN0PGNoYXIqPihv
YmplY3QpIC0gcmVnaW9uLT5wYXlsb2FkQmVnaW4oKSkgLyBjZWxsU2l6ZSgpOwogICAgICAgICBi
YXNlSW5kZXggKz0gUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwogICAgIH0KICAg
ICBDUkFTSCgpOwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQWxs
b2NhdG9yPFQ+KiBBbGxvY2F0b3I8VD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBbGxvY2F0
b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD4qIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25t
ZW50Pjo6YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHJldHVybiBSZWdpb246
OnJlZ2lvbkZvcihvYmplY3QpLT5tX2FsbG9jYXRvcjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjpidW1wQWxsb2NhdGUoKQordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FMV0FZU19J
TkxJTkUgdm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpidW1wQWxsb2Nh
dGUoKQogewotICAgIGlmICh1bnNpZ25lZCByZW1haW5pbmcgPSBtX2J1bXBSZW1haW5pbmcpIHsK
LSAgICAgICAgcmVtYWluaW5nLS07CisgICAgaWYgKHNpemVfdCByZW1haW5pbmcgPSBtX2J1bXBS
ZW1haW5pbmcpIHsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplKCk7CiAgICAgICAgIG1f
YnVtcFJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChy
ZW1haW5pbmcgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1fYnVtcEVuZCAtIChyZW1haW5pbmcgKyBj
ZWxsU2l6ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci12b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFsbG9jYXRvcjxU
LCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiB7CiAgICAgdm9pZCoq
IHJlc3VsdCA9IG1fZnJlZUxpc3RIZWFkOwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKQEAg
LTE5Miw4ICsyMDcsOCBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmZyZWVMaXN0QWxsb2NhdGUoKQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkKiBBbGxv
Y2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBm
b3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1l
bnQ+OjphbGxvY2F0ZVNsb3coKQogewogICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQpOwogICAg
IEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTIxNiw4ICsyMzEsOCBAQCB2b2lkKiBBbGxv
Y2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQo
dHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KHR5cGVuYW1lIEFsbG9jYXRv
cjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24pCiB7CiAgICAgd2hpbGUg
KHJlZ2lvbikgewogICAgICAgICBSZWdpb24qIG5leHRSZWdpb24gPSByZWdpb24tPm1fbmV4dDsK
QEAgLTIyNiwxMSArMjQxLDExIEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlUmVnaW9uc1N0YXJ0
aW5nQXQKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxU
Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5hbWUgQWxsb2NhdG9yPFQ+OjpSZWdpb24qIHJlZ2lvbikK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lk
IEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6c3RhcnRCdW1waW5nSW4odHlwZW5h
bWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsK
LSAgICBtX2J1bXBFbmQgPSByZWdpb24tPmRhdGEoKSArIFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQ
ZXJSZWdpb24oKTsKLSAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246Om51bWJlck9mVGhpbmdz
UGVyUmVnaW9uKCk7CisgICAgbV9idW1wRW5kID0gcmVnaW9uLT5wYXlsb2FkRW5kKCk7CisgICAg
bV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpwYXlsb2FkU2l6ZSgpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjUs
NyArMTQ2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAg
ICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsgLy8gTWF0aC5t
aW4oeCkKICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMSkpOwotICAgICAgICBhZGRUb0dyYXBoKENoZWNrTnVtYmVyLCByZXN1bHQp
OworICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIEVkZ2UocmVzdWx0LCBOdW1iZXJVc2UpKTsK
ICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTY5
LDcgKzk2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNzaW5nIGFyZ3Vt
ZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkFyZ3Vt
ZW50cykKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMTAxNCwxOCArMTAx
NCwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVudW0gUHJlZGlj
dGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQcmVkaWN0aW9u
TWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50LCBQ
cmVkaWN0aW9uSGFuZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJlU2Ft
ZVByZWRpY3Rpb24pCisgICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVudCkK
ICAgICB7CiAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAotICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9ybSBy
ZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0Ci0gICAgICAgIC8vIGFncmVlLgot
ICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVByZWRpY3Rp
b24KLSAgICAgICAgICAgICYmIG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSAhPSByZXBsYWNl
bWVudC0+cHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFM
b2dGKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJl
cGxhY2VtZW50LT5pbmRleCgpKTsKICNlbmRpZgpAQCAtMTIzMCw3ICsxMjIzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICAgICAgLy8gVGhpcyBpcyBzdHJh
bmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxsIGNvbnZlcnQgbm9kZXMgdG8gY29u
c3RhbnRzLAogICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGVkIGNv
bnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVwLgotICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSksIEFsbG93UHJlZGljdGlvbk1pc21hdGNoKTsKKyAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MzI3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgzLDEyICs4Myw2IEBAIHN0cnVjdCBOb2RlUG9pbnRlclRyYWl0cyB7CiAgICAgc3RhdGljIHZv
aWQgZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiB9OwogCi1lbnVtIFVzZUtp
bmQgewotICAgIFVudHlwZWRVc2UsCi0gICAgRG91YmxlVXNlLAotICAgIExhc3RVc2VLaW5kIC8v
IE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2Vk
IHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMuCi19OwotCiAvLyBVc2UgUmVm
Q2hpbGRyZW4gaWYgdGhlIGNoaWxkIHJlZiBjb3VudHMgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gYWRq
dXN0ZWQgdXNpbmcKIC8vIG90aGVyIG1lYW5zIGFuZCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBp
cyB0cnVlOgogLy8gLSBUaGUgbm9kZSB5b3UncmUgY3JlYXRpbmcgaXMgTXVzdEdlbmVyYXRlLgpA
QCAtMTA2LDE5ICsxMDAsNiBAQCBlbnVtIFJlZk5vZGVNb2RlIHsKICAgICBEb250UmVmTm9kZQog
fTsKIAotaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaW5kIHVzZUtpbmQp
Ci17Ci0gICAgc3dpdGNoICh1c2VLaW5kKSB7Ci0gICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAg
ICByZXR1cm4gIiI7Ci0gICAgY2FzZSBEb3VibGVVc2U6Ci0gICAgICAgIHJldHVybiAiZCI7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiBpbmxpbmUgYm9vbCBpc0FSTXY3cygpCiB7CiAjaWYg
Q1BVKEFQUExFX0FSTVY3UykKQEAgLTIzNiw2ICsyMTcsOCBAQCBlbnVtIFVuaWZpY2F0aW9uU3Rh
dGUgewogICAgIEdsb2JhbGx5VW5pZmllZAogfTsKIAorZW51bSBPcGVyYW5kU3BlY3VsYXRpb25N
b2RlIHsgQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24gfTsKKwogZW51bSBTcGVjdWxhdGlvbkRpcmVjdGlvbiB7IEZvcndhcmRTcGVjdWxhdGlvbiwg
QmFja3dhcmRTcGVjdWxhdGlvbiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw4ICsx
MDMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1
cmUoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5v
ZGUtPnN0cnVjdHVyZVNldCgpOwotICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRp
b24odmFsdWUubV90eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkg
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CkBA
IC0xNDksNyArMTQ3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAg
ICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7CiAgICAgICAgICAgICAgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBOb2RlKiBj
aGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBFZGdlIGNoaWxk
RWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hp
bGRFZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24oKSkpCkBAIC0x
ODEsMTggKzE4MCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9z
dGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yo
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3Ry
dWN0dXJlKSwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2Up
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBO
b2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3Jh
Z2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOwogICAg
ICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQotICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtMjA3LDcgKzIw
Niw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgICAgICBj
YXNlIFB1dEJ5SWREaXJlY3Q6IHsKICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9k
ZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9k
ZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1
Y3R1cmUoKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
LmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2lu
LCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUp
LCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSAwOwpA
QCAtMjY0LDM4ICsyNjQsMzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsK
KyAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkgewog
ICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7IC8vIFRoZSBjaGlsZCB3aWxsIGJlIHVz
ZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4LCBzbyByZWYgaXQgdG8gcmVmbGVjdCB0aGUgZG91Ymxl
IHVzZS4KLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGQ7CisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2lu
LCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVP
cmlnaW4sIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3Rh
dHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZD
aGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwg
Y2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5z
aXRpb25EYXRhKSwgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIFJl
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3Jp
Z2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hp
bGQsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVkZ2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05v
bmUsIEdldEJ1dHRlcmZseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2lu
LCBjaGlsZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGNoaWxk
RWRnZSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgewogICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQdXRTdHJ1
Y3R1cmUsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtMzkxLDEzICsz
OTEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQs
Ci0gICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwg
d2Vha0NvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+
c3RydWN0dXJlKCkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVj
Tm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2VsbC0+c3RydWN0dXJlKCkpKSwgd2Vha0NvbnN0YW50KTsK
KyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1
cmUoKSkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgIH0KICAgICAKICAgICAv
LyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDRkEgbWF5IHJlYWNoIGNvbmNsdXNpb25z
IGFib3V0IGNvbnN0YW50cyBiYXNlZCBvbiBpdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDggKzE0NCw2IEBA
IGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgaWYgKCFj
aGFuZ2VkKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICBkZmcucmVzZXRF
eGl0U3RhdGVzKCk7Ci0gICAgICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAgICAgICBwZXJmb3Jt
Q1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRWRnZS5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEVkZ2U6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQodXNlS2luZFRvU3RyaW5nKHVzZUtpbmQo
KSksIG5vZGUoKSk7CisgICAgb3V0LnByaW50KHVzZUtpbmQoKSwgIjoiLCBub2RlKCkpOwogfQog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC05Niw3ICs5Nyw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCi0g
ICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gMjsgfQorICAgIHN0YXRpYyB1aW50
MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDQ7IH0KICAgICAKICAgICBzdGF0aWMgdWludHB0cl90IG1h
a2VXb3JkKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzI3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDYgKzQ1LDkgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAg
ICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBCZWZvcmVGaXhw
b2ludCk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7Cisg
ICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KQogICAgICAgICAgICAg
Zml4dXBCbG9jayhtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC03Niw1MCArNzksMjYxIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAg
ICAgCiAgICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKKyAg
ICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKQorICAgICAgICAgICAgICAgIHx8IG1f
Z3JhcGguaXNDcmVhdGVkVGhpc0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0ludDMyU3Bl
Y3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+
c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdl
KG5vZGUtPmNoaWxkMSgpLCBOdW1iZXJVc2UsIEZvcndhcmRTcGVjdWxhdGlvbik7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9u
KCk7CisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgZWxzZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0QW5k
OgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2Fz
ZSBCaXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVS
U2hpZnQ6IHsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25JbnQzMlVzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91
YmxlQXNJbnQzMjogeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBWYWx1ZVRvSW50MzI6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAotICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFz
ZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICAg
ICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5n
UHJlZGljdGlvbnMpOwotICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkgewotICAgICAgICAg
ICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFz
ZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbikpOwotICAgICAgICAgICAgICAgIGFy
cmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJl
YWQsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5l
KAotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2Rl
LT5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNM
ZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNO
b25lLCBDaGVja1N0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVP
cmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVj
dGVkU3RydWN0dXJlKCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKERvdWJsZVVzZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7CisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChOb3RDZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOiB7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAgICAg
ICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0
aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkp
IHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1
YjogeworICAgICAgICAgICAgaWYgKGF0dGVtcHRUb01ha2VJbnRlZ2VyQWRkKG5vZGUpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0
aE5lZ2F0ZTogeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsK
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJp
dGhEaXY6IHsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9y
QXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkK
KyAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaXNYODYoKSB8fCBpc0FSTXY3cygpKSB7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZShub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgaWYgKCFhcnJh
eU1vZGUuc3VwcG9ydHNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91
YmxlTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0Rv
dWJsZU5vZGUobm9kZS0+Y2hpbGQyKCkpOworCisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCB0byBkbyByZWYnaW5nIG9uIHRoZSBjaGlsZHJlbiBiZWNhdXNlIHdlJ3JlIHN0ZWFsaW5n
IHRoZW0gZnJvbQorICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBkaXZpc2lvbi4KKyAg
ICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4s
IFJlZk5vZGUsIFNwZWNEb3VibGUsICpub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcChEb3VibGVBc0ludDMyKTsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5pbml0aWFsaXplKEVkZ2UobmV3RGl2aXNpb24sIEtub3duTnVtYmVyVXNlKSwg
RWRnZSgpLCBFZGdlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbm9k
ZS0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdz
KCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYobm9kZSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBzdG9y
YWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgp
KTsKLSAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgY2FzZSBBcml0aE1pbjoKKyAg
ICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAgICAgY2FzZSBBcml0aE1vZDogeworICAgICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICYm
IG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNo
aWxkMigpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgY2FzZSBBcml0aEFiczogeworICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGht
ZXRpYygpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcml0aFNxcnQ6IHsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQor
ICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFR5cGVPZjog
eworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKFN0cmluZ1VzZSk7
CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2Vs
bCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQ29tcGFyZUVxOgorICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgorICAgICAgICBj
YXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcTogeworICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tYXByZUVxQ29uc3RhbnQpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAh
PSBDb21wYXJlRXEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+
Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9y
T3RoZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2Jq
ZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVj
dE9yT3RoZXJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVy
KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlU3RyaWN0RXFDb25zdGFudCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkg
eworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CisgICAg
ICAgICAgICAvLyBDdXJyZW50bHkgd2UgaGF2ZSBubyBnb29kIHdheSBvZiByZWZpbmluZyB0aGVz
ZS4KKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJy
YXk6OlN0cmluZykpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGls
ZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNo
aWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKwogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICBub2RlLT5zZXRBcnJh
eU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKApAQCAtMTI3
LDcgKzM0MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigp
LT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIFNwZWNOb25lLCBub2RlLT5mbGFn
cygpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9k
ZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlP
cGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDMoKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5h
cnJheU1vZGUoKTsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpE
b3VibGUKQEAgLTEzOCwxMyArMzUyLDc3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgJiYg
IShub2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090aGVyKSkKICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhTcGVjdWxhdGlvbihBcnJheTo6U2FuZUNoYWlu
KSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25z
OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6
Rm9yY2VFeGl0OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29k
ZUF0OiB7Ci0gICAgICAgICAgICAvLyBDdXJyZW50bHkgd2UgaGF2ZSBubyBnb29kIHdheSBvZiBy
ZWZpbmluZyB0aGVzZS4KLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKSA9PSBB
cnJheU1vZGUoQXJyYXk6OlN0cmluZykpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlv
bihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIDIpOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAg
ICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAg
ICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAg
ICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworCisgICAg
ICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlN
b2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwK
KyAgICAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAg
ICAgICAgIGNoaWxkMy0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNl
bGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVk
OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6
RG91YmxlOgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMygpLCBSZWFs
TnVtYmVyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6
VWludDhBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5Ogor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDMoKS5zZXRVc2VL
aW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRV
c2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTYzLDExICs0NDEsMTUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNDZWxs
LAogICAgICAgICAgICAgICAgICAgICBTcGVjSW50MzIsCiAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgMik7CisgICAgICAgICAgICBibGVzc0FycmF5
T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIG5vZGUtPmNoaWxkMygpKTsKKyAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MSk7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTc2LDQ5ICs0NTgsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlP
cGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgMSk7CisgICAgICAgICAgICBibGVzc0Fy
cmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBCaXRB
bmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0WG9yOgotICAgICAgICBj
YXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAgIGNhc2UgQml0
VVJTaGlmdDogewotICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBD
b21wYXJlRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3NFcToKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgY2FzZSBDb21w
YXJlR3JlYXRlckVxOgotICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogewotICAgICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgTG9naWNhbE5vdDogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgIGNhc2Ug
UmVnRXhwRXhlYzoKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0OiB7CisgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgICAgICYm
IG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAg
ICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgICAgIE5v
ZGUqIGxvZ2ljYWxOb3QgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAo
bG9naWNhbE5vdC0+b3AoKSA9PSBMb2dpY2FsTm90CkBAIC0yNjEsMTQ5ICs1MjEsMTkzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgaWYgKCFub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDAs
IEZvcndhcmRTcGVjdWxhdGlvbik7CisgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAg
ICAgICAgLy8gRklYTUU6IEFkZCBzdHJpbmcgc3BlY3VsYXRpb24gaGVyZS4KKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxNzUKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0
aEFkZDoKLSAgICAgICAgY2FzZSBWYWx1ZUFkZDogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
YWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgY2FzZSBOZXdBcnJheTog
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJl
bihub2RlKTsgaS0tOykgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlwZSgK
KyAgICAgICAgICAgICAgICAgICAgbGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBl
KAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+aW5kZXhpbmdUeXBlKCksIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgaSktPnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRF
WElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPm51bUNoaWxkcmVuKCkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5E
RVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXgg
PSAwOyBvcGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0
Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0uc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5k
SW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9w
ZXJhbmRJbmRleF0uc2V0VXNlS2luZChSZWFsTnVtYmVyVXNlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0
aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkp
CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBm
aXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3Vi
OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTog
eworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJp
dGhOZWdhdGU6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDApOworICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CisgICAgICAgICAgICBp
ZiAoaXNPdGhlclNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQorICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT3RoZXJVc2UpOworICAgICAg
ICAgICAgZWxzZSBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVj
dFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgQXJpdGhNaW46Ci0gICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgIGNhc2Ug
QXJpdGhNb2Q6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
Rm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUo
KSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBDcmVhdGVUaGlzOiB7CisgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTXVsOiB7
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUp
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsK
LSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dEJ5VmFsOgorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKKyAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAgICAgJiYgbm9k
ZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkg
fHwgaXNBUk12N3MoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoMCk7Ci0gICAgICAgICAgICAgICAgaW5qZWN0SW50
MzJUb0RvdWJsZU5vZGUoMSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRv
IGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBm
cm9tCi0gICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgotICAgICAgICAg
ICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9k
ZSwgU3BlY0RvdWJsZSwgKm5vZGUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOwotICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRnZSgpLCBFZGdl
KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZVJlZ2lzdGVyczoKKyAgICAgICAgY2FzZSBQdXRT
Y29wZWRWYXI6CisgICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgorICAgICAgICBjYXNlIFNraXBT
Y29wZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICAgICAmJiBub2Rl
LT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGNhc2UgR2V0QnlJZDogeworICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAg
IGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICAgICAg
aWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0g
Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0
QXJyYXlQcm9maWxlKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9m
aWxlKSB7CisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKSk7Cisg
ICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQ
cm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9
IGFycmF5TW9kZS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKGFy
cmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1
Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFy
cmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CisgICAgICAg
ICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOworICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAg
IG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRBcnJh
eU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZSogc3RvcmFn
ZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7
CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cml0aFNxcnQ6IHsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgIGNhc2Ug
R2V0QnlJZEZsdXNoOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLQot
ICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAotICAgICAgICAgICAgICAgIG5vZGUtPmFy
cmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9u
KCksCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAotICAgICAgICAg
ICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKKyAgICAgICAgY2Fz
ZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAg
IGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50OgorICAgICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludDoKKyAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICBjYXNlIFB1
dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBDaGVja0hh
c0luc3RhbmNlOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxV
c2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDhBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAg
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoIWNoaWxkMy0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5
OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2UoMik7CisgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogeworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KFN0cmluZ1VzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7
IGktLTspIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCi0gICAgICAg
ICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChub2RlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUp
OyBpLS07KQotICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKGkpOwotICAgICAgICAg
ICAgfQorICAgICAgICBjYXNlIEFycmF5aWZ5OgorICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZz
ZXQ6IHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQo
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogeworICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW5zdGFuY2VPZjogeworICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFk
eSBkb2VzIGFuIHVuY29uZGl0aW9uYWwgY2VsbAorICAgICAgICAgICAgLy8gY2hlY2suIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKKyAgICAgICAgICAgIGlm
ICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpKQorICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEFycmF5
TGVuZ3RoOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKKyNl
bmRpZgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCkBAIC00NzEsMTEgKzc3NSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBTcGVjTm9uZSwg
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5h
c1dvcmQoKSksIGFycmF5KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBibGVzc0FycmF5T3BlcmF0
aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQorICAg
IHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVkZ2UgaW5kZXgsIEVkZ2UmIHN0
b3JhZ2VDaGlsZCkKICAgICB7Ci0gICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+
IEJlZm9yZUZpeHBvaW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fY3VycmVudE5vZGU7CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNDk5LDcgKzgwMCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG5vZGUsIHN0b3JhZ2VDaGlsZElkeCkg
PSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgc3RvcmFnZUNoaWxkID0gRWRnZShzdG9yYWdl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSB9CiAgICAgfQpAQCAtNTA3LDQwICs4
MDgsNDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKICAgICB7
CiAgICAgICAgIE5vZGUqIG5vZGUgPSBlZGdlLm5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUtPm9w
KCkgIT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAg
ICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIpIHsKKyAgICAgICAgICAgIGVkZ2Uuc2V0
VXNlS2luZChLbm93bkludDMyVXNlKTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRnZTsKICAgICAgICAgRWRnZSBuZXdF
ZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAorICAgICAgICBpZiAobmV3RWRnZS51c2VL
aW5kKCkgIT0gSW50MzJLaW5kKSB7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25vd25J
bnQzMlVzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVChuZXdFZGdlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOworICAgICAgICAK
ICAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xk
RWRnZSk7CiAgICAgICAgIAogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBmaXhEb3VibGVFZGdlKHVuc2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBmaXhEb3Vi
bGVFZGdlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVzZSwgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKICAgICB7CiAgICAg
ICAgIE5vZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7Ci0gICAgICAgIEVkZ2UmIGVkZ2UgPSBt
X2dyYXBoLmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7CiAgICAgICAgIAogICAgICAgICBpZiAo
ZWRnZS0+cHJlZGljdGlvbigpICYgU3BlY0RvdWJsZSkgewotICAgICAgICAgICAgZWRnZS5zZXRV
c2VLaW5kKERvdWJsZVVzZSk7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQodXNlS2luZCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGluamVj
dEludDMyVG9Eb3VibGVOb2RlKGNoaWxkSW5kZXgsIGRpcmVjdGlvbik7CisgICAgICAgIGluamVj
dEludDMyVG9Eb3VibGVOb2RlKGVkZ2UsIGRpcmVjdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBp
bmplY3RJbnQzMlRvRG91YmxlTm9kZSh1bnNpZ25lZCBjaGlsZEluZGV4LCBTcGVjdWxhdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIHZvaWQgaW5qZWN0
SW50MzJUb0RvdWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNl
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQog
ICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNw
ZWNEb3VibGUsCiAgICAgICAgICAgICBkaXJlY3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlvbiA/
IEludDMyVG9Eb3VibGUgOiBGb3J3YXJkSW50MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1fY3Vy
cmVudE5vZGUtPmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJ
bmRleCkubm9kZSgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVk
Z2UoZWRnZS5ub2RlKCksIERvdWJsZVVzZSkpOworICAgICAgICByZXN1bHQtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoRG91YmxlVXNlKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigKQEAgLTU0OCw3ICs4NTUsNDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmluZGV4KCksIG1fZ3JhcGguY2hp
bGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCktPmluZGV4KCksIG1fY3VycmVudE5vZGUtPmlu
ZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CiAjZW5kaWYKIAotICAgICAgICBtX2dyYXBoLmNoaWxk
KG1fY3VycmVudE5vZGUsIGNoaWxkSW5kZXgpID0gRWRnZShyZXN1bHQsIERvdWJsZVVzZSk7Cisg
ICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJl
c3VsdCwgdXNlS2luZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ1bmNhdGVDb25zdGFudFRv
SW50MzIoRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIE5vZGUqIG9sZE5vZGUgPSBlZGdlLm5v
ZGUoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChvbGROb2RlLT5oYXNDb25zdGFudCgpKTsK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQob2xkTm9k
ZSk7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKEpTQzo6dG9JbnQzMih2YWx1ZS5hc051
bWJlcigpKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5pc0ludDMyKCkpOworICAgICAgICBlZGdl
LnNldE5vZGUobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNJbnQzMiwgSlNDb25zdGFudCwK
KyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhjb2RlQmxvY2so
KS0+YWRkT3JGaW5kQ29uc3RhbnQodmFsdWUpKSkpOworICAgICAgICBtX2dyYXBoLmRlcmVmKG9s
ZE5vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3Nh
cnkoTm9kZSogbm9kZSwgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUpCisgICAgeworICAgICAgICBp
ZiAobW9kZSAhPSBTcGVjdWxhdGVJbnRlZ2VyQW5kVHJ1bmNhdGVDb25zdGFudHMpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCktPmhh
c0NvbnN0YW50KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhhc0NvbnN0YW50KCkpOworICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCisgICAgICAgICAgICB0cnVuY2F0ZUNv
bnN0YW50VG9JbnQzMihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRydW5jYXRlQ29uc3RhbnRUb0ludDMyKG5vZGUtPmNoaWxkMigpKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBhdHRlbXB0VG9NYWtlSW50ZWdlckFkZChOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBtX2dyYXBoLmFkZFNwZWN1bGF0aW9uTW9kZShu
b2RlKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gRG9udFNwZWN1bGF0ZUludGVnZXIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB0cnVuY2F0ZUNvbnN0YW50c0lm
TmVjZXNzYXJ5KG5vZGUsIG1vZGUpOworICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KEludDMyVXNlKTsKKyAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQz
Mjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0Niw0NSArMzQ2LDE0IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkKICAgICB9CiB9CiAKLS8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYmUgaXRlcmF0aXZl
LCBub3QgcmVjdXJzaXZlLgotI2RlZmluZSBET19UT19DSElMRFJFTihub2RlLCB0aGluZ1RvRG8p
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBOb2RlKiBfbm9kZSA9
IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9k
ZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIF9jaGlsZElk
eCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAotICAgICAg
ICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxk
SWR4XSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICB0aGluZ1Rv
RG8obV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQx
KCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICAgICAhX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNo
aWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
IGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDEo
KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDIoKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2Rl
LT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCiB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihO
b2RlKiBvcCkKIHsKLSAgICBET19UT19DSElMRFJFTihvcCwgcmVmKTsKKyAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTigqdGhpcywgb3AsIHJlZik7CiB9CiAKIHZvaWQgR3JhcGg6OmRlcmVmQ2hp
bGRyZW4oTm9kZSogb3ApCiB7Ci0gICAgRE9fVE9fQ0hJTERSRU4ob3AsIGRlcmVmKTsKKyAgICBE
RkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIGRlcmVmKTsKIH0KIAogdm9pZCBHcmFw
aDo6ZGV0aHJlYWQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBQdXRUb0Jhc2VPcGVyYXRpb25E
YXRhIHsKIAogZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogICAgIERvbnRTcGVjdWxhdGVJbnRl
Z2VyLAotICAgIFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93LAorICAgIFNw
ZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cywKICAgICBTcGVjdWxhdGVJbnRlZ2Vy
CiB9OwogCkBAIC0xNzQsOSArMTc0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
LCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwZXJmb3Jt
U3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJh
dGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRy
ZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7Cisg
ICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDEoKSwgc2hv
dWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9k
ZS0+Y2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkBAIC01MzAsOSArNTMwLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
aXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0
ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwotICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAg
IHJldHVybiBpc051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24o
cmlnaHQpOworICAgICAgICByZXR1cm4gaXNOdW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSAmJiBpc051bWVyaWNhbChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkpOwogICAgIH0KICAg
ICAKICAgICAvLyBOb3RlIHRoYXQgYSAndHJ1ZScgcmV0dXJuIGRvZXMgbm90IGFjdHVhbGx5IG1l
YW4gdGhhdCB0aGUgQnlWYWwgYWNjZXNzIGNsb2JiZXJzIG5vdGhpbmcuCkBAIC03ODEsNyArNzc5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4
IHx8IGRvdWJsZUltbWVkaWF0ZSA+IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9u
dFNwZWN1bGF0ZUludGVnZXI7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5j
YXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFs
d2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJu
IG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoYWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0
ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAg
IH0KICAgICAKICAgICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9k
ZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwgTm9kZSogaW1tZWRpYXRlKQpAQCAtODMwLDYgKzgyOCwz
NiBAQCBpbmxpbmUgQmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5CiAgICAgcmV0dXJu
ICpiaW5hcnlTZWFyY2g8QmxvY2tJbmRleCwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5r
aW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9j
aygqdGhpcykpOwogfQogCisjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBu
b2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0g
KG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2Rl
LT5maXJzdENoaWxkKCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4
IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCisgICAgICAg
ICAgICAgICAgX2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVu
W19jaGlsZElkeF0pICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9E
bygoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7ICAgICBcCisgICAgICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEo
KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgQVNTRVJUKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hp
bGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBpZiAoIV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUt
PmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24g
MTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk1LDcgKzk1LDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGlj
dGlvbihTcGVjTm9uZSkKICAgICB7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsK
LSAgICAgICAgQVNTRVJUKCEhKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykgPT0gKGNoaWxkcmVu
LmtpbmQoKSA9PSBBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSkpOwogICAgIH0KICAgICAKICAgICAv
LyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZh
bHVlLgpAQCAtMjk0LDIyICsyOTMsMjIgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjb252ZXJ0
VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25T
dHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQo
dW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKKyAgICB2b2lk
IGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIEVk
Z2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IEdldEJ5SWQgfHwgbV9v
cCA9PSBHZXRCeUlkRmx1c2gpOwogICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXg7Ci0gICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShFZGdlKHN0b3JhZ2UpKTsKKyAgICAg
ICAgY2hpbGRyZW4uc2V0Q2hpbGQxKHN0b3JhZ2UpOwogICAgICAgICBtX29wID0gR2V0QnlPZmZz
ZXQ7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgsIE5vZGUqIHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1bnNp
Z25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBFZGdlIHN0b3JhZ2UpCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0gUHV0QnlJZERpcmVjdCk7CiAgICAg
ICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKICAgICAgICAgY2hpbGRyZW4u
c2V0Q2hpbGQzKGNoaWxkcmVuLmNoaWxkMigpKTsKICAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQy
KGNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uoc3Rv
cmFnZSkpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoc3RvcmFnZSk7CiAgICAgICAgIG1f
b3AgPSBQdXRCeU9mZnNldDsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7
CiAgICAgfQpAQCAtOTk1LDcgKzk5NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJu
IG1fcmVmQ291bnQtLTsKICAgICB9CiAgICAgCi0gICAgRWRnZSBjaGlsZDEoKQorICAgIEVkZ2Um
IGNoaWxkMSgpCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFy
Z3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMSgpOwpAQCAtMTAwOSwxMyArMTAw
OCwxMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDFVbmNo
ZWNrZWQoKTsKICAgICB9CiAKLSAgICBFZGdlIGNoaWxkMigpCisgICAgRWRnZSYgY2hpbGQyKCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAg
ICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQyKCk7CiAgICAgfQogCi0gICAgRWRnZSBjaGlsZDMo
KQorICAgIEVkZ2UmIGNoaWxkMygpCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYg
Tm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMygpOwpAQCAt
MTAzMyw2ICsxMDMyLDE3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVu
Lm51bUNoaWxkcmVuKCk7CiAgICAgfQogICAgIAorICAgIFVzZUtpbmQgYmluYXJ5VXNlS2luZCgp
CisgICAgeworICAgICAgICBBU1NFUlQoY2hpbGQxKCkudXNlS2luZCgpID09IGNoaWxkMigpLnVz
ZUtpbmQoKSk7CisgICAgICAgIHJldHVybiBjaGlsZDEoKS51c2VLaW5kKCk7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNCaW5hcnlVc2VLaW5kKFVzZUtpbmQgdXNlS2luZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBjaGlsZDEoKS51c2VLaW5kKCkgPT0gdXNlS2luZCAmJiBjaGlsZDIoKS51c2VL
aW5kKCkgPT0gdXNlS2luZDsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0MzI3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKLXR5cGVkZWYgQWxsb2NhdG9yPE5vZGU+IE5vZGVBbGxvY2F0b3I7CisjaWYgVVNF
KEpTVkFMVUU2NCkKK3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDExMj4gTm9kZUFsbG9jYXRvcjsK
KyNlbHNlCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCA4MD4gTm9kZUFsbG9jYXRvcjsKKyNlbmRp
ZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsOCArOTYsNiBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oRm9yd2FyZEludDMy
VG9Eb3VibGUsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICAvKiBVc2VkIHRvIHNwZWN1bGF0ZSB0
aGF0IGEgZG91YmxlIHZhbHVlIGlzIGFjdHVhbGx5IGFuIGludGVnZXIuICovXAogICAgIG1hY3Jv
KERvdWJsZUFzSW50MzIsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIC8qIFVzZWQgdG8gcmVjb3Jk
IHBsYWNlcyB3aGVyZSB3ZSBtdXN0IGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBudW1iZXIuICovXAot
ICAgIG1hY3JvKENoZWNrTnVtYmVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8q
IE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEFyaXRoQWRk
LCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyOCArMzksMzAgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQp
CitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKEVkZ2UgZWRnZSwgRGF0YUZvcm1h
dCYgcmV0dXJuRm9ybWF0KQogewotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBBU1NFUlQoIShtX3N0YXRlLmZvck5vZGUo
ZWRnZSkubV90eXBlICYgflNwZWNJbnQzMikpOworICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIGlm
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKICAgICAgICAgR1BS
UmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIG1fZ3By
cy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAg
ICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkp
LCBncHIpOworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9m
SW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8u
ZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHJldHVybkZvcm1h
dCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgewotICAg
ICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25z
dGFudChub2RlKSk7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChlZGdlLm5vZGUo
KSkpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9m
TnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50
KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25z
dGFudChub2RlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KGVkZ2Uubm9k
ZSgpKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3Rh
bnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0SW50ZWdlcikgewpAQCAtMTE3LDI3ICsxMTksMjcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsSW50ZWdlcihOb2RlKgogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsSlNWYWx1ZShOb2RlKiBub2RlKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1
ZShFZGdlIGVkZ2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5v
ZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAKICAgICBzd2l0Y2ggKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKICAgICAg
ICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKKyAgICAg
ICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29u
c3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgq
bV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0gICAgICAgICAgICAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpOworICAg
ICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgeworICAgICAgICAgICAgfSBlbHNl
IGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1
ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWVPZk51bWJlckNvbnN0YW50KGVkZ2Uubm9k
ZSgpKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKICAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgfQpAQCAtODAy
LDE4ICs4MDQsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
fQogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUludEludGVybmFsKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwg
U3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3Jt
YXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNJbnRAJWQgICAiLCBub2RlLT5pbmRleCgp
KTsKICNlbmRpZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9k
ZSkubV90eXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9y
Tm9kZShlZGdlKTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25vd25JbnQzMlVzZSB8
fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjSW50MzIpKTsKKyAgICB2YWx1ZS5maWx0ZXIoU3BlY0lu
dDMyKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRh
Rm9ybWF0Tm9uZTogewotICAgICAgICBpZiAoKG5vZGUtPmhhc0NvbnN0YW50KCkgJiYgIWlzSW50
MzJDb25zdGFudChub2RlKSkgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3Vi
bGUpIHsKKyAgICAgICAgaWYgKChlZGdlLT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3Rh
bnQoZWRnZS5ub2RlKCkpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJs
ZSkgewogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7CiAgICAgICAgICAgICByZXR1cm5Gb3Jt
YXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwpA
QCAtODIxLDEwICs4MjYsMTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50SQogICAgICAgICAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAg
ICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0
YW50KCkpIHsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50
KG5vZGUpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKKyAgICAgICAgICAgIEFTU0VSVChpc0lu
dDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7
CiAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAg
ICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJu
IGdwcjsKQEAgLTg2NSw3ICs4NzAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnRJCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dw
cnMubG9jayhncHIpOwogICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbih0eXBlKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9k
ZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
LCBkaXJlY3Rpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBE
YXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3ZSdyZSBkb25lLCBy
ZXR1cm4uCiAgICAgICAgIGlmICghc3RyaWN0KSB7CkBAIC05MTAsMTAgKzkxNSwxMCBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAKICAgICBjYXNlIERhdGFGb3Jt
YXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6IHsKLSAgICAgICAgaWYgKG5v
ZGUtPmhhc0NvbnN0YW50KCkgJiYgaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgIGlm
IChlZGdlLT5oYXNDb25zdGFudCgpICYmIGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsK
ICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgQVNTRVJU
KGlzSW50MzJDb25zdGFudChub2RlKSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdwcik7CisgICAgICAg
ICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdl
Lm5vZGUoKSkpLCBncHIpOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdElu
dGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CkBAIC05MzYsMzUgKzk0
MSwzOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgfQog
fQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoTm9kZSogbm9kZSwg
RGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24p
CitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoRWRnZSBlZGdlLCBEYXRh
Rm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsK
LSAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUludEludGVybmFsPGZhbHNlPihub2RlLCByZXR1cm5G
b3JtYXQsIGRpcmVjdGlvbik7CisgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDxm
YWxzZT4oZWRnZSwgcmV0dXJuRm9ybWF0LCBkaXJlY3Rpb24pOwogfQogCi1HUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoTm9kZSogbm9kZSkKK0dQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludFN0cmljdChFZGdlIGVkZ2UpCiB7CiAgICAgRGF0
YUZvcm1hdCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlcjsKLSAgICBHUFJSZWcgcmVzdWx0ID0gZmls
bFNwZWN1bGF0ZUludEludGVybmFsPHRydWU+KG5vZGUsIG11c3RCZURhdGFGb3JtYXRJbnRlZ2Vy
LCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJSZWcgcmVzdWx0ID0gZmlsbFNwZWN1bGF0
ZUludEludGVybmFsPHRydWU+KGVkZ2UsIG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyLCBCYWNrd2Fy
ZFNwZWN1bGF0aW9uKTsKICAgICBSRUxFQVNFX0FTU0VSVChtdXN0QmVEYXRhRm9ybWF0SW50ZWdl
ciA9PSBEYXRhRm9ybWF0SW50ZWdlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRlBSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKE5vZGUqIG5vZGUsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0ZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWJsZShFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNEb3VibGVA
JWQgICAiLCBub2RlLT5pbmRleCgpKTsKICNlbmRpZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
PSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5k
KCkgIT0gS25vd25OdW1iZXJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY051bWJlcikpOwor
ICAgIHZhbHVlLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0g
dmFsdWUubV90eXBlOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdl
LT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIEdQUlJl
ZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5v
ZGUpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewog
ICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9J
bnQ2NChzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSkpLCBn
cHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJl
aW50ZXJwcmV0RG91YmxlVG9JbnQ2NChzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlT2ZJbnQzMkNv
bnN0YW50KGVkZ2Uubm9kZSgpKSkpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
NjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKQEAg
LTk3Miw5ICs5ODAsOSBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
CiAgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlz
TnVtYmVyQ29uc3RhbnQobm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50
KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0
ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJl
aW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpKSwgZ3By
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWlu
dGVycHJldERvdWJsZVRvSW50NjQodmFsdWVPZk51bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkp
LCBncHIpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsK
ICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIApAQCAtMTAzOSw3ICsxMDQ3LDcgQEAgRlBS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCiAg
ICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoanNWYWx1ZUdwciksIG5vZGUsIG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoanNWYWx1ZUdwciksIGVkZ2UsIG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKIAogICAgICAgICAvLyBGaXJzdCwgaWYg
d2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAg
ICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIHRlbXBHcHIpOwpAQCAtMTEwMiwxMyArMTExMCwxNiBA
QCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgfQogfQogCi1H
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKE5vZGUqIG5vZGUsIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUNlbGwoRWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7
CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVjQ2VsbEAl
ZCAgICIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQo
KSAhPSBLbm93bkNlbGxVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsKKyAgICB2
YWx1ZS5maWx0ZXIoU3BlY0NlbGwpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5t
X3R5cGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1
YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkp
IHsKQEAgLTExMjAsOCArMTEzMSw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUNlbGwKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0g
ICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0Nv
bnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0
YW50KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKSB7CiAg
ICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKQEAgLTExMzcs
NyArMTE0OCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKIAog
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwog
ICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGRpcmVjdGlvbik7CiAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwp
OwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTExNTMsNyArMTE2NCw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BSUmVnIGdwciA9
IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIGlmICghaXND
ZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24p
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIp
LCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVy
biBncHI7CiAgICAgfQpAQCAtMTE3NywxMyArMTE4OCwxMyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVCb29sZWFuKE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRp
cmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRn
ZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVjQm9vbEAlZCAgICIsIG5vZGUtPmlu
ZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9k
ZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5v
ZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRl
LmZvck5vZGUoZWRnZSkubV90eXBlOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5mby5y
ZWdpc3RlckZvcm1hdCgpKSB7CkBAIC0xMTk1LDggKzEyMDYsOCBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIAogICAgICAgICBHUFJSZWcgZ3ByID0g
YWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CisgICAgICAg
IGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CiAgICAgICAgICAgICBpZiAoanNWYWx1
ZS5pc0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVl
KSksIGdwcik7CkBAIC0xMjEzLDcgKzEyMjQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVCb29sCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkp
IHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
fjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwg
SW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdw
ciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CiAgICAgICAgICAgICBtX2ppdC54b3I2NChU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAg
ICAgICB9CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOwpAQCAtMTIzMiw3ICsxMjQzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBp
ZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHR5cGUpKSB7CiAgICAgICAgICAgICBtX2ppdC54b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBu
b2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5
KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBkaXJlY3Rpb24p
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIp
LCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292
ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBkaXJlY3Rp
b24pOwogICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQogICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKQEAgLTEyOTAsMzUg
KzEzMDEsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAg
CiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewog
ICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hw
b2ludCgpKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAg
ICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwg
bm9kZS0+Y2hpbGQxKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlICYgflNw
ZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAg
ICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hp
bGQyKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
REZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgIERGR19UWVBFX0NI
RUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9k
ZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1
Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwot
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+U3Bl
Y09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAg
ICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGls
ZDEoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9
CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5j
aFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xMzI2
LDE0ICsxMzI4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIp
OwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUgJiB+
U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
ICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5j
aGlsZDIoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAg
ICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1faml0LmJy
YW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0x
MzYzLDI3ICsxMzYyLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09i
amUKICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnRO
b2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNT
dGlsbFZhbGlkKCkpIHsgCiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1f
Y3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAobV9zdGF0ZS5m
b3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwg
bV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAg
ICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5v
ZGUobGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2Jq
ZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsCiAgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
CkBAIC0xMzk5LDI3ICsxMzkyLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmpl
Y3RUb09iamUKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENo
aWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7IAogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAg
aWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwpICYgflNw
ZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAg
ICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwg
U3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ay
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVy
ZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsK
IAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmICgo
bV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFNwZWNDZWxsKSAmIH5TcGVjT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCi0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxs
KSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBA
IC0xNDM3LDEyICsxNDI0LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RU
b09iamUKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdo
dENoaWxkIG11c3Qgbm90IGJlIGEgY2VsbC4gQ2hlY2sgaWYgdGhhdCBpcyBlbm91Z2ggdG8KICAg
ICAvLyBwcm92ZSB0aGF0IGl0IGlzIGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZC4KLSAgICBpZiAo
KG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwpICYgflNwZWNP
dGhlcikgeworICAgIGlmIChuZWVkc1R5cGVDaGVjayhyaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNw
ZWNPdGhlcikpIHsKICAgICAgICAgbV9qaXQubW92ZShvcDJHUFIsIHJlc3VsdEdQUik7CiAgICAg
ICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVm
aW5lZCksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZC5ub2Rl
KCksCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiks
IHJpZ2h0Q2hpbGQubm9kZSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
cmVzdWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
VmFsdWVOdWxsKSkpOwpAQCAtMTQ3MywyNyArMTQ2MCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAg
ICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hF
Q0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0
Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBz
dHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUu
Z3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BS
KSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIs
IAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRD
aGlsZCwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTA5LDI3ICsxNDkwLDIxIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0
aGluIHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBpZiAobV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAg
ICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25X
YXRjaHBvaW50KCkpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5t
X3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCBy
aWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAg
ICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmln
aHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJl
R1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0
dXJlR1BSKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBl
ICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRD
aGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9
CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BS
KSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0
Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTQ0LDcgKzE1MTksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0
IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNr
IGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVs
bCBvciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90
eXBlICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIpCisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhy
aWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCiAgICAgICAgIHJpZ2h0Tm90Q2VsbC5s
aW5rKCZtX2ppdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGp1bXAobm90VGFrZW4sIEZvcmNlSnVt
cCk7CkBAIC0xNTUzLDkgKzE1MjgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVl
cEhvbGVPYmplCiAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOwogICAgICAg
ICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmlu
ZWQpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCi0gICAg
ICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIG1f
aml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
cmVzdWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
VmFsdWVOdWxsKSkpOwogICAgIH0KQEAgLTE2MDksNyArMTU4Myw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVy
TG9naWNhbE5vdChFZGdlIG5vZGVVc2UsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoRWRnZSBub2Rl
VXNlKQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOwogICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0xNjE5LDI3ICsxNTkzLDIyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2
YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50
KCkpOwotCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2Us
Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+
U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVj
dHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsK
IAotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLAotICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERG
R19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNl
LCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BS
LAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IAogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDgoCkBAIC0xNjYwLDExICsxNjI5LDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0
KTsKIAotICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgeworICAgIGlmIChuZWVkc1R5cGVD
aGVjayhub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKICAgICAgICAgbV9qaXQubW92
ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2Us
IAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIsIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKQEAgLTE2NzgsMTIgKzE2NDcs
MTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOb2RlKiBub2RlKQogewotICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAg
IGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLT5jaGlsZDEoKSwKLSAgICAgICAg
ICAgICFpc09iamVjdE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fdHlwZSkpOworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOiB7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAg
ICAgCisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgdmFsdWUpOwogICAgICAgICBtX2ppdC5jb21wYXJlMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCB2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0LmdwcigpKTsKQEAgLTE2OTEsNyArMTY2MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKKyAgICAgICAgCisg
ICAgY2FzZSBOdW1iZXJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMTcwMyw4ICsxNjc0
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwotICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkgeworICAgIGNhc2UgQm9vbGVhblVzZTogewogICAgICAgICBpZiAoaXNCb29s
ZWFuU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7
CiAgICAgICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsK
QEAgLTE3MTYsMzkgKzE2ODYsNDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2lj
YWxOb3QoTgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOyAvLyBGSVhNRTog
V2UgY291bGQgcmV1c2UsIGJ1dCBvbiBzcGVjdWxhdGlvbiBmYWlsIHdvdWxkIG5lZWQgcmVjb3Zl
cnkgdG8gcmVzdG9yZSB0YWcgKGFraW4gdG8gYWRkKS4KICAgICAgICAgCiAgICAgICAgIG1faml0
Lm1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1faml0LnhvcjY0KFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdC5ncHIo
KSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWUu
Z3ByKCkpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpO
b25aZXJvLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKSk7CisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVl
LmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNCb29sZWFuLCBtX2ppdC5icmFuY2hUZXN0NjQo
CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICAgICAgbV9qaXQueG9y
NjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHQu
Z3ByKCkpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgYWRkIGEgRGF0YUZvcm1hdEJvb2ws
IHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAKLSAgICBHUFJSZWcgYXJn
MUdQUiA9IGFyZzEuZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAotICAgIGFyZzEudXNlKCk7CisgICAgICAgIGFy
ZzEudXNlKCk7CiAgICAgCi0gICAgbV9qaXQubW92ZShhcmcxR1BSLCByZXN1bHRHUFIpOwotICAg
IG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNl
KSksIHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5i
cmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOworICAgICAgICBtX2ppdC5tb3ZlKGFyZzFHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CisgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJv
LCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKICAg
ICAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dD
YXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCBhcmcxR1BS
KSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BS
LCBhcmcxR1BSKSk7CiAgICAgCi0gICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOwotICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOworICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNo
KEVkZ2Ugbm9kZVVzZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgYm9v
bCBuZWVkU3BlY3VsYXRpb25DaGVjaykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RP
ck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBu
b3RUYWtlbikKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlKTsKICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTE3NTksMjMgKzE3MzksMTkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIGlmIChtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9p
bnQoKSk7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVz
ZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZH
X1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2Us
ICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9u
Q2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAg
ICAgICAgICAgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9q
aXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisg
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBtX2ppdC5icmFuY2hUZXN0OChKSVRDb21waWxlcjo6WmVybywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCkBAIC0xNzkxLDEwICsx
NzY3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAK
ICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAKLSAgICBpZiAobmVlZFNwZWN1bGF0aW9u
Q2hlY2spIHsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVj
T3RoZXIpKSB7CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAg
ICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRl
ZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChW
YWx1ZU51bGwpKSk7CisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgbm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIG1faml0LmJyYW5jaDY0
KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgfQogICAgIGp1
bXAobm90VGFrZW4pOwogICAgIApAQCAtMTgwNiwxNCArMTc4NCwxNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUt
PnRha2VuQmxvY2tJbmRleCgpOwogICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLT5ub3RU
YWtlbkJsb2NrSW5kZXgoKTsKICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOiB7CiAgICAgICAgIGVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKG5vZGUtPmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIAogICAgICAg
ICAgICAgIWlzT2JqZWN0T3JPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgewotICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAKKyAg
ICBjYXNlIEludDMyVXNlOgorICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGJvb2wgaW52
ZXJ0ID0gZmFsc2U7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0
QmxvY2soKSkgewpAQCAtMTgzNyw1NiArMTgxNyw2MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgIGNhc2UgQm9vbGVhblVz
ZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CiAgICAgICAgIAotICAgIGJvb2wgcHJlZGljdEJvb2xlYW4gPSBpc0Jvb2xlYW5T
cGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKTsKLSAgICAKLSAgICBpZiAo
cHJlZGljdEJvb2xlYW4pIHsKLSAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybzsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBCb29sZWFuVXNl
KSB7CisgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkg
ewotICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpaZXJvOwotICAg
ICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47Ci0gICAgICAgICAgICAgICAgdGFr
ZW4gPSBub3RUYWtlbjsKLSAgICAgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Olplcm87CisgICAgICAg
ICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgICAgICAgICAgICAg
IHRha2VuID0gbm90VGFrZW47CisgICAgICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJyYW5jaFRl
c3QzMihjb25kaXRpb24sIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIodHJ1ZSksIHRha2VuKTsKLSAg
ICAgICAgICAgIGp1bXAobm90VGFrZW4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtl
bik7Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgdGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRpb24s
IHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIodHJ1ZSksIHRha2VuKTsKKyAgICAgICAgICAgICAgICBq
dW1wKG5vdFRha2VuKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJh
bmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7
CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKSksIHRha2VuKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwg
bV9qaXQuanVtcCgpKTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZS51c2UoKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjSW50MzIpIHsKLSAgICAgICAgICAgIGJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIG5vdFRha2VuKTsKLSAgICAgICAg
ICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHRha2VuKTsKLSAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHR5cGVDaGVjayhKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBT
cGVjQm9vbGVhbiwgbV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
bHVlLnVzZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpICYgU3BlY0ludDMyKSB7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoMCkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHRha2VuKTsKKyAgICAgICAgICAgIH0KICAgICAKLSAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQm9vbGVhbikgewotICAgICAg
ICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBu
b3RUYWtlbik7Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4odHJ1ZSkpKSwgdGFrZW4pOwotICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNCb29sZWFuKSB7CisgICAgICAgICAgICAgICAg
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtl
bik7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKSksIHRha2VuKTsKKyAgICAgICAgICAgIH0KICAgICAKLSAgICAgICAgdmFsdWUu
dXNlKCk7CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAKLSAgICAgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihkZmdDb252
ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7Ci0gICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZl
cnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAKLSAgICAgICAgYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIHRha2VuKTsKLSAgICAgICAg
anVtcChub3RUYWtlbik7CisgICAgICAgICAgICBicmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOworICAgICAgICAgICAganVtcChub3RUYWtlbik7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAg
IG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKQEAgLTIxMzEsMTkgKzIxMTcs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBDaGVja051bWJlcjogewotICAgICAgICBp
ZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3AxLmdwcigpLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
LSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDEuZ3ByKCkpLCBub2RlLT5j
aGlsZDEoKS5ub2RlKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cikpOwotICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICAgICAgfQotICAg
ICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAgICAgY2FzZSBW
YWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjb21waWxlQWRkKG5vZGUpOwpA
QCAtMjE2MiwyMiArMjEzNSwyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICAgICAgY29tcGlsZUlu
dGVnZXJBcml0aERpdkZvclg4Nihub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwot
Ci0gICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwotICAgICAgICBGUFJSZWcgcmVnMiA9
IG9wMi5mcHIoKTsKLSAgICAgICAgbV9qaXQuZGl2RG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5m
cHIoKSk7Ci0KLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAgICAgICAgICBtX2ppdC5kaXZEb3VibGUo
cmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZG91
YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBjYXNlIEFyaXRoTW9kOiB7CkBAIC0yMTg2LDggKzIxNjYsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0
aEFiczogewotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAt
MjIwMSwxOCArMjE4MSwyNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBG
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYWJzRG91
YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3Vs
dC5mcHIoKSwgbm9kZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZTog
eworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9qaXQuYWJzRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRoTWluOgogICAg
IGNhc2UgQXJpdGhNYXg6IHsKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAg
ICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJV
c2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSk7CkBAIC0yMjMxLDM3ICsyMjE4LDQ0IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAg
ICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGRvbmU7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9u
ZTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBtX2pp
dC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW4gOiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4sIG9wMS5mcHIoKSwgb3Ay
LmZwcigpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBtX2pp
dC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW4gOiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4sIG9wMS5mcHIoKSwgb3Ay
LmZwcigpKTsKICAgICAgICAgCi0gICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBv
bmUgb3Igb25lIG9mIHRoZW4gaXMgTmFOCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9w
Mkxlc3MgPSBtX2ppdC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NU
aGFuT3JFcXVhbCwgb3AxLmZwcigpLCBvcDIuZnByKCkpOworICAgICAgICAgICAgLy8gb3AyIGlz
IGVhdGhlciB0aGUgbGVzc2VyIG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMkxlc3MgPSBtX2ppdC5icmFuY2hEb3VibGUob3AgPT0g
QXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsIDogTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCwgb3AxLmZwcigpLCBvcDIuZnByKCkp
OwogICAgICAgICAKLSAgICAgICAgLy8gVW5vcmRlcmVkIGNhc2UuIFdlIGRvbid0IGtub3cgd2hp
Y2ggb2Ygb3AxLCBvcDIgaXMgTmFOLiBNYW51ZmFjdHVyZSBOYU4gYnkgYWRkaW5nIAotICAgICAg
ICAvLyBvcDEgKyBvcDIgYW5kIHB1dHRpbmcgaXQgaW50byByZXN1bHQuCi0gICAgICAgIG1faml0
LmFkZERvdWJsZShvcDEuZnByKCksIG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAg
ZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIC8vIFVub3JkZXJlZCBjYXNl
LiBXZSBkb24ndCBrbm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1cmUgTmFO
IGJ5IGFkZGluZyAKKyAgICAgICAgICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBpbnRv
IHJlc3VsdC4KKyAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShvcDEuZnByKCksIG9wMi5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CiAgICAgICAgIAotICAgICAgICBvcDJMZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQu
bW92ZURvdWJsZShvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBvcDJMZXNz
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AyLmZwcigpLCBy
ZXN1bHQuZnByKCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9wMS5mcHIoKSAhPSByZXN1bHQu
ZnByKCkpIHsKLSAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAg
ICAgICBpZiAob3AxLmZwcigpICE9IHJlc3VsdC5mcHIoKSkgeworICAgICAgICAgICAgICAgIGRv
bmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG9wMUxl
c3MubGluaygmbV9qaXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCks
IHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb3AxTGVzcy5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKICAg
ICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBu
b2RlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZw
cigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBBcml0aFNxcnQ6IHsKQEAgLTI2MTcsMTggKzI2MTEsMTggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBl
KCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxk
Myk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMsIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZh
bHVlLmdwcigpOwogICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcnJh
eU1vZGUudHlwZSgpID09IEFycmF5OjpJbnQzMgotICAgICAgICAgICAgICAgICYmICFpc0ludDMy
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMykubV90eXBlKSkgewotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlUmVnKSwgY2hpbGQzLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlUmVnLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFy
cmF5OjpJbnQzMikgeworICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZVJlZyksIGNoaWxkMywgU3BlY0ludDMyLAorICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVSZWcsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOwogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGlmIChhcnJh
eU1vZGUudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVy
RW5hYmxlZCgpKSB7CkBAIC0yOTMxLDEwICsyOTI1LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOwogCi0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFy
cmF5OjpJbnQzMiAmJiAhaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS0+
Y2hpbGQyKCksCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwor
ICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIp
IHsKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY0ludDMyLAorICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpICE9IEFycmF5OjpJbnQzMiAmJiBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQo
KSkgewpAQCAtMjk2MiwxMyArMjk1Nyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWUu
ZnByKCk7CiAKLSAgICAgICAgICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBo
b2lzdCB0aGVtIGludG8KLSAgICAgICAgICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
LgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFs
dWVGUFIsIHZhbHVlRlBSKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBERkdfVFlQRV9D
SEVDSygKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCBub2RlLT5jaGlsZDIoKSwgU3Bl
Y1JlYWxOdW1iZXIsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCB2YWx1ZUZQUiwgdmFsdWVGUFIpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1Bh
dGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdl
TGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6
Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKQEAgLTMxNzEsNyArMzE2Miw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICAgICAgLy8gSXQncyByZWFs
bHkgcHJvZml0YWJsZSB0byBzcGVjdWxhdGUgaW50ZWdlciwgc2luY2UgaXQncyByZWFsbHkgY2hl
YXAsCiAgICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSByZWFs
IHdvcmssIGFuZCB3ZSBlbWl0IGEgbG90IGxlc3MgY29kZS4KICAgICAgICAgICAgIApAQCAtMzE4
NiwzMCArMzE3OCwzNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklY
TUU6IEFkZCBzdHJpbmcgc3BlY3VsYXRpb24gaGVyZS4KLSAgICAgICAgCi0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAKLSAgICAgICAgR1BS
UmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAg
b3AxLnVzZSgpOworICAgICAgICAgICAgb3AxLnVzZSgpOwogICAgICAgICAKLSAgICAgICAgaWYg
KCEobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIg
fCBTcGVjQm9vbGVhbikpKQotICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxy
ZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGlmICghKG1f
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjTnVtYmVyIHwgU3Bl
Y0Jvb2xlYW4pKSkKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGFscmVh
ZHlQcmltaXRpdmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3Ax
R1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwobm90UHJpbWl0aXZlLCB0aGlz
LCBvcGVyYXRpb25Ub1ByaW1pdGl2ZSwgcmVzdWx0R1BSLCBvcDFHUFIpKTsKLSAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwobm90UHJpbWl0aXZlLCB0aGlzLCBvcGVyYXRpb25Ub1ByaW1pdGl2ZSwg
cmVzdWx0R1BSLCBvcDFHUFIpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC0zMjUxLDE0ICszMjQ4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsK
ICAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMs
IHVzZSk7CiAgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lz
dCB0aGVtIGludG8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQuCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCB1c2UsIFNwZWNSZWFsTnVtYmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkLCBvcEZQUiwgb3BGUFIpKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3Vi
bGUob3BGUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihkb3Vi
bGUpICogb3BlcmFuZElkeCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CkBAIC0zMjY2LDEwICszMjU5LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJh
bmQodGhpcywgdXNlKTsKICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFu
ZC5ncHIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSAmJiAhaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKG9wR1BSKSwgdXNlLCBTcGVjSW50MzIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlNjQob3BHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IHNpemVvZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0zMzE5LDE0ICszMzEzLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
ICAgICAgICAgICAgICAgICBGUFJSZWcgb3BGUFIgPSBvcGVyYW5kLmZwcigpOwogICAgICAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWlzUmVhbE51bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJv
ZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KLSAgICAgICAgICAg
ICAgICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFs
dWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUo
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBE
RkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBT
cGVjUmVhbE51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwogICAgICAgICAgICAgICAgIG1faml0LmJveERvdWJs
ZShvcEZQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3Jh
dGNoR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTMzMzQsMTAgKzMzMjQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7CiAgICAgICAgICAg
ICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsKLSAgICAgICAgICAgICAgICBpZiAo
aGFzSW50MzIobm9kZS0+aW5kZXhpbmdUeXBlKCkpICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
b3BHUFIpLCB1c2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsIFNwZWNJbnQzMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KG9w
R1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM1
NTksMjQgKzM1NTAsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBpZiAo
aXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHRo
aXNWYWx1ZSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPdGhl
clNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgIHN3
aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgT3RoZXJVc2U6
IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAg
ICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlKSkgeworICAgICAgICAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhub2RlLT5jaGls
ZDEoKSwgU3BlY090aGVyKSkgewogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVl
R1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1
ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxs
KSkpOworICAgICAgICAgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPdGhlciwKKyAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxUaGlzT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pKSwgc2NyYXRjaEdQUik7CkBAIC0zNTg0LDMwICszNTcyLDQyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICBjYXNlIE9iamVjdFVzZTogewogICAgICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKICAgICAg
ICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwodGhpc1ZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCks
IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHRoaXNWYWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OworICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwodGhpc1ZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIE9iamVjdFVz
ZSwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3ModGhpc1ZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1f
aml0Lm1vdmUodGhpc1ZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1
ZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIAot
ICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbnZlcnRUaGlzLCByZXN1bHQuZ3ByKCksIHRoaXNWYWx1ZUdQUik7Ci0gICAgICAg
IAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0
aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNW
YWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydFRoaXMs
IHJlc3VsdC5ncHIoKSwgdGhpc1ZhbHVlR1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzc3Niw4ICszNzc2LDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNDZWxs
U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKworICAgICAgICBz
d2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAg
ICAgICAgICAgIApAQCAtMzc5MiwyMCArMzc5MywyNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7Ci0gICAgICAgIAotICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKLSAgICAgICAgYmFzZS51
c2UoKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVy
OjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAg
ICAgYmFzZS51c2UoKTsKICAgICAgICAgCi0gICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29k
ZU9yaWdpbiwgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5v
dENlbGwpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJy
YW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBu
b2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgY2FjaGVkR2V0
QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZp
ZXJOdW1iZXIoKSwgbm90Q2VsbCk7CiAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zODE0LDggKzM4MjIs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFs
dWVSZWdzKCksIDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigp
KSkgeworCisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAg
ICAgIGNhc2UgQ2VsbFVzOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKIApAQCAtMzgzMywyMSArMzg0MiwyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKIAotICAgICAg
ICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBi
YXNlLnVzZSgpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgYmFzZS51
c2UoKTsKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIAotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVy
OjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21w
aWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAg
ICAgCi0gICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgcmVz
dWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwsIERvbnRTcGlsbCk7Cisg
ICAgICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3Vs
dEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250U3BpbGwpOwogICAg
ICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7Ci0KKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzg3MSwxMyArMzg4Nyw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewotICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKG5v
ZGUtPnN0cnVjdHVyZVNldCgpKQotICAgICAgICAgICAgJiYgaXNDZWxsU3BlY3VsYXRpb24odmFs
dWUubV90eXBlKSkgewotICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uID0gbm9kZS0+b3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUgPyBGb3J3YXJk
U3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwogICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBkaXJlY3Rpb24pOwogICAgICAgICAK
QEAgLTM5MjksNiArMzkzOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgLy8gd2UnbGwganVzdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgd2hlbiBh
IHdhdGNocG9pbnQgZmlyZXMgdGhlbiB0aGF0J3MKICAgICAgICAgLy8gcXVpdGUgYSBoaW50IGFs
cmVhZHkuCiAgICAgICAgIAorICAgICAgICBzcGVjdWxhdGVDZWxsKG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IG5vZGUt
Pm9wKCkgPT0gRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50ID8gRm9yd2FyZFNw
ZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsKIAogICAgICAgICBtX2ppdC5hZGRXZWFr
UmVmZXJlbmNlKG5vZGUtPnN0cnVjdHVyZSgpKTsKQEAgLTM5NDksNiArMzk2MCw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZTogeworICAgICAgICBBU1NFUlQoaXNLbm93bkNlbGwo
bm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5j
ZVRyYW5zaXRpb24oCiAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25l
cigpLApAQCAtNDI3MSw3ICs0Mjg0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgVHlwZU9mOiB7Ci0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwpA
QCAtNDI4MCwxOSArNDI5MywyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lSnVtcHM7CiAKICAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQo
SklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQ
UiksIG5vZGUtPmNoaWxkMSgpLCBpc05vdENlbGwpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpICE9IFVudHlwZWRVc2UpCisgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhK
U1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsLCBpc05vdENl
bGwpOwogCi0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVj
dCgpKSB7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVj
dCgpIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdFN0cmluZyA9IG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRD
b21waWxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCks
IG5vdFN0cmluZyk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IFN0cmluZ1VzZSkKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNl
KHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7CiAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFs
bFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1
bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgIT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICAgICAgbm90U3RyaW5n
LmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblR5
cGVPZiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7CiAgICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtNDMwMiw3ICs0MzE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSkgewogICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5j
aFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkpLCByZXN1bHRHUFIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTQgKzEwOCwxNCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZv
KGp1bXBUb0ZhaWwpOwogICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4
aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNv
dXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9j
dXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNv
dXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwogfQogCkBAIC0xMjMsNyArMTIzLDcg
QEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogewogICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIoKTsK
LSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5j
YW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZP
U1JFeGl0cygpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKCk7CiAgICAgbV9qaXQuY29kZUJs
b2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5n
cmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3Ry
ZWFtLT5zaXplKCkpKTsKQEAgLTEzMiw3ICsxMzIsNyBAQCBPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
IFNwZWN1bGF0aXZlSklUOjpzCiAKIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVl
U291cmNlLCBFZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHJldHVybiBzcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIApAQCAtMTQwLDE0
ICsxNDAsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewog
ICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2pp
dC5hcHBlbmRFeGl0SW5mbyhqdW1wc1RvRmFpbCk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFw
cGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXpl
KCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgY29uc3Qg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKIHsKLSAgICBBU1NFUlQobV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAg
IEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3Bl
Y3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcHNU
b0ZhaWwpOwogfQogCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0
dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5v
ZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwg
bV9jYW5FeGl0KTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kU3BlY3VsYXRpb25SZWNv
dmVyeShyZWNvdmVyeSk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFpbCk7CiAg
ICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVl
U291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9k
ZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJPZlNw
ZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
RWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVj
dWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVj
ayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3Zl
cnkpOwogfQogCkBAIC0xNzgsNyArMTc4LDcgQEAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCog
U3BlY3VsYXRpdmVKSQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9k
ZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBt
X2NhbkV4aXQpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKEpJVENvbXBpbGVyOjpKdW1wTGlz
dCgpKTsKICAgICBPU1JFeGl0JiBleGl0ID0gbV9qaXQuY29kZUJsb2NrKCktPm9zckV4aXQoCiAg
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCkBAIC0yODAs
MTQgKzI4MCwxNCBAQCBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJCiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkK
IHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2Rl
LT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2Rl
LCBqdW1wVG9GYWlsKTsKICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNv
dmVyeSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwg
Y29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1l
bnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhr
aW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wc1RvRmFpbCk7CiAgICAgY29udmVydExhc3RP
U1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQpAQCAtMzAyLDcgKzMwMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2lu
Z0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0
ZWQuXG4iKTsKICNlbmRpZgpAQCAtMzE0LDEzICszMTQsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6dGVybWluYXRlU3BlY3VsYXRpdgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVn
cywgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihraW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5ub2RlKCkpOwogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBK
U1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAg
ZGF0YUxvZ0YoIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAjZW5kaWYKQEAg
LTMzMCw2ICszMzAsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRp
dgogICAgIG1fY29tcGlsZU9rYXkgPSBmYWxzZTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
dHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBl
IHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3sK
KyAgICBBU1NFUlQobmVlZHNUeXBlQ2hlY2soZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSk7Cisg
ICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLmZpbHRlcih0eXBlc1Bhc3NlZFRocm91Z2gpOworICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgc291cmNlLCBlZGdlLCBqdW1wVG9GYWlsKTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNv
dXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVj
b3ZlcnkpCit7CisgICAgdHlwZUNoZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdo
LCBqdW1wVG9GYWlsKTsKKyAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNv
dmVyeSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhKU1ZhbHVlU291cmNl
IHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbikKK3sKKyAgICB0eXBlQ2hlY2soc291cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gs
IGp1bXBUb0ZhaWwpOworICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQor
ICAgICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoKTsKK30KKwogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6YWRkU2xvd1BhdGhHZW5lcmF0b3IoUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRv
cj4gc2xvd1BhdGhHZW5lcmF0b3IpCiB7CiAgICAgbV9zbG93UGF0aEdlbmVyYXRvcnMuYXBwZW5k
KHNsb3dQYXRoR2VuZXJhdG9yLmxlYWtQdHIoKSk7CkBAIC0xNTA5LDIwICsxNTI5LDIwIEBAIGJv
b2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW4KICAgICAgICAgLy8gc28gY2Fu
IGJlIG5vIGludGVydmVuaW5nIG5vZGVzIHRvIGFsc28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAK
ICAgICAgICAgQVNTRVJUKG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtp
bmQoSW50MzJVc2UpKQogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChu
b2RlLCBicmFuY2hOb2RlLCBjb25kaXRpb24pOwotICAgICAgICBlbHNlIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKQorICAgICAgICBlbHNlIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNl
KSkKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChub2RlLCBicmFuY2hO
b2RlLCBkb3VibGVDb25kaXRpb24pOwogICAgICAgICBlbHNlIGlmIChub2RlLT5vcCgpID09IENv
bXBhcmVFcSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVTdHJpbmcoKSB8fCBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsK
KyAgICAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nVXNlKSkgewogICAg
ICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9k
ZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkp
CisgICAgICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpCiAgICAg
ICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9k
ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIo
KSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmpl
Y3RVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UpCiAg
ICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxp
dHkobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBicmFuY2hOb2RlKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVy
KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKQorICAgICAgICAg
ICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2Ug
JiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkKICAgICAgICAgICAgICAg
ICBjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShub2RlLT5jaGls
ZDIoKSwgbm9kZS0+Y2hpbGQxKCksIGJyYW5jaE5vZGUpOwogICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hO
b2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CkBAIC0xNjQ1LDYgKzE2NjUsMTAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogCiAgICAgZm9yIChtX2luZGV4SW5C
bG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21faW5kZXhJbkJsb2Nr
KSB7CiAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9ja1ttX2luZGV4SW5CbG9ja107CisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBtX2NhbkV4aXQgPSBtX2N1cnJlbnROb2RlLT5jYW5F
eGl0KCk7CisjZW5kaWYKKyAgICAgICAgbV9zdGF0ZS5zdGFydEV4ZWN1dGluZyhtX2N1cnJlbnRO
b2RlKTsKICAgICAgICAgbV9qaXQuc2V0Rm9yTm9kZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAg
bV9jb2RlT3JpZ2luRm9yT1NSID0gbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAg
aWYgKCFtX2N1cnJlbnROb2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CkBAIC0xOTA2LDEzICsxOTMw
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVYKIAogICAgIEZQ
UlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmZwcigpOwogICAgIAotICAgIGlmICghaXNSZWFsTnVtYmVy
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMykubV90eXBlKSkgewotICAgICAgICAv
LyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRv
IGhvaXN0IHRoZW0gaW50bwotICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcsIHZhbHVlUmVnKSk7Ci0gICAgfQorICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVlUmVncygpLCBjaGlsZDMsIFNwZWNSZWFs
TnVtYmVyLAorICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcsIHZhbHVlUmVnKSk7
CiAgICAgCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CkBAIC0yMTA0
LDcgKzIxMjUsOCBAQCBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBTcGVjdWxhdGl2ZUpJVDo6Y2hlCiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIoTm9kZSogbm9kZSkKIHsK
LSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
IHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIG1f
aml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMjExMiwxNDUgKzIxMzQsMTY1
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkgewotICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
LSAgICAgICAgbV9qaXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAgCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGNoZWNrR2Vu
ZXJhdGVkVHlwZUZvclRvSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgIGNhc2Ug
R2VuZXJhdGVkT3BlcmFuZEludGVnZXI6IHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG9wMS5mb3JtYXQo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kRG91
YmxlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBE
b3VibGVVc2UpKTsgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB3aWxsIGFzc2VydCB0aGF0IHRo
aXMgaXMgYSBkb3VibGUgdXNlLiBXZSBmb3JjZSBpdCB0byB0aGluayB0aGF0IGl0IHdhcyBhIGRv
dWJsZSB1c2UsIHNpbmNlIHdlIGFyZSBpbmZlcnJpbmcgdGhhdCB3ZSBvdWdodCB0byBlbWl0IGEg
ZG91YmxlIHVzZSBxdWl0ZSBsYXRlLgotICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOwot
ICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RUcnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRv
SW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKKyAg
ICBjYXNlIE51bWJlclVzZToKKyAgICBjYXNlIE5vdENlbGxVc2U6IHsKKyAgICAgICAgc3dpdGNo
IChjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsK
KyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSW50ZWdlcjogeworICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOworICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgb3AxLmZvcm1hdCgp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdlbmVyYXRl
ZE9wZXJhbmREb3VibGU6IHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIg
PSBvcDEuZnByKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQu
YnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNo
SWZUcnVuY2F0ZUZhaWxlZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKG5vdFRydW5jYXRlZFRvSW50ZWdlciwgdGhpcywgdG9JbnQzMiwg
Z3ByLCBmcHIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bChub3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CiAKLSAg
ICAgICAgaW50ZWdlclJlc3VsdChncHIsIG5vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEpTVmFsdWU6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBub2RlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJh
bmRKU1ZhbHVlOiB7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAKLSAgICAgICAgR1BSUmVnIGdwciA9
IG9wMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdwciA9IHJlc3VsdC5ncHIoKTsKLSAg
ICAgICAgRlBSVGVtcG9yYXJ5IHRlbXBGcHIodGhpcyk7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSB0
ZW1wRnByLmZwcigpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1f
aml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGNv
bnZlcnRlZDsKLQotICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gb3AxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRo
aXMpOworICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGcHIuZnByKCk7CisKKyAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7CisKKyAgICAg
ICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0NlbGwpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwgflNwZWND
ZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEl0
J3Mgbm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGlu
dG8gMC4KLSAgICAgICAgICAgICAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFs
LCBncHIsIFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHcHIpOwotICAgICAgICAgICAg
ICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gSXQncyBub3QgYSBjZWxsOiBzbyB0cnVlIHR1cm5zIGludG8gMSBhbmQgYWxsIGVsc2UgdHVy
bnMgaW50byAwLgorICAgICAgICAgICAgICAgICAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGls
ZXI6OkVxdWFsLCBncHIsIFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHcHIpOworICAg
ICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaXNOdW1iZXIubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBo
ZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICAgICAgbV9qaXQu
bW92ZShncHIsIHJlc3VsdEdwcik7Ci0gICAgICAgIHVuYm94RG91YmxlKHJlc3VsdEdwciwgZnBy
KTsKKyAgICAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91Ymxl
IGVuY29kZWQgYXMgYSBKU1ZhbHVlCisgICAgICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0
R3ByKTsKKyAgICAgICAgICAgIHVuYm94RG91YmxlKHJlc3VsdEdwciwgZnByKTsKIAotICAgICAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKHRvSW50MzIsIHJlc3VsdEdwciwgZnByKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHcHIpOworICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R3ByKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBm
cHIpOworICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwogCi0g
ICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIGNvbnZl
cnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICBpc0ludGVnZXIubGluaygmbV9q
aXQpOwotICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHIsIHJlc3VsdEdwcik7Cisg
ICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQuemVy
b0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHRHcHIpOwogCi0gICAgICAgIGNvbnZlcnRlZC5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwogI2Vsc2UKLSAg
ICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gY2hpbGROb2RlLT52aXJ0dWFsUmVnaXN0
ZXIoKTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gY2hpbGROb2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCi0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogCi0gICAgICAgIEdQUlJl
ZyBwYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdw
ciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gb3AxLnBh
eWxvYWRHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7
CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29udmVydGVkOwotCi0g
ICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcikK
LSAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigpOwotICAgICAg
ICAgICAgRlBSVGVtcG9yYXJ5IHRlbXBGcHIodGhpcyk7Ci0gICAgICAgICAgICBGUFJSZWcgZnBy
ID0gdGVtcEZwci5mcHIoKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29udmVydGVk
OwogCi0gICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051
bWJlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdGFnR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CisgICAgICAgICAgICBpZiAoaW5mby5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIpCisgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnBy
ID0gdGVtcEZwci5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKKworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKTsKKworICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiBTcGVjQ2VsbCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNo
aWxkMSgpLCB+U3BlY0NlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpFcXVh
bCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEgY2VsbDogc28gdHJ1
ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8gMC4KLSAgICAgICAgICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNCb29sZWFuID0gbV9qaXQuYnJhbmNoMzIoSklUQ29t
cGlsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7
Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRH
cHIpOwotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVy
bnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCisgICAgICAgICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Jvb2xlYW4gPSBtX2ppdC5icmFuY2gzMihKSVRDb21w
aWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1
bHRHcHIpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaXNCb29s
ZWFuLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2Fk
R1BSLCByZXN1bHRHcHIpOwotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpc0Jvb2xlYW4ubGluaygmbV9q
aXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1
bHRHcHIpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaXNOdW1i
ZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgaXNOdW1iZXIubGluaygm
bV9qaXQpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZw
ciwgc2NyYXRjaC5mcHIoKSk7CisgICAgICAgICAgICAgICAgdW5ib3hEb3VibGUodGFnR1BSLCBw
YXlsb2FkR1BSLCBmcHIsIHNjcmF0Y2guZnByKCkpOwogCi0gICAgICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0b0lu
dDMyLCByZXN1bHRHcHIsIGZwcik7Ci0gICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R3ByKTsKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3VsdEdw
ciwgZnByKTsKKyAgICAgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdw
cik7CiAKLSAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAg
IGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRH
UFIsIHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7CiAKLSAg
ICAgICAgICAgIGNvbnZlcnRlZC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOworICAgICAgICAgICAgfQogI2VuZGlmCi0gICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0R3ByLCBub2RlKTsKKyAgICAgICAgICAgIGludGVnZXJS
ZXN1bHQocmVzdWx0R3ByLCBub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRUeXBlVW5rbm93bjoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKKyAgICAgICAgU3BlY3VsYXRl
Qm9vbGVhbk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubW92ZShv
cDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LmFuZDMyKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIAorICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUgd2F5Lgor
ICAgICAgICBub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMihub2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRUeXBlVW5rbm93bjoKKyAgICAgICAg
CisgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKQEAgLTI1MzgsNDkgKzI1
ODAsNjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAg
ICBtX2ppdC5tb3ZlKEltbTMyKHRvSW50MzIoZCkpLCBzY3JhdGNoUmVnKTsKICAgICAgICAgdmFs
dWUuYWRvcHQoc2NyYXRjaCk7CiAgICAgICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsKLSAgICB9
IGVsc2UgaWYgKHZhbHVlVXNlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9
IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRj
aFJlZyk7Ci0gICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgICAgICBjb21waWxlQ2xhbXBJ
bnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsKLSAgICAgICAgfQotICAgICAgICB2YWx1
ZS5hZG9wdChzY3JhdGNoKTsKLSAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOwotICAgIH0g
ZWxzZSBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICBBU1NFUlQoZWxl
bWVudFNpemUgPT0gMSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0
aGlzLCB2YWx1ZVVzZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAg
ICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7Ci0gICAgICAgIEZQUlJlZyBmcHIg
PSB2YWx1ZU9wLmZwcigpOwotICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAg
ICAgICBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUobV9qaXQsIGdwciwgZnByLCBmbG9hdFNjcmF0
Y2guZnByKCkpOwotICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwotICAgICAgICB2YWx1ZUdQ
UiA9IGdwcjsKICAgICB9IGVsc2UgewotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZh
bHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwotICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdw
ciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0g
bV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgZnByLCBmcHIp
OwotICAgICAgICBtX2ppdC54b3JQdHIoZ3ByLCBncHIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmaXhlZCA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgbm90TmFOLmxpbmsoJm1faml0
KTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAgIGlmIChz
aWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCi0gICAgICAgICAgICBmYWlsZWQgPSBtX2pp
dC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpC
cmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFpbGVk
ID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3Nl
bWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwotICAgICAgICAKLSAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGZhaWxlZCwgdGhpcywgdG9JbnQzMiwgZ3ByLCBm
cHIpKTsKLQotICAgICAgICBmaXhlZC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIHZhbHVlLmFkb3B0
KHJlc3VsdCk7Ci0gICAgICAgIHZhbHVlR1BSID0gZ3ByOworICAgICAgICBzd2l0Y2ggKHZhbHVl
VXNlLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9wLmdw
cigpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5k
aW5nKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAg
ICAgICAgICAgIGNvbXBpbGVDbGFtcEludGVnZXJUb0J5dGUobV9qaXQsIHNjcmF0Y2hSZWcpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7CisgICAgICAg
ICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBp
ZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgeworICAgICAgICAgICAgICAgIEFTU0VSVChl
bGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IGZsb2F0U2NyYXRjaCh0
aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIGNv
bXBpbGVDbGFtcERvdWJsZVRvQnl0ZShtX2ppdCwgZ3ByLCBmcHIsIGZsb2F0U2NyYXRjaC5mcHIo
KSk7CisgICAgICAgICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAgIEZQUlJl
ZyBmcHIgPSB2YWx1ZU9wLmZwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0g
bV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgZnByLCBmcHIp
OworICAgICAgICAgICAgICAgIG1faml0LnhvclB0cihncHIsIGdwcik7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZml4ZWQgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAg
ICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7CisgICAgICAgICAgICAgICAgaWYgKHNp
Z25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVk
ID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2Vt
Ymxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvVWlu
dDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKGZhaWxlZCwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBmaXhlZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAg
ICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwcjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KKyAgICAKICAgICBB
U1NFUlRfVU5VU0VEKHZhbHVlR1BSLCB2YWx1ZUdQUiAhPSBwcm9wZXJ0eSk7CiAgICAgQVNTRVJU
KHZhbHVlR1BSICE9IGJhc2UpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsK
QEAgLTI3MjIsOCArMjc3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5j
ZU9mRm8KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YoTm9kZSogbm9k
ZSkKIHsKLSAgICBpZiAoKCEhKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3BlY0Nl
bGwpICYmICEhKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWND
ZWxsKSkKLSAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPmFkanVzdGVkUmVmQ291bnQoKSA9PSAx
KSB7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7CiAg
ICAgICAgIC8vIEl0IG1pZ2h0IG5vdCBiZSBhIGNlbGwuIFNwZWN1bGF0ZSBsZXNzIGFnZ3Jlc3Np
dmVseS4KICAgICAgICAgLy8gT3I6IGl0IG1pZ2h0IG9ubHkgYmUgdXNlZCBvbmNlIChpLmUuIGJ5
IHVzKSwgc28gd2UgZ2V0IHplcm8gYmVuZWZpdAogICAgICAgICAvLyBmcm9tIHNwZWN1bGF0aW5n
IGFueSBtb3JlIGFnZ3Jlc3NpdmVseSB0aGFuIHdlIGFic29sdXRlbHkgbmVlZCB0by4KQEAgLTI5
NjEsOSArMzAxNywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyhO
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm9kZSkKIHsKLSAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAg
c3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAg
ICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAg
ICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApAQCAtMjk3OSw3ICszMDM2LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICAgICAgICAgIAogICAg
ICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQz
Mihub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFs
dWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewpAQCAt
MzAyMSw4ICszMDc4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBu
bwogICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbm9kZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJF
eHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkgeworICAgIAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBGUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKQEAgLTMwMzQsMjIgKzMwOTEsMjYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICBkb3VibGVSZXN1
bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlm
IChub2RlLT5vcCgpID09IFZhbHVlQWRkKSB7CisgICAgICAgIAorICAgIGNhc2UgVW50eXBlZFVz
ZTogeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRChub2RlLT5vcCgpID09IFZh
bHVlQWRkKTsKICAgICAgICAgY29tcGlsZVZhbHVlQWRkKG5vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIAotICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0aGlzIHlldC4gOi0oCi0gICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IDApOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aFN1YihOb2RlKiBub2RlKQogewotICAgIGlmIChtX2ppdC5ncmFwaCgp
LmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJp
bmFyeVVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgaWYgKGlzTnVt
YmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQy
KCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2Rl
LT5hcml0aE5vZGVGbGFncygpKSkgewpAQCAtMzA2OSw3ICszMTMwLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAg
ICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIApAQCAtMzA5NywyMCAr
MzE1OCwyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOworICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSk7CiAKLSAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICBGUFJS
ZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQ
UlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVn
MiwgcmVzdWx0LmZwcigpKTsKIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUp
OworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG1f
aml0LmdyYXBoKCkubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgIHN3
aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewog
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCkBAIC0zMTI4LDE3ICszMTk4
LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSgKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0K
LSAgICBtX2ppdC5uZWdhdGVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotCi0gICAg
ZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsK
KyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAg
bV9qaXQubmVnYXRlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgCisg
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3Jh
cGgoKS5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgc3dpdGNoIChub2Rl
LT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0zMTY5LDE3ICszMjQ4LDI1IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBGUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgIEZQUlJlZyByZWcxID0gb3AxLmZw
cigpOwotICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwogICAgICAgICAKLSAgICBtX2ppdC5t
dWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICBjYXNlIE51bWJlclVzZTog
eworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CisgICAg
ICAgIAorICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJl
ZzIgPSBvcDIuZnByKCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwg
cmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1
bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKLSAgICBk
b3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQog
CiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKQEAgLTMyODksMjUgKzMzNzYsMzMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJBcml0aAogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQXJpdGhNb2QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIo
KSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQz
MlVzZTogewogICAgICAgICBjb21waWxlU29mdE1vZHVsbyhub2RlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgCi0gICAg
RlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigp
OworICAgICAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZwcigpOworICAgICAgICBGUFJSZWcgb3Ay
RlBSID0gb3AyLmZwcigpOwogICAgICAgICAKLSAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAKLSAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OwotCi0gICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24sIHJlc3VsdC5mcHIoKSwg
b3AxRlBSLCBvcDJGUFIpOworICAgICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAg
ICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24sIHJlc3VsdC5mcHIo
KSwgb3AxRlBSLCBvcDJGUFIpOwogICAgICAgICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZw
cigpLCBub2RlKTsKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAK
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVu
dCBicmFuY2guCkBAIC0zMzE2LDMzICszNDExLDMzIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBhcmUoTm9kZSogbm9kZSwKICAgICBpZiAoY29tcGlsZVBlZXBIb2xlQnJhbmNoKG5vZGUsIGNv
bmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uLCBvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIGlmIChub2RlLT5pc0JpbmFy
eVVzZUtpbmQoSW50MzJVc2UpKSB7CiAgICAgICAgIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShub2Rl
LCBjb25kaXRpb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlm
IChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpKSB7CisKKyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51
bWJlclVzZSkpIHsKICAgICAgICAgY29tcGlsZURvdWJsZUNvbXBhcmUobm9kZSwgZG91YmxlQ29u
ZGl0aW9uKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7
CiAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25k
aXRpb24sIG9wZXJhdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
LQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYm
IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAKKyAg
ICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKSB7CiAgICAgICAgICAg
ICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVj
dE9yT3RoZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9i
amVjdFVzZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkg
ewogICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUt
PmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVP
YmplY3QoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVj
dE9yT3RoZXJVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewog
ICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNo
aWxkMigpLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KQEAgLTM0MzAsNyArMzUyNSw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
dHJpY3RFcUZvckMKIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZGUq
IG5vZGUpCiB7Ci0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgc3dpdGNoIChub2Rl
LT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIHVuc2ln
bmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAg
IGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgIE5vZGUq
IGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJ
bmRleEluQmxvY2spOwpAQCAtMzQ0NCw4ICszNTQwLDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21waWxlSW50ZWdlckNvbXBhcmUobm9kZSwg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAg
ICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAKKyAgICBjYXNlIE51bWJl
clVzZTogewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVw
SG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFY
KSB7CiAgICAgICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
c1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKQEAgLTM0NTksMTAgKzM1NTUsMTIg
QEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21w
aWxlRG91YmxlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0
ZVN0cmluZygpKQorICAgICAgICAKKyAgICBjYXNlIFN0cmluZ1VzZTogewogICAgICAgICByZXR1
cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxh
dGVPYmplY3QoKSkgeworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPYmplY3RVc2U6IHsKICAg
ICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2go
KTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewogICAgICAg
ICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10t
PmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CkBAIC0zNDc2LDggKzM1NzQsMTUgQEAgYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21waWxlT2JqZWN0RXF1
YWxpdHkobm9kZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7CisgICAgICAgIAorICAgIGNhc2UgVW50
eXBlZFVzZTogeworICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsK
KyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUp
CkBAIC0zODE1LDYgKzM5MjAsMjM5IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5
UmVnaXN0ZXIKICAgICByZXR1cm4gdGVtcG9yYXJ5LmdwcigpOwogfQogCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGVJbnQzMihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhlZGdlLCBTcGVjSW50MzIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgKFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRlTnVtYmVyKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlw
ZUNoZWNrKGVkZ2UsIFNwZWNOdW1iZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNW
YWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0g
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3AxLmdwcigpLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIHR5cGVDaGVjaygKKyAgICAgICAg
SlNWYWx1ZVJlZ3Mob3AxLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBTcGVjTnVtYmVy
LAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMS5n
cHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgaXNJbnRlZ2VyLmxp
bmsoJm1faml0KTsKKyNlbHNlCisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wMS50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSk7CisgICAgdHlwZUNoZWNrKAorICAgICAgICBKU1ZhbHVlUmVncyhvcDEu
dGFnR1BSKCksIG9wMS5wYXlsb2FkR1BSKCkpLCBub2RlLT5jaGlsZDEoKSwgU3BlY051bWJlciwK
KyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3Ax
LnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgIGlzSW50
ZWdlci5saW5rKCZtX2ppdCk7CisjZW5kaWYKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlUmVhbE51bWJlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhl
ZGdlLCBTcGVjUmVhbE51bWJlcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CisgICAgRlBSUmVnIGZwciA9IG9w
ZXJhbmQuZnByKCk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVSZWdzKCks
IGVkZ2UsIFNwZWNSZWFsTnVtYmVyLAorICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgZnByLCBm
cHIpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQm9vbGVhbihFZGdlIGVk
Z2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQm9vbGVhbikpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICAoU3BlY3VsYXRlQm9vbGVhbk9lcHJhbmQodGhpcywgZWRn
ZSkpLmdwcigpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKEVkZ2Ug
ZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIChTcGVjdWxhdGVDZWxsT3BlcmFuZCh0aGlzLCBlZGdlKSku
Z3ByKCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdChFZGdlIGVk
Z2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0KSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywg
ZWRnZSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQu
Z3ByKCkpLCBlZGdlLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3BlcmFuZC5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZU9iamVjdE9yT3RoZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRn
ZSwgU3BlY09iamVjdE9yT3RoZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNWYWx1
ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwor
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyBncHIgPSBvcGVyYW5kLmdw
cigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQo
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3Rlcik7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJh
bmQuZ3ByKCkpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0
cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhncHIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5qdW1wKCk7CisgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgaWYgKG5l
ZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgeworICAgICAgICBtX2pp
dC5tb3ZlKGdwciwgdGVtcEdQUik7CisgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHRlbXBHUFIpOworICAgICAgICAKKyAg
ICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgU3Bl
Y0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CisgICAgfQorI2Vs
c2UKKyAgICBHUFJSZWcgdGFnR1BSID0gb3BlcmFuZC50YWdHUFIoKTsKKyAgICBHUFJSZWcgcGF5
bG9hZEdQUiA9IG9wZXJhbmQucGF5bG9hZEdQUigpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG5vdENlbGwgPQorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICBERkdfVFlQ
RV9DSEVDSygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsICh+U3Bl
Y0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBh
eWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1w
KCk7CisgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKGVk
Z2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgeworICAgICAgICBtX2ppdC5tb3ZlKHRhZ0dQUiwg
dGVtcEdQUik7CisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wR1BSKTsK
KyAgICAgICAgCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRh
Z0dQUiwgcGF5bG9hZEdQUiksIHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCB0ZW1wR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBz
cGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRn
ZSwgU3BlY1N0cmluZykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOworICAgIERGR19UWVBFX0NIRUNLKAorICAgICAg
ICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgU3BlY1N0cmluZywgbV9qaXQuYnJh
bmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wZXJhbmQuZ3ByKCksIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworfQorCit2b2lk
IHNwZWN1bGF0ZU5vdENlbGwoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2so
ZWRnZSwgflNwZWNDZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVy
YW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFu
ZC5ncHIoKSksIGVkZ2UsIH5TcGVjQ2VsbCwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAor
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Olplcm8sIG9wZXJhbmQuZ3ByKCksIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpTVmFsdWVS
ZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wZXJhbmQucGF5bG9hZEdQUigpKSwgZWRnZSwgflNwZWND
ZWxsLAorICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpF
cXVhbCwgb3BlcmFuZC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7
CisjZW5kaWYKK30KKwordm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlIGVkZ2UpCit7CisgICAgaWYg
KCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT3RoZXIpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG1faml0Lm1vdmUob3Bl
cmFuZC5ncHIoKSwgdGVtcEdQUik7CisgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7CisgICAgdHlwZUNoZWNrKAor
ICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgU3BlY090aGVyLAorICAg
ICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgdGVtcEdQUiwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFs
dWVOdWxsKSkpOworI2Vsc2UKKyAgICBtX2ppdC5tb3ZlKG9wZXJhbmQudGFnR1BSKCksIHRlbXBH
UFIpOworICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wR1BSKTsKKyAgICB0eXBl
Q2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wZXJhbmQucGF5
bG9hZEdQUigpKSwgZWRnZSwgU3BlY090aGVyLAorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxs
VGFnKSkpOworI2VuZGlmICAgIAorfQorCit2b2lkIHNwZWN1bGF0ZShFZGdlIGVkZ2UpCit7Cisg
ICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICBBU1NFUlQoIW5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQzMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtu
b3duTnVtYmVyVXNlOgorICAgICAgICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNO
dW1iZXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAg
IEFTU0VSVCghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgc3BlY3VsYXRlSW50MzIoZWRnZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAgc3BlY3VsYXRlUmVh
bE51bWJlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAg
ICAgIHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCb29s
ZWFuVXNlOgorICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENlbGxVc2U6CisgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRn
ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAg
c3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT
dHJpbmdVc2U6CisgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBOb3RDZWxsVXNlOgorICAgICAgICBzcGVjdWxhdGVOb3RDZWxsKGVkZ2UpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVPdGhl
cihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjEsMTMgKzEyMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
R1BSUmVnIGZpbGxJbnRlZ2VyKE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOworICAg
IEdQUlJlZyBmaWxsSW50ZWdlcihFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKKyAgICBHUFJS
ZWcgZmlsbEpTVmFsdWUoRWRnZSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGJvb2wg
ZmlsbEpTVmFsdWUoTm9kZSosIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYpOworICAgIGJvb2wg
ZmlsbEpTVmFsdWUoRWRnZSwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7CiAjZW5kaWYKLSAg
ICBHUFJSZWcgZmlsbFN0b3JhZ2UoTm9kZSopOworICAgIEdQUlJlZyBmaWxsU3RvcmFnZShFZGdl
KTsKIAogICAgIC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgogICAgIHZv
aWQgbG9jayhHUFJSZWcgcmVnKQpAQCAtMjk1LDExICsyOTUsMTEgQEAgcHVibGljOgogCiAgICAg
Ly8gQ2FsbGVkIGJ5IHRoZSBzcGVjdWxhdGl2ZSBvcGVyYW5kIHR5cGVzLCBiZWxvdywgdG8gZmls
bCBvcGVyYW5kIHRvCiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGltcGxpY2l0bHkgZ2VuZXJh
dGluZyBzcGVjdWxhdGlvbiBjaGVja3MgYXMgbmVlZGVkLgotICAgIEdQUlJlZyBmaWxsU3BlY3Vs
YXRlSW50KE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKik7Ci0gICAgRlBS
UmVnIGZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsK
LSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0
aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludChFZGdlLCBEYXRhRm9ybWF0JiByZXR1
cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0
ZUludFN0cmljdChFZGdlKTsKKyAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlLCBT
cGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxsKEVkZ2Us
IFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4o
RWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwogICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBlIGNo
ZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIoTm9kZSopOwogCiAgICAgdm9pZCBhZGRTbG93UGF0
aEdlbmVyYXRvcihQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPik7CkBAIC01NDAsMTIgKzU0
MCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7
IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQogICAgIGlu
dDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3Jh
cGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChub2RlKTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVt
YmVyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mTnVt
YmVyQ29uc3RhbnQobm9kZSk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFz
SW50MzIoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZSkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7Ci0gICAg
ICAgIHJldHVybiBKU0M6OnRvSW50MzIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKLSAg
ICB9CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25z
dGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChu
b2RlKTsgfQogI2VuZGlmCkBAIC0yMDIzLDkgKzIwMTcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
b21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU9iamVjdFRvT2Jq
ZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpOwogICAg
IHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKKyAg
ICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlKTsKICAgICB2
b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKLSAgICB2b2lkIGVtaXRPYmplY3RPck90aGVy
QnJhbmNoKEVkZ2UgdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4s
IGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOworICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJC
cmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbik7
CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUqKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVJbnRl
Z2VyQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwpA
QCAtMjE4OCw2ICsyMTgyLDI0IEBAIHB1YmxpYzoKICAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBv
aW50KiBmb3J3YXJkU3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kID0gVW5jb3VudGFibGVX
YXRjaHBvaW50KTsKICAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldh
dGNocG9pbnQoRXhpdEtpbmQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAKKyAgICAvLyBI
ZWxwZXJzIGZvciBwZXJmb3JtaW5nIHR5cGUgY2hlY2tzIG9uIGFuIGVkZ2Ugc3RvcmVkIGluIHRo
ZSBnaXZlbiByZWdpc3RlcnMuCisgICAgYm9vbCBuZWVkc1R5cGVDaGVjayhFZGdlIGVkZ2UsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCkgeyByZXR1cm4gbV9zdGF0ZS5mb3JOb2Rl
KGVkZ2UpLm1fdHlwZSAmIH50eXBlc1Bhc3NlZFRocm91Z2g7IH0KKyAgICB2b2lkIHR5cGVDaGVj
ayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bh
c3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOworICAgIHZvaWQg
Zm9yd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmKTsKKyAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVlU291
cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsK
KworICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVOdW1i
ZXIoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2UpOworICAgIHZvaWQg
c3BlY3VsYXRlQm9vbGVhbihlZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSk7Cisg
ICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVPYmplY3RP
ck90aGVyKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKEVkZ2UpOworICAgIHZvaWQg
c3BlY3VsYXRlTm90Q2VsbChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOwor
ICAgIHZvaWQgc3BlY3VsYXRlKEVkZ2UpOworICAgIAogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJheU1vZGUpOwogICAgIAogICAgIEpJVENv
bXBpbGVyOjpKdW1wIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRo
SW5kZXhpbmdUeXBlUmVnLCBBcnJheU1vZGUsIEluZGV4aW5nVHlwZSwgYm9vbCBpbnZlcnQpOwpA
QCAtMjI0Nyw2ICsyMjU5LDkgQEAgcHVibGljOgogICAgIC8vIFRoZSBjdXJyZW50IG5vZGUgYmVp
bmcgZ2VuZXJhdGVkLgogICAgIEJsb2NrSW5kZXggbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJl
bnROb2RlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIG1fY2FuRXhpdDsKKyNlbmRp
ZgogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5kIHBoeXNp
Y2FsIHJlZ2lzdGVyIG1hcHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9nZW5l
cmF0aW9uSW5mbzsKQEAgLTIzMDUsMTcgKzIzMjAsMTcgQEAgcHVibGljOgogCiBjbGFzcyBJbnRl
Z2VyT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSW50ZWdlck9wZXJhbmQoU3BlY3Vs
YXRpdmVKSVQqIGppdCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQgSW50ZWdlck9wZXJhbmQoU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUg
PSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAg
ICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAg
ICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAjaWZuZGVmIE5ERUJVRwogICAgICAg
ICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQogI2VuZGlmCiAgICAgewogICAgICAgICBBU1NF
UlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwot
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQobW9kZSA9
PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25JbnQz
MlVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKGVkZ2Uubm9kZSgpKSkKICAgICAgICAg
ICAgIGdwcigpOwogICAgIH0KIApAQCAtMjMyNSw5ICsyMzQwLDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogCisgICAgRWRnZSBlZGdl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQorICAgIAogICAg
IE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAg
ICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAgRGF0YUZvcm1hdCBmb3JtYXQo
KQpAQCAtMjM0MCwyNyArMjM2MCwyNyBAQCBwdWJsaWM6CiAgICAgR1BSUmVnIGdwcigpCiAgICAg
ewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAg
ICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxJbnRlZ2VyKG5vZGUoKSwgbV9mb3JtYXQp
OworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEludGVnZXIobV9lZGdl
LCBtX2Zvcm1hdCk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAg
CiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAg
ICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0
aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAg
R1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAgIERhdGFGb3JtYXQgbV9mb3JtYXQ7CiB9OwogCiBj
bGFzcyBKU1ZhbHVlT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNWYWx1ZU9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQgSlNWYWx1ZU9w
ZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25N
b2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQo
aml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdl
KQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQ
UlJlZykKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0yMzY4LDE0ICsyMzg4LDE0IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNT
RVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0g
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2Up
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkp
CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsK
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIG1fcmVnaXN0ZXIucGFpci50YWdHUFIg
PSBJbnZhbGlkR1BSUmVnOwogICAgICAgICBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiA9IElu
dmFsaWRHUFJSZWc7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBmaWxsKCk7CiAjZW5kaWYK
ICAgICB9CkBAIC0yMzk2LDE3ICsyNDE2LDIyIEBAIHB1YmxpYzoKICAgICAgICAgfQogI2VuZGlm
CiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlm
IChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPcklu
dmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUobm9kZSgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJ
bnZhbGlkID0gbV9qaXQtPmZpbGxKU1ZhbHVlKG1fZWRnZSk7CiAgICAgICAgIHJldHVybiBtX2dw
ck9ySW52YWxpZDsKICAgICB9CiAgICAgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKQpAQCAtMjQx
OSw3ICsyNDQ0LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbCgpCiAgICAgewogICAgICAgICBp
ZiAobV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnICYmIG1fcmVnaXN0ZXIu
cGFpci5wYXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2lzRG91Ymxl
ID0gIW1faml0LT5maWxsSlNWYWx1ZShub2RlKCksIG1fcmVnaXN0ZXIucGFpci50YWdHUFIsIG1f
cmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7CisgICAgICAgICAgICBt
X2lzRG91YmxlID0gIW1faml0LT5maWxsSlNWYWx1ZShtX2VkZ2UsIG1fcmVnaXN0ZXIucGFpci50
YWdHUFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7CiAgICAg
fQogCiAgICAgR1BSUmVnIHRhZ0dQUigpCkBAIC0yNDUxLDEyICsyNDc2LDEyIEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAg
ICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxh
dGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKQEAgLTI0NzMsMTQgKzI0OTgsMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3Rv
cmFnZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNw
ZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAg
ICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAg
ICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAg
ICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVChlZGdlLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkK
ICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAgLTI0OTAsMjYgKzI1MTUsMzEgQEAg
cHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAg
ICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7
CisgICAgfQorICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogICAgIAog
ICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IElu
dmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3Rv
cmFnZShub2RlKCkpOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0
b3JhZ2UoZWRnZSgpKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7Cisg
ICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIFNw
ZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7
CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIApAQCAtMjY0MSw5ICsyNjcxLDkgQEAg
cHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgewogcHVibGljOgotICAg
IGV4cGxpY2l0IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklU
KiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dh
cmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3Bl
cmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUo
dXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52
YWxpZChJbnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Zvcm1hdChE
YXRhRm9ybWF0Tm9uZSkKQEAgLTI2NTEsOCArMjY4MSw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAg
ICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0
LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNlS2lu
ZCgpID09IEtub3duSW50MzJVc2UpKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgp
KSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjY2MSwxMCArMjY5MSwxNSBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsK
ICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQorICAgIAorICAg
IEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0K
IAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsK
KyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAgRGF0YUZvcm1hdCBm
b3JtYXQoKQpAQCAtMjY3NywxOCArMjcxMiwxOCBAQCBwdWJsaWM6CiAgICAgR1BSUmVnIGdwcigp
CiAgICAgewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAg
ICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnQobm9kZSgp
LCBtX2Zvcm1hdCwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBt
X2ppdC0+ZmlsbFNwZWN1bGF0ZUludChlZGdlKCksIG1fZm9ybWF0LCBtX2RpcmVjdGlvbik7CiAg
ICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2Uo
KQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNl
KG5vZGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsK
LSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJ
bnZhbGlkOwogICAgIERhdGFGb3JtYXQgbV9mb3JtYXQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rp
b24gbV9kaXJlY3Rpb247CkBAIC0yNjk2LDE0ICsyNzMxLDE0IEBAIHByaXZhdGU6CiAKIGNsYXNz
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQor
ICAgIGV4cGxpY2l0IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCog
aml0LCBFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09w
ZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2Rl
KHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPcklu
dmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAg
ICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQt
PmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VLaW5k
KCkgPT0gS25vd25JbnQzMlVzZSkpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkp
KQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yNzEyLDQxICsyNzQ3LDQ2IEBAIHB1
YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwog
ICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CisgICAgCisgICAg
RWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQog
CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOwor
ICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBHUFJSZWcgZ3ByKCkK
ICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAg
ICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludFN0cmljdChu
b2RlKCkpOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0
ZUludFN0cmljdChlZGdlKCkpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAg
fQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2Rl
KTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBT
cGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdl
OwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKIGNsYXNzIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQo
U3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgZXhwbGljaXQgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1v
ZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChq
aXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2Up
CiAgICAgICAgICwgbV9mcHJPckludmFsaWQoSW52YWxpZEZQUlJlZykKICAgICAgICAgLCBtX2Rp
cmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAg
ICBBU1NFUlQodXNlLnVzZUtpbmQoKSA9PSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5p
c0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IE51bWJlclVzZSB8fCB1c2UudXNlS2luZCgp
ID09IEtub3duTnVtYmVyVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IFJlYWxOdW1iZXJVc2UpKTsK
KyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGZwcigpOwog
ICAgIH0KIApAQCAtMjc1NSw0MiArMjc5NSw0NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCht
X2Zwck9ySW52YWxpZCAhPSBJbnZhbGlkRlBSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayht
X2Zwck9ySW52YWxpZCk7CiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5u
b2RlKCk7CiAgICAgfQogCiAgICAgRlBSUmVnIGZwcigpCiAgICAgewogICAgICAgICBpZiAobV9m
cHJPckludmFsaWQgPT0gSW52YWxpZEZQUlJlZykKLSAgICAgICAgICAgIG1fZnByT3JJbnZhbGlk
ID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVEb3VibGUobm9kZSgpLCBtX2RpcmVjdGlvbik7CisgICAg
ICAgICAgICBtX2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlRG91YmxlKGVkZ2Uo
KSwgbV9kaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9mcHJPckludmFsaWQ7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsK
KyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVj
dWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwog
ICAgIEZQUlJlZyBtX2Zwck9ySW52YWxpZDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2Rp
cmVjdGlvbjsKIH07CiAKIGNsYXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBTcGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdl
IHVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlv
bikKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3Bl
Y3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRT
cGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5u
b2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQo
SW52YWxpZEdQUlJlZykKICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBE
b3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBB
U1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgp
ID09IENlbGxVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlIHx8IGVkZ2UudXNl
S2luZCgpID09IE9iamVjdFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBGdW5jdGlvblVzZSB8fCBl
ZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjc5OSw0MiArMjg0NCw0
NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BS
UmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQorICAg
IAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOwor
ICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
bm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAgR1BSUmVn
IGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJl
ZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxs
KG5vZGUoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2pp
dC0+ZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVy
biBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAg
ICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAg
ICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBt
X25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAg
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKIAogY2xhc3MgU3BlY3VsYXRl
Qm9vbGVhbk9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5P
cGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0
ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1
bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6
IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2Vk
Z2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgICAg
ICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7
Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlm
IChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlKTsKKyAgICAg
ICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0K
ICAgICAKQEAgLTI4NDQsMzAgKzI4OTQsNDEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5s
b2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQorICAgIAogICAgIE5vZGUqIG5v
ZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJu
IGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogICAgIAogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAg
ICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBt
X2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQm9vbGVhbihub2RlKCksIG1fZGly
ZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxh
dGVCb29sZWFuKGVkZ2UoKSwgbV9kaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9ncHJPcklu
dmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0
LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJp
dmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAg
IEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CiAKKyNkZWZpbmUgREZHX1RZUEVfQ0hFQ0soc291
cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpIGRvIHsgXAorICAgICAg
ICBpZiAoIW5lZWRzVHlwZUNoZWNrKChlZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCkpKSAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0eXBlQ2hlY2soKHNvdXJjZSks
IChlZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCksIChqdW1wVG9GYWlsKSk7IFwKKyAgICB9IHdo
aWxlICgwKQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR1VzZUtpbmRfaAorI2RlZmluZSBERkdVc2VLaW5kX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJTcGVjdWxh
dGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gVXNlS2luZCB7CisgICAgVW50eXBlZFVzZSwKKyAg
ICBJbnQzMlVzZSwKKyAgICBLbm93bkludDMyVXNlLAorICAgIFJlYWxOdW1iZXJVc2UsCisgICAg
TnVtYmVyVXNlLAorICAgIEtub3duTnVtYmVyVXNlLAorICAgIEJvb2xlYW5Vc2UsCisgICAgQ2Vs
bFVzZSwKKyAgICBLbm93bkNlbGxVc2UsCisgICAgT2JqZWN0VXNlLAorICAgIE9iamVjdE9yT3Ro
ZXJVc2UsCisgICAgU3RyaW5nVXNlLAorICAgIE5vdENlbGxVc2UsCisgICAgT3RoZXJVc2UsCisg
ICAgTGFzdFVzZUtpbmQgLy8gTXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGVu
dW0sIGFzIGl0IGlzIHVzZWQgdG8gZGVub3RlIHRoZSBudW1iZXIgb2YgZW51bSBlbGVtZW50cy4K
K307CisKK0FMV0FZU19JTkxJTkUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLaW5k
IHVzZUtpbmQpCit7CisgICAgc3dpdGNoICh1c2VLaW5kKSB7CisgICAgY2FzZSBVbnR5cGVkVXNl
OgorICAgICAgICByZXR1cm4gU3BlY1RvcDsKKyAgICBjYXNlIEludDMyVXNlOgorICAgIGNhc2Ug
S25vd25JbnQzMlVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNJbnQzMjsKKyAgICBjYXNlIFJlYWxO
dW1iZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjUmVhbE51bWJlcjsKKyAgICBjYXNlIE51bWJl
clVzZToKKyAgICBjYXNlIEtub3duTnVtYmVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY051bWJl
cjsKKyAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIHJldHVybiBTcGVjQm9vbGVhbjsKKyAg
ICBjYXNlIENlbGxVc2U6CisgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgIHJldHVybiBT
cGVjQ2VsbDsKKyAgICBjYXNlIE9iamVjdFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNPYmplY3Q7
CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY09iamVjdCB8
IFNwZWNPdGhlcjsKKyAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAgcmV0dXJuIFNwZWNTdHJp
bmc7CisgICAgY2FzZSBOb3RDZWxsVXNlOgorICAgICAgICByZXR1cm4gflNwZWNDZWxsOworICAg
IGNhc2UgT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT3RoZXI7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNw
ZWNUb3A7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNOdW1lcmljYWwoVXNlS2lu
ZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW50MzJVc2U6CisgICAg
Y2FzZSBLbm93bkludDMyVXNlOgorICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICBjYXNlIE51
bWJlclVzZToKKyAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpVc2VLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1VzZUtpbmRfaAor
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189176</attachid>
            <date>2013-02-19 15:10:14 -0800</date>
            <delta_ts>2013-02-19 15:49:51 -0800</delta_ts>
            <desc>it compiles (in 64-bit)</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>293591</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzMzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNiBA
QAorMjAxMy0wMi0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgbm90IGNoYW5nZSBpdHMgbWluZCBhYm91dCB3aGF0IHR5cGUgc3BlY3VsYXRp
b25zIGEgbm9kZSBkb2VzLCBieSBlbmNvZGluZyB0aGUgY2hlY2tzIGluIHRoZSBOb2RlVHlwZSwg
VXNlS2luZCwgYW5kIEFycmF5TW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBGaXh1cFBoYXNlIG5vdyBsb2NrcyBpbiB0aGUgc3BlY3Vs
YXRpb25zIHRoYXQgZWFjaCBub2RlIHdpbGwgZG8uIEl0IHRoZW4gcmVtZW1iZXJzCisgICAgICAg
IHRob3NlIHNwZWN1bGF0aW9ucyBmb3IgYWxsIHRpbWUuIEVhY2ggbm9kZSBlbnN1cmVzIHRoYXQg
aXQgZXhlY3V0ZXMgdGhlIHNwZWN1bGF0aW9ucworICAgICAgICBwcm9taXNlZCBieSBpdHMgZWRn
ZXMuIFRoaXMgaXMgdHJ1ZSBldmVuIGZvciBQaGFudG9tIG5vZGVzLgorICAgICAgICAKKyAgICAg
ICAgV29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKToKKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVkZ2Vz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRl
Lmg6CisgICAgICAgIChBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFN0YXRlOjpmaWx0ZXJFZGdlQnlVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmZpbHRlckJ5VHlwZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAqIGRmZy9E
RkdBZGphY2VuY3lMaXN0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6QWRq
YWNlbmN5TGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6Y2hpbGQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldENoaWxkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBZGphY2VuY3lMaXN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNl
bmN5TGlzdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6
c2V0Rmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6bnVtQ2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldE51bUNoaWxkcmVu
KToKKyAgICAgICAgKEFkamFjZW5jeUxpc3QpOgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3Iu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFsbG9jYXRvcjo6Y2VsbFNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6
UmVnaW9uOjpoZWFkZXJTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBbGxvY2F0b3I6OlJlZ2lv
bjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRv
cjo6UmVnaW9uOjpwYXlsb2FkU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpS
ZWdpb246OnBheWxvYWRCZWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpSZWdp
b246OnBheWxvYWRFbmQpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6UmVnaW9uOjpp
c0luVGhpc1JlZ2lvbik6CisgICAgICAgIChKU0M6OkRGRzo6OjpBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6fkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjpmcmVlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmZy
ZWVBbGwpOgorICAgICAgICAoSlNDOjpERkc6Ojo6cmVzZXQpOgorICAgICAgICAoSlNDOjpERkc6
Ojo6aW5kZXhPZik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0b3JPZik6CisgICAgICAg
IChKU0M6OkRGRzo6OjpidW1wQWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZnJlZUxp
c3RBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0ZVNsb3cpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KToKKyAgICAgICAgKEpTQzo6REZH
Ojo6OnN0YXJ0QnVtcGluZ0luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKiBk
ZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRMb2Nh
bFN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRSZXBs
YWNlbWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3Rh
bnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAgICAgICAq
IGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdFZGdlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpkdW1wKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZS5oOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OnNoaWZ0KToK
KyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OkZpeHVwUGhhc2U6OmZpeEludEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVw
UGhhc2U6OmZpeERvdWJsZUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6Omlu
amVjdEludDMyVG9Eb3VibGVOb2RlKToKKyAgICAgICAgKEZpeHVwUGhhc2UpOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OnRydW5jYXRlQ29uc3RhbnRUb0ludDMyKToKKyAgICAgICAg
KEpTQzo6REZHOjpGaXh1cFBoYXNlOjp0cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjphdHRlbXB0VG9NYWtlSW50ZWdlckFkZCk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OnJlZkNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGVy
ZWZDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OnBlcmZvcm1TdWJzdGl0dXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojppc1ByZWRpY3RlZE51bWVyaWNhbCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIpOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb0dldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpjb252ZXJ0VG9QdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Y2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDIpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YmluYXJ5
VXNlS2luZCk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc0Jp
bmFyeVVzZUtpbmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlQWxsb2NhdG9yLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBvaW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRUeXBlQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1Yik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVJbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZVJlYWxOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9i
amVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVj
dE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVT
dHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVOb3RD
ZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT3RoZXIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mTnVtYmVyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpuZWVkc1R5cGVDaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OkludGVnZXJPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChJbnRlZ2VyT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6Om5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6Oklu
dGVnZXJPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVPcGVyYW5kOjpK
U1ZhbHVlT3BlcmFuZCk6CisgICAgICAgIChKU1ZhbHVlT3BlcmFuZCk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6Z3ByKToK
KyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6ZmlsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9w
ZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFu
ZDo6ZWRnZSk6CisgICAgICAgIChTdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RvcmFnZU9wZXJhbmQ6Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5k
OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjp1c2UpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCk6CisgICAgICAgIChTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQ6OlNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCk6CisgICAgICAgIChTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQ6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQpOgorICAgICAgICAoU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6ZWRn
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6bm9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6ZnByKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kOjpTcGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAg
IChTcGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2Vs
bE9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5k
Ojpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6Z3ByKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6dXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6U3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOjplZGdlKToK
KyAgICAgICAgKFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQm9v
bGVhbk9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zmls
bEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVJbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50U3RyaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0
eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9i
amVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAg
ICAqIGRmZy9ERkdVc2VLaW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHVXNlS2luZC5oOiBBZGRlZC4K
KyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6dHlwZUZpbHRlckZvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6aXNOdW1lcmljYWwpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiBk
ZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjpyZXBvcnRW
YWxpZGF0aW9uQ29udGV4dCk6CisKIDIwMTMtMDItMTggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIGluIHIxNDMzNDguCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQzMjc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksOCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1
MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5jcHAgKi87IH07CiAJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2lu
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4
N0YyRjE2ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZE
MiAvKiBERkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMzRCMTQ5
MTZENDIwMTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdV
c2VLaW5kLmNwcCAqLzsgfTsKKwkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRC
MTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQjNBMUExNTNFNjhGMjAwM0VEMEZGIC8q
IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBE
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYz
QjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICov
OyB9OwpAQCAtMTAwMCw2ICsxMDAyLDggQEAKIAkJMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8q
IERGR1ZhcmlhYmxlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHVmFyaWFibGVFdmVudC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAv
KiBERkdDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERGR0NvZGVCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNTU2
RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RG
R1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM0QjE0ODE2RDQy
MDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdVc2VLaW5kLmg7IHBhdGggPSBkZmcvREZHVXNlS2luZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTgxNTNFNjhFRjAw
M0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNB
MjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzA3LDYgKzI3MTEsOCBAQAogCQkJCTBGQzA5N0EwMTQ2
QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKIAkJCQkwRkJFMEY2RjE2QzFEQjAxMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNzAxNkMxREIw
MTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjM0QjE0NzE2RDQy
MDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8sCisJCQkJMEYzNEIxNDgxNkQ0MjAwRTAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLywKIAkJCQkwRjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYg
LyogREZHVmFsaWRhdGUuY3BwICovLAogCQkJCTBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBE
RkdWYWxpZGF0ZS5oICovLAogCQkJCTBGMkJEQzNGMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYWx1
ZVJlY292ZXJ5T3ZlcnJpZGUuaCAqLywKQEAgLTMyNDcsNiArMzI1Myw3IEBACiAJCQkJODY4OTE2
QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ1MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTVDRDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5
dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzk1Myw2ICszOTYwLDcgQEAK
IAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2Zp
bGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2lu
U3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8q
IFByb2ZpbGVyT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQzMjc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNjEgQEAgQWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3Vs
dCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9vbGVhblJlc3VsdDsKIH0KIAotYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK2Jvb2wgQWJz
dHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobV9i
bG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgCiAgICAgbV9kaWRDbG9iYmVyID0g
ZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7
Ci0gICAgICAgIAogICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
QWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKQorewor
ICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spKTsKK30K
Kwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMoTm9kZSogbm9kZSkKK3sKKyAgICBE
RkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBmaWx0ZXJFZGdlQnlVc2UpOwor
fQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdlcyh1bnNpZ25lZCBpbmRleEluQmxv
Y2spCit7CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0KGluZGV4SW5CbG9jaykpOworfQor
Cit2b2lkIEFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2UoRWRnZSBlZGdlKQoreworICAgIEFTU0VS
VCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkp
KSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5RWRnZXMoTm9kZSogbm9kZSkKK3sK
KyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCB2ZXJpZnlFZGdlKTsK
K30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleElu
QmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAg
IHZlcmlmeUVkZ2VzKG5vZGUpOworICAgIAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
IGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgUGhh
bnRvbUFyZ3VtZW50czogewogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJZGVudGl0eTogewogICAg
ICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTI2NSwxOSArMjk2LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNz
RGF0YS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lKSB7CiAgICAgICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVzLm9wZXJhbmQodmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpKTsKICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKLSAgICAgICAgICAg
ICAgICBjYW5FeGl0IHw9IHRydWU7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7
Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkBAIC0yODYsMzUgKzMxNCwxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQogICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1
ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICBpZiAobm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5p
c0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkpIHsKLSAgICAgICAgICAgIG1fdmFy
aWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51
bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5s
b2NhbCgpKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24o
cHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgfSBlbHNl
IGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIAogICAgICAgICBtX3ZhcmlhYmxlcy5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTMyMiw3ICszMjUsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0
IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCiAgICAgICAgIEFTU0VS
VCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigp
KTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNjYsNyArMzY4LDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5v
ZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0zODEsMTYgKzM4MiwxNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAg
ICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50MzI6IHsKICAgICAgICAgSlNWYWx1
ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CkBAIC00MDQsNyArNDAz
LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDIz
LDE2ICs0MjEsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2Rl
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcih+U3BlY0NlbGwpOwotICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKQEAg
LTQ0Nyw3ICs0MzUsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkp
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAg
IGVsc2UKQEAgLTQ1NSwxMCArNDQyLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQ2hl
Y2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVt
YmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICBjYXNlIFZhbHVlQWRkOgog
ICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTQ2OSwzMCArNDUyLDI1IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUlu
dGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJp
bmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgogICAg
ICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSkKICAgICAgICAgICAgICAgICAmJiBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQogICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IFZhbHVlQWRkKSB7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVl
QWRkKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyB8IFNwZWNJ
bnQzMiB8IFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCBoYW5k
bGUgdGhpcyB5ZXQuIDotKAotICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAg
CkBAIC01MDUsMTUgKzQ4MywxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAotICAg
ICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmlu
YXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7CkBAIC01
MjQsMTUgKzUwNiwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkoCi0gICAgICAg
ICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxh
Z3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0lu
dDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0
aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFy
eShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aE11bDogewpAQCAtNTQ0LDIx
ICs1MzAsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAg
ICBub2RlLAotICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25vcmVOZWdhdGl2
ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJp
bmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKQorICAgICAgICAgICAgICAgIHx8ICFu
b2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAgICAgICAgIHx8
IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkp
CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3Vi
bGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBpZiAoaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQotICAg
ICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkubV90eXBlKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFs
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJs
ZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aERpdjoK
QEAgLTU5NSwxNSArNTg0LDE4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAm
JiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyQmluYXJ5KG5vZGUsIHRydWUpOyAvLyBmb3JjaW5nIGNhbi1leGl0LCB3aGljaCBpcyBhIGJp
dCBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUuCisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5
VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVy
QmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aEFiczogewpA
QCAtNjE0LDE1ICs2MDYsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1
bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlLCB0
cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7CkBAIC02MzMsNyArNjI4LDYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTY1NSwxOCArNjQ5LDE5
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgIGlm
IChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKLSAgICAgICAgICAg
IHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIGNh
c2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICBjYXNlIFVudHlw
ZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNl
OgogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwot
ICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChjaGls
ZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJV
bmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTc2NCwxNCArNzU5LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24oY2hpbGROb2RlLT5w
cmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihjaGls
ZE5vZGUtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUp
LmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsKKworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAg
ICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CkBAIC04MjksNTkgKzgyNywx
MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIAotICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFudCkgewotICAgICAgICAgICAgLy8g
V2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1VuZGVmaW5k
IHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0gICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGVDaGVja2Vy
IGNoZWNrZXI7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQs
IHJpZ2h0KSkgewotICAgICAgICAgICAgZmlsdGVyID0gU3BlY0ludDMyOwotICAgICAgICAgICAg
Y2hlY2tlciA9IGlzSW50MzJTcGVjdWxhdGlvbjsKLSAgICAgICAgfSBlbHNlIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdCwgcmlnaHQpKSB7Ci0gICAgICAgICAgICBmaWx0ZXIg
PSBTcGVjTnVtYmVyOwotICAgICAgICAgICAgY2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247
Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAg
ICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodC0+c2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICBp
ZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0
ZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkg
ewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICAgICAgZm9y
Tm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiByaWdodC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAg
ICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOwotICAgICAg
ICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAgIGZpbHRlciA9IFNwZWNU
b3A7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZmlsdGVyID0gU3BlY1RvcDsKLSAgICAgICAgICAgIGNoZWNr
ZXIgPSBpc0FueVNwZWN1bGF0aW9uOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCgKLSAgICAgICAgICAgICFjaGVja2VyKGZvck5vZGUobGVmdCkubV90eXBlKQotICAgICAg
ICAgICAgfHwgIWNoZWNrZXIoZm9yTm9kZShyaWdodCkubV90eXBlKSk7Ci0gICAgICAgIGZvck5v
ZGUobGVmdCkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihm
aWx0ZXIpOworICAgICAgICAvLyBUaGlzIGlzIG92ZXJseSBjb25zZXJ2YXRpdmUuIEJ1dCB0aGUg
b25seSB0aGluZyB0aGlzIHByZXZlbnRzIGlzIHN0b3JlIGVsaW1pbmF0aW9uLAorICAgICAgICAv
LyBhbmQgaG93IGxpa2VseSBpcyBpdCwgcmVhbGx5LCB0aGF0IHlvdSdsbCBoYXZlIHJlZHVuZGFu
dCBzdG9yZXMgYWNyb3NzIGEgY29tcGFyaXNvbgorICAgICAgICAvLyBvcGVyYXRpb24/IENvbXBh
cmlzb24gb3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IGF0IHRoZSBlbmQgb2YgYmFzaWMgYmxvY2tz
LCBzbworICAgICAgICAvLyB1bmxlc3Mgd2UgaGF2ZSBnbG9iYWwgc3RvcmUgZWxpbWluYXRpb24g
KHN1cGVyIHVubGlrZWx5IGdpdmVuIGhvdyB1bnByb2ZpdGFibGUgdGhhdAorICAgICAgICAvLyBv
cHRpbWl6YXRpb24gaXMgdG8gYmVnaW4gd2l0aCksIHlvdSBhcmVuJ3QgZ29pbmcgdG8gYmUgd2Fu
dGluZyB0byBzdG9yZSBlbGltaW5hdGUKKyAgICAgICAgLy8gYWNyb3NzIGFuIGVxdWFsaXR5IG9w
LgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgICAgICAKQEAgLTg5OCw0MyArODUwLDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKLSAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0
Tm9kZSwgcmlnaHROb2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5v
ZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlZnROb2Rl
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0
cmluZygpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KCkgJiYgcmlnaHROb2RlLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgewotICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobGVm
dE5vZGUpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAgIGZvck5vZGUocmlnaHROb2Rl
KS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKQEAgLTk1NCwxNSArODgwLDEyIEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KSkgewogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAt
OTcwLDcgKzg5Myw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTgyLDQ4ICs5MDQsMzggQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2Ug
QXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
PmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91Ymxl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKQEAgLTEwMzYsOSArOTQ4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OiB7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIEVkZ2UgY2hpbGQx
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkubW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CiAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKQEAgLTEwNDcsMTA0ICs5NTYsMjMgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkp
CiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMykuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQx
KS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVy
KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0g
ICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051
bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50
MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMp
LmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNw
ZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExNTIsMTYgKzk4
MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIAogICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
UmVhbE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjTnVt
YmVyKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTc0LDExICs5OTIsNiBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFJlZ0V4
cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAot
ICAgICAgICAgICAgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkKLSAgICAgICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xMjAzLDI0ICsxMDE2LDEzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1
dCB3ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291
cmNlIHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhl
IGJyYW5jaC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIo
U3BlY09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9k
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBtX2JyYW5j
aERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAg
Y2FzZSBUaHJvdzoKQEAgLTEyMzAsMjIgKzEwMzIsMTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKGNo
aWxkKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENvbnN0
LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAg
IHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUoY2hpbGQpOworICAgICAgICBBYnN0cmFjdFZhbHVl
JiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAKICAgICAgICAgLy8gTkIu
IFRoZSBtb3JlIGNhbm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVlbjoK
QEAgLTEyNzUsMzkgKzEwNzQsMTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAgICAg
ICAgIGRlc3RpbmF0aW9uLnNldCh0eXBlKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgU3RyQ2F0
OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBOZXdBcnJheToKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgc3dp
dGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgQVNT
RVJUKCFub2RlLT5udW1DaGlsZHJlbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
b3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytv
cGVyYW5kSW5kZXgpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XSkuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5H
X1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVy
YW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxk
KCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTEzMjAsNyArMTA5NSw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKIAogICAgIGNhc2Ug
TmV3QXJyYXlXaXRoU2l6ZToKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNBcnJheSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0
cnVlOwogICAgICAgICBicmVhazsKQEAgLTEzMzIsNyArMTEwNiw2IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JO
b2RlKG5vZGUpOwogICAgICAgICAgICAgCkBAIC0xMzQ3LDMyICsxMTIwLDI2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpc090
aGVyU3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIHNvdXJj
ZS5maWx0ZXIoU3BlY090aGVyKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgICAgIGRlc3RpbmF0aW9u
LnNldChTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9u
KCkpKSB7Ci0gICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPYmplY3QpOworICAgICAgICBj
YXNlIE9iamVjdFVzZToKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKICAgICAgICAgICAgIGRlc3Rp
bmF0aW9uID0gc291cmNlOworICAgICAgICAgICAgZGVzdGluYXRpb24ubWVyZ2UoU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGNhc2UgQ3JlYXRlVGhpczogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBz
b3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwotICAgICAgICAKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oc291cmNlLm1fdHlwZSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgIHNvdXJjZS5maWx0ZXIoU3BlY0Z1bmN0aW9uKTsKLSAgICAgICAgZGVzdGluYXRp
b24uc2V0KFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNG
aW5hbE9iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xMzgxLDE5
ICsxMTQ4LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE5ld09iamVjdDoKLSAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG5vZGUtPnN0cnVjdHVyZSgp
KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CkBAIC0xNDA3LDEwICsxMTcxLDkg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBpZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAog
ICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkp
IHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5
cGUpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgIH0gZWxz
ZQorICAgICAgICBlbHNlCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCkBAIC0xNDMwLDcgKzExOTMsNiBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVj
dHVyZXMgaWYgdGhlIGFyZ3VtZW50cyBvYmplY3QgaGFkIGEgZ2V0dGVyCiAgICAgICAgIC8vIGlu
c3RhbGxlZCBvbiB0aGUgbGVuZ3RoIHByb3BlcnR5LgogICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKQEAgLTE0NDQsNyArMTIwNiw2IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gV2Uga25vdyB0
aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2Ug
Y2FuIG9wdGltaXplCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0
aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCiAgICAgICAgIC8vIEFy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTQ1Myw4ICsxMjE0LDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAvLyBUaGlzIHBvdGVudGlh
bGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBhY2Nlc3Np
bmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVjdWxhdGUgYWdhaW5zdCB0
aGlzLgogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgLy8gQnV0IHdlIGRvIHNwZWN1bGF0ZSB0aGF0IHRoZSBpbmRleCBpcyBhbiBp
bnRlZ2VyLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KICAgICAgICAgZm9yTm9k
ZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ2MiwyOSArMTIyMSwyNCBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBOZXdG
dW5jdGlvbjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICBjYXNlIE5ld0Z1
bmN0aW9uTm9DaGVjazoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPmZ1bmN0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRnVuY3Rpb24pOwogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBTZXRDYWxsZWU6CiAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICBjYXNlIEdldFNjb3BlOiAvLyBGSVhNRTogV2UgY291bGQgZ2V0IHJpZCBvZiB0aGVz
ZSBpZiB3ZSBrbm93IHRoYXQgdGhlIEpTRnVuY3Rpb24gaXMgYSBjb25zdGFudC4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMgogICAgIGNhc2UgR2V0TXlTY29w
ZToKICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgU2tpcFNjb3BlOiB7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
dmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFs
dWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKQEAgLTE0OTUsMTggKzEyNDksMTQgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KIAogICAgIGNhc2Ug
R2V0U2NvcGVSZWdpc3RlcnM6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRTY29wZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKLSAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9k
ZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xNTE4LDgg
KzEyNjgsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24o
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0KICAgICAgICAgICAgIGlmIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1
cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2dsb2JhbERh
dGEsIHN0cnVjdHVyZSwKQEAgLTE1NTUsNyArMTMwMyw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gbW9yZSB0aG9yb3VnaGx5LiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAwCiAgICAgICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBlbGltaW5hdGUgdGhlc2UgZW50aXJlbHkgaWYgd2Uga25vdyB0aGUgZXhhY3Qg
dmFsdWUgdGhhdCBmbG93cyBpbnRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDEKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTU2NCw2ICsxMzExLDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0
dXJlOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUg
dGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5n
IHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgogICAgICAgICAvLyBJZiB0aGlzIHN0
cnVjdHVyZSBjaGVjayBpcyBhdHRlbXB0aW5nIHRvIHByb3ZlIGtub3dsZWRnZSBhbHJlYWR5IGhl
bGQgaW4KICAgICAgICAgLy8gdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHNldCB0aGVuIHRo
ZSBjb25zdGFudCBmb2xkaW5nIHBoYXNlIHNob3VsZAogICAgICAgICAvLyB0dXJuIHRoaXMgaW50
byBhIHdhdGNocG9pbnQgaW5zdGVhZC4KQEAgLTE1NzEsOSArMTMxOSw4IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKHZhbHVlLm1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICB8fCB2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAg
ICAgICF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKLSAgICAg
ICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgaWYg
KCF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsK
ICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTU5
MSw3ICsxMzM4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAvLyBpbmZpbml0eSBvZiBzdHJ1Y3R1cmVzLgogICAgICAgICBBU1NFUlQodmFsdWUu
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChub2RlLT5z
dHJ1Y3R1cmUoKSkpKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVCh2YWx1ZS5pc0NsZWFyKCkg
fHwgaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSk7IC8vIFZhbHVlIGNvdWxkIGJlIGNs
ZWFyIGlmIHdlJ3ZlIHByb3ZlbiBtdXN0LWV4aXQgZHVlIHRvIGEgc3BlY3VsYXRpb24gc3RhdGlj
YWxseSBrbm93biB0byBiZSBiYWQuCiAgICAgICAgIHZhbHVlLmZpbHRlcihub2RlLT5zdHJ1Y3R1
cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwpAQCAtMTYwMCw3ICsxMzQ2LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgotICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5z
ZXQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwpAQCAtMTYx
MCwxNCArMTM1NSwxMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMg
dmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1
ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGllcywg
YnV0IHRoaXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9ucyAobGlrZSBHZXRCeVZhbCkgdGhhdCBh
bHdheXMgZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXMgdHJ5aW5nIHRvIGJlIGNsZXZl
ciBoZXJlLgpAQCAtMTYzMCw3ICsxMzcyLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQXJndW1l
bnRzKTsKQEAgLTE2NzksOSArMTQyMCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24o
KSA9PSBBcnJheTo6Q29udmVydAogICAgICAgICAgICAgfHwgbm9kZS0+YXJyYXlNb2RlKCkuY29u
dmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXJB
cnJheU1vZGVzKG5vZGUtPmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygp
KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CkBAIC0xNjk0LDM1ICsxNDMyLDIw
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkpCi0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVj
dHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CiAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CiAgICAgICAgIGJyZWFrOyAK
ICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFp
c0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAg
IH0KICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewotICAgICAgICBib29sIGNhbkV4aXQg
PSBmYWxzZTsKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgp
KSB7Ci0gICAgICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgfQotICAgICAgICBjYW5FeGl0IHw9ICFpc0Nl
bGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpOwotICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGNhbkV4aXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAK
QEAgLTE3NjYsMTIgKzE0ODksMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTE3ODEsMzQgKzE1MDIsMjMgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBQdXRHbG9iYWxWYXI6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKLSAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
Y2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAg
ICAvLyBTYWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBD
aGVja0hhc0luc3RhbmNlCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBJ
bnN0YW5jZU9mOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBB
Z2Fpbiwgc2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUg
SW5zdGFuY2VPZgotICAgICAgICAvLyBGSVhNRTogVGhpcyBhcHBlYXJzIGJyb2tlbjogQ2hlY2tI
YXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRpb25hbCBjZWxsCi0gICAgICAgIC8v
IGNoZWNrLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDc5Ci0g
ICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpICYm
ICEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNDZWxsKSkKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKICAgICBjYXNlIEJyZWFrcG9pbnQ6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2FsbDoKQEAgLTE4MzYs
NyArMTU0Niw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICBjYXNlIElubGluZVN0YXJ0OgogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgQ291bnRFeGVjdXRp
b246Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CkBAIC0xODQ3LDYgKzE1NTYsMjEgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIHJldHVybiBtX2lzVmFs
aWQ7CiB9CiAKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5k
ZXhJbkJsb2NrKQoreworICAgIHJldHVybiBleGVjdXRlRWZmZWN0cyhpbmRleEluQmxvY2ssIG1f
YmxvY2stPmF0KGluZGV4SW5CbG9jaykpOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5h
dChpbmRleEluQmxvY2spOworICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9kZSkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKKyAgICByZXR1cm4g
ZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsKK30KKwogaW5saW5lIHZvaWQgQWJz
dHJhY3RTdGF0ZTo6Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIHVu
c2lnbmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvZGVPcmln
aW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDUyIEBAIHB1YmxpYzoK
ICAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBhc3QgdGhpcyBub2RlLiBOb3Rh
Ymx5LCBpdCB3aWxsIHJldHVybiB0cnVlCiAgICAgLy8gZm9yIGJsb2NrIHRlcm1pbmFscywgc28g
bG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4gb3IgdmFyaWFudHMKICAgICAv
LyBvZiBUaHJvdy4KLSAgICBib29sIGV4ZWN1dGUodW5zaWduZWQpOworICAgIC8vCisgICAgLy8g
VGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gZG9pbmc6CisgICAgLy8KKyAg
ICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7CisgICAgLy8gICAgIHN0YXRl
LmV4ZWN1dGVFZGdlcyhpbmRleCk7CisgICAgLy8gICAgIHJlc3VsdCA9IHN0YXRlLmV4ZWN1dGVF
ZmZlY3RzKGluZGV4KTsKKyAgICAvLyB9IGVsc2UKKyAgICAvLyAgICAgcmVzdWx0ID0gdHJ1ZTsK
KyAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICAvLyBJ
bmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJdCByZXNldHMgYW55
IHN0YXRlIGluIHRoZSBub2RlLAorICAgIC8vIHRoYXQgaXMgcHJvZ3Jlc3NpdmVseSBidWlsdCB1
cCBieSBleGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVjdHMoKS4gSW4KKyAgICAvLyBwYXJ0
aWN1bGFyLCB0aGlzIHJlc2V0cyBjYW5FeGl0KCksIHNvIGlmIHlvdSB3YW50IHRvICJrbm93IiBi
ZXR3ZWVuIGNhbGxzIG9mCisgICAgLy8gc3RhcnRFeGVjdXRpbmcoKSBhbmQgZXhlY3V0ZUVkZ2Vz
KCkvRWZmZWN0cygpIHdoZXRoZXIgdGhlIGxhc3QgcnVuIG9mIHRoZQorICAgIC8vIGFuYWx5c2lz
IGNvbmNsdWRlZCB0aGF0IHRoZSBub2RlIGNhbiBleGl0LCB5b3Ugc2hvdWxkIHByb2JhYmx5IHNl
dCB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24gYXNpZGUgcHJpb3IgdG8gY2FsbGluZyBzdGFydEV4
ZWN1dGluZygpLgorICAgIGJvb2wgc3RhcnRFeGVjdXRpbmcoTm9kZSopOworICAgIGJvb2wgc3Rh
cnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICAvLyBBYnN0cmFj
dGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlzIHJ1bnMgZmlsdGVy
RWRnZUJ5VXNlKCkKKyAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUuIFlvdSBjYW4gc2tp
cCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZAorICAgIC8vIGZpbHRlckVkZ2VC
eVVzZSgpIChvciBzb21lIGVxdWl2YWxlbnQpIG9uIGVhY2ggZWRnZS4KKyAgICB2b2lkIGV4ZWN1
dGVFZGdlcyhOb2RlKik7CisgICAgdm9pZCBleGVjdXRlRWRnZXModW5zaWduZWQgaW5kZXhJbkJs
b2NrKTsKKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVyRWRnZUJ5VXNlKEVkZ2Ug
ZWRnZSkKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBzd2l0Y2ggKGVkZ2Uu
dXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAgICAgY2FzZSBL
bm93bk51bWJlclVzZToKKyAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgICAgICBB
U1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2lu
ZCgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAg
CisgICAgICAgIGZpbHRlckJ5VHlwZShlZGdlLm5vZGUoKSwgdHlwZUZpbHRlckZvcihlZGdlLnVz
ZUtpbmQoKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVm
ZmVjdHMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgY2hhbmdlcyB0aGUgYWJzdHJhY3QKKyAgICAv
LyBzdGF0ZSBhc3N1bWluZyB0aGF0IGVkZ2VzIGhhdmUgYWxyZWFkeSBiZWVuIGZpbHRlcmVkLgor
ICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICBib29s
IGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSopOwogICAgIAogICAg
IC8vIERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2JiZXIgdGhlIHdvcmxkPwogICAgIGJv
b2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsgfQpAQCAtMjU5LDYg
KzMwNCwxNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2RlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUpOworICAgICAgICBpZiAodmFsdWUubV90eXBlICYgfnR5cGUpCisgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICB2YWx1ZS5maWx0ZXIodHlwZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgdmVyaWZ5RWRnZShFZGdlKTsKKyAgICB2b2lkIHZlcmlmeUVkZ2Vz
KE5vZGUqKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEdyYXBoJiBt
X2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0LDkgQEAg
c3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBv
cHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90CisgICAgICAgIC8vIGhh
dmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4KKyAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAg
ICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOwogICAgICAg
ICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7CiAgICAg
ICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTQzMjc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFkamFjZW5jeUxpc3QoKSB7
IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIGlmIChr
aW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQg
PSBVSU5UX01BWDsKQEAgLTU3LDE5ICs1NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIE5vZGUqIGNoaWxkMSwgTm9kZSog
Y2hpbGQyLCBOb2RlKiBjaGlsZDMpCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICA6IG1f
a2luZChGaXhlZCkKLSNlbmRpZgorICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBFZGdlIGNo
aWxkMSwgRWRnZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgQVNTRVJUX1VO
VVNFRChraW5kLCBraW5kID09IEZpeGVkKTsKICAgICAgICAgaW5pdGlhbGl6ZShjaGlsZDEsIGNo
aWxkMiwgY2hpbGQzKTsKICAgICB9CiAgICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQs
IHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQotI2lmICFBU1NFUlRf
RElTQUJMRUQKLSAgICAgICAgOiBtX2tpbmQoVmFyaWFibGUpCi0jZW5kaWYKICAgICB7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIHNldEZp
cnN0Q2hpbGQoZmlyc3RDaGlsZCk7CkBAIC03OSwyMSArNzAsMTggQEAgcHVibGljOgogICAgIGNv
bnN0IEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgcmV0
dXJuIG1fd29yZHNbaV07CiAgICAgfSAgICAKICAgICAKICAgICBFZGdlJiBjaGlsZCh1bnNpZ25l
ZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsKLSAgICAgICAgQVNTRVJUKG1f
a2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzW2ldOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHNldENoaWxkKHVuc2lnbmVkIGksIEVkZ2Ugbm9kZVVzZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwog
ICAgICAgICBtX3dvcmRzW2ldID0gbm9kZVVzZTsKICAgICB9CiAgICAgCkBAIC0xMjUsOSArMTEz
LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgICAgIG1fa2luZCA9IEZpeGVkOwotI2VuZGlmCiAgICAgICAgIGluaXRp
YWxpemUoKTsKICAgICB9CiAgICAgCkBAIC0xNDIsMzQgKzEyNywyNCBAQCBwdWJsaWM6CiAKICAg
ICB1bnNpZ25lZCBmaXJzdENoaWxkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tp
bmQgPT0gVmFyaWFibGUpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1swXS5tX2VuY29kZWRXb3Jk
OwogICAgIH0KICAgICB2b2lkIHNldEZpcnN0Q2hpbGQodW5zaWduZWQgZmlyc3RDaGlsZCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBtX3dvcmRz
WzBdLm1fZW5jb2RlZFdvcmQgPSBmaXJzdENoaWxkOwogICAgIH0KICAgICAKICAgICB1bnNpZ25l
ZCBudW1DaGlsZHJlbigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZh
cmlhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZDsKICAgICB9
CiAgICAgdm9pZCBzZXROdW1DaGlsZHJlbih1bnNpZ25lZCBudW1DaGlsZHJlbikKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBtX3dvcmRzWzFdLm1f
ZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAgICAgCi0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotI2VuZGlmCiBw
cml2YXRlOgogICAgIEVkZ2UgbV93b3Jkc1tTaXplXTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgS2luZCBtX2tpbmQ7Ci0jZW5kaWYKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24g
MTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogLy8gICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGluc3RlYWQu
CiAvLyAtIFlvdSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRlZCwgYW5k
IG5ldmVyIHVzZSBmcmVlQWxsKCkuCiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CisvLyBmb3JjZWRD
ZWxsU2l6ZTogc2V0IHRoaXMgdG8gMCBpZiB5b3UncmUgaGFwcHkgd2l0aCB0aGUgZGVmYXVsdCBh
bGlnbm1lbnQsIG9yIHNldCBpdAorLy8gdG8gYSBub24temVybyB2YWx1ZSBpZiB5b3Ugd2FudCB0
byBmb3JjaWJseSBhbGlnbiB0aGUgYWxsb2NhdGlvbnMgdG8gYSBjZXJ0YWluCisvLyB2YWx1ZS4g
V2hlbiB5b3UgZG8gdGhpcywgQWxsb2NhdG9yIHdpbGwgQVNTRVJUIHRoYXQgZm9yY2VkQ2VsbEFs
aWdubWVudCA+PSBzaXplb2YoVCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZv
cmNlZENlbGxBbGlnbm1lbnQ+CiBjbGFzcyBBbGxvY2F0b3IgewogcHVibGljOgogICAgIEFsbG9j
YXRvcigpOwpAQCAtNjMsMTMgKzY3LDI0IEBAIHByaXZhdGU6CiAgICAgdm9pZCogYnVtcEFsbG9j
YXRlKCk7CiAgICAgdm9pZCogZnJlZUxpc3RBbGxvY2F0ZSgpOwogICAgIHZvaWQqIGFsbG9jYXRl
U2xvdygpOwotCisgICAgCisgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZSgpCisgICAgeworICAg
ICAgICBpZiAoIWZvcmNlZENlbGxBbGlnbm1lbnQpCisgICAgICAgICAgICByZXR1cm4gc2l6ZW9m
KFQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGZvcmNlZENlbGxBbGlnbm1lbnQgPj0gc2l6
ZW9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGZvcmNlZENlbGxBbGlnbm1lbnQ7CisgICAgfQorICAg
IAogICAgIHN0cnVjdCBSZWdpb24gewogICAgICAgICBzdGF0aWMgc2l6ZV90IHNpemUoKSB7IHJl
dHVybiA2NCAqIEtCOyB9Ci0gICAgICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0
dXJuIHN0ZDo6bWF4KHNpemVvZihSZWdpb24pLCBzaXplb2YoVCkpOyB9Ci0gICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBo
ZWFkZXJTaXplKCkpIC8gc2l6ZW9mKFQpOyB9Ci0gICAgICAgIFQqIGRhdGEoKSB7IHJldHVybiBi
aXR3aXNlX2Nhc3Q8VCo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBoZWFkZXJTaXplKCkp
OyB9Ci0gICAgICAgIGJvb2wgaXNJblRoaXNSZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvaW50ZXIgLSBkYXRhKCkpIDwgbnVtYmVyT2ZUaGlu
Z3NQZXJSZWdpb24oKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJl
dHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgY2VsbFNpemUoKSk7IH0KKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUoKSAt
IGhlYWRlclNpemUoKSkgLyBjZWxsU2l6ZSgpOyB9CisgICAgICAgIHN0YXRpYyBzaXplX3QgcGF5
bG9hZFNpemUoKSB7IHJldHVybiBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpICogY2VsbFNpemUo
KTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkQmVnaW4oKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpOyB9CisgICAgICAgIGNoYXIqIHBheWxvYWRFbmQo
KSB7IHJldHVybiBwYXlsb2FkQmVnaW4oKSArIHBheWxvYWRTaXplKCk7IH0KKyAgICAgICAgYm9v
bCBpc0luVGhpc1JlZ2lvbihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3Q+KGJpdHdpc2VfY2FzdDxjaGFyKj4ocG9pbnRlcikgLSBwYXlsb2FkQmVnaW4oKSkgPCBw
YXlsb2FkU2l6ZSgpOyB9CiAgICAgICAgIHN0YXRpYyBSZWdpb24qIHJlZ2lvbkZvcihjb25zdCBU
KiBwb2ludGVyKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UmVnaW9uKj4oYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4ocG9pbnRlcikgJiB+KHNpemUoKSAtIDEpKTsgfQogICAgICAgICAKICAgICAgICAg
UGFnZUFsbG9jYXRpb25BbGlnbmVkIG1fYWxsb2NhdGlvbjsKQEAgLTgyLDI2ICs5NywyNiBAQCBw
cml2YXRlOgogICAgIAogICAgIFJlZ2lvbiogbV9yZWdpb25IZWFkOwogICAgIHZvaWQqKiBtX2Zy
ZWVMaXN0SGVhZDsKLSAgICBUKiBtX2J1bXBFbmQ7Ci0gICAgdW5zaWduZWQgbV9idW1wUmVtYWlu
aW5nOworICAgIGNoYXIqIG1fYnVtcEVuZDsKKyAgICBzaXplX3QgbV9idW1wUmVtYWluaW5nOwog
fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46OkFsbG9jYXRv
cigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgor
aW5saW5lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6QWxsb2NhdG9yKCkKICAg
ICA6IG1fcmVnaW9uSGVhZCgwKQogICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKICAgICAsIG1fYnVt
cFJlbWFpbmluZygwKQogewogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIEFsbG9j
YXRvcjxUPjo6fkFsbG9jYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3Jj
ZWRDZWxsQWxpZ25tZW50PgoraW5saW5lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50
Pjo6fkFsbG9jYXRvcigpCiB7CiAgICAgcmVzZXQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjphbGxvY2F0ZSgpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgorQUxXQVlTX0lOTElO
RSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmFsbG9jYXRlKCkKIHsK
ICAgICB2b2lkKiByZXN1bHQgPSBidW1wQWxsb2NhdGUoKTsKICAgICBpZiAoTElLRUxZKCEhcmVz
dWx0KSkKQEAgLTEwOSw4ICsxMjQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxU
Pjo6YWxsb2NhCiAgICAgcmV0dXJuIGZyZWVMaXN0QWxsb2NhdGUoKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlKFQqIG9iamVjdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRv
cjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZShUKiBvYmplY3QpCiB7CiAgICAgb2JqZWN0
LT5+VCgpOwogICAgIApAQCAtMTE5LDggKzEzNCw4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVl
KFQqIG9iamVjdCkKICAgICBtX2ZyZWVMaXN0SGVhZCA9IGNlbGw7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFsbCgpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9y
Y2VkQ2VsbEFsaWdubWVudD46OmZyZWVBbGwoKQogewogICAgIGlmICghbV9yZWdpb25IZWFkKSB7
CiAgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTE0Miw4ICsxNTcsOCBAQCB2
b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFsbCgpCiAgICAgc3RhcnRCdW1waW5nSW4obV9yZWdpb25I
ZWFkKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpyZXNl
dCgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgor
dm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OnJlc2V0KCkKIHsKICAgICBm
cmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsKICAgICAKQEAgLTE1MiwzOCArMTY3
LDM4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpyZXNldCgpCiAgICAgbV9idW1wUmVtYWluaW5nID0g
MDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuc2lnbmVkIEFsbG9jYXRvcjxUPjo6aW5k
ZXhPZihjb25zdCBUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3Jj
ZWRDZWxsQWxpZ25tZW50PgordW5zaWduZWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1l
bnQ+OjppbmRleE9mKGNvbnN0IFQqIG9iamVjdCkKIHsKICAgICB1bnNpZ25lZCBiYXNlSW5kZXgg
PSAwOwogICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsgcmVn
aW9uID0gcmVnaW9uLT5tX25leHQpIHsKICAgICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNSZWdp
b24ob2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0gcmVn
aW9uLT5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIGJhc2VJbmRleCArIChiaXR3aXNlX2Nh
c3Q8Y2hhcio+KG9iamVjdCkgLSByZWdpb24tPnBheWxvYWRCZWdpbigpKSAvIGNlbGxTaXplKCk7
CiAgICAgICAgIGJhc2VJbmRleCArPSBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7
CiAgICAgfQogICAgIENSQVNIKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1BbGxvY2F0b3I8VD4qIEFsbG9jYXRvcjxUPjo6YWxsb2NhdG9yT2YoY29uc3QgVCog
b2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVu
dD4KK0FsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50PiogQWxsb2NhdG9yPFQsIGZvcmNl
ZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0b3JPZihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgcmV0
dXJuIFJlZ2lvbjo6cmVnaW9uRm9yKG9iamVjdCktPm1fYWxsb2NhdG9yOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmJ1bXBBbGxv
Y2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50
PgorQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46
OmJ1bXBBbGxvY2F0ZSgpCiB7Ci0gICAgaWYgKHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fYnVtcFJl
bWFpbmluZykgewotICAgICAgICByZW1haW5pbmctLTsKKyAgICBpZiAoc2l6ZV90IHJlbWFpbmlu
ZyA9IG1fYnVtcFJlbWFpbmluZykgeworICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemUoKTsK
ICAgICAgICAgbV9idW1wUmVtYWluaW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9i
dW1wRW5kIC0gKHJlbWFpbmluZyArIDEpOworICAgICAgICByZXR1cm4gbV9idW1wRW5kIC0gKHJl
bWFpbmluZyArIGNlbGxTaXplKCkpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQqIEFsbG9jYXRvcjxUPjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCog
QWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlTGlzdEFsbG9jYXRlKCkKIHsK
ICAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFy
ZXN1bHQpKQpAQCAtMTkyLDggKzIwNyw4IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6ZnJlZUxpc3RB
bGxvY2F0ZSgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2Vk
Q2VsbEFsaWdubWVudD46OmFsbG9jYXRlU2xvdygpCiB7CiAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0
SGVhZCk7CiAgICAgQVNTRVJUKCFtX2J1bXBSZW1haW5pbmcpOwpAQCAtMjE2LDggKzIzMSw4IEBA
IHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVSZWdpb25z
U3RhcnRpbmdBdCh0eXBlbmFtZSBBbGxvY2F0b3I8VD46OlJlZ2lvbiogcmVnaW9uKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2Nh
dG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQodHlwZW5h
bWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsK
ICAgICB3aGlsZSAocmVnaW9uKSB7CiAgICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lv
bi0+bV9uZXh0OwpAQCAtMjI2LDExICsyNDEsMTEgQEAgdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVS
ZWdpb25zU3RhcnRpbmdBdAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQg
QWxsb2NhdG9yPFQ+OjpzdGFydEJ1bXBpbmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8VD46OlJlZ2lv
biogcmVnaW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpzdGFydEJ1bXBp
bmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OlJlZ2lvbiog
cmVnaW9uKQogewotICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+ZGF0YSgpICsgUmVnaW9uOjpudW1i
ZXJPZlRoaW5nc1BlclJlZ2lvbigpOwotICAgIG1fYnVtcFJlbWFpbmluZyA9IFJlZ2lvbjo6bnVt
YmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKKyAgICBtX2J1bXBFbmQgPSByZWdpb24tPnBheWxvYWRF
bmQoKTsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246OnBheWxvYWRTaXplKCk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjk4LDYgKzY5OCwxOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZSogcmVz
dWx0ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250
UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwg
RWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CisgICAgICAgIEFTU0VS
VChvcCAhPSBQaGkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CisK
KyAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQorICAgICAg
ICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBFZGdlIGNoaWxkMSwg
RWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQorICAgIHsKKyAgICAg
ICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgRG9udFJlZkNo
aWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCiAgICAgICAgICAgICBvcCwgY3VycmVudENv
ZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAgICAgIEFTU0VSVChvcCAh
PSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CkBAIC03MTAs
NyArNzIyLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3Jh
cGguYWRkTm9kZSgKICAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIGNoaWxk
MSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCks
IGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAg
ICBpZiAob3AgPT0gUGhpKQogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnBoaXMuYXBwZW5k
KHJlc3VsdCk7CiAgICAgICAgIGVsc2UKQEAgLTcyNCw3ICs3MzYsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAg
RG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICBvcCwg
Y3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KTsKKyAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIEVk
Z2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAgICBBU1NFUlQo
b3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwogCkBA
IC0xNDY1LDcgKzE0NzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoYm9v
bCB1CiAgICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7IC8v
IE1hdGgubWluKHgpCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNldCAr
IGFyZ3VtZW50VG9PcGVyYW5kKDEpKTsKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja051bWJlciwg
cmVzdWx0KTsKKyAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVy
VXNlKSk7CiAgICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVy
YW5kLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk2OSw3ICs5NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFjY2Vzc2lu
ZyBhcmd1bWVudHMgdGhlbiBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2luZyBsb2NhbHMuCi0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMo
KSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5
OjpBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTEwMTQs
MTggKzEwMTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbnVt
IFByZWRpY3Rpb25IYW5kbGluZ01vZGUgeyBSZXF1aXJlU2FtZVByZWRpY3Rpb24sIEFsbG93UHJl
ZGljdGlvbk1pc21hdGNoIH07Ci0gICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNl
bWVudCwgUHJlZGljdGlvbkhhbmRsaW5nTW9kZSBwcmVkaWN0aW9uSGFuZGxpbmdNb2RlID0gUmVx
dWlyZVNhbWVQcmVkaWN0aW9uKQorICAgIGJvb2wgc2V0UmVwbGFjZW1lbnQoTm9kZSogcmVwbGFj
ZW1lbnQpCiAgICAgewogICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBl
cmZvcm0gcmVwbGFjZW1lbnRzIGlmIHRoZSBwcmVkaWN0aW9ucyBkb24ndAotICAgICAgICAvLyBh
Z3JlZS4KLSAgICAgICAgaWYgKHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPT0gUmVxdWlyZVNhbWVQ
cmVkaWN0aW9uCi0gICAgICAgICAgICAmJiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgIT0g
cmVwbGFjZW1lbnQtPnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAg
ICBkYXRhTG9nRigiICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2N1cnJlbnROb2RlLT5pbmRl
eCgpLCByZXBsYWNlbWVudC0+aW5kZXgoKSk7CiAjZW5kaWYKQEAgLTEyMzAsNyArMTIyMyw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgICAgIC8vIFRoaXMg
aXMgc3RyYW5nZSwgYnV0IG5lY2Vzc2FyeS4gU29tZSBwaGFzZXMgd2lsbCBjb252ZXJ0IG5vZGVz
IHRvIGNvbnN0YW50cywKICAgICAgICAgICAgIC8vIHdoaWNoIG1heSByZXN1bHQgaW4gZHVwbGlj
YXRlZCBjb25zdGFudHMuIFdlIHVzZSBDU0UgdG8gY2xlYW4gdGhpcyB1cC4KLSAgICAgICAgICAg
IHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpLCBBbGxvd1ByZWRpY3Rpb25NaXNtYXRj
aCk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjb25zdGFudENTRShub2RlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNDMy
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MywxMiArODMsNiBAQCBzdHJ1Y3QgTm9kZVBvaW50ZXJUcmFpdHMgewogICAgIHN0
YXRpYyB2b2lkIGR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOwogfTsKIAotZW51
bSBVc2VLaW5kIHsKLSAgICBVbnR5cGVkVXNlLAotICAgIERvdWJsZVVzZSwKLSAgICBMYXN0VXNl
S2luZCAvLyBNdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQg
aXMgdXNlZCB0byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgotfTsKLQogLy8g
VXNlIFJlZkNoaWxkcmVuIGlmIHRoZSBjaGlsZCByZWYgY291bnRzIGhhdmVuJ3QgYWxyZWFkeSBi
ZWVuIGFkanVzdGVkIHVzaW5nCiAvLyBvdGhlciBtZWFucyBhbmQgZWl0aGVyIG9mIHRoZSBmb2xs
b3dpbmcgaXMgdHJ1ZToKIC8vIC0gVGhlIG5vZGUgeW91J3JlIGNyZWF0aW5nIGlzIE11c3RHZW5l
cmF0ZS4KQEAgLTEwNiwxOSArMTAwLDYgQEAgZW51bSBSZWZOb2RlTW9kZSB7CiAgICAgRG9udFJl
Zk5vZGUKIH07CiAKLWlubGluZSBjb25zdCBjaGFyKiB1c2VLaW5kVG9TdHJpbmcoVXNlS2luZCB1
c2VLaW5kKQotewotICAgIHN3aXRjaCAodXNlS2luZCkgewotICAgIGNhc2UgVW50eXBlZFVzZToK
LSAgICAgICAgcmV0dXJuICIiOwotICAgIGNhc2UgRG91YmxlVXNlOgotICAgICAgICByZXR1cm4g
ImQiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQogaW5saW5lIGJvb2wgaXNBUk12N3MoKQog
ewogI2lmIENQVShBUFBMRV9BUk1WN1MpCkBAIC0yMzYsNiArMjE3LDggQEAgZW51bSBVbmlmaWNh
dGlvblN0YXRlIHsKICAgICBHbG9iYWxseVVuaWZpZWQKIH07CiAKK2VudW0gT3BlcmFuZFNwZWN1
bGF0aW9uTW9kZSB7IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uIH07CisKIGVudW0gU3BlY3VsYXRpb25EaXJlY3Rpb24geyBGb3J3YXJkU3BlY3Vs
YXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24gfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDMsOCArMTAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+
c3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBz
ZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9m
KHNldCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50KCkgPT0g
MSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b20pOwpAQCAtMTQ5LDEwICsxNDcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgR2V0
QnlJZDoKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7CiAgICAgICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBF
ZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNo
aWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24o
KSkpCisgICAgICAgICAgICAgICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQ
cm92ZW5TdHJ1Y3R1cmUoKTsKQEAgLTE4MSwxOCArMTgwLDI0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25l
LAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQs
IGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZv
KHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0
YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgeworICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSogcHJv
cGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3du
Q2VsbFVzZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0
eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigp
OwogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQot
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdl
KG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZs
eSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtMjA3
LDkgKzIxMiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAg
ICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBFZGdlIGNoaWxkRWRn
ZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRF
ZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bm9kZS0+aWRlbnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpOworICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JO
b2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjM4LDkgKzI0NiwxNSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0
cnVjdHVyZSkpKTsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGQp
OworICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQs
IGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBoYW50b20sIGNvZGVPcmlnaW4s
IGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRp
b25EYXRhID0gMDsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlv
bigpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgKQEAgLTI2NCwzOCArMjc4LDM4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0
b3JhZ2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KHN0YXR1cy5vZmZzZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigp
OyAvLyBUaGUgY2hpbGQgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcm9wZXJ0eSBpbmRleCwgc28gcmVm
IGl0IHRvIHJlZmxlY3QgdGhlIGRvdWJsZSB1c2UuCi0gICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBjaGlsZEVkZ2U7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMuaXNTaW1wbGVS
ZXBsYWNlKCkgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHN0YXR1cy5uZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUs
IEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVj
Tm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3Rh
dHVzLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4s
IE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSkpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVz
Lm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNl
dChzdGF0dXMub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWRn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgY2hpbGQpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNp
dGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250
UmVmTm9kZSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3Bl
cnR5U3RvcmFnZSk7CkBAIC0zNDAsNyArMzU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogcGhhbnRvbSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBwaGkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVk
Z2UocGhpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhhbnRvbTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBwaGFudG9tOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0zOTEsMTMgKzQwNSwxMyBA
QCBwcml2YXRlOgogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAgICAg
ICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29u
c3RhbnQpOworICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1
cmUoKSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBD
aGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnQpOworICAgICAg
ICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSks
IEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMg
aXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIENGQSBtYXkgcmVhY2ggY29uY2x1c2lvbnMgYWJvdXQg
Y29uc3RhbnRzIGJhc2VkIG9uIGl0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDYgQEAgaW5saW5l
IGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICBpZiAoIWNoYW5nZWQp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIGRmZy5yZXNldEV4aXRTdGF0
ZXMoKTsKLSAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNSZXRo
cmVhZGluZyhkZmcpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdFZGdlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogewotICAgIG91dC5wcmludCh1c2VLaW5kVG9TdHJpbmcodXNlS2luZCgpKSwgbm9k
ZSgpKTsKKyAgICBpZiAodXNlS2luZCgpICE9IFVudHlwZWRVc2UpCisgICAgICAgIG91dC5wcmlu
dCh1c2VLaW5kKCksICI6Iik7CisgICAgb3V0LnByaW50KG5vZGUoKSk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShy
ZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBzdGF0aWMg
dWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiAyOyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0
KCkgeyByZXR1cm4gNDsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9k
ZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEJlZm9yZUZpeHBvaW50KTsKKyAg
ICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1cEJsb2Nr
KG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTc2LDUwICs3OSwyNjEgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpCisgICAgICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0Ny
ZWF0ZWRUaGlzQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihu
b2RlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VE
b3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hp
bGQxKCksIE51bWJlclVzZSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3RlZFR5cGUgPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBl
bHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAg
IGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdFJTaGlm
dDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewor
ICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJ
bnRFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogeworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMy
OiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9J
bnQzMjogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlID0gCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
cyk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJy
YXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0g
QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2Up
OwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rp
b24oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYm
IGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNr
U3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1
cmUoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoTnVtYmVyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKE5vdENlbGxVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6IHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAgICAgICAgIGlmIChh
dHRlbXB0VG9NYWtlSW50ZWdlckFkZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVk
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAg
ICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7
CisgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aERpdjogewor
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAg
IGlmIChpc1g4NigpIHx8IGlzQVJNdjdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCksIG5vZGUtPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBw
b3J0c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShu
b2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRv
IHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9t
CisgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgorICAgICAgICAgICAg
ICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwg
U3BlY0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVk
Z2UoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlLT5zZXRPcChH
ZXRBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVN
dXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
KTsKLSAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVj
a0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAg
ICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNl
IEFyaXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkK
KyAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2Up
OworICAgICAgICBjYXNlIEFyaXRoU3FydDogeworICAgICAgICAgICAgZml4RG91YmxlRWRnZShu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgTG9naWNhbE5vdDogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBlbHNl
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAg
ICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHlwZU9mOiB7CisgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJl
RXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJl
R3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOiB7CisgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFudCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51
bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IENvbXBhcmVF
cSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCku
c2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2Rl
LT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKKyAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5z
ZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIC8v
IEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgorICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5n
KSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2Rl
LT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAg
ICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCkBAIC0xMjcsNyArMzQxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rp
b24oKSwKICAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgp
OwogICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQpAQCAt
MTM4LDEzICszNTIsNzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhKG5vZGUtPmZs
YWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5
TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5k
ZWNpZGVkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CisgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCku
c2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgU3RyaW5nQ2hhckF0OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAg
ICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRo
ZXNlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShB
cnJheTo6U3RyaW5nKSk7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdl
IGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CisKKyAgICAgICAgICAgIG5v
ZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZp
bmUoCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAorICAgICAgICAg
ICAgICAgICAgICBjaGlsZDItPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQzLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9k
ZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9uczoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCksIFJlYWxOdW1iZXJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5
OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMygpLnNldFVzZUtpbmQoSW50MzJV
c2UpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZShub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93
bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50
MzJVc2UpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC0xNjMsMTEgKzQ0MSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAg
ICAgICAgICAgICAgIFNwZWNJbnQzMiwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2Rl
LT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xNzYsNDkgKzQ1OCwyNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihu
b2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRp
b24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAg
ICAgY2FzZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNo
aWZ0OgotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7
Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbXBhcmVFcToK
LSAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgot
ICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
RXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNo
aWxkMigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo
IU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBm
aXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2Fs
Tm90OiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVj
OgorICAgICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VL
aW5kKENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMCk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJv
b2xlYW5Vc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNh
bE5vdCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90
LT5vcCgpID09IExvZ2ljYWxOb3QKQEAgLTI2MSwxNDkgKzUyMSwxOTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBT
ZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5p
c0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAvLyBG
SVhNRTogQWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgorICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDE3NQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAg
ICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAg
ICAgICAgICAgICBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCBpKS0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFO
S19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+bnVtQ2hpbGRyZW4oKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJh
bmRJbmRleCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsg
b3BlcmFuZEluZGV4XS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5v
ZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4
XS5zZXRVc2VLaW5kKFJlYWxOdW1iZXJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVk
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMSk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAg
ICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkKLSAgICAg
ICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7CisgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZTog
ewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MCk7CisgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsKKyAgICAgICAgICAgIGlmIChpc090aGVy
U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNl
IGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBBcml0aE1vZDog
ewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1l
dGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAg
ICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDEpOworICAgICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Cisg
ICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSB8fCBpc0FSTXY3
cygpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpbmplY3RJ
bnQzMlRvRG91YmxlTm9kZSgwKTsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91Ymxl
Tm9kZSgxKTsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2lu
ZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KLSAgICAg
ICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9k
ZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91
YmxlLCAqbm9kZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0
T3AoRG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlh
bGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgorICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjoK
KyAgICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CisgICAgICAgIGNhc2UgU2tpcFNjb3BlOiB7Cisg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJp
dGhBYnM6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1
bGF0ZUludGVnZXIoKSkKKyAgICAgICAgY2FzZSBHZXRCeUlkOiB7CisgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwor
ICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigpKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRl
bnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBBcnJh
eVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAorICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxp
bmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJl
ZGljdGlvbnMpOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkgeworICAgICAgICAgICAg
ICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFzZWxp
bmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbikpOworICAgICAgICAgICAgICAgIGFycmF5
TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQs
IGZhbHNlKTsKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5w
cmVkaWN0aW9uKCkpOworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5n
dGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25l
LCBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmln
aW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVk
U3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBh
cnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCks
IG5vZGUtPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0
c0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgwKTsKKyAgICAgICAgICAgIG5vZGUtPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKKyAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAg
ICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3Js
ZCk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7
CisgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOworICAgICAgICAgICAgbm9kZS0+c2V0
QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUqIHN0
b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKSA9IEVkZ2Uoc3RvcmFnZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJpdGhTcXJ0OiB7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICBj
YXNlIEdldEJ5SWRGbHVzaDogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChDZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
Ci0gICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7
Ci0gICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7
Ci0gICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7
Ci0KLSAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICBub2Rl
LT5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGlj
dGlvbigpLAotICAgICAgICAgICAgICAgICAgICBjaGlsZDItPnByZWRpY3Rpb24oKSwKLSAgICAg
ICAgICAgICAgICAgICAgY2hpbGQzLT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgMyk7CisgICAgICAg
IGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAg
ICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKKyAgICAgICAgY2Fz
ZSBQdXRCeUlkOgorICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgQ2hl
Y2tIYXNJbnN0YW5jZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChD
ZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkg
ewotICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2UoMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAg
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToK
LSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY2FzZSBB
cnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGlsZDMtPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJB
cnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKDIpOworICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChTdHJpbmdVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2Up
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5ld0FycmF5OiB7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5v
ZGUpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBlKAotICAg
ICAgICAgICAgICAgICAgICBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCBpKS0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAobm9kZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihu
b2RlKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShpKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheWlmeToKKyAgICAgICAgY2FzZSBBcnJheWlmeVRv
U3RydWN0dXJlOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxV
c2UpOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CisgICAg
ICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpCisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5
T2Zmc2V0OiB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVz
dWx0KCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNl
bGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9yYWdlKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFs
cmVhZHkgZG9lcyBhbiB1bmNvbmRpdGlvbmFsIGNlbGwKKyAgICAgICAgICAgIC8vIGNoZWNrLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDc5CisgICAgICAgICAg
ICBpZiAoIShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKSkKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAg
ICAgICAgfQogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAt
NDIxLDYgKzcyNiw4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGFycmF5TW9kZS5vcmlnaW5hbEFycmF5U3RydWN0dXJlKG1fZ3JhcGgsIGNvZGVP
cmlnaW4pOwogICAgICAgICAKKyAgICAgICAgRWRnZSBpbmRleEVkZ2UgPSBpbmRleCA/IEVkZ2Uo
aW5kZXgsIEludDMyVXNlKSA6IEVkZ2UoKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChhcnJheU1v
ZGUuZG9lc0NvbnZlcnNpb24oKSkgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSkgewogICAg
ICAgICAgICAgICAgIGlmIChtX2luZGV4SW5CbG9jayA+IDApIHsKQEAgLTQzNSwyMSArNzQyLDIx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJl
ZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5VG9TdHJ1Y3R1cmUsIGNv
ZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBPcEluZm8o
YXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHN0cnVjdHVyZSksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5
LCBDZWxsVXNlKSwgaW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5
LCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29y
ZCgpKSwgYXJyYXksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9k
ZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpLCBpbmRleEVkZ2UpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSkgewogICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBD
aGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBhcnJheSk7CisgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgRWRnZShh
cnJheSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgY29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IGFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IEVkZ2UoYXJyYXksIENlbGxVc2UpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICAKQEAgLTQ2MSwyMSArNzY4LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9pbmRl
eEluQmxvY2ssCiAgICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZDaGlsZHJlbiA6
IERvbnRSZWZDaGlsZHJlbiwKICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZk5v
ZGUgOiBEb250UmVmTm9kZSwKLSAgICAgICAgICAgICAgICBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5
LCBjb2RlT3JpZ2luLCBhcnJheSk7CisgICAgICAgICAgICAgICAgU3BlY05vbmUsIEdldEJ1dHRl
cmZseSwgY29kZU9yaWdpbiwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgbV9pbmRleEluQmxvY2ssCiAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJl
ZkNoaWxkcmVuIDogRG9udFJlZkNoaWxkcmVuLAogICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUg
PyBSZWZOb2RlIDogRG9udFJlZk5vZGUsCi0gICAgICAgICAgICBTcGVjTm9uZSwgR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IGFycmF5KTsKKyAgICAgICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgS25v
d25DZWxsVXNlKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihF
ZGdlIGJhc2UsIEVkZ2UgaW5kZXgsIHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKKyAgICB2b2lk
IGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4LCBFZGdlJiBzdG9yYWdl
Q2hpbGQpCiAgICAgewotICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZv
cmVGaXhwb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCiAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnROb2RlOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkpIHsKQEAgLTQ5OSw3ICs4MDMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaWYgKCFzdG9yYWdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChub2RlLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRn
ZShzdG9yYWdlKTsKKyAgICAgICAgICAgIHN0b3JhZ2VDaGlsZCA9IEVkZ2Uoc3RvcmFnZSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gfQogICAgIH0KQEAgLTUwNyw0OCArODExLDky
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVkZ2UpCiAgICAgewogICAg
ICAgICBOb2RlKiBub2RlID0gZWRnZS5ub2RlKCk7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpICE9
IFZhbHVlVG9JbnQzMikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgaWYg
KG5vZGUtPm9wKCkgIT0gVmFsdWVUb0ludDMyKSB7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtp
bmQoS25vd25JbnQzMlVzZSk7CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7CiAgICAgICAgIEVkZ2UgbmV3RWRnZSA9
IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAKKyAgICAgICAgaWYgKG5ld0VkZ2UudXNlS2luZCgp
ICE9IEludDMyVXNlKSB7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25vd25JbnQzMlVz
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFT
U0VSVChuZXdFZGdlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOworICAgICAgICAKICAgICAg
ICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7
CiAgICAgICAgIAogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBmaXhEb3VibGVFZGdlKHVuc2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBmaXhEb3VibGVFZGdl
KEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVzZSwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKICAgICB7Ci0gICAgICAgIE5v
ZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7Ci0gICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBo
LmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7Ci0gICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+
cHJlZGljdGlvbigpICYgU3BlY0RvdWJsZSkgewotICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5k
KERvdWJsZVVzZSk7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQodXNlS2luZCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGluamVjdEludDMy
VG9Eb3VibGVOb2RlKGNoaWxkSW5kZXgsIGRpcmVjdGlvbik7CisgICAgICAgIGluamVjdEludDMy
VG9Eb3VibGVOb2RlKGVkZ2UsIHVzZUtpbmQsIGRpcmVjdGlvbik7CiAgICAgfQogCi0gICAgdm9p
ZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSh1bnNpZ25lZCBjaGlsZEluZGV4LCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIHZvaWQgaW5q
ZWN0SW50MzJUb0RvdWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVy
VXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9u
KQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUs
IFNwZWNEb3VibGUsCiAgICAgICAgICAgICBkaXJlY3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlv
biA/IEludDMyVG9Eb3VibGUgOiBGb3J3YXJkSW50MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1f
Y3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hp
bGRJbmRleCkubm9kZSgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4s
IEVkZ2UoZWRnZS5ub2RlKCksIEludDMyVXNlKSk7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoCiAgICAgICAgICAg
ICAiKHJlcGxhY2luZyBAJXUtPkAldSB3aXRoIEAldS0+QCV1KSAiLAotICAgICAgICAgICAgbV9j
dXJyZW50Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZElu
ZGV4KS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgcmVzdWx0LT5pbmRleCgpKTsK
KyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmluZGV4KCksIGVkZ2UtPmluZGV4KCksIG1fY3Vy
cmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CiAjZW5kaWYKIAotICAgICAgICBt
X2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNoaWxkSW5kZXgpID0gRWRnZShyZXN1bHQsIERv
dWJsZVVzZSk7CisgICAgICAgIGVkZ2UgPSBFZGdlKHJlc3VsdCwgdXNlS2luZCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgdHJ1bmNhdGVDb25zdGFudFRvSW50MzIoRWRnZSYgZWRnZSkKKyAgICB7
CisgICAgICAgIE5vZGUqIG9sZE5vZGUgPSBlZGdlLm5vZGUoKTsKKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChvbGROb2RlLT5oYXNDb25zdGFudCgpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQob2xkTm9kZSk7CisgICAgICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9
IGpzTnVtYmVyKEpTQzo6dG9JbnQzMih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgIEFTU0VS
VCh2YWx1ZS5pc0ludDMyKCkpOworICAgICAgICBlZGdlLnNldE5vZGUobV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4s
IFJlZk5vZGUsIFNwZWNJbnQzMiwgSlNDb25zdGFudCwKKyAgICAgICAgICAgIG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhjb2RlQmxvY2soKS0+YWRkT3JGaW5kQ29uc3RhbnQodmFs
dWUpKSkpOworICAgICAgICBtX2dyYXBoLmRlcmVmKG9sZE5vZGUpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3NhcnkoTm9kZSogbm9kZSwgQWRkU3BlY3Vs
YXRpb25Nb2RlIG1vZGUpCisgICAgeworICAgICAgICBpZiAobW9kZSAhPSBTcGVjdWxhdGVJbnRl
Z2VyQW5kVHJ1bmNhdGVDb25zdGFudHMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkgfHwgbm9kZS0+Y2hp
bGQyKCktPmhhc0NvbnN0YW50KCkpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRUb0ludDMy
KG5vZGUtPmNoaWxkMigpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBhdHRlbXB0VG9NYWtlSW50
ZWdlckFkZChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1v
ZGUgPSBtX2dyYXBoLmFkZFNwZWN1bGF0aW9uTW9kZShub2RlKTsKKyAgICAgICAgaWYgKG1vZGUg
PT0gRG9udFNwZWN1bGF0ZUludGVnZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICB0cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KG5vZGUsIG1vZGUpOwor
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgbm9k
ZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw0NSArMzQ2LDE0
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICB9CiB9CiAKLS8vIEZJ
WE1FOiBDb252ZXJ0IHRoaXMgdG8gYmUgaXRlcmF0aXZlLCBub3QgcmVjdXJzaXZlLgotI2RlZmlu
ZSBET19UT19DSElMRFJFTihub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkg
JiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkg
KyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGlsZHJlbltfY2hp
bGRJZHhdKTsgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2Ug
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg
ICAhX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+
Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQz
KCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZh
bHNlKQotCiB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKLSAgICBET19UT19D
SElMRFJFTihvcCwgcmVmKTsKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3As
IHJlZik7CiB9CiAKIHZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCiB7Ci0gICAg
RE9fVE9fQ0hJTERSRU4ob3AsIGRlcmVmKTsKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigq
dGhpcywgb3AsIGRlcmVmKTsKIH0KIAogdm9pZCBHcmFwaDo6ZGV0aHJlYWQoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3
Nyw3IEBAIHN0cnVjdCBQdXRUb0Jhc2VPcGVyYXRpb25EYXRhIHsKIAogZW51bSBBZGRTcGVjdWxh
dGlvbk1vZGUgewogICAgIERvbnRTcGVjdWxhdGVJbnRlZ2VyLAotICAgIFNwZWN1bGF0ZUludGVn
ZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93LAorICAgIFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0
ZUNvbnN0YW50cywKICAgICBTcGVjdWxhdGVJbnRlZ2VyCiB9OwogCkBAIC0xNzQsOSArMTc0LDkg
QEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZp
cnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGls
ZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25G
b3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2Rl
LT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVy
YXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxk
cmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3Rp
dHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAg
ICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQyKCksIHNob3VsZEdlbmVy
YXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxk
MygpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC01MzAsOSAr
NTMwLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUt
PmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVybiBpc051bWJlclNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOworICAgICAgICByZXR1cm4g
aXNOdW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBpc051bWVyaWNhbChub2Rl
LT5jaGlsZDIoKS51c2VLaW5kKCkpOwogICAgIH0KICAgICAKICAgICAvLyBOb3RlIHRoYXQgYSAn
dHJ1ZScgcmV0dXJuIGRvZXMgbm90IGFjdHVhbGx5IG1lYW4gdGhhdCB0aGUgQnlWYWwgYWNjZXNz
IGNsb2JiZXJzIG5vdGhpbmcuCkBAIC03ODEsNyArNzc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0ZSA+IHR3
b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9k
ZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250
U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIo
YWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0
YW50cyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKICAgICBib29sIG11bElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwg
Tm9kZSogaW1tZWRpYXRlKQpAQCAtODMwLDYgKzgyOCwzNiBAQCBpbmxpbmUgQmxvY2tJbmRleCBH
cmFwaDo6YmxvY2tJbmRleEZvckJ5CiAgICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8QmxvY2tJbmRl
eCwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVj
b2RlQmVnaW4sIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOwogfQogCisjZGVmaW5l
IERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAg
ICAgICAgICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSAr
IF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgaWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbygoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRy
ZW5bX2NoaWxkSWR4XSk7ICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gZWxzZSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg
ICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5j
aGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDMo
KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFs
c2UpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDExICs5NSwxMCBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgIHsK
ICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwotICAgICAgICBBU1NFUlQoISEobV9m
bGFncyAmIE5vZGVIYXNWYXJBcmdzKSA9PSAoY2hpbGRyZW4ua2luZCgpID09IEFkamFjZW5jeUxp
c3Q6OlZhcmlhYmxlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0
aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlw
ZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGls
ZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgRWRnZSBjaGlsZDEgPSBFZGdlKCksIEVkZ2UgY2hpbGQyID0gRWRnZSgp
LCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4p
CiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQy
LCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKQEAgLTExMSw3ICsxMTAsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8g
Q29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIGFuIGltbWVkaWF0ZSB2
YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5m
byBpbW0sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9
IDApCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8g
aW1tLCBFZGdlIGNoaWxkMSA9IEVkZ2UoKSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hp
bGQzID0gRWRnZSgpKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAg
LCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykK
ICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAt
MTI0LDcgKzEyMyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3Qg
YSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMuCi0g
ICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwg
T3BJbmZvIGltbTIsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNo
aWxkMyA9IDApCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBP
cEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIEVkZ2UgY2hpbGQxID0gRWRnZSgpLCBFZGdlIGNoaWxk
MiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgICAgIDogY29kZU9yaWdpbihj
b2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIpCkBAIC0yOTQsMjIgKzI5MywyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNldCgp
LnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9H
ZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdl
KQorICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0
QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleDsKLSAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uoc3RvcmFn
ZSkpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoc3RvcmFnZSk7CiAgICAgICAgIG1fb3Ag
PSBHZXRCeU9mZnNldDsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5
T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGly
ZWN0KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwogICAgICAg
ICBjaGlsZHJlbi5zZXRDaGlsZDMoY2hpbGRyZW4uY2hpbGQyKCkpOwogICAgICAgICBjaGlsZHJl
bi5zZXRDaGlsZDIoY2hpbGRyZW4uY2hpbGQxKCkpOwotICAgICAgICBjaGlsZHJlbi5zZXRDaGls
ZDEoRWRnZShzdG9yYWdlKSk7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShzdG9yYWdlKTsK
ICAgICAgICAgbV9vcCA9IFB1dEJ5T2Zmc2V0OwogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xv
YmJlcnNXb3JsZDsKICAgICB9CkBAIC05OTUsNyArOTk0LDcgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICByZXR1cm4gbV9yZWZDb3VudC0tOwogICAgIH0KICAgICAKLSAgICBFZGdlIGNoaWxkMSgp
CisgICAgRWRnZSYgY2hpbGQxKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBO
b2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQxKCk7CkBAIC0x
MDA5LDEzICsxMDA4LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVu
LmNoaWxkMVVuY2hlY2tlZCgpOwogICAgIH0KIAotICAgIEVkZ2UgY2hpbGQyKCkKKyAgICBFZGdl
JiBjaGlsZDIoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJB
cmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDIoKTsKICAgICB9CiAKLSAgICBF
ZGdlIGNoaWxkMygpCisgICAgRWRnZSYgY2hpbGQzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
KG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hp
bGQzKCk7CkBAIC0xMDMzLDYgKzEwMzIsMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1
cm4gY2hpbGRyZW4ubnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCisgICAgVXNlS2luZCBiaW5h
cnlVc2VLaW5kKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjaGlsZDEoKS51c2VLaW5kKCkgPT0g
Y2hpbGQyKCkudXNlS2luZCgpKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtpbmQoKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc0JpbmFyeVVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtpbmQoKSA9PSB1c2VLaW5kICYmIGNo
aWxkMigpLnVzZUtpbmQoKSA9PSB1c2VLaW5kOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2
aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDExIEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotdHlwZWRlZiBBbGxvY2F0b3I8Tm9kZT4gTm9kZUFsbG9jYXRv
cjsKKyNpZiBVU0UoSlNWQUxVRTY0KQordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgMTEyPiBOb2Rl
QWxsb2NhdG9yOworI2Vsc2UKK3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDgwPiBOb2RlQWxsb2Nh
dG9yOworI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Niw4ICs5Niw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhG
b3J3YXJkSW50MzJUb0RvdWJsZSwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIC8qIFVzZWQgdG8g
c3BlY3VsYXRlIHRoYXQgYSBkb3VibGUgdmFsdWUgaXMgYWN0dWFsbHkgYW4gaW50ZWdlci4gKi9c
CiAgICAgbWFjcm8oRG91YmxlQXNJbnQzMiwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgLyogVXNl
ZCB0byByZWNvcmQgcGxhY2VzIHdoZXJlIHdlIG11c3QgY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIG51
bWJlci4gKi9cCi0gICAgbWFjcm8oQ2hlY2tOdW1iZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBcCiAgICAgLyogTm9kZXMgZm9yIGFyaXRobWV0aWMgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFj
cm8oQXJpdGhBZGQsIE5vZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgwNSw3ICs4MDUsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKICAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBUZWFy
T2ZmQXJndW1lbnRzOgotICAgICAgICBjYXNlIENoZWNrTnVtYmVyOgogICAgICAgICBjYXNlIENo
ZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50
OgogICAgICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTQzMjc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksMjggKzM5LDMwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bEludGVnZXIoTm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQorR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZv
cm1hdCkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlw
ZSAmIH5TcGVjSW50MzIpKTsKKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBpZiAoaW5mby5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBh
bGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAg
IGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgaWYg
KGlzSW50MzJDb25zdGFudChub2RlKSkgewotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKKyAg
ICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3Rh
bnQoZWRnZS5ub2RlKCkpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2Vy
KCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9y
bWF0SW50ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpIHsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkp
OworICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CisgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZk51bWJlckNvbnN0
YW50KGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlKSk7Ci0g
ICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChlZGdlLm5vZGUoKSkpOworICAg
ICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9k
ZSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIp
IHsKQEAgLTExNywyNyArMTE5LDI3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVn
ZXIoTm9kZSoKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUo
Tm9kZSogbm9kZSkKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoRWRnZSBlZGdl
KQogewotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAgICAgCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIEdQUlJlZyBn
cHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgIGlmIChlZGdl
LT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uu
bm9kZSgpKSkgewogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBn
cHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1
ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5v
ZGUoKSkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0
KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1i
ZXJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOwotICAgICAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWVPZk51bWJlckNv
bnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUoSlNWYWx1ZTo6
RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpOwogICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAgICAgICAgICAgICAgIEFTU0VS
VChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJl
YW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIH0KQEAgLTgwMiwxOCArODA0LDIx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIH0KIAogdGVtcGxh
dGU8Ym9vbCBzdHJpY3Q+Ci1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
bnRlcm5hbChOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUludEludGVybmFsKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQogICAgIGRhdGFMb2dGKCJTcGVjSW50QCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYK
LSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lz
dGVyKCk7CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7
CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3duSW50MzJVc2UgfHwgISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0ludDMyKSk7CisgICAgdmFsdWUuZmlsdGVyKFNwZWNJbnQzMik7CisgICAg
U3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBz
d2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6
IHsKLSAgICAgICAgaWYgKChub2RlLT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQo
bm9kZSkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAg
ICAgIGlmICgoZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9k
ZSgpKSkgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKICAgICAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCAwLCBkaXJlY3Rpb24pOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZv
cm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKQEAgLTgyMSwxMCAr
ODI2LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAg
ICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2Rl
LT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAg
ICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
Q29uc3RhbnQpOwotICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSk7Ci0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJD
b25zdGFudChub2RlKSksIGdwcik7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50
KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJ
bW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIpOwogICAgICAgICAg
ICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICByZXR1cm5G
b3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7CkBAIC04
NjUsNyArODcwLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQog
ICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3By
KTsKICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9u
KTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpT
SW50ZWdlcik7CiAgICAgICAgIC8vIElmICFzdHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAg
ICAgICBpZiAoIXN0cmljdCkgewpAQCAtOTEwLDEwICs5MTUsMTAgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgog
ICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOiB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNDb25z
dGFudCgpICYmIGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFz
Q29uc3RhbnQoKSAmJiBpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAg
ICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29u
c3RhbnQobm9kZSkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
MzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgQVNTRVJU
KGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwg
Z3ByKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAg
ICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQpAQCAtOTM2LDM1ICs5NDEsMzggQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIH0KIH0KIAotR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGUqIG5vZGUsIERhdGFGb3JtYXQm
IHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0
dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgcmV0dXJu
IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDxmYWxzZT4obm9kZSwgcmV0dXJuRm9ybWF0LCBkaXJl
Y3Rpb24pOworICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KGVkZ2Us
IHJldHVybkZvcm1hdCwgZGlyZWN0aW9uKTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlSW50U3RyaWN0KE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoRWRnZSBlZGdlKQogewogICAgIERhdGFGb3JtYXQgbXVz
dEJlRGF0YUZvcm1hdEludGVnZXI7Ci0gICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJ
bnRJbnRlcm5hbDx0cnVlPihub2RlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRT
cGVjdWxhdGlvbik7CisgICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5h
bDx0cnVlPihlZGdlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlv
bik7CiAgICAgUkVMRUFTRV9BU1NFUlQobXVzdEJlRGF0YUZvcm1hdEludGVnZXIgPT0gRGF0YUZv
cm1hdEludGVnZXIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUZQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZShOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24pCitGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUo
RWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VO
QUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVjRG91YmxlQCVkICAgIiwgbm9k
ZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5m
b3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBt
X3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3du
TnVtYmVyVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNOdW1iZXIpKTsKKyAgICB2YWx1ZS5m
aWx0ZXIoU3BlY051bWJlcik7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlw
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJl
Z2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07CiAKICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFG
b3JtYXROb25lKSB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAg
IGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxs
b2NhdGUoKTsKIAotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAg
ICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAg
ICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQoc3RhdGlj
X2Nhc3Q8ZG91YmxlPih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSkpKSwgZ3ByKTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERv
dWJsZVRvSW50NjQoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdl
Lm5vZGUoKSkpKSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUo
Z3ByLCBmcHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogCkBAIC05NzIsOSArOTgw
LDkgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAg
ICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0
YW50KG5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChlZGdlLm5vZGUo
KSkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERv
dWJsZVRvSW50NjQodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKSksIGdwcik7CisgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3Vi
bGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpKSwgZ3ByKTsKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAgICAgICAg
ICAgICAgdW5sb2NrKGdwcik7CiAKQEAgLTEwMzksNyArMTA0Nyw3IEBAIEZQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJ
bnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNW
YWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAogICAgICAgICBpZiAo
IWlzTnVtYmVyU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciksIGRpcmVjdGlvbik7CiAKICAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJl
IHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKICAgICAgICAgbV9qaXQubW92
ZShqc1ZhbHVlR3ByLCB0ZW1wR3ByKTsKQEAgLTExMDIsMTMgKzExMTAsMTYgQEAgRlBSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbChOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxs
KEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY0NlbGxAJWQgICAiLCBub2Rl
LT5pbmRleCgpKTsKICNlbmRpZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZv
ck5vZGUobm9kZSkubV90eXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1f
c3RhdGUuZm9yTm9kZShlZGdlKTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25vd25D
ZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7CisgICAgdmFsdWUuZmlsdGVy
KFNwZWNDZWxsKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CkBAIC0xMTIw
LDggKzExMzEsOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAg
ICAgICAgIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAo
bm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZSk7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7
CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5v
ZGUoKSk7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAg
ICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFu
dCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CkBAIC0xMTM3LDcgKzExNDgsNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAKICAgICAgICAgaW5m
by5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgaWYg
KCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGRpcmVj
dGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
Z3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAg
cmV0dXJuIGdwcjsKICAgICB9CkBAIC0xMTUzLDcgKzExNjQsNyBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigp
OwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0
aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhncHIpLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9q
aXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlciksIGRpcmVjdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAg
IH0KQEAgLTExNzcsMTMgKzExODgsMTMgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlQ2VsbAogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQm9vbGVhbihOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRnZSwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKICAgICBkYXRhTG9nRigiU3BlY0Jvb2xAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKICNl
bmRpZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90
eXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKGVk
Z2UpLm1fdHlwZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSkgewpAQCAtMTE5NSw4ICsxMjA2LDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQm9vbAogICAgICAgICAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7
CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFs
dWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAgICAgICBpZiAoZWRnZS0+
aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpT
Q29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFu
KCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwpA
QCAtMTIxMyw3ICsxMjI0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0
SlMpOwogICAgICAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHR5cGUpKSB7CiAgICAgICAg
ICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVG
YWxzZSkpLCBncHIpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyhncHIpLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVj
dWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJS
ZWcpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBT
cGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRH
UFJSZWcpLCBkaXJlY3Rpb24pOwogICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQogICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKQEAgLTEyMzIsNyArMTI0Myw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2wKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0Jvb2xl
YW5TcGVjdWxhdGlvbih0eXBlKSkgewogICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3Bl
Y3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9q
aXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFu
U3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAg
ICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1
ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0KICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0xMjkwLDM1ICsxMzAxLDI2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgIAogICAgIGlmICht
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0g
ICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVj
T2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxk
MSgpLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAotICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NI
RUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigp
LCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0
dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigp
OwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYg
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNPYmplY3QpIHsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBE
RkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQ
UiksIG5vZGUtPmNoaWxkMSgpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTMyNiwxNCArMTMyOCwx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSkpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ay
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAg
aWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlICYgflNwZWNPYmplY3Qp
IHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCi0g
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAg
ICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MkdQUiksIG5vZGUtPmNoaWxkMigpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTM2MywyNyArMTM2
MiwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAKICAg
ICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgp
KSB7IAogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2Rl
LT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNw
ZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0
Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5j
aFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJl
ZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGls
ZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ax
R1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
LSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQu
YnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTM5OSwy
NyArMTM5MiwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAg
ICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJl
IGEgY2VsbC4gCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5p
c1N0aWxsVmFsaWQoKSkgeyAKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlmICgobV9zdGF0
ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFNwZWNDZWxsKSAmIH5TcGVjT2JqZWN0KSB7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUs
IEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCi0gICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBK
U1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAg
ICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9y
Tm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1Zh
bHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2Jq
ZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhvcDJHUFIpLCByaWdodENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgo
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTQzNywxMiAr
MTQyNCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAg
CiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0
IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUg
dGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0YXRlLmZv
ck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIpIHsKKyAg
ICBpZiAobmVlZHNUeXBlQ2hlY2socmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7
CiAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5h
bmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1
bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQubm9kZSgpLAorICAgICAg
ICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxk
LCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwpAQCAt
MTQ3MywyNyArMTQ2MCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVP
YmplCiAgICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5p
c1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvciht
X2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgaWYgKG1fc3RhdGUu
Zm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAg
ICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JO
b2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVj
T2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgCkBAIC0xNTA5LDI3ICsxNDkwLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZU9iamUKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCBy
aWdodENoaWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAg
ICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkg
JiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAg
ICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNL
KAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2Vs
bCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3Ry
dWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdw
cigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ay
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAg
aWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwpICYgflNw
ZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAg
ICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBF
X0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5T
cGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgCkBAIC0xNTQ0LDcgKzE1MTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5j
aCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlmIHRoYXQgaXMgZW5vdWdo
IHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmluZWQuCi0g
ICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSAm
IH5TcGVjT3RoZXIpCisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhyaWdodENoaWxkLCBTcGVjQ2Vs
bCB8IFNwZWNPdGhlcikpCiAgICAgICAgIHJpZ2h0Tm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIGp1bXAobm90VGFrZW4sIEZvcmNlSnVtcCk7CkBAIC0xNTUzLDkgKzE1
MjgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAg
IG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwog
ICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIEJhZFR5cGUs
IEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCi0gICAgICAgICAgICBtX2ppdC5icmFu
Y2g2NCgKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BS
KSwgcmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIG1faml0LmJyYW5jaDY0KAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwogICAg
IH0KQEAgLTE2MDksNyArMTU4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5v
ZGVVc2UsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNlKQogewogICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CkBAIC0xNjE5LDI3ICsxNTkzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RPck90aGUKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotCi0gICAgICAgIGlm
IChuZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsCi0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09i
amVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlz
KTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKIAotICAgICAgICBpZiAobmVl
ZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNw
ZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgo
CkBAIC0xNjYwLDExICsxNjI5LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmpl
Y3RPck90aGUKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKIAotICAgIGlmIChuZWVk
U3BlY3VsYXRpb25DaGVjaykgeworICAgIGlmIChuZWVkc1R5cGVDaGVjayhub2RlVXNlLCBTcGVj
Q2VsbCB8IFNwZWNPdGhlcikpIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+
VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIAotICAgICAgICAgICAgbV9q
aXQuYnJhbmNoNjQoCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgbm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIG1faml0LmJyYW5jaDY0
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAgICAgICAg
ICAgICAgcmVzdWx0R1BSLCAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KFZhbHVlTnVsbCkpKTsKQEAgLTE2NzgsMTIgKzE2NDcsMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTG9naWNhbE5vdChOb2RlKiBub2RlKQogewotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChub2RlLT5jaGlsZDEoKSwKLSAgICAgICAgICAgICFpc09iamVjdE9yT3Ro
ZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwor
ICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBPYmplY3RP
ck90aGVyVXNlOiB7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgCisgICAgY2FzZSBJbnQz
MlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwog
ICAgICAgICBtX2ppdC5jb21wYXJlMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZS5ncHIo
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0LmdwcigpKTsKQEAgLTE2
OTEsNyArMTY2MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4K
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jv
b2xlYW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKKyAgICAgICAgCisgICAgY2FzZSBOdW1iZXJVc2U6
IHsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMTcwMyw4ICsxNjc0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpOwotICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAg
IGNhc2UgQm9vbGVhblVzZTogewogICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKQEAgLTE3MTYsMzkgKzE2ODYs
NDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOyAvLyBGSVhNRTogV2UgY291bGQgcmV1c2UsIGJ1
dCBvbiBzcGVjdWxhdGlvbiBmYWlsIHdvdWxkIG5lZWQgcmVjb3ZlcnkgdG8gcmVzdG9yZSB0YWcg
KGFraW4gdG8gYWRkKS4KICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWUuZ3ByKCkpLCBub2RlLT5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3By
KCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHR5
cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS0+Y2hp
bGQxKCksIFNwZWNCb29sZWFuLCBtX2ppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAK
ICAgICAgICAgLy8gSWYgd2UgYWRkIGEgRGF0YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2UgaXQg
aGVyZS4KICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgICAgICAKKyAgICBjYXNl
IFVudHlwZWRVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCi0gICAg
SlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAKLSAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7
Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFy
ZzFHUFIgPSBhcmcxLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogICAgIAotICAgIGFyZzEudXNlKCk7CisgICAgICAgIGFyZzEudXNlKCk7CiAgICAgCi0g
ICAgbV9qaXQubW92ZShhcmcxR1BSLCByZXN1bHRHUFIpOwotICAgIG1faml0LnhvcjY0KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7Ci0g
ICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29t
cGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSkpOworICAgICAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZh
bHNlKSksIHJlc3VsdEdQUik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0g
bV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKICAgICAKLSAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKLSAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBkZmdDb252
ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCBhcmcxR1BSKSk7CisgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlz
LCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCBhcmcxR1BSKSk7CiAgICAg
Ci0gICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVl
VHJ1ZSkpLCByZXN1bHRHUFIpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBE
YXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAg
ICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVl
KSksIHJlc3VsdEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBE
YXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmxv
Y2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgYm9vbCBuZWVkU3BlY3VsYXRpb25D
aGVjaykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ug
bm9kZVVzZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbikKIHsKICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlKTsKICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKQEAgLTE3NTksMjMgKzE3MzksMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAKLSAgICAgICAg
aWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKLSAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAg
ICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3Bl
Y09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKIAotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
VXNlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgc2Ny
YXRjaEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5icmFu
Y2hUZXN0OChKSVRDb21waWxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCkBAIC0xNzkxLDEwICsxNzY3LDEyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAKICAgICBub3RDZWxsLmxpbmso
Jm1faml0KTsKICAgICAKLSAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKKyAgICBpZiAo
bmVlZHNUeXBlQ2hlY2sobm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7CiAgICAgICAg
IG1faml0Lm1vdmUodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIG5vZGVVc2UsIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CisgICAg
ICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVz
ZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgfQogICAgIGp1bXAobm90VGFrZW4pOwogICAg
IApAQCAtMTgwNiwxNCArMTc4NCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNo
KE5vZGUqIG5vCiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgp
OwogICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsK
ICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLT5jaGlsZDEoKSwg
dGFrZW4sIG5vdFRha2VuLCAKLSAgICAgICAgICAgICFpc09iamVjdE9yT3RoZXJTcGVjdWxhdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgIHN3aXRjaCAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOiB7
CisgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUtPmNoaWxkMSgpLCB0YWtlbiwg
bm90VGFrZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgCisgICAgY2FzZSBJ
bnQzMlVzZToKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IEludDMyVXNlKSB7CiAgICAgICAgICAgICBib29sIGludmVydCA9IGZh
bHNlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkp
IHsKQEAgLTE4MzcsNTYgKzE4MTYsNjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5j
aChOb2RlKiBubwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVl
LmdwcigpOworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OwogICAgICAgICAKLSAgICBib29sIHByZWRpY3RCb29sZWFuID0gaXNCb29sZWFuU3BlY3VsYXRp
b24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSk7Ci0gICAgCi0gICAgaWYgKHByZWRpY3RC
b29sZWFuKSB7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87Cisg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSkgeworICAg
ICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1
bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKLSAgICAg
ICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsKLSAgICAgICAgICAg
ICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwotICAgICAgICAgICAgICAgIHRha2VuID0gbm90
VGFrZW47Ci0gICAgICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpaZXJvOworICAgICAgICAgICAgICAg
ICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICAgICAgICAgICAgICB0YWtlbiA9
IG5vdFRha2VuOworICAgICAgICAgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBicmFuY2hUZXN0MzIoY29u
ZGl0aW9uLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKHRydWUpLCB0YWtlbik7Ci0gICAgICAgICAg
ICBqdW1wKG5vdFRha2VuKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAg
ICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IHRha2VuKTsKKyAgICAgICAgICAgICAgICBicmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQ
UiwgVHJ1c3RlZEltbTMyKHRydWUpLCB0YWtlbik7CisgICAgICAgICAgICAgICAganVtcChub3RU
YWtlbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOworICAgICAg
ICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkp
LCB0YWtlbik7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0Lmp1
bXAoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFsdWUudXNlKCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpICYgU3BlY0ludDMyKSB7Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBub3RUYWtlbik7Ci0gICAgICAgICAgICBicmFu
Y2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICB0
eXBlQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Jvb2xl
YW4sIG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZS51c2Uo
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNw
ZWNJbnQzMikgeworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKDApKSksIG5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCB0YWtlbik7CisgICAgICAgICAgICB9CiAgICAgCi0gICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0Jvb2xlYW4pIHsKLSAgICAgICAgICAgIGJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4p
OwotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHRha2VuKTsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCkgJiBTcGVjQm9vbGVhbikgeworICAgICAgICAgICAgICAgIGJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOworICAg
ICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCB0YWtlbik7CisgICAgICAgICAgICB9CiAgICAgCi0gICAgICAgIHZhbHVlLnVzZSgpOwor
ICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFs
dWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1
ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CiAgICAgCi0gICAgICAgIGJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtlbik7Ci0gICAgICAgIGp1bXAobm90
VGFrZW4pOworICAgICAgICAgICAgYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCByZXN1bHRHUFIsIHRha2VuKTsKKyAgICAgICAgICAgIGp1bXAobm90VGFrZW4pOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBub1Jlc3Vs
dChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCkBAIC0yMTMxLDE5ICsyMTE2LDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAotICAgIGNhc2UgQ2hlY2tOdW1iZXI6IHsKLSAgICAgICAgaWYgKCFpc051
bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkg
ewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCku
bm9kZSgpLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxl
cjo6WmVybywgb3AxLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAg
ICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIH0KLSAgICAgICAgbm9S
ZXN1bHQobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQogICAgIGNhc2UgVmFsdWVBZGQ6
CiAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgY29tcGlsZUFkZChub2RlKTsKQEAgLTIxNjIs
MjIgKzIxMzQsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7
CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgICAgIGNvbXBpbGVJbnRlZ2VyQXJp
dGhEaXZGb3JYODYobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLQotICAgICAg
ICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnBy
KCk7Ci0gICAgICAgIG1faml0LmRpdkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOwot
Ci0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwotICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICAgICAgbV9qaXQuZGl2RG91YmxlKHJlZzEsIHJl
ZzIsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvdWJsZVJlc3Vs
dChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgY2FzZSBBcml0aE1vZDogewpAQCAtMjE4Niw4ICsyMTY1LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhBYnM6IHsK
LSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYygpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBJbnQzMlVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTIyMDEsMTgg
KzIxODAsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmFic0RvdWJsZShvcDEu
ZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG5vZGUpOwotICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1faml0LmFic0RvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFy
aXRoTWF4OiB7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJp
dGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAg
ICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0
Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBvcDEpOwpAQCAtMjIzMSwzNyArMjIxNyw0NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgY2Fz
ZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBkb25lOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CiAgICAg
ICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNo
RG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDog
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNo
RG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDog
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7
CiAgICAgICAgIAotICAgICAgICAvLyBvcDIgaXMgZWF0aGVyIHRoZSBsZXNzZXIgb25lIG9yIG9u
ZSBvZiB0aGVuIGlzIE5hTgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJMZXNzID0g
bV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1
YWwsIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKKyAgICAgICAgICAgIC8vIG9wMiBpcyBlYXRoZXIg
dGhlIGxlc3NlciBvbmUgb3Igb25lIG9mIHRoZW4gaXMgTmFOCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBvcDJMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWlu
ID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKICAgICAg
ICAgCi0gICAgICAgIC8vIFVub3JkZXJlZCBjYXNlLiBXZSBkb24ndCBrbm93IHdoaWNoIG9mIG9w
MSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1cmUgTmFOIGJ5IGFkZGluZyAKLSAgICAgICAgLy8gb3Ax
ICsgb3AyIGFuZCBwdXR0aW5nIGl0IGludG8gcmVzdWx0LgotICAgICAgICBtX2ppdC5hZGREb3Vi
bGUob3AxLmZwcigpLCBvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9u
J3Qga25vdyB3aGljaCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRp
bmcgCisgICAgICAgICAgICAvLyBvcDEgKyBvcDIgYW5kIHB1dHRpbmcgaXQgaW50byByZXN1bHQu
CisgICAgICAgICAgICBtX2ppdC5hZGREb3VibGUob3AxLmZwcigpLCBvcDIuZnByKCksIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAg
ICAKLSAgICAgICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUob3AyLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgb3AyTGVzcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMi5mcHIoKSwgcmVzdWx0LmZw
cigpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChvcDEuZnByKCkgIT0gcmVzdWx0LmZwcigpKSB7
Ci0gICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgaWYg
KG9wMS5mcHIoKSAhPSByZXN1bHQuZnByKCkpIHsKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBvcDFMZXNzLmxpbmso
Jm1faml0KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQu
ZnByKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQp
OworICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAg
IG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIAot
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OwogICAgICAgICAKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9k
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJp
dGhTcXJ0OiB7CkBAIC0yNjE3LDE4ICsyNjEwLDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
OiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOwogCiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIo
KTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5
cGUoKSA9PSBBcnJheTo6SW50MzIKLSAgICAgICAgICAgICAgICAmJiAhaXNJbnQzMlNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDMpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVn
cyh2YWx1ZVJlZyksIGNoaWxkMywKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKSk7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6SW50
MzIpIHsKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3ModmFsdWVSZWcpLCBjaGlsZDMsIFNwZWNJbnQzMiwKKyAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QmVsb3csIHZhbHVlUmVnLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5
cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyAmJiBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQo
KSkgewpAQCAtMjkzMSwxMCArMjkyNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
IAotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50
MzIgJiYgIWlzSW50MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
Lm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMigp
LAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVs
b3csIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyKSB7CisgICAg
ICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNJbnQzMiwKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSAhPSBBcnJheTo6SW50MzIgJiYgSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKQEAg
LTI5NjIsMTMgKzI5NTYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKICAgICAgICAgICAgIEZQUlJlZyB2YWx1ZUZQUiA9IHZhbHVlLmZwcigpOwog
Ci0gICAgICAgICAgICBpZiAoIWlzUmVhbE51bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIGEgd2F5IG9mIHByb2ZpbGluZyB0aGVzZSwgYW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhl
bSBpbnRvCi0gICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBCYWRUeXBl
LCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVlRlBSLCB2
YWx1ZUZQUikpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNSZWFsTnVt
YmVyLAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVGUFIsIHZhbHVlRlBSKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlZlY3Rvckxlbmd0aCgpKSk7CkBAIC0zMTcxLDcgKzMxNjEsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFRvUHJp
bWl0aXZlOiB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgICAgIC8vIEl0J3MgcmVhbGx5IHByb2Zp
dGFibGUgdG8gc3BlY3VsYXRlIGludGVnZXIsIHNpbmNlIGl0J3MgcmVhbGx5IGNoZWFwLAogICAg
ICAgICAgICAgLy8gaXQgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkgcmVhbCB3b3JrLCBh
bmQgd2UgZW1pdCBhIGxvdCBsZXNzIGNvZGUuCiAgICAgICAgICAgICAKQEAgLTMxODYsMzAgKzMx
NzcsMzUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQg
c3RyaW5nIHNwZWN1bGF0aW9uIGhlcmUuCi0gICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBvcDFH
UFIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG9wMS51c2Uo
KTsKKyAgICAgICAgICAgIG9wMS51c2UoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghKG1fc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjTnVtYmVyIHwgU3BlY0Jv
b2xlYW4pKSkKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmlt
aXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgICAgICBpZiAoIShtX3N0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH4oU3BlY051bWJlciB8IFNwZWNCb29sZWFu
KSkpCisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJl
YWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBhbHJlYWR5UHJpbWl0
aXZlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdFByaW1pdGl2ZSwgdGhpcywgb3BlcmF0
aW9uVG9QcmltaXRpdmUsIHJlc3VsdEdQUiwgb3AxR1BSKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKG5vdFByaW1pdGl2ZSwgdGhpcywgb3BlcmF0aW9uVG9QcmltaXRpdmUsIHJlc3VsdEdQ
Uiwgb3AxR1BSKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzI1MSwx
NCArMzI0NywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwog
ICAgICAgICAgICAgICAgICAgICBGUFJSZWcgb3BGUFIgPSBvcGVyYW5kLmZwcigpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlzUmVhbE51bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9k
ZSh1c2UpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIGEgd2F5IG9mIHByb2ZpbGluZyB0aGVzZSwgYW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBp
bnRvCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgot
ICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90
RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjUmVhbE51bWJlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BG
UFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKG9wRlBS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoZG91YmxlKSAqIG9w
ZXJhbmRJZHgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMzI2NiwxMCArMzI1OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzogewogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMs
IHVzZSk7CiAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5cGUoKSkg
JiYgIWlzSW50MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wR1BSKSwgdXNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywg
b3BHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzSW50MzIobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhvcEdQUiksIHVzZSwgU3BlY0ludDMyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KG9wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvcGVyYW5kSWR4KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MzMxOSwxNCArMzMxMiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAg
ICAgICAgICAgRlBSUmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKICAgICAgICAgICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFp
c1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgd2F5IG9mIHByb2ZpbGluZyB0
aGVzZSwgYW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBpbnRvCi0gICAgICAgICAgICAgICAgICAg
IC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncygp
LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgREZHX1RZUEVf
Q0hFQ0soCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwgU3BlY1JlYWxO
dW1iZXIsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVk
LCBvcEZQUiwgb3BGUFIpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5ib3hEb3VibGUob3BGUFIs
IHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwg
YnVmZmVyICsgb3BlcmFuZElkeCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMzM0LDEw
ICszMzIzLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwogICAgICAgICAgICAgICAgIEdQ
UlJlZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0ludDMy
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSAmJiAhaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9y
Tm9kZSh1c2UpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wR1BSKSwg
dXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAg
ICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKG9wR1BSKSwgdXNlLCBTcGVjSW50MzIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwgYnVm
ZmVyICsgb3BlcmFuZElkeCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTU5LDI0ICsz
NTQ5LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgaWYgKGlzT2JqZWN0
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUp
OwotICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7
Ci0gICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzT3RoZXJTcGVjdWxh
dGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIE90aGVyVXNlOiB7CiAgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICBHUFJS
ZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
IWlzT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpIHsKKyAgICAgICAgICAgIGlmICghbmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNw
ZWNPdGhlcikpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2Ny
YXRjaEdQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKKyAg
ICAgICAgICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT3RoZXIsCisgICAgICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsVGhpc09iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSksIHNj
cmF0Y2hHUFIpOwpAQCAtMzU4NCwzMCArMzU3MSw0MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKGlzT2JqZWN0U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKSkpIHsKKyAgICAgICAgY2FzZSBPYmplY3RVc2U6IHsKICAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICBH
UFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KCFpc09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFs
dWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAg
ICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBPYmplY3RVc2UsCisgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRo
aXNWYWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KHRoaXNWYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7
Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAKLSAgICAgICAg
R1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b252ZXJ0VGhpcywgcmVzdWx0LmdwcigpLCB0aGlzVmFsdWVHUFIpOwotICAgICAgICAKLSAgICAg
ICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIg
PSB0aGlzVmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRUaGlzLCByZXN1bHQu
Z3ByKCksIHRoaXNWYWx1ZUdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICB9CiAKQEAgLTM3NzYsOCArMzc3NSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0
aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7CisKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOiB7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgICAg
ICAKQEAgLTM3OTIsMjAgKzM3OTIsMjcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgCi0gICAgICAgIGJhc2UudXNlKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVy
bywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIGJhc2Uu
dXNlKCk7CiAgICAgICAgIAotICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4s
IGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsKTsK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0
NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
cik7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9k
ZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVy
KCksIG5vdENlbGwpOwogICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzgxNCw4ICszODIxLDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygp
LCAwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNl
IENlbGxVc2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OwogCkBAIC0zODMzLDIxICszODQxLDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsK
KyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogCi0gICAgICAgIEdQUlJl
c3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGJhc2UudXNl
KCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBiYXNlLnVzZSgpOwor
ICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblpl
cm8sIGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpO
b25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKLSAg
ICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIs
IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCwgRG9udFNwaWxsKTsKKyAgICAgICAg
ICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgcmVzdWx0R1BSLCBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwsIERvbnRTcGlsbCk7CiAgICAgICAgIAot
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKLQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zODcxLDEzICszODg2LDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOgogICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yobm9kZS0+c3Ry
dWN0dXJlU2V0KCkpCi0gICAgICAgICAgICAmJiBpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpKSB7Ci0gICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24gPSBub2RlLT5vcCgpID09IEZvcndhcmRDaGVja1N0cnVjdHVyZSA/IEZvcndhcmRTcGVjdWxh
dGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCksIGRpcmVjdGlvbik7CiAgICAgICAgIApAQCAtMzk0
Miw2ICszOTUwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBp
bGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihub2RlLT5zdHJ1Y3R1cmUoKSkpOwogICAgICAg
ICBtX2ppdC5icmVha3BvaW50KCk7CiAgICAgICAgIGlzT0subGluaygmbV9qaXQpOworI2Vsc2UK
KyAgICAgICAgc3BlY3VsYXRlQ2VsbChub2RlLT5jaGlsZDEoKSk7CiAjZW5kaWYKICAgICAgICAg
CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtMzk0OSw2ICszOTU5LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7CisgICAgICAgIEFTU0VSVChpc0tub3duQ2VsbChub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVy
ZW5jZVRyYW5zaXRpb24oCiAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmNvZGVPcmlnaW5P
d25lcigpLApAQCAtNDI3MSw3ICs0MjgzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgVHlwZU9mOiB7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OwpAQCAtNDI4MCwxOSArNDI5MiwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lSnVtcHM7CiAKICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsK
IAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0
NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZSh2YWx1
ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBpc05vdENlbGwpOworICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpICE9IFVudHlwZWRVc2UpCisgICAgICAgICAgICBERkdfVFlQRV9DSEVD
SyhKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsLCBpc05v
dENlbGwpOwogCi0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9i
amVjdCgpKSB7CisgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9i
amVjdCgpIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKICAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG5vdFN0cmluZyA9IG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQx
KCksIG5vdFN0cmluZyk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFN0cmluZ1VzZSkKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291
cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7CiAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
bWFsbFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9u
ZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgIT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICAgICAgbm90U3Ry
aW5nLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blR5cGVPZiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7CiAgICAgICAgICAgICAgICAgZG9uZUp1bXBz
LmFwcGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtNDMwMiw3ICs0MzE2LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgewogICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1f
aml0KTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJy
YW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkpLCByZXN1bHRHUFIp
OwpAQCAtNDc3MSw2ICs0Nzg1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgREZHX05PREVfRE9f
VE9fQ0hJTERSRU4obV9qaXQuZ3JhcGgoKSwgbm9kZSwgc3BlY3VsYXRlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICAvLyBUaGlzIGlz
IGEgbm8tb3AuCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0MzI3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsMTQgKzEwOCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1
cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9k
ZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBt
X2NhbkV4aXQpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0ZhaWwpOwogICAgIG1f
aml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJj
ZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0
aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBF
ZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCiB7Ci0gICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgp
KTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwog
ICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCks
IGp1bXBUb0ZhaWwpOwogfQogCkBAIC0xMjMsNyArMTIzLDcgQEAgT1NSRXhpdEp1bXBQbGFjZWhv
bGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAg
ICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIoKTsKLSAgICBBU1NFUlQobV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VS
VChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgdW5zaWduZWQg
aW5kZXggPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZPU1JFeGl0cygpOwogICAgIG1faml0
LmFwcGVuZEV4aXRJbmZvKCk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQo
T1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKQEAgLTEz
Miw3ICsxMzIsNyBAQCBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzCiAK
IE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2Up
CiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9k
ZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBt
X2NhbkV4aXQpOwogICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIApAQCAtMTQwLDE0ICsxNDAsMTQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2th
eSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1w
c1RvRmFpbCk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChr
aW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKIH0KIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBqdW1wc1RvRmFpbCkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBq
c1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcHNUb0ZhaWwpOwogfQogCkBAIC0xNTUs
NyArMTU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewog
ICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2pp
dC5jb2RlQmxvY2soKS0+YXBwZW5kU3BlY3VsYXRpb25SZWNvdmVyeShyZWNvdmVyeSk7CiAgICAg
bV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFpbCk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCkt
PmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgp
Lm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5z
aXplKCksIG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJPZlNwZWN1bGF0aW9uUmVjb3Zlcmllcygp
KSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25D
aGVjayhFeAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNv
dmVyeSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJl
bnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNl
LCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3ZlcnkpOwogfQogCkBAIC0xNzQsMTEg
KzE3NCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAgICAg
ICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCgpOwogfQogCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgRWRnZSBlZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25z
dCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uKQoreworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgZWRn
ZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5LCBkaXJlY3Rpb24pOworfQorCiBKdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBvaW50
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSkK
IHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiAwOwotICAgIEFTU0VS
VChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7
CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAg
ICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgT1NS
RXhpdCYgZXhpdCA9IG1faml0LmNvZGVCbG9jaygpLT5vc3JFeGl0KAogICAgICAgICBtX2ppdC5j
b2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KApAQCAtMjgwLDE0ICsyODUsMTQgQEAg
SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsK
KyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAg
IHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7
CiAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVl
UmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9j
dXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNv
dXJjZSwgbm9kZSwganVtcHNUb0ZhaWwpOwogICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2Fy
ZCh2YWx1ZVJlY292ZXJ5KTsKIH0KQEAgLTMwMCw5ICszMDUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQs
IGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwogfQogCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgRWRnZSBlZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5k
LCBqc1ZhbHVlU291cmNlLCBlZGdlLm5vZGUoKSwganVtcFRvRmFpbCwgZGlyZWN0aW9uKTsKK30K
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUpCiB7Ci0gICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhp
dCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY3VsYXRp
dmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4iKTsKICNlbmRpZgpAQCAtMzE0LDEzICszMjQsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdgogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1Zh
bHVlUmVncyBqc1ZhbHVlUmVncywgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihraW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5ub2RlKCkp
OwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVk
LlxuIik7CiAjZW5kaWYKQEAgLTMzMCw2ICszNDAsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
dGVybWluYXRlU3BlY3VsYXRpdgogICAgIG1fY29tcGlsZU9rYXkgPSBmYWxzZTsKIH0KIAordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVk
Z2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAganVtcFRvRmFpbCkKK3sKKyAgICBBU1NFUlQobmVlZHNUeXBlQ2hlY2soZWRnZSwgdHlwZXNQ
YXNzZWRUaHJvdWdoKSk7CisgICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLmZpbHRlcih0eXBlc1Bh
c3NlZFRocm91Z2gpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgc291cmNlLCBlZGdl
LCBqdW1wVG9GYWlsKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFR5cGVDaGVj
ayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bh
c3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCit7CisgICAgdHlwZUNoZWNrKHNvdXJjZSwgZWRnZSwg
dHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKTsKKyAgICBjb252ZXJ0TGFzdE9TUkV4aXRU
b0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVD
aGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBl
c1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICB0eXBlQ2hlY2soc291cmNlLCBlZGdlLCB0
eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpOworICAgIGlmIChkaXJlY3Rpb24gPT0gRm9y
d2FyZFNwZWN1bGF0aW9uKQorICAgICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoKTsK
K30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkU2xvd1BhdGhHZW5lcmF0b3IoUGFzc093blB0
cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhHZW5lcmF0b3IpCiB7CiAgICAgbV9zbG93UGF0
aEdlbmVyYXRvcnMuYXBwZW5kKHNsb3dQYXRoR2VuZXJhdG9yLmxlYWtQdHIoKSk7CkBAIC04NzIs
OSArOTAyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSogbm9kZQogICAg
IGFycmF5aWZ5KG5vZGUsIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpKTsKIH0KIAotR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlKiBub2RlKQorR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3RvcmFnZShFZGdlIGVkZ2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAg
ICAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAtODg4LDcgKzkxOCw3
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZSoKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgLy8gTXVzdCBiZSBhIGNlbGw7IGZpbGwgaXQgYXMgYSBjZWxsIGFu
ZCB0aGVuIHJldHVybiB0aGUgcG9pbnRlci4KLSAgICAgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVD
ZWxsKG5vZGUsIEJhY2t3YXJkU3BlY3VsYXRpb24pOworICAgICAgICByZXR1cm4gZmlsbFNwZWN1
bGF0ZUNlbGwoZWRnZSwgQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOiB7CkBAIC04OTgsNyArOTI4LDcgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlKgogICAgIH0KICAgICAgICAgCiAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKG5vZGUsIEJhY2t3YXJkU3Bl
Y3VsYXRpb24pOworICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSwgQmFja3dh
cmRTcGVjdWxhdGlvbik7CiAgICAgfQogfQogCkBAIC0xNTA5LDIwICsxNTM5LDIwIEBAIGJvb2wg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW4KICAgICAgICAgLy8gc28gY2FuIGJl
IG5vIGludGVydmVuaW5nIG5vZGVzIHRvIGFsc28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKICAg
ICAgICAgQVNTRVJUKG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQo
SW50MzJVc2UpKQogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2Rl
LCBicmFuY2hOb2RlLCBjb25kaXRpb24pOwotICAgICAgICBlbHNlIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKQorICAgICAgICBlbHNlIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkK
ICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChub2RlLCBicmFuY2hOb2Rl
LCBkb3VibGVDb25kaXRpb24pOwogICAgICAgICBlbHNlIGlmIChub2RlLT5vcCgpID09IENvbXBh
cmVFcSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVT
dHJpbmcoKSB8fCBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nVXNlKSkgewogICAgICAg
ICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwg
Y29uZGl0aW9uLCBvcGVyYXRpb24pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpCisg
ICAgICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpCiAgICAgICAg
ICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZSk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkK
KyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RV
c2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UpCiAgICAg
ICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHko
bm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBicmFuY2hOb2RlKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkg
JiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKQorICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UgJiYg
bm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkKICAgICAgICAgICAgICAgICBj
b21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShub2RlLT5jaGlsZDIo
KSwgbm9kZS0+Y2hpbGQxKCksIGJyYW5jaE5vZGUpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hOb2Rl
LCBjb25kaXRpb24sIG9wZXJhdGlvbik7CkBAIC0xNjQ1LDYgKzE2NzUsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogCiAgICAgZm9yIChtX2luZGV4SW5CbG9j
ayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7
CiAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9ja1ttX2luZGV4SW5CbG9ja107CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgICAgICBtX2NhbkV4aXQgPSBtX2N1cnJlbnROb2RlLT5jYW5FeGl0
KCk7CisjZW5kaWYKKyAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9IG1fc3RhdGUu
c3RhcnRFeGVjdXRpbmcobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1faml0LnNldEZvck5vZGUo
bV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW47CiAgICAgICAgIGlmICghbV9jdXJyZW50Tm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkgewpAQCAtMTc1OSw3ICsxNzkzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShCYXNpY0Jsb2NrJgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCB0aGUgYWJzdHJhY3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5vZGUu
Ci0gICAgICAgIG1fc3RhdGUuZXhlY3V0ZShtX2luZGV4SW5CbG9jayk7CisgICAgICAgIGlmIChz
aG91bGRFeGVjdXRlRWZmZWN0cykKKyAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVmZmVjdHMo
bV9pbmRleEluQmxvY2spOwogICAgICAgICAKICAgICAgICAgaWYgKG1fY3VycmVudE5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC0xOTA2
LDEzICsxOTQxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVYK
IAogICAgIEZQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmZwcigpOwogICAgIAotICAgIGlmICghaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMykubV90eXBlKSkgewot
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3
ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwgSlNW
YWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcsIHZhbHVlUmVnKSk7Ci0g
ICAgfQorICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVlUmVncygpLCBjaGlsZDMs
IFNwZWNSZWFsTnVtYmVyLAorICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcsIHZh
bHVlUmVnKSk7CiAgICAgCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47
CkBAIC0yMTA0LDcgKzIxMzYsOCBAQCBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBTcGVjdWxhdGl2ZUpJ
VDo6Y2hlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIoTm9kZSog
bm9kZSkKIHsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBJ
bnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAg
ICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMjExMiwxNDUg
KzIxNDUsMTYyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUJvb2xlYW4oKSkgewotICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAgbV9qaXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigx
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2gg
KGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewot
ICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEludGVnZXI6IHsKLSAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG9w
MS5mb3JtYXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBHZW5lcmF0ZWRP
cGVyYW5kRG91YmxlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIEVkZ2Uobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBEb3VibGVVc2UpKTsgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB3aWxsIGFzc2Vy
dCB0aGF0IHRoaXMgaXMgYSBkb3VibGUgdXNlLiBXZSBmb3JjZSBpdCB0byB0aGluayB0aGF0IGl0
IHdhcyBhIGRvdWJsZSB1c2UsIHNpbmNlIHdlIGFyZSBpbmZlcnJpbmcgdGhhdCB3ZSBvdWdodCB0
byBlbWl0IGEgZG91YmxlIHVzZSBxdWl0ZSBsYXRlLgotICAgICAgICBGUFJSZWcgZnByID0gb3Ax
LmZwcigpOwotICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RUcnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0
ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFp
bGVkKTsKKyAgICBjYXNlIE51bWJlclVzZToKKyAgICBjYXNlIE5vdENlbGxVc2U6IHsKKyAgICAg
ICAgc3dpdGNoIChjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkpIHsKKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSW50ZWdlcjogeworICAgICAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBC
YWNrd2FyZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICAgICAgbV9qaXQubW92
ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbm9kZSwgb3AxLmZvcm1hdCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmREb3VibGU6IHsKKyAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgQmFja3dhcmRTcGVjdWxhdGlvbiwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBvcDEu
ZnByKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNo
VHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVu
Y2F0ZUZhaWxlZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKG5vdFRydW5jYXRlZFRvSW50ZWdlciwgdGhpcywgdG9JbnQzMiwgZ3ByLCBm
cHIpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChub3RU
cnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CiAKLSAgICAgICAg
aW50ZWdlclJlc3VsdChncHIsIG5vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNh
c2UgR2VuZXJhdGVkT3BlcmFuZEpTVmFsdWU6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBub2RlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRKU1Zh
bHVlOiB7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAKLSAgICAgICAgR1BSUmVnIGdwciA9IG9wMS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAg
RlBSVGVtcG9yYXJ5IHRlbXBGcHIodGhpcyk7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnBy
LmZwcigpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGNvbnZlcnRl
ZDsKLQotICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAg
ICBHUFJSZWcgZ3ByID0gb3AxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdwciA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOwor
ICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGcHIuZnByKCk7CisKKyAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7CisKKyAgICAgICAgICAg
IGlmIChuZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY051bWJlcikpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE51bWJlclVzZSkgewor
ICAgICAgICAgICAgICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY051bWJlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUtPmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKSk7CisgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2Vs
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBJdCdz
IG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRv
IDAuCi0gICAgICAgICAgICAgICAgbV9qaXQuY29tcGFyZTY0KEpJVENvbXBpbGVyOjpFcXVhbCwg
Z3ByLCBUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R3ByKTsKLSAgICAgICAgICAgICAg
ICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIC8v
IEl0J3Mgbm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5z
IGludG8gMC4KKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29tcGFyZTY0KEpJVENvbXBpbGVy
OjpFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R3ByKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgaXNOdW1iZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVy
ZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCi0gICAgICAgIG1faml0Lm1v
dmUoZ3ByLCByZXN1bHRHcHIpOwotICAgICAgICB1bmJveERvdWJsZShyZXN1bHRHcHIsIGZwcik7
CisgICAgICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBl
bmNvZGVkIGFzIGEgSlNWYWx1ZQorICAgICAgICAgICAgbV9qaXQubW92ZShncHIsIHJlc3VsdEdw
cik7CisgICAgICAgICAgICB1bmJveERvdWJsZShyZXN1bHRHcHIsIGZwcik7CiAKLSAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bih0b0ludDMyLCByZXN1bHRHcHIsIGZwcik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0R3ByKTsKKyAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdwcik7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3VsdEdwciwgZnBy
KTsKKyAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKIAotICAg
ICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICBjb252ZXJ0
ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0
KTsKLSAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHRHcHIpOworICAg
ICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lnplcm9F
eHRlbmQzMlRvUHRyKGdwciwgcmVzdWx0R3ByKTsKIAotICAgICAgICBjb252ZXJ0ZWQubGluaygm
bV9qaXQpOworICAgICAgICAgICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKICNlbHNlCi0gICAg
ICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGNoaWxkTm9kZS0+dmlydHVhbFJlZ2lzdGVy
KCk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IGNoaWxkTm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKIAotICAgICAgICBHUFJSZWcg
cGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHcHIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXls
b2FkR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOwog
ICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGNvbnZlcnRlZDsKLQotICAg
ICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIpCi0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKLSAgICAgICAg
ICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIGZwciA9
IHRlbXBGcHIuZnByKCk7Ci0gICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7CiAKLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsK
LQotICAgICAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1i
ZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHRhZ0dQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOworICAgICAgICAgICAgaWYgKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKQorICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIEdQUlJlZyB0YWdHUFIgPSBvcDEudGFnR1BSKCk7CisgICAgICAgICAgICAgICAg
RlBSVGVtcG9yYXJ5IHRlbXBGcHIodGhpcyk7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9
IHRlbXBGcHIuZnByKCk7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3Vs
YXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0NlbGwpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGls
ZDEoKSwgflNwZWNDZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWws
IHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUg
dHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCi0gICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQm9vbGVhbiA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBp
bGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R3By
KTsKLSAgICAgICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBjZWxsOiBzbyB0cnVlIHR1cm5z
IGludG8gMSBhbmQgYWxsIGVsc2UgdHVybnMgaW50byAwLgorICAgICAgICAgICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgaXNCb29sZWFuID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGls
ZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0
R3ByKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVt
cCgpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlzQm9vbGVh
bi5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQ
UiwgcmVzdWx0R3ByKTsKLSAgICAgICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2pp
dC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaXNCb29sZWFuLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0
R3ByKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVt
cCgpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlzTnVtYmVy
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BSLCBmcHIs
IHNjcmF0Y2guZnByKCkpOworICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHRhZ0dQUiwgcGF5
bG9hZEdQUiwgZnByLCBzY3JhdGNoLmZwcigpKTsKIAotICAgICAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQz
MiwgcmVzdWx0R3ByLCBmcHIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHcHIpOworICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdwcik7CisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCByZXN1bHRHcHIs
IGZwcik7CisgICAgICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIp
OwogCi0gICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAg
ICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBp
c0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BS
LCByZXN1bHRHcHIpOworICAgICAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOwogCi0gICAg
ICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwotICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdwciwgbm9kZSk7CisgICAgICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdEdwciwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246CisgICAgCisgICAg
Y2FzZSBCb29sZWFuVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3By
KCkpOworICAgICAgICBtX2ppdC5hbmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICAKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybjsKICAgICB9CiB9CiAKQEAgLTI1MzgsNDkgKzI1ODgsNjQgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHRv
SW50MzIoZCkpLCBzY3JhdGNoUmVnKTsKICAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7CiAg
ICAgICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsKLSAgICB9IGVsc2UgaWYgKHZhbHVlVXNlLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAg
ICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgIGlmIChy
b3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNp
emUgPT0gMSk7Ci0gICAgICAgICAgICBjb21waWxlQ2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0LCBz
Y3JhdGNoUmVnKTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKLSAg
ICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOwotICAgIH0gZWxzZSBpZiAocm91bmRpbmcgPT0g
Q2xhbXBSb3VuZGluZykgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSBmbG9h
dFNjcmF0Y2godGhpcyk7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigpOwotICAg
ICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICBjb21waWxlQ2xhbXBEb3Vi
bGVUb0J5dGUobV9qaXQsIGdwciwgZnByLCBmbG9hdFNjcmF0Y2guZnByKCkpOwotICAgICAgICB2
YWx1ZS5hZG9wdChyZXN1bHQpOwotICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKICAgICB9IGVsc2Ug
ewotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2Up
OwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBGUFJSZWcgZnBy
ID0gdmFsdWVPcC5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0gbV9qaXQuYnJhbmNoRG91YmxlKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgZnByLCBmcHIpOwotICAgICAgICBtX2ppdC54b3JQ
dHIoZ3ByLCBncHIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmaXhlZCA9IG1faml0
Lmp1bXAoKTsKLSAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKLQotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5
cGVkQXJyYXkpCi0gICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJs
ZVRvSW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVk
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNh
dGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNh
dGVGYWlsZWQpOwotICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1Bh
dGhDYWxsKGZhaWxlZCwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKLQotICAgICAgICBmaXhl
ZC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7Ci0gICAgICAgIHZh
bHVlR1BSID0gZ3ByOworICAgICAgICBzd2l0Y2ggKHZhbHVlVXNlLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigp
OworICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9wLmdwcigpLCBzY3JhdGNoUmVnKTsKKyAg
ICAgICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICAgICAgICAgIGNvbXBpbGVDbGFt
cEludGVnZXJUb0J5dGUobV9qaXQsIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0
Y2hSZWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBS
b3VuZGluZykgeworICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAg
ICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVV
c2UpOworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IGZsb2F0U2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3By
ID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIGNvbXBpbGVDbGFtcERvdWJsZVRvQnl0
ZShtX2ppdCwgZ3ByLCBmcHIsIGZsb2F0U2NyYXRjaC5mcHIoKSk7CisgICAgICAgICAgICAgICAg
dmFsdWUuYWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigp
OworICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0gbV9qaXQuYnJhbmNoRG91YmxlKE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgZnByLCBmcHIpOworICAgICAgICAgICAgICAgIG1f
aml0LnhvclB0cihncHIsIGdwcik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZml4ZWQgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmYWlsZWQ7CisgICAgICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlw
ZWRBcnJheSkKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNh
dGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0
ZUZhaWxlZCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmYWls
ZWQgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvVWludDMyKGZwciwgZ3ByLCBNYWNyb0Fz
c2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGZhaWxlZCwgdGhp
cywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBmaXhlZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgIH0KKyAgICAKICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlR1BS
LCB2YWx1ZUdQUiAhPSBwcm9wZXJ0eSk7CiAgICAgQVNTRVJUKHZhbHVlR1BSICE9IGJhc2UpOwog
ICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKQEAgLTI3MjIsOCArMjc4Nyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mRm8KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoKCEhKG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpICYmICEhKG1fc3RhdGUuZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNDZWxsKSkKLSAgICAgICAgfHwgbm9k
ZS0+Y2hpbGQxKCktPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKSB7CisgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7CiAgICAgICAgIC8vIEl0IG1pZ2h0IG5v
dCBiZSBhIGNlbGwuIFNwZWN1bGF0ZSBsZXNzIGFnZ3Jlc3NpdmVseS4KICAgICAgICAgLy8gT3I6
IGl0IG1pZ2h0IG9ubHkgYmUgdXNlZCBvbmNlIChpLmUuIGJ5IHVzKSwgc28gd2UgZ2V0IHplcm8g
YmVuZWZpdAogICAgICAgICAvLyBmcm9tIHNwZWN1bGF0aW5nIGFueSBtb3JlIGFnZ3Jlc3NpdmVs
eSB0aGFuIHdlIGFic29sdXRlbHkgbmVlZCB0by4KQEAgLTI5NjEsOSArMzAyNSwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyhOCiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBZGQoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlV
c2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIGlmIChpc051bWJlckNv
bnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1t
MSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
KyAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKIApAQCAtMjk3OSw3ICszMDQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFkZChOb2RlKiBubwogICAgICAgICAgICAgICAgIAogICAgICAgICBpZiAoaXNOdW1iZXJDb25z
dGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgaW50MzJf
dCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50
ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewpAQCAtMzAyMSw4ICszMDg2LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICBpbnRlZ2VyUmVz
dWx0KGdwclJlc3VsdCwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgICAgIAot
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIAorICAgIGNh
c2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSwgb3AyKTsKQEAgLTMwMzQsMjIgKzMwOTksMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFkZChOb2RlKiBubwogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2Rl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmIChub2RlLT5vcCgpID09IFZhbHVl
QWRkKSB7CisgICAgICAgIAorICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICBSRUxFQVNF
X0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKICAgICAgICAgY29tcGlsZVZhbHVlQWRk
KG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIC8vIFdlIGRvbid0IGhh
bmRsZSB0aGlzIHlldC4gOi0oCi0gICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9
CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2RlKiBub2RlKQog
ewotICAgIGlmIChtX2ppdC5ncmFwaCgpLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkp
IHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJV
c2U6IHsKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25z
dGFudEFzSW50MzIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3Qg
aW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICBpZiAobm9k
ZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewpAQCAtMzA2OSw3
ICszMTM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZk51
bWJlckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAg
aW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAg
ICAgICAgICAgIApAQCAtMzA5NywyMCArMzE2NiwyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJpdGhTdWIoTm9kCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgRlBS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICBGUFJSZWcgcmVn
MSA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAgICBtX2ppdC5z
dWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEg
PSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBt
X2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKIAotICAgIGRvdWJsZVJl
c3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZw
cigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKE5v
ZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkubmVnYXRlU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlKSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogCkBAIC0zMTI4LDE3ICszMjA2LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcml0aE5lZ2F0ZSgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEZQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBtX2ppdC5uZWdhdGVEb3VibGUob3AxLmZwcigp
LCByZXN1bHQuZnByKCkpOwotCi0gICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7
CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubmVnYXRlRG91YmxlKG9wMS5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kZSogbm9k
ZSkKIHsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIElu
dDMyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0z
MTY5LDE3ICszMjU2LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChO
b2QKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKLSAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQot
ICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwotICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigp
OwogICAgICAgICAKLSAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigp
KTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEsIG9wMik7CisgICAgICAgIAorICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5m
cHIoKTsKKyAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAgICAgIAorICAgICAg
ICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgCisg
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47
CisgICAgfQogICAgICAgICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQogfQogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKQEAg
LTMyODksMjUgKzMzODQsMzMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJB
cml0aAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kZSogbm9kZSkK
IHsKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICYmIG5v
ZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNl
S2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBjb21waWxlU29mdE1vZHVs
byhub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBjYXNlIE51bWJlclVz
ZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKICAgICAgICAgCi0gICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKLSAgICBG
UFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOworICAgICAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZw
cigpOworICAgICAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOwogICAgICAgICAKLSAgICBm
bHVzaFJlZ2lzdGVycygpOworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAKLSAg
ICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotCi0gICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdP
cGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOworICAgICAgICBGUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihmbW9kQXNE
RkdPcGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOwogICAgICAgICAKLSAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgZG91YmxlUmVzdWx0
KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBp
cyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCkBAIC0zMzE2LDMzICszNDE5LDMzIEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSogbm9kZSwKICAgICBpZiAoY29tcGls
ZVBlZXBIb2xlQnJhbmNoKG5vZGUsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uLCBvcGVyYXRp
b24pKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkg
eworICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7CiAgICAgICAgIGNv
bXBpbGVJbnRlZ2VyQ29tcGFyZShub2RlLCBjb25kaXRpb24pOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisKKyAgICBpZiAo
bm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpIHsKICAgICAgICAgY29tcGlsZURvdWJs
ZUNvbXBhcmUobm9kZSwgZG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICAKICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBub2RlLT5jaGls
ZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmlzQmlu
YXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7CiAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBl
ZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVP
YmplY3QoKSkgeworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChP
YmplY3RVc2UpKSB7CiAgICAgICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQy
KCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdFVzZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5k
KCkgPT0gT2JqZWN0T3JPdGhlclVzZSkgewogICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2Jq
ZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNo
aWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNl
S2luZCgpID09IE9iamVjdFVzZSkgewogICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0
T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTM0MzAsNyArMzUzMyw4IEBAIGJvb2wg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKIAogYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVN0cmljdEVxKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIElu
dDMyVXNlOiB7CiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBl
ZXBIb2xlQnJhbmNoKCk7CiAgICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9N
QVgpIHsKICAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxv
Y2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOwpAQCAtMzQ0NCw4ICszNTQ4LDgg
QEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21w
aWxlSW50ZWdlckNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewor
ICAgICAgICAKKyAgICBjYXNlIE51bWJlclVzZTogewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJ
bmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNo
SW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICBOb2RlKiBicmFuY2hOb2Rl
ID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2Nr
KTsKQEAgLTM0NTksMTAgKzM1NjMsMTIgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0
cmljdEVxKE5vZAogICAgICAgICBjb21waWxlRG91YmxlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlRXF1YWwpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAot
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+
Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAKKyAgICBjYXNlIFN0
cmluZ1VzZTogewogICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsK
LSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUt
PmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBPYmplY3RVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2Nr
ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9j
ayAhPSBVSU5UX01BWCkgewogICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0Lmdy
YXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CkBAIC0zNDc2
LDggKzM1ODIsMTUgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAog
ICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7
CisgICAgICAgIAorICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICByZXR1cm4gbm9uU3Bl
Y3VsYXRpdmVTdHJpY3RFcShub2RlKTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCkBAIC0zODE1LDYgKzM5MjgsMjQxIEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXIKICAgICByZXR1cm4gdGVtcG9yYXJ5Lmdw
cigpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVJbnQzMihFZGdlIGVkZ2Up
Cit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjSW50MzIpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgKFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKHRoaXMsIGVkZ2UpKS5n
cHIoKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTnVtYmVyKEVkZ2UgZWRn
ZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNOdW1iZXIpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgb3BlcmFuZC5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBl
ZGdlLCBTcGVjTnVtYmVyLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIG9wZXJhbmQuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OworICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisjZWxzZQorICAgIEpTVmFsdWVPcGVyYW5k
IG9wMSh0aGlzLCBlZGdlKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wZXJhbmQudGFnR1BSKCksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNW
YWx1ZVJlZ3Mob3BlcmFuZC50YWdHUFIoKSwgb3AxLm9wZXJhbmQoKSksIGVkZ2UsIFNwZWNOdW1i
ZXIsCisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IG9wZXJhbmQudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Cisg
ICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyNlbmRpZgorfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlw
ZUNoZWNrKGVkZ2UsIFNwZWNSZWFsTnVtYmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBGUFJSZWcg
ZnByID0gb3BlcmFuZC5mcHIoKTsKKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoKSwgZWRnZSwgU3BlY1JlYWxOdW1iZXIsCisgICAgICAgIG1faml0LmJyYW5jaERvdWJs
ZSgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVk
LCBmcHIsIGZwcikpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVCb29sZWFu
KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNCb29sZWFu
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIChTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCh0
aGlzLCBlZGdlKSkuZ3ByKCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNl
bGwoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgKFNwZWN1bGF0ZUNlbGxPcGVyYW5kKHRoaXMs
IGVkZ2UpKS5ncHIoKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0
KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3Qp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFu
ZCh0aGlzLCBlZGdlKTsKKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
b3BlcmFuZC5ncHIoKSksIGVkZ2UsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcGVyYW5kLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhlZGdlLCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgZ3By
ID0gb3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQu
YnJhbmNoVGVzdDY0KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBKU1Zh
bHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBt
X2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZ3ByLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIG5vdENlbGwubGluaygmbV9qaXQp
OworICAgIGlmIChuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsK
KyAgICAgICAgbV9qaXQubW92ZShncHIsIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5hbmQ2NChN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCB0ZW1wR1BSKTsK
KyAgICAgICAgCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGdw
ciksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNo
NjQoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkp
OworICAgIH0KKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyNlbHNlCisgICAgR1BSUmVnIHRhZ0dQ
UiA9IG9wZXJhbmQudGFnR1BSKCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcGVyYW5kLnBh
eWxvYWRHUFIoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0KKyAgICAgICAg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpT
VmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXlsb2FkR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIG5vdENlbGwubGlu
aygmbV9qaXQpOworICAgIGlmIChuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNP
dGhlcikpIHsKKyAgICAgICAgbV9qaXQubW92ZSh0YWdHUFIsIHRlbXBHUFIpOworICAgICAgICBt
X2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcEdQUik7CisgICAgICAgIAorICAgICAgICB0
eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBy
aWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51
bGxUYWcpKSk7CisgICAgfQorICAgIGRvbmUubGluaygmbV9qaXQpOworI2VuZGlmCit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UpCit7CisgICAgaWYg
KCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CisgICAgREZH
X1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCBT
cGVjU3RyaW5nLCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3BlcmFuZC5n
cHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU5vdENlbGwoRWRn
ZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgflNwZWNDZWxsKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRn
ZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHR5
cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsIH5TcGVj
Q2VsbCwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAorICAgICAgICAgICAgSklUQ29tcGls
ZXI6Olplcm8sIG9wZXJhbmQuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vs
c2UKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQudGFnR1BSKCks
IG9wZXJhbmQucGF5bG9hZEdQUigpKSwgZWRnZSwgflNwZWNDZWxsLAorICAgICAgICBtX2ppdC5i
cmFuY2gzMigKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwgb3BlcmFuZC50YWdHUFIo
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisjZW5kaWYKK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT3RoZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY090aGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9
IHRlbXAuZ3ByKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2ppdC5tb3ZlKG9wZXJhbmQu
Z3ByKCksIHRlbXBHUFIpOworICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHRlbXBHUFIpOworICAgIHR5cGVDaGVjaygKKyAgICAg
ICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsIFNwZWNPdGhlciwKKyAgICAgICAg
bV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRl
bXBHUFIsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVs
bCkpKTsKKyNlbHNlCisgICAgbV9qaXQubW92ZShvcGVyYW5kLnRhZ0dQUigpLCB0ZW1wR1BSKTsK
KyAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcEdQUik7CisgICAgdHlwZUNoZWNr
KAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLnRhZ0dQUigpLCBvcGVyYW5kLnBheWxvYWRH
UFIoKSksIGVkZ2UsIFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykp
KTsKKyNlbmRpZiAgICAKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKEVkZ2Ug
ZWRnZSkKK3sKKyAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgY2FzZSBVbnR5cGVk
VXNlOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAgIEFT
U0VSVCghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0ludDMyKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIEFTU0VSVCghbmVlZHNUeXBlQ2hlY2so
ZWRnZSwgU3BlY051bWJlcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duQ2VsbFVz
ZToKKyAgICAgICAgQVNTRVJUKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBzcGVjdWxhdGVJbnQzMihl
ZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgICAgICBz
cGVjdWxhdGVSZWFsTnVtYmVyKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE51bWJl
clVzZToKKyAgICAgICAgc3BlY3VsYXRlTnVtYmVyKGVkZ2UpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oZWRnZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNl
OgorICAgICAgICBzcGVjdWxhdGVPYmplY3RPck90aGVyKGVkZ2UpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGVkZ2UpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE5vdENlbGxVc2U6CisgICAgICAgIHNwZWN1bGF0ZU5vdENl
bGwoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAgIHNw
ZWN1bGF0ZU90aGVyKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNDMyNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMSwxMyArMTIxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0K
ICAgICAKLSAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZSosIERhdGFGb3JtYXQmIHJldHVybkZv
cm1hdCk7CisgICAgR1BSUmVnIGZpbGxJbnRlZ2VyKEVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZv
cm1hdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBHUFJSZWcgZmlsbEpTVmFsdWUoTm9kZSop
OworICAgIEdQUlJlZyBmaWxsSlNWYWx1ZShFZGdlKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0gICAgYm9vbCBmaWxsSlNWYWx1ZShOb2RlKiwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7
CisgICAgYm9vbCBmaWxsSlNWYWx1ZShFZGdlLCBHUFJSZWcmLCBHUFJSZWcmLCBGUFJSZWcmKTsK
ICNlbmRpZgotICAgIEdQUlJlZyBmaWxsU3RvcmFnZShOb2RlKik7CisgICAgR1BSUmVnIGZpbGxT
dG9yYWdlKEVkZ2UpOwogCiAgICAgLy8gbG9jayBhbmQgdW5sb2NrIEdQUiAmIEZQUiByZWdpc3Rl
cnMuCiAgICAgdm9pZCBsb2NrKEdQUlJlZyByZWcpCkBAIC0yOTUsMTEgKzI5NSwxMSBAQCBwdWJs
aWM6CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIHNwZWN1bGF0aXZlIG9wZXJhbmQgdHlwZXMsIGJl
bG93LCB0byBmaWxsIG9wZXJhbmQgdG8KICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywgaW1wbGlj
aXRseSBnZW5lcmF0aW5nIHNwZWN1bGF0aW9uIGNoZWNrcyBhcyBuZWVkZWQuCi0gICAgR1BSUmVn
IGZpbGxTcGVjdWxhdGVJbnQoTm9kZSosIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5vZGUq
KTsKLSAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShOb2RlKiwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQ2VsbChOb2RlKiwgU3BlY3VsYXRpb25E
aXJlY3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQm9vbGVhbihOb2RlKiwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24pOworICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KEVkZ2UsIERhdGFG
b3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEdQUlJlZyBm
aWxsU3BlY3VsYXRlSW50U3RyaWN0KEVkZ2UpOworICAgIEZQUlJlZyBmaWxsU3BlY3VsYXRlRG91
YmxlKEVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0
ZUNlbGwoRWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEdQUlJlZyBmaWxsU3BlY3Vs
YXRlQm9vbGVhbihFZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgR2VuZXJhdGVkT3Bl
cmFuZFR5cGUgY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2RlKik7CiAKICAgICB2b2lk
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+KTsKQEAg
LTU0MCwxMiArNTQwLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0YW50KE5v
ZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNGdW5jdGlvbkNvbnN0YW50KG5vZGUp
OyB9CiAgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVy
biBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpOyB9CiAgICAgZG91Ymxl
IHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgp
LnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsgfQotICAgIGludDMyX3QgdmFsdWVPZk51bWJl
ckNvbnN0YW50QXNJbnQzMihOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
bm9kZSkpOwotICAgIH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHZvaWQqIGFkZHJlc3NP
ZkRvdWJsZUNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmFkZHJlc3NPZkRvdWJs
ZUNvbnN0YW50KG5vZGUpOyB9CiAjZW5kaWYKQEAgLTIwMjMsOSArMjAxNyw5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
T2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRD
aGlsZCk7CiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoTm9kZSopOwotICAgIHZvaWQgY29tcGls
ZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KEVkZ2UgdmFsdWUsIGJvb2wgbmVlZFNwZWN1bGF0aW9u
Q2hlY2spOworICAgIHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KEVkZ2UgdmFs
dWUpOwogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSopOwotICAgIHZvaWQgZW1pdE9i
amVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRl
eCBub3RUYWtlbiwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjayk7CisgICAgdm9pZCBlbWl0T2Jq
ZWN0T3JPdGhlckJyYW5jaChFZGdlIHZhbHVlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4
IG5vdFRha2VuKTsKICAgICB2b2lkIGVtaXRCcmFuY2goTm9kZSopOwogICAgIAogICAgIHZvaWQg
Y29tcGlsZUludGVnZXJDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENv
bmRpdGlvbik7CkBAIC0yMTc4LDcgKzIxNzIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3J3YXJk
U3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNv
dmVyeSgpKTsKICAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1Zh
bHVlU291cmNlLCBOb2RlKiwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1Rv
RmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgPSBWYWx1ZVJlY292ZXJ5KCkpOwogICAgIHZvaWQg
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICB2b2lk
IHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICB2b2lk
IHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24pOworICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwg
SlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29u
c3QgU3BlY3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAvLyBD
YWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2ls
bCBmYWlsLgogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQs
IEpTVmFsdWVSZWdzLCBOb2RlKik7CiAgICAgdm9pZCB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihFeGl0S2luZCwgSlNWYWx1ZVJlZ3MsIEVkZ2UpOwpAQCAtMjE4OCw2ICsyMTg0LDI0IEBA
IHB1YmxpYzoKICAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBmb3J3YXJkU3BlY3VsYXRp
b25XYXRjaHBvaW50KEV4aXRLaW5kID0gVW5jb3VudGFibGVXYXRjaHBvaW50KTsKICAgICBKdW1w
UmVwbGFjZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAKKyAgICAvLyBIZWxwZXJzIGZvciBwZXJmb3JtaW5n
IHR5cGUgY2hlY2tzIG9uIGFuIGVkZ2Ugc3RvcmVkIGluIHRoZSBnaXZlbiByZWdpc3RlcnMuCisg
ICAgYm9vbCBuZWVkc1R5cGVDaGVjayhFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFz
c2VkVGhyb3VnaCkgeyByZXR1cm4gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBl
c1Bhc3NlZFRocm91Z2g7IH0KKyAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJj
ZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOworICAgIHZvaWQgZm9yd2FyZFR5cGVDaGVjayhKU1Zh
bHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRo
cm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmKTsKKyAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKworICAgIHZvaWQgc3BlY3VsYXRl
SW50MzIoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoRWRnZSk7CisgICAgdm9pZCBz
cGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihFZGdl
KTsKKyAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVPYmpl
Y3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UpOworICAgIHZv
aWQgc3BlY3VsYXRlU3RyaW5nKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTm90Q2VsbChFZGdl
KTsKKyAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlKEVk
Z2UpOworICAgIAogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVz
Y3JpcHRvcihBcnJheU1vZGUpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1bXBTbG93
Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBBcnJh
eU1vZGUsIEluZGV4aW5nVHlwZSwgYm9vbCBpbnZlcnQpOwpAQCAtMjE5Nyw3ICsyMjExLDcgQEAg
cHVibGljOgogICAgIHZvaWQgYXJyYXlpZnkoTm9kZSopOwogICAgIAogICAgIHRlbXBsYXRlPGJv
b2wgc3RyaWN0PgotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoTm9kZSosIERh
dGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEdQUlJl
ZyBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoRWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgCiAgICAgLy8gSXQgaXMgcG9zc2libGUsIGR1
cmluZyBzcGVjdWxhdGl2ZSBnZW5lcmF0aW9uLCB0byByZWFjaCBhIHNpdHVhdGlvbiBpbiB3aGlj
aCB3ZQogICAgIC8vIGNhbiBzdGF0aWNhbGx5IGRldGVybWluZSBhIHNwZWN1bGF0aW9uIHdpbGwg
ZmFpbCAoZm9yIGV4YW1wbGUsIHdoZW4gdHdvIG5vZGVzCkBAIC0yMjQ3LDYgKzIyNjEsOSBAQCBw
dWJsaWM6CiAgICAgLy8gVGhlIGN1cnJlbnQgbm9kZSBiZWluZyBnZW5lcmF0ZWQuCiAgICAgQmxv
Y2tJbmRleCBtX2Jsb2NrOwogICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgIGJvb2wgbV9jYW5FeGl0OworI2VuZGlmCiAgICAgdW5zaWduZWQgbV9pbmRl
eEluQmxvY2s7CiAgICAgLy8gVmlydHVhbCBhbmQgcGh5c2ljYWwgcmVnaXN0ZXIgbWFwcy4KICAg
ICBWZWN0b3I8R2VuZXJhdGlvbkluZm8sIDMyPiBtX2dlbmVyYXRpb25JbmZvOwpAQCAtMjMwNSwx
NyArMjMyMiwxNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEludGVnZXJPcGVyYW5kIHsKIHB1YmxpYzoK
LSAgICBleHBsaWNpdCBJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVz
ZSkKKyAgICBleHBsaWNpdCBJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdl
IGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVj
dWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2Rl
KCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52
YWxpZEdQUlJlZykKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9mb3JtYXQoRGF0YUZvcm1h
dE5vbmUpCiAjZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFT
U0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmls
bGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKTsKKyAgICAgICAgaWYgKGpp
dC0+aXNGaWxsZWQoZWRnZS5ub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBA
IC0yMzI1LDkgKzIzNDIsMTQgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3By
T3JJbnZhbGlkKTsKICAgICB9CiAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CisgICAgCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUo
KTsKICAgICB9CiAKICAgICBEYXRhRm9ybWF0IGZvcm1hdCgpCkBAIC0yMzQwLDI3ICsyMzYyLDI3
IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9y
SW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBt
X2ppdC0+ZmlsbEludGVnZXIobm9kZSgpLCBtX2Zvcm1hdCk7CisgICAgICAgICAgICBtX2dwck9y
SW52YWxpZCA9IG1faml0LT5maWxsSW50ZWdlcihtX2VkZ2UsIG1fZm9ybWF0KTsKICAgICAgICAg
cmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAg
ewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgp
KTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5v
ZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7
CiAgICAgRGF0YUZvcm1hdCBtX2Zvcm1hdDsKIH07CiAKIGNsYXNzIEpTVmFsdWVPcGVyYW5kIHsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBFZGdlIHVzZSkKKyAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCog
aml0LCBFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09w
ZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2Rl
KHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKQEAgLTIzNjgsMTQgKzIzOTAsMTQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBE
b3VibGVVc2UpOworICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24gfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICAgICAgbV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAg
ICAgIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAg
aWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9k
ZSgpKSkKICAgICAgICAgICAgIGZpbGwoKTsKICNlbmRpZgogICAgIH0KQEAgLTIzOTYsMTcgKzI0
MTgsMjIgQEAgcHVibGljOgogICAgICAgICB9CiAjZW5kaWYKICAgICB9CisgICAgCisgICAgRWRn
ZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAg
ICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAg
ICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IElu
dmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSlNW
YWx1ZShub2RlKCkpOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpT
VmFsdWUobV9lZGdlKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAg
ICBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncygpCkBAIC0yNDE5LDcgKzI0NDYsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmaWxsKCkKICAgICB7CiAgICAgICAgIGlmIChtX3JlZ2lzdGVyLnBhaXIudGFn
R1BSID09IEludmFsaWRHUFJSZWcgJiYgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIgPT0gSW52
YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1faXNEb3VibGUgPSAhbV9qaXQtPmZpbGxKU1ZhbHVl
KG5vZGUoKSwgbV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRH
UFIsIG1fcmVnaXN0ZXIuZnByKTsKKyAgICAgICAgICAgIG1faXNEb3VibGUgPSAhbV9qaXQtPmZp
bGxKU1ZhbHVlKG1fZWRnZSwgbV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWly
LnBheWxvYWRHUFIsIG1fcmVnaXN0ZXIuZnByKTsKICAgICB9CiAKICAgICBHUFJSZWcgdGFnR1BS
KCkKQEAgLTI0NTEsMTIgKzI0NzgsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCB1c2UoKQogICAg
IHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUo
KSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBO
b2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBH
UFJSZWcgbV9ncHJPckludmFsaWQ7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMjQ3Mywx
NCArMjUwMCwxNCBAQCBwcml2YXRlOgogCiBjbGFzcyBTdG9yYWdlT3BlcmFuZCB7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1
c2UpCisgICAgZXhwbGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRn
ZSBlZGdlKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUo
KSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZh
bGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJU
KHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bV9ub2RlKSkKKyAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwor
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAg
ICAgfQogICAgIApAQCAtMjQ5MCwyNiArMjUxNywzMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0
LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KICAgICAKKyAgICBFZGdlIGVkZ2UoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CisgICAgCiAgICAgTm9k
ZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICBy
ZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAgICAgCiAgICAgR1BSUmVnIGdwcigpCiAgICAg
ewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAg
ICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKG5vZGUoKSk7CisgICAgICAg
ICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3RvcmFnZShlZGdlKCkpOwogICAgICAg
ICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAg
ICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2Rl
KCkpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0Owot
ICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPcklu
dmFsaWQ7CiB9OwogCkBAIC0yNjQxLDkgKzI2NzMsOSBAQCBwcml2YXRlOgogCiBjbGFzcyBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgZXhwbGljaXQgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uLCBPcGVyYW5k
U3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAg
ICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAs
IG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAj
aWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQpAQCAtMjY1
MSw4ICsyNjgzLDggQEAgcHVibGljOgogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2lu
ZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisg
ICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51
c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25JbnQzMlVzZSkp
OworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7
CiAgICAgfQogCkBAIC0yNjYxLDEwICsyNjkzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2Nr
KG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgp
Lm5vZGUoKTsKICAgICB9CiAKICAgICBEYXRhRm9ybWF0IGZvcm1hdCgpCkBAIC0yNjc3LDE4ICsy
NzE0LDE4IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmICht
X2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFs
aWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludChub2RlKCksIG1fZm9ybWF0LCBtX2RpcmVjdGlv
bik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50
KGVkZ2UoKSwgbV9mb3JtYXQsIG1fZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJ
bnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2pp
dC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHBy
aXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAg
ICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgRGF0YUZvcm1h
dCBtX2Zvcm1hdDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKQEAgLTI2
OTYsMTQgKzI3MzMsMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFu
ZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAg
ICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAg
LCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5k
KCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVz
ZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7
CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsK
ICAgICB9CiAKQEAgLTI3MTIsNDEgKzI3NDksNDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
bV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2so
bV9ncHJPckludmFsaWQpOwogICAgIH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCku
bm9kZSgpOwogICAgIH0KIAogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1f
Z3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxp
ZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50U3RyaWN0KG5vZGUoKSk7CisgICAgICAgICAgICBt
X2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50U3RyaWN0KGVkZ2UoKSk7CiAg
ICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2Uo
KQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNl
KG5vZGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsK
LSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJ
bnZhbGlkOwogfTsKIAogY2xhc3MgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB7CiBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgU3BlY3VsYXRlRG91YmxlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBF
ZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxh
dGlvbikKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1bGF0aXZlSklU
KiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dh
cmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3Bl
cmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUo
dXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2Zwck9ySW52
YWxpZChJbnZhbGlkRlBSUmVnKQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgp
ID09IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAg
ICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VL
aW5kKCkgPT0gTnVtYmVyVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duTnVtYmVyVXNlIHx8
IGVkZ2UudXNlS2luZCgpID09IFJlYWxOdW1iZXJVc2UpKTsKKyAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGZwcigpOwogICAgIH0KIApAQCAtMjc1NSw0MiAr
Mjc5Nyw0NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2Zwck9ySW52YWxpZCAhPSBJbnZh
bGlkRlBSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2Zwck9ySW52YWxpZCk7CiAgICAg
fQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9l
ZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAg
RlBSUmVnIGZwcigpCiAgICAgewogICAgICAgICBpZiAobV9mcHJPckludmFsaWQgPT0gSW52YWxp
ZEZQUlJlZykKLSAgICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxh
dGVEb3VibGUobm9kZSgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2Zwck9ySW52YWxp
ZCA9IG1faml0LT5maWxsU3BlY3VsYXRlRG91YmxlKGVkZ2UoKSwgbV9kaXJlY3Rpb24pOwogICAg
ICAgICByZXR1cm4gbV9mcHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkK
ICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShu
b2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0g
ICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEZQUlJlZyBtX2Zwck9ySW52
YWxpZDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CiAKIGNsYXNz
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVD
ZWxsT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICBleHBsaWNpdCBTcGVj
dWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVj
dWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAg
OiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9l
ZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICAg
ICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQp
OwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBp
ZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IENlbGxVc2UgfHwgZWRnZS51
c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IE9iamVjdFVzZSB8
fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxs
ZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjc5OSw0MiArMjg0
Niw0NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlk
R1BSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQor
ICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdl
OworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAgR1BS
UmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQ
UlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVD
ZWxsKG5vZGUoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBt
X2ppdC0+ZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJl
dHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsK
LSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7
CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2Rl
KiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwog
ICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKIAogY2xhc3MgU3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1
bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAg
ICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBt
X2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAg
ICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2pp
dCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlKTsKKyAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAg
IH0KICAgICAKQEAgLTI4NDQsMzAgKzI4OTYsNDEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+
dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAgICAgCisgICAgRWRnZSBlZGdlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQorICAgIAogICAgIE5vZGUq
IG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0
dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogICAgIAogICAgIEdQUlJlZyBncHIoKQogICAgIHsK
ICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAg
ICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQm9vbGVhbihub2RlKCksIG1f
ZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVj
dWxhdGVCb29sZWFuKGVkZ2UoKSwgbV9kaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9ncHJP
ckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1f
aml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAog
cHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOwor
ICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CiAKKyNkZWZpbmUgREZHX1RZUEVfQ0hFQ0so
c291cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpIGRvIHsgXAorICAg
ICAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKChlZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCkpKSAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0eXBlQ2hlY2soKHNvdXJj
ZSksIChlZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCksIChqdW1wVG9GYWlsKSk7IFwKKyAgICB9
IHdoaWxlICgwKQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODksMTEgKzI4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBOb2RlKiBnZXRMb2NhbCA9IGluc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgRG9udFJl
ZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgdmFyaWFibGUtPnByZWRpY3Rpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEdldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBu
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldExvY2FsLCBjb2RlT3JpZ2luLCBPcElu
Zm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAx
LCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgZ2V0TG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShnZXRMb2NhbCwgQ2Vs
bFVzZSkpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID09IG5vZGUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0g
Z2V0TG9jYWw7CkBAIC0zMTcsNyArMzE3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAvLyB0byBleGl0LgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZSogY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICBFZGdlIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBTZXRMb2NhbCwgY29kZU9yaWdpbiwKQEAgLTMyNyw3ICszMjcsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24g
cmF0aGVyIHRoYW4gcmVleGVjdXRpbmcgdGhlIGN1cnJlbnQgb25lLgogICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yd2FyZENo
ZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIGNoaWxk
MSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwgRWRnZShjaGlsZDEubm9k
ZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZH
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVXNlS2luZCB1c2VLaW5k
KQoreworICAgIHN3aXRjaCAodXNlS2luZCkgeworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAg
ICAgb3V0LnByaW50KCJVbnR5cGVkIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50MzJV
c2U6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBLbm93bkludDMyVXNlOgorICAgICAgICBvdXQucHJpbnQoIktub3duSW50MzIiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIlJl
YWxOdW1iZXIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAg
IG91dC5wcmludCgiTnVtYmVyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS25vd25OdW1i
ZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiS25vd25OdW1iZXIiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBvdXQucHJpbnQoIkNlbGwi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgIG91dC5w
cmludCgiS25vd25DZWxsIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT2JqZWN0VXNlOgor
ICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9i
amVjdE9yT3RoZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAgb3V0LnByaW50KCJTdHJp
bmciKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb3RDZWxsVXNlOgorICAgICAgICBvdXQu
cHJpbnQoIk5vdENlbGwiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPdGhlclVzZToKKyAg
ICAgICAgb3V0LnByaW50KCJPdGhlciIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdVc2VLaW5kX2gKKyNkZWZpbmUgREZHVXNlS2luZF9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIFVzZUtpbmQgeworICAgIFVu
dHlwZWRVc2UsCisgICAgSW50MzJVc2UsCisgICAgS25vd25JbnQzMlVzZSwKKyAgICBSZWFsTnVt
YmVyVXNlLAorICAgIE51bWJlclVzZSwKKyAgICBLbm93bk51bWJlclVzZSwKKyAgICBCb29sZWFu
VXNlLAorICAgIENlbGxVc2UsCisgICAgS25vd25DZWxsVXNlLAorICAgIE9iamVjdFVzZSwKKyAg
ICBPYmplY3RPck90aGVyVXNlLAorICAgIFN0cmluZ1VzZSwKKyAgICBOb3RDZWxsVXNlLAorICAg
IE90aGVyVXNlLAorICAgIExhc3RVc2VLaW5kIC8vIE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVu
dHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVu
dW0gZWxlbWVudHMuCit9OworCitBTFdBWVNfSU5MSU5FIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0
ZXJGb3IoVXNlS2luZCB1c2VLaW5kKQoreworICAgIHN3aXRjaCAodXNlS2luZCkgeworICAgIGNh
c2UgVW50eXBlZFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNUb3A7CisgICAgY2FzZSBJbnQzMlVz
ZToKKyAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAgIHJldHVybiBTcGVjSW50MzI7Cisg
ICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY1JlYWxOdW1iZXI7Cisg
ICAgY2FzZSBOdW1iZXJVc2U6CisgICAgY2FzZSBLbm93bk51bWJlclVzZToKKyAgICAgICAgcmV0
dXJuIFNwZWNOdW1iZXI7CisgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICByZXR1cm4gU3Bl
Y0Jvb2xlYW47CisgICAgY2FzZSBDZWxsVXNlOgorICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAg
ICAgICByZXR1cm4gU3BlY0NlbGw7CisgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAgIHJldHVy
biBTcGVjT2JqZWN0OworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgcmV0dXJu
IFNwZWNPYmplY3QgfCBTcGVjT3RoZXI7CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIHJl
dHVybiBTcGVjU3RyaW5nOworICAgIGNhc2UgTm90Q2VsbFVzZToKKyAgICAgICAgcmV0dXJuIH5T
cGVjQ2VsbDsKKyAgICBjYXNlIE90aGVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY090aGVyOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBTcGVjVG9wOworICAgIH0KK30KKworQUxXQVlTX0lOTElORSBib29sIGlzTnVt
ZXJpY2FsKFVzZUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIElu
dDMyVXNlOgorICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICBjYXNlIFJlYWxOdW1iZXJVc2U6
CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6REZHOjpVc2VLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1VzZUtpbmRfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTQzMjc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1NCw3ICszNTQsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgZGF0
YUxvZ0YoIkAldSAtPiAlc0AldSIsIG5vZGUtPmluZGV4KCksIHVzZUtpbmRUb1N0cmluZyhlZGdl
LnVzZUtpbmQoKSksIGVkZ2UtPmluZGV4KCkpOworICAgICAgICBkYXRhTG9nKG5vZGUsICIgLT4g
IiwgZWRnZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCkBAIC0zODksNyAr
Mzg5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAogICAg
ICAgICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGUqIGV4cGVjdGVkTm9k
ZSwgRWRnZSBpbmNvbWluZ0VkZ2UpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGluIEJs
b2NrICMldSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBAJXUiLCBub2RlLT5pbmRleCgpLCBibG9j
a0luZGV4LCBleHBlY3RlZE5vZGUtPmluZGV4KCksIGluY29taW5nRWRnZS0+aW5kZXgoKSk7Cisg
ICAgICAgIGRhdGFMb2cobm9kZSwgIiBpbiBCbG9jayAjIiwgYmxvY2tJbmRleCwgIiwgc2VhcmNo
aW5nIGZvciAiLCBleHBlY3RlZE5vZGUsICIgZnJvbSAiLCBpbmNvbWluZ0VkZ2UpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGR1bXBHcmFwaElmQXBwcm9wcmlhdGUoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189188</attachid>
            <date>2013-02-19 15:49:51 -0800</date>
            <delta_ts>2013-02-19 19:01:27 -0800</delta_ts>
            <desc>it runs simple things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>295927</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzMzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNiBA
QAorMjAxMy0wMi0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgbm90IGNoYW5nZSBpdHMgbWluZCBhYm91dCB3aGF0IHR5cGUgc3BlY3VsYXRp
b25zIGEgbm9kZSBkb2VzLCBieSBlbmNvZGluZyB0aGUgY2hlY2tzIGluIHRoZSBOb2RlVHlwZSwg
VXNlS2luZCwgYW5kIEFycmF5TW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBGaXh1cFBoYXNlIG5vdyBsb2NrcyBpbiB0aGUgc3BlY3Vs
YXRpb25zIHRoYXQgZWFjaCBub2RlIHdpbGwgZG8uIEl0IHRoZW4gcmVtZW1iZXJzCisgICAgICAg
IHRob3NlIHNwZWN1bGF0aW9ucyBmb3IgYWxsIHRpbWUuIEVhY2ggbm9kZSBlbnN1cmVzIHRoYXQg
aXQgZXhlY3V0ZXMgdGhlIHNwZWN1bGF0aW9ucworICAgICAgICBwcm9taXNlZCBieSBpdHMgZWRn
ZXMuIFRoaXMgaXMgdHJ1ZSBldmVuIGZvciBQaGFudG9tIG5vZGVzLgorICAgICAgICAKKyAgICAg
ICAgV29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKToKKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVkZ2Vz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRl
Lmg6CisgICAgICAgIChBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFN0YXRlOjpmaWx0ZXJFZGdlQnlVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmZpbHRlckJ5VHlwZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAqIGRmZy9E
RkdBZGphY2VuY3lMaXN0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6QWRq
YWNlbmN5TGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6Y2hpbGQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldENoaWxkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBZGphY2VuY3lMaXN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNl
bmN5TGlzdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6
c2V0Rmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6bnVtQ2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldE51bUNoaWxkcmVu
KToKKyAgICAgICAgKEFkamFjZW5jeUxpc3QpOgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3Iu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFsbG9jYXRvcjo6Y2VsbFNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6
UmVnaW9uOjpoZWFkZXJTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBbGxvY2F0b3I6OlJlZ2lv
bjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRv
cjo6UmVnaW9uOjpwYXlsb2FkU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpS
ZWdpb246OnBheWxvYWRCZWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpSZWdp
b246OnBheWxvYWRFbmQpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6UmVnaW9uOjpp
c0luVGhpc1JlZ2lvbik6CisgICAgICAgIChKU0M6OkRGRzo6OjpBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6fkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjpmcmVlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmZy
ZWVBbGwpOgorICAgICAgICAoSlNDOjpERkc6Ojo6cmVzZXQpOgorICAgICAgICAoSlNDOjpERkc6
Ojo6aW5kZXhPZik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0b3JPZik6CisgICAgICAg
IChKU0M6OkRGRzo6OjpidW1wQWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZnJlZUxp
c3RBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0ZVNsb3cpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KToKKyAgICAgICAgKEpTQzo6REZH
Ojo6OnN0YXJ0QnVtcGluZ0luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKiBk
ZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRMb2Nh
bFN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRSZXBs
YWNlbWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3Rh
bnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAgICAgICAq
IGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdFZGdlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpkdW1wKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZS5oOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OnNoaWZ0KToK
KyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OkZpeHVwUGhhc2U6OmZpeEludEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVw
UGhhc2U6OmZpeERvdWJsZUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6Omlu
amVjdEludDMyVG9Eb3VibGVOb2RlKToKKyAgICAgICAgKEZpeHVwUGhhc2UpOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OnRydW5jYXRlQ29uc3RhbnRUb0ludDMyKToKKyAgICAgICAg
KEpTQzo6REZHOjpGaXh1cFBoYXNlOjp0cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjphdHRlbXB0VG9NYWtlSW50ZWdlckFkZCk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OnJlZkNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGVy
ZWZDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OnBlcmZvcm1TdWJzdGl0dXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojppc1ByZWRpY3RlZE51bWVyaWNhbCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIpOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb0dldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpjb252ZXJ0VG9QdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Y2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDIpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YmluYXJ5
VXNlS2luZCk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc0Jp
bmFyeVVzZUtpbmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlQWxsb2NhdG9yLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBvaW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRUeXBlQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1Yik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVJbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZVJlYWxOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9i
amVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVj
dE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVT
dHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVOb3RD
ZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT3RoZXIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mTnVtYmVyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpuZWVkc1R5cGVDaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OkludGVnZXJPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChJbnRlZ2VyT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6Om5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6Oklu
dGVnZXJPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVPcGVyYW5kOjpK
U1ZhbHVlT3BlcmFuZCk6CisgICAgICAgIChKU1ZhbHVlT3BlcmFuZCk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6Z3ByKToK
KyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6ZmlsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9w
ZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFu
ZDo6ZWRnZSk6CisgICAgICAgIChTdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RvcmFnZU9wZXJhbmQ6Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5k
OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjp1c2UpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCk6CisgICAgICAgIChTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQ6OlNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCk6CisgICAgICAgIChTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQ6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQpOgorICAgICAgICAoU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6ZWRn
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6bm9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6ZnByKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kOjpTcGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAg
IChTcGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2Vs
bE9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5k
Ojpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6Z3ByKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6dXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6U3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOjplZGdlKToK
KyAgICAgICAgKFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQm9v
bGVhbk9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zmls
bEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVJbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50U3RyaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0
eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9i
amVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAg
ICAqIGRmZy9ERkdVc2VLaW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHVXNlS2luZC5oOiBBZGRlZC4K
KyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6dHlwZUZpbHRlckZvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6aXNOdW1lcmljYWwpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiBk
ZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjpyZXBvcnRW
YWxpZGF0aW9uQ29udGV4dCk6CisKIDIwMTMtMDItMTggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIGluIHIxNDMzNDguCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQzMjc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksOCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1
MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5jcHAgKi87IH07CiAJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2lu
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4
N0YyRjE2ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZE
MiAvKiBERkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMzRCMTQ5
MTZENDIwMTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdV
c2VLaW5kLmNwcCAqLzsgfTsKKwkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRC
MTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQjNBMUExNTNFNjhGMjAwM0VEMEZGIC8q
IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBE
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYz
QjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICov
OyB9OwpAQCAtMTAwMCw2ICsxMDAyLDggQEAKIAkJMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8q
IERGR1ZhcmlhYmxlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHVmFyaWFibGVFdmVudC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAv
KiBERkdDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERGR0NvZGVCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNTU2
RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RG
R1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM0QjE0ODE2RDQy
MDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdVc2VLaW5kLmg7IHBhdGggPSBkZmcvREZHVXNlS2luZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTgxNTNFNjhFRjAw
M0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNB
MjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzA3LDYgKzI3MTEsOCBAQAogCQkJCTBGQzA5N0EwMTQ2
QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKIAkJCQkwRkJFMEY2RjE2QzFEQjAxMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNzAxNkMxREIw
MTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjM0QjE0NzE2RDQy
MDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8sCisJCQkJMEYzNEIxNDgxNkQ0MjAwRTAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLywKIAkJCQkwRjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYg
LyogREZHVmFsaWRhdGUuY3BwICovLAogCQkJCTBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBE
RkdWYWxpZGF0ZS5oICovLAogCQkJCTBGMkJEQzNGMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYWx1
ZVJlY292ZXJ5T3ZlcnJpZGUuaCAqLywKQEAgLTMyNDcsNiArMzI1Myw3IEBACiAJCQkJODY4OTE2
QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ1MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTVDRDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5
dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzk1Myw2ICszOTYwLDcgQEAK
IAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2Zp
bGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2lu
U3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8q
IFByb2ZpbGVyT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQzMjc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNjEgQEAgQWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3Vs
dCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9vbGVhblJlc3VsdDsKIH0KIAotYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK2Jvb2wgQWJz
dHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobV9i
bG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgCiAgICAgbV9kaWRDbG9iYmVyID0g
ZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7
Ci0gICAgICAgIAogICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
QWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKQorewor
ICAgIHJldHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spKTsKK30K
Kwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMoTm9kZSogbm9kZSkKK3sKKyAgICBE
RkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBmaWx0ZXJFZGdlQnlVc2UpOwor
fQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdlcyh1bnNpZ25lZCBpbmRleEluQmxv
Y2spCit7CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0KGluZGV4SW5CbG9jaykpOworfQor
Cit2b2lkIEFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2UoRWRnZSBlZGdlKQoreworICAgIEFTU0VS
VCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkp
KSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5RWRnZXMoTm9kZSogbm9kZSkKK3sK
KyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCB2ZXJpZnlFZGdlKTsK
K30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleElu
QmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAg
IHZlcmlmeUVkZ2VzKG5vZGUpOworICAgIAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
IGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgUGhh
bnRvbUFyZ3VtZW50czogewogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJZGVudGl0eTogewogICAg
ICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTI2NSwxOSArMjk2LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNz
RGF0YS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lKSB7CiAgICAgICAgICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVzLm9wZXJhbmQodmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpKTsKICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKLSAgICAgICAgICAg
ICAgICBjYW5FeGl0IHw9IHRydWU7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7
Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCkBAIC0yODYsMzUgKzMxNCwxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQogICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1
ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICBpZiAobm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgfHwgbV9ncmFwaC5p
c0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkpIHsKLSAgICAgICAgICAgIG1fdmFy
aWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51
bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5s
b2NhbCgpKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24o
cHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgfSBlbHNl
IGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIAogICAgICAgICBtX3ZhcmlhYmxlcy5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTMyMiw3ICszMjUsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0
IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCiAgICAgICAgIEFTU0VS
VCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigp
KTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNjYsNyArMzY4LDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5v
ZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0zODEsMTYgKzM4MiwxNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAg
ICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50MzI6IHsKICAgICAgICAgSlNWYWx1
ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CkBAIC00MDQsNyArNDAz
LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDIz
LDE2ICs0MjEsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAgICAgICAgICAgc3BlY3VsYXRlQm9v
bGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2Rl
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcih+U3BlY0NlbGwpOwotICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKQEAg
LTQ0Nyw3ICs0MzUsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkp
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAg
IGVsc2UKQEAgLTQ1NSwxMCArNDQyLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQ2hl
Y2tOdW1iZXI6Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVt
YmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICBjYXNlIFZhbHVlQWRkOgog
ICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTQ2OSwzMCArNDUyLDI1IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3Jh
cGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUlu
dGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJp
bmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgogICAg
ICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSkKICAgICAgICAgICAgICAgICAmJiBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQogICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IFZhbHVlQWRkKSB7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVl
QWRkKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyB8IFNwZWNJ
bnQzMiB8IFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCBoYW5k
bGUgdGhpcyB5ZXQuIDotKAotICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAg
CkBAIC01MDUsMTUgKzQ4MywxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAotICAg
ICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9k
ZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmlu
YXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7CkBAIC01
MjQsMTUgKzUwNiwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkoCi0gICAgICAg
ICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxh
Z3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0lu
dDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0
aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFy
eShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aE11bDogewpAQCAtNTQ0LDIx
ICs1MzAsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAg
ICBub2RlLAotICAgICAgICAgICAgICAgICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25vcmVOZWdhdGl2
ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJp
bmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKQorICAgICAgICAgICAgICAgIHx8ICFu
b2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAgICAgICAgIHx8
IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkp
CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3Vi
bGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBpZiAoaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQotICAg
ICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkubV90eXBlKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFs
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJs
ZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aERpdjoK
QEAgLTU5NSwxNSArNTg0LDE4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAm
JiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyQmluYXJ5KG5vZGUsIHRydWUpOyAvLyBmb3JjaW5nIGNhbi1leGl0LCB3aGljaCBpcyBhIGJp
dCBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUuCisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5
VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVy
QmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcml0aEFiczogewpA
QCAtNjE0LDE1ICs2MDYsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1
bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlLCB0
cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7CkBAIC02MzMsNyArNjI4LDYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTY1NSwxOCArNjQ5LDE5
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgIGlm
IChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKLSAgICAgICAgICAg
IHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIGNh
c2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICBjYXNlIFVudHlw
ZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNl
OgogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmluZykgfCBTcGVjT3RoZXIpOwot
ICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChjaGls
ZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJV
bmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTc2NCwxNCArNzU5LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24oY2hpbGROb2RlLT5w
cmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihjaGls
ZE5vZGUtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUp
LmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsKKworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAg
ICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7CkBAIC04MjksNTkgKzgyNywx
MyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIAotICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFudCkgewotICAgICAgICAgICAgLy8g
V2UgY2FuIGV4aXQgaWYgd2UgaGF2ZW4ndCBmaXJlZCB0aGUgTWFzcXVlcmFkZXNBc1VuZGVmaW5k
IHdhdGNocG9pbnQgeWV0LgotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7Ci0gICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcjsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGVDaGVja2Vy
IGNoZWNrZXI7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQs
IHJpZ2h0KSkgewotICAgICAgICAgICAgZmlsdGVyID0gU3BlY0ludDMyOwotICAgICAgICAgICAg
Y2hlY2tlciA9IGlzSW50MzJTcGVjdWxhdGlvbjsKLSAgICAgICAgfSBlbHNlIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdCwgcmlnaHQpKSB7Ci0gICAgICAgICAgICBmaWx0ZXIg
PSBTcGVjTnVtYmVyOwotICAgICAgICAgICAgY2hlY2tlciA9IGlzTnVtYmVyU3BlY3VsYXRpb247
Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAg
ICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodC0+c2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICBp
ZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0
ZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkg
ewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICAgICAgZm9y
Tm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiByaWdodC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAg
ICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpOwotICAgICAg
ICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAKLSAgICAgICAgICAgIGZpbHRlciA9IFNwZWNU
b3A7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZmlsdGVyID0gU3BlY1RvcDsKLSAgICAgICAgICAgIGNoZWNr
ZXIgPSBpc0FueVNwZWN1bGF0aW9uOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCgKLSAgICAgICAgICAgICFjaGVja2VyKGZvck5vZGUobGVmdCkubV90eXBlKQotICAgICAg
ICAgICAgfHwgIWNoZWNrZXIoZm9yTm9kZShyaWdodCkubV90eXBlKSk7Ci0gICAgICAgIGZvck5v
ZGUobGVmdCkuZmlsdGVyKGZpbHRlcik7Ci0gICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihm
aWx0ZXIpOworICAgICAgICAvLyBUaGlzIGlzIG92ZXJseSBjb25zZXJ2YXRpdmUuIEJ1dCB0aGUg
b25seSB0aGluZyB0aGlzIHByZXZlbnRzIGlzIHN0b3JlIGVsaW1pbmF0aW9uLAorICAgICAgICAv
LyBhbmQgaG93IGxpa2VseSBpcyBpdCwgcmVhbGx5LCB0aGF0IHlvdSdsbCBoYXZlIHJlZHVuZGFu
dCBzdG9yZXMgYWNyb3NzIGEgY29tcGFyaXNvbgorICAgICAgICAvLyBvcGVyYXRpb24/IENvbXBh
cmlzb24gb3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IGF0IHRoZSBlbmQgb2YgYmFzaWMgYmxvY2tz
LCBzbworICAgICAgICAvLyB1bmxlc3Mgd2UgaGF2ZSBnbG9iYWwgc3RvcmUgZWxpbWluYXRpb24g
KHN1cGVyIHVubGlrZWx5IGdpdmVuIGhvdyB1bnByb2ZpdGFibGUgdGhhdAorICAgICAgICAvLyBv
cHRpbWl6YXRpb24gaXMgdG8gYmVnaW4gd2l0aCksIHlvdSBhcmVuJ3QgZ29pbmcgdG8gYmUgd2Fu
dGluZyB0byBzdG9yZSBlbGltaW5hdGUKKyAgICAgICAgLy8gYWNyb3NzIGFuIGVxdWFsaXR5IG9w
LgorICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgICAgICAKQEAgLTg5OCw0MyArODUwLDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKLSAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0
Tm9kZSwgcmlnaHROb2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5v
ZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlZnROb2Rl
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0
cmluZygpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KCkgJiYgcmlnaHROb2RlLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgewotICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobGVm
dE5vZGUpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAgIGZvck5vZGUocmlnaHROb2Rl
KS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKQEAgLTk1NCwxNSArODgwLDEyIEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KSkgewogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAt
OTcwLDcgKzg5Myw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTgyLDQ4ICs5MDQsMzggQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2Ug
QXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
PmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91Ymxl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKQEAgLTEwMzYsOSArOTQ4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OiB7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIEVkZ2UgY2hpbGQx
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkubW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CiAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKQEAgLTEwNDcsMTA0ICs5NTYsMjMgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkp
CiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMykuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQx
KS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihT
cGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVy
KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0g
ICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051
bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50
MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMp
LmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNw
ZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExNTIsMTYgKzk4
MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIAogICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
UmVhbE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjTnVt
YmVyKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTc0LDExICs5OTIsNiBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFJlZ0V4
cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAot
ICAgICAgICAgICAgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkKLSAgICAgICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xMjAzLDI0ICsxMDE2LDEzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1
dCB3ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291
cmNlIHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhl
IGJyYW5jaC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIo
U3BlY09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9k
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBtX2JyYW5j
aERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAg
Y2FzZSBUaHJvdzoKQEAgLTEyMzAsMjIgKzEwMzIsMTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKGNo
aWxkKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENvbnN0
LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAg
IHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEFic3Ry
YWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUoY2hpbGQpOworICAgICAgICBBYnN0cmFjdFZhbHVl
JiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAKICAgICAgICAgLy8gTkIu
IFRoZSBtb3JlIGNhbm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVlbjoK
QEAgLTEyNzUsMzkgKzEwNzQsMTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAgICAg
ICAgIGRlc3RpbmF0aW9uLnNldCh0eXBlKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgU3RyQ2F0
OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBOZXdBcnJheToKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgc3dp
dGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgQVNT
RVJUKCFub2RlLT5udW1DaGlsZHJlbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
b3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytv
cGVyYW5kSW5kZXgpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XSkuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5H
X1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVy
YW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxk
KCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTEzMjAsNyArMTA5NSw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKIAogICAgIGNhc2Ug
TmV3QXJyYXlXaXRoU2l6ZToKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNBcnJheSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0
cnVlOwogICAgICAgICBicmVhazsKQEAgLTEzMzIsNyArMTEwNiw2IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JO
b2RlKG5vZGUpOwogICAgICAgICAgICAgCkBAIC0xMzQ3LDMyICsxMTIwLDI2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpc090
aGVyU3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIHNvdXJj
ZS5maWx0ZXIoU3BlY090aGVyKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgICAgIGRlc3RpbmF0aW9u
LnNldChTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9u
KCkpKSB7Ci0gICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPYmplY3QpOworICAgICAgICBj
YXNlIE9iamVjdFVzZToKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKICAgICAgICAgICAgIGRlc3Rp
bmF0aW9uID0gc291cmNlOworICAgICAgICAgICAgZGVzdGluYXRpb24ubWVyZ2UoU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGNhc2UgQ3JlYXRlVGhpczogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBz
b3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwotICAgICAgICAKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oc291cmNlLm1fdHlwZSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgIHNvdXJjZS5maWx0ZXIoU3BlY0Z1bmN0aW9uKTsKLSAgICAgICAgZGVzdGluYXRp
b24uc2V0KFNwZWNGaW5hbE9iamVjdCk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNG
aW5hbE9iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xMzgxLDE5
ICsxMTQ4LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE5ld09iamVjdDoKLSAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG5vZGUtPnN0cnVjdHVyZSgp
KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CkBAIC0xNDA3LDEwICsxMTcxLDkg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQ2hl
Y2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBpZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAog
ICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkp
IHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5
cGUpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgIH0gZWxz
ZQorICAgICAgICBlbHNlCiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCkBAIC0xNDMwLDcgKzExOTMsNiBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVj
dHVyZXMgaWYgdGhlIGFyZ3VtZW50cyBvYmplY3QgaGFkIGEgZ2V0dGVyCiAgICAgICAgIC8vIGlu
c3RhbGxlZCBvbiB0aGUgbGVuZ3RoIHByb3BlcnR5LgogICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKQEAgLTE0NDQsNyArMTIwNiw2IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gV2Uga25vdyB0
aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2Ug
Y2FuIG9wdGltaXplCiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0
aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCiAgICAgICAgIC8vIEFy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTQ1Myw4ICsxMjE0LDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAvLyBUaGlzIHBvdGVudGlh
bGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBhY2Nlc3Np
bmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVjdWxhdGUgYWdhaW5zdCB0
aGlzLgogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgLy8gQnV0IHdlIGRvIHNwZWN1bGF0ZSB0aGF0IHRoZSBpbmRleCBpcyBhbiBp
bnRlZ2VyLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMgdW5rbm93bi4KICAgICAgICAgZm9yTm9k
ZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTQ2MiwyOSArMTIyMSwyNCBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBOZXdG
dW5jdGlvbjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAgICBjYXNlIE5ld0Z1
bmN0aW9uTm9DaGVjazoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiktPmZ1bmN0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRnVuY3Rpb24pOwogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBTZXRDYWxsZWU6CiAgICAgY2FzZSBTZXRNeVNjb3BlOgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICBjYXNlIEdldFNjb3BlOiAvLyBGSVhNRTogV2UgY291bGQgZ2V0IHJpZCBvZiB0aGVz
ZSBpZiB3ZSBrbm93IHRoYXQgdGhlIEpTRnVuY3Rpb24gaXMgYSBjb25zdGFudC4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMgogICAgIGNhc2UgR2V0TXlTY29w
ZToKICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNDZWxsT3RoZXIpOwogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgU2tpcFNjb3BlOiB7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
dmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFs
dWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKSB7CiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKQEAgLTE0OTUsMTggKzEyNDksMTQgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KIAogICAgIGNhc2Ug
R2V0U2NvcGVSZWdpc3RlcnM6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRTY29wZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKLSAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9k
ZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xNTE4LDgg
KzEyNjgsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24o
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0KICAgICAgICAgICAgIGlmIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1
cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2dsb2JhbERh
dGEsIHN0cnVjdHVyZSwKQEAgLTE1NTUsNyArMTMwMyw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gbW9yZSB0aG9yb3VnaGx5LiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAwCiAgICAgICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBlbGltaW5hdGUgdGhlc2UgZW50aXJlbHkgaWYgd2Uga25vdyB0aGUgZXhhY3Qg
dmFsdWUgdGhhdCBmbG93cyBpbnRvIHRoaXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDEKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTU2NCw2ICsxMzExLDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0
dXJlOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUg
dGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5n
IHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgogICAgICAgICAvLyBJZiB0aGlzIHN0
cnVjdHVyZSBjaGVjayBpcyBhdHRlbXB0aW5nIHRvIHByb3ZlIGtub3dsZWRnZSBhbHJlYWR5IGhl
bGQgaW4KICAgICAgICAgLy8gdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHNldCB0aGVuIHRo
ZSBjb25zdGFudCBmb2xkaW5nIHBoYXNlIHNob3VsZAogICAgICAgICAvLyB0dXJuIHRoaXMgaW50
byBhIHdhdGNocG9pbnQgaW5zdGVhZC4KQEAgLTE1NzEsOSArMTMxOSw4IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKHZhbHVlLm1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICB8fCB2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAg
ICAgICF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKLSAgICAg
ICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgaWYg
KCF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCisgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsK
ICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTU5
MSw3ICsxMzM4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAvLyBpbmZpbml0eSBvZiBzdHJ1Y3R1cmVzLgogICAgICAgICBBU1NFUlQodmFsdWUu
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChub2RlLT5z
dHJ1Y3R1cmUoKSkpKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVCh2YWx1ZS5pc0NsZWFyKCkg
fHwgaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSk7IC8vIFZhbHVlIGNvdWxkIGJlIGNs
ZWFyIGlmIHdlJ3ZlIHByb3ZlbiBtdXN0LWV4aXQgZHVlIHRvIGEgc3BlY3VsYXRpb24gc3RhdGlj
YWxseSBrbm93biB0byBiZSBiYWQuCiAgICAgICAgIHZhbHVlLmZpbHRlcihub2RlLT5zdHJ1Y3R1
cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwpAQCAtMTYwMCw3ICsxMzQ2LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgotICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5z
ZXQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwpAQCAtMTYx
MCwxNCArMTM1NSwxMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMg
dmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1
ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGllcywg
YnV0IHRoaXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9ucyAobGlrZSBHZXRCeVZhbCkgdGhhdCBh
bHdheXMgZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXMgdHJ5aW5nIHRvIGJlIGNsZXZl
ciBoZXJlLgpAQCAtMTYzMCw3ICsxMzcyLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQXJndW1l
bnRzKTsKQEAgLTE2NzksOSArMTQyMCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNvbnZlcnNpb24o
KSA9PSBBcnJheTo6Q29udmVydAogICAgICAgICAgICAgfHwgbm9kZS0+YXJyYXlNb2RlKCkuY29u
dmVyc2lvbigpID09IEFycmF5OjpSYWdlQ29udmVydCk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXJB
cnJheU1vZGVzKG5vZGUtPmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygp
KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CkBAIC0xNjk0LDM1ICsxNDMyLDIw
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkpCi0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgY2xvYmJlclN0cnVj
dHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CiAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7CiAgICAgICAgIGJyZWFrOyAK
ICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFp
c0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAg
IH0KICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewotICAgICAgICBib29sIGNhbkV4aXQg
PSBmYWxzZTsKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgp
KSB7Ci0gICAgICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgfQotICAgICAgICBjYW5FeGl0IHw9ICFpc0Nl
bGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpOwotICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGNhbkV4aXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAK
QEAgLTE3NjYsMTIgKzE0ODksMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTE3ODEsMzQgKzE1MDIsMjMgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBQdXRHbG9iYWxWYXI6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKLSAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
Y2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAg
ICAvLyBTYWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBD
aGVja0hhc0luc3RhbmNlCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBJ
bnN0YW5jZU9mOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBB
Z2Fpbiwgc2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUg
SW5zdGFuY2VPZgotICAgICAgICAvLyBGSVhNRTogVGhpcyBhcHBlYXJzIGJyb2tlbjogQ2hlY2tI
YXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRpb25hbCBjZWxsCi0gICAgICAgIC8v
IGNoZWNrLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDc5Ci0g
ICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpICYm
ICEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNDZWxsKSkKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKICAgICBjYXNlIEJyZWFrcG9pbnQ6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2FsbDoKQEAgLTE4MzYs
NyArMTU0Niw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICBjYXNlIElubGluZVN0YXJ0OgogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgQ291bnRFeGVjdXRp
b246Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CkBAIC0xODQ3LDYgKzE1NTYsMjEgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIHJldHVybiBtX2lzVmFs
aWQ7CiB9CiAKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5k
ZXhJbkJsb2NrKQoreworICAgIHJldHVybiBleGVjdXRlRWZmZWN0cyhpbmRleEluQmxvY2ssIG1f
YmxvY2stPmF0KGluZGV4SW5CbG9jaykpOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5h
dChpbmRleEluQmxvY2spOworICAgIGlmICghc3RhcnRFeGVjdXRpbmcobm9kZSkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKKyAgICByZXR1cm4g
ZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsKK30KKwogaW5saW5lIHZvaWQgQWJz
dHJhY3RTdGF0ZTo6Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIHVu
c2lnbmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvZGVPcmln
aW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDUyIEBAIHB1YmxpYzoK
ICAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBhc3QgdGhpcyBub2RlLiBOb3Rh
Ymx5LCBpdCB3aWxsIHJldHVybiB0cnVlCiAgICAgLy8gZm9yIGJsb2NrIHRlcm1pbmFscywgc28g
bG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4gb3IgdmFyaWFudHMKICAgICAv
LyBvZiBUaHJvdy4KLSAgICBib29sIGV4ZWN1dGUodW5zaWduZWQpOworICAgIC8vCisgICAgLy8g
VGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gZG9pbmc6CisgICAgLy8KKyAg
ICAvLyBpZiAoc3RhdGUuc3RhcnRFeGVjdXRpbmcoaW5kZXgpKSB7CisgICAgLy8gICAgIHN0YXRl
LmV4ZWN1dGVFZGdlcyhpbmRleCk7CisgICAgLy8gICAgIHJlc3VsdCA9IHN0YXRlLmV4ZWN1dGVF
ZmZlY3RzKGluZGV4KTsKKyAgICAvLyB9IGVsc2UKKyAgICAvLyAgICAgcmVzdWx0ID0gdHJ1ZTsK
KyAgICBib29sIGV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICAvLyBJ
bmRpY2F0ZSB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uIG9mIHRoZSBub2RlLiBJdCByZXNldHMgYW55
IHN0YXRlIGluIHRoZSBub2RlLAorICAgIC8vIHRoYXQgaXMgcHJvZ3Jlc3NpdmVseSBidWlsdCB1
cCBieSBleGVjdXRlRWRnZXMoKSBhbmQgZXhlY3V0ZUVmZmVjdHMoKS4gSW4KKyAgICAvLyBwYXJ0
aWN1bGFyLCB0aGlzIHJlc2V0cyBjYW5FeGl0KCksIHNvIGlmIHlvdSB3YW50IHRvICJrbm93IiBi
ZXR3ZWVuIGNhbGxzIG9mCisgICAgLy8gc3RhcnRFeGVjdXRpbmcoKSBhbmQgZXhlY3V0ZUVkZ2Vz
KCkvRWZmZWN0cygpIHdoZXRoZXIgdGhlIGxhc3QgcnVuIG9mIHRoZQorICAgIC8vIGFuYWx5c2lz
IGNvbmNsdWRlZCB0aGF0IHRoZSBub2RlIGNhbiBleGl0LCB5b3Ugc2hvdWxkIHByb2JhYmx5IHNl
dCB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24gYXNpZGUgcHJpb3IgdG8gY2FsbGluZyBzdGFydEV4
ZWN1dGluZygpLgorICAgIGJvb2wgc3RhcnRFeGVjdXRpbmcoTm9kZSopOworICAgIGJvb2wgc3Rh
cnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICAKKyAgICAvLyBBYnN0cmFj
dGx5IGV4ZWN1dGUgdGhlIGVkZ2VzIG9mIHRoZSBnaXZlbiBub2RlLiBUaGlzIHJ1bnMgZmlsdGVy
RWRnZUJ5VXNlKCkKKyAgICAvLyBvbiBhbGwgZWRnZXMgb2YgdGhlIG5vZGUuIFlvdSBjYW4gc2tp
cCB0aGlzIHN0ZXAsIGlmIHlvdSBoYXZlIGFscmVhZHkgdXNlZAorICAgIC8vIGZpbHRlckVkZ2VC
eVVzZSgpIChvciBzb21lIGVxdWl2YWxlbnQpIG9uIGVhY2ggZWRnZS4KKyAgICB2b2lkIGV4ZWN1
dGVFZGdlcyhOb2RlKik7CisgICAgdm9pZCBleGVjdXRlRWRnZXModW5zaWduZWQgaW5kZXhJbkJs
b2NrKTsKKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVyRWRnZUJ5VXNlKEVkZ2Ug
ZWRnZSkKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBzd2l0Y2ggKGVkZ2Uu
dXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAgICAgY2FzZSBL
bm93bk51bWJlclVzZToKKyAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgICAgICBB
U1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2lu
ZCgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAg
CisgICAgICAgIGZpbHRlckJ5VHlwZShlZGdlLm5vZGUoKSwgdHlwZUZpbHRlckZvcihlZGdlLnVz
ZUtpbmQoKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGVm
ZmVjdHMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgY2hhbmdlcyB0aGUgYWJzdHJhY3QKKyAgICAv
LyBzdGF0ZSBhc3N1bWluZyB0aGF0IGVkZ2VzIGhhdmUgYWxyZWFkeSBiZWVuIGZpbHRlcmVkLgor
ICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICBib29s
IGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSopOwogICAgIAogICAg
IC8vIERpZCB0aGUgbGFzdCBleGVjdXRlZCBub2RlIGNsb2JiZXIgdGhlIHdvcmxkPwogICAgIGJv
b2wgZGlkQ2xvYmJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsgfQpAQCAtMjU5LDYg
KzMwNCwxNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2RlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUpOworICAgICAgICBpZiAodmFsdWUubV90eXBlICYgfnR5cGUpCisgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICB2YWx1ZS5maWx0ZXIodHlwZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgdmVyaWZ5RWRnZShFZGdlKTsKKyAgICB2b2lkIHZlcmlmeUVkZ2Vz
KE5vZGUqKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEdyYXBoJiBt
X2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0LDkgQEAg
c3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBv
cHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90CisgICAgICAgIC8vIGhh
dmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4KKyAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAg
ICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOwogICAgICAg
ICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7CiAgICAg
ICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTQzMjc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFkamFjZW5jeUxpc3QoKSB7
IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIGlmIChr
aW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQg
PSBVSU5UX01BWDsKQEAgLTU3LDE5ICs1NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIE5vZGUqIGNoaWxkMSwgTm9kZSog
Y2hpbGQyLCBOb2RlKiBjaGlsZDMpCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICA6IG1f
a2luZChGaXhlZCkKLSNlbmRpZgorICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBFZGdlIGNo
aWxkMSwgRWRnZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgQVNTRVJUX1VO
VVNFRChraW5kLCBraW5kID09IEZpeGVkKTsKICAgICAgICAgaW5pdGlhbGl6ZShjaGlsZDEsIGNo
aWxkMiwgY2hpbGQzKTsKICAgICB9CiAgICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQs
IHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQotI2lmICFBU1NFUlRf
RElTQUJMRUQKLSAgICAgICAgOiBtX2tpbmQoVmFyaWFibGUpCi0jZW5kaWYKICAgICB7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIHNldEZp
cnN0Q2hpbGQoZmlyc3RDaGlsZCk7CkBAIC03OSwyMSArNzAsMTggQEAgcHVibGljOgogICAgIGNv
bnN0IEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgcmV0
dXJuIG1fd29yZHNbaV07CiAgICAgfSAgICAKICAgICAKICAgICBFZGdlJiBjaGlsZCh1bnNpZ25l
ZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsKLSAgICAgICAgQVNTRVJUKG1f
a2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzW2ldOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHNldENoaWxkKHVuc2lnbmVkIGksIEVkZ2Ugbm9kZVVzZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwog
ICAgICAgICBtX3dvcmRzW2ldID0gbm9kZVVzZTsKICAgICB9CiAgICAgCkBAIC0xMjUsOSArMTEz
LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgICAgIG1fa2luZCA9IEZpeGVkOwotI2VuZGlmCiAgICAgICAgIGluaXRp
YWxpemUoKTsKICAgICB9CiAgICAgCkBAIC0xNDIsMzQgKzEyNywyNCBAQCBwdWJsaWM6CiAKICAg
ICB1bnNpZ25lZCBmaXJzdENoaWxkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tp
bmQgPT0gVmFyaWFibGUpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1swXS5tX2VuY29kZWRXb3Jk
OwogICAgIH0KICAgICB2b2lkIHNldEZpcnN0Q2hpbGQodW5zaWduZWQgZmlyc3RDaGlsZCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBtX3dvcmRz
WzBdLm1fZW5jb2RlZFdvcmQgPSBmaXJzdENoaWxkOwogICAgIH0KICAgICAKICAgICB1bnNpZ25l
ZCBudW1DaGlsZHJlbigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZh
cmlhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZDsKICAgICB9
CiAgICAgdm9pZCBzZXROdW1DaGlsZHJlbih1bnNpZ25lZCBudW1DaGlsZHJlbikKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBtX3dvcmRzWzFdLm1f
ZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAgICAgCi0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotI2VuZGlmCiBw
cml2YXRlOgogICAgIEVkZ2UgbV93b3Jkc1tTaXplXTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgS2luZCBtX2tpbmQ7Ci0jZW5kaWYKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24g
MTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogLy8gICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGluc3RlYWQu
CiAvLyAtIFlvdSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRlZCwgYW5k
IG5ldmVyIHVzZSBmcmVlQWxsKCkuCiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CisvLyBmb3JjZWRD
ZWxsU2l6ZTogc2V0IHRoaXMgdG8gMCBpZiB5b3UncmUgaGFwcHkgd2l0aCB0aGUgZGVmYXVsdCBh
bGlnbm1lbnQsIG9yIHNldCBpdAorLy8gdG8gYSBub24temVybyB2YWx1ZSBpZiB5b3Ugd2FudCB0
byBmb3JjaWJseSBhbGlnbiB0aGUgYWxsb2NhdGlvbnMgdG8gYSBjZXJ0YWluCisvLyB2YWx1ZS4g
V2hlbiB5b3UgZG8gdGhpcywgQWxsb2NhdG9yIHdpbGwgQVNTRVJUIHRoYXQgZm9yY2VkQ2VsbEFs
aWdubWVudCA+PSBzaXplb2YoVCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZv
cmNlZENlbGxBbGlnbm1lbnQ+CiBjbGFzcyBBbGxvY2F0b3IgewogcHVibGljOgogICAgIEFsbG9j
YXRvcigpOwpAQCAtNjMsMTMgKzY3LDI0IEBAIHByaXZhdGU6CiAgICAgdm9pZCogYnVtcEFsbG9j
YXRlKCk7CiAgICAgdm9pZCogZnJlZUxpc3RBbGxvY2F0ZSgpOwogICAgIHZvaWQqIGFsbG9jYXRl
U2xvdygpOwotCisgICAgCisgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZSgpCisgICAgeworICAg
ICAgICBpZiAoIWZvcmNlZENlbGxBbGlnbm1lbnQpCisgICAgICAgICAgICByZXR1cm4gc2l6ZW9m
KFQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGZvcmNlZENlbGxBbGlnbm1lbnQgPj0gc2l6
ZW9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGZvcmNlZENlbGxBbGlnbm1lbnQ7CisgICAgfQorICAg
IAogICAgIHN0cnVjdCBSZWdpb24gewogICAgICAgICBzdGF0aWMgc2l6ZV90IHNpemUoKSB7IHJl
dHVybiA2NCAqIEtCOyB9Ci0gICAgICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0
dXJuIHN0ZDo6bWF4KHNpemVvZihSZWdpb24pLCBzaXplb2YoVCkpOyB9Ci0gICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBo
ZWFkZXJTaXplKCkpIC8gc2l6ZW9mKFQpOyB9Ci0gICAgICAgIFQqIGRhdGEoKSB7IHJldHVybiBi
aXR3aXNlX2Nhc3Q8VCo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBoZWFkZXJTaXplKCkp
OyB9Ci0gICAgICAgIGJvb2wgaXNJblRoaXNSZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvaW50ZXIgLSBkYXRhKCkpIDwgbnVtYmVyT2ZUaGlu
Z3NQZXJSZWdpb24oKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJl
dHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgY2VsbFNpemUoKSk7IH0KKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUoKSAt
IGhlYWRlclNpemUoKSkgLyBjZWxsU2l6ZSgpOyB9CisgICAgICAgIHN0YXRpYyBzaXplX3QgcGF5
bG9hZFNpemUoKSB7IHJldHVybiBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpICogY2VsbFNpemUo
KTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkQmVnaW4oKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpOyB9CisgICAgICAgIGNoYXIqIHBheWxvYWRFbmQo
KSB7IHJldHVybiBwYXlsb2FkQmVnaW4oKSArIHBheWxvYWRTaXplKCk7IH0KKyAgICAgICAgYm9v
bCBpc0luVGhpc1JlZ2lvbihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3Q+KGJpdHdpc2VfY2FzdDxjaGFyKj4ocG9pbnRlcikgLSBwYXlsb2FkQmVnaW4oKSkgPCBw
YXlsb2FkU2l6ZSgpOyB9CiAgICAgICAgIHN0YXRpYyBSZWdpb24qIHJlZ2lvbkZvcihjb25zdCBU
KiBwb2ludGVyKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UmVnaW9uKj4oYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4ocG9pbnRlcikgJiB+KHNpemUoKSAtIDEpKTsgfQogICAgICAgICAKICAgICAgICAg
UGFnZUFsbG9jYXRpb25BbGlnbmVkIG1fYWxsb2NhdGlvbjsKQEAgLTgyLDI2ICs5NywyNiBAQCBw
cml2YXRlOgogICAgIAogICAgIFJlZ2lvbiogbV9yZWdpb25IZWFkOwogICAgIHZvaWQqKiBtX2Zy
ZWVMaXN0SGVhZDsKLSAgICBUKiBtX2J1bXBFbmQ7Ci0gICAgdW5zaWduZWQgbV9idW1wUmVtYWlu
aW5nOworICAgIGNoYXIqIG1fYnVtcEVuZDsKKyAgICBzaXplX3QgbV9idW1wUmVtYWluaW5nOwog
fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46OkFsbG9jYXRv
cigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgor
aW5saW5lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6QWxsb2NhdG9yKCkKICAg
ICA6IG1fcmVnaW9uSGVhZCgwKQogICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKICAgICAsIG1fYnVt
cFJlbWFpbmluZygwKQogewogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIEFsbG9j
YXRvcjxUPjo6fkFsbG9jYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3Jj
ZWRDZWxsQWxpZ25tZW50PgoraW5saW5lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50
Pjo6fkFsbG9jYXRvcigpCiB7CiAgICAgcmVzZXQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjphbGxvY2F0ZSgpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgorQUxXQVlTX0lOTElO
RSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmFsbG9jYXRlKCkKIHsK
ICAgICB2b2lkKiByZXN1bHQgPSBidW1wQWxsb2NhdGUoKTsKICAgICBpZiAoTElLRUxZKCEhcmVz
dWx0KSkKQEAgLTEwOSw4ICsxMjQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxU
Pjo6YWxsb2NhCiAgICAgcmV0dXJuIGZyZWVMaXN0QWxsb2NhdGUoKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlKFQqIG9iamVjdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRv
cjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZShUKiBvYmplY3QpCiB7CiAgICAgb2JqZWN0
LT5+VCgpOwogICAgIApAQCAtMTE5LDggKzEzNCw4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVl
KFQqIG9iamVjdCkKICAgICBtX2ZyZWVMaXN0SGVhZCA9IGNlbGw7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFsbCgpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9y
Y2VkQ2VsbEFsaWdubWVudD46OmZyZWVBbGwoKQogewogICAgIGlmICghbV9yZWdpb25IZWFkKSB7
CiAgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTE0Miw4ICsxNTcsOCBAQCB2
b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFsbCgpCiAgICAgc3RhcnRCdW1waW5nSW4obV9yZWdpb25I
ZWFkKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpyZXNl
dCgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgor
dm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OnJlc2V0KCkKIHsKICAgICBm
cmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsKICAgICAKQEAgLTE1MiwzOCArMTY3
LDM4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpyZXNldCgpCiAgICAgbV9idW1wUmVtYWluaW5nID0g
MDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuc2lnbmVkIEFsbG9jYXRvcjxUPjo6aW5k
ZXhPZihjb25zdCBUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3Jj
ZWRDZWxsQWxpZ25tZW50PgordW5zaWduZWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1l
bnQ+OjppbmRleE9mKGNvbnN0IFQqIG9iamVjdCkKIHsKICAgICB1bnNpZ25lZCBiYXNlSW5kZXgg
PSAwOwogICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsgcmVn
aW9uID0gcmVnaW9uLT5tX25leHQpIHsKICAgICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNSZWdp
b24ob2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0gcmVn
aW9uLT5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIGJhc2VJbmRleCArIChiaXR3aXNlX2Nh
c3Q8Y2hhcio+KG9iamVjdCkgLSByZWdpb24tPnBheWxvYWRCZWdpbigpKSAvIGNlbGxTaXplKCk7
CiAgICAgICAgIGJhc2VJbmRleCArPSBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7
CiAgICAgfQogICAgIENSQVNIKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1BbGxvY2F0b3I8VD4qIEFsbG9jYXRvcjxUPjo6YWxsb2NhdG9yT2YoY29uc3QgVCog
b2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVu
dD4KK0FsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50PiogQWxsb2NhdG9yPFQsIGZvcmNl
ZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0b3JPZihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgcmV0
dXJuIFJlZ2lvbjo6cmVnaW9uRm9yKG9iamVjdCktPm1fYWxsb2NhdG9yOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmJ1bXBBbGxv
Y2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50
PgorQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46
OmJ1bXBBbGxvY2F0ZSgpCiB7Ci0gICAgaWYgKHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fYnVtcFJl
bWFpbmluZykgewotICAgICAgICByZW1haW5pbmctLTsKKyAgICBpZiAoc2l6ZV90IHJlbWFpbmlu
ZyA9IG1fYnVtcFJlbWFpbmluZykgeworICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemUoKTsK
ICAgICAgICAgbV9idW1wUmVtYWluaW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9i
dW1wRW5kIC0gKHJlbWFpbmluZyArIDEpOworICAgICAgICByZXR1cm4gbV9idW1wRW5kIC0gKHJl
bWFpbmluZyArIGNlbGxTaXplKCkpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQqIEFsbG9jYXRvcjxUPjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCog
QWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlTGlzdEFsbG9jYXRlKCkKIHsK
ICAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFy
ZXN1bHQpKQpAQCAtMTkyLDggKzIwNyw4IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6ZnJlZUxpc3RB
bGxvY2F0ZSgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2Vk
Q2VsbEFsaWdubWVudD46OmFsbG9jYXRlU2xvdygpCiB7CiAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0
SGVhZCk7CiAgICAgQVNTRVJUKCFtX2J1bXBSZW1haW5pbmcpOwpAQCAtMjE2LDggKzIzMSw4IEBA
IHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVSZWdpb25z
U3RhcnRpbmdBdCh0eXBlbmFtZSBBbGxvY2F0b3I8VD46OlJlZ2lvbiogcmVnaW9uKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2Nh
dG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQodHlwZW5h
bWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsK
ICAgICB3aGlsZSAocmVnaW9uKSB7CiAgICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lv
bi0+bV9uZXh0OwpAQCAtMjI2LDExICsyNDEsMTEgQEAgdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVS
ZWdpb25zU3RhcnRpbmdBdAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQg
QWxsb2NhdG9yPFQ+OjpzdGFydEJ1bXBpbmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8VD46OlJlZ2lv
biogcmVnaW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdu
bWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpzdGFydEJ1bXBp
bmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OlJlZ2lvbiog
cmVnaW9uKQogewotICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+ZGF0YSgpICsgUmVnaW9uOjpudW1i
ZXJPZlRoaW5nc1BlclJlZ2lvbigpOwotICAgIG1fYnVtcFJlbWFpbmluZyA9IFJlZ2lvbjo6bnVt
YmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKKyAgICBtX2J1bXBFbmQgPSByZWdpb24tPnBheWxvYWRF
bmQoKTsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246OnBheWxvYWRTaXplKCk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjk4LDYgKzY5OCwxOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZSogcmVz
dWx0ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250
UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwg
RWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CisgICAgICAgIEFTU0VS
VChvcCAhPSBQaGkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CisK
KyAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQorICAgICAg
ICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBFZGdlIGNoaWxkMSwg
RWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQorICAgIHsKKyAgICAg
ICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgRG9udFJlZkNo
aWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCiAgICAgICAgICAgICBvcCwgY3VycmVudENv
ZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAgICAgIEFTU0VSVChvcCAh
PSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CkBAIC03MTAs
NyArNzIyLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3Jh
cGguYWRkTm9kZSgKICAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIGNoaWxk
MSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCks
IGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAg
ICBpZiAob3AgPT0gUGhpKQogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnBoaXMuYXBwZW5k
KHJlc3VsdCk7CiAgICAgICAgIGVsc2UKQEAgLTcyNCw3ICs3MzYsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAg
RG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICBvcCwg
Y3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KTsKKyAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIEVk
Z2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAgICBBU1NFUlQo
b3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwogCkBA
IC0xNDY1LDcgKzE0NzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoYm9v
bCB1CiAgICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7IC8v
IE1hdGgubWluKHgpCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNldCAr
IGFyZ3VtZW50VG9PcGVyYW5kKDEpKTsKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja051bWJlciwg
cmVzdWx0KTsKKyAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVy
VXNlKSk7CiAgICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVy
YW5kLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk2OSw3ICs5NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFjY2Vzc2lu
ZyBhcmd1bWVudHMgdGhlbiBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2luZyBsb2NhbHMuCi0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMo
KSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5
OjpBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTEwMTQs
MTggKzEwMTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBlbnVt
IFByZWRpY3Rpb25IYW5kbGluZ01vZGUgeyBSZXF1aXJlU2FtZVByZWRpY3Rpb24sIEFsbG93UHJl
ZGljdGlvbk1pc21hdGNoIH07Ci0gICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNl
bWVudCwgUHJlZGljdGlvbkhhbmRsaW5nTW9kZSBwcmVkaWN0aW9uSGFuZGxpbmdNb2RlID0gUmVx
dWlyZVNhbWVQcmVkaWN0aW9uKQorICAgIGJvb2wgc2V0UmVwbGFjZW1lbnQoTm9kZSogcmVwbGFj
ZW1lbnQpCiAgICAgewogICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBl
cmZvcm0gcmVwbGFjZW1lbnRzIGlmIHRoZSBwcmVkaWN0aW9ucyBkb24ndAotICAgICAgICAvLyBh
Z3JlZS4KLSAgICAgICAgaWYgKHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPT0gUmVxdWlyZVNhbWVQ
cmVkaWN0aW9uCi0gICAgICAgICAgICAmJiBtX2N1cnJlbnROb2RlLT5wcmVkaWN0aW9uKCkgIT0g
cmVwbGFjZW1lbnQtPnByZWRpY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAg
ICBkYXRhTG9nRigiICAgUmVwbGFjaW5nIEAldSAtPiBAJXUiLCBtX2N1cnJlbnROb2RlLT5pbmRl
eCgpLCByZXBsYWNlbWVudC0+aW5kZXgoKSk7CiAjZW5kaWYKQEAgLTEyMzAsNyArMTIyMyw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgICAgIC8vIFRoaXMg
aXMgc3RyYW5nZSwgYnV0IG5lY2Vzc2FyeS4gU29tZSBwaGFzZXMgd2lsbCBjb252ZXJ0IG5vZGVz
IHRvIGNvbnN0YW50cywKICAgICAgICAgICAgIC8vIHdoaWNoIG1heSByZXN1bHQgaW4gZHVwbGlj
YXRlZCBjb25zdGFudHMuIFdlIHVzZSBDU0UgdG8gY2xlYW4gdGhpcyB1cC4KLSAgICAgICAgICAg
IHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpLCBBbGxvd1ByZWRpY3Rpb25NaXNtYXRj
aCk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjb25zdGFudENTRShub2RlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNDMy
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MywxMiArODMsNiBAQCBzdHJ1Y3QgTm9kZVBvaW50ZXJUcmFpdHMgewogICAgIHN0
YXRpYyB2b2lkIGR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOwogfTsKIAotZW51
bSBVc2VLaW5kIHsKLSAgICBVbnR5cGVkVXNlLAotICAgIERvdWJsZVVzZSwKLSAgICBMYXN0VXNl
S2luZCAvLyBNdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQg
aXMgdXNlZCB0byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgotfTsKLQogLy8g
VXNlIFJlZkNoaWxkcmVuIGlmIHRoZSBjaGlsZCByZWYgY291bnRzIGhhdmVuJ3QgYWxyZWFkeSBi
ZWVuIGFkanVzdGVkIHVzaW5nCiAvLyBvdGhlciBtZWFucyBhbmQgZWl0aGVyIG9mIHRoZSBmb2xs
b3dpbmcgaXMgdHJ1ZToKIC8vIC0gVGhlIG5vZGUgeW91J3JlIGNyZWF0aW5nIGlzIE11c3RHZW5l
cmF0ZS4KQEAgLTEwNiwxOSArMTAwLDYgQEAgZW51bSBSZWZOb2RlTW9kZSB7CiAgICAgRG9udFJl
Zk5vZGUKIH07CiAKLWlubGluZSBjb25zdCBjaGFyKiB1c2VLaW5kVG9TdHJpbmcoVXNlS2luZCB1
c2VLaW5kKQotewotICAgIHN3aXRjaCAodXNlS2luZCkgewotICAgIGNhc2UgVW50eXBlZFVzZToK
LSAgICAgICAgcmV0dXJuICIiOwotICAgIGNhc2UgRG91YmxlVXNlOgotICAgICAgICByZXR1cm4g
ImQiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQogaW5saW5lIGJvb2wgaXNBUk12N3MoKQog
ewogI2lmIENQVShBUFBMRV9BUk1WN1MpCkBAIC0yMzYsNiArMjE3LDggQEAgZW51bSBVbmlmaWNh
dGlvblN0YXRlIHsKICAgICBHbG9iYWxseVVuaWZpZWQKIH07CiAKK2VudW0gT3BlcmFuZFNwZWN1
bGF0aW9uTW9kZSB7IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uIH07CisKIGVudW0gU3BlY3VsYXRpb25EaXJlY3Rpb24geyBGb3J3YXJkU3BlY3Vs
YXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24gfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDMsOCArMTAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+
c3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBz
ZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9m
KHNldCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50KCkgPT0g
MSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b20pOwpAQCAtMTQ5LDEwICsxNDcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgR2V0
QnlJZDoKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7CiAgICAgICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBF
ZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNo
aWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24o
KSkpCisgICAgICAgICAgICAgICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQ
cm92ZW5TdHJ1Y3R1cmUoKTsKQEAgLTE4MSwxOCArMTgwLDI0IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25l
LAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQs
IGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZv
KHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0
YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgeworICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSogcHJv
cGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3du
Q2VsbFVzZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0
eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigp
OwogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQot
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdl
KG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZs
eSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtMjA3
LDkgKzIxMiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAg
ICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBFZGdlIGNoaWxkRWRn
ZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRF
ZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bm9kZS0+aWRlbnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpOworICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JO
b2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjM4LDkgKzI0NiwxNSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0
cnVjdHVyZSkpKTsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGQp
OworICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQs
IGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBoYW50b20sIGNvZGVPcmlnaW4s
IGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRp
b25EYXRhID0gMDsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlv
bigpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgKQEAgLTI2NCwzOCArMjc4LDM4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0
b3JhZ2U7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KHN0YXR1cy5vZmZzZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigp
OyAvLyBUaGUgY2hpbGQgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcm9wZXJ0eSBpbmRleCwgc28gcmVm
IGl0IHRvIHJlZmxlY3QgdGhlIGRvdWJsZSB1c2UuCi0gICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBjaGlsZEVkZ2U7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMuaXNTaW1wbGVS
ZXBsYWNlKCkgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHN0YXR1cy5uZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUs
IEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVj
Tm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3Rh
dHVzLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4s
IE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSkpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVz
Lm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNl
dChzdGF0dXMub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWRn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgY2hpbGQpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNp
dGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250
UmVmTm9kZSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3Bl
cnR5U3RvcmFnZSk7CkBAIC0zNDAsNyArMzU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogcGhhbnRvbSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBwaGkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVk
Z2UocGhpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhhbnRvbTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBwaGFudG9tOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0zOTEsMTMgKzQwNSwxMyBA
QCBwcml2YXRlOgogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAgICAg
ICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29u
c3RhbnQpOworICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1
cmUoKSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBD
aGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnQpOworICAgICAg
ICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSks
IEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMg
aXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIENGQSBtYXkgcmVhY2ggY29uY2x1c2lvbnMgYWJvdXQg
Y29uc3RhbnRzIGJhc2VkIG9uIGl0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDYgQEAgaW5saW5l
IGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICBpZiAoIWNoYW5nZWQp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIGRmZy5yZXNldEV4aXRTdGF0
ZXMoKTsKLSAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNSZXRo
cmVhZGluZyhkZmcpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdFZGdlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogewotICAgIG91dC5wcmludCh1c2VLaW5kVG9TdHJpbmcodXNlS2luZCgpKSwgbm9k
ZSgpKTsKKyAgICBpZiAodXNlS2luZCgpICE9IFVudHlwZWRVc2UpCisgICAgICAgIG91dC5wcmlu
dCh1c2VLaW5kKCksICI6Iik7CisgICAgb3V0LnByaW50KG5vZGUoKSk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShy
ZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBzdGF0aWMg
dWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiAyOyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0
KCkgeyByZXR1cm4gNDsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9k
ZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEJlZm9yZUZpeHBvaW50KTsKKyAg
ICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1cEJsb2Nr
KG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTc2LDUwICs3OSwyNjIgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICAKICAgICAg
ICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpCisgICAgICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0Ny
ZWF0ZWRUaGlzQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihu
b2RlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VE
b3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hp
bGQxKCksIE51bWJlclVzZSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3RlZFR5cGUgPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBl
bHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgZWxzZSBp
ZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAg
IGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdFJTaGlm
dDoKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDogewor
ICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJ
bnRFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogeworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMy
OiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9J
bnQzMjogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlID0gCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
cyk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJy
YXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0g
QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2Up
OwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rp
b24oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYm
IGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNr
U3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1
cmUoKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoTnVtYmVyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKE5vdENlbGxVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6IHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAgICAgICAgIGlmIChh
dHRlbXB0VG9NYWtlSW50ZWdlckFkZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVk
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAg
ICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7
CisgICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aERpdjogewor
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAg
IGlmIChpc1g4NigpIHx8IGlzQVJNdjdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCksIG5vZGUtPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBw
b3J0c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShu
b2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRv
IHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9t
CisgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgorICAgICAgICAgICAg
ICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwg
U3BlY0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVk
Z2UoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlLT5zZXRPcChH
ZXRBcnJheUxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVN
dXN0R2VuZXJhdGUpOwotICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
KTsKLSAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVj
a0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAg
ICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNl
IEFyaXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkK
KyAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFyaXRoU3FydDogeworICAgICAgICAgICAgZml4RG91YmxlRWRn
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgTG9naWNhbE5vdDogeworICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7
CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVt
YmVyKCkpCisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
VHlwZU9mOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3Ry
aW5nVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVDZWxsKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChD
ZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6Cisg
ICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAg
ICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVx
OiB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFudCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkg
eworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpICE9IENvbXBhcmVFcSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hp
bGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAm
JiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOwogICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0T3JPdGhlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtp
bmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVj
dE9yT3RoZXIoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJV
c2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0VXNl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6
CisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQ6IHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkg
eworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRl
U3RyaW5nKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRV
c2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5j
YW5DU0VTdG9yYWdlKCkpOworCisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBj
YXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZl
IG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgorICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5nKSk7CisgICAgICAgICAgICBi
bGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNl
bGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6
IHsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAgICAgICAgICAgICAgICBub2Rl
LT5hcnJheU1vZGUoKS5yZWZpbmUoCkBAIC0xMjcsNyArMzQyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAg
ICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCks
IDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9k
ZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
QXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgICAgICAgICAgaWYg
KGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQpAQCAtMTM4LDEzICszNTMsNzcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhKG5vZGUtPmZsYWdzKCkgJiBOb2RlVXNlZEFz
T3RoZXIpKQogICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUud2l0
aFNwZWN1bGF0aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAgICAgICAgIAorICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpV
bnByb2ZpbGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBjYXNl
IEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2Vs
bFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0
OgotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAgICAgICAgICAgIC8vIEN1cnJl
bnRseSB3ZSBoYXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgotICAgICAgICAgICAg
QVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5nKSk7Ci0g
ICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGls
ZDIoKSwgMik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMik7CisKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgK
KyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAg
ICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjaGlsZDIt
PnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQzLT5wcmVkaWN0aW9uKCkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEs
IGNoaWxkMiwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpV
bmRlY2lkZWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGZpeERv
dWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCksIFJlYWxOdW1iZXJVc2UpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJy
YXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50
MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMygpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDMo
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0x
NjMsMTEgKzQ0MiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAgICAgICAgIFNwZWNJ
bnQzMiwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSkp
OwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgp
LCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIEVk
Z2UoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0g
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzYsNDkgKzQ1OSwyNyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBv
cDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRn
ZSgpLCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0
WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0g
ICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5j
aGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVu
LmNoaWxkMigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAg
ICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAg
ICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RF
cTogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNo
aWxkMSgpLCBFZGdlKCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgICAgICBjYXNlIFJl
Z0V4cFRlc3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVz
ZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEJy
YW5jaDogewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9y
T3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUt
PmNoaWxkMSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNhbE5vdCA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90LT5vcCgpID09IExvZ2ljYWxO
b3QKQEAgLTI2MSwxNDkgKzUyMiwyNTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAg
ICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN0cmluZyBz
cGVjdWxhdGlvbiBoZXJlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMDE3NQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBjYXNlIFZhbHVlQWRk
OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKQorICAgICAgICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07KSB7CisgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAgICAgICAgICAgICBsZWFzdFVw
cGVyQm91bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUoCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKS0+cHJlZGlj
dGlvbigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAg
IEFTU0VSVCghbm9kZS0+bnVtQ2hpbGRyZW4oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51
bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XS5zZXRV
c2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7
ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XS5zZXRVc2VLaW5kKFJlYWxO
dW1iZXJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFOb2Rl
OjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBo
LmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkKLSAgICAgICAgICAgICAgICAmJiBub2Rl
LT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAg
ICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZTogewotICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgIGNhc2Ug
Q29udmVydFRoaXM6IHsKKyAgICAgICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24obm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc09iamVjdFNwZWN1
bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAg
Y2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAg
ICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm11
bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgx
KTsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CisgICAgICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGNh
c2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSB8fCBpc0FSTXY3cygpKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSgw
KTsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSgxKTsKLQotICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4g
YmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KLSAgICAgICAgICAgICAgICAvLyB0aGUg
b3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9kZSogbmV3RGl2aXNpb24gPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCAqbm9kZSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7
Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0Rpdmlz
aW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldFNjb3Bl
UmVnaXN0ZXJzOgorICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKKyAgICAgICAgY2FzZSBTa2lw
VG9wU2NvcGU6CisgICAgICAgIGNhc2UgU2tpcFNjb3BlOgorICAgICAgICBjYXNlIFNldENhbGxl
ZToKKyAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToK
KyAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIEdldFNjb3BlOgorICAgICAgICBj
YXNlIEdldEJ1dHRlcmZseTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGNhc2UgR2V0QnlJ
ZDogeworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2Vs
bCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9u
KG5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAh
PSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgICAgIEFycmF5UHJv
ZmlsZSogYXJyYXlQcm9maWxlID0gCisgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAorICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAg
QXJyYXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0
aW9ucyk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7CisgICAgICAgICAgICAgICAg
YXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKSk7CisgICAgICAgICAgICAgICAgYXJyYXlNb2Rl
ID0gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFs
c2UpOworICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRp
Y3Rpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgp
ICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1
Y3R1cmUoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFycmF5
TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9k
ZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLnN1cHBvcnRzTGVu
Z3RoKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBub2RlLT5zZXRPcChH
ZXRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVN
dXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsK
KyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUt
PmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdl
LCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hp
bGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAg
IGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotCi0gICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUo
Ci0gICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAotICAgICAgICAgICAg
ICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQy
LT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+cHJlZGljdGlvbigp
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQx
LCBjaGlsZDIsIDMpOworICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6Cisg
ICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAgICAgIGNhc2Ug
Rm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAgICBjYXNlIENoZWNr
RnVuY3Rpb246CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRGly
ZWN0OgorICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6IHsKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgp
Lm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToK
LSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0g
ICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJh
eToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgICAg
IGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2UoMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsKKyAgICAgICAgY2Fz
ZSBDaGVja0FycmF5OiB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFw
aC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykgewotICAgICAgICAgICAgICAgIG5vZGUt
PnNldEluZGV4aW5nVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RVcHBlckJvdW5kT2ZJ
bmRleGluZ1R5cGVBbmRUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+aW5kZXhp
bmdUeXBlKCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSktPnByZWRpY3Rpb24oKSkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFy
cmF5V2l0aERvdWJsZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3Jh
cGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoaSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXlpZnk6Cisg
ICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogeworICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIo
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldDogeworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3Rv
cmFnZVJlc3VsdCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQo
S25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICAgICAgaWYgKCFub2RlLT5j
aGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigp
LnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CisgICAgICAgICAgICAv
LyBGSVhNRTogVGhpcyBhcHBlYXJzIGJyb2tlbjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRv
ZXMgYW4gdW5jb25kaXRpb25hbCBjZWxsCisgICAgICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQorICAgICAgICAgICAgaWYgKCEo
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAg
IGNhc2UgSWRlbnRpdHk6CisgICAgICAgIGNhc2UgTm9wOgorICAgICAgICBjYXNlIFBoaToKKyAg
ICAgICAgY2FzZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICAgICAgY2FzZSBQaGFudG9tUHV0
U3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CisgICAg
ICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyNpZiAhQVNTRVJUX0RJU0FC
TEVEICAgIAorICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJl
IHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KKyAg
ICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CisgICAgICAgIGNh
c2UgR2V0TG9jYWw6CisgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICBjYXNlIEZsdXNo
OgorICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlu
a2VkOgorICAgICAgICBjYXNlIElubGluZVN0YXJ0OgorICAgICAgICBjYXNlIEdldE15U2NvcGU6
CisgICAgICAgIGNhc2UgR2V0U2NvcGVkVmFyOgorICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoK
KyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hw
b2ludDoKKyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKKyAgICAgICAgY2FzZSBBbGxv
Y2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CisgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2Fz
ZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE5ld0Fy
cmF5QnVmZmVyOgorICAgICAgICBjYXNlIE5ld1JlZ2V4cDoKKyAgICAgICAgY2FzZSBSZXNvbHZl
OgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3Ry
aWN0UHV0OgorICAgICAgICBjYXNlIFJlc29sdmVHbG9iYWw6CisgICAgICAgIGNhc2UgQnJlYWtw
b2ludDoKKyAgICAgICAgY2FzZSBJc1VuZGVmaW5lZDoKKyAgICAgICAgY2FzZSBJc0Jvb2xlYW46
CisgICAgICAgIGNhc2UgSXNOdW1iZXI6CisgICAgICAgIGNhc2UgSXNTdHJpbmc6CisgICAgICAg
IGNhc2UgSXNPYmplY3Q6CisgICAgICAgIGNhc2UgSXNGdW5jdGlvbjoKKyAgICAgICAgY2FzZSBT
dHJDYXQ6CisgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgY2FzZSBUZWFy
T2ZmQWN0aXZhdGlvbjoKKyAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CisgICAgICAgIGNh
c2UgUGhhbnRvbUFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgorICAg
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgorICAgICAgICBjYXNlIEdldE15QXJndW1l
bnRzTGVuZ3RoU2FmZToKKyAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6Cisg
ICAgICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNr
OgorICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgY2FzZSBKdW1w
OgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBUaHJvdzoKKyAgICAgICAgY2Fz
ZSBUaHJvd1JlZmVyZW5jZUVycm9yOgorICAgICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKKyAgICAg
ICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAg
ICAgICAgICBicmVhazsKKyNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVh
azsKKyNlbmRpZgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCkBAIC00MjEsNiArNzkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYXJyYXlNb2RlLm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUo
bV9ncmFwaCwgY29kZU9yaWdpbik7CiAgICAgICAgIAorICAgICAgICBFZGdlIGluZGV4RWRnZSA9
IGluZGV4ID8gRWRnZShpbmRleCwgSW50MzJVc2UpIDogRWRnZSgpOworICAgICAgICAKICAgICAg
ICAgaWYgKGFycmF5TW9kZS5kb2VzQ29udmVyc2lvbigpKSB7CiAgICAgICAgICAgICBpZiAoc3Ry
dWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1faW5kZXhJbkJsb2NrID4gMCkgewpAQCAt
NDM1LDIxICs4MDYsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBtX2lu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlpZnlU
b1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVj
dHVyZSksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBhcnJheSwgaW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQo
KSksIEVkZ2UoYXJyYXksIENlbGxVc2UpLCBpbmRleEVkZ2UpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVj
Tm9uZSwgQXJyYXlpZnksIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhh
cnJheU1vZGUuYXNXb3JkKCkpLCBhcnJheSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSksIGluZGV4RWRn
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3Ry
dWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIGFycmF5KTsK
KyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVj
dHVyZSkpLCBFZGdlKGFycmF5LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBD
aGVja0FycmF5LCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlN
b2RlLmFzV29yZCgpKSwgYXJyYXkpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlN
b2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIApAQCAtNDYxLDIxICs4MzIsMTggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywKICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/
IFJlZkNoaWxkcmVuIDogRG9udFJlZkNoaWxkcmVuLAogICAgICAgICAgICAgICAgIHNob3VsZEdl
bmVyYXRlID8gUmVmTm9kZSA6IERvbnRSZWZOb2RlLAotICAgICAgICAgICAgICAgIFNwZWNOb25l
LCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KTsKKyAgICAgICAgICAgICAgICBTcGVj
Tm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBFZGdlKGFycmF5LCBLbm93bkNlbGxVc2Up
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywKICAgICAgICAgICAgIHNob3Vs
ZEdlbmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBEb250UmVmQ2hpbGRyZW4sCiAgICAgICAgICAgICBz
aG91bGRHZW5lcmF0ZSA/IFJlZk5vZGUgOiBEb250UmVmTm9kZSwKLSAgICAgICAgICAgIFNwZWNO
b25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlN
b2RlLmFzV29yZCgpKSwgYXJyYXkpOworICAgICAgICAgICAgU3BlY05vbmUsIEdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBF
ZGdlKGFycmF5LCBLbm93bkNlbGxVc2UpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBibGVzc0Fy
cmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxk
SWR4KQorICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVkZ2UgaW5kZXgs
IEVkZ2UmIHN0b3JhZ2VDaGlsZCkKICAgICB7Ci0gICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9p
bnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAK
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudE5vZGU7CiAgICAgICAgIAogICAgICAgICBz
d2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNDk5LDcgKzg2Nyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG5vZGUsIHN0b3JhZ2VD
aGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgc3RvcmFnZUNoaWxkID0gRWRn
ZShzdG9yYWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSB9CiAgICAgfQpAQCAt
NTA3LDQ4ICs4NzUsOTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRn
ZSkKICAgICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBlZGdlLm5vZGUoKTsKLSAgICAgICAgaWYg
KG5vZGUtPm9wKCkgIT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIpIHsKKyAgICAgICAgICAg
IGVkZ2Uuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRnZTsKICAgICAgICAg
RWRnZSBuZXdFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAorICAgICAgICBpZiAobmV3
RWRnZS51c2VLaW5kKCkgIT0gSW50MzJVc2UpIHsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2lu
ZChLbm93bkludDMyVXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7Cisg
ICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAgICAgbV9ncmFwaC5k
ZXJlZihvbGRFZGdlKTsKICAgICAgICAgCiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGZpeERvdWJsZUVkZ2UodW5zaWduZWQgY2hpbGRJbmRleCwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICB2b2lk
IGZpeERvdWJsZUVkZ2UoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBT
cGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAg
IHsKLSAgICAgICAgTm9kZSogc291cmNlID0gbV9jdXJyZW50Tm9kZTsKLSAgICAgICAgRWRnZSYg
ZWRnZSA9IG1fZ3JhcGguY2hpbGQoc291cmNlLCBjaGlsZEluZGV4KTsKLSAgICAgICAgCiAgICAg
ICAgIGlmIChlZGdlLT5wcmVkaWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0gICAgICAgICAgICBl
ZGdlLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZCh1
c2VLaW5kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoY2hpbGRJbmRleCwgZGlyZWN0aW9uKTsKKyAgICAg
ICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoZWRnZSwgdXNlS2luZCwgZGlyZWN0aW9uKTsKICAg
ICB9CiAKLSAgICB2b2lkIGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxkSW5k
ZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24p
CisgICAgdm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVz
ZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3
YXJkU3BlY3VsYXRpb24pCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGls
ZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwKICAgICAgICAgICAgIGRpcmVjdGlvbiA9PSBCYWNr
d2FyZFNwZWN1bGF0aW9uID8gSW50MzJUb0RvdWJsZSA6IEZvcndhcmRJbnQzMlRvRG91YmxlLAot
ICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgbV9ncmFwaC5jaGlsZChtX2N1
cnJlbnROb2RlLCBjaGlsZEluZGV4KS5ub2RlKCkpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwgSW50MzJVc2UpKTsKICAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9n
RigKICAgICAgICAgICAgICIocmVwbGFjaW5nIEAldS0+QCV1IHdpdGggQCV1LT5AJXUpICIsCi0g
ICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCBtX2dyYXBoLmNoaWxkKG1fY3VycmVu
dE5vZGUsIGNoaWxkSW5kZXgpLT5pbmRleCgpLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCByZXN1
bHQtPmluZGV4KCkpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgZWRnZS0+
aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgcmVzdWx0LT5pbmRleCgpKTsKICNlbmRp
ZgogCi0gICAgICAgIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBF
ZGdlKHJlc3VsdCwgRG91YmxlVXNlKTsKKyAgICAgICAgZWRnZSA9IEVkZ2UocmVzdWx0LCB1c2VL
aW5kKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihFZGdl
JiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSogb2xkTm9kZSA9IGVkZ2Uubm9kZSgpOworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKG9sZE5vZGUtPmhhc0NvbnN0YW50KCkpOworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChvbGROb2RlKTsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIHZhbHVlID0ganNOdW1iZXIoSlNDOjp0b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkpKTsK
KyAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZSht
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERv
bnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0ludDMyLCBKU0NvbnN0YW50LAorICAgICAgICAg
ICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRPckZp
bmRDb25zdGFudCh2YWx1ZSkpKSk7CisgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkTm9kZSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2RlKiBu
b2RlLCBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGlmIChtb2RlICE9
IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQo
KSB8fCBub2RlLT5jaGlsZDIoKS0+aGFzQ29uc3RhbnQoKSk7CisgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRUb0lu
dDMyKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJ1bmNhdGVD
b25zdGFudFRvSW50MzIobm9kZS0+Y2hpbGQyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGF0
dGVtcHRUb01ha2VJbnRlZ2VyQWRkKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBZGRTcGVj
dWxhdGlvbk1vZGUgbW9kZSA9IG1fZ3JhcGguYWRkU3BlY3VsYXRpb25Nb2RlKG5vZGUpOworICAg
ICAgICBpZiAobW9kZSA9PSBEb250U3BlY3VsYXRlSW50ZWdlcikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3Nhcnko
bm9kZSwgbW9kZSk7CisgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2Up
OworICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQ2LDQ1ICszNDYsMTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAg
IH0KIH0KIAotLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5vdCByZWN1
cnNpdmUuCi0jZGVmaW5lIERPX1RPX0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChf
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENo
aWxkKCk7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUt
PmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCi0gICAgICAgICAgICAgICAg
X2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFy
Z0NoaWxkcmVuW19jaGlsZElkeF0pOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJU
KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAo
IV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMygp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgfSB3aGlsZSAoZmFsc2UpCi0KIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9wKQog
ewotICAgIERPX1RPX0NISUxEUkVOKG9wLCByZWYpOworICAgIERGR19OT0RFX0RPX1RPX0NISUxE
UkVOKCp0aGlzLCBvcCwgcmVmKTsKIH0KIAogdm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2Rl
KiBvcCkKIHsKLSAgICBET19UT19DSElMRFJFTihvcCwgZGVyZWYpOworICAgIERGR19OT0RFX0RP
X1RPX0NISUxEUkVOKCp0aGlzLCBvcCwgZGVyZWYpOwogfQogCiB2b2lkIEdyYXBoOjpkZXRocmVh
ZCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDMy
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IFB1dFRvQmFzZU9wZXJhdGlvbkRhdGEgewogCiBl
bnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAgICAgRG9udFNwZWN1bGF0ZUludGVnZXIsCi0gICAg
U3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3csCisgICAgU3BlY3VsYXRlSW50
ZWdlckFuZFRydW5jYXRlQ29uc3RhbnRzLAogICAgIFNwZWN1bGF0ZUludGVnZXIKIH07CiAKQEAg
LTE3NCw5ICsxNzQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSAr
IG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdl
bmVyYXRlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAg
ICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIo
KSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVk
Z2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAg
IHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0
ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDIo
KSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVk
Z2Uobm9kZS0+Y2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKQEAgLTUzMCw5ICs1MzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1ByZWRpY3Rl
ZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVm
dCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlz
TnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCk7Cisg
ICAgICAgIHJldHVybiBpc051bWVyaWNhbChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpICYmIGlz
TnVtZXJpY2FsKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSk7CiAgICAgfQogICAgIAogICAgIC8v
IE5vdGUgdGhhdCBhICd0cnVlJyByZXR1cm4gZG9lcyBub3QgYWN0dWFsbHkgbWVhbiB0aGF0IHRo
ZSBCeVZhbCBhY2Nlc3MgY2xvYmJlcnMgbm90aGluZy4KQEAgLTc4MSw3ICs3NzksNyBAQCBwcml2
YXRlOgogICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91Ymxl
SW1tZWRpYXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRl
SW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2Vy
KGFkZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hP
dmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRy
dW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckFu
ZFRydW5jYXRlQ29uc3RhbnRzIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAog
ICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwsIE5v
ZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCkBAIC04MzAsNiArODI4LDM2IEBAIGlubGlu
ZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnkKICAgICByZXR1cm4gKmJpbmFyeVNl
YXJjaDxCbG9ja0luZGV4LCB1bnNpZ25lZD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJnZXRz
LnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7
CiB9CiAKKyNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5n
VG9EbykgZG8geyAgICAgICAgICAgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9u
b2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hp
bGQoKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+
Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAgICAgICBf
Y2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4
XSkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKChncmFwaCku
bV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICgh
X25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlIChmYWxzZSkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDMyNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTUsMTEgKzk1LDEwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3Bl
Y05vbmUpCiAgICAgewogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7Ci0gICAgICAg
IEFTU0VSVCghIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpID09IChjaGlsZHJlbi5raW5kKCkg
PT0gQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUpKTsKICAgICB9CiAgICAgCiAgICAgLy8gQ29uc3Ry
dWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAg
ICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUqIGNoaWxkMSA9
IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCisgICAgTm9kZShOb2RlVHlw
ZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFZGdlIGNoaWxkMSA9IEVkZ2UoKSwgRWRnZSBj
aGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgICAgICA6IGNvZGVPcmln
aW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwg
Y2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTExLDcgKzExMCw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQg
YW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwg
Tm9kZSogY2hpbGQzID0gMCkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIE9wSW5mbyBpbW0sIEVkZ2UgY2hpbGQxID0gRWRnZSgpLCBFZGdlIGNoaWxkMiA9IEVk
Z2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3Jp
Z2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNo
aWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCkBAIC0xMjQsNyArMTIzLDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAg
IC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRp
YXRlIHZhbHVlcy4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQy
ID0gMCwgTm9kZSogY2hpbGQzID0gMCkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgRWRnZSBjaGlsZDEgPSBFZGdl
KCksIEVkZ2UgY2hpbGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICAgICAg
OiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlz
dDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVn
aXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTI5NCwyMiArMjkzLDIyIEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQo
c3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgs
IE5vZGUqIHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBz
dG9yYWdlQWNjZXNzRGF0YUluZGV4LCBFZGdlIHN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NF
UlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoKTsKICAgICAgICAgbV9v
cEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwotICAgICAgICBjaGlsZHJlbi5zZXRDaGls
ZDEoRWRnZShzdG9yYWdlKSk7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShzdG9yYWdlKTsK
ICAgICAgICAgbV9vcCA9IEdldEJ5T2Zmc2V0OwogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xv
YmJlcnNXb3JsZDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1
bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQorICAgIHZvaWQg
Y29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRn
ZSBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29w
ID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXg7CiAgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMyhjaGlsZHJlbi5jaGlsZDIoKSk7CiAg
ICAgICAgIGNoaWxkcmVuLnNldENoaWxkMihjaGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgIGNo
aWxkcmVuLnNldENoaWxkMShFZGdlKHN0b3JhZ2UpKTsKKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hp
bGQxKHN0b3JhZ2UpOwogICAgICAgICBtX29wID0gUHV0QnlPZmZzZXQ7CiAgICAgICAgIG1fZmxh
Z3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KQEAgLTk0OSw5ICs5NDgsMTAgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgIGNhc2UgUGhh
bnRvbUFyZ3VtZW50czoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFBo
YW50b206CiAgICAgICAgIGNhc2UgTm9wOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCkudXNlS2luZCgp
ICE9IFVudHlwZWRVc2UgfHwgY2hpbGQyKCkudXNlS2luZCgpICE9IFVudHlwZWRVc2UgfHwgY2hp
bGQzKCkudXNlS2luZCgpICE9IFVudHlwZWRVc2U7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICByZXR1cm4gc2hvdWxkR2VuZXJhdGUoKTsKICAgICAgICAgfQpAQCAtOTk1LDcgKzk5NSw3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQtLTsKICAgICB9CiAg
ICAgCi0gICAgRWRnZSBjaGlsZDEoKQorICAgIEVkZ2UmIGNoaWxkMSgpCiAgICAgewogICAgICAg
ICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNo
aWxkcmVuLmNoaWxkMSgpOwpAQCAtMTAwOSwxMyArMTAwOSwxMyBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDFVbmNoZWNrZWQoKTsKICAgICB9CiAKLSAgICBF
ZGdlIGNoaWxkMigpCisgICAgRWRnZSYgY2hpbGQyKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
KG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hp
bGQyKCk7CiAgICAgfQogCi0gICAgRWRnZSBjaGlsZDMoKQorICAgIEVkZ2UmIGNoaWxkMygpCiAg
ICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAg
ICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMygpOwpAQCAtMTAzMyw2ICsxMDMzLDE3IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLm51bUNoaWxkcmVuKCk7CiAgICAgfQog
ICAgIAorICAgIFVzZUtpbmQgYmluYXJ5VXNlS2luZCgpCisgICAgeworICAgICAgICBBU1NFUlQo
Y2hpbGQxKCkudXNlS2luZCgpID09IGNoaWxkMigpLnVzZUtpbmQoKSk7CisgICAgICAgIHJldHVy
biBjaGlsZDEoKS51c2VLaW5kKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCaW5hcnlVc2VL
aW5kKFVzZUtpbmQgdXNlS2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZDEoKS51c2VL
aW5kKCkgPT0gdXNlS2luZCAmJiBjaGlsZDIoKS51c2VLaW5kKCkgPT0gdXNlS2luZDsKKyAgICB9
CisgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbigpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9wcmVkaWN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwx
MSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXR5cGVkZWYgQWxsb2Nh
dG9yPE5vZGU+IE5vZGVBbGxvY2F0b3I7CisjaWYgVVNFKEpTVkFMVUU2NCkKK3R5cGVkZWYgQWxs
b2NhdG9yPE5vZGUsIDExMj4gTm9kZUFsbG9jYXRvcjsKKyNlbHNlCit0eXBlZGVmIEFsbG9jYXRv
cjxOb2RlLCA4MD4gTm9kZUFsbG9jYXRvcjsKKyNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtOTYsOCArOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oRm9yd2FyZEludDMyVG9Eb3VibGUsIE5vZGVSZXN1bHROdW1i
ZXIpIFwKICAgICAvKiBVc2VkIHRvIHNwZWN1bGF0ZSB0aGF0IGEgZG91YmxlIHZhbHVlIGlzIGFj
dHVhbGx5IGFuIGludGVnZXIuICovXAogICAgIG1hY3JvKERvdWJsZUFzSW50MzIsIE5vZGVSZXN1
bHRJbnQzMikgXAotICAgIC8qIFVzZWQgdG8gcmVjb3JkIHBsYWNlcyB3aGVyZSB3ZSBtdXN0IGNo
ZWNrIGlmIGEgdmFsdWUgaXMgYSBudW1iZXIuICovXAotICAgIG1hY3JvKENoZWNrTnVtYmVyLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9w
ZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0
MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDUsNyArODA1LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRp
b246CiAgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKLSAgICAgICAgY2FzZSBDaGVja051
bWJlcjoKICAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDI4ICszOSwzMCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1HUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJl
dHVybkZvcm1hdCkKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoRWRnZSBlZGdl
LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFTU0VSVCghKG1fc3Rh
dGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+U3BlY0ludDMyKSk7CisgICAgCisgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAg
IEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJd
OwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewog
ICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFz
Q29uc3RhbnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAg
ICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0
YW50KTsKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlKSksIGdwcik7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uu
bm9kZSgpKSkgeworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAgICAgICAg
ICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAg
cmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdwcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5v
ZGUpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVP
Zk51bWJlckNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50
KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVt
YmVyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVl
KSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChp
c0pTQ29uc3RhbnQobm9kZSkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZh
bHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3Rh
bnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1
ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdw
cik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgp
ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CkBAIC0xMTcsMjcgKzExOSwyNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGUqCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxKU1ZhbHVlKEVkZ2UgZWRnZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAogICAg
IHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9u
ZTogewogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9k
ZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
KSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYg
KGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVP
ZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAg
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91
YmxlKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNE
b3VibGUsIHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgSlNW
YWx1ZSBqc1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2Rl
KCkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAg
ICB9CkBAIC04MDIsMTggKzgwNCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlCiB9CiAKIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgotR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoTm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0
dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChFZGdlIGVkZ2UsIERhdGFGb3JtYXQm
IHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIG5v
ZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUu
Zm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
bV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBLbm93
bkludDMyVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNJbnQzMikpOworICAgIHZhbHVlLmZp
bHRlcihTcGVjSW50MzIpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdp
c3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAg
ICBjYXNlIERhdGFGb3JtYXROb25lOiB7Ci0gICAgICAgIGlmICgobm9kZS0+aGFzQ29uc3RhbnQo
KSAmJiAhaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdERvdWJsZSkgeworICAgICAgICBpZiAoKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWlz
SW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0RG91YmxlKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAg
IHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFs
bG9jYXRlKCk7CkBAIC04MjEsMTAgKzgyNiwxMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUo
KTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoZWRn
ZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0lu
dDMyQ29uc3RhbnQobm9kZSkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAg
QVNTRVJUKGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2Rl
KCkpKSwgZ3ByKTsKICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIp
OwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAg
ICAgICByZXR1cm4gZ3ByOwpAQCAtODY1LDcgKzg3MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAg
ICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9u
KHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhncHIpLCBub2RlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciksIGRpcmVjdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAvLyBJZiAhc3RyaWN0IHdl
J3JlIGRvbmUsIHJldHVybi4KICAgICAgICAgaWYgKCFzdHJpY3QpIHsKQEAgLTkxMCwxMCArOTE1
LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKIAogICAgIGNh
c2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewotICAg
ICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiBpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsK
KyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgaXNJbnQzMkNvbnN0YW50KGVkZ2Uu
bm9kZSgpKSkgewogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3By
KTsKKyAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNv
bnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBE
YXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KQEAg
LTkzNiwzNSArOTQxLDM4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEkKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChO
b2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChFZGdl
IGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uKQogewotICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KG5v
ZGUsIHJldHVybkZvcm1hdCwgZGlyZWN0aW9uKTsKKyAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUlu
dEludGVybmFsPGZhbHNlPihlZGdlLCByZXR1cm5Gb3JtYXQsIGRpcmVjdGlvbik7CiB9CiAKLUdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKiBub2RlKQor
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KEVkZ2UgZWRnZSkK
IHsKICAgICBEYXRhRm9ybWF0IG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyOwotICAgIEdQUlJlZyBy
ZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8dHJ1ZT4obm9kZSwgbXVzdEJlRGF0YUZv
cm1hdEludGVnZXIsIEJhY2t3YXJkU3BlY3VsYXRpb24pOworICAgIEdQUlJlZyByZXN1bHQgPSBm
aWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8dHJ1ZT4oZWRnZSwgbXVzdEJlRGF0YUZvcm1hdEludGVn
ZXIsIEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgIFJFTEVBU0VfQVNTRVJUKG11c3RCZURhdGFG
b3JtYXRJbnRlZ2VyID09IERhdGFGb3JtYXRJbnRlZ2VyKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1GUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSogbm9k
ZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorRlBSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlRG91YmxlKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigi
U3BlY0RvdWJsZUAlZCAgICIsIG5vZGUtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRl
ZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIEFTU0VSVChl
ZGdlLnVzZUtpbmQoKSAhPSBLbm93bk51bWJlclVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVj
TnVtYmVyKSk7CisgICAgdmFsdWUuZmlsdGVyKFNwZWNOdW1iZXIpOworICAgIFNwZWN1bGF0ZWRU
eXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewotICAgICAgICBpZiAobm9kZS0+aGFz
Q29uc3RhbnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnBy
ZXREb3VibGVUb0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQo
bm9kZSkpKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFs
dWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSkpLCBncHIpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2so
Z3ByKTsKIApAQCAtOTcyLDkgKzk4MCw5IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZURvdWIKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBm
cHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzTnVt
YmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9
IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChu
b2RlKSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRn
ZS5ub2RlKCkpKSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUo
Z3ByLCBmcHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogCkBAIC0xMDM5LDcgKzEw
NDcsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7CiAKICAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwg
bm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3By
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgZWRn
ZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogCiAgICAgICAgIC8v
IEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1Zh
bHVlCiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdwcik7CkBAIC0xMTAyLDEz
ICsxMTEwLDE2IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAg
ICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSog
bm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQ2VsbChFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0Yo
IlNwZWNDZWxsQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVk
VHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgQVNTRVJUKGVk
Z2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2Vs
bCkpOworICAgIHZhbHVlLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlw
ZSA9IHZhbHVlLm1fdHlwZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
ZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dl
bmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSkgewpAQCAtMTEyMCw4ICsxMTMxLDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9j
YXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAgICAgICBpZiAo
ZWRnZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXND
ZWxsKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIp
OwpAQCAtMTEzNyw3ICsxMTQ4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbAogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFG
b3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGly
ZWN0aW9uKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZv
cm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTE1Myw3ICsxMTY0
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBH
UFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAg
ICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlciks
IGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAg
ICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xMTc3LDEzICsxMTg4LDEzIEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSogbm9kZSwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbGVhbihFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNCb29sQCVkICAg
Iiwgbm9kZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9z
dGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlw
ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dp
dGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKQEAgLTExOTUsOCArMTIwNiw4IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgCiAgICAgICAgIEdQ
UlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgp
KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2Rl
KTsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFs
dWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAg
IGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVmFsdWUpKSwgZ3ByKTsKQEAgLTEyMTMsNyArMTIyNCw3IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxh
dGlvbih0eXBlKSkgewogICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25D
aGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRp
b25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIG1f
aml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSks
IGdwcik7CiAgICAgICAgIH0KICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdw
ciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0xMjMyLDcgKzEyNDMsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7
CiAgICAgICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkpIHsKICAgICAgICAgICAg
IG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNl
KSksIGdwcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0
aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyks
IGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1
bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJl
ZyksIGRpcmVjdGlvbik7CiAgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9CiAgICAgICAg
IGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpA
QCAtMTI5MCwzNSArMTMwMSwyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
RXF1YWxpCiAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxW
YWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQ
dHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5t
X3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIp
LCBub2RlLT5jaGlsZDIoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAg
fQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAg
REZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDJHUFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVy
ZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVj
dHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiks
IG5vZGUtPmNoaWxkMSgpLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwg
bV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCAKQEAgLTEzMjYsMTQgKzEzMjgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0
cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
Lm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQ
UiksIG5vZGUtPmNoaWxkMigpLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY09iamVj
dCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwKICAgICAgICAgICAg
IG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCAKQEAgLTEzNjMsMjcgKzEzNjIsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdFRvT2JqZQogICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlm
IChtX3N0YXRlLmZvck5vZGUobGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ax
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJl
KHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwog
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1f
c3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hp
bGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCAKQEAgLTEzOTksMjcgKzEzOTIsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFu
Y2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsgCiAgICAgICAgIG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkp
OwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVj
Q2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAot
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBF
X0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5T
cGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jh
cnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0
dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAg
ICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwp
ICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQs
ICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIs
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCAKQEAgLTE0MzcsMTIgKzE0MjQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdFRvT2JqZQogICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBi
cmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3QgYmUgYSBjZWxsLiBDaGVjayBpZiB0aGF0IGlzIGVu
b3VnaCB0bwogICAgIC8vIHByb3ZlIHRoYXQgaXQgaXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVk
LgotICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2Vs
bCkgJiB+U3BlY090aGVyKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKHJpZ2h0Q2hpbGQsIFNw
ZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0
R1BSKTsKICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+
VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCi0gICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLm5vZGUoKSwKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJl
Z3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KFZhbHVlTnVsbCkpKTsKQEAgLTE0NzMsMjcgKzE0NjAsMjEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3Jh
cGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7
Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09i
amVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBC
YWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAot
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBF
X0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwg
bGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jh
cnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0
dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAg
ICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBE
RkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgc3RydWN0dXJl
R1BSLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBs
ZWZ0Q2hpbGQsIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTUwOSwyNyArMTQ5MCwyMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgLy8gV2Uga25vdyB0aGF0
IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYg
KG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewog
ICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0
aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGls
ZCkubV90eXBlICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BS
KSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQor
ICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiks
IHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVj
dHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0
cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1f
dHlwZSAmIFNwZWNDZWxsKSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJp
Z2h0Q2hpbGQsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAg
ICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9w
MkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNo
UHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAg
ICAgICAgc3RydWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCBy
aWdodENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTU0NCw3ICsxNTE5LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAgIC8vIFdlIGtub3cg
dGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3QgYmUgYSBjZWxsLiBD
aGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3ZlIHRoYXQgaXQgaXMgZWl0aGVy
IG51bGwgb3IgdW5kZWZpbmVkLgotICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQp
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkgJiB+U3BlY090aGVyKQorICAgIGlmICghbmVlZHNUeXBlQ2hl
Y2socmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQogICAgICAgICByaWdodE5vdENl
bGwubGluaygmbV9qaXQpOwogICAgIGVsc2UgewogICAgICAgICBqdW1wKG5vdFRha2VuLCBGb3Jj
ZUp1bXApOwpAQCAtMTU1Myw5ICsxNTI4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVBlZXBIb2xlT2JqZQogICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKICAg
ICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5k
ZWZpbmVkKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAot
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVy
LCBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KFZhbHVlTnVsbCkpKTsKICAgICB9CkBAIC0xNjA5LDcgKzE1ODMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JP
dGhlckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNlLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KEVkZ2Ug
bm9kZVVzZSkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlKTsKICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMTYxOSwyNyArMTU5MywyMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgaWYgKG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hw
b2ludCgpKTsKLQotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
VXNlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERG
R19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNl
LCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBz
dHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQ
Uik7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAg
ICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9k
ZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZUdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAKICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q4KApAQCAtMTY2MCwxMSArMTYyOSwxMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZt
X2ppdCk7CiAKLSAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKKyAgICBpZiAobmVlZHNU
eXBlQ2hlY2sobm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7CiAgICAgICAgIG1faml0
Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
VXNlLCAKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICB0eXBlQ2hlY2soCisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIFNwZWNDZWxsIHwgU3Bl
Y090aGVyLCBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CkBAIC0xNjc4LDEyICsx
NjQ3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTm9kZSogbm9kZSkKIHsKLSAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAg
ICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCksCi0gICAg
ICAgICAgICAhaXNPYmplY3RPck90aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgeworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogeworICAgICAgICBjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7Cisg
ICAgICAgIAorICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgdmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCks
IHJlc3VsdC5ncHIoKSk7CkBAIC0xNjkxLDcgKzE2NjEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdChOCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAg
IAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTE3MDMsOCAr
MTY3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKLSAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpIHsKKyAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKICAgICAgICAgaWYgKGlz
Qm9vbGVhblNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1
ZSk7CkBAIC0xNzE2LDM5ICsxNjg2LDQ5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dpY2FsTm90KE4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklY
TUU6IFdlIGNvdWxkIHJldXNlLCBidXQgb24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJl
Y292ZXJ5IHRvIHJlc3RvcmUgdGFnIChha2luIHRvIGFkZCkuCiAgICAgICAgIAogICAgICAgICBt
X2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC54b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHQu
Z3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZh
bHVlLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxl
cjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSkpOworICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2
YWx1ZS5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbGVhbiwgbV9qaXQuYnJhbmNoVGVz
dDY0KAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCks
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAgICAgIG1faml0
LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVz
dWx0LmdwcigpKTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRC
b29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgCi0gICAgR1BSUmVn
IGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKLSAgICBhcmcxLnVzZSgpOworICAgICAg
ICBhcmcxLnVzZSgpOwogICAgIAotICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsK
LSAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVG
YWxzZSkpLCByZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9q
aXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKKyAgICAgICAgbV9qaXQubW92ZShhcmcx
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9u
WmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7
CiAgICAgCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbChz
bG93Q2FzZSwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJn
MUdQUikpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93Q2FzZSwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3Vs
dEdQUiwgYXJnMUdQUikpOwogICAgIAotICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKLSAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaChFZGdlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4s
IGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2Jq
ZWN0T3JPdGhlckJyYW5jaChFZGdlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5k
ZXggbm90VGFrZW4pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSk7
CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0xNzU5LDIzICsxNzM5LDE5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICBpZiAobV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAg
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRj
aHBvaW50KCkpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5v
ZGVVc2UsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
VXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxh
dGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQ
dHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6Olplcm8sIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKIApAQCAtMTc5MSwx
MCArMTc2NywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAg
ICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAgaWYgKG5lZWRTcGVjdWxh
dGlvbkNoZWNrKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGVVc2UsIFNwZWNDZWxsIHwg
U3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0
VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoVmFsdWVOdWxsKSkpOworICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLCBtX2ppdC5icmFu
Y2g2NCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwogICAgIH0KICAg
ICBqdW1wKG5vdFRha2VuKTsKICAgICAKQEAgLTE4MDYsMTQgKzE3ODQsMTUgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBu
b2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS0+
bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCi0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJC
cmFuY2gobm9kZS0+Y2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgCi0gICAgICAgICAgICAhaXNP
YmplY3RPck90aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpKTsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNh
c2UgT2JqZWN0T3JPdGhlclVzZTogeworICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChu
b2RlLT5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7
Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7
CisgICAgICAgIAorICAgIGNhc2UgSW50MzJVc2U6CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSkgewogICAgICAg
ICAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KHRha2VuID09IG5leHRCbG9jaygpKSB7CkBAIC0xODM3LDU2ICsxODE2LDYyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICBjYXNlIFVudHlwZWRVc2U6CisgICAg
Y2FzZSBCb29sZWFuVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgCi0gICAgYm9vbCBwcmVkaWN0Qm9vbGVh
biA9IGlzQm9vbGVhblNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOwot
ICAgIAotICAgIGlmIChwcmVkaWN0Qm9vbGVhbikgewotICAgICAgICBpZiAoaXNCb29sZWFuU3Bl
Y3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IEJvb2xlYW5Vc2UpIHsKKyAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRha2VuID09
IG5leHRCbG9jaygpKSB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJs
ZXI6Olplcm87Ci0gICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAgICAg
ICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwotICAgICAgICAgICAgICAgIG5vdFRha2VuID0g
dG1wOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0Qmxv
Y2soKSkgeworICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6
WmVybzsKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAg
ICAgICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKKyAgICAgICAgICAgICAgICAgICAgbm90
VGFrZW4gPSB0bXA7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMih0cnVl
KSwgdGFrZW4pOwotICAgICAgICAgICAganVtcChub3RUYWtlbik7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKSksIG5vdFRha2VuKTsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoVGVz
dDMyKGNvbmRpdGlvbiwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMih0cnVlKSwgdGFrZW4pOworICAg
ICAgICAgICAgICAgIGp1bXAobm90VGFrZW4pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2Up
KSksIG5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5v
ZGUtPmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkpOwotICAgICAgICB9Ci0gICAgICAgIHZhbHVlLnVz
ZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNJbnQzMikgewotICAgICAg
ICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgbm90VGFr
ZW4pOwotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
dmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGFrZW4pOwotICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdHlwZUNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIFNwZWNCb29sZWFuLCBtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjSW50MzIpIHsKKyAgICAgICAgICAgICAgICBicmFuY2g2
NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBub3RUYWtlbik7CisgICAgICAg
ICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGFrZW4pOworICAgICAgICAgICAgfQog
ICAgIAotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNCb29s
ZWFuKSB7Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKSksIG5vdFRha2VuKTsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7Ci0gICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0Jvb2xlYW4pIHsKKyAg
ICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKSksIG5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOworICAgICAgICAgICAgfQogICAgIAot
ICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgIAotICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsK
LSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwor
ICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgIAotICAg
ICAgICBicmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFr
ZW4pOwotICAgICAgICBqdW1wKG5vdFRha2VuKTsKKyAgICAgICAgICAgIGJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtlbik7CisgICAgICAgICAgICBq
dW1wKG5vdFRha2VuKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobm9k
ZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAgICAgCi0gICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQpAQCAt
MjEzMSwxOSArMjExNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIENoZWNrTnVtYmVy
OiB7Ci0gICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0lu
dGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDEu
Z3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMS5n
cHIoKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwot
ICAgICAgICB9Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNvbXBp
bGVBZGQobm9kZSk7CkBAIC0yMTYyLDIyICsyMTM0LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFyaXRoRGl2
OiB7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
Yyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAg
ICAgICBjb21waWxlSW50ZWdlckFyaXRoRGl2Rm9yWDg2KG5vZGUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAg
IEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwotICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwg
cmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigp
LCBub2RlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBOdW1i
ZXJVc2U6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnBy
KCk7CisgICAgICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgICAgIG1f
aml0LmRpdkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNb2Q6IHsKQEAgLTIxODYsOCArMjE2
NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAK
ICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CkBAIC0yMjAxLDE4ICsyMTgwLDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAg
ICBtX2ppdC5hYnNEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5hYnNEb3VibGUob3AxLmZwcigp
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwg
bm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKQEAgLTIyMzEsMzcgKzIyMTcsNDQgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
ICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBkb25lOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
b3AxTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwg
b3AxLmZwcigpLCBvcDIuZnByKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
b3AxTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVMZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwg
b3AxLmZwcigpLCBvcDIuZnByKCkpOwogICAgICAgICAKLSAgICAgICAgLy8gb3AyIGlzIGVhdGhl
ciB0aGUgbGVzc2VyIG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgb3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/
IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgOiBNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTGVzc1RoYW5PckVxdWFsLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAg
ICAgICAvLyBvcDIgaXMgZWF0aGVyIHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlzIE5h
TgorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AyTGVzcyA9IG1faml0LmJyYW5j
aERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWwgOiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsLCBvcDEuZnBy
KCksIG9wMi5mcHIoKSk7CiAgICAgICAgIAotICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2Ug
ZG9uJ3Qga25vdyB3aGljaCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBh
ZGRpbmcgCi0gICAgICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4K
LSAgICAgICAgbV9qaXQuYWRkRG91YmxlKG9wMS5mcHIoKSwgb3AyLmZwcigpLCByZXN1bHQuZnBy
KCkpOwotICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgLy8g
VW5vcmRlcmVkIGNhc2UuIFdlIGRvbid0IGtub3cgd2hpY2ggb2Ygb3AxLCBvcDIgaXMgTmFOLiBN
YW51ZmFjdHVyZSBOYU4gYnkgYWRkaW5nIAorICAgICAgICAgICAgLy8gb3AxICsgb3AyIGFuZCBw
dXR0aW5nIGl0IGludG8gcmVzdWx0LgorICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKG9wMS5m
cHIoKSwgb3AyLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKICAgICAgICAgCi0gICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOwot
ICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJs
ZShvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAob3AxLmZw
cigpICE9IHJlc3VsdC5mcHIoKSkgewotICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVt
cCgpKTsKKyAgICAgICAgICAgIGlmIChvcDEuZnByKCkgIT0gcmVzdWx0LmZwcigpKSB7CisgICAg
ICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91
YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBvcDFMZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG9wMUxlc3MubGlu
aygmbV9qaXQpOwogICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgCi0gICAgICAgIGRvdWJsZVJlc3VsdChy
ZXN1bHQuZnByKCksIG5vZGUpOwotICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRvdWJsZVJl
c3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIEFyaXRoU3FydDogewpAQCAtMjYxNywxOCArMjYxMCwxOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHN3aXRjaCAo
YXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgY2hpbGQzKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IGNoaWxkMywgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKIAogICAgICAgICAgICAgR1BSUmVn
IHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkludDMyCi0gICAgICAgICAgICAg
ICAgJiYgIWlzSW50MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQzKS5tX3R5cGUp
KSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAg
ICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVSZWcpLCBjaGlsZDMsCi0gICAgICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVSZWcsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgaWYgKGFycmF5TW9k
ZS50eXBlKCkgPT0gQXJyYXk6OkludDMyKSB7CisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hF
Q0soCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlUmVnKSwgY2hpbGQzLCBT
cGVjSW50MzIsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZVJlZywgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMgJiYgSGVhcDo6
aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKQEAgLTI5MzEsMTAgKzI5MjQsMTEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSUmVnIHZh
bHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgPT0gQXJyYXk6OkludDMyICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlLT5jaGlsZDIoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
NjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpJbnQzMikgeworICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVj
SW50MzIsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkludDMyICYmIEhlYXA6OmlzV3JpdGVC
YXJyaWVyRW5hYmxlZCgpKSB7CkBAIC0yOTYyLDEzICsyOTU2LDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBGUFJSZWcgdmFs
dWVGUFIgPSB2YWx1ZS5mcHIoKTsKIAotICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFu
ZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQuCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9y
VW5vcmRlcmVkLCB2YWx1ZUZQUiwgdmFsdWVGUFIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIG5vZGUt
PmNoaWxkMigpLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hE
b3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVlRlBS
LCB2YWx1ZUZQUikpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwpAQCAtMzE3MSw3ICszMTYx
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewotICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAg
ICAvLyBJdCdzIHJlYWxseSBwcm9maXRhYmxlIHRvIHNwZWN1bGF0ZSBpbnRlZ2VyLCBzaW5jZSBp
dCdzIHJlYWxseSBjaGVhcCwKICAgICAgICAgICAgIC8vIGl0IG1lYW5zIHdlIGRvbid0IGhhdmUg
dG8gZG8gYW55IHJlYWwgd29yaywgYW5kIHdlIGVtaXQgYSBsb3QgbGVzcyBjb2RlLgogICAgICAg
ICAgICAgCkBAIC0zMTg2LDMwICszMTc3LDM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICAvLyBGSVhNRTogQWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgotICAgICAgICAK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICBjYXNlIFVudHlwZWRV
c2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAg
IAotICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAg
ICAgIAotICAgICAgICBvcDEudXNlKCk7CisgICAgICAgICAgICBvcDEudXNlKCk7CiAgICAgICAg
IAotICAgICAgICBpZiAoIShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAm
IH4oU3BlY051bWJlciB8IFNwZWNCb29sZWFuKSkpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9w
MUdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgICAg
ICAgICAgaWYgKCEobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNw
ZWNOdW1iZXIgfCBTcGVjQm9vbGVhbikpKQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3Ax
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChub3RQ
cmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0aXZlLCByZXN1bHRHUFIsIG9wMUdQUikp
OwotICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlv
blRvUHJpbWl0aXZlLCByZXN1bHRHUFIsIG9wMUdQUikpOworICAgICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2Fs
bGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKQEAgLTMyNTEsMTQgKzMyNDcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRF
WElOR19UWVBFUzogewogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wZXJhbmQodGhpcywgdXNlKTsKICAgICAgICAgICAgICAgICAgICAgRlBSUmVnIG9wRlBSID0g
b3BlcmFuZC5mcHIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3
ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwg
U3BlY1JlYWxOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3Vi
bGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwogICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZURvdWJsZShvcEZQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
Uiwgc2l6ZW9mKGRvdWJsZSkgKiBvcGVyYW5kSWR4KSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTMyNjYsMTAgKzMyNTgsMTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwogICAgICAgICAgICAgICAgICAgICBHUFJSZWcg
b3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIo
bm9kZS0+aW5kZXhpbmdUeXBlKCkpICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKHVzZSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhv
cEdQUiksIHVzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsIFNwZWNJbnQzMiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogb3BlcmFuZElkeCkpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTMzMTksMTQgKzMzMTIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnBy
KCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwot
ICAgICAgICAgICAgICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKHVzZSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVl
ZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50
bwotICAgICAgICAgICAgICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAg
QmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwg
b3BGUFIsIG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncygpLCB1c2UsIFNwZWNSZWFsTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hEb3VibGUoCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAg
bV9qaXQuYm94RG91YmxlKG9wRlBSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMzMzNCwxMCArMzMyMywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19U
WVBFUzogewogICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNl
KTsKICAgICAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAg
ICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5cGUoKSkgJiYgIWlzSW50MzJT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBl
LCBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRl
eGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAg
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwgU3BlY0ludDMyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlNjQob3BHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMzU1OSwyNCArMzU0OSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENvbnZlcnRUaGlzOiB7
Ci0gICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhp
c1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVl
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkp
IHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBPdGhlclVzZTogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwogICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsK
ICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAgICAgICBpZiAoIW5lZWRzVHlwZUNo
ZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjT3RoZXIpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZSh0aGlzVmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIG1faml0LmFu
ZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChWYWx1ZU51bGwpKSk7CisgICAgICAgICAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3Bl
Y090aGVyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxs
KSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbFRoaXNPYmplY3RGb3Io
bm9kZS0+Y29kZU9yaWdpbikpLCBzY3JhdGNoR1BSKTsKQEAgLTM1ODQsMzAgKzM1NzEsNDIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9u
KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgIGNhc2UgT2JqZWN0VXNl
OiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlz
VmFsdWUpOwogICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIo
KTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGls
ZDEoKSwgT2JqZWN0VXNlLAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0
aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdGhpc1ZhbHVl
R1BSID0gdGhpc1ZhbHVlLmdwcigpOwotICAgICAgICAKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydFRoaXMsIHJlc3VsdC5ncHIoKSwgdGhpc1ZhbHVl
R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgCisgICAgICAgICAgICBH
UFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db252ZXJ0VGhpcywgcmVzdWx0LmdwcigpLCB0aGlzVmFsdWVHUFIpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNzc2LDggKzM3NzUsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVS
ZWdzKCksIDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkg
eworCisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAg
IGNhc2UgQ2VsbFVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIGJhc2UpOwogICAgICAgICAgICAgCkBAIC0zNzkyLDIwICszNzkyLDI3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKLSAg
ICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7
CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIAot
ICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAg
ICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0
NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
cik7CisgICAgICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICAKLSAgICAgICAgY2FjaGVkR2V0
QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZp
ZXJOdW1iZXIoKSwgbm90Q2VsbCk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RD
ZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAg
ICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwg
bm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsKTsKICAgICAgICAgCisgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTM4MTQsOCArMzgyMSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVD
b3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCkpKSB7CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKIApAQCAtMzgzMywyMSArMzg0MSwyOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAg
ICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKIAotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAg
ICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
ICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVz
dDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdp
biwgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGws
IERvbnRTcGlsbCk7CisgICAgICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4s
IGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBE
b250U3BpbGwpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0KKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzg3MSwxMyAr
Mzg4Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVj
dHVyZTogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5pc1N1YnNldE9mKG5vZGUtPnN0cnVjdHVyZVNldCgpKQotICAgICAgICAgICAgJiYgaXNDZWxs
U3BlY3VsYXRpb24odmFsdWUubV90eXBlKSkgewotICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gbm9kZS0+b3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1
Y3R1cmUgPyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwogICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBkaXJlY3Rp
b24pOwogICAgICAgICAKQEAgLTM5NDIsNiArMzk1MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPSyA9IG1f
aml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKG9w
MS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobm9kZS0+
c3RydWN0dXJlKCkpKTsKICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogICAgICAgICBpc09L
LmxpbmsoJm1faml0KTsKKyNlbHNlCisgICAgICAgIHNwZWN1bGF0ZUNlbGwobm9kZS0+Y2hpbGQx
KCkpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTM5NDks
NiArMzk1OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZTogeworICAgICAgICBB
U1NFUlQoaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgIAogICAg
ICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVj
dHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAg
ICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKAogICAgICAgICAgICAgbm9kZS0+
Y29kZU9yaWdpbi5jb2RlT3JpZ2luT3duZXIoKSwKQEAgLTQyNzEsNyArNDI4Myw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFR5
cGVPZjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKQEAgLTQyODAsMTkgKzQyOTIsMjEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3QgZG9uZUp1bXBzOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwg
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IFN0cmluZ1VzZSk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RD
ZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVDZWxsKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2UodmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgaXNOb3RDZWxsKTsK
KyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQorICAg
ICAgICAgICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNo
aWxkMSgpLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKTsKIAotICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CiAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2g4KEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0
dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSk7Ci0g
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZSh2
YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBub3RTdHJpbmcpOworICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpCisgICAgICAgICAgICAgICAgREZH
X1RZUEVfQ0hFQ0soSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVj
U3RyaW5nLCBub3RTdHJpbmcpOwogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAg
ICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFN0cmluZ1VzZSkgewog
ICAgICAgICAgICAgICAgIG5vdFN0cmluZy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwogICAg
ICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKQEAgLTQzMDIsNyAr
NDMxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkgeworICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKICAgICAgICAg
ICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBub3ROdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVl
R1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLm51bWJl
clN0cmluZygpKSwgcmVzdWx0R1BSKTsKQEAgLTQ3NzEsNiArNDc4NSw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFBoYW50b206
CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1faml0LmdyYXBoKCksIG5vZGUsIHNw
ZWN1bGF0ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKICAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgogICAgICAgICBub1Jlc3VsdChub2RlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDE0ICsxMDgsMTQgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21w
aWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5m
byhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JF
eGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
b3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKIH0KIApAQCAtMTIzLDcgKzEyMyw3
IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnMKIHsKICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKCk7
Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+
Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2Nh
bkV4aXQpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9m
T1NSRXhpdHMoKTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbygpOwogICAgIG1faml0LmNvZGVC
bG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQu
Z3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0
cmVhbS0+c2l6ZSgpKSk7CkBAIC0xMzIsNyArMTMyLDcgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRl
ciBTcGVjdWxhdGl2ZUpJVDo6cwogCiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICByZXR1cm4gc3BlY3VsYXRpb25D
aGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAKQEAgLTE0MCwx
NCArMTQwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAg
IEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgbV9q
aXQuYXBwZW5kRXhpdEluZm8oanVtcHNUb0ZhaWwpOwogICAgIG1faml0LmNvZGVCbG9jaygpLT5h
cHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5t
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6
ZSgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNw
ZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBz
VG9GYWlsKTsKIH0KIApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnRO
b2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8
IG1fY2FuRXhpdCk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVj
b3ZlcnkocmVjb3ZlcnkpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0ZhaWwpOwog
ICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1
ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5v
ZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZT
cGVjdWxhdGlvblJlY292ZXJpZXMoKSkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2Us
IEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3Bl
Y3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hl
Y2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292
ZXJ5KTsKIH0KIApAQCAtMTc0LDExICsxNzQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeAogICAgICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoKTsK
IH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2UgZWRnZSwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnksIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVTb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSwgZGly
ZWN0aW9uKTsKK30KKwogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFs
dWVTb3VyY2UsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAg
ICByZXR1cm4gMDsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1
cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oSklUQ29tcGlsZXI6
Okp1bXBMaXN0KCkpOwogICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdC5jb2RlQmxvY2soKS0+b3Ny
RXhpdCgKICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdCgK
QEAgLTI4MCwxNCArMjg1LDE0IEBAIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0
aXZlSkkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJl
Y292ZXJ5KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3Vy
cmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlw
ZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwogICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCh2
YWx1ZVJlY292ZXJ5KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2Rl
KiBub2RlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsLCBjb25z
dCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlv
bkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBzVG9GYWlsKTsKICAgICBjb252
ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7CiB9CkBAIC0zMDAsOSArMzA1
LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9GYWlsKTsK
IH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2UgZWRnZSwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAg
IHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgZWRnZS5ub2RlKCksIGp1bXBU
b0ZhaWwsIGRpcmVjdGlvbik7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdz
LCBOb2RlKiBub2RlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8
IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAg
ICAgZGF0YUxvZ0YoIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAjZW5kaWYK
QEAgLTMxNCwxMyArMzI0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1
bGF0aXYKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9kZVVzZSkK
IHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2Rl
LT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y2FuRXhpdCk7CiAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1
ZVJlZ3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1
ZVJlZ3MsIE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5F
eGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhp
dCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVjdWxh
dGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOwogI2VuZGlmCkBAIC0zMzAsNiArMzQwLDI2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKICAgICBtX2NvbXBpbGVP
a2F5ID0gZmFsc2U7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhKU1ZhbHVl
U291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91
Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCit7CisgICAgQVNTRVJUKG5lZWRz
VHlwZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCkpOworICAgIG1fc3RhdGUuZm9yTm9k
ZShlZGdlKS5maWx0ZXIodHlwZXNQYXNzZWRUaHJvdWdoKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIHNvdXJjZSwgZWRnZSwganVtcFRvRmFpbCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQoreworICAgIHR5
cGVDaGVjayhzb3VyY2UsIGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFpbCk7Cisg
ICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOworfQorCit2b2lk
IFNwZWN1bGF0aXZlSklUOjp0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRn
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgdHlw
ZUNoZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKTsKKyAg
ICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgY29udmVydExh
c3RPU1JFeGl0VG9Gb3J3YXJkKCk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFkZFNsb3dQ
YXRoR2VuZXJhdG9yKFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoR2VuZXJh
dG9yKQogewogICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzLmFwcGVuZChzbG93UGF0aEdlbmVyYXRv
ci5sZWFrUHRyKCkpOwpAQCAtODcyLDkgKzkwMiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFy
cmF5aWZ5KE5vZGUqIG5vZGUKICAgICBhcnJheWlmeShub2RlLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSk7CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZSog
bm9kZSkKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoRWRnZSBlZGdlKQogewot
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZv
W3ZpcnR1YWxSZWdpc3Rlcl07CiAgICAgCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkpIHsKQEAgLTg4OCw3ICs5MTgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9y
YWdlKE5vZGUqCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE11c3QgYmUgYSBjZWxs
OyBmaWxsIGl0IGFzIGEgY2VsbCBhbmQgdGhlbiByZXR1cm4gdGhlIHBvaW50ZXIuCi0gICAgICAg
IHJldHVybiBmaWxsU3BlY3VsYXRlQ2VsbChub2RlLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKGVkZ2UsIEJhY2t3YXJkU3BlY3VsYXRpb24p
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZTogewpAQCAtODk4
LDcgKzkyOCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZSoKICAg
ICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmaWxsU3BlY3VsYXRl
Q2VsbChub2RlLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgcmV0dXJuIGZpbGxTcGVj
dWxhdGVDZWxsKGVkZ2UsIEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgIH0KIH0KIApAQCAtMTUw
OSwyMCArMTUzOSwyMCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFu
CiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVy
ZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAgIEFTU0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50
KCkgPT0gMSk7CiAKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICBpZiAo
bm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkKICAgICAgICAgICAgIGNvbXBpbGVQZWVw
SG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uKTsKLSAgICAgICAg
ZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNCaW5h
cnlVc2VLaW5kKE51bWJlclVzZSkpCiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVEb3VibGVC
cmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgZG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgZWxzZSBp
ZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNw
ZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5k
KFN0cmluZ1VzZSkpIHsKICAgICAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3Vs
ZFNwZWN1bGF0ZU9iamVjdCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2lu
ZChPYmplY3RVc2UpKQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFs
aXR5KG5vZGUsIGJyYW5jaE5vZGUpOwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVj
dWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBP
YmplY3RPck90aGVyVXNlKQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRv
T2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgYnJh
bmNoTm9kZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVP
YmplY3QoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBPYmplY3RPck90aGVyVXNlICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RV
c2UpCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVy
RXF1YWxpdHkobm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMSgpLCBicmFuY2hOb2RlKTsKICAg
ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVC
cmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwpAQCAtMTY0NSw2
ICsxNjc1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIAog
ICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLnNpemUo
KTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2tbbV9p
bmRleEluQmxvY2tdOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgbV9jYW5FeGl0ID0g
bV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpOworI2VuZGlmCisgICAgICAgIGJvb2wgc2hvdWxkRXhl
Y3V0ZUVmZmVjdHMgPSBtX3N0YXRlLnN0YXJ0RXhlY3V0aW5nKG1fY3VycmVudE5vZGUpOwogICAg
ICAgICBtX2ppdC5zZXRGb3JOb2RlKG1fY3VycmVudE5vZGUpOwogICAgICAgICBtX2NvZGVPcmln
aW5Gb3JPU1IgPSBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luOwogICAgICAgICBpZiAoIW1fY3Vy
cmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKQEAgLTE3NTksNyArMTc5Myw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNlbmRpZgogICAgICAgICAKICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFic3RyYWN0IHN0YXRlIGlzIHJlbWF0ZXJpYWxp
emVkIGZvciB0aGUgbmV4dCBub2RlLgotICAgICAgICBtX3N0YXRlLmV4ZWN1dGUobV9pbmRleElu
QmxvY2spOworICAgICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVmZmVjdHMpCisgICAgICAgICAgICBt
X3N0YXRlLmV4ZWN1dGVFZmZlY3RzKG1faW5kZXhJbkJsb2NrKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChtX2N1cnJlbnROb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwpAQCAtMTkwNiwxMyArMTk0MSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlRG91YmxlUHV0QnlWCiAKICAgICBGUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5mcHIo
KTsKICAgICAKLSAgICBpZiAoIWlzUmVhbE51bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9k
ZShjaGlsZDMpLm1fdHlwZSkpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3YXkgb2Yg
cHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KLSAgICAgICAg
Ly8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICBtX2ppdC5i
cmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZh
bHVlUmVnLCB2YWx1ZVJlZykpOwotICAgIH0KKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoKSwgY2hpbGQzLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgbV9qaXQuYnJh
bmNoRG91YmxlKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQsIHZhbHVlUmVnLCB2YWx1ZVJlZykpOwogICAgIAogICAgIGlmICghbV9jb21waWxl
T2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjEwNCw3ICsyMTM2LDggQEAgR2VuZXJhdGVkT3Bl
cmFuZFR5cGUgU3BlY3VsYXRpdmVKSVQ6OmNoZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVUb0ludDMyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKQEAgLTIxMTIsMTQ1ICsyMTQ1LDE2MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFsdWVUb0ludDMyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKLSAgICAgICAgU3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQu
bW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmFuZDMyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIAotICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgc3dpdGNoIChjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOiB7
Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgbV9q
aXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlLCBvcDEuZm9ybWF0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZERvdWJsZTogewotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgRG91YmxlVXNlKSk7IC8vIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgd2lsbCBhc3NlcnQgdGhhdCB0aGlzIGlzIGEgZG91YmxlIHVzZS4gV2UgZm9y
Y2UgaXQgdG8gdGhpbmsgdGhhdCBpdCB3YXMgYSBkb3VibGUgdXNlLCBzaW5jZSB3ZSBhcmUgaW5m
ZXJyaW5nIHRoYXQgd2Ugb3VnaHQgdG8gZW1pdCBhIGRvdWJsZSB1c2UgcXVpdGUgbGF0ZS4KLSAg
ICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlc3Vs
dC5ncHIoKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VHJ1bmNhdGVkVG9JbnRlZ2Vy
ID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxl
cjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgY2Fz
ZSBOb3RDZWxsVXNlOiB7CisgICAgICAgIHN3aXRjaCAoY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9J
bnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgIGNhc2UgR2VuZXJhdGVkT3Bl
cmFuZEludGVnZXI6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSwgQmFja3dhcmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsK
KyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG9wMS5mb3JtYXQoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVy
YW5kRG91YmxlOiB7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAg
ICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCks
IEJhY2t3YXJkU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
ICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRv
SW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklU
Q29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgCi0gICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIs
IHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBn
cHIsIGZwcikpOwogCi0gICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBub2RlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRKU1ZhbHVlOiB7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0
KGdwciwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBHZW5lcmF0ZWRPcGVyYW5kSlNWYWx1ZTogeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogCi0gICAg
ICAgIEdQUlJlZyBncHIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOwotICAgICAg
ICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7Ci0KLSAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUt
PmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IG9wMS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZw
cigpOworCisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBncHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29u
dmVydGVkOworCisgICAgICAgICAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCks
IFNwZWNOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBOdW1iZXJVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZUNoZWNrKAorICAg
ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIFNw
ZWNOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
bV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiBTcGVjQ2VsbCkKLSAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIp
LCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBn
cHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgICAgICAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGdwciksIG5v
ZGUtPmNoaWxkMSgpLCB+U3BlY0NlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0NjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Olpl
cm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBjZWxsOiBzbyB0cnVlIHR1cm5zIGludG8gMSBh
bmQgYWxsIGVsc2UgdHVybnMgaW50byAwLgotICAgICAgICAgICAgICAgIG1faml0LmNvbXBhcmU2
NChKSVRDb21waWxlcjo6RXF1YWwsIGdwciwgVHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIHJlc3Vs
dEdwcik7Ci0gICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwor
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50
byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCisgICAgICAgICAgICAgICAgICAgIG1faml0
LmNvbXBhcmU2NChKSVRDb21waWxlcjo6RXF1YWwsIGdwciwgVHJ1c3RlZEltbTMyKFZhbHVlVHJ1
ZSksIHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9q
aXQuanVtcCgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpc051bWJlci5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICAv
LyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNW
YWx1ZQotICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsKLSAgICAgICAgdW5ib3hE
b3VibGUocmVzdWx0R3ByLCBmcHIpOworICAgICAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBo
ZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoZ3ByLCByZXN1bHRHcHIpOworICAgICAgICAgICAgdW5ib3hEb3VibGUocmVzdWx0
R3ByLCBmcHIpOwogCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOwotICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7CisgICAgICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0
b0ludDMyLCByZXN1bHRHcHIsIGZwcik7CisgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdwcik7CiAKLSAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAg
IGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRy
KGdwciwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Cisg
ICAgICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHIsIHJlc3VsdEdwcik7CiAKLSAg
ICAgICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGNvbnZlcnRlZC5saW5r
KCZtX2ppdCk7CiAjZWxzZQotICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBjaGls
ZE5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgIE5vZGUqIGNo
aWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBjaGlsZE5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAg
ICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CiAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOwotICAg
ICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdwciA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBjb252ZXJ0ZWQ7Ci0KLSAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0SlNJbnRlZ2VyKQotICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCBy
ZXN1bHRHcHIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEdQUlJlZyB0YWdHUFIgPSBv
cDEudGFnR1BSKCk7Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKLSAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOwotICAgICAgICAgICAgRlBSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
Y29udmVydGVkOwogCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSk7Ci0KLSAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRh
Z0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKKyAgICAg
ICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcikK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQ
UigpOworICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOworICAgICAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOworICAgICAgICAgICAgICAgIEZQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworCisgICAgICAgICAgICAg
ICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFn
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
TnVtYmVyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSAmIFNwZWNDZWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVf
Q0hFQ0soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnR1BSLCBw
YXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2VsbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gSXQn
cyBub3QgYSBjZWxsOiBzbyB0cnVlIHR1cm5zIGludG8gMSBhbmQgYWxsIGVsc2UgdHVybnMgaW50
byAwLgotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Jvb2xlYW4gPSBt
X2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkJvb2xlYW5UYWcpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlc3VsdEdwcik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90
IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8gMC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQm9vbGVhbiA9IG1f
aml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Qm9vbGVhblRhZykpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb252
ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpc0Jvb2xlYW4ubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlzQm9vbGVhbi5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb252
ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHVuYm94RG91YmxlKHRh
Z0dQUiwgcGF5bG9hZEdQUiwgZnByLCBzY3JhdGNoLmZwcigpKTsKKyAgICAgICAgICAgICAgICB1
bmJveERvdWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CiAKLSAg
ICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3VsdEdwciwgZnByKTsKLSAgICAgICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOworICAgICAgICAgICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKIAotICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVt
cCgpKTsKIAotICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAg
IG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAgICBpc0lu
dGVnZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQ
UiwgcmVzdWx0R3ByKTsKIAotICAgICAgICAgICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICB9CiAjZW5kaWYKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHcHIsIG5vZGUpOwor
ICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHcHIsIG5vZGUpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZFR5cGVVbmtu
b3duOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZFR5
cGVVbmtub3duOgorICAgIAorICAgIGNhc2UgQm9vbGVhblVzZTogeworICAgICAgICBTcGVjdWxh
dGVCb29sZWFuT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tb3Zl
KG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQuYW5kMzIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgCisgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQogfQogCkBAIC0yNTM4LDQ5ICsy
NTg4LDY0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAg
ICAgbV9qaXQubW92ZShJbW0zMih0b0ludDMyKGQpKSwgc2NyYXRjaFJlZyk7CiAgICAgICAgIHZh
bHVlLmFkb3B0KHNjcmF0Y2gpOwogICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7Ci0gICAg
fSBlbHNlIGlmICh2YWx1ZVVzZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcg
PSBzY3JhdGNoLmdwcigpOwotICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT3AuZ3ByKCksIHNjcmF0
Y2hSZWcpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAg
ICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwotICAgICAgICAgICAgY29tcGlsZUNsYW1w
SW50ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFs
dWUuYWRvcHQoc2NyYXRjaCk7Ci0gICAgICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsKLSAgICB9
IGVsc2UgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVs
ZW1lbnRTaXplID09IDEpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3Ao
dGhpcywgdmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
ICAgICBGUFJUZW1wb3JhcnkgZmxvYXRTY3JhdGNoKHRoaXMpOwotICAgICAgICBGUFJSZWcgZnBy
ID0gdmFsdWVPcC5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAg
ICAgICAgY29tcGlsZUNsYW1wRG91YmxlVG9CeXRlKG1faml0LCBncHIsIGZwciwgZmxvYXRTY3Jh
dGNoLmZwcigpKTsKLSAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKLSAgICAgICAgdmFsdWVH
UFIgPSBncHI7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2
YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKLSAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7Ci0gICAgICAgIEdQUlJlZyBn
cHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9
IG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwsIGZwciwgZnBy
KTsKLSAgICAgICAgbV9qaXQueG9yUHRyKGdwciwgZ3ByKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZml4ZWQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIG5vdE5hTi5saW5rKCZtX2pp
dCk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVkOwotICAgICAgICBpZiAo
c2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQotICAgICAgICAgICAgZmFpbGVkID0gbV9q
aXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6
QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhaWxl
ZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9VaW50MzIoZnByLCBncHIsIE1hY3JvQXNz
ZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKLSAgICAgICAgCi0gICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChmYWlsZWQsIHRoaXMsIHRvSW50MzIsIGdwciwg
ZnByKSk7Ci0KLSAgICAgICAgZml4ZWQubGluaygmbV9qaXQpOwotICAgICAgICB2YWx1ZS5hZG9w
dChyZXN1bHQpOwotICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgc3dpdGNoICh2YWx1
ZVVzZS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CisgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5n
cHIoKSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3Vu
ZGluZykgeworICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAg
ICAgICAgICAgICBjb21waWxlQ2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOworICAgICAg
ICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAg
aWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2go
dGhpcyk7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7CisgICAg
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBj
b21waWxlQ2xhbXBEb3VibGVUb0J5dGUobV9qaXQsIGdwciwgZnByLCBmbG9hdFNjcmF0Y2guZnBy
KCkpOworICAgICAgICAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgdmFsdWVHUFIgPSBncHI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CisgICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJS
ZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVz
dWx0LmdwcigpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9
IG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwsIGZwciwgZnBy
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC54b3JQdHIoZ3ByLCBncHIpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZpeGVkID0gbV9qaXQuanVtcCgpOworICAgICAgICAg
ICAgICAgIG5vdE5hTi5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVkOworICAgICAgICAgICAgICAgIGlmIChz
aWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgICAgICAgICAgICAgIGZhaWxl
ZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3Nl
bWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1Vp
bnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbChmYWlsZWQsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZml4ZWQubGluaygmbV9qaXQpOworICAgICAgICAgICAg
ICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisgICAgCiAgICAg
QVNTRVJUX1VOVVNFRCh2YWx1ZUdQUiwgdmFsdWVHUFIgIT0gcHJvcGVydHkpOwogICAgIEFTU0VS
VCh2YWx1ZUdQUiAhPSBiYXNlKTsKICAgICBBU1NFUlQodmFsdWVHUFIgIT0gc3RvcmFnZVJlZyk7
CkBAIC0yNzIyLDggKzI3ODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFu
Y2VPZkZvCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKE5vZGUqIG5v
ZGUpCiB7Ci0gICAgaWYgKCghIShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWND
ZWxsKSAmJiAhIShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVj
Q2VsbCkpCi0gICAgICAgIHx8IG5vZGUtPmNoaWxkMSgpLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0g
MSkgeworICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgewog
ICAgICAgICAvLyBJdCBtaWdodCBub3QgYmUgYSBjZWxsLiBTcGVjdWxhdGUgbGVzcyBhZ2dyZXNz
aXZlbHkuCiAgICAgICAgIC8vIE9yOiBpdCBtaWdodCBvbmx5IGJlIHVzZWQgb25jZSAoaS5lLiBi
eSB1cyksIHNvIHdlIGdldCB6ZXJvIGJlbmVmaXQKICAgICAgICAgLy8gZnJvbSBzcGVjdWxhdGlu
ZyBhbnkgbW9yZSBhZ2dyZXNzaXZlbHkgdGhhbiB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8uCkBAIC0y
OTYxLDkgKzMwMjUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8o
TgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUqIG5vZGUpCiB7Ci0gICAg
aWYgKG1faml0LmdyYXBoKCkuYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAg
IHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewog
ICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7Ci0g
ICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9m
SW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKQEAgLTI5NzksNyArMzA0NCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50
MzIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKQEAg
LTMwMjEsOCArMzA4Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSog
bm8KICAgICAgICAgaW50ZWdlclJlc3VsdChncHJSZXN1bHQsIG5vZGUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgICAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVy
RXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpIHsKKyAgICAKKyAgICBjYXNlIE51bWJlclVzZTogewogICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CkBAIC0zMDM0LDIyICszMDk5LDI2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgZG91YmxlUmVz
dWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBp
ZiAobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCkgeworICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRV
c2U6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7CiAg
ICAgICAgIGNvbXBpbGVWYWx1ZUFkZChub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICAKLSAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5ZXQuIDotKAotICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJpdGhTdWIoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5k
KCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnQzMl90IGlt
bTIgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7
CisgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5j
aGlsZDIoKS5ub2RlKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
IAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2Rl
RmxhZ3MoKSkpIHsKQEAgLTMwNjksNyArMzEzOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGlmIChp
c051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGlu
dDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgICAgICAKQEAgLTMwOTcsMjAgKzMxNjYsMjkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgICAgICAKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOwotICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICBj
YXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwogCi0gICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgRlBSUmVnIHJlZzIgPSBv
cDIuZnByKCk7Ci0gICAgbV9qaXQuc3ViRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOworICAgICAgICBGUFJSZWcgcmVnMiA9
IG9wMi5mcHIoKTsKKyAgICAgICAgbV9qaXQuc3ViRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5m
cHIoKSk7CiAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBcml0aE5lZ2F0ZShOb2RlKiBub2RlKQogewotICAgIGlmIChtX2ppdC5ncmFwaCgp
Lm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApAQCAtMzEyOCwxNyArMzIwNiwyNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdhdGUoCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgbV9qaXQu
bmVnYXRlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKLQotICAgIGRvdWJsZVJlc3Vs
dChyZXN1bHQuZnByKCksIG5vZGUpOworICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm5lZ2F0
ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIAorICAgICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFyaXRoTXVsKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkubXVsU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNl
S2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwpAQCAtMzE2OSwxNyArMzI1NiwyNSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQXJpdGhNdWwoTm9kCiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdw
cigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEsIG9wMik7Ci0KLSAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICBG
UFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKICAgICAgICAgCi0gICAgbV9qaXQubXVsRG91YmxlKHJl
ZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOworICAgICAgICAKKyAgICAg
ICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZw
cigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgIAorICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBu
b2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCi0gICAgZG91YmxlUmVzdWx0
KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogI2lmIENQVShY
ODYpIHx8IENQVShYODZfNjQpCkBAIC0zMjg5LDI1ICszMzg0LDMzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJbnRlZ2VyQXJpdGgKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFyaXRoTW9kKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKQotICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBz
d2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAg
ICAgICAgY29tcGlsZVNvZnRNb2R1bG8obm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIAotICAgIEZQUlJlZyBvcDFG
UFIgPSBvcDEuZnByKCk7Ci0gICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5mcHIoKTsKKyAgICAgICAg
RlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKKyAgICAgICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5m
cHIoKTsKICAgICAgICAgCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKICAgICAgICAgCi0gICAgRlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLQotICAgIGNh
bGxPcGVyYXRpb24oZm1vZEFzREZHT3BlcmF0aW9uLCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3Ay
RlBSKTsKKyAgICAgICAgRlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAg
IGNhbGxPcGVyYXRpb24oZm1vZEFzREZHT3BlcmF0aW9uLCByZXN1bHQuZnByKCksIG9wMUZQUiwg
b3AyRlBSKTsKICAgICAgICAgCi0gICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7
CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIGNvbXBhcmUgaXMgZnVzZWQgd2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgpA
QCAtMzMxNiwzMyArMzQxOSwzMyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUq
IG5vZGUsCiAgICAgaWYgKGNvbXBpbGVQZWVwSG9sZUJyYW5jaChub2RlLCBjb25kaXRpb24sIGRv
dWJsZUNvbmRpdGlvbiwgb3BlcmF0aW9uKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKElu
dDMyVXNlKSkgewogICAgICAgICBjb21waWxlSW50ZWdlckNvbXBhcmUobm9kZSwgY29uZGl0aW9u
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkgeworCisgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7
CiAgICAgICAgIGNvbXBpbGVEb3VibGVDb21wYXJlKG5vZGUsIGRvdWJsZUNvbmRpdGlvbik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
Q29tcGFyZUVxKSB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
U3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7Cisg
ICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nVXNlKSkgewogICAgICAgICAg
ICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUobm9kZSwgY29uZGl0aW9uLCBvcGVy
YXRpb24pOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGls
ZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChu
b2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkgewogICAgICAgICAgICAgY29tcGlsZU9i
amVjdEVxdWFsaXR5KG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9i
amVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkp
IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UgJiYg
bm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UpIHsKICAgICAgICAg
ICAgIGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShub2RlLT5jaGlsZDEoKSwg
bm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVj
dE9yT3RoZXIoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsK
KyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNl
ICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKICAgICAgICAgICAg
IGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShub2RlLT5jaGlsZDIoKSwgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0z
NDMwLDcgKzM1MzMsOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JD
CiAKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2RlKiBub2RlKQogewot
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNl
S2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJ
bmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNo
SW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICBOb2RlKiBicmFuY2hOb2Rl
ID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2Nr
KTsKQEAgLTM0NDQsOCArMzU0OCw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJp
Y3RFcShOb2QKICAgICAgICAgY29tcGlsZUludGVnZXJDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgCisgICAgY2FzZSBOdW1iZXJVc2U6IHsKICAg
ICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2go
KTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewogICAgICAg
ICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10t
PmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CkBAIC0zNDU5LDEwICszNTYzLDEyIEBAIGJvb2wgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAgICAgY29tcGlsZURvdWJsZUNv
bXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpIHx8IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkK
KyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdVc2U6IHsKICAgICAgICAgcmV0dXJuIG5vblNwZWN1
bGF0aXZlU3RyaWN0RXEobm9kZSk7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkp
IHsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgT2JqZWN0VXNlOiB7CiAgICAgICAgIHVuc2ln
bmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAg
IGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgIE5vZGUq
IGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJ
bmRleEluQmxvY2spOwpAQCAtMzQ3Niw4ICszNTgyLDE1IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIHJldHVybiBub25TcGVj
dWxhdGl2ZVN0cmljdEVxKG5vZGUpOworICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsK
KyAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQpAQCAtMzgxNSw2
ICszOTI4LDI0MSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVyCiAg
ICAgcmV0dXJuIHRlbXBvcmFyeS5ncHIoKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlSW50MzIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwg
U3BlY0ludDMyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIChTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCh0aGlzLCBlZGdlKSkuZ3ByKCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZU51bWJlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdl
LCBTcGVjTnVtYmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5k
IG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wZXJhbmQuZ3ByKCksIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgdHlwZUNoZWNrKAorICAgICAgICBKU1ZhbHVl
UmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgU3BlY051bWJlciwKKyAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcGVyYW5kLmdwcigpLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOworI2Vs
c2UKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgZWRnZSk7CisgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBv
cGVyYW5kLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICB0
eXBlQ2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wMS5vcGVy
YW5kKCkpLCBlZGdlLCBTcGVjTnVtYmVyLAorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcGVyYW5kLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6TG93ZXN0VGFnKSkpOworICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisjZW5kaWYK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlUmVhbE51bWJlcihFZGdlIGVkZ2Up
Cit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjUmVhbE51bWJlcikpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wZXJhbmQodGhp
cywgZWRnZSk7CisgICAgRlBSUmVnIGZwciA9IG9wZXJhbmQuZnByKCk7CisgICAgREZHX1RZUEVf
Q0hFQ0soCisgICAgICAgIEpTVmFsdWVSZWdzKCksIGVkZ2UsIFNwZWNSZWFsTnVtYmVyLAorICAg
ICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgZnByLCBmcHIpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhlZGdlLCBTcGVjQm9vbGVhbikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAoU3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQodGhpcywgZWRnZSkpLmdwcigpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVDZWxsKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlw
ZUNoZWNrKGVkZ2UsIFNwZWNDZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIChTcGVj
dWxhdGVDZWxsT3BlcmFuZCh0aGlzLCBlZGdlKSkuZ3ByKCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhlZGdlLCBTcGVjT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CisgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCBTcGVjT2JqZWN0LCBt
X2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3BlcmFuZC5ncHIoKSwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoRWRnZSBlZGdlKQor
eworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09iamVjdCB8IFNwZWNPdGhlcikp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMs
IGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CisgICAgR1BSUmVnIGdwciA9IG9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBERkdfVFlQ
RV9DSEVDSygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsICh+U3Bl
Y0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGdw
ciwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAg
ICBub3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2soZWRnZSwgU3Bl
Y0NlbGwgfCBTcGVjT3RoZXIpKSB7CisgICAgICAgIG1faml0Lm1vdmUoZ3ByLCB0ZW1wR1BSKTsK
KyAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0
VW5kZWZpbmVkKSwgdGVtcEdQUik7CisgICAgICAgIAorICAgICAgICB0eXBlQ2hlY2soCisgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAg
ICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgdGVtcEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKKyAgICB9CisgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisj
ZWxzZQorICAgIEdQUlJlZyB0YWdHUFIgPSBvcGVyYW5kLnRhZ0dQUigpOworICAgIEdQUlJlZyBw
YXlsb2FkR1BSID0gb3BlcmFuZC5wYXlsb2FkR1BSKCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm90Q2VsbCA9CisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgKH5T
cGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKKyAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2so
ZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7CisgICAgICAgIG1faml0Lm1vdmUodGFnR1BS
LCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHRlbXBHUFIp
OworICAgICAgICAKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
dGFnR1BSLCBwYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisg
ICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHRlbXBHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOworICAgIH0KKyAgICBkb25lLmxpbmsoJm1f
aml0KTsKKyNlbmRpZgorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmco
RWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1N0cmluZykp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcGVyYW5k
KHRoaXMsIGVkZ2UpOworICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVlUmVncyhv
cGVyYW5kLmdwcigpKSwgZWRnZSwgU3BlY1N0cmluZywgbV9qaXQuYnJhbmNoUHRyKAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKG9wZXJhbmQuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVOb3RDZWxsKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNr
KGVkZ2UsIH5TcGVjQ2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBKU1ZhbHVlT3Bl
cmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJh
bmQuZ3ByKCkpLCBlZGdlLCB+U3BlY0NlbGwsCisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpaZXJvLCBvcGVyYW5kLmdwcigpLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpKTsKKyNlbHNlCisgICAgdHlwZUNoZWNrKAorICAgICAgICBKU1ZhbHVl
UmVncyhvcGVyYW5kLnRhZ0dQUigpLCBvcGVyYW5kLnBheWxvYWRHUFIoKSksIGVkZ2UsIH5TcGVj
Q2VsbCwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBKSVRDb21waWxlcjo6
RXF1YWwsIG9wZXJhbmQudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkp
OworI2VuZGlmCit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU90aGVyKEVkZ2Ug
ZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNPdGhlcikpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgbV9qaXQubW92ZShvcGVyYW5kLmdwcigpLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5hbmQ2NChN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCB0ZW1wR1BSKTsK
KyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdl
LCBTcGVjT3RoZXIsCisgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CisjZWxzZQorICAgIG1faml0Lm1vdmUob3BlcmFu
ZC50YWdHUFIoKSwgdGVtcEdQUik7CisgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHRl
bXBHUFIpOworICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC50YWdH
UFIoKSwgb3BlcmFuZC5wYXlsb2FkR1BSKCkpLCBlZGdlLCBTcGVjT3RoZXIsCisgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CisjZW5kaWYgICAgCit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZShFZGdlIGVkZ2UpCit7CisgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQo
KSkgeworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93
bkludDMyVXNlOgorICAgICAgICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQz
MikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duTnVtYmVyVXNlOgorICAgICAgICBB
U1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNOdW1iZXIpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgIEFTU0VSVCghbmVlZHNUeXBlQ2hlY2so
ZWRnZSwgU3BlY0NlbGwpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnQzMlVzZToKKyAg
ICAgICAgc3BlY3VsYXRlSW50MzIoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVh
bE51bWJlclVzZToKKyAgICAgICAgc3BlY3VsYXRlUmVhbE51bWJlcihlZGdlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIHNwZWN1bGF0ZU51bWJlcihlZGdl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBzcGVjdWxh
dGVCb29sZWFuKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENlbGxVc2U6CisgICAg
ICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT2JqZWN0
VXNlOgorICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihl
ZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb3RDZWxsVXNlOgor
ICAgICAgICBzcGVjdWxhdGVOb3RDZWxsKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTMgKzEyMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgR1BSUmVnIGZpbGxJbnRlZ2VyKE5vZGUq
LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOworICAgIEdQUlJlZyBmaWxsSW50ZWdlcihFZGdl
LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BS
UmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKKyAgICBHUFJSZWcgZmlsbEpTVmFsdWUoRWRnZSk7CiAj
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGJvb2wgZmlsbEpTVmFsdWUoTm9kZSosIEdQUlJl
ZyYsIEdQUlJlZyYsIEZQUlJlZyYpOworICAgIGJvb2wgZmlsbEpTVmFsdWUoRWRnZSwgR1BSUmVn
JiwgR1BSUmVnJiwgRlBSUmVnJik7CiAjZW5kaWYKLSAgICBHUFJSZWcgZmlsbFN0b3JhZ2UoTm9k
ZSopOworICAgIEdQUlJlZyBmaWxsU3RvcmFnZShFZGdlKTsKIAogICAgIC8vIGxvY2sgYW5kIHVu
bG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKQpAQCAt
Mjk1LDExICsyOTUsMTEgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBzcGVjdWxh
dGl2ZSBvcGVyYW5kIHR5cGVzLCBiZWxvdywgdG8gZmlsbCBvcGVyYW5kIHRvCiAgICAgLy8gbWFj
aGluZSByZWdpc3RlcnMsIGltcGxpY2l0bHkgZ2VuZXJhdGluZyBzcGVjdWxhdGlvbiBjaGVja3Mg
YXMgbmVlZGVkLgotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KE5vZGUqLCBEYXRhRm9ybWF0
JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNw
ZWN1bGF0ZUludFN0cmljdChOb2RlKik7Ci0gICAgRlBSUmVnIGZpbGxTcGVjdWxhdGVEb3VibGUo
Tm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUNl
bGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0
ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNw
ZWN1bGF0ZUludChFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChFZGdlKTsKKyAgICBG
UFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7Cisg
ICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsK
KyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rp
b24pOwogICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50
MzIoTm9kZSopOwogCiAgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRvcihQYXNzT3duUHRyPFNs
b3dQYXRoR2VuZXJhdG9yPik7CkBAIC01NDAsMTIgKzU0MCw2IEBAIHB1YmxpYzoKICAgICBib29s
IGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlz
RnVuY3Rpb25Db25zdGFudChub2RlKTsgfQogICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3Rh
bnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFu
dChub2RlKTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkg
eyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KLSAg
ICBpbnQzMl90IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIoTm9kZSogbm9kZSkKLSAgICB7
Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4g
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIo
dmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKLSAgICB9CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVy
biBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlKTsgfQogI2VuZGlmCkBAIC0yMDIz
LDkgKzIwMTcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2Ug
bGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpOwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5v
ZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVl
LCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKKyAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlKTsKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5v
ZGUqKTsKLSAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2UgdmFsdWUsIEJsb2Nr
SW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hl
Y2spOworICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJ
bmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbik7CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5v
ZGUqKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShOb2RlKiwgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtMjE3OCw3ICsyMTcyLDkgQEAgcHVi
bGljOgogICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVT
b3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1
ZVJlY292ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7CiAgICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVS
ZWNvdmVyeSgpKTsKICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVT
b3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVl
U291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbik7CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVl
U291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3Bl
Y3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICB2b2lkIHNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbik7CiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUg
dGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZSopOwogICAgIHZvaWQgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBFZGdlKTsK
QEAgLTIxODgsNiArMjE4NCwyNCBAQCBwdWJsaWM6CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludCogZm9yd2FyZFNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCA9IFVuY291bnRhYmxl
V2F0Y2hwb2ludCk7CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3BlY3VsYXRpb25X
YXRjaHBvaW50KEV4aXRLaW5kLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgCisgICAgLy8g
SGVscGVycyBmb3IgcGVyZm9ybWluZyB0eXBlIGNoZWNrcyBvbiBhbiBlZGdlIHN0b3JlZCBpbiB0
aGUgZ2l2ZW4gcmVnaXN0ZXJzLgorICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soRWRnZSBlZGdlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpIHsgcmV0dXJuIG1fc3RhdGUuZm9yTm9k
ZShlZGdlKS5tX3R5cGUgJiB+dHlwZXNQYXNzZWRUaHJvdWdoOyB9CisgICAgdm9pZCB0eXBlQ2hl
Y2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQ
YXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKKyAgICB2b2lk
IGZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5Jik7CisgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNv
dXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdo
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7
CisKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTnVt
YmVyKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlUmVhbE51bWJlcihFZGdlKTsKKyAgICB2b2lk
IHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOwor
ICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0
T3JPdGhlcihFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdlKTsKKyAgICB2b2lk
IHNwZWN1bGF0ZU5vdENlbGwoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlKTsK
KyAgICB2b2lkIHNwZWN1bGF0ZShFZGdlKTsKKyAgICAKICAgICBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKICAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0
aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUsIGJvb2wgaW52ZXJ0KTsK
QEAgLTIxOTcsNyArMjIxMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFycmF5aWZ5KE5vZGUqKTsK
ICAgICAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0
ZUludEludGVybmFsKE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKEVkZ2UsIERh
dGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwogICAgIAogICAg
IC8vIEl0IGlzIHBvc3NpYmxlLCBkdXJpbmcgc3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8gcmVh
Y2ggYSBzaXR1YXRpb24gaW4gd2hpY2ggd2UKICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRlcm1p
bmUgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwgKGZvciBleGFtcGxlLCB3aGVuIHR3byBub2RlcwpA
QCAtMjI0Nyw2ICsyMjYxLDkgQEAgcHVibGljOgogICAgIC8vIFRoZSBjdXJyZW50IG5vZGUgYmVp
bmcgZ2VuZXJhdGVkLgogICAgIEJsb2NrSW5kZXggbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJl
bnROb2RlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIG1fY2FuRXhpdDsKKyNlbmRp
ZgogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5kIHBoeXNp
Y2FsIHJlZ2lzdGVyIG1hcHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9nZW5l
cmF0aW9uSW5mbzsKQEAgLTIzMDUsMTcgKzIzMjIsMTcgQEAgcHVibGljOgogCiBjbGFzcyBJbnRl
Z2VyT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSW50ZWdlck9wZXJhbmQoU3BlY3Vs
YXRpdmVKSVQqIGppdCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQgSW50ZWdlck9wZXJhbmQoU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUg
PSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAg
ICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAg
ICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAjaWZuZGVmIE5ERUJVRwogICAgICAg
ICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQogI2VuZGlmCiAgICAgewogICAgICAgICBBU1NF
UlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwot
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlQobW9kZSA9
PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25JbnQz
MlVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKGVkZ2Uubm9kZSgpKSkKICAgICAgICAg
ICAgIGdwcigpOwogICAgIH0KIApAQCAtMjMyNSw5ICsyMzQyLDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogCisgICAgRWRnZSBlZGdl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQorICAgIAogICAg
IE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAg
ICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAgRGF0YUZvcm1hdCBmb3JtYXQo
KQpAQCAtMjM0MCwyNyArMjM2MiwyNyBAQCBwdWJsaWM6CiAgICAgR1BSUmVnIGdwcigpCiAgICAg
ewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAg
ICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxJbnRlZ2VyKG5vZGUoKSwgbV9mb3JtYXQp
OworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEludGVnZXIobV9lZGdl
LCBtX2Zvcm1hdCk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAg
CiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAg
ICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0
aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAg
R1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAgIERhdGFGb3JtYXQgbV9mb3JtYXQ7CiB9OwogCiBj
bGFzcyBKU1ZhbHVlT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNWYWx1ZU9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQgSlNWYWx1ZU9w
ZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25N
b2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQo
aml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdl
KQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQ
UlJlZykKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0yMzY4LDE0ICsyMzkwLDE0IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNT
RVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0g
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2Up
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkp
CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsK
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIG1fcmVnaXN0ZXIucGFpci50YWdHUFIg
PSBJbnZhbGlkR1BSUmVnOwogICAgICAgICBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiA9IElu
dmFsaWRHUFJSZWc7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBmaWxsKCk7CiAjZW5kaWYK
ICAgICB9CkBAIC0yMzk2LDE3ICsyNDE4LDIyIEBAIHB1YmxpYzoKICAgICAgICAgfQogI2VuZGlm
CiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlm
IChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPcklu
dmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUobm9kZSgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJ
bnZhbGlkID0gbV9qaXQtPmZpbGxKU1ZhbHVlKG1fZWRnZSk7CiAgICAgICAgIHJldHVybiBtX2dw
ck9ySW52YWxpZDsKICAgICB9CiAgICAgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKQpAQCAtMjQx
OSw3ICsyNDQ2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbCgpCiAgICAgewogICAgICAgICBp
ZiAobV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnICYmIG1fcmVnaXN0ZXIu
cGFpci5wYXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2lzRG91Ymxl
ID0gIW1faml0LT5maWxsSlNWYWx1ZShub2RlKCksIG1fcmVnaXN0ZXIucGFpci50YWdHUFIsIG1f
cmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7CisgICAgICAgICAgICBt
X2lzRG91YmxlID0gIW1faml0LT5maWxsSlNWYWx1ZShtX2VkZ2UsIG1fcmVnaXN0ZXIucGFpci50
YWdHUFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7CiAgICAg
fQogCiAgICAgR1BSUmVnIHRhZ0dQUigpCkBAIC0yNDUxLDEyICsyNDc4LDEyIEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAg
ICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxh
dGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKQEAgLTI0NzMsMTQgKzI1MDAsMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3Rv
cmFnZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNw
ZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAg
ICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAg
ICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAg
ICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVChlZGdlLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7Cisg
ICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAg
ICB9CiAgICAgCkBAIC0yNDkwLDI2ICsyNTE3LDMxIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQt
PnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogICAgIAorICAgIEVkZ2UgZWRnZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KKyAgICAKICAgICBOb2Rl
KiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJl
dHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7
CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAg
ICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2Uobm9kZSgpKTsKKyAgICAgICAg
ICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGVkZ2UoKSk7CiAgICAgICAg
IHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAg
IHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUo
KSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0g
ICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52
YWxpZDsKIH07CiAKQEAgLTI2NDEsOSArMjY3Myw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICBleHBsaWNpdCBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRT
cGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAg
ICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwg
bV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9mb3JtYXQoRGF0YUZvcm1hdE5vbmUpCkBAIC0yNjUx
LDggKzI2ODMsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5k
KCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVz
ZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7
CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsK
ICAgICB9CiAKQEAgLTI2NjEsMTAgKzI2OTMsMTUgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
bV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2so
bV9ncHJPckludmFsaWQpOwogICAgIH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCku
bm9kZSgpOwogICAgIH0KIAogICAgIERhdGFGb3JtYXQgZm9ybWF0KCkKQEAgLTI2NzcsMTggKzI3
MTQsMTggQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1f
Z3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxp
ZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50KG5vZGUoKSwgbV9mb3JtYXQsIG1fZGlyZWN0aW9u
KTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnQo
ZWRnZSgpLCBtX2Zvcm1hdCwgbV9kaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9ncHJPcklu
dmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0
LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJp
dmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAg
IEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBEYXRhRm9ybWF0
IG1fZm9ybWF0OwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwpAQCAtMjY5
NiwxNCArMjczMywxNCBAQCBwcml2YXRlOgogCiBjbGFzcyBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5k
U3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAg
ICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAs
IG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQo
KSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAg
ICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNl
S2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50MzJVc2UpKTsK
KyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwog
ICAgIH0KIApAQCAtMjcxMiw0MSArMjc0OSw0NiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCht
X2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayht
X2dwck9ySW52YWxpZCk7CiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5u
b2RlKCk7CiAgICAgfQogCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9n
cHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlk
ID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnRTdHJpY3Qobm9kZSgpKTsKKyAgICAgICAgICAgIG1f
Z3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoZWRnZSgpKTsKICAg
ICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgp
CiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uo
bm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0Owot
ICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPcklu
dmFsaWQ7CiB9OwogCiBjbGFzcyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQq
IGppdCwgRWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2Fy
ZFNwZWN1bGF0aW9uLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVy
YW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1
c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZnByT3JJbnZh
bGlkKEludmFsaWRGUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkg
PT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAg
ICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtp
bmQoKSA9PSBOdW1iZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25OdW1iZXJVc2UgfHwg
ZWRnZS51c2VLaW5kKCkgPT0gUmVhbE51bWJlclVzZSkpOworICAgICAgICBpZiAoaml0LT5pc0Zp
bGxlZChub2RlKCkpKQogICAgICAgICAgICAgZnByKCk7CiAgICAgfQogCkBAIC0yNzU1LDQyICsy
Nzk3LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZnByT3JJbnZhbGlkICE9IEludmFs
aWRGUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZnByT3JJbnZhbGlkKTsKICAgICB9
CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Vk
Z2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBG
UFJSZWcgZnByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2Zwck9ySW52YWxpZCA9PSBJbnZhbGlk
RlBSUmVnKQotICAgICAgICAgICAgbV9mcHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0
ZURvdWJsZShub2RlKCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZnByT3JJbnZhbGlk
ID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVEb3VibGUoZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAg
ICAgIHJldHVybiBtX2Zwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQog
ICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5v
ZGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAg
ICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgRlBSUmVnIG1fZnByT3JJbnZh
bGlkOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKIAogY2xhc3Mg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNl
bGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1
bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1
bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6
IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2Vk
Z2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgICAg
ICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7
Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlm
IChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBlZGdlLnVz
ZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlIHx8
IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ1VzZSkpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yNzk5LDQyICsyODQ2
LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRH
UFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9Cisg
ICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7
CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBHUFJS
ZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BS
UmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUNl
bGwobm9kZSgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1f
aml0LT5maWxsU3BlY3VsYXRlQ2VsbChlZGdlKCksIG1fZGlyZWN0aW9uKTsKICAgICAgICAgcmV0
dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewot
ICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsK
ICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUq
IG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAg
ICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCiBjbGFzcyBTcGVjdWxh
dGVCb29sZWFuT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRlQm9vbGVh
bk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgZXhwbGljaXQgU3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uLCBPcGVyYW5kU3Bl
Y3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAg
IDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1f
ZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAg
ICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0
KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAg
aWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xlYW5Vc2UpOworICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAg
fQogICAgIApAQCAtMjg0NCwzMCArMjg5Niw0MSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LT51
bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KICAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CisgICAgCiAgICAgTm9kZSog
bm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1
cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAgICAgCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewog
ICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAg
IG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVCb29sZWFuKG5vZGUoKSwgbV9k
aXJlY3Rpb24pOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1
bGF0ZUJvb2xlYW4oZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2dwck9y
SW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9q
aXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogCiBw
cml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7Cisg
ICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAgIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKIAorI2RlZmluZSBERkdfVFlQRV9DSEVDSyhz
b3VyY2UsIGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFpbCkgZG8geyBcCisgICAg
ICAgIGlmICghbmVlZHNUeXBlQ2hlY2soKGVkZ2UpLCAodHlwZXNQYXNzZWRUaHJvdWdoKSkpICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGVDaGVjaygoc291cmNl
KSwgKGVkZ2UpLCAodHlwZXNQYXNzZWRUaHJvdWdoKSwgKGp1bXBUb0ZhaWwpKTsgXAorICAgIH0g
d2hpbGUgKDApCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4OSwxMSArMjg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGdldExvY2FsID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5m
byh2YXJpYWJsZSksIEVkZ2Uobm9kZSkpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEs
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICBnZXRMb2NhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGdldExvY2FsLCBDZWxs
VXNlKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBn
ZXRMb2NhbDsKQEAgLTMxNyw3ICszMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IC8vIHRvIGV4aXQuCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgICAgIEVkZ2UgY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLApAQCAtMzI3LDcgKzMyNyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiBy
YXRoZXIgdGhhbiByZWV4ZWN1dGluZyB0aGUgY3VycmVudCBvbmUuCiAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBGb3J3YXJkQ2hl
Y2tTdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8o
bV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwgY2hpbGQx
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLCBFZGdlKGNoaWxkMS5ub2Rl
KCksIENlbGxVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHVXNlS2luZC5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2VLaW5kIHVzZUtpbmQp
Cit7CisgICAgc3dpdGNoICh1c2VLaW5kKSB7CisgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAg
ICBvdXQucHJpbnQoIlVudHlwZWQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnQzMlVz
ZToKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEtub3duSW50MzJVc2U6CisgICAgICAgIG91dC5wcmludCgiS25vd25JbnQzMiIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiUmVh
bE51bWJlciIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAg
b3V0LnByaW50KCJOdW1iZXIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93bk51bWJl
clVzZToKKyAgICAgICAgb3V0LnByaW50KCJLbm93bk51bWJlciIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbiIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENlbGxVc2U6CisgICAgICAgIG91dC5wcmludCgiQ2VsbCIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgb3V0LnBy
aW50KCJLbm93bkNlbGwiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPYmplY3RVc2U6Cisg
ICAgICAgIG91dC5wcmludCgiT2JqZWN0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT2Jq
ZWN0T3JPdGhlclVzZToKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3RPck90aGVyIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU3RyaW5nVXNlOgorICAgICAgICBvdXQucHJpbnQoIlN0cmlu
ZyIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vdENlbGxVc2U6CisgICAgICAgIG91dC5w
cmludCgiTm90Q2VsbCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE90aGVyVXNlOgorICAg
ICAgICBvdXQucHJpbnQoIk90aGVyIik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR1VzZUtpbmRfaAorI2RlZmluZSBERkdVc2VLaW5kX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJTcGVjdWxhdGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gVXNlS2luZCB7CisgICAgVW50
eXBlZFVzZSwKKyAgICBJbnQzMlVzZSwKKyAgICBLbm93bkludDMyVXNlLAorICAgIFJlYWxOdW1i
ZXJVc2UsCisgICAgTnVtYmVyVXNlLAorICAgIEtub3duTnVtYmVyVXNlLAorICAgIEJvb2xlYW5V
c2UsCisgICAgQ2VsbFVzZSwKKyAgICBLbm93bkNlbGxVc2UsCisgICAgT2JqZWN0VXNlLAorICAg
IE9iamVjdE9yT3RoZXJVc2UsCisgICAgU3RyaW5nVXNlLAorICAgIE5vdENlbGxVc2UsCisgICAg
T3RoZXJVc2UsCisgICAgTGFzdFVzZUtpbmQgLy8gTXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZW50
cnkgaW4gdGhlIGVudW0sIGFzIGl0IGlzIHVzZWQgdG8gZGVub3RlIHRoZSBudW1iZXIgb2YgZW51
bSBlbGVtZW50cy4KK307CisKK0FMV0FZU19JTkxJTkUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRl
ckZvcihVc2VLaW5kIHVzZUtpbmQpCit7CisgICAgc3dpdGNoICh1c2VLaW5kKSB7CisgICAgY2Fz
ZSBVbnR5cGVkVXNlOgorICAgICAgICByZXR1cm4gU3BlY1RvcDsKKyAgICBjYXNlIEludDMyVXNl
OgorICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNJbnQzMjsKKyAg
ICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjUmVhbE51bWJlcjsKKyAg
ICBjYXNlIE51bWJlclVzZToKKyAgICBjYXNlIEtub3duTnVtYmVyVXNlOgorICAgICAgICByZXR1
cm4gU3BlY051bWJlcjsKKyAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIHJldHVybiBTcGVj
Qm9vbGVhbjsKKyAgICBjYXNlIENlbGxVc2U6CisgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAg
ICAgIHJldHVybiBTcGVjQ2VsbDsKKyAgICBjYXNlIE9iamVjdFVzZToKKyAgICAgICAgcmV0dXJu
IFNwZWNPYmplY3Q7CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAgICByZXR1cm4g
U3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAgcmV0
dXJuIFNwZWNTdHJpbmc7CisgICAgY2FzZSBOb3RDZWxsVXNlOgorICAgICAgICByZXR1cm4gflNw
ZWNDZWxsOworICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT3RoZXI7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIFNwZWNUb3A7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNOdW1l
cmljYWwoVXNlS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW50
MzJVc2U6CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgIGNhc2UgUmVhbE51bWJlclVzZToK
KyAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpERkc6OlVzZUtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVXNlS2luZF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dChOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBkYXRh
TG9nRigiQCV1IC0+ICVzQCV1Iiwgbm9kZS0+aW5kZXgoKSwgdXNlS2luZFRvU3RyaW5nKGVkZ2Uu
dXNlS2luZCgpKSwgZWRnZS0+aW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAi
LCBlZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKQEAgLTM4OSw3ICsz
ODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCiAgICAg
ICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgTm9kZSogZXhwZWN0ZWROb2Rl
LCBFZGdlIGluY29taW5nRWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxv
Y2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGUtPmluZGV4KCksIGJsb2Nr
SW5kZXgsIGV4cGVjdGVkTm9kZS0+aW5kZXgoKSwgaW5jb21pbmdFZGdlLT5pbmRleCgpKTsKKyAg
ICAgICAgZGF0YUxvZyhub2RlLCAiIGluIEJsb2NrICMiLCBibG9ja0luZGV4LCAiLCBzZWFyY2hp
bmcgZm9yICIsIGV4cGVjdGVkTm9kZSwgIiBmcm9tICIsIGluY29taW5nRWRnZSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189222</attachid>
            <date>2013-02-19 19:01:27 -0800</date>
            <delta_ts>2013-02-19 21:01:16 -0800</delta_ts>
            <desc>it runs the most important program</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>306963</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzMzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNiBA
QAorMjAxMy0wMi0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgbm90IGNoYW5nZSBpdHMgbWluZCBhYm91dCB3aGF0IHR5cGUgc3BlY3VsYXRp
b25zIGEgbm9kZSBkb2VzLCBieSBlbmNvZGluZyB0aGUgY2hlY2tzIGluIHRoZSBOb2RlVHlwZSwg
VXNlS2luZCwgYW5kIEFycmF5TW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBGaXh1cFBoYXNlIG5vdyBsb2NrcyBpbiB0aGUgc3BlY3Vs
YXRpb25zIHRoYXQgZWFjaCBub2RlIHdpbGwgZG8uIEl0IHRoZW4gcmVtZW1iZXJzCisgICAgICAg
IHRob3NlIHNwZWN1bGF0aW9ucyBmb3IgYWxsIHRpbWUuIEVhY2ggbm9kZSBlbnN1cmVzIHRoYXQg
aXQgZXhlY3V0ZXMgdGhlIHNwZWN1bGF0aW9ucworICAgICAgICBwcm9taXNlZCBieSBpdHMgZWRn
ZXMuIFRoaXMgaXMgdHJ1ZSBldmVuIGZvciBQaGFudG9tIG5vZGVzLgorICAgICAgICAKKyAgICAg
ICAgV29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKToKKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVkZ2Vz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRl
Lmg6CisgICAgICAgIChBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFN0YXRlOjpmaWx0ZXJFZGdlQnlVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmZpbHRlckJ5VHlwZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAqIGRmZy9E
RkdBZGphY2VuY3lMaXN0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6QWRq
YWNlbmN5TGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6Y2hpbGQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldENoaWxkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBZGphY2VuY3lMaXN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNl
bmN5TGlzdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6
c2V0Rmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6bnVtQ2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldE51bUNoaWxkcmVu
KToKKyAgICAgICAgKEFkamFjZW5jeUxpc3QpOgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3Iu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFsbG9jYXRvcjo6Y2VsbFNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6
UmVnaW9uOjpoZWFkZXJTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBbGxvY2F0b3I6OlJlZ2lv
bjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRv
cjo6UmVnaW9uOjpwYXlsb2FkU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpS
ZWdpb246OnBheWxvYWRCZWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpSZWdp
b246OnBheWxvYWRFbmQpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6UmVnaW9uOjpp
c0luVGhpc1JlZ2lvbik6CisgICAgICAgIChKU0M6OkRGRzo6OjpBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6fkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjpmcmVlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmZy
ZWVBbGwpOgorICAgICAgICAoSlNDOjpERkc6Ojo6cmVzZXQpOgorICAgICAgICAoSlNDOjpERkc6
Ojo6aW5kZXhPZik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0b3JPZik6CisgICAgICAg
IChKU0M6OkRGRzo6OjpidW1wQWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZnJlZUxp
c3RBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0ZVNsb3cpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KToKKyAgICAgICAgKEpTQzo6REZH
Ojo6OnN0YXJ0QnVtcGluZ0luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKiBk
ZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRMb2Nh
bFN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRSZXBs
YWNlbWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3Rh
bnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjphZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2spOgorICAgICAgICAq
IGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdFZGdlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpkdW1wKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZS5oOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OnNoaWZ0KToK
KyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OkZpeHVwUGhhc2U6OmZpeEludEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVw
UGhhc2U6OmZpeERvdWJsZUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6Omlu
amVjdEludDMyVG9Eb3VibGVOb2RlKToKKyAgICAgICAgKEZpeHVwUGhhc2UpOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OnRydW5jYXRlQ29uc3RhbnRUb0ludDMyKToKKyAgICAgICAg
KEpTQzo6REZHOjpGaXh1cFBoYXNlOjp0cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjphdHRlbXB0VG9NYWtlSW50ZWdlckFkZCk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OnJlZkNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGVy
ZWZDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OnBlcmZvcm1TdWJzdGl0dXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojppc1ByZWRpY3RlZE51bWVyaWNhbCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIpOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb0dldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpjb252ZXJ0VG9QdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Y2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDIpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YmluYXJ5
VXNlS2luZCk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc0Jp
bmFyeVVzZUtpbmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlQWxsb2NhdG9yLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBvaW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRUeXBlQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1Yik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVJbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZVJlYWxOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9i
amVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVj
dE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVT
dHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVOb3RD
ZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT3RoZXIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mTnVtYmVyQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpuZWVkc1R5cGVDaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OkludGVnZXJPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChJbnRlZ2VyT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6Om5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6Oklu
dGVnZXJPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVPcGVyYW5kOjpK
U1ZhbHVlT3BlcmFuZCk6CisgICAgICAgIChKU1ZhbHVlT3BlcmFuZCk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6Z3ByKToK
KyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6ZmlsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9w
ZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFu
ZDo6ZWRnZSk6CisgICAgICAgIChTdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RvcmFnZU9wZXJhbmQ6Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5k
OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjp1c2UpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCk6CisgICAgICAgIChTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQ6OlNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCk6CisgICAgICAgIChTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQ6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQpOgorICAgICAgICAoU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6ZWRn
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6bm9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6ZnByKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kOjpTcGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAg
IChTcGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2Vs
bE9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5k
Ojpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6Z3ByKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6dXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6U3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOjplZGdlKToK
KyAgICAgICAgKFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQm9v
bGVhbk9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zmls
bEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVJbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50U3RyaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0
eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9i
amVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAg
ICAqIGRmZy9ERkdVc2VLaW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHVXNlS2luZC5oOiBBZGRlZC4K
KyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6dHlwZUZpbHRlckZvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6aXNOdW1lcmljYWwpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiBk
ZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjpyZXBvcnRW
YWxpZGF0aW9uQ29udGV4dCk6CisKIDIwMTMtMDItMTggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIGluIHIxNDMzNDguCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQzMjc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksOCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1
MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5jcHAgKi87IH07CiAJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2lu
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4
N0YyRjE2ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZE
MiAvKiBERkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMzRCMTQ5
MTZENDIwMTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdV
c2VLaW5kLmNwcCAqLzsgfTsKKwkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRC
MTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQjNBMUExNTNFNjhGMjAwM0VEMEZGIC8q
IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBE
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYz
QjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICov
OyB9OwpAQCAtMTAwMCw2ICsxMDAyLDggQEAKIAkJMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8q
IERGR1ZhcmlhYmxlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHVmFyaWFibGVFdmVudC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAv
KiBERkdDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERGR0NvZGVCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNTU2
RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RG
R1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM0QjE0ODE2RDQy
MDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdVc2VLaW5kLmg7IHBhdGggPSBkZmcvREZHVXNlS2luZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTgxNTNFNjhFRjAw
M0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNB
MjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzA3LDYgKzI3MTEsOCBAQAogCQkJCTBGQzA5N0EwMTQ2
QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKIAkJCQkwRkJFMEY2RjE2QzFEQjAxMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNzAxNkMxREIw
MTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjM0QjE0NzE2RDQy
MDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8sCisJCQkJMEYzNEIxNDgxNkQ0MjAwRTAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLywKIAkJCQkwRjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYg
LyogREZHVmFsaWRhdGUuY3BwICovLAogCQkJCTBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBE
RkdWYWxpZGF0ZS5oICovLAogCQkJCTBGMkJEQzNGMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYWx1
ZVJlY292ZXJ5T3ZlcnJpZGUuaCAqLywKQEAgLTMyNDcsNiArMzI1Myw3IEBACiAJCQkJODY4OTE2
QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ1MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTVDRDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5
dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzk1Myw2ICszOTYwLDcgQEAK
IAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2Zp
bGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2lu
U3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8q
IFByb2ZpbGVyT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQzMjc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM0LDMwICsyMzQsNjIgQEAgQWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3Vs
dCBBYnN0cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9vbGVhblJlc3VsdDsKIH0KIAotYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK2Jvb2wgQWJz
dHJhY3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobV9i
bG9jayk7CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgCiAgICAgbV9kaWRDbG9iYmVyID0g
ZmFsc2U7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7
Ci0gICAgICAgIAorICAgIGRhdGFMb2coInRlbGxpbmcgIiwgbm9kZSwgIiBpdCBjYW4ndCBleGl0
LlxuIik7CisgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgCiAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBYnN0
cmFjdFN0YXRlOjpzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAg
cmV0dXJuIHN0YXJ0RXhlY3V0aW5nKG1fYmxvY2stPmF0KGluZGV4SW5CbG9jaykpOworfQorCit2
b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdlcyhOb2RlKiBub2RlKQoreworICAgIERGR19O
T0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGZpbHRlckVkZ2VCeVVzZSk7Cit9CisK
K3ZvaWQgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVkZ2VzKHVuc2lnbmVkIGluZGV4SW5CbG9jaykK
K3sKKyAgICBleGVjdXRlRWRnZXMobV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKSk7Cit9CisKK3Zv
aWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5RWRnZShOb2RlKiwgRWRnZSBlZGdlKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKCEoZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZUZpbHRlckZvcihlZGdl
LnVzZUtpbmQoKSkpKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlcyhOb2Rl
KiBub2RlKQoreworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIHZl
cmlmeUVkZ2UpOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkKKyAgICAgICAgdmVyaWZ5RWRnZXMobm9kZSk7CisgICAgCiAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAg
ICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1f
Z3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIElkZW50
aXR5OiB7CiAgICAgICAgIGZvck5vZGUobm9kZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgICAgIApAQCAtMjY1LDE5ICsyOTcsMTYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFy
aWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCkgPT0gU3BlY05vbmUpIHsKICAgICAgICAgICAg
IG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgY2FuRXhpdCA9IGZh
bHNlOwogICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZCh2
YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwogICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNz
RGF0YS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQot
ICAgICAgICAgICAgICAgIGNhbkV4aXQgfD0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI4NiwzNSArMzE1LDEwIEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkp
CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgZm9yTm9kZShu
b2RlKSA9IHZhbHVlOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpCi0gICAgICAgICAgICB8
fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudChub2RlLT5sb2NhbCgpKSkgewotICAgICAg
ICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewotICAgICAgICAgICAg
c3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgICAgICBtX3ZhcmlhYmxlcy5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBl
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7
Ci0gICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChpc0NlbGxT
cGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgCiAgICAgICAgIG1fdmFy
aWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzIyLDcgKzMyNiw2IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAg
ICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KICAg
ICAgICAgQVNTRVJUKCFtX2Jsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgp
KS5pc0NsZWFyKCkpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEJpdEFuZDoKQEAgLTM2MiwxMSArMzY1LDkg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM3NywyMCArMzc4
LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIEFTU0VSVChjaGlsZC5pc0ludDMyKCkpOwogICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0
YW50KG5vZGUsIEpTVmFsdWUoY2hpbGQuYXNVSW50MzIoKSkpKSB7CiAgICAgICAgICAgICAgICAg
bV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAg
aWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwotICAgICAgICB9IGVsc2UgeworICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50MzI6IHsKICAgICAgICAgSlNWYWx1ZSBjaGls
ZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CkBAIC00MDQsNyArNDAyLDYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDE5LDIwICs0
MTYsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKEpT
Qzo6dG9JbnQzMihjaGlsZC5hc0RvdWJsZSgpKSkpOwogICAgICAgICAgICAgaWYgKGNvbnN0YW50
V2FzU2V0KSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVu
YXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlQm9vbGVhbigpKQotICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwot
ICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
Ci0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSAmIFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZp
bHRlcih+U3BlY0NlbGwpOwotICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKQEAgLTQ0NCwxMCArNDMwLDggQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hp
bGQgJiYgY2hpbGQuaXNOdW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9k
ZSwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgY2hpbGQuYXNOdW1iZXIoKSkpKSB7
CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgZWxzZQpAQCAtNDU1LDEwICs0
MzksNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBDaGVja051bWJlcjoKLSAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAogICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDog
ewogICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgp
OwpAQCAtNDY2LDMzICs0NDYsMjcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYg
cmlnaHQuaXNOdW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNW
YWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFw
aC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxh
dGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50
ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Ymlu
YXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CiAgICAg
ICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlKQogICAgICAgICAgICAgICAgICYmIGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVmFsdWVBZGQpIHsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFsdWVB
ZGQpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nIHwgU3BlY0lu
dDMyIHwgU3BlY051bWJlcik7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IGhhbmRs
ZSB0aGlzIHlldC4gOi0oCi0gICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAK
QEAgLTUwMiwxOCArNDc2LDIxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJp
Z2h0LmlzTnVtYmVyKCkKICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFs
dWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGgu
YWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRl
SW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFy
eVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5jYXRl
SW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVy
VXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBz
cGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNEb3VibGUpOwotICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJp
dGhOZWdhdGU6IHsKQEAgLTUyMSwxNyArNDk4LDIxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkK
ICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoLWNoaWxkLmFzTnVt
YmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkoCi0gICAgICAgICAgICAgICAg
bm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNl
IEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFn
cygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsK
LSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCkBAIC01NDEsMjQgKzUyMiwyNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQu
aXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25z
dGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSAqIHJpZ2h0LmFzTnVtYmVyKCkpKSkg
ewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsCi0gICAg
ICAgICAgICAgICAgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3Mo
KSkKLSAgICAgICAgICAgICAgICB8fCAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5h
cml0aE5vZGVGbGFncygpKSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgp
KSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5v
ZGUtPmFyaXRoTm9kZUZsYWdzKCkpCisgICAgICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25vcmVO
ZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51
bWJlclVzZToKKyAgICAgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVy
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBz
cGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7Ci0gICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCi0gICAgICAgICAgICB8fCBp
c1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQot
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRoRGl2OgpAQCAtNTkxLDE4ICs1
NzQsMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1l
dGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAg
ICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsgLy8gZm9yY2luZyBjYW4tZXhpdCwgd2hpY2gg
aXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLgorICAgICAgICBzd2l0Y2ggKG5vZGUt
PmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0
ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJs
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtNjExLDE3ICs1OTcs
MjAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBp
ZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3Rh
bnQobm9kZSwgSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzJVbmFyeShub2RlLCB0cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1i
ZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtNjMwLDEwICs2MTksOCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChjaGls
ZCAmJiBjaGlsZC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKHNxcnQoY2hpbGQuYXNOdW1iZXIoKSkpKSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlclVu
YXJ5KG5vZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtNjUyLDIxICs2MzksMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICB9CiAgICAgICAgIGlmIChkaWRTZXRDb25z
dGFudCkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBp
ZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5z
aG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBj
YXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgY2FzZSBVbnR5
cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVz
ZToKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkKS5maWx0ZXIoKFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsK
LSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hp
bGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVy
VW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC03NjQsMTQgKzc1MSwxNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS0+
cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oY2hp
bGROb2RlLT5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGROb2Rl
KS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjQ2VsbCk7CisKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdHJpbmdVc2U6CisgICAg
ICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwpAQCAtODIzLDY1ICs4MTMs
MTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAK
ICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3Rh
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcCgpID09IENv
bXBhcmVFcUNvbnN0YW50KSB7Ci0gICAgICAgICAgICAvLyBXZSBjYW4gZXhpdCBpZiB3ZSBoYXZl
bid0IGZpcmVkIHRoZSBNYXNxdWVyYWRlc0FzVW5kZWZpbmQgd2F0Y2hwb2ludCB5ZXQuCi0gICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3Rp
bGxWYWxpZCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBOb2RlKiBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBOb2RlKiBy
aWdodCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgZmls
dGVyOwotICAgICAgICBTcGVjdWxhdGVkVHlwZUNoZWNrZXIgY2hlY2tlcjsKLSAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdCwgcmlnaHQpKSB7Ci0gICAgICAgICAg
ICBmaWx0ZXIgPSBTcGVjSW50MzI7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNJbnQzMlNwZWN1
bGF0aW9uOwotICAgICAgICB9IGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihs
ZWZ0LCByaWdodCkpIHsKLSAgICAgICAgICAgIGZpbHRlciA9IFNwZWNOdW1iZXI7Ci0gICAgICAg
ICAgICBjaGVja2VyID0gaXNOdW1iZXJTcGVjdWxhdGlvbjsKLSAgICAgICAgfSBlbHNlIGlmIChu
b2RlLT5vcCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNw
ZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAg
ICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxh
dGVPYmplY3QoKSAmJiByaWdodC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUo
bGVmdCkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQp
LmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiByaWdo
dC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRl
cihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3Bl
Y09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigp
ICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0
ZXIoU3BlY09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdo
dCkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotIAotICAgICAgICAgICAgZmlsdGVyID0gU3BlY1RvcDsKLSAgICAgICAgICAgIGNoZWNr
ZXIgPSBpc0FueVNwZWN1bGF0aW9uOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBm
aWx0ZXIgPSBTcGVjVG9wOwotICAgICAgICAgICAgY2hlY2tlciA9IGlzQW55U3BlY3VsYXRpb247
Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgfQotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgIWNo
ZWNrZXIoZm9yTm9kZShsZWZ0KS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhY2hlY2tlcihmb3JO
b2RlKHJpZ2h0KS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoZmlsdGVy
KTsKLSAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgIC8vIFRo
aXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2ZS4gQnV0IHRoZSBvbmx5IHRoaW5nIHRoaXMgcHJldmVu
dHMgaXMgc3RvcmUgZWxpbWluYXRpb24sCisgICAgICAgIC8vIGFuZCBob3cgbGlrZWx5IGlzIGl0
LCByZWFsbHksIHRoYXQgeW91J2xsIGhhdmUgcmVkdW5kYW50IHN0b3JlcyBhY3Jvc3MgYSBjb21w
YXJpc29uCisgICAgICAgIC8vIG9wZXJhdGlvbj8gQ29tcGFyaXNvbiBvcGVyYXRpb25zIGFyZSB0
eXBpY2FsbHkgYXQgdGhlIGVuZCBvZiBiYXNpYyBibG9ja3MsIHNvCisgICAgICAgIC8vIHVubGVz
cyB3ZSBoYXZlIGdsb2JhbCBzdG9yZSBlbGltaW5hdGlvbiAoc3VwZXIgdW5saWtlbHkgZ2l2ZW4g
aG93IHVucHJvZml0YWJsZSB0aGF0CisgICAgICAgIC8vIG9wdGltaXphdGlvbiBpcyB0byBiZWdp
biB3aXRoKSwgeW91IGFyZW4ndCBnb2luZyB0byBiZSB3YW50aW5nIHRvIHN0b3JlIGVsaW1pbmF0
ZQorICAgICAgICAvLyBhY3Jvc3MgYW4gZXF1YWxpdHkgb3AuCisgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtODk0
LDQ3ICs4MzcsMjAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNO
dW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGxl
ZnQuYXNOdW1iZXIoKSA9PSByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjQm9vbGVhbik7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RF
cUNvbnN0YW50KSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKGxlZnROb2RlLCByaWdodE5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJ
bnQzMkJpbmFyeShub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsK
LSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKCkgfHwgcmlnaHROb2RlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBpZiAobGVmdE5vZGUtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIHJpZ2h0
Tm9kZS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoU3BlY09i
amVjdCk7Ci0gICAgICAgICAgICBmb3JOb2RlKHJpZ2h0Tm9kZSkuZmlsdGVyKFNwZWNPYmplY3Qp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIFRoaXMgaXMgb3Zl
cmx5IGNvbnNlcnZhdGl2ZS4KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFN0cmluZ0NoYXJDb2RlQXQ6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CkBAIC05NTQsMTUgKzg3MCwxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKQEAgLTk3MCw3ICs4ODMsNiBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9y
aWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VU
b3AoKTsKQEAgLTk4Miw0OCArODk0LDM4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlT
dG9yYWdlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygp
KQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNE
b3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMDM2LDkg
KzkzOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBj
YXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCk7Ci0gICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBl
KCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1Zh
bGlkID0gZmFsc2U7CkBAIC0xMDQ3LDEwNCArOTQ2LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2Vs
bCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
UmVhbE51bWJlcik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJv
dW5kcygpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzT3V0T2ZCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVU
b0hvbGUoKSkKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
aW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpB
cmd1bWVudHM6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVy
KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRl
cihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0g
ICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051
bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQx
NkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAg
ICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmls
dGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5Ogot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xMTUyLDE2ICs5NzAsNiBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIEFycmF5
UHVzaDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgc3dpdGNoIChu
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY051bWJlcik7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTE3NCwxNiArOTgyLDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJl
Z0V4cFRlc3Q6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhaXNDZWxs
U3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAg
fHwgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JO
b2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBj
YXNlIEp1bXA6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7CkBAIC0xMTkxLDM2ICs5OTMsMjMg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBCb29s
ZWFuUmVzdWx0IHJlc3VsdCA9IGJvb2xlYW5SZXN1bHQobm9kZSwgZm9yTm9kZShjaGlsZCkpOwog
ICAgICAgICBpZiAocmVzdWx0ID09IERlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICAgICBtX2Jy
YW5jaERpcmVjdGlvbiA9IFRha2VUcnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAocmVzdWx0
ID09IERlZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBU
YWtlRmFsc2U7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgYWJvdmUgaGFuZGxl
cyB0aGUgdHJpdmlhbCBjYXNlcyBvZiBzcGFyc2UgY29uZGl0aW9uYWwKICAgICAgICAgLy8gY29u
c3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBj
YW4gc3BlY2lhbGl6ZSB0aGUgc291cmNlIHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rp
b24gb2YKICAgICAgICAgLy8gdGhlIGJyYW5jaC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRT
cGVjdWxhdGVCb29sZWFuKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9k
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVy
KCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkKS5maWx0ZXIoU3BlY09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRT
cGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0
aXZlLgogICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1Zh
bGlkID0gZmFsc2U7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgY2FzZSBUaHJvdzoKQEAgLTEyMzAsMjIgKzEwMTksMTggQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hp
bGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNo
aWxkQ29uc3QgPSBmb3JOb2RlKGNoaWxkKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxk
Q29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hp
bGRDb25zdCAmJiBjaGlsZENvbnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwg
Y2hpbGRDb25zdCkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCi0gICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUoY2hpbGQpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAg
ICAgICAKICAgICAgICAgLy8gTkIuIFRoZSBtb3JlIGNhbm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0
aGlzIHdvdWxkIGhhdmUgYmVlbjoKQEAgLTEyNzUsMzkgKzEwNjAsMTUgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3Ry
aW5nOwogICAgICAgICB9CiAgICAgICAgIGRlc3RpbmF0aW9uLnNldCh0eXBlKTsKLSAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
ICAgIAogICAgIGNhc2UgU3RyQ2F0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheToKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5udW1DaGlsZHJlbigpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCi0gICAgICAgICAgICAgICAgZm9yTm9k
ZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElu
ZGV4XSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBv
cGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29w
ZXJhbmRJbmRleCkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGls
ZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY1JlYWxO
dW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJy
YXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVh
azsKQEAgLTEzMjAsMTkgKzEwODEsMTYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgogICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0FycmF5KTsKICAgICAg
ICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5j
b2RlT3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVz
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENvbnZlcnRU
aGlzOiB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAg
ICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAg
ICAgICAgCkBAIC0xMzQxLDM4ICsxMDk5LDMxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIC8vIG9iamVjdCwgc28gdGhlcmUncyBub3RoaW5n
IHRvIGRvLiBJIGRvbid0IHRoaW5rIHRoaXMgY2FzZSB3aWxsCiAgICAgICAgICAgICAvLyBiZSBo
aXQsIGJ1dCB0aGVuIGFnYWluLCB5b3UgbmV2ZXIga25vdy4KICAgICAgICAgICAgIGRlc3RpbmF0
aW9uID0gc291cmNlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsgLy8gVGVsbCB0aGUgY29uc3RhbnQgZm9s
ZGVyIHRvIHR1cm4gdGhpcyBpbnRvIElkZW50aXR5LgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKSB7
Ci0gICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNPdGhlcik7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgT3RoZXJVc2U6CiAgICAg
ICAgICAgICBkZXN0aW5hdGlvbi5zZXQoU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlv
bihjaGlsZC0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAgc291cmNlLmZpbHRlcihTcGVj
T2JqZWN0KTsKKyAgICAgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAgICAgICBkZXN0aW5hdGlv
biA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6
CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlc3RpbmF0
aW9uID0gc291cmNlOwotICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShTcGVjT2JqZWN0T3RoZXIp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlKTsKLSAgICAgICAg
Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5
cGUpKTsKLSAgICAgICAgICAgIAotICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNGdW5jdGlvbik7
Ci0gICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjRmluYWxPYmplY3QpOworICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjRmluYWxPYmplY3QpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApAQCAtMTM4MSwzNiArMTEzMiwzMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdPYmplY3Q6Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YWN0aXZhdGlv
blN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKLSAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFyZ3VtZW50c1N0cnVjdHVy
ZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOgogICAgIGNhc2UgVGVhck9mZkFy
Z3VtZW50czoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8vIERv
ZXMgbm90aGluZyB0aGF0IGlzIHVzZXItdmlzaWJsZS4KICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKICAgICAgICAgaWYgKGlzRW1wdHlTcGVjdWxh
dGlvbigKICAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKAotICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5t
X3R5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2lu
KSkubV90eXBlKSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAg
ICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTQzMCw3ICsxMTc2LDYgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFs
bCBzdHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAg
ICAvLyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CkBAIC0xNDQ0LDcgKzExODksNiBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdl
IGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMs
IHNvIHdlIGNhbiBvcHRpbWl6ZQogICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3Rl
IHRoYXQgdGhpcyBlbmRzIHVwIGJlaW5nIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHRoZQogICAgICAg
ICAvLyBBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLgotICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtl
VG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTE0NTMsOCArMTE5Nyw2IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gVGhpcyBw
b3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUg
YWNjZXNzaW5nIGhhcwogICAgICAgICAvLyBhIGdldHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFn
YWluc3QgdGhpcy4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4
SW5CbG9jayk7Ci0gICAgICAgIC8vIEJ1dCB3ZSBkbyBzcGVjdWxhdGUgdGhhdCB0aGUgaW5kZXgg
aXMgYW4gaW50ZWdlci4KLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgIC8vIEFuZCB0aGUgcmVzdWx0IGlzIHVua25vd24uCiAgICAgICAg
IGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKQEAgLTE0NjIsMjkgKzEy
MDQsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNh
c2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2Fz
ZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU2V0Q2FsbGVlOgogICAgIGNhc2UgU2V0TXlTY29w
ZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBHZXRTY29wZTogLy8gRklYTUU6IFdlIGNvdWxkIGdldCByaWQg
b2YgdGhlc2UgaWYgd2Uga25vdyB0aGF0IHRoZSBKU0Z1bmN0aW9uIGlzIGEgY29uc3RhbnQuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDIKICAgICBjYXNlIEdl
dE15U2NvcGU6CiAgICAgY2FzZSBTa2lwVG9wU2NvcGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQ2VsbE90aGVyKTsKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNraXBTY29wZTogewotICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZCAmJiB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGpzQ2FzdDxKU1Njb3BlKj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgewog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CkBAIC0xNDk1LDE4ICsxMjMyLDE0
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAKICAg
ICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAg
ICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZh
bHVlLgogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBjbG9iYmVyQ2FwdHVyZWRW
YXJzKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAt
MTUxOCw4ICsxMjUxLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1
bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotCiAgICAgICAgICAgICBpZiAo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVu
U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9n
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUsCkBAIC0xNTU1LDcgKzEyODYsNiBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIG1vcmUgdGhvcm91Z2hseS4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMAogICAgICAgICAv
LyBGSVhNRTogV2UgY291bGQgZWxpbWluYXRlIHRoZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhl
IGV4YWN0IHZhbHVlIHRoYXQgZmxvd3MgaW50byB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MjAxCi0gICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE1NjQsNiArMTI5NCw3IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIEZvcndhcmRDaGVj
a1N0cnVjdHVyZTogewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJv
cGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcyku
CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZp
bHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KICAgICAgICAgLy8gSWYg
dGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxy
ZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQg
dGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0
aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCkBAIC0xNTcxLDkgKzEzMDIsOCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS5t
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwg
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0g
ICAgICAgICAgICAhdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQp
Ci0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSk7CisgICAg
ICAgIGlmICghdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQor
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgdmFsdWUuZmlsdGVy
KHNldCk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsK
QEAgLTE1OTEsNyArMTMyMSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgLy8gaW5maW5pdHkgb2Ygc3RydWN0dXJlcy4KICAgICAgICAgQVNTRVJU
KHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQo
bm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAgICAgIAotICAgICAgICBBU1NFUlQodmFsdWUuaXND
bGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3Vs
ZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVzdC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9u
IHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgogICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+
c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKQEAgLTE2MDAsNyArMTMyOSw2IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuc2V0KG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsK
QEAgLTE2MTAsMTQgKzEzMzgsMTEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5v
dCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUs
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8v
IExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwp
IHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBi
ZSBjbGV2ZXIgaGVyZS4KQEAgLTE2MzAsNyArMTM1NSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpB
cmd1bWVudHM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0FyZ3VtZW50cyk7CkBAIC0xNjczLDE1ICsxMzk3LDExIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lvbigp
ID09IEFycmF5OjpDb252ZXJ0CiAgICAgICAgICAgICB8fCBub2RlLT5hcnJheU1vZGUoKS5jb252
ZXJzaW9uKCkgPT0gQXJyYXk6OlJhZ2VDb252ZXJ0KTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxs
KTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVz
KGluZGV4SW5CbG9jayk7CiAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFy
cmF5TW9kZXMobm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkp
OwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKQEAgLTE2OTQsMzUgKzE0MTQsMjEg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
fHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAg
ICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKICAgICAgICAg
bV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7IAog
ICAgIH0KLSAgICBjYXNlIEdldEJ5T2Zmc2V0OgotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
LT5oYXNTdG9yYWdlUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlz
Q2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
fQorICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9w
KCk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6IHsKLSAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFsc2U7Ci0gICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhpdCB8
PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkubV90eXBlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC0xNzMxLDcgKzE0MzcsNiBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZSA9
PSBub2RlLT5mdW5jdGlvbigpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1
ZTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTc2NiwxMiArMTQ3MSwxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTc4MSwzNCArMTQ4NCwyMyBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFB1
dEdsb2JhbFZhcjoKICAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIC8v
IFNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNr
SGFzSW5zdGFuY2UKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEluc3Rh
bmNlT2Y6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIC8vIEFnYWlu
LCBzYWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJbnN0
YW5jZU9mCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0lu
c3RhbmNlIGFscmVhZHkgZG9lcyBhbiB1bmNvbmRpdGlvbmFsIGNlbGwKLSAgICAgICAgLy8gY2hl
Y2suIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKLSAgICAg
ICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgUGhpOgogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAog
ICAgIGNhc2UgQnJlYWtwb2ludDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgpAQCAtMTgzNiw3ICsx
NTI4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNh
c2UgSW5saW5lU3RhcnQ6CiAgICAgY2FzZSBOb3A6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoK
LSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKQEAgLTE4NDcsNiArMTUzOCwyMSBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgcmV0dXJuIG1faXNWYWxpZDsK
IH0KIAorYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleElu
QmxvY2spCit7CisgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbV9ibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKSk7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGlu
ZGV4SW5CbG9jayk7CisgICAgaWYgKCFzdGFydEV4ZWN1dGluZyhub2RlKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgZXhlY3V0ZUVkZ2VzKG5vZGUpOworICAgIHJldHVybiBleGVj
dXRlRWZmZWN0cyhpbmRleEluQmxvY2ssIG5vZGUpOworfQorCiBpbmxpbmUgdm9pZCBBYnN0cmFj
dFN0YXRlOjpjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgdW5zaWdu
ZWQgaW5kZXhJbkJsb2NrKQogewogICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29kZU9yaWdpbik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAko
cmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3ICsxNTgsNTIgQEAgcHVibGljOgogICAg
IC8vIGlmIGV4ZWN1dGlvbiBzaG91bGQgY29udGludWUgcGFzdCB0aGlzIG5vZGUuIE5vdGFibHks
IGl0IHdpbGwgcmV0dXJuIHRydWUKICAgICAvLyBmb3IgYmxvY2sgdGVybWluYWxzLCBzbyBsb25n
IGFzIHRob3NlIHRlcm1pbmFscyBhcmUgbm90IFJldHVybiBvciB2YXJpYW50cwogICAgIC8vIG9m
IFRocm93LgotICAgIGJvb2wgZXhlY3V0ZSh1bnNpZ25lZCk7CisgICAgLy8KKyAgICAvLyBUaGlz
IGlzIGd1YXJhbnRlZWQgdG8gYmUgZXF1aXZhbGVudCB0byBkb2luZzoKKyAgICAvLworICAgIC8v
IGlmIChzdGF0ZS5zdGFydEV4ZWN1dGluZyhpbmRleCkpIHsKKyAgICAvLyAgICAgc3RhdGUuZXhl
Y3V0ZUVkZ2VzKGluZGV4KTsKKyAgICAvLyAgICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0ZUVmZmVj
dHMoaW5kZXgpOworICAgIC8vIH0gZWxzZQorICAgIC8vICAgICByZXN1bHQgPSB0cnVlOworICAg
IGJvb2wgZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIAorICAgIC8vIEluZGlj
YXRlIHRoZSBzdGFydCBvZiBleGVjdXRpb24gb2YgdGhlIG5vZGUuIEl0IHJlc2V0cyBhbnkgc3Rh
dGUgaW4gdGhlIG5vZGUsCisgICAgLy8gdGhhdCBpcyBwcm9ncmVzc2l2ZWx5IGJ1aWx0IHVwIGJ5
IGV4ZWN1dGVFZGdlcygpIGFuZCBleGVjdXRlRWZmZWN0cygpLiBJbgorICAgIC8vIHBhcnRpY3Vs
YXIsIHRoaXMgcmVzZXRzIGNhbkV4aXQoKSwgc28gaWYgeW91IHdhbnQgdG8gImtub3ciIGJldHdl
ZW4gY2FsbHMgb2YKKyAgICAvLyBzdGFydEV4ZWN1dGluZygpIGFuZCBleGVjdXRlRWRnZXMoKS9F
ZmZlY3RzKCkgd2hldGhlciB0aGUgbGFzdCBydW4gb2YgdGhlCisgICAgLy8gYW5hbHlzaXMgY29u
Y2x1ZGVkIHRoYXQgdGhlIG5vZGUgY2FuIGV4aXQsIHlvdSBzaG91bGQgcHJvYmFibHkgc2V0IHRo
YXQKKyAgICAvLyBpbmZvcm1hdGlvbiBhc2lkZSBwcmlvciB0byBjYWxsaW5nIHN0YXJ0RXhlY3V0
aW5nKCkuCisgICAgYm9vbCBzdGFydEV4ZWN1dGluZyhOb2RlKik7CisgICAgYm9vbCBzdGFydEV4
ZWN1dGluZyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIAorICAgIC8vIEFic3RyYWN0bHkg
ZXhlY3V0ZSB0aGUgZWRnZXMgb2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgcnVucyBmaWx0ZXJFZGdl
QnlVc2UoKQorICAgIC8vIG9uIGFsbCBlZGdlcyBvZiB0aGUgbm9kZS4gWW91IGNhbiBza2lwIHRo
aXMgc3RlcCwgaWYgeW91IGhhdmUgYWxyZWFkeSB1c2VkCisgICAgLy8gZmlsdGVyRWRnZUJ5VXNl
KCkgKG9yIHNvbWUgZXF1aXZhbGVudCkgb24gZWFjaCBlZGdlLgorICAgIHZvaWQgZXhlY3V0ZUVk
Z2VzKE5vZGUqKTsKKyAgICB2b2lkIGV4ZWN1dGVFZGdlcyh1bnNpZ25lZCBpbmRleEluQmxvY2sp
OworICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmaWx0ZXJFZGdlQnlVc2UoTm9kZSogbm9k
ZSwgRWRnZSBlZGdlKQorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIHN3aXRj
aCAoZWRnZS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAg
ICBjYXNlIEtub3duTnVtYmVyVXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAg
ICAgICAgIEFTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRn
ZS51c2VLaW5kKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAor
ICAgICAgICAKKyAgICAgICAgZmlsdGVyQnlUeXBlKG5vZGUsIGVkZ2Uubm9kZSgpLCB0eXBlRmls
dGVyRm9yKGVkZ2UudXNlS2luZCgpKSk7CisgICAgfQorICAgIAorICAgIC8vIEFic3RyYWN0bHkg
ZXhlY3V0ZSB0aGUgZWZmZWN0cyBvZiB0aGUgZ2l2ZW4gbm9kZS4gVGhpcyBjaGFuZ2VzIHRoZSBh
YnN0cmFjdAorICAgIC8vIHN0YXRlIGFzc3VtaW5nIHRoYXQgZWRnZXMgaGF2ZSBhbHJlYWR5IGJl
ZW4gZmlsdGVyZWQuCisgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxv
Y2spOworICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2Rl
Kik7CiAgICAgCiAgICAgLy8gRGlkIHRoZSBsYXN0IGV4ZWN1dGVkIG5vZGUgY2xvYmJlciB0aGUg
d29ybGQ/CiAgICAgYm9vbCBkaWRDbG9iYmVyKCkgY29uc3QgeyByZXR1cm4gbV9kaWRDbG9iYmVy
OyB9CkBAIC0xOTEsNTAgKzIzNiw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIGJvb2wg
bWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFi
c3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VO
b2RlKTsKICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSogbm9kZSwgYm9v
bCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkKLSAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNo
aWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdChmb3JjZUNhbkV4aXQgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlw
ZSkpOwotICAgICAgICBjaGlsZFZhbHVlLmZpbHRlcihTcGVjSW50MzIpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5t
X3R5cGUpKTsKLSAgICAgICAgY2hpbGRWYWx1ZS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KE5vZGUqIG5vZGUpCi0gICAgewot
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQm9vbGVhblNwZWN1bGF0aW9uKGNoaWxk
VmFsdWUubV90eXBlKSk7Ci0gICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFNwZWNCb29sZWFuKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVJbnQzMkJpbmFyeShOb2RlKiBub2RlLCBi
b29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQotICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
Y2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAgICAgIGZvcmNlQ2FuRXhpdAotICAgICAgICAgICAgfHwg
IWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlMS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAh
aXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOwotICAgICAgICBjaGlsZFZh
bHVlMS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgY2hpbGRWYWx1ZTIuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KE5vZGUq
IG5vZGUpCi0gICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9
IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAg
ICAgICAgICAgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTEubV90eXBlKQotICAgICAg
ICAgICAgfHwgIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7Ci0gICAg
ICAgIGNoaWxkVmFsdWUxLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgY2hpbGRWYWx1ZTIu
ZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgIH0KLSAgICAKICAgICBlbnVtIEJvb2xlYW5SZXN1bHQg
ewogICAgICAgICBVbmtub3duQm9vbGVhblJlc3VsdCwKICAgICAgICAgRGVmaW5pdGVseUZhbHNl
LApAQCAtMjU5LDYgKzI2MCwxNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2Rl
LCBOb2RlKiBjaGlsZCwgU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShjaGlsZCk7CisgICAgICAgIGlmICh2YWx1ZS5tX3R5
cGUgJiB+dHlwZSkKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IHZhbHVlLmZpbHRlcih0eXBlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2ZXJpZnlFZGdlKE5v
ZGUqLCBFZGdlKTsKKyAgICB2b2lkIHZlcmlmeUVkZ2VzKE5vZGUqKTsKKyAgICAKICAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0
MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewog
ICAgIAogICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgewor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24g
Y2FzZSBvZiBtX3R5cGUgbm90CisgICAgICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBt
b2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3Bl
Y3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOwogICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIu
YXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0
dXJlLmZpbHRlcihvdGhlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYg
QEAgcHVibGljOgogICAgIEFkamFjZW5jeUxpc3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lM
aXN0KEtpbmQga2luZCkKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtp
bmQpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAg
ICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU3LDE5ICs1
NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQWRqYWNlbmN5TGlz
dChLaW5kIGtpbmQsIE5vZGUqIGNoaWxkMSwgTm9kZSogY2hpbGQyLCBOb2RlKiBjaGlsZDMpCi0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICA6IG1fa2luZChGaXhlZCkKLSNlbmRpZgorICAg
IEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIsIEVkZ2Ug
Y2hpbGQzKQogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChraW5kLCBraW5kID09IEZpeGVk
KTsKICAgICAgICAgaW5pdGlhbGl6ZShjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICB9CiAg
ICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVu
c2lnbmVkIG51bUNoaWxkcmVuKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBtX2tp
bmQoVmFyaWFibGUpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwg
a2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIHNldEZpcnN0Q2hpbGQoZmlyc3RDaGlsZCk7CkBA
IC03OSwyMSArNzAsMTggQEAgcHVibGljOgogICAgIGNvbnN0IEVkZ2UmIGNoaWxkKHVuc2lnbmVk
IGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaSA8IFNpemUpOwotICAgICAgICBBU1NF
UlQobV9raW5kID09IEZpeGVkKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfSAg
ICAKICAgICAKICAgICBFZGdlJiBjaGlsZCh1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGkgPCBTaXplKTsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAg
IHJldHVybiBtX3dvcmRzW2ldOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldENoaWxkKHVuc2ln
bmVkIGksIEVkZ2Ugbm9kZVVzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0g
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICBtX3dvcmRzW2ldID0gbm9k
ZVVzZTsKICAgICB9CiAgICAgCkBAIC0xMjUsOSArMTEzLDYgQEAgcHVibGljOgogICAgIAogICAg
IHZvaWQgcmVzZXQoKQogICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIG1fa2lu
ZCA9IEZpeGVkOwotI2VuZGlmCiAgICAgICAgIGluaXRpYWxpemUoKTsKICAgICB9CiAgICAgCkBA
IC0xNDIsMzQgKzEyNywyNCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBmaXJzdENoaWxkKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAg
ICByZXR1cm4gbV93b3Jkc1swXS5tX2VuY29kZWRXb3JkOwogICAgIH0KICAgICB2b2lkIHNldEZp
cnN0Q2hpbGQodW5zaWduZWQgZmlyc3RDaGlsZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tp
bmQgPT0gVmFyaWFibGUpOwogICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBmaXJz
dENoaWxkOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBudW1DaGlsZHJlbigpIGNvbnN0CiAg
ICAgewotICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgcmV0dXJu
IG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZDsKICAgICB9CiAgICAgdm9pZCBzZXROdW1DaGlsZHJl
bih1bnNpZ25lZCBudW1DaGlsZHJlbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0g
VmFyaWFibGUpOwogICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJl
bjsKICAgICB9CiAgICAgCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQga2luZCgpIGNv
bnN0IHsgcmV0dXJuIG1fa2luZDsgfQotI2VuZGlmCiBwcml2YXRlOgogICAgIEVkZ2UgbV93b3Jk
c1tTaXplXTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgS2luZCBtX2tpbmQ7Ci0jZW5kaWYK
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gICBhbnl0aGluZy4gWW91
IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGluc3RlYWQuCiAvLyAtIFlvdSBjYWxsIGZyZWUoKSBv
biBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCkuCiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+CisvLyBmb3JjZWRDZWxsU2l6ZTogc2V0IHRoaXMgdG8gMCBp
ZiB5b3UncmUgaGFwcHkgd2l0aCB0aGUgZGVmYXVsdCBhbGlnbm1lbnQsIG9yIHNldCBpdAorLy8g
dG8gYSBub24temVybyB2YWx1ZSBpZiB5b3Ugd2FudCB0byBmb3JjaWJseSBhbGlnbiB0aGUgYWxs
b2NhdGlvbnMgdG8gYSBjZXJ0YWluCisvLyB2YWx1ZS4gV2hlbiB5b3UgZG8gdGhpcywgQWxsb2Nh
dG9yIHdpbGwgQVNTRVJUIHRoYXQgZm9yY2VkQ2VsbEFsaWdubWVudCA+PSBzaXplb2YoVCkuCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CiBjbGFz
cyBBbGxvY2F0b3IgewogcHVibGljOgogICAgIEFsbG9jYXRvcigpOwpAQCAtNjMsMTMgKzY3LDI0
IEBAIHByaXZhdGU6CiAgICAgdm9pZCogYnVtcEFsbG9jYXRlKCk7CiAgICAgdm9pZCogZnJlZUxp
c3RBbGxvY2F0ZSgpOwogICAgIHZvaWQqIGFsbG9jYXRlU2xvdygpOwotCisgICAgCisgICAgc3Rh
dGljIHNpemVfdCBjZWxsU2l6ZSgpCisgICAgeworICAgICAgICBpZiAoIWZvcmNlZENlbGxBbGln
bm1lbnQpCisgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKFQpOworICAgICAgICAKKyAgICAgICAg
QVNTRVJUKGZvcmNlZENlbGxBbGlnbm1lbnQgPj0gc2l6ZW9mKFQpKTsKKyAgICAgICAgcmV0dXJu
IGZvcmNlZENlbGxBbGlnbm1lbnQ7CisgICAgfQorICAgIAogICAgIHN0cnVjdCBSZWdpb24gewog
ICAgICAgICBzdGF0aWMgc2l6ZV90IHNpemUoKSB7IHJldHVybiA2NCAqIEtCOyB9Ci0gICAgICAg
IHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIHN0ZDo6bWF4KHNpemVvZihSZWdp
b24pLCBzaXplb2YoVCkpOyB9Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlRoaW5n
c1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXplKCkgLSBoZWFkZXJTaXplKCkpIC8gc2l6ZW9mKFQp
OyB9Ci0gICAgICAgIFQqIGRhdGEoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgKyBoZWFkZXJTaXplKCkpOyB9Ci0gICAgICAgIGJvb2wgaXNJblRo
aXNSZWdpb24oY29uc3QgVCogcG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHBvaW50ZXIgLSBkYXRhKCkpIDwgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsgfQorICAgICAg
ICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVn
aW9uKSwgY2VsbFNpemUoKSk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIG51bWJlck9mVGhp
bmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUoKSAtIGhlYWRlclNpemUoKSkgLyBjZWxsU2l6
ZSgpOyB9CisgICAgICAgIHN0YXRpYyBzaXplX3QgcGF5bG9hZFNpemUoKSB7IHJldHVybiBudW1i
ZXJPZlRoaW5nc1BlclJlZ2lvbigpICogY2VsbFNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXls
b2FkQmVnaW4oKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6
ZSgpOyB9CisgICAgICAgIGNoYXIqIHBheWxvYWRFbmQoKSB7IHJldHVybiBwYXlsb2FkQmVnaW4o
KSArIHBheWxvYWRTaXplKCk7IH0KKyAgICAgICAgYm9vbCBpc0luVGhpc1JlZ2lvbihjb25zdCBU
KiBwb2ludGVyKSB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGJpdHdpc2VfY2FzdDxjaGFy
Kj4ocG9pbnRlcikgLSBwYXlsb2FkQmVnaW4oKSkgPCBwYXlsb2FkU2l6ZSgpOyB9CiAgICAgICAg
IHN0YXRpYyBSZWdpb24qIHJlZ2lvbkZvcihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8UmVnaW9uKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiB+KHNp
emUoKSAtIDEpKTsgfQogICAgICAgICAKICAgICAgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIG1f
YWxsb2NhdGlvbjsKQEAgLTgyLDI2ICs5NywyNiBAQCBwcml2YXRlOgogICAgIAogICAgIFJlZ2lv
biogbV9yZWdpb25IZWFkOwogICAgIHZvaWQqKiBtX2ZyZWVMaXN0SGVhZDsKLSAgICBUKiBtX2J1
bXBFbmQ7Ci0gICAgdW5zaWduZWQgbV9idW1wUmVtYWluaW5nOworICAgIGNoYXIqIG1fYnVtcEVu
ZDsKKyAgICBzaXplX3QgbV9idW1wUmVtYWluaW5nOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLWlubGluZSBBbGxvY2F0b3I8VD46OkFsbG9jYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgoraW5saW5lIEFsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50Pjo6QWxsb2NhdG9yKCkKICAgICA6IG1fcmVnaW9uSGVhZCgwKQogICAg
ICwgbV9mcmVlTGlzdEhlYWQoMCkKICAgICAsIG1fYnVtcFJlbWFpbmluZygwKQogewogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIEFsbG9jYXRvcjxUPjo6fkFsbG9jYXRvcigpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgoraW5saW5l
IEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6fkFsbG9jYXRvcigpCiB7CiAgICAg
cmVzZXQoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9pZCog
QWxsb2NhdG9yPFQ+OjphbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBm
b3JjZWRDZWxsQWxpZ25tZW50PgorQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9y
Y2VkQ2VsbEFsaWdubWVudD46OmFsbG9jYXRlKCkKIHsKICAgICB2b2lkKiByZXN1bHQgPSBidW1w
QWxsb2NhdGUoKTsKICAgICBpZiAoTElLRUxZKCEhcmVzdWx0KSkKQEAgLTEwOSw4ICsxMjQsOCBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhCiAgICAgcmV0dXJuIGZy
ZWVMaXN0QWxsb2NhdGUoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2Nh
dG9yPFQ+OjpmcmVlKFQqIG9iamVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZv
cmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50
Pjo6ZnJlZShUKiBvYmplY3QpCiB7CiAgICAgb2JqZWN0LT5+VCgpOwogICAgIApAQCAtMTE5LDgg
KzEzNCw4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlKFQqIG9iamVjdCkKICAgICBtX2ZyZWVM
aXN0SGVhZCA9IGNlbGw7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRv
cjxUPjo6ZnJlZUFsbCgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxs
QWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWVB
bGwoKQogewogICAgIGlmICghbV9yZWdpb25IZWFkKSB7CiAgICAgICAgIEFTU0VSVCghbV9idW1w
UmVtYWluaW5nKTsKQEAgLTE0Miw4ICsxNTcsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFs
bCgpCiAgICAgc3RhcnRCdW1waW5nSW4obV9yZWdpb25IZWFkKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpyZXNldCgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2Vk
Q2VsbEFsaWdubWVudD46OnJlc2V0KCkKIHsKICAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9y
ZWdpb25IZWFkKTsKICAgICAKQEAgLTE1MiwzOCArMTY3LDM4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+
OjpyZXNldCgpCiAgICAgbV9idW1wUmVtYWluaW5nID0gMDsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXVuc2lnbmVkIEFsbG9jYXRvcjxUPjo6aW5kZXhPZihjb25zdCBUKiBvYmplY3QpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgordW5zaWdu
ZWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjppbmRleE9mKGNvbnN0IFQqIG9i
amVjdCkKIHsKICAgICB1bnNpZ25lZCBiYXNlSW5kZXggPSAwOwogICAgIGZvciAoUmVnaW9uKiBy
ZWdpb24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsK
ICAgICAgICAgaWYgKHJlZ2lvbi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKLSAgICAgICAgICAg
IHJldHVybiBiYXNlSW5kZXggKyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICAg
ICAgcmV0dXJuIGJhc2VJbmRleCArIChiaXR3aXNlX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSByZWdp
b24tPnBheWxvYWRCZWdpbigpKSAvIGNlbGxTaXplKCk7CiAgICAgICAgIGJhc2VJbmRleCArPSBS
ZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCk7CiAgICAgfQogICAgIENSQVNIKCk7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BbGxvY2F0b3I8VD4qIEFs
bG9jYXRvcjxUPjo6YWxsb2NhdG9yT2YoY29uc3QgVCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK0FsbG9jYXRvcjxULCBmb3JjZWRD
ZWxsQWxpZ25tZW50PiogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0
b3JPZihjb25zdCBUKiBvYmplY3QpCiB7CiAgICAgcmV0dXJuIFJlZ2lvbjo6cmVnaW9uRm9yKG9i
amVjdCktPm1fYWxsb2NhdG9yOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lO
TElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmJ1bXBBbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgorQUxXQVlTX0lOTElORSB2b2lkKiBB
bGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmJ1bXBBbGxvY2F0ZSgpCiB7Ci0gICAg
aWYgKHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykgewotICAgICAgICByZW1h
aW5pbmctLTsKKyAgICBpZiAoc2l6ZV90IHJlbWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykgewor
ICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemUoKTsKICAgICAgICAgbV9idW1wUmVtYWluaW5n
ID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9idW1wRW5kIC0gKHJlbWFpbmluZyArIDEp
OworICAgICAgICByZXR1cm4gbV9idW1wRW5kIC0gKHJlbWFpbmluZyArIGNlbGxTaXplKCkpOwog
ICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQqIEFs
bG9jYXRvcjxUPjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNp
Z25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxB
bGlnbm1lbnQ+OjpmcmVlTGlzdEFsbG9jYXRlKCkKIHsKICAgICB2b2lkKiogcmVzdWx0ID0gbV9m
cmVlTGlzdEhlYWQ7CiAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQpAQCAtMTkyLDggKzIwNyw4
IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQqIEFsbG9jYXRvcjxUPjo6YWxs
b2NhdGVTbG93KCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGln
bm1lbnQ+Cit2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmFsbG9jYXRl
U2xvdygpCiB7CiAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0SGVhZCk7CiAgICAgQVNTRVJUKCFtX2J1
bXBSZW1haW5pbmcpOwpAQCAtMjE2LDggKzIzMSw4IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxs
b2NhdGVTbG93KCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdCh0eXBlbmFtZSBBbGxv
Y2F0b3I8VD46OlJlZ2lvbiogcmVnaW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQg
Zm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1l
bnQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQodHlwZW5hbWUgQWxsb2NhdG9yPFQsIGZvcmNlZENl
bGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lvbikKIHsKICAgICB3aGlsZSAocmVnaW9uKSB7CiAg
ICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0OwpAQCAtMjI2LDExICsy
NDEsMTEgQEAgdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdAogICAgIH0K
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpzdGFydEJ1bXBp
bmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8VD46OlJlZ2lvbiogcmVnaW9uKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQs
IGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpzdGFydEJ1bXBpbmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8
VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OlJlZ2lvbiogcmVnaW9uKQogewotICAgIG1fYnVtcEVu
ZCA9IHJlZ2lvbi0+ZGF0YSgpICsgUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwot
ICAgIG1fYnVtcFJlbWFpbmluZyA9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsK
KyAgICBtX2J1bXBFbmQgPSByZWdpb24tPnBheWxvYWRFbmQoKTsKKyAgICBtX2J1bXBSZW1haW5p
bmcgPSBSZWdpb246OnBheWxvYWRTaXplKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDYgKzY5OCwxOCBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAog
ICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAg
ICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxk
MiksIEVkZ2UoY2hpbGQzKSk7CisgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGRlZmF1bHRGbGFn
cyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQorICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJl
bihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBOb2RlKiBhZGRU
b0dyYXBoKE5vZGVUeXBlIG9wLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVk
Z2UgY2hpbGQzID0gRWRnZSgpKQorICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFw
aC5hZGROb2RlKAorICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3Bl
Y05vbmUsCiAgICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMyk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CkBAIC03MTAsNyArNzIyLDcgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKICAgICAgICAgICAg
IERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3As
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAg
ICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRn
ZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAgICBpZiAob3AgPT0gUGhpKQogICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIGVsc2UK
QEAgLTcyNCw3ICs3MzYsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0
ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5m
bzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyAgICAgICAgICAgIG9wLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIp
LCBFZGdlKGNoaWxkMykpOwogICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwogCkBAIC0xNDY1LDcgKzE0NzcsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoYm9vbCB1CiAgICAgIAogICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7IC8vIE1hdGgubWluKHgpCiAgICAgICAgIE5v
ZGUqIHJlc3VsdCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKTsK
LSAgICAgICAgYWRkVG9HcmFwaChDaGVja051bWJlciwgcmVzdWx0KTsKKyAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVyVXNlKSk7CiAgICAgICAgIHNldEludHJp
bnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCByZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2OSw3ICs5NjksNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFjY2Vzc2luZyBhcmd1bWVudHMgdGhlbiBpdCdzIHBv
dGVudGlhbGx5IGFjY2Vzc2luZyBsb2NhbHMuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpBcmd1bWVudHMpCiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTEwMDIsNiArMTAwMiw4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKICAgICAgICAg
ICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlm
IChlZGdlLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OyAvLyBLZWVwIHRoZSB0eXBlIGNoZWNrLgogICAgICAgICAgICAgaWYgKGVkZ2UtPmZsYWdzKCkg
JiBOb2RlUmVsZXZhbnRUb09TUikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIApAQCAtMTAxNCwxOCArMTAxNiwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIGVudW0gUHJlZGljdGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGlj
dGlvbiwgQWxsb3dQcmVkaWN0aW9uTWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50
KE5vZGUqIHJlcGxhY2VtZW50LCBQcmVkaWN0aW9uSGFuZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5k
bGluZ01vZGUgPSBSZXF1aXJlU2FtZVByZWRpY3Rpb24pCisgICAgYm9vbCBzZXRSZXBsYWNlbWVu
dChOb2RlKiByZXBsYWNlbWVudCkKICAgICB7CiAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICAvLyBCZSBzYWZlLiBE
b24ndCB0cnkgdG8gcGVyZm9ybSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0
Ci0gICAgICAgIC8vIGFncmVlLgotICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9
PSBSZXF1aXJlU2FtZVByZWRpY3Rpb24KLSAgICAgICAgICAgICYmIG1fY3VycmVudE5vZGUtPnBy
ZWRpY3Rpb24oKSAhPSByZXBsYWNlbWVudC0+cHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY3Vy
cmVudE5vZGUtPmluZGV4KCksIHJlcGxhY2VtZW50LT5pbmRleCgpKTsKICNlbmRpZgpAQCAtMTIz
MCw3ICsxMjI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAg
ICAgICAgLy8gVGhpcyBpcyBzdHJhbmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxs
IGNvbnZlcnQgbm9kZXMgdG8gY29uc3RhbnRzLAogICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJl
c3VsdCBpbiBkdXBsaWNhdGVkIGNvbnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVw
LgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSksIEFsbG93UHJl
ZGljdGlvbk1pc21hdGNoKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NF
KG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
V2Vha0pTQ29uc3RhbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJ
KHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDkgQEAKICNkZWZpbmUgREZHX0VOQUJMRShE
RkdfRkVBVFVSRSkgKGRlZmluZWQgREZHX0VOQUJMRV8jI0RGR19GRUFUVVJFICAmJiBERkdfRU5B
QkxFXyMjREZHX0ZFQVRVUkUpCiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9u
IGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCi0j
ZGVmaW5lIERGR19FTkFCTEVfREVCVUdfVkVSQk9TRSAwCisjZGVmaW5lIERGR19FTkFCTEVfREVC
VUdfVkVSQk9TRSAxCiAvLyBFbWl0IGR1bXBzIGR1cmluZyBwcm9wYWdhdGlvbiwgaW4gYWRkaXRp
b24gdG8ganVzdCBhZnRlci4KLSNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFIDAKKyNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFIDEK
IC8vIEVtaXQgbG9nZ2luZyBmb3IgT1NSIGV4aXQgdmFsdWUgcmVjb3ZlcmllcyBhdCBldmVyeSBu
b2RlLCBub3QganVzdCBub2RlcyB0aGF0CiAvLyBhY3R1YWxseSBoYXMgc3BlY3VsYXRpb24gY2hl
Y2tzLgogI2RlZmluZSBERkdfRU5BQkxFX1ZFUkJPU0VfVkFMVUVfUkVDT1ZFUklFUyAwCkBAIC04
MywxMiArODMsNiBAQCBzdHJ1Y3QgTm9kZVBvaW50ZXJUcmFpdHMgewogICAgIHN0YXRpYyB2b2lk
IGR1bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOwogfTsKIAotZW51bSBVc2VLaW5k
IHsKLSAgICBVbnR5cGVkVXNlLAotICAgIERvdWJsZVVzZSwKLSAgICBMYXN0VXNlS2luZCAvLyBN
dXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0
byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgotfTsKLQogLy8gVXNlIFJlZkNo
aWxkcmVuIGlmIHRoZSBjaGlsZCByZWYgY291bnRzIGhhdmVuJ3QgYWxyZWFkeSBiZWVuIGFkanVz
dGVkIHVzaW5nCiAvLyBvdGhlciBtZWFucyBhbmQgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgaXMg
dHJ1ZToKIC8vIC0gVGhlIG5vZGUgeW91J3JlIGNyZWF0aW5nIGlzIE11c3RHZW5lcmF0ZS4KQEAg
LTEwNiwxOSArMTAwLDYgQEAgZW51bSBSZWZOb2RlTW9kZSB7CiAgICAgRG9udFJlZk5vZGUKIH07
CiAKLWlubGluZSBjb25zdCBjaGFyKiB1c2VLaW5kVG9TdHJpbmcoVXNlS2luZCB1c2VLaW5kKQot
ewotICAgIHN3aXRjaCAodXNlS2luZCkgewotICAgIGNhc2UgVW50eXBlZFVzZToKLSAgICAgICAg
cmV0dXJuICIiOwotICAgIGNhc2UgRG91YmxlVXNlOgotICAgICAgICByZXR1cm4gImQiOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQogaW5saW5lIGJvb2wgaXNBUk12N3MoKQogewogI2lmIENQ
VShBUFBMRV9BUk1WN1MpCkBAIC0yMzYsNiArMjE3LDggQEAgZW51bSBVbmlmaWNhdGlvblN0YXRl
IHsKICAgICBHbG9iYWxseVVuaWZpZWQKIH07CiAKK2VudW0gT3BlcmFuZFNwZWN1bGF0aW9uTW9k
ZSB7IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
IH07CisKIGVudW0gU3BlY3VsYXRpb25EaXJlY3Rpb24geyBGb3J3YXJkU3BlY3VsYXRpb24sIEJh
Y2t3YXJkU3BlY3VsYXRpb24gfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAz
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJl
KCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2Rl
LT5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9u
KHZhbHVlLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50KCkgPT0gMSk7CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwpAQCAt
MTQ5LDEwICsxNDcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAg
ICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7CiAgICAgICAgICAgICAgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBOb2RlKiBj
aGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBFZGdlIGNoaWxk
RWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hp
bGRFZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0gbm9kZS0+aWRlbnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24oY2hpbGQtPnByZWRpY3Rpb24oKSkpCisgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1
Y3R1cmUoKTsKQEAgLTE4MSwxOCArMTgwLDI0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmln
aW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVy
ZSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZvck5v
ZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSogcHJvcGVydHlTdG9y
YWdlOworICAgICAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOwogICAgICAg
ICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQotICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9y
aWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3Rv
cmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtMjA3LDkgKzIxMiwx
MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAgICAgICAgY2Fz
ZSBQdXRCeUlkRGlyZWN0OiB7CiAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gbm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUt
PmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUo
KTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbm9kZS0+aWRl
bnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VS
VChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpOworICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxk
KS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjM4LDkgKzI0NiwxNSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1
dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkp
KTsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmln
aW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkRWRn
ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0g
MDsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgKQEAgLTI2NCwzOCArMjc4LDM4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBOb2RlKiBw
cm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1
cy5vZmZzZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOyAvLyBUaGUg
Y2hpbGQgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcm9wZXJ0eSBpbmRleCwgc28gcmVmIGl0IHRvIHJl
ZmxlY3QgdGhlIGRvdWJsZSB1c2UuCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGNoaWxkOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVk
Z2U7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkg
fHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHN0YXR1cy5uZXdTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRl
cmZseSwgY29kZU9yaWdpbiwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0
QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNl
dCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVk
Z2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh0
cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmln
aW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMu
b2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5v
ZGUsIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWRnZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgY2hpbGQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7
CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5
T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFn
ZSk7CkBAIC0zNDAsNyArMzU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogcGhhbnRvbSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBwaGkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2UocGhpKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0gcGhhbnRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGFudG9t
OwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0zOTEsMTMgKzQwNSwxMyBAQCBwcml2YXRl
OgogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUs
IFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAgICAgICAgICAgICAg
ICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCB3ZWFrQ29uc3RhbnQpOwor
ICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIEVk
Z2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVj
dHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCB3ZWFrQ29uc3RhbnQpOworICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIEVkZ2Uod2Vh
a0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgaXMgbmVjZXNz
YXJ5IGJlY2F1c2UgdGhlIENGQSBtYXkgcmVhY2ggY29uY2x1c2lvbnMgYWJvdXQgY29uc3RhbnRz
IGJhc2VkIG9uIGl0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDYgQEAgaW5saW5lIGJvb2wgY29t
cGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICBpZiAoIWNoYW5nZWQpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIGRmZy5yZXNldEV4aXRTdGF0ZXMoKTsKLSAg
ICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhk
ZmcpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNw
cAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ewotICAgIG91dC5wcmludCh1c2VLaW5kVG9TdHJpbmcodXNlS2luZCgpKSwgbm9kZSgpKTsKKyAg
ICBpZiAodXNlS2luZCgpICE9IFVudHlwZWRVc2UpCisgICAgICAgIG91dC5wcmludCh1c2VLaW5k
KCksICI6Iik7CisgICAgb3V0LnByaW50KG5vZGUoKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAx
NDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAi
REZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKLSAgICBzdGF0aWMgdWludDMyX3Qg
c2hpZnQoKSB7IHJldHVybiAyOyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1
cm4gNDsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwg
VXNlS2luZCB1c2VLaW5kKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
OSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID09IEJlZm9yZUZpeHBvaW50KTsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBmaXh1cEJsb2NrKG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc2
LDUwICs3OSwyNjIgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICAKICAgICAgICAgc3dpdGNo
IChvcCkgewotICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQorICAgICAgICBjYXNlIFNldExvY2Fs
OiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+aXNDYXB0dXJlZCgpCisgICAgICAgICAgICAgICAgfHwgbV9ncmFwaC5pc0NyZWF0ZWRUaGlz
QXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVk
aWN0aW9uKCkpKQorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3Jt
YXQoKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCksIE51
bWJlclVzZSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5
cGUgPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChp
c0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29s
ZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIGNhc2UgQml0
T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAg
ICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDogeworICAgICAgICAg
ICAgZml4SW50RWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogeworICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOiB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewor
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
IHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQ
cm9maWxlID0gCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihu
b2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAgICAgQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7Ci0gICAg
ICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlQcm9maWxl
LT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihu
b2RlLT5jb2RlT3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gQXJyYXlNb2Rl
Ojpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2UpOwotICAgICAg
ICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJv
ZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJl
LAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoTnVtYmVyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE5v
dENlbGxVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAgICAgICAgIGlmIChhdHRlbXB0VG9N
YWtlSW50ZWdlckFkZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAgICBp
ZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7CisgICAgICAg
ICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcml0aERpdjogeworICAgICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICYm
IG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1g4
NigpIHx8IGlzQVJNdjdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigp
LnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBhcnJheU1v
ZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUt
PnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0
aCgpKQorICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShub2RlLT5jaGls
ZDIoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIHJlZidpbmcg
b24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9tCisgICAgICAg
ICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgorICAgICAgICAgICAgICAgIE5vZGUq
IG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJs
ZSwgKm5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
KERvdWJsZUFzSW50MzIpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxp
emUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVkZ2UoKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxl
bmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJh
dGUpOwotICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUNsb2JiZXJzV29ybGQpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKLSAgICAg
ICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFy
cmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5n
dGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgaWYg
KCFzdG9yYWdlKQorICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNlIEFyaXRoTWF4
OgorICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRl
SW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJ
bnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQz
MlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKKyAgICAgICAg
ICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEFyaXRoU3FydDogeworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgTG9naWNhbE5vdDogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisg
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVHlwZU9mOiB7
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
KQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxs
KCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBDb21wYXJlRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgIGNh
c2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgY2Fz
ZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOiB7CisgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFudCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUo
KSkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9
IENvbXBhcmVFcSkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JP
dGhlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmpl
Y3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0
T3JPdGhlclVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIo
KSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigp
ID0gRWRnZShzdG9yYWdlKTsKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CisgICAgICAg
IGNhc2UgQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQ6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVy
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxh
dGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQo
T2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9i
amVjdFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS5jYW5DU0VTdG9y
YWdlKCkpOworCisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJDb2RlQXQ6IHsKKyAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBoYXZlIG5vIGdvb2Qg
d2F5IG9mIHJlZmluaW5nIHRoZXNlLgorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9k
ZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5nKSk7CisgICAgICAgICAgICBibGVzc0FycmF5
T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkp
OworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAg
ICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1v
ZGUoKS5yZWZpbmUoCkBAIC0xMjcsNyArMzQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAg
U3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIDIpOworICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCksIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQXJyYXlNb2Rl
IGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgICAgICAgICAgaWYgKGFycmF5TW9k
ZS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZQpAQCAtMTM4LDEzICszNTMsNzcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAmJiAhKG5vZGUtPmZsYWdzKCkgJiBOb2RlVXNlZEFzT3RoZXIpKQog
ICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUud2l0aFNwZWN1bGF0
aW9uKEFycmF5OjpTYW5lQ2hhaW4pKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNl
bGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVk
OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgotICAgICAg
ICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBo
YXZlIG5vIGdvb2Qgd2F5IG9mIHJlZmluaW5nIHRoZXNlLgotICAgICAgICAgICAgQVNTRVJUKG5v
ZGUtPmFycmF5TW9kZSgpID09IEFycmF5TW9kZShBcnJheTo6U3RyaW5nKSk7Ci0gICAgICAgICAg
ICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgMik7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOiB7CisgICAgICAgICAgICBFZGdlJiBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDApOworICAgICAgICAgICAgRWRnZSYgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKKyAgICAgICAgICAgIEVkZ2UmIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMik7CisKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAg
ICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAg
IGNoaWxkMS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjaGlsZDItPnByZWRp
Y3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQzLT5wcmVkaWN0aW9uKCkpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxk
MiwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lk
ZWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgY2hpbGQxLnNl
dFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBjaGlsZDIuc2V0VXNlS2lu
ZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShjaGlsZDMsIFJlYWxO
dW1iZXJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpV
aW50OEFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgorICAgICAgICAgICAgICAgIGNoaWxkMS5zZXRVc2VLaW5kKEtub3du
Q2VsbFVzZSk7CisgICAgICAgICAgICAgICAgY2hpbGQyLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY2hpbGQzLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShjaGlsZDMpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAg
ICAgIGNoaWxkMS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgY2hp
bGQyLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
Y2hpbGQzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgY2hpbGQxLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAg
ICAgICAgICBjaGlsZDIuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC0xNjMsMTEgKzQ0MiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAg
ICAgICAgIFNwZWNJbnQzMiwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnBy
ZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGls
ZDEoKSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+
Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJ
bnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzYs
NDkgKzQ1OSwyNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5j
aGlsZDEoKSwgRWRnZSgpLCAxKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9k
ZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgY2Fz
ZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNoaWZ0Ogot
ICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7Ci0gICAg
ICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAg
ICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAg
ICBjYXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0g
ICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxk
MigpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7
Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgorICAg
ICAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKENl
bGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MCk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xl
YW4oKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5V
c2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZU9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNhbE5vdCA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90LT5vcCgp
ID09IExvZ2ljYWxOb3QKQEAgLTI2MSwxNDkgKzUyMiwyNTcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZXRMb2Nh
bDogewotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNwZWN1bGF0
aW9uKTsKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDE3NQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBj
YXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07KSB7
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAgICAgICAg
ICAgICBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCBpKS0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRF
WElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+bnVtQ2hpbGRyZW4oKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRl
eCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFu
ZEluZGV4XS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51
bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XS5zZXRV
c2VLaW5kKFJlYWxOdW1iZXJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBpZiAoIU5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0Rl
ZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAg
IGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkKLSAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgxKTsKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7CisgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZTogewotICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Cisg
ICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsKKyAgICAgICAgICAgIGlmIChpc090aGVyU3BlY3Vs
YXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChp
c09iamVjdFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE1p
bjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoKLSAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAg
ICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKDEpOworICAgICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CisgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
Ci0gICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNYODYoKSB8fCBpc0FSTXY3cygpKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRv
RG91YmxlTm9kZSgwKTsKLSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSgx
KTsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0
aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZyb20KLSAgICAgICAgICAg
ICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCi0gICAgICAgICAgICAgICAgTm9kZSogbmV3
RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCAq
bm9kZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoRG91
YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShF
ZGdlKG5ld0RpdmlzaW9uLCBEb3VibGVVc2UpLCBFZGdlKCksIEVkZ2UoKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDAp
OwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEdldFNjb3BlUmVnaXN0ZXJzOgorICAgICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKKyAgICAg
ICAgY2FzZSBTa2lwVG9wU2NvcGU6CisgICAgICAgIGNhc2UgU2tpcFNjb3BlOgorICAgICAgICBj
YXNlIFNldENhbGxlZToKKyAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgorICAgICAgICBjYXNlIFB1
dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAg
ICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIEdldFNjb3Bl
OgorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkK
LSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAg
IGNhc2UgR2V0QnlJZDogeworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGlmICghaXNJbnQz
MlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmll
ck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUg
PSAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKKyAgICAgICAgICAg
IGlmIChhcnJheVByb2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21P
YnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5o
YXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJl
ZmluZShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOwor
ICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIG5vZGUtPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKKyAg
ICAgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7CisgICAg
ICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNX
b3JsZCk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CisgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOworICAgICAgICAgICAgbm9kZS0+
c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUq
IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlW
YWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICAgICAgRWRnZSBjaGls
ZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgRWRnZSBjaGls
ZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgRWRnZSBjaGls
ZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotCi0gICAgICAgICAgICBub2RlLT5z
ZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAot
ICAgICAgICAgICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAg
ICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+
cHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24oY2hpbGQxLCBjaGlsZDIsIDMpOworICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToK
KyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tT
dHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Cisg
ICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAg
ICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgY2Fz
ZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6IHsKKyAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
PmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZToKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAg
ICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5
OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAg
ICAgICAgICAgICAgIGlmICghY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsK
KyAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsgaS0tOykgewotICAgICAgICAg
ICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RV
cHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+aW5kZXhpbmdUeXBlKCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgaSktPnByZWRp
Y3Rpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5n
VHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCi0gICAgICAgICAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGNhc2Ug
QXJyYXlpZnk6CisgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogeworICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5k
KEludDMyVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICAgICAg
aWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBhcHBlYXJzIGJyb2tlbjogQ2hlY2tIYXNJbnN0YW5j
ZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRpb25hbCBjZWxsCisgICAgICAgICAgICAvLyBjaGVj
ay4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ3OQorICAgICAg
ICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkpCisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6CisgICAgICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIGNhc2UgTm9wOgorICAgICAgICBj
YXNlIFBoaToKKyAgICAgICAgY2FzZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICAgICAgY2Fz
ZSBQaGFudG9tUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyNpZiAh
QVNTRVJUX0RJU0FCTEVEICAgIAorICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhl
cmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcg
b3Bjb2Rlcy4KKyAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBQaGFudG9t
OgorICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6
CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAg
ICBjYXNlIEZsdXNoOgorICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgY2FzZSBH
ZXRMb2NhbFVubGlua2VkOgorICAgICAgICBjYXNlIElubGluZVN0YXJ0OgorICAgICAgICBjYXNl
IEdldE15U2NvcGU6CisgICAgICAgIGNhc2UgR2V0U2NvcGVkVmFyOgorICAgICAgICBjYXNlIEdl
dEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgR2xv
YmFsVmFyV2F0Y2hwb2ludDoKKyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKKyAgICAg
ICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CisgICAgICAgIGNhc2UgQ2FsbDoK
KyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAg
ICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICBjYXNlIE5ld1JlZ2V4cDoKKyAgICAgICAg
Y2FzZSBSZXNvbHZlOgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgorICAgICAgICBjYXNlIFJl
c29sdmVCYXNlU3RyaWN0UHV0OgorICAgICAgICBjYXNlIFJlc29sdmVHbG9iYWw6CisgICAgICAg
IGNhc2UgQnJlYWtwb2ludDoKKyAgICAgICAgY2FzZSBJc1VuZGVmaW5lZDoKKyAgICAgICAgY2Fz
ZSBJc0Jvb2xlYW46CisgICAgICAgIGNhc2UgSXNOdW1iZXI6CisgICAgICAgIGNhc2UgSXNTdHJp
bmc6CisgICAgICAgIGNhc2UgSXNPYmplY3Q6CisgICAgICAgIGNhc2UgSXNGdW5jdGlvbjoKKyAg
ICAgICAgY2FzZSBTdHJDYXQ6CisgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAg
ICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKKyAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6
CisgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBUZWFyT2ZmQXJn
dW1lbnRzOgorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgorICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKKyAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05v
dENyZWF0ZWQ6CisgICAgICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAgIGNhc2UgTmV3RnVu
Y3Rpb25Ob0NoZWNrOgorICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAg
ICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBUaHJvdzoK
KyAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgorICAgICAgICBjYXNlIEdhcmJhZ2VW
YWx1ZToKKyAgICAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICAgICAgY2FzZSBGb3JjZU9T
UkV4aXQ6CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC00MjEsNiArNzkwLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYXJyYXlNb2RlLm9yaWdpbmFsQXJy
YXlTdHJ1Y3R1cmUobV9ncmFwaCwgY29kZU9yaWdpbik7CiAgICAgICAgIAorICAgICAgICBFZGdl
IGluZGV4RWRnZSA9IGluZGV4ID8gRWRnZShpbmRleCwgSW50MzJVc2UpIDogRWRnZSgpOworICAg
ICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS5kb2VzQ29udmVyc2lvbigpKSB7CiAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1faW5kZXhJbkJsb2Nr
ID4gMCkgewpAQCAtNDM1LDIxICs4MDYsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwgQXJyYXlpZnlUb1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHN0cnVjdHVyZSksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBhcnJheSwgaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpLCBpbmRleEVkZ2UpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlpZnksIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBhcnJheSwgaW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVz
ZSksIGluZGV4RWRnZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAotICAg
ICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJl
KSksIGFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KHN0cnVjdHVyZSkpLCBFZGdlKGFycmF5LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUs
IFNwZWNOb25lLCBDaGVja0FycmF5LCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXkpOworICAgICAgICAgICAgICAgICAgICBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApAQCAtNDYxLDIxICs4MzIsMTggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywKICAgICAgICAgICAgICAgICBzaG91
bGRHZW5lcmF0ZSA/IFJlZkNoaWxkcmVuIDogRG9udFJlZkNoaWxkcmVuLAogICAgICAgICAgICAg
ICAgIHNob3VsZEdlbmVyYXRlID8gUmVmTm9kZSA6IERvbnRSZWZOb2RlLAotICAgICAgICAgICAg
ICAgIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KTsKKyAgICAgICAg
ICAgICAgICBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBFZGdlKGFycmF5LCBL
bm93bkNlbGxVc2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywKICAgICAg
ICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBEb250UmVmQ2hpbGRyZW4sCiAg
ICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZk5vZGUgOiBEb250UmVmTm9kZSwKLSAgICAg
ICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXkpOworICAgICAgICAgICAgU3BlY05vbmUs
IEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUu
YXNXb3JkKCkpLCBFZGdlKGFycmF5LCBLbm93bkNlbGxVc2UpKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWduZWQg
c3RvcmFnZUNoaWxkSWR4KQorICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2Us
IEVkZ2UgaW5kZXgsIEVkZ2UmIHN0b3JhZ2VDaGlsZCkKICAgICB7Ci0gICAgICAgIGlmIChtX2dy
YXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9yZUZpeHBvaW50KQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudE5vZGU7CiAgICAgICAg
IAogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNDk5LDcg
Kzg2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG5v
ZGUsIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdlKHN0b3JhZ2UpOworICAgICAgICAgICAgc3RvcmFn
ZUNoaWxkID0gRWRnZShzdG9yYWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSB9
CiAgICAgfQpAQCAtNTA3LDQ4ICs4NzUsOTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpeEludEVk
Z2UoRWRnZSYgZWRnZSkKICAgICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBlZGdlLm5vZGUoKTsK
LSAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKQorICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIpIHsK
KyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRn
ZTsKICAgICAgICAgRWRnZSBuZXdFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAorICAg
ICAgICBpZiAobmV3RWRnZS51c2VLaW5kKCkgIT0gSW50MzJVc2UpIHsKKyAgICAgICAgICAgIGVk
Z2Uuc2V0VXNlS2luZChLbm93bkludDMyVXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSk7CisgICAgICAgIAogICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAg
ICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKICAgICAgICAgCiAgICAgICAgIGVkZ2UgPSBuZXdF
ZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpeERvdWJsZUVkZ2UodW5zaWduZWQgY2hpbGRJ
bmRleCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlv
bikKKyAgICB2b2lkIGZpeERvdWJsZUVkZ2UoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0g
TnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1
bGF0aW9uKQogICAgIHsKLSAgICAgICAgTm9kZSogc291cmNlID0gbV9jdXJyZW50Tm9kZTsKLSAg
ICAgICAgRWRnZSYgZWRnZSA9IG1fZ3JhcGguY2hpbGQoc291cmNlLCBjaGlsZEluZGV4KTsKLSAg
ICAgICAgCiAgICAgICAgIGlmIChlZGdlLT5wcmVkaWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0g
ICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91YmxlVXNlKTsKKyAgICAgICAgICAgIGVkZ2Uu
c2V0VXNlS2luZCh1c2VLaW5kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoY2hpbGRJbmRleCwgZGlyZWN0
aW9uKTsKKyAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoZWRnZSwgdXNlS2luZCwgZGly
ZWN0aW9uKTsKICAgICB9CiAKLSAgICB2b2lkIGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVuc2ln
bmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJk
U3BlY3VsYXRpb24pCisgICAgdm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShFZGdlJiBlZGdl
LCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ss
IERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwKICAgICAgICAgICAgIGRpcmVj
dGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uID8gSW50MzJUb0RvdWJsZSA6IEZvcndhcmRJbnQz
MlRvRG91YmxlLAotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgbV9ncmFw
aC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS5ub2RlKCkpOworICAgICAgICAgICAg
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwgTnVtYmVyVXNlKSk7
CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAg
ICAgICAgZGF0YUxvZ0YoCiAgICAgICAgICAgICAiKHJlcGxhY2luZyBAJXUtPkAldSB3aXRoIEAl
dS0+QCV1KSAiLAotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5j
aGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+
aW5kZXgoKSwgcmVzdWx0LT5pbmRleCgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmlu
ZGV4KCksIGVkZ2UtPmluZGV4KCksIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5k
ZXgoKSk7CiAjZW5kaWYKIAotICAgICAgICBtX2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNo
aWxkSW5kZXgpID0gRWRnZShyZXN1bHQsIERvdWJsZVVzZSk7CisgICAgICAgIGVkZ2UgPSBFZGdl
KHJlc3VsdCwgdXNlS2luZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ1bmNhdGVDb25zdGFu
dFRvSW50MzIoRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIE5vZGUqIG9sZE5vZGUgPSBlZGdl
Lm5vZGUoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChvbGROb2RlLT5oYXNDb25zdGFudCgp
KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQob2xk
Tm9kZSk7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKEpTQzo6dG9JbnQzMih2YWx1ZS5h
c051bWJlcigpKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5pc0ludDMyKCkpOworICAgICAgICBl
ZGdlLnNldE5vZGUobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG1faW5k
ZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNJbnQzMiwgSlNDb25zdGFu
dCwKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhjb2RlQmxv
Y2soKS0+YWRkT3JGaW5kQ29uc3RhbnQodmFsdWUpKSkpOworICAgICAgICBtX2dyYXBoLmRlcmVm
KG9sZE5vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNl
c3NhcnkoTm9kZSogbm9kZSwgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUpCisgICAgeworICAgICAg
ICBpZiAobW9kZSAhPSBTcGVjdWxhdGVJbnRlZ2VyQW5kVHJ1bmNhdGVDb25zdGFudHMpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkt
Pmhhc0NvbnN0YW50KCkgfHwgbm9kZS0+Y2hpbGQyKCktPmhhc0NvbnN0YW50KCkpOworICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCisgICAgICAgICAgICB0cnVuY2F0
ZUNvbnN0YW50VG9JbnQzMihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRydW5jYXRlQ29uc3RhbnRUb0ludDMyKG5vZGUtPmNoaWxkMigpKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBhdHRlbXB0VG9NYWtlSW50ZWdlckFkZChOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBtX2dyYXBoLmFkZFNwZWN1bGF0aW9uTW9k
ZShub2RlKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gRG9udFNwZWN1bGF0ZUludGVnZXIpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICB0cnVuY2F0ZUNvbnN0YW50
c0lmTmVjZXNzYXJ5KG5vZGUsIG1vZGUpOworICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKEludDMyVXNlKTsKKyAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0Niw0NSArMzQ2LDE0IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkKICAgICB9CiB9CiAKLS8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYmUgaXRlcmF0
aXZlLCBub3QgcmVjdXJzaXZlLgotI2RlZmluZSBET19UT19DSElMRFJFTihub2RlLCB0aGluZ1Rv
RG8pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBOb2RlKiBfbm9k
ZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBf
bm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIF9jaGls
ZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAotICAg
ICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bX2No
aWxkSWR4XSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICB0aGlu
Z1RvRG8obV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hp
bGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgICAgIEFTU0VSVCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgICAgICAhX25vZGUtPmNoaWxkMigpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUt
PmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGls
ZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxk
MygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDIoKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9u
b2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCiB2b2lkIEdyYXBoOjpyZWZDaGlsZHJl
bihOb2RlKiBvcCkKIHsKLSAgICBET19UT19DSElMRFJFTihvcCwgcmVmKTsKKyAgICBERkdfTk9E
RV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIHJlZik7CiB9CiAKIHZvaWQgR3JhcGg6OmRlcmVm
Q2hpbGRyZW4oTm9kZSogb3ApCiB7Ci0gICAgRE9fVE9fQ0hJTERSRU4ob3AsIGRlcmVmKTsKKyAg
ICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIGRlcmVmKTsKIH0KIAogdm9pZCBH
cmFwaDo6ZGV0aHJlYWQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBQdXRUb0Jhc2VPcGVyYXRp
b25EYXRhIHsKIAogZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogICAgIERvbnRTcGVjdWxhdGVJ
bnRlZ2VyLAotICAgIFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93LAorICAg
IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0YW50cywKICAgICBTcGVjdWxhdGVJbnRl
Z2VyCiB9OwogCkBAIC0xMDAsMTAgKzEwMCwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZWZD
aGlsZHJlbihub2RlKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQotICAgIEVkZ2UgcmVm
KEVkZ2Ugbm9kZVVzZSkKKyAgICBFZGdlIHJlZihFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBy
ZWYobm9kZVVzZS5ub2RlKCkpOwotICAgICAgICByZXR1cm4gbm9kZVVzZTsKKyAgICAgICAgcmVm
KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIGVkZ2U7CisgICAgfQorICAgIEVkZ2UgcmVm
KE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVmKGVkZ2UpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGRlcmVmKE5vZGUqIG5vZGUpCkBAIC0xMTUsOSArMTE5LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKG5vZGUtPnBvc3RmaXhEZXJlZigpID09IDEpCiAgICAgICAg
ICAgICBkZXJlZkNoaWxkcmVuKG5vZGUpOwogICAgIH0KLSAgICB2b2lkIGRlcmVmKEVkZ2Ugbm9k
ZVVzZSkKKyAgICB2b2lkIGRlcmVmKEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGRlcmVmKG5v
ZGVVc2Uubm9kZSgpKTsKKyAgICAgICAgZGVyZWYoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICB2
b2lkIGRlcmVmKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBkZXJlZihlZGdlKTsK
ICAgICB9CiAgICAgCiAgICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3VudCBnb2VzIGZyb20gMCB0
byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBhbGwgb2YgaXRzIGNoaWxk
cmVuLCBhbmQgdmljZSB2ZXJzYS4KQEAgLTE3NCw5ICsxODIsOSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElk
eCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4Kysp
CiAgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0sIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgp
LCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRn
ZShub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAg
cGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNob3Vs
ZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUt
PmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0
aW9uRm9yRWRnZShub2RlLT5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAg
cGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQzKCksIHNob3VsZEdlbmVyYXRl
KTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTUzMCw5ICs1MzgsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKLSAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7
Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rp
b24oKTsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCk7CisgICAgICAgIHJldHVybiBpc051bWVyaWNhbChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpICYmIGlzTnVtZXJpY2FsKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQo
KSk7CiAgICAgfQogICAgIAogICAgIC8vIE5vdGUgdGhhdCBhICd0cnVlJyByZXR1cm4gZG9lcyBu
b3QgYWN0dWFsbHkgbWVhbiB0aGF0IHRoZSBCeVZhbCBhY2Nlc3MgY2xvYmJlcnMgbm90aGluZy4K
QEAgLTc4MSw3ICs3ODcsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRl
IDwgLXR3b1RvVGhlNDggfHwgZG91YmxlSW1tZWRpYXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAg
ICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICAgICAgCi0gICAgICAgIHJldHVy
biBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFkZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxh
dGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwor
ICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdz
KCkpID8gU3BlY3VsYXRlSW50ZWdlckFuZFRydW5jYXRlQ29uc3RhbnRzIDogRG9udFNwZWN1bGF0
ZUludGVnZXI7CiAgICAgfQogICAgIAogICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihOb2RlKiBtdWwsIE5vZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCkBA
IC04MzAsNiArODM2LDM2IEBAIGlubGluZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9y
QnkKICAgICByZXR1cm4gKmJpbmFyeVNlYXJjaDxCbG9ja0luZGV4LCB1bnNpZ25lZD4obGlua2lu
Z1RhcmdldHMsIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgR2V0Qnl0ZWNv
ZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7CiB9CiAKKyNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJ
TERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKKyAgICAgICAg
Tm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2No
aWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICBfY2hpbGRJZHggPCBfbm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVu
KCk7IFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1f
dmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICAgICAgdGhpbmdUb0RvKF9ub2RlLCAoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4
XSk7IFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlm
ICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIo
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
ICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9E
byhfbm9kZSwgX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9k
ZSwgX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTEgKzk1LDEwIEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewogICAgICAgICBzZXRPcEFu
ZERlZmF1bHRGbGFncyhvcCk7Ci0gICAgICAgIEFTU0VSVCghIShtX2ZsYWdzICYgTm9kZUhhc1Zh
ckFyZ3MpID09IChjaGlsZHJlbi5raW5kKCkgPT0gQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUpKTsK
ICAgICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRy
ZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNo
aWxkMyA9IDApCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBF
ZGdlIGNoaWxkMSA9IEVkZ2UoKSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0g
RWRnZSgpKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGls
ZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAg
ICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTExLDcg
KzExMCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2Rl
IHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUo
Tm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZSogY2hp
bGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKKyAgICBOb2RlKE5v
ZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIEVkZ2UgY2hpbGQx
ID0gRWRnZSgpLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAg
ICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFj
ZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmly
dHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMjQsNyArMTIzLDcgQEAg
c3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0
byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKE5vZGVUeXBl
IG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9k
ZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKKyAgICBO
b2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcElu
Zm8gaW1tMiwgRWRnZSBjaGlsZDEgPSBFZGdlKCksIEVkZ2UgY2hpbGQyID0gRWRnZSgpLCBFZGdl
IGNoaWxkMyA9IEVkZ2UoKSkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAg
ICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGls
ZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikK
QEAgLTI5NCwyMiArMjkzLDIyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY29udmVydFRvU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0
dXJlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2ln
bmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGUqIHN0b3JhZ2UpCisgICAgdm9pZCBjb252
ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBFZGdlIHN0
b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0g
R2V0QnlJZEZsdXNoKTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4
OwotICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShzdG9yYWdlKSk7CisgICAgICAgIGNo
aWxkcmVuLnNldENoaWxkMShzdG9yYWdlKTsKICAgICAgICAgbV9vcCA9IEdldEJ5T2Zmc2V0Owog
ICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4
LCBOb2RlKiBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQg
c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29wID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICBt
X29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7CiAgICAgICAgIGNoaWxkcmVuLnNldENo
aWxkMyhjaGlsZHJlbi5jaGlsZDIoKSk7CiAgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMihjaGls
ZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShFZGdlKHN0b3JhZ2Up
KTsKKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKHN0b3JhZ2UpOwogICAgICAgICBtX29wID0g
UHV0QnlPZmZzZXQ7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAg
IH0KQEAgLTk0OSw5ICs5NDgsMTAgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIERvdWJs
ZUFzSW50MzI6CiAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBjYXNlIFBoYW50b206CiAgICAgICAgIGNhc2UgTm9wOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAg
ICByZXR1cm4gY2hpbGQxKCkudXNlS2luZCgpICE9IFVudHlwZWRVc2UgfHwgY2hpbGQyKCkudXNl
S2luZCgpICE9IFVudHlwZWRVc2UgfHwgY2hpbGQzKCkudXNlS2luZCgpICE9IFVudHlwZWRVc2U7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gc2hvdWxkR2VuZXJhdGUoKTsK
ICAgICAgICAgfQpAQCAtOTk1LDcgKzk5NSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0
dXJuIG1fcmVmQ291bnQtLTsKICAgICB9CiAgICAgCi0gICAgRWRnZSBjaGlsZDEoKQorICAgIEVk
Z2UmIGNoaWxkMSgpCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1Zh
ckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMSgpOwpAQCAtMTAwOSwxMyAr
MTAwOSwxMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDFV
bmNoZWNrZWQoKTsKICAgICB9CiAKLSAgICBFZGdlIGNoaWxkMigpCisgICAgRWRnZSYgY2hpbGQy
KCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwog
ICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQyKCk7CiAgICAgfQogCi0gICAgRWRnZSBjaGls
ZDMoKQorICAgIEVkZ2UmIGNoaWxkMygpCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdz
ICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMygpOwpA
QCAtMTAzMyw2ICsxMDMzLDE3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxk
cmVuLm51bUNoaWxkcmVuKCk7CiAgICAgfQogICAgIAorICAgIFVzZUtpbmQgYmluYXJ5VXNlS2lu
ZCgpCisgICAgeworICAgICAgICBBU1NFUlQoY2hpbGQxKCkudXNlS2luZCgpID09IGNoaWxkMigp
LnVzZUtpbmQoKSk7CisgICAgICAgIHJldHVybiBjaGlsZDEoKS51c2VLaW5kKCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNCaW5hcnlVc2VLaW5kKFVzZUtpbmQgdXNlS2luZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjaGlsZDEoKS51c2VLaW5kKCkgPT0gdXNlS2luZCAmJiBjaGlsZDIoKS51
c2VLaW5kKCkgPT0gdXNlS2luZDsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0
MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKLXR5cGVkZWYgQWxsb2NhdG9yPE5vZGU+IE5vZGVBbGxvY2F0b3I7CisjaWYg
VVNFKEpTVkFMVUU2NCkKK3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDExMj4gTm9kZUFsbG9jYXRv
cjsKKyNlbHNlCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCA4MD4gTm9kZUFsbG9jYXRvcjsKKyNl
bmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNvbnN0IGNo
YXIqIG5vZGVGbGFnc0FzU3RyaW5nKE5vZGVGbGFncyBmbGFncykKIHsKLSAgICBpZiAoIWZsYWdz
KQorICAgIGlmICghKGZsYWdzIF4gTm9kZURvZXNOb3RFeGl0KSkKICAgICAgICAgcmV0dXJuICI8
ZW1wdHk+IjsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgc2l6ZSA9IDEyODsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTYsOCArOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8o
Rm9yd2FyZEludDMyVG9Eb3VibGUsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICAvKiBVc2VkIHRv
IHNwZWN1bGF0ZSB0aGF0IGEgZG91YmxlIHZhbHVlIGlzIGFjdHVhbGx5IGFuIGludGVnZXIuICov
XAogICAgIG1hY3JvKERvdWJsZUFzSW50MzIsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIC8qIFVz
ZWQgdG8gcmVjb3JkIHBsYWNlcyB3aGVyZSB3ZSBtdXN0IGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBu
dW1iZXIuICovXAotICAgIG1hY3JvKENoZWNrTnVtYmVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJhdGlvbnMuICovXAogICAgIG1h
Y3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MDUsNyArODA1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CiAgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgVGVh
ck9mZkFyZ3VtZW50czoKLSAgICAgICAgY2FzZSBDaGVja051bWJlcjoKICAgICAgICAgY2FzZSBD
aGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2lu
dDoKICAgICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0MzI3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDI4ICszOSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxJbnRlZ2VyKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKK0dQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5G
b3JtYXQpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZp
cnR1YWxSZWdpc3RlcigpOworICAgIEFTU0VSVCghKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5
cGUgJiB+U3BlY0ludDMyKSk7CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICBHUFJSZWcgZ3ByID0g
YWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAg
ICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdwcik7Cisg
ICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdl
cigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZv
cm1hdEludGVnZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUp
KTsKKyAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAg
ICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25z
dGFudChlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOwot
ICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
OworICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5v
ZGUoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2Vy
KSB7CkBAIC0xMTcsMjcgKzExOSwyNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRl
Z2VyKE5vZGUqCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVl
KE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgZWRn
ZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewot
ICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICBpZiAoZWRn
ZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChlZGdl
Lm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwg
Z3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVt
YmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNW
YWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJD
b25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6
OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaXNKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBq
c1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICB9CkBAIC04MDIsMTggKzgwNCwy
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiB9CiAKIHRlbXBs
YXRlPGJvb2wgc3RyaWN0PgotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
SW50ZXJuYWwoTm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVJbnRJbnRlcm5hbChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKLSAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRh
dGFMb2dGKCJTcGVjSW50QCVkICAgIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVj
dWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5k
KCkgIT0gS25vd25JbnQzMlVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjSW50MzIpKTsKKyAg
ICB2YWx1ZS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKLSAgICAg
ICAgaWYgKChub2RlLT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQobm9kZSkpIHx8
IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgIGlmICgo
ZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgfHwg
aW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKICAgICAgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAw
LCBkaXJlY3Rpb24pOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVn
ZXI7CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKQEAgLTgyMSwxMCArODI2LDEwIEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgCiAgICAg
ICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25z
dGFudCgpKSB7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAg
ICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQp
OwotICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSk7Ci0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlKSksIGdwcik7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9k
ZSgpKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1
ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIpOwogICAgICAgICAgICAgaW5mby5m
aWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBE
YXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7CkBAIC04NjUsNyArODcw
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICBH
UFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAg
ICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
LCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKICAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7
CiAgICAgICAgIC8vIElmICFzdHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAgICAgICBpZiAo
IXN0cmljdCkgewpAQCAtOTEwLDEwICs5MTUsMTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlSW50SQogCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2Ug
RGF0YUZvcm1hdEpTRG91YmxlOiB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYm
IGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQo
KSAmJiBpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9k
ZSkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVP
ZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJD
b25zdGFudChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwgZ3ByKTsKICAg
ICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAg
cmV0dXJuIGdwcjsKICAgICAgICAgfQpAQCAtOTM2LDM1ICs5NDEsMzggQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZv
cm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50KEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGZpbGxTcGVj
dWxhdGVJbnRJbnRlcm5hbDxmYWxzZT4obm9kZSwgcmV0dXJuRm9ybWF0LCBkaXJlY3Rpb24pOwor
ICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KGVkZ2UsIHJldHVybkZv
cm1hdCwgZGlyZWN0aW9uKTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlSW50U3RyaWN0KE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnRTdHJpY3QoRWRnZSBlZGdlKQogewogICAgIERhdGFGb3JtYXQgbXVzdEJlRGF0YUZv
cm1hdEludGVnZXI7Ci0gICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5h
bDx0cnVlPihub2RlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlv
bik7CisgICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDx0cnVlPihl
ZGdlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAg
UkVMRUFTRV9BU1NFUlQobXVzdEJlRGF0YUZvcm1hdEludGVnZXIgPT0gRGF0YUZvcm1hdEludGVn
ZXIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZURvdWJsZShOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24pCitGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoRWRnZSBlZGdl
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjRG91YmxlQCVkICAgIiwgbm9kZS0+aW5kZXgo
KSk7CisgICAgZGF0YUxvZ0YoIlNwZWNEb3VibGVAJWQgICAiLCBlZGdlLT5pbmRleCgpKTsKICNl
bmRpZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90
eXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShl
ZGdlKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIEFTU0VS
VChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bk51bWJlclVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5T
cGVjTnVtYmVyKSk7CisgICAgdmFsdWUuZmlsdGVyKFNwZWNOdW1iZXIpOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
IAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAg
ICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0Nv
bnN0YW50KCkpIHsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAg
ICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXNJ
bnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIg
PSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChzdGF0aWNfY2FzdDxkb3VibGU+KHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChzdGF0
aWNfY2FzdDxkb3VibGU+KHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkpKSwgZ3By
KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAg
ICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKQEAgLTk3Miw5ICs5ODAsOSBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgaW5mby5maWxs
RG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpIHsKKyAg
ICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAg
ICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQodmFsdWVP
Zk51bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3By
KTsKIApAQCAtMTAzOSw3ICsxMDQ3LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlRG91YgogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCiAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxh
dGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3MoanNWYWx1ZUdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxl
cjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGly
ZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3MoanNWYWx1ZUdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0
aW9uKTsKIAogICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJs
ZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIHRl
bXBHcHIpOwpAQCAtMTEwMiwxMyArMTExMCwxNiBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVEb3ViCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsKE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikK
K0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoRWRnZSBlZGdlLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJC
T1NFKQotICAgIGRhdGFMb2dGKCJTcGVjQ2VsbEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAg
IGRhdGFMb2dGKCJTcGVjQ2VsbEAlZCAgICIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAg
U3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3Rlcigp
OworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAg
IFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7CisgICAgQVNTRVJUKGVkZ2UudXNl
S2luZCgpICE9IEtub3duQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOwor
ICAgIHZhbHVlLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKQEAgLTExMjAsOCArMTEzMSw4IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBn
cHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAg
ICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUganNW
YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgIGlmIChq
c1ZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFs
dWUpKSwgZ3ByKTsKQEAgLTExMzcsNyArMTE0OCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUNlbGwKIAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwg
Z3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIp
LCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3RlciksIGRpcmVjdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBn
cHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTEx
NTMsNyArMTE2NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwK
ICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdw
cik7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9u
KTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpT
Q2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTE3NywxMyArMTE4OCwxNSBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgfQogfQogCi1H
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKE5vZGUqIG5vZGUsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24pCiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVj
Qm9vbEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFMb2dGKCJTcGVjQm9vbEAlZCAg
ICIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1f
c3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2
YWx1ZS5tX3R5cGU7CisgICAgdmFsdWUuZmlsdGVyKFNwZWNCb29sZWFuKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07
CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAtMTE5NSw4ICsxMjA4
LDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICAK
ICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhh
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpOworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwog
ICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwpAQCAtMTIxMyw3ICsxMjI2LDcgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAoIWlzQm9v
bGVhblNwZWN1bGF0aW9uKHR5cGUpKSB7CiAgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2pp
dC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5T
cGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBkaXJlY3Rpb24pOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBt
X2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xl
YW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBkaXJlY3Rpb24pOwogICAg
ICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKQEAgLTEyMzIsNyArMTI0NSw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgbV9ncHJz
LmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbih0eXBlKSkgewog
ICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZh
bGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJ
bnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAg
IH0KICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CkBAIC0xMjkwLDM1ICsxMzAzLDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGkKICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQo
KS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OworICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVs
c2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJS
ZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAg
ICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAogICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIApAQCAtMTMyNiwxNCArMTMzMCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOwogCiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigp
LCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAog
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIApAQCAtMTM2MywyNyArMTM2NCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7IAogICAgICAgICBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsK
LSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0g
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVf
Q0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBs
ZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1
cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAg
ICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3Qp
IHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQ
UiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIs
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENo
aWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTM5OSwyNyArMTM5NCwyMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhp
biB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAKICAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldh
dGNocG9pbnQoKSk7Ci0gICAgICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1f
dHlwZSAmIFNwZWNDZWxsKSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJp
Z2h0Q2hpbGQsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVH
UFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVHUFIpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUg
JiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENo
aWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVH
UFIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9Cisg
ICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwg
cmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0
cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxk
LAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTQzNywxMiArMTQyNiwxMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdp
dGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlm
IHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBv
ciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBl
ICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIpIHsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2socmln
aHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7CiAgICAgICAgIG1faml0Lm1vdmUob3Ay
R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9w
MkdQUiksIHJpZ2h0Q2hpbGQubm9kZSgpLAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwK
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwpAQCAtMTQ3MywyNyArMTQ2MiwyMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgaWYgKG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAg
ICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0
Y2hwb2ludCgpKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlw
ZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAg
ICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxl
ZnRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVH
UFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYg
flNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENo
aWxkLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9
CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KG9wMUdQUiksIGxlZnRDaGlsZCwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTA5LDI3ICsxNDky
LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAvLyBX
ZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxs
LiAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxW
YWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5h
ZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9k
ZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVl
UmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0
cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwot
ICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJl
Z3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5i
cmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBH
UFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmln
aHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
b3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNW
YWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBt
X2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTQ0LDcgKzE1MjEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAg
Ly8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBi
ZSBhIGNlbGwuIENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBp
dCBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0YXRlLmZvck5vZGUo
cmlnaHRDaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIpCisgICAgaWYgKCFu
ZWVkc1R5cGVDaGVjayhyaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCiAgICAgICAg
IHJpZ2h0Tm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGp1bXAobm90
VGFrZW4sIEZvcmNlSnVtcCk7CkBAIC0xNTUzLDkgKzE1MzAsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1
bHRHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKLSAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJp
Z2h0Q2hpbGQsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgdHlwZUNoZWNr
KAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgU3BlY0NlbGwg
fCBTcGVjT3RoZXIsIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwogICAgIH0KQEAgLTE2MDksNyArMTU4NSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5vZGVVc2UsIGJvb2wgbmVlZFNwZWN1bGF0
aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2lj
YWxOb3QoRWRnZSBub2RlVXNlKQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGVVc2UpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0xNjE5LDI3ICsxNTk1
LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7
CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCkpOwotCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykg
ewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0K
KyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVj
dHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c3RydWN0dXJlR1BSKTsKIAotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAg
ICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0
cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAg
ICAgc3RydWN0dXJlR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCkBAIC0xNjYwLDExICsxNjMxLDExIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAKICAgICBub3RD
ZWxsLmxpbmsoJm1faml0KTsKIAotICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgeworICAg
IGlmIChuZWVkc1R5cGVDaGVjayhub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKICAg
ICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuYW5k
NjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UsIAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgIHR5
cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgU3Bl
Y0NlbGwgfCBTcGVjT3RoZXIsIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCAKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKQEAg
LTE2NzgsMTIgKzE2NDksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9y
T3RoZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOb2RlKiBub2Rl
KQogewotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhl
cigpKSB7Ci0gICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLT5jaGls
ZDEoKSwKLSAgICAgICAgICAgICFpc09iamVjdE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOiB7CisgICAgICAgIGNv
bXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKKyAgICAgICAgCisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICBtX2ppdC5jb21wYXJlMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigwKSwgcmVzdWx0LmdwcigpKTsKQEAgLTE2OTEsNyArMTY2Myw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
IHsKKyAgICAgICAgCisgICAgY2FzZSBOdW1iZXJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEZQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpA
QCAtMTcwMyw4ICsxNjc2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxO
b3QoTgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwotICAgIGlmIChpc0Jvb2xl
YW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgIGNhc2UgQm9vbGVhblVzZTogewogICAg
ICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIHZhbHVlKTsKQEAgLTE3MTYsMzkgKzE2ODgsNDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOyAvLyBGSVhNRTogV2UgY291bGQgcmV1c2UsIGJ1dCBvbiBzcGVjdWxhdGlvbiBmYWlsIHdv
dWxkIG5lZWQgcmVjb3ZlcnkgdG8gcmVzdG9yZSB0YWcgKGFraW4gdG8gYWRkKS4KICAgICAgICAg
CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAg
IG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNl
KSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3ModmFsdWUuZ3ByKCkpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNCb29sZWFuLCBtX2pp
dC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sIHJl
c3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAg
ICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVl
VHJ1ZSkpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgYWRkIGEg
RGF0YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAK
LSAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAotICAgIGFyZzEudXNl
KCk7CisgICAgICAgIGFyZzEudXNlKCk7CiAgICAgCi0gICAgbV9qaXQubW92ZShhcmcxR1BSLCBy
ZXN1bHRHUFIpOwotICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOworICAgICAgICBtX2pp
dC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENv
bXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKTsKICAgICAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgc2xv
d1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVz
dWx0R1BSLCBhcmcxR1BSKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9v
bGVhbiwgcmVzdWx0R1BSLCBhcmcxR1BSKSk7CiAgICAgCi0gICAgbV9qaXQueG9yNjQoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOwotICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7CisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRl
eCBub3RUYWtlbiwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmxvY2tJbmRleCB0YWtl
biwgQmxvY2tJbmRleCBub3RUYWtlbikKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlVXNlKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTE3NTksMjMg
KzE3NDEsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAg
IGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkp
IHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVj
dWxhdGlvbldhdGNocG9pbnQoKSk7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNr
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZh
bHVlR1BSKSwgbm9kZVVzZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRy
KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBpZiAo
bmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKLSAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwg
U3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5icmFuY2hUZXN0OChKSVRDb21waWxlcjo6WmVy
bywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwog
CkBAIC0xNzkxLDEwICsxNzY5LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RP
ck90aGVyQnIKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAKLSAgICBpZiAo
bmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZVVzZSwg
U3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHNj
cmF0Y2hHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIG1faml0LmJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIs
IG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7
CiAgICAgfQogICAgIGp1bXAobm90VGFrZW4pOwogICAgIApAQCAtMTgwNiwxNCArMTc4NiwxNSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgQmxvY2tJbmRl
eCB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwogICAgIEJsb2NrSW5kZXggbm90VGFr
ZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKLSAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBlbWl0T2Jq
ZWN0T3JPdGhlckJyYW5jaChub2RlLT5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCAKLSAgICAg
ICAgICAgICFpc09iamVjdE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOiB7CisgICAgICAgIGVtaXRPYmplY3RPck90
aGVyQnJhbmNoKG5vZGUtPmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4pOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICAgICAgCisgICAgY2FzZSBJbnQzMlVzZToKKyAgICBjYXNlIE51bWJl
clVzZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEludDMyVXNl
KSB7CiAgICAgICAgICAgICBib29sIGludmVydCA9IGZhbHNlOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKQEAgLTE4MzcsNTYgKzE4MTgsNjIg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgIGNhc2UgVW50eXBl
ZFVzZToKKyAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICAKLSAgICBib29sIHBy
ZWRpY3RCb29sZWFuID0gaXNCb29sZWFuU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKSk7Ci0gICAgCi0gICAgaWYgKHByZWRpY3RCb29sZWFuKSB7Ci0gICAgICAgIGlmIChp
c0Jvb2xlYW5TcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0
aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSkgeworICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNw
ZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgeworICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0g
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBN
YWNyb0Fzc2VtYmxlcjo6WmVybzsKLSAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRh
a2VuOwotICAgICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47Ci0gICAgICAgICAgICAgICAg
bm90VGFrZW4gPSB0bXA7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRha2Vu
ID09IG5leHRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3Jv
QXNzZW1ibGVyOjpaZXJvOworICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRh
a2VuOworICAgICAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAgICAgICAg
ICAgICAgICBub3RUYWtlbiA9IHRtcDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBicmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQUiwgVHJ1c3Rl
ZEltbTMyKHRydWUpLCB0YWtlbik7Ci0gICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsKKyAgICAgICAgICAgICAg
ICBicmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKHRydWUpLCB0
YWtlbik7CisgICAgICAgICAgICAgICAganVtcChub3RUYWtlbik7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZh
bHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgdmFsdWUudXNlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0ludDMy
KSB7Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigw
KSkpLCBub3RUYWtlbik7Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtl
bik7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICB0eXBlQ2hlY2soSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Jvb2xlYW4sIG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNJbnQzMikgeworICAgICAgICAgICAg
ICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIG5vdFRha2Vu
KTsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7CisgICAg
ICAgICAgICB9CiAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigp
ICYgU3BlY0Jvb2xlYW4pIHsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgYnJhbmNoNjQo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsKLSAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQm9v
bGVhbikgeworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7CisgICAgICAgICAg
ICB9CiAgICAgCi0gICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7
CiAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwg
dmFsdWVHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
CiAgICAgCi0gICAgICAgIGJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVz
dWx0R1BSLCB0YWtlbik7Ci0gICAgICAgIGp1bXAobm90VGFrZW4pOworICAgICAgICAgICAgYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIHRha2VuKTsKKyAg
ICAgICAgICAgIGp1bXAobm90VGFrZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBu
b1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICByZXR1
cm47CiAgICAgfQogICAgICAgICAKLSAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCkBAIC0yMTMxLDE5ICsyMTE4LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2Ug
Q2hlY2tOdW1iZXI6IHsKLSAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1
ZVJlZ3Mob3AxLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLAotICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxLmdwcigpLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGlzSW50ZWdlci5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIH0KLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQogICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDoKICAg
ICAgICAgY29tcGlsZUFkZChub2RlKTsKQEAgLTIxNjIsMjEgKzIxMzYsMjkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgQXJpdGhEaXY6IHsKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJG
b3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6
IHsKICAgICAgICAgICAgIGNvbXBpbGVJbnRlZ2VyQXJpdGhEaXZGb3JYODYobm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEZQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKLQotICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIo
KTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgIG1faml0LmRpdkRv
dWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOwotCi0gICAgICAgIGRvdWJsZVJlc3VsdChy
ZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVtYmVyVXNl
OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAgICAgICAgICBtX2ppdC5k
aXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMTg2LDggKzIxNjgsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBB
cml0aEFiczogewotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewor
ICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpA
QCAtMjIwMSwxOCArMjE4MywyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYWJz
RG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgZG91YmxlUmVzdWx0KHJl
c3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2ppdC5hYnNEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRoTWluOgog
ICAgIGNhc2UgQXJpdGhNYXg6IHsKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50
MzJVc2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSk7CkBAIC0yMjMxLDM3ICsyMjIxLDQ0IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwor
ICAgICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgRlBSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZG9uZTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBt
X2ppdC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
TGVzc1RoYW4gOiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4sIG9wMS5mcHIoKSwg
b3AyLmZwcigpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBt
X2ppdC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
TGVzc1RoYW4gOiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4sIG9wMS5mcHIoKSwg
b3AyLmZwcigpKTsKICAgICAgICAgCi0gICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3Nl
ciBvbmUgb3Igb25lIG9mIHRoZW4gaXMgTmFOCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG9wMkxlc3MgPSBtX2ppdC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxl
c3NUaGFuT3JFcXVhbCwgb3AxLmZwcigpLCBvcDIuZnByKCkpOworICAgICAgICAgICAgLy8gb3Ay
IGlzIGVhdGhlciB0aGUgbGVzc2VyIG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMkxlc3MgPSBtX2ppdC5icmFuY2hEb3VibGUob3Ag
PT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsIDog
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCwgb3AxLmZwcigpLCBvcDIuZnBy
KCkpOwogICAgICAgICAKLSAgICAgICAgLy8gVW5vcmRlcmVkIGNhc2UuIFdlIGRvbid0IGtub3cg
d2hpY2ggb2Ygb3AxLCBvcDIgaXMgTmFOLiBNYW51ZmFjdHVyZSBOYU4gYnkgYWRkaW5nIAotICAg
ICAgICAvLyBvcDEgKyBvcDIgYW5kIHB1dHRpbmcgaXQgaW50byByZXN1bHQuCi0gICAgICAgIG1f
aml0LmFkZERvdWJsZShvcDEuZnByKCksIG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAg
ICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIC8vIFVub3JkZXJlZCBj
YXNlLiBXZSBkb24ndCBrbm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1cmUg
TmFOIGJ5IGFkZGluZyAKKyAgICAgICAgICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBp
bnRvIHJlc3VsdC4KKyAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShvcDEuZnByKCksIG9wMi5m
cHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgICAgIAotICAgICAgICBvcDJMZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9q
aXQubW92ZURvdWJsZShvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBvcDJM
ZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AyLmZwcigp
LCByZXN1bHQuZnByKCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9wMS5mcHIoKSAhPSByZXN1
bHQuZnByKCkpIHsKLSAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICBpZiAob3AxLmZwcigpICE9IHJlc3VsdC5mcHIoKSkgeworICAgICAgICAgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG9w
MUxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnBy
KCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb3AxTGVzcy5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsK
ICAgICAgICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigp
LCBub2RlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0
LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBBcml0aFNxcnQ6IHsKQEAgLTI2MTcsMTggKzI2MTQsMTggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50
eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNo
aWxkMyk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMsIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9
IHZhbHVlLmdwcigpOwogICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChh
cnJheU1vZGUudHlwZSgpID09IEFycmF5OjpJbnQzMgotICAgICAgICAgICAgICAgICYmICFpc0lu
dDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMykubV90eXBlKSkgewotICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHZhbHVlUmVnKSwgY2hpbGQzLAotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlUmVnLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09
IEFycmF5OjpJbnQzMikgeworICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZVJlZyksIGNoaWxkMywgU3BlY0ludDMyLAor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVSZWcsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGlmIChh
cnJheU1vZGUudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzICYmIEhlYXA6OmlzV3JpdGVCYXJy
aWVyRW5hYmxlZCgpKSB7CkBAIC0yOTMxLDEwICsyOTI4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOwogCi0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpJbnQzMiAmJiAhaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9k
ZS0+Y2hpbGQyKCksCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNz
ZW1ibGVyOjpCZWxvdywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50
MzIpIHsKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY0ludDMyLAorICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpICE9IEFycmF5OjpJbnQzMiAmJiBIZWFwOjppc1dyaXRlQmFycmllckVuYWJs
ZWQoKSkgewpAQCAtMjk2MiwxMyArMjk2MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFs
dWUuZnByKCk7CiAKLSAgICAgICAgICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0
byBob2lzdCB0aGVtIGludG8KLSAgICAgICAgICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kLgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
ICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwg
dmFsdWVGUFIsIHZhbHVlRlBSKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBERkdfVFlQ
RV9DSEVDSygKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCBub2RlLT5jaGlsZDIoKSwg
U3BlY1JlYWxOdW1iZXIsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCB2YWx1ZUZQUiwgdmFsdWVGUFIp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSks
IHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xv
d1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJm
bHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKQEAgLTMxNzEsNyArMzE2NSw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICAgICAgLy8gSXQncyBy
ZWFsbHkgcHJvZml0YWJsZSB0byBzcGVjdWxhdGUgaW50ZWdlciwgc2luY2UgaXQncyByZWFsbHkg
Y2hlYXAsCiAgICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSBy
ZWFsIHdvcmssIGFuZCB3ZSBlbWl0IGEgbG90IGxlc3MgY29kZS4KICAgICAgICAgICAgIApAQCAt
MzE4NiwzMCArMzE4MSwzNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8g
RklYTUU6IEFkZCBzdHJpbmcgc3BlY3VsYXRpb24gaGVyZS4KLSAgICAgICAgCi0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAKLSAgICAgICAg
R1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAg
ICAgb3AxLnVzZSgpOworICAgICAgICAgICAgb3AxLnVzZSgpOwogICAgICAgICAKLSAgICAgICAg
aWYgKCEobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1i
ZXIgfCBTcGVjQm9vbGVhbikpKQotICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3Vs
dEdQUik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
YWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGlmICgh
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjTnVtYmVyIHwg
U3BlY0Jvb2xlYW4pKSkKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGFs
cmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
b3AxR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwobm90UHJpbWl0aXZlLCB0
aGlzLCBvcGVyYXRpb25Ub1ByaW1pdGl2ZSwgcmVzdWx0R1BSLCBvcDFHUFIpKTsKLSAgICAgICAg
fQorICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
ICAgICBzbG93UGF0aENhbGwobm90UHJpbWl0aXZlLCB0aGlzLCBvcGVyYXRpb25Ub1ByaW1pdGl2
ZSwgcmVzdWx0R1BSLCBvcDFHUFIpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CkBAIC0zMjUxLDI1ICszMjUxLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6
IHsKICAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRo
aXMsIHVzZSk7CiAgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnBy
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBo
b2lzdCB0aGVtIGludG8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQuCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCB1c2UsIFNwZWNSZWFsTnVt
YmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5v
cmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVE
b3VibGUob3BGUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihk
b3VibGUpICogb3BlcmFuZElkeCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzog
ewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7
CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICAgICAgICAgICAgICBHUFJSZWcgb3BH
UFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KHVzZSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcEdQ
UiksIHVzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsIFNwZWNJbnQzMiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogb3BlcmFuZElkeCkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTMzMTksMjUgKzMzMTYsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwogICAgICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7
CiAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAg
ICAgICAgICAgICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KHVzZSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBh
IHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwot
ICAgICAgICAgICAgICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BG
UFIsIG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cygpLCB1c2UsIFNwZWNSZWFsTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hEb3VibGUoCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
Tm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAgbV9q
aXQuYm94RG91YmxlKG9wRlBSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJ
TkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMs
IHVzZSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICAgICAgR1BSUmVnIG9wR1BS
ID0gb3BlcmFuZC5ncHIoKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS0+aW5k
ZXhpbmdUeXBlKCkpICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSku
bV90eXBlKSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAg
ICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaGFzSW50MzIobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
b3BHUFIpLCB1c2UsIFNwZWNJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxv
dywgb3BHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBidWZmZXIgKyBvcGVy
YW5kSWR4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM1NTksMjQgKzM1NTMsMjEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHRoaXNWYWx1ZSk7Ci0gICAgICAg
ICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKG5vZGUt
PmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0
aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIE90aGVyVXNlOiB7CisgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKICAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAg
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICAgICAgaWYgKG5lZWRzVHlwZUNoZWNr
KG5vZGUtPmNoaWxkMSgpLCBTcGVjT3RoZXIpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZSh0aGlzVmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIG1faml0LmFuZDY0
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hH
UFIpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3ModGhpc1ZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChWYWx1ZU51bGwpKSk7CisgICAgICAgICAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY090
aGVyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbFRoaXNPYmplY3RGb3Iobm9k
ZS0+Y29kZU9yaWdpbikpLCBzY3JhdGNoR1BSKTsKQEAgLTM1ODQsMzAgKzM1NzUsNDIgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgIGNhc2UgT2JqZWN0VXNlOiB7
CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFs
dWUpOwogICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsK
ICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBub2Rl
LT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGls
ZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEo
KSwgT2JqZWN0VXNlLAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlz
VmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BS
ID0gdGhpc1ZhbHVlLmdwcigpOwotICAgICAgICAKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
LSAgICAgICAgCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29udmVydFRoaXMsIHJlc3VsdC5ncHIoKSwgdGhpc1ZhbHVlR1BS
KTsKLSAgICAgICAgCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBH
UFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJS
ZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b252ZXJ0VGhpcywgcmVzdWx0LmdwcigpLCB0aGlzVmFsdWVHUFIpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNzc2LDggKzM3NzksOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdz
KCksIDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgewor
CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNh
c2UgQ2VsbFVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IGJhc2UpOwogICAgICAgICAgICAgCkBAIC0zNzkyLDIwICszNzk2LDI3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKLSAgICAg
ICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Cisg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIAotICAg
ICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAg
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQo
SklUQ29tcGlsZXI6Ok5vblplcm8sIGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7
CisgICAgICAgICAgICBiYXNlLnVzZSgpOwogICAgICAgICAKLSAgICAgICAgY2FjaGVkR2V0QnlJ
ZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKSwgbm90Q2VsbCk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAg
ICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9k
ZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsKTsKICAgICAgICAgCisgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM4
MTQsOCArMzgyNSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3Zl
cmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkpKSB7CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKIApAQCAtMzgzMywyMSArMzg0NSwyOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
Y2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKIAotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAg
IAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAg
IAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRl
c3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKICAgICAgICAgCi0gICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwg
YmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwsIERv
bnRTcGlsbCk7CisgICAgICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJh
c2VHUFIsIHJlc3VsdEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250
U3BpbGwpOwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0KKyAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzg3MSwxMyArMzg5
MCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVy
ZTogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5p
c1N1YnNldE9mKG5vZGUtPnN0cnVjdHVyZVNldCgpKQotICAgICAgICAgICAgJiYgaXNDZWxsU3Bl
Y3VsYXRpb24odmFsdWUubV90eXBlKSkgewotICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uID0gbm9kZS0+b3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1
cmUgPyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwogICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBkaXJlY3Rpb24p
OwogICAgICAgICAKQEAgLTM5NDIsNiArMzk1NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPSyA9IG1faml0
LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMS5n
cHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobm9kZS0+c3Ry
dWN0dXJlKCkpKTsKICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogICAgICAgICBpc09LLmxp
bmsoJm1faml0KTsKKyNlbHNlCisgICAgICAgIHNwZWN1bGF0ZUNlbGwobm9kZS0+Y2hpbGQxKCkp
OwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTM5NDksNiAr
Mzk2Myw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZTogeworICAgICAgICBBU1NF
UlQoaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgIAogICAgICAg
ICBBU1NFUlQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVy
ZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAg
IG1faml0LmFkZFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKAogICAgICAgICAgICAgbm9kZS0+Y29k
ZU9yaWdpbi5jb2RlT3JpZ2luT3duZXIoKSwKQEAgLTQyNzEsNyArNDI4Nyw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFR5cGVP
ZjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0
ZW1wR1BSID0gdGVtcC5ncHIoKTsKQEAgLTQyODAsMTkgKzQyOTYsMjEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3QgZG9uZUp1bXBzOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IFN0cmluZ1VzZSk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVDZWxsKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2UodmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgaXNOb3RDZWxsKTsKKyAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQorICAgICAg
ICAgICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxk
MSgpLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKTsKIAotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
U3RyaW5nVXNlKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2g4KEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJl
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSk7Ci0gICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQotICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZSh2YWx1
ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBub3RTdHJpbmcpOworICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpCisgICAgICAgICAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjU3Ry
aW5nLCBub3RTdHJpbmcpOwogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFN0cmluZ1VzZSkgewogICAg
ICAgICAgICAgICAgIG5vdFN0cmluZy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwogICAgICAg
ICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKQEAgLTQzMDIsNyArNDMy
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkgeworICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKICAgICAgICAgICAg
IGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3ROdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlR1BS
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLm51bWJlclN0
cmluZygpKSwgcmVzdWx0R1BSKTsKQEAgLTQ3NzEsNiArNDc4OSwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBQaGFudG9tOgor
ICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2ppdC5ncmFwaCgpLCBub2RlLCBzcGVj
dWxhdGUpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCiAg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDgsMTQgKzEwOCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNr
KEV4CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgp
KTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwog
ICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0ZhaWwpOwogICAgIG1faml0LmNvZGVCbG9j
aygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3Jh
cGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVh
bS0+c2l6ZSgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2Us
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NF
UlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0
aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwp
OwogfQogCkBAIC0xMjMsNyArMTIzLDcgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxh
dGl2ZUpJVDo6cwogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIE9T
UkV4aXRKdW1wUGxhY2Vob2xkZXIoKTsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBtX2pp
dC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZPU1JFeGl0cygpOwogICAgIG1faml0LmFwcGVuZEV4aXRJ
bmZvKCk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5k
LCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKQEAgLTEzMiw3ICsxMzIsNyBA
QCBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzCiAKIE9TUkV4aXRKdW1w
UGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgp
KTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwog
ICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uu
bm9kZSgpKTsKIH0KIApAQCAtMTQwLDE0ICsxNDAsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVu
dE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMg
fHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wc1RvRmFpbCk7CiAg
ICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVl
U291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9k
ZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIEVkZ2Ugbm9kZVVzZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1Rv
RmFpbCkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJl
bnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNl
LCBub2RlVXNlLm5vZGUoKSwganVtcHNUb0ZhaWwpOwogfQogCkBAIC0xNTUsNyArMTU1LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5jb2RlQmxvY2so
KS0+YXBwZW5kU3BlY3VsYXRpb25SZWNvdmVyeShyZWNvdmVyeSk7CiAgICAgbV9qaXQuYXBwZW5k
RXhpdEluZm8oanVtcFRvRmFpbCk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4
aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIG1faml0
LmNvZGVCbG9jaygpLT5udW1iZXJPZlNwZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CkBAIC0xNjMs
NyArMTYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFs
dWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKIHsKLSAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5F
eGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhp
dCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5v
ZGUoKSwganVtcFRvRmFpbCwgcmVjb3ZlcnkpOwogfQogCkBAIC0xNzQsMTEgKzE3NCwxNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAgICAgICAgIGNvbnZlcnRM
YXN0T1NSRXhpdFRvRm9yd2FyZCgpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRn
ZSBlZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlv
blJlY292ZXJ5JiByZWNvdmVyeSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorewor
ICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgZWRnZS5ub2RlKCksIGp1
bXBUb0ZhaWwsIHJlY292ZXJ5LCBkaXJlY3Rpb24pOworfQorCiBKdW1wUmVwbGFjZW1lbnRXYXRj
aHBvaW50KiBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBl
bmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgT1NSRXhpdCYgZXhpdCA9
IG1faml0LmNvZGVCbG9jaygpLT5vc3JFeGl0KAogICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+
YXBwZW5kT1NSRXhpdChPU1JFeGl0KApAQCAtMjgwLDE0ICsyODUsMTQgQEAgSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3
YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVT
b3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2lu
Z0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9u
Q2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CiAgICAgY29udmVy
dExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7
Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+
Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2Nh
bkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwg
anVtcHNUb0ZhaWwpOwogICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCh2YWx1ZVJlY292
ZXJ5KTsKIH0KQEAgLTMwMCw5ICszMDUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRpb25DaGVjayhFeAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRn
ZSBlZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291
cmNlLCBlZGdlLm5vZGUoKSwganVtcFRvRmFpbCwgZGlyZWN0aW9uKTsKK30KKwogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQgd2FzIHRl
cm1pbmF0ZWQuXG4iKTsKICNlbmRpZgpAQCAtMzE0LDEzICszMjQsMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1Zh
bHVlUmVncywgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihraW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5ub2RlKCkpOwogfQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
CiAgICAgZGF0YUxvZ0YoIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAjZW5k
aWYKQEAgLTMzMCw2ICszNDAsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3Bl
Y3VsYXRpdgogICAgIG1fY29tcGlsZU9rYXkgPSBmYWxzZTsKIH0KIAordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6dHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0
ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCkKK3sKKyAgICBBU1NFUlQobmVlZHNUeXBlQ2hlY2soZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdo
KSk7CisgICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLmZpbHRlcih0eXBlc1Bhc3NlZFRocm91Z2gp
OworICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgc291cmNlLCBlZGdlLCBqdW1wVG9GYWls
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291
cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZh
bHVlUmVjb3ZlcnkpCit7CisgICAgdHlwZUNoZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRU
aHJvdWdoLCBqdW1wVG9GYWlsKTsKKyAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFs
dWVSZWNvdmVyeSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhKU1ZhbHVl
U291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91
Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbikKK3sKKyAgICB0eXBlQ2hlY2soc291cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGp1bXBUb0ZhaWwpOworICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0
aW9uKQorICAgICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoKTsKK30KKwogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6YWRkU2xvd1BhdGhHZW5lcmF0b3IoUGFzc093blB0cjxTbG93UGF0aEdl
bmVyYXRvcj4gc2xvd1BhdGhHZW5lcmF0b3IpCiB7CiAgICAgbV9zbG93UGF0aEdlbmVyYXRvcnMu
YXBwZW5kKHNsb3dQYXRoR2VuZXJhdG9yLmxlYWtQdHIoKSk7CkBAIC04NzIsOSArOTAyLDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSogbm9kZQogICAgIGFycmF5aWZ5KG5v
ZGUsIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpKTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3RvcmFnZShOb2RlKiBub2RlKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3RvcmFnZShFZGdlIGVkZ2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAKICAgICBzd2l0
Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAtODg4LDcgKzkxOCw3IEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZSoKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gTXVzdCBiZSBhIGNlbGw7IGZpbGwgaXQgYXMgYSBjZWxsIGFuZCB0aGVuIHJldHVy
biB0aGUgcG9pbnRlci4KLSAgICAgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKG5vZGUsIEJh
Y2t3YXJkU3BlY3VsYXRpb24pOworICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwoZWRn
ZSwgQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIERhdGFG
b3JtYXRTdG9yYWdlOiB7CkBAIC04OTgsNyArOTI4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3RvcmFnZShOb2RlKgogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKG5vZGUsIEJhY2t3YXJkU3BlY3VsYXRpb24pOwor
ICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSwgQmFja3dhcmRTcGVjdWxhdGlv
bik7CiAgICAgfQogfQogCkBAIC0xNTA5LDIwICsxNTM5LDIwIEBAIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW4KICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVydmVu
aW5nIG5vZGVzIHRvIGFsc28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKICAgICAgICAgQVNTRVJU
KG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpCisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKQog
ICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2Rl
LCBjb25kaXRpb24pOwotICAgICAgICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1i
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAg
ICBlbHNlIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkKICAgICAgICAgICAg
IGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChub2RlLCBicmFuY2hOb2RlLCBkb3VibGVDb25k
aXRpb24pOwogICAgICAgICBlbHNlIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcSkgewotICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBu
b2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nVXNlKSkgewogICAgICAgICAgICAgICAgIG5v
blNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uLCBv
cGVyYXRpb24pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAm
JiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpCisgICAgICAgICAgICBp
ZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpCiAgICAgICAgICAgICAgICAgY29t
cGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9k
ZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UgJiYgbm9kZS0+
Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UpCiAgICAgICAgICAgICAgICAg
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQx
KCksIG5vZGUtPmNoaWxkMigpLCBicmFuY2hOb2RlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkgJiYgbm9kZS0+Y2hp
bGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKQorICAgICAgICAgICAgZWxzZSBpZiAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UgJiYgbm9kZS0+Y2hpbGQy
KCkudXNlS2luZCgpID09IE9iamVjdFVzZSkKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhv
bGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hp
bGQxKCksIGJyYW5jaE5vZGUpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hOb2RlLCBjb25kaXRpb24s
IG9wZXJhdGlvbik7CkBAIC0xNjQ1LDYgKzE2NzUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShCYXNpY0Jsb2NrJgogCiAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5k
ZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7CiAgICAgICAgIG1f
Y3VycmVudE5vZGUgPSBibG9ja1ttX2luZGV4SW5CbG9ja107CisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgICAgICBtX2NhbkV4aXQgPSBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCk7CisjZW5kaWYK
KyAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9IG1fc3RhdGUuc3RhcnRFeGVjdXRp
bmcobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1faml0LnNldEZvck5vZGUobV9jdXJyZW50Tm9k
ZSk7CiAgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW47CiAgICAgICAgIGlmICghbV9jdXJyZW50Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewpAQCAt
MTcxMSw5ICsxNzQ1LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9j
ayYKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAg
IGRhdGFMb2dGKAorICAgICAgICAgICAgICAgICAgICAiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGlu
ZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCIsCisgICAgICAgICAgICAgICAg
ICAgIChpbnQpbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50Tm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNldCgp
KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigi
U3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQg
MHgleCAgICIsIChpbnQpbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAiKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4i
KTsKICNlbmRpZgorICAgICAgICAgICAgfQogI2lmIERGR19FTkFCTEUoSklUX0JSRUFLX09OX0VW
RVJZX05PREUpCiAgICAgICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKQEAgLTE3
NTksNyArMTgwMSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYK
ICNlbmRpZgogICAgICAgICAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFic3RyYWN0
IHN0YXRlIGlzIHJlbWF0ZXJpYWxpemVkIGZvciB0aGUgbmV4dCBub2RlLgotICAgICAgICBtX3N0
YXRlLmV4ZWN1dGUobV9pbmRleEluQmxvY2spOworICAgICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVm
ZmVjdHMpCisgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGVFZmZlY3RzKG1faW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX2N1cnJlbnROb2RlLT5zaG91bGRHZW5lcmF0ZSgp
KQogICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtMTkwNiwxMyArMTk0OSwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlUHV0QnlWCiAKICAgICBGUFJSZWcg
dmFsdWVSZWcgPSB2YWx1ZS5mcHIoKTsKICAgICAKLSAgICBpZiAoIWlzUmVhbE51bWJlclNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGlsZDMpLm1fdHlwZSkpIHsKLSAgICAgICAgLy8gRklY
TUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lz
dCB0aGVtIGludG8KLSAgICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAs
Ci0gICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVlUmVnLCB2YWx1ZVJlZykpOwotICAgIH0KKyAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgY2hpbGQzLCBTcGVjUmVhbE51bWJl
ciwKKyAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVlUmVnLCB2YWx1ZVJlZykpOwogICAg
IAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjEwNCw3ICsy
MTQ0LDggQEAgR2VuZXJhdGVkT3BlcmFuZFR5cGUgU3BlY3VsYXRpdmVKSVQ6OmNoZQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyKE5vZGUqIG5vZGUpCiB7Ci0gICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBzd2l0
Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5t
b3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTIxMTIsMTQ1ICsyMTUzLDE2MiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVCb29s
ZWFuKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAg
ICAgICAKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAg
ICAgIG1faml0LmFuZDMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdC5ncHIo
KSk7Ci0gICAgICAgIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChjaGVja0dlbmVyYXRl
ZFR5cGVGb3JUb0ludDMyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICBjYXNlIEdlbmVy
YXRlZE9wZXJhbmRJbnRlZ2VyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0g
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBvcDEuZm9ybWF0KCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZERvdWJsZTog
ewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgRG91Ymxl
VXNlKSk7IC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgd2lsbCBhc3NlcnQgdGhhdCB0aGlzIGlz
IGEgZG91YmxlIHVzZS4gV2UgZm9yY2UgaXQgdG8gdGhpbmsgdGhhdCBpdCB3YXMgYSBkb3VibGUg
dXNlLCBzaW5jZSB3ZSBhcmUgaW5mZXJyaW5nIHRoYXQgd2Ugb3VnaHQgdG8gZW1pdCBhIGRvdWJs
ZSB1c2UgcXVpdGUgbGF0ZS4KLSAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKLSAgICAg
ICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90VHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMy
KGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgY2Fz
ZSBOdW1iZXJVc2U6CisgICAgY2FzZSBOb3RDZWxsVXNlOiB7CisgICAgICAgIHN3aXRjaCAoY2hl
Y2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAg
ICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEludGVnZXI6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgQmFja3dhcmRTcGVjdWxh
dGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUsIG9wMS5mb3JtYXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kRG91YmxlOiB7CisgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCksIEJhY2t3YXJkU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CisgICAgICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOworICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91Ymxl
VG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwog
ICAgICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChu
b3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CisgICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRl
Z2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOwogCi0gICAgICAgIGludGVnZXJSZXN1bHQo
Z3ByLCBub2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIEdlbmVyYXRlZE9w
ZXJhbmRKU1ZhbHVlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSlNWYWx1ZTogeworICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOwogCi0gICAgICAgIEdQUlJlZyBncHIgPSBvcDEuZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSB0
ZW1wRnByKHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKLQotICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7Ci0KLSAgICAgICAg
aWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKGdwciksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051
bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9
IG9wMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOworCisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3QgY29udmVydGVkOworCisgICAgICAgICAgICBpZiAobmVlZHNUeXBl
Q2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBOdW1iZXJVc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3By
KSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUgJiBTcGVjQ2VsbCkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAg
ICAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKGdwciksIG5vZGUtPmNoaWxkMSgpLCB+U3BlY0NlbGwsCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBjZWxsOiBz
byB0cnVlIHR1cm5zIGludG8gMSBhbmQgYWxsIGVsc2UgdHVybnMgaW50byAwLgotICAgICAgICAg
ICAgICAgIG1faml0LmNvbXBhcmU2NChKSVRDb21waWxlcjo6RXF1YWwsIGdwciwgVHJ1c3RlZElt
bTMyKFZhbHVlVHJ1ZSksIHJlc3VsdEdwcik7Ci0gICAgICAgICAgICAgICAgY29udmVydGVkLmFw
cGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNl
bGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCisgICAg
ICAgICAgICAgICAgICAgIG1faml0LmNvbXBhcmU2NChKSVRDb21waWxlcjo6RXF1YWwsIGdwciwg
VHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgICAg
IGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIGlz
TnVtYmVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0KIAotICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRv
dWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQotICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0
R3ByKTsKLSAgICAgICAgdW5ib3hEb3VibGUocmVzdWx0R3ByLCBmcHIpOworICAgICAgICAgICAg
Ly8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpT
VmFsdWUKKyAgICAgICAgICAgIG1faml0Lm1vdmUoZ3ByLCByZXN1bHRHcHIpOworICAgICAgICAg
ICAgdW5ib3hEb3VibGUocmVzdWx0R3ByLCBmcHIpOwogCi0gICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdwcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVz
dWx0R3ByLCBmcHIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7
CisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCByZXN1bHRHcHIsIGZwcik7CisgICAgICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7CiAKLSAgICAgICAgY29udmVydGVk
LmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogCi0gICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1f
aml0Lnplcm9FeHRlbmQzMlRvUHRyKGdwciwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgIGlzSW50
ZWdlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihn
cHIsIHJlc3VsdEdwcik7CiAKLSAgICAgICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgIGNvbnZlcnRlZC5saW5rKCZtX2ppdCk7CiAjZWxzZQotICAgICAgICBOb2RlKiBjaGls
ZE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSBjaGlsZE5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
KyAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBjaGlsZE5vZGUtPnZp
cnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dl
bmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBv
cDEucGF5bG9hZEdQUigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOworICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdwciA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7CisgICAgICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3QgY29udmVydGVkOwogCi0gICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcikKLSAgICAgICAgICAgIG1faml0Lm1vdmUocGF5
bG9hZEdQUiwgcmVzdWx0R3ByKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBHUFJSZWcg
dGFnR1BSID0gb3AxLnRhZ0dQUigpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXBGcHIo
dGhpcyk7Ci0gICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKLSAgICAgICAg
ICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0KLSAgICAgICAgICAg
IGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpMb3dlc3RUYWcpKTsKKyAgICAgICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0g
RGF0YUZvcm1hdEpTSW50ZWdlcikKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRH
UFIsIHJlc3VsdEdwcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigpOworICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0
ZW1wRnByKHRoaXMpOworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigp
OworICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZykpOworCisgICAgICAgICAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIs
IHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFn
KSkpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKQotICAgICAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxv
YWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFs
LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2Vs
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBjZWxsOiBzbyB0cnVlIHR1cm5zIGludG8gMSBh
bmQgYWxsIGVsc2UgdHVybnMgaW50byAwLgotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc0Jvb2xlYW4gPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHRh
Z0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdwcik7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEl0J3Mgbm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFs
bCBlbHNlIHR1cm5zIGludG8gMC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzQm9vbGVhbiA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFn
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdwcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpc0Jvb2xlYW4ubGluaygmbV9qaXQp
OwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlzQm9vbGVhbi5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHVuYm94RG91YmxlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgZnByLCBzY3JhdGNoLmZwcigp
KTsKKyAgICAgICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwg
c2NyYXRjaC5mcHIoKSk7CiAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJl
c3VsdEdwcik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3VsdEdwciwg
ZnByKTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKKyAg
ICAgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOworICAgICAg
ICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKIAotICAgICAgICAg
ICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIGNvbnZl
cnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmso
Jm1faml0KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsK
KyAgICAgICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKIAotICAgICAgICAgICAgY29udmVy
dGVkLmxpbmsoJm1faml0KTsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHRHcHIsIG5vZGUpOworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHcHIs
IG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2Vu
ZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGNhc2UgQm9vbGVhblVzZTogeworICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgbV9qaXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigx
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgCisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIEdlbmVyYXRl
ZE9wZXJhbmRUeXBlVW5rbm93bjoKKworICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAg
fQogfQogCkBAIC0yMzI2LDE0ICsyMzg0LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVJbnQzMlRvRG91YmwKICNlbmRpZgogICAgIAogICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgQmFja3dhcmRT
cGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3Ax
LmdwcigpLCByZXN1bHQuZnByKCkpOwogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigp
LCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBGUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0yMzQ2LDE1
ICsyNDA0LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmwKICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NCgKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogICAgIAotICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICBpZiAobmVlZHNUeXBlQ2hl
Y2sobm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIpKSB7CiAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IEZvcndhcmRJbnQzMlRvRG91YmxlKSB7Ci0gICAgICAgICAgICBmb3J3YXJkU3BlY3VsYXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBu
b2RlLT5jaGlsZDEoKS5ub2RlKCksCisgICAgICAgICAgICBmb3J3YXJkVHlwZUNoZWNrKAorICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjTnVt
YmVyLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLAogICAgICAgICAg
ICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKG9wMUdQUiwgRGF0YUZvcm1hdEpTKSk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAorICAgICAg
ICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5v
ZGUtPmNoaWxkMSgpLCBTcGVjTnVtYmVyLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1MzgsNDkgKzI1OTYsNjQgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICBtX2ppdC5tb3Zl
KEltbTMyKHRvSW50MzIoZCkpLCBzY3JhdGNoUmVnKTsKICAgICAgICAgdmFsdWUuYWRvcHQoc2Ny
YXRjaCk7CiAgICAgICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsKLSAgICB9IGVsc2UgaWYgKHZh
bHVlVXNlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3By
KCk7Ci0gICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAg
ICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgICAgICBjb21waWxlQ2xhbXBJbnRlZ2VyVG9CeXRl
KG1faml0LCBzY3JhdGNoUmVnKTsKLSAgICAgICAgfQotICAgICAgICB2YWx1ZS5hZG9wdChzY3Jh
dGNoKTsKLSAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOwotICAgIH0gZWxzZSBpZiAocm91
bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0g
MSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVz
ZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEZQUlRlbXBv
cmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZw
cigpOwotICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICBjb21waWxl
Q2xhbXBEb3VibGVUb0J5dGUobV9qaXQsIGdwciwgZnByLCBmbG9hdFNjcmF0Y2guZnByKCkpOwot
ICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwotICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKICAg
ICB9IGVsc2UgewotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywg
dmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBG
UFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5n
cHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0gbV9qaXQuYnJhbmNo
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgZnByLCBmcHIpOwotICAgICAgICBt
X2ppdC54b3JQdHIoZ3ByLCBncHIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmaXhl
ZCA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKLQotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09
IFNpZ25lZFR5cGVkQXJyYXkpCi0gICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hUcnVu
Y2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5j
YXRlRmFpbGVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJh
bmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5j
aElmVHJ1bmNhdGVGYWlsZWQpOwotICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKGZhaWxlZCwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKLQotICAg
ICAgICBmaXhlZC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7Ci0g
ICAgICAgIHZhbHVlR1BSID0gZ3ByOworICAgICAgICBzd2l0Y2ggKHZhbHVlVXNlLnVzZUtpbmQo
KSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3Jh
dGNoLmdwcigpOworICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9wLmdwcigpLCBzY3JhdGNo
UmVnKTsKKyAgICAgICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICAgICAgICAgIGNv
bXBpbGVDbGFtcEludGVnZXJUb0J5dGUobV9qaXQsIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7CisgICAgICAgICAgICB2YWx1ZUdQ
UiA9IHNjcmF0Y2hSZWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBpZiAocm91bmRpbmcg
PT0gQ2xhbXBSb3VuZGluZykgeworICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9
PSAxKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhp
cywgdmFsdWVVc2UpOworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IGZsb2F0U2NyYXRjaCh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBH
UFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAgIGNvbXBpbGVDbGFtcERv
dWJsZVRvQnl0ZShtX2ppdCwgZ3ByLCBmcHIsIGZsb2F0U2NyYXRjaC5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9
IGdwcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB2YWx1
ZU9wLmZwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFOID0gbV9qaXQuYnJhbmNo
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgZnByLCBmcHIpOworICAgICAgICAg
ICAgICAgIG1faml0LnhvclB0cihncHIsIGdwcik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZml4ZWQgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgbm90TmFO
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmYWlsZWQ7CisgICAgICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0g
U2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJh
bmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNo
SWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvVWludDMyKGZwciwgZ3By
LCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGZh
aWxlZCwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBmaXhlZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgdmFsdWUuYWRv
cHQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KKyAgICAKICAgICBBU1NFUlRfVU5VU0VE
KHZhbHVlR1BSLCB2YWx1ZUdQUiAhPSBwcm9wZXJ0eSk7CiAgICAgQVNTRVJUKHZhbHVlR1BSICE9
IGJhc2UpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKQEAgLTI3MjIsOCAr
Mjc5NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mRm8KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YoTm9kZSogbm9kZSkKIHsKLSAgICBp
ZiAoKCEhKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpICYmICEhKG1f
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNDZWxsKSkKLSAgICAg
ICAgfHwgbm9kZS0+Y2hpbGQxKCktPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKSB7CisgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7CiAgICAgICAgIC8vIEl0
IG1pZ2h0IG5vdCBiZSBhIGNlbGwuIFNwZWN1bGF0ZSBsZXNzIGFnZ3Jlc3NpdmVseS4KICAgICAg
ICAgLy8gT3I6IGl0IG1pZ2h0IG9ubHkgYmUgdXNlZCBvbmNlIChpLmUuIGJ5IHVzKSwgc28gd2Ug
Z2V0IHplcm8gYmVuZWZpdAogICAgICAgICAvLyBmcm9tIHNwZWN1bGF0aW5nIGFueSBtb3JlIGFn
Z3Jlc3NpdmVseSB0aGFuIHdlIGFic29sdXRlbHkgbmVlZCB0by4KQEAgLTI5NjEsOSArMzAzMywx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyhOCiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3Jh
cGgoKS5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgc3dpdGNoIChub2Rl
LT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIGlmIChp
c051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGlu
dDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKIApAQCAtMjk3OSw3ICszMDUyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICAgICAgICAgIAogICAgICAgICBpZiAoaXNO
dW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAg
ICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGls
ZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUNhblRy
dW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewpAQCAtMzAyMSw4ICszMDk0
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICBp
bnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZp
bmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAg
IAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSwgb3AyKTsKQEAgLTMwMzQsMjIgKzMxMDcsMjYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZw
cigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmIChub2RlLT5vcCgp
ID09IFZhbHVlQWRkKSB7CisgICAgICAgIAorICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKICAgICAgICAgY29tcGls
ZVZhbHVlQWRkKG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIC8vIFdl
IGRvbid0IGhhbmRsZSB0aGlzIHlldC4gOi0oCi0gICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2Rl
KiBub2RlKQogewotICAgIGlmIChtX2ppdC5ncmFwaCgpLmFkZFNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgIGNh
c2UgSW50MzJVc2U6IHsKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZO
dW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAg
IGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUo
KSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAg
ICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewpA
QCAtMzA2OSw3ICszMTQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3Vi
KE5vZAogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICAgICAgaW50MzJfdCBpbW0xID0g
dmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAg
ICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgICAgICAgICAgICAgIApAQCAtMzA5NywyMCArMzE3NCwyOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
ICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7
Ci0gICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgIGNhc2UgTnVtYmVyVXNl
OiB7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICBG
UFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAg
ICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgRlBS
UmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwor
ICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKIAotICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRo
TmVnYXRlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkubmVnYXRlU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogCkBAIC0zMTI4LDE3ICszMjE0LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAg
Ci0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBtX2ppdC5uZWdhdGVEb3VibGUo
b3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotCi0gICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIo
KSwgbm9kZSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubmVnYXRlRG91YmxlKG9wMS5m
cHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1
bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwo
Tm9kZSogbm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5tdWxTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAg
ICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CkBAIC0zMTY5LDE3ICszMjY0LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aE11bChOb2QKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwg
b3AyKTsKLQotICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwotICAgIEZQUlJlZyByZWcyID0g
b3AyLmZwcigpOwogICAgICAgICAKLSAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVz
dWx0LmZwcigpKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAgICAgICAgIAotICAgIGRvdWJsZVJlc3VsdChy
ZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKKyAg
ICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5t
dWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgCisgICAgICAgIGRv
dWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkKQEAgLTMyODksMjUgKzMzOTIsMzMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUludGVnZXJBcml0aAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9k
ZSogbm9kZSkKIHsKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBjb21waWxl
U29mdE1vZHVsbyhub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBjYXNl
IE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgCi0gICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIo
KTsKLSAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOworICAgICAgICBGUFJSZWcgb3AxRlBS
ID0gb3AxLmZwcigpOworICAgICAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOwogICAgICAg
ICAKLSAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAg
ICAgICAKLSAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotCi0gICAgY2FsbE9wZXJhdGlvbihm
bW9kQXNERkdPcGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOworICAgICAg
ICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihmbW9kQXNERkdPcGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOwogICAg
ICAgICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgZG91
YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
Y29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCkBAIC0zMzE2LDMzICsz
NDI3LDMzIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSogbm9kZSwKICAgICBp
ZiAoY29tcGlsZVBlZXBIb2xlQnJhbmNoKG5vZGUsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9u
LCBvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkgeworICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7CiAg
ICAgICAgIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShub2RlLCBjb25kaXRpb24pOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisK
KyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpIHsKICAgICAgICAgY29t
cGlsZURvdWJsZUNvbXBhcmUobm9kZSwgZG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAKICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsK
LSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBu
b2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgaWYgKG5v
ZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7CiAgICAgICAgICAgICBub25TcGVjdWxh
dGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRT
cGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5
VXNlS2luZChPYmplY3RVc2UpKSB7CiAgICAgICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHko
bm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9k
ZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdFVzZSAmJiBub2RlLT5jaGlsZDIo
KS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkgewogICAgICAgICAgICAgY29tcGlsZU9i
amVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIo
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYm
IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UgJiYgbm9kZS0+Y2hp
bGQyKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewogICAgICAgICAgICAgY29tcGlsZU9iamVj
dFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTM0MzAsNyArMzU0MSw4
IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKIAogYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAg
ICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9
IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sg
IT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOwpAQCAtMzQ0NCw4
ICszNTU2LDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAg
ICAgICBjb21waWxlSW50ZWdlckNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkgeworICAgICAgICAKKyAgICBjYXNlIE51bWJlclVzZTogewogICAgICAgICB1bnNpZ25l
ZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBp
ZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICBOb2RlKiBi
cmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5k
ZXhJbkJsb2NrKTsKQEAgLTM0NTksMTAgKzM1NzEsMTIgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21waWxlRG91YmxlQ29tcGFyZShub2RlLCBN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkg
fHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAKKyAg
ICBjYXNlIFN0cmluZ1VzZTogewogICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RF
cShub2RlKTsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgp
ICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgIH0KKyAg
ICAgICAgCisgICAgY2FzZSBPYmplY3RVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5k
ZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaElu
ZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewogICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9
IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7
CkBAIC0zNDc2LDggKzM1OTAsMTUgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmlj
dEVxKE5vZAogICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0
RXEobm9kZSk7CisgICAgICAgIAorICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICByZXR1
cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCkBAIC0zODE1LDYgKzM5MzYsMjQxIEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXIKICAgICByZXR1cm4gdGVt
cG9yYXJ5LmdwcigpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVJbnQzMihF
ZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjSW50MzIpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgKFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKHRoaXMs
IGVkZ2UpKS5ncHIoKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTnVtYmVy
KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNOdW1iZXIp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlz
LCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgb3BlcmFuZC5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQu
Z3ByKCkpLCBlZGdlLCBTcGVjTnVtYmVyLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIG9wZXJhbmQuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOworICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisjZWxzZQorICAgIEpTVmFs
dWVPcGVyYW5kIG9wMSh0aGlzLCBlZGdlKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVn
ZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wZXJhbmQudGFnR1BS
KCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgIHR5cGVDaGVjaygKKyAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC50YWdHUFIoKSwgb3AxLm9wZXJhbmQoKSksIGVkZ2Us
IFNwZWNOdW1iZXIsCisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIG9wZXJhbmQudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcpKSk7CisgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyNlbmRpZgorfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAo
IW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNSZWFsTnVtYmVyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAg
ICBGUFJSZWcgZnByID0gb3BlcmFuZC5mcHIoKTsKKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY1JlYWxOdW1iZXIsCisgICAgICAgIG1faml0LmJy
YW5jaERvdWJsZSgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9y
VW5vcmRlcmVkLCBmcHIsIGZwcikpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVCb29sZWFuKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNw
ZWNCb29sZWFuKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIChTcGVjdWxhdGVCb29sZWFu
T3BlcmFuZCh0aGlzLCBlZGdlKSkuZ3ByKCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZUNlbGwoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwg
U3BlY0NlbGwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgKFNwZWN1bGF0ZUNlbGxPcGVy
YW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlT2JqZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNw
ZWNPYmplY3QpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgSlNW
YWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0
cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcGVyYW5kLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFu
ZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBH
UFJSZWcgZ3ByID0gb3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
Z3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVj
T2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZ3ByLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIG5vdENlbGwubGlu
aygmbV9qaXQpOworICAgIGlmIChuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNP
dGhlcikpIHsKKyAgICAgICAgbV9qaXQubW92ZShncHIsIHRlbXBHUFIpOworICAgICAgICBtX2pp
dC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCB0
ZW1wR1BSKTsKKyAgICAgICAgCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzKGdwciksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9q
aXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0
ZW1wR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFs
dWVOdWxsKSkpOworICAgIH0KKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyNlbHNlCisgICAgR1BS
UmVnIHRhZ0dQUiA9IG9wZXJhbmQudGFnR1BSKCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBv
cGVyYW5kLnBheWxvYWRHUFIoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0K
KyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNw
ZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXlsb2FkR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIG5v
dENlbGwubGluaygmbV9qaXQpOworICAgIGlmIChuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2Vs
bCB8IFNwZWNPdGhlcikpIHsKKyAgICAgICAgbV9qaXQubW92ZSh0YWdHUFIsIHRlbXBHUFIpOwor
ICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcEdQUik7CisgICAgICAgIAor
ICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxv
YWRHUFIpLCByaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
dGVtcEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6Ok51bGxUYWcpKSk7CisgICAgfQorICAgIGRvbmUubGluaygmbV9qaXQpOworI2VuZGlm
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UpCit7
CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7
CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkp
LCBlZGdlLCBTcGVjU3RyaW5nLCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3BlcmFuZC5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU5v
dENlbGwoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgflNwZWND
ZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQo
dGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVk
Z2UsIH5TcGVjQ2VsbCwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAorICAgICAgICAgICAg
SklUQ29tcGlsZXI6Olplcm8sIG9wZXJhbmQuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
cikpOworI2Vsc2UKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQu
dGFnR1BSKCksIG9wZXJhbmQucGF5bG9hZEdQUigpKSwgZWRnZSwgflNwZWNDZWxsLAorICAgICAg
ICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwgb3BlcmFu
ZC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisjZW5kaWYKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT3RoZXIoRWRnZSBlZGdlKQoreworICAg
IGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY090aGVyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcg
dGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2ppdC5tb3Zl
KG9wZXJhbmQuZ3ByKCksIHRlbXBHUFIpOworICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHRlbXBHUFIpOworICAgIHR5cGVDaGVj
aygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsIFNwZWNPdGhlciwK
KyAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHRlbXBHUFIsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KFZhbHVlTnVsbCkpKTsKKyNlbHNlCisgICAgbV9qaXQubW92ZShvcGVyYW5kLnRhZ0dQUigpLCB0
ZW1wR1BSKTsKKyAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcEdQUik7CisgICAg
dHlwZUNoZWNrKAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLnRhZ0dQUigpLCBvcGVyYW5k
LnBheWxvYWRHUFIoKSksIGVkZ2UsIFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TnVsbFRhZykpKTsKKyNlbmRpZiAgICAKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlKE5vZGUqLCBFZGdlIGVkZ2UpCit7CisgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgewor
ICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93bkludDMy
VXNlOgorICAgICAgICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQzMikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duTnVtYmVyVXNlOgorICAgICAgICBBU1NFUlQo
IW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNOdW1iZXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgIEFTU0VSVCghbmVlZHNUeXBlQ2hlY2soZWRnZSwg
U3BlY0NlbGwpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAg
c3BlY3VsYXRlSW50MzIoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVhbE51bWJl
clVzZToKKyAgICAgICAgc3BlY3VsYXRlUmVhbE51bWJlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBzcGVjdWxhdGVCb29s
ZWFuKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENlbGxVc2U6CisgICAgICAgIHNw
ZWN1bGF0ZUNlbGwoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT2JqZWN0VXNlOgor
ICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
T2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb3RDZWxsVXNlOgorICAgICAg
ICBzcGVjdWxhdGVOb3RDZWxsKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE90aGVy
VXNlOgorICAgICAgICBzcGVjdWxhdGVPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
cmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTMgKzEyMSwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgR1BSUmVnIGZpbGxJbnRlZ2VyKE5vZGUqLCBEYXRh
Rm9ybWF0JiByZXR1cm5Gb3JtYXQpOworICAgIEdQUlJlZyBmaWxsSW50ZWdlcihFZGdlLCBEYXRh
Rm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGZp
bGxKU1ZhbHVlKE5vZGUqKTsKKyAgICBHUFJSZWcgZmlsbEpTVmFsdWUoRWRnZSk7CiAjZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIGJvb2wgZmlsbEpTVmFsdWUoTm9kZSosIEdQUlJlZyYsIEdQ
UlJlZyYsIEZQUlJlZyYpOworICAgIGJvb2wgZmlsbEpTVmFsdWUoRWRnZSwgR1BSUmVnJiwgR1BS
UmVnJiwgRlBSUmVnJik7CiAjZW5kaWYKLSAgICBHUFJSZWcgZmlsbFN0b3JhZ2UoTm9kZSopOwor
ICAgIEdQUlJlZyBmaWxsU3RvcmFnZShFZGdlKTsKIAogICAgIC8vIGxvY2sgYW5kIHVubG9jayBH
UFIgJiBGUFIgcmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKQpAQCAtMjk1LDEx
ICsyOTUsMTEgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBzcGVjdWxhdGl2ZSBv
cGVyYW5kIHR5cGVzLCBiZWxvdywgdG8gZmlsbCBvcGVyYW5kIHRvCiAgICAgLy8gbWFjaGluZSBy
ZWdpc3RlcnMsIGltcGxpY2l0bHkgZ2VuZXJhdGluZyBzcGVjdWxhdGlvbiBjaGVja3MgYXMgbmVl
ZGVkLgotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1
cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0
ZUludFN0cmljdChOb2RlKik7Ci0gICAgRlBSUmVnIGZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSos
IFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUNlbGwoTm9k
ZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xl
YW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0
ZUludChFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
KTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChFZGdlKTsKKyAgICBGUFJSZWcg
ZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgR1BS
UmVnIGZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBH
UFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwog
ICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIoTm9k
ZSopOwogCiAgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRvcihQYXNzT3duUHRyPFNsb3dQYXRo
R2VuZXJhdG9yPik7CkBAIC01NDAsMTIgKzU0MCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnVu
Y3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzRnVuY3Rp
b25Db25zdGFudChub2RlKTsgfQogICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9k
ZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
KTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1
cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KLSAgICBpbnQz
Ml90IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWVP
ZkludDMyQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIodmFsdWVP
Zk51bWJlckNvbnN0YW50KG5vZGUpKTsKLSAgICB9CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2pp
dC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlKTsgfQogI2VuZGlmCkBAIC0yMDIzLDkgKzIw
MTcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENo
aWxkLCBFZGdlIHJpZ2h0Q2hpbGQpOwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUqKTsK
LSAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlLCBib29s
IG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKKyAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9n
aWNhbE5vdChFZGdlIHZhbHVlKTsKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsK
LSAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2UgdmFsdWUsIEJsb2NrSW5kZXgg
dGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwor
ICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJbmRleCB0
YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbik7CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUqKTsK
ICAgICAKICAgICB2b2lkIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtMjE3OCw3ICsyMTcyLDkgQEAgcHVibGljOgog
ICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2Us
IE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292
ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7CiAgICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVy
eSgpKTsKICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2Us
IE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNl
LCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbik7CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNl
LCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRp
b25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICB2b2lkIHNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbik7CiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBh
IHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZSopOwogICAgIHZvaWQgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBFZGdlKTsKQEAgLTIx
ODgsNiArMjE4NCwyNCBAQCBwdWJsaWM6CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCog
Zm9yd2FyZFNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCA9IFVuY291bnRhYmxlV2F0Y2hw
b2ludCk7CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3BlY3VsYXRpb25XYXRjaHBv
aW50KEV4aXRLaW5kLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgCisgICAgLy8gSGVscGVy
cyBmb3IgcGVyZm9ybWluZyB0eXBlIGNoZWNrcyBvbiBhbiBlZGdlIHN0b3JlZCBpbiB0aGUgZ2l2
ZW4gcmVnaXN0ZXJzLgorICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soRWRnZSBlZGdlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpIHsgcmV0dXJuIG1fc3RhdGUuZm9yTm9kZShlZGdl
KS5tX3R5cGUgJiB+dHlwZXNQYXNzZWRUaHJvdWdoOyB9CisgICAgdm9pZCB0eXBlQ2hlY2soSlNW
YWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRU
aHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKKyAgICB2b2lkIGZvcndh
cmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBj
b25zdCBWYWx1ZVJlY292ZXJ5Jik7CisgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBz
b3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisKKyAg
ICB2b2lkIHNwZWN1bGF0ZUludDMyKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKEVk
Z2UpOworICAgIHZvaWQgc3BlY3VsYXRlUmVhbE51bWJlcihFZGdlKTsKKyAgICB2b2lkIHNwZWN1
bGF0ZUJvb2xlYW4oRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZv
aWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhl
cihFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdlKTsKKyAgICB2b2lkIHNwZWN1
bGF0ZU5vdENlbGwoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlKTsKKyAgICB2
b2lkIHNwZWN1bGF0ZShOb2RlKiwgRWRnZSk7CisgICAgCiAgICAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5TW9kZSk7CiAgICAgCiAgICAgSklU
Q29tcGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcFdp
dGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdUeXBlLCBib29sIGludmVydCk7
CkBAIC0yMTk3LDcgKzIyMTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcnJheWlmeShOb2RlKik7
CiAgICAgCiAgICAgdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+Ci0gICAgR1BSUmVnIGZpbGxTcGVjdWxh
dGVJbnRJbnRlcm5hbChOb2RlKiwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlv
bkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChFZGdlLCBE
YXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAKICAg
ICAvLyBJdCBpcyBwb3NzaWJsZSwgZHVyaW5nIHNwZWN1bGF0aXZlIGdlbmVyYXRpb24sIHRvIHJl
YWNoIGEgc2l0dWF0aW9uIGluIHdoaWNoIHdlCiAgICAgLy8gY2FuIHN0YXRpY2FsbHkgZGV0ZXJt
aW5lIGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsIChmb3IgZXhhbXBsZSwgd2hlbiB0d28gbm9kZXMK
QEAgLTIyNDcsNiArMjI2MSw5IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJl
aW5nIGdlbmVyYXRlZC4KICAgICBCbG9ja0luZGV4IG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJy
ZW50Tm9kZTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYm9vbCBtX2NhbkV4aXQ7CisjZW5k
aWYKICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAgICAvLyBWaXJ0dWFsIGFuZCBwaHlz
aWNhbCByZWdpc3RlciBtYXBzLgogICAgIFZlY3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1fZ2Vu
ZXJhdGlvbkluZm87CkBAIC0yMzA1LDE3ICsyMzIyLDE3IEBAIHB1YmxpYzoKIAogY2xhc3MgSW50
ZWdlck9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNw
ZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2Rl
ID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAg
ICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAg
ICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVCVUcKICAgICAg
ICAgLCBtX2Zvcm1hdChEYXRhRm9ybWF0Tm9uZSkKICNlbmRpZgogICAgIHsKICAgICAgICAgQVNT
RVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsK
LSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQo
KSA9PSBLbm93bkludDMyVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoZWRnZS5ub2Rl
KCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yMzI1LDkgKzIzNDIsMTQgQEAg
cHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAK
KyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAg
ICB9CisgICAgCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBEYXRh
Rm9ybWF0IGZvcm1hdCgpCkBAIC0yMzQwLDI3ICsyMzYyLDI3IEBAIHB1YmxpYzoKICAgICBHUFJS
ZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BS
UmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEludGVnZXIobm9k
ZSgpLCBtX2Zvcm1hdCk7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxs
SW50ZWdlcihtX2VkZ2UsIG1fZm9ybWF0KTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlk
OwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNl
KG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6
CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdl
IG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgRGF0YUZvcm1hdCBtX2Zv
cm1hdDsKIH07CiAKIGNsYXNzIEpTVmFsdWVPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKKyAgICBleHBs
aWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIE9wZXJh
bmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAg
ICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAg
ICwgbV9lZGdlKGVkZ2UpCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgLCBtX2dwck9ySW52
YWxpZChJbnZhbGlkR1BSUmVnKQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTIzNjgsMTQg
KzIzOTAsMTQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQp
OwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVk
Z2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5v
ZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIG1fcmVnaXN0ZXIucGFpci50YWdHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgICAgICBtX3Jl
Z2lzdGVyLnBhaXIucGF5bG9hZEdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIGlmIChqaXQt
PmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAg
ICAgICAgICAgICBmaWxsKCk7CiAjZW5kaWYKICAgICB9CkBAIC0yMzk2LDE3ICsyNDE4LDIyIEBA
IHB1YmxpYzoKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUq
IG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0
dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJS
ZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BS
UmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUobm9k
ZSgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxKU1ZhbHVlKG1f
ZWRnZSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgSlNWYWx1
ZVJlZ3MganNWYWx1ZVJlZ3MoKQpAQCAtMjQxOSw3ICsyNDQ2LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZmlsbCgpCiAgICAgewogICAgICAgICBpZiAobV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9PSBJ
bnZhbGlkR1BSUmVnICYmIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSID09IEludmFsaWRHUFJS
ZWcpCi0gICAgICAgICAgICBtX2lzRG91YmxlID0gIW1faml0LT5maWxsSlNWYWx1ZShub2RlKCks
IG1fcmVnaXN0ZXIucGFpci50YWdHUFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3Jl
Z2lzdGVyLmZwcik7CisgICAgICAgICAgICBtX2lzRG91YmxlID0gIW1faml0LT5maWxsSlNWYWx1
ZShtX2VkZ2UsIG1fcmVnaXN0ZXIucGFpci50YWdHUFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2Fk
R1BSLCBtX3JlZ2lzdGVyLmZwcik7CiAgICAgfQogCiAgICAgR1BSUmVnIHRhZ0dQUigpCkBAIC0y
NDUxLDEyICsyNDc4LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAg
ICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAg
IH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9u
b2RlOworICAgIEVkZ2UgbV9lZGdlOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIG1f
Z3ByT3JJbnZhbGlkOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTI0NzMsMTQgKzI1MDAs
MTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4
cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAg
IGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkK
ICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAg
ICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJl
ZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNl
S2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkp
CisgICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNl
S2luZCgpID09IEtub3duQ2VsbFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUo
KSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAgICAgCkBAIC0yNDkwLDI2ICsyNTE3LDMx
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAg
fQogICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9l
ZGdlOworICAgIH0KKyAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KICAg
ICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9
PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+Zmls
bFN0b3JhZ2Uobm9kZSgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZp
bGxTdG9yYWdlKGVkZ2UoKSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9
CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUp
OworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAg
ICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9l
ZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKQEAgLTI2NDEsOSArMjY3Myw5
IEBAIHByaXZhdGU6CiAKIGNsYXNzIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHsKIHB1YmxpYzoK
LSAgICBleHBsaWNpdCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVj
dWxhdGlvbikKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2
ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJh
Y2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRp
Y09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9u
b2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJP
ckludmFsaWQoSW52YWxpZEdQUlJlZykKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9mb3Jt
YXQoRGF0YUZvcm1hdE5vbmUpCkBAIC0yNjUxLDggKzI2ODMsOCBAQCBwdWJsaWM6CiAgICAgICAg
ICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsK
LSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2Rl
ID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJV
c2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25JbnQzMlVzZSkpOworICAgICAgICBpZiAoaml0
LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yNjYx
LDEwICsyNjkzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9
IEludmFsaWRHUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsK
ICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAK
ICAgICBEYXRhRm9ybWF0IGZvcm1hdCgpCkBAIC0yNjc3LDE4ICsyNzE0LDE4IEBAIHB1YmxpYzoK
ICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJ
bnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNw
ZWN1bGF0ZUludChub2RlKCksIG1fZm9ybWF0LCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBt
X2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50KGVkZ2UoKSwgbV9mb3JtYXQs
IG1fZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7Cisg
ICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3Vs
YXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAg
ICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgRGF0YUZvcm1hdCBtX2Zvcm1hdDsKICAgICBT
cGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKQEAgLTI2OTYsMTQgKzI3MzMsMTQgQEAg
cHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHsKIHB1YmxpYzoK
LSAgICBleHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQq
IGppdCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
KFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBt
b2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkK
LSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAg
ICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsK
LSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5k
KCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25JbnQzMlVzZSkpOworICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAg
fQogCkBAIC0yNzEyLDQxICsyNzQ5LDQ2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3By
T3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3By
T3JJbnZhbGlkKTsKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUo
KTsKICAgICB9CiAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9y
SW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBt
X2ppdC0+ZmlsbFNwZWN1bGF0ZUludFN0cmljdChub2RlKCkpOworICAgICAgICAgICAgbV9ncHJP
ckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludFN0cmljdChlZGdlKCkpOwogICAgICAg
ICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAg
ICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2Rl
KCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAg
Tm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxp
ZDsKIH07CiAKIGNsYXNzIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4
cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1
c2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24p
CisgICAgZXhwbGljaXQgU3BlY3VsYXRlRG91YmxlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3Bl
Y3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRT
cGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5u
b2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9mcHJPckludmFsaWQo
SW52YWxpZEZQUlJlZykKICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSA9PSBE
b3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBB
U1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChl
ZGdlLnVzZUtpbmQoKSA9PSBOdW1iZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25OdW1i
ZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gUmVhbE51bWJlclVzZSkpOworICAgICAgICBpZiAo
aml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZnByKCk7CiAgICAgfQogCkBAIC0y
NzU1LDQyICsyNzk3LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZnByT3JJbnZhbGlk
ICE9IEludmFsaWRGUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZnByT3JJbnZhbGlk
KTsKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9
CiAKICAgICBGUFJSZWcgZnByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2Zwck9ySW52YWxpZCA9
PSBJbnZhbGlkRlBSUmVnKQotICAgICAgICAgICAgbV9mcHJPckludmFsaWQgPSBtX2ppdC0+Zmls
bFNwZWN1bGF0ZURvdWJsZShub2RlKCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZnBy
T3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVEb3VibGUoZWRnZSgpLCBtX2RpcmVjdGlv
bik7CiAgICAgICAgIHJldHVybiBtX2Zwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2pp
dC0+dXNlKG5vZGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBt
X2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgRlBSUmVnIG1f
ZnByT3JJbnZhbGlkOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsK
IAogY2xhc3MgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxp
Y2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwg
U3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3Bl
cmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQog
ICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAg
ICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVn
KQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0g
ICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVF9VTlVTRUQo
bW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgp
ID09IENlbGxVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlIHx8IGVkZ2UudXNl
S2luZCgpID09IE9iamVjdFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpKTsKKyAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAg
IH0KIApAQCAtMjc5OSw0MiArMjg0Niw0NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dw
ck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dw
ck9ySW52YWxpZCk7CiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2Rl
KCk7CiAgICAgfQogCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9ncHJP
ckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0g
bV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxsKG5vZGUoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAg
ICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSgpLCBtX2Rp
cmVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAg
ICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZl
SklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BS
UmVnIG1fZ3ByT3JJbnZhbGlkOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9u
OwogfTsKIAogY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgewogcHVibGljOgotICAgIGV4
cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2Ug
dXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9u
KQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBq
aXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRT
cGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFu
ZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNl
Lm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxp
ZChJbnZhbGlkR1BSUmVnKQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9
IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAg
IEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwg
ZWRnZS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVk
KG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAgICAgCkBAIC0yODQ0LDMwICsy
ODk2LDQxIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7
CiAgICAgfQogICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9lZGdlOworICAgIH0KKyAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAg
IH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52
YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2pp
dC0+ZmlsbFNwZWN1bGF0ZUJvb2xlYW4obm9kZSgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgICAg
ICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQm9vbGVhbihlZGdlKCksIG1f
ZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAg
ICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRp
dmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBH
UFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rp
b247CiB9OwogCisjZGVmaW5lIERGR19UWVBFX0NIRUNLKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNz
ZWRUaHJvdWdoLCBqdW1wVG9GYWlsKSBkbyB7IFwKKyAgICAgICAgaWYgKCFuZWVkc1R5cGVDaGVj
aygoZWRnZSksICh0eXBlc1Bhc3NlZFRocm91Z2gpKSkgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgdHlwZUNoZWNrKChzb3VyY2UpLCAoZWRnZSksICh0eXBlc1Bhc3Nl
ZFRocm91Z2gpLCAoanVtcFRvRmFpbCkpOyBcCisgICAgfSB3aGlsZSAoMCkKKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJ
KHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0
dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDExICsyODks
MTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogZ2V0TG9jYWwgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUs
IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBHZXRMb2Nh
bCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBHZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShub2Rl
KSk7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBj
b2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9z
dHJ1Y3R1cmUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldExvY2FsKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEVkZ2UoZ2V0TG9jYWwsIENlbGxVc2UpKTsKIAogICAgICAgICAgICAg
ICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9PSBub2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOwpAQCAtMzE3LDcgKzMx
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZXhpdC4KICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IG5vZGUtPmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkMSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBu
b2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU2V0TG9jYWws
IGNvZGVPcmlnaW4sCkBAIC0zMjcsNyArMzI3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAvLyBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIHJhdGhlciB0aGFuIHJlZXhlY3V0aW5n
IHRoZSBjdXJyZW50IG9uZS4KICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcndhcmRDaGVja1N0cnVjdHVyZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLCBjaGlsZDEpOworICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZh
bHVlLm1fc3RydWN0dXJlKSksIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVzZSkpOwogICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
c2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Vz
ZUtpbmQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
c2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdVc2VLaW5kLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIFVzZUtpbmQgdXNlS2luZCkKK3sKKyAgICBzd2l0Y2ggKHVzZUtp
bmQpIHsKKyAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgIG91dC5wcmludCgiVW50eXBlZCIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBvdXQucHJpbnQo
IkludDMyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAg
ICAgb3V0LnByaW50KCJLbm93bkludDMyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVh
bE51bWJlclVzZToKKyAgICAgICAgb3V0LnByaW50KCJSZWFsTnVtYmVyIik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duTnVtYmVyVXNlOgorICAgICAgICBvdXQucHJp
bnQoIktub3duTnVtYmVyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQm9vbGVhblVzZToK
KyAgICAgICAgb3V0LnByaW50KCJCb29sZWFuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q2VsbFVzZToKKyAgICAgICAgb3V0LnByaW50KCJDZWxsIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICBvdXQucHJpbnQoIktub3duQ2VsbCIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE9iamVjdFVzZToKKyAgICAgICAgb3V0LnByaW50KCJPYmpl
Y3QiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAg
ICBvdXQucHJpbnQoIk9iamVjdE9yT3RoZXIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT
dHJpbmdVc2U6CisgICAgICAgIG91dC5wcmludCgiU3RyaW5nIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTm90Q2VsbFVzZToKKyAgICAgICAgb3V0LnByaW50KCJOb3RDZWxsIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiT3RoZXIi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
VXNlS2luZF9oCisjZGVmaW5lIERGR1VzZUtpbmRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgi
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworZW51bSBVc2VLaW5kIHsKKyAgICBVbnR5cGVkVXNlLAorICAgIEludDMyVXNl
LAorICAgIEtub3duSW50MzJVc2UsCisgICAgUmVhbE51bWJlclVzZSwKKyAgICBOdW1iZXJVc2Us
CisgICAgS25vd25OdW1iZXJVc2UsCisgICAgQm9vbGVhblVzZSwKKyAgICBDZWxsVXNlLAorICAg
IEtub3duQ2VsbFVzZSwKKyAgICBPYmplY3RVc2UsCisgICAgT2JqZWN0T3JPdGhlclVzZSwKKyAg
ICBTdHJpbmdVc2UsCisgICAgTm90Q2VsbFVzZSwKKyAgICBPdGhlclVzZSwKKyAgICBMYXN0VXNl
S2luZCAvLyBNdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQg
aXMgdXNlZCB0byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgorfTsKKworQUxX
QVlTX0lOTElORSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVzZUtpbmQgdXNlS2luZCkK
K3sKKyAgICBzd2l0Y2ggKHVzZUtpbmQpIHsKKyAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAg
IHJldHVybiBTcGVjVG9wOworICAgIGNhc2UgSW50MzJVc2U6CisgICAgY2FzZSBLbm93bkludDMy
VXNlOgorICAgICAgICByZXR1cm4gU3BlY0ludDMyOworICAgIGNhc2UgUmVhbE51bWJlclVzZToK
KyAgICAgICAgcmV0dXJuIFNwZWNSZWFsTnVtYmVyOworICAgIGNhc2UgTnVtYmVyVXNlOgorICAg
IGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjTnVtYmVyOworICAgIGNh
c2UgQm9vbGVhblVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNCb29sZWFuOworICAgIGNhc2UgQ2Vs
bFVzZToKKyAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNDZWxsOwor
ICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKKyAgICBjYXNl
IE9iamVjdE9yT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT2JqZWN0IHwgU3BlY090aGVy
OworICAgIGNhc2UgU3RyaW5nVXNlOgorICAgICAgICByZXR1cm4gU3BlY1N0cmluZzsKKyAgICBj
YXNlIE5vdENlbGxVc2U6CisgICAgICAgIHJldHVybiB+U3BlY0NlbGw7CisgICAgY2FzZSBPdGhl
clVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNPdGhlcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU3BlY1RvcDsKKyAg
ICB9Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBpc051bWVyaWNhbChVc2VLaW5kIGtpbmQpCit7
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnQzMlVzZToKKyAgICBjYXNlIEtub3du
SW50MzJVc2U6CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgIGNhc2UgTnVtYmVyVXNlOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYg
eworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6VXNlS2luZCk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdVc2VLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNyArMzU0LDcgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5v
ZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgLT4gJXNAJXUiLCBu
b2RlLT5pbmRleCgpLCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLT5pbmRl
eCgpKTsKKyAgICAgICAgZGF0YUxvZyhub2RlLCAiIC0+ICIsIGVkZ2UpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3RlciBsb2NhbCwg
QmxvY2tJbmRleCBibG9ja0luZGV4KQpAQCAtMzg5LDcgKzM4OSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKICAgICAgICAgTm9kZSogbm9kZSwgQmxvY2tJ
bmRleCBibG9ja0luZGV4LCBOb2RlKiBleHBlY3RlZE5vZGUsIEVkZ2UgaW5jb21pbmdFZGdlKQog
ICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUsIHNlYXJjaGluZyBmb3Ig
QCV1IGZyb20gQCV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlLT5p
bmRleCgpLCBpbmNvbWluZ0VkZ2UtPmluZGV4KCkpOworICAgICAgICBkYXRhTG9nKG5vZGUsICIg
aW4gQmxvY2sgIyIsIGJsb2NrSW5kZXgsICIsIHNlYXJjaGluZyBmb3IgIiwgZXhwZWN0ZWROb2Rl
LCAiIGZyb20gIiwgaW5jb21pbmdFZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wR3Jh
cGhJZkFwcHJvcHJpYXRlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189229</attachid>
            <date>2013-02-19 21:01:16 -0800</date>
            <delta_ts>2013-02-20 14:34:21 -0800</delta_ts>
            <desc>runs SunSpider, V8, Kraken</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>309454</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NSBA
QAorMjAxMy0wMi0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgbm90IGNoYW5nZSBpdHMgbWluZCBhYm91dCB3aGF0IHR5cGUgc3BlY3VsYXRp
b25zIGEgbm9kZSBkb2VzLCBieSBlbmNvZGluZyB0aGUgY2hlY2tzIGluIHRoZSBOb2RlVHlwZSwg
VXNlS2luZCwgYW5kIEFycmF5TW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBGaXh1cFBoYXNlIG5vdyBsb2NrcyBpbiB0aGUgc3BlY3Vs
YXRpb25zIHRoYXQgZWFjaCBub2RlIHdpbGwgZG8uIEl0IHRoZW4gcmVtZW1iZXJzCisgICAgICAg
IHRob3NlIHNwZWN1bGF0aW9ucyBmb3IgYWxsIHRpbWUuIEVhY2ggbm9kZSBlbnN1cmVzIHRoYXQg
aXQgZXhlY3V0ZXMgdGhlIHNwZWN1bGF0aW9ucworICAgICAgICBwcm9taXNlZCBieSBpdHMgZWRn
ZXMuIFRoaXMgaXMgdHJ1ZSBldmVuIGZvciBQaGFudG9tIG5vZGVzLgorICAgICAgICAKKyAgICAg
ICAgV29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKToKKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVkZ2Vz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRl
Lmg6CisgICAgICAgIChBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFN0YXRlOjpmaWx0ZXJFZGdlQnlVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmZpbHRlckJ5VHlwZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAqIGRmZy9E
RkdBZGphY2VuY3lMaXN0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6QWRq
YWNlbmN5TGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6Y2hpbGQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldENoaWxkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBZGphY2VuY3lMaXN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNl
bmN5TGlzdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6
c2V0Rmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6bnVtQ2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldE51bUNoaWxkcmVu
KToKKyAgICAgICAgKEFkamFjZW5jeUxpc3QpOgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3Iu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFsbG9jYXRvcjo6Y2VsbFNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6
UmVnaW9uOjpoZWFkZXJTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBbGxvY2F0b3I6OlJlZ2lv
bjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRv
cjo6UmVnaW9uOjpwYXlsb2FkU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpS
ZWdpb246OnBheWxvYWRCZWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpSZWdp
b246OnBheWxvYWRFbmQpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6UmVnaW9uOjpp
c0luVGhpc1JlZ2lvbik6CisgICAgICAgIChKU0M6OkRGRzo6OjpBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6fkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjpmcmVlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmZy
ZWVBbGwpOgorICAgICAgICAoSlNDOjpERkc6Ojo6cmVzZXQpOgorICAgICAgICAoSlNDOjpERkc6
Ojo6aW5kZXhPZik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0b3JPZik6CisgICAgICAg
IChKU0M6OkRGRzo6OjpidW1wQWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZnJlZUxp
c3RBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0ZVNsb3cpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KToKKyAgICAgICAgKEpTQzo6REZH
Ojo6OnN0YXJ0QnVtcGluZ0luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKiBk
ZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRMb2Nh
bFN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjplbGltaW5h
dGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6c2V0UmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3Jt
Tm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToK
KyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdl
Ojp1c2VLaW5kVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjp1c2VLaW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzaGlmdCk6CisgICAgICAgICogZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAg
IChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpi
bGVzc0FycmF5T3BlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXhJ
bnRFZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXhEb3VibGVFZGdlKToK
KyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjppbmplY3RJbnQzMlRvRG91YmxlTm9kZSk6
CisgICAgICAgIChGaXh1cFBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjp0
cnVuY2F0ZUNvbnN0YW50VG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6
dHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQ
aGFzZTo6YXR0ZW1wdFRvTWFrZUludGVnZXJBZGQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWZDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRlcmVmQ2hpbGRyZW4pOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWYpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkZXJlZik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnBl
cmZvcm1TdWJzdGl0dXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1ByZWRpY3Rl
ZE51bWVyaWNhbCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZEltbWVkaWF0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmNvbnZlcnRUb0dldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6d2lsbEhhdmVD
b2RlR2VuT3JPU1IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGls
ZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmJpbmFyeVVzZUtpbmQpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNCaW5hcnlVc2VLaW5kKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZUFsbG9jYXRvci5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZUZsYWdzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpub2RlRmxhZ3NBc1N0cmlu
Zyk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFR5cGVDaGVjayk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVSZWFsTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3RP
ck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90Q2Vs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU90aGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZk51bWJlckNvbnN0YW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bmVlZHNUeXBlQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSW50ZWdlck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpub2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpJbnRl
Z2VyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6SlNW
YWx1ZU9wZXJhbmQpOgorICAgICAgICAoSlNWYWx1ZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpTVmFsdWVPcGVyYW5kOjplZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3Bl
cmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdwcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OmZpbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpTVmFsdWVPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVy
YW5kOjpTdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6
OmVkZ2UpOgorICAgICAgICAoU3RvcmFnZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlN0
b3JhZ2VPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6
Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6dXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6U3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQpOgorICAgICAgICAoU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjplZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kOjpTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQpOgorICAgICAgICAoU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVEb3VibGVPcGVy
YW5kOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kKToKKyAgICAgICAgKFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6OmVkZ2Up
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6Om5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6OmZwcik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQpOgorICAgICAgICAo
U3BlY3VsYXRlQ2VsbE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxP
cGVyYW5kOjplZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6
bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6Omdwcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5k
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6ZWRnZSk6Cisg
ICAgICAgIChTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQ6Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
ZUJvb2xlYW5PcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kOjp1c2UpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJ
bnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dFN0cmljdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhl
ckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
TG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAg
KiBkZmcvREZHVXNlS2luZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdU
Rjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQuaDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAgICAg
ICAoSlNDOjpERkc6OmlzTnVtZXJpY2FsKToKKyAgICAgICAgKFdURik6CisgICAgICAgICogZGZn
L0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6cmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQpOgorCiAyMDEzLTAyLTE5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgU2lsZW5jZSBzb21lIGFuYWx5emVyIHdhcm5pbmdzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksOCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFF
NEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5j
cHAgKi87IH07CiAJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyRjE2
ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZEMiAvKiBE
RkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMzRCMTQ5MTZENDIw
MTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5k
LmNwcCAqLzsgfTsKKwkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ4MTZE
NDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQjNBMUExNTNFNjhGMjAwM0VEMEZGIC8qIERGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAgKi87IH07CiAJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMjQx
NTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OwpA
QCAtMTAwMCw2ICsxMDAyLDggQEAKIAkJMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1Zh
cmlhYmxlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
VmFyaWFibGVFdmVudC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdD
b2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0Nv
ZGVCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNTU2RTE0NzM4
RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RGR1VzZUtp
bmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM0QjE0ODE2RDQyMDBFMDAx
Q0RBNUEgLyogREZHVXNlS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdVc2VLaW5kLmg7IHBhdGggPSBkZmcvREZHVXNlS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZG
IC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMjQxNTQ0
Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yNzA3LDYgKzI3MTEsOCBAQAogCQkJCTBGQzA5N0EwMTQ2QjI4Qzcw
MENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKIAkJCQkwRkJFMEY2RjE2QzFEQjAxMDA4MkM1RTgg
LyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNzAxNkMxREIwMTAwODJD
NUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjM0QjE0NzE2RDQyMDBFMDAx
Q0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8sCisJCQkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuaCAqLywKIAkJCQkwRjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYgLyogREZH
VmFsaWRhdGUuY3BwICovLAogCQkJCTBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxp
ZGF0ZS5oICovLAogCQkJCTBGMkJEQzNGMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYWx1ZVJlY292
ZXJ5T3ZlcnJpZGUuaCAqLywKQEAgLTMyNDcsNiArMzI1Myw3IEBACiAJCQkJODY4OTE2QjAxNTVG
Mjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1
MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVDRDQ1
NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzk1Myw2ICszOTYwLDcgQEAKIAkJCQkw
RkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29t
cGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVDMDAw
RjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjM0QjE0
OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2Zp
bGVyT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM0LDMwICsyMzQsNjEgQEAgQWJzdHJhY3RTdGF0ZTo6Qm9vbGVhblJlc3VsdCBBYnN0
cmFjdFN0YQogICAgIHJldHVybiBVbmtub3duQm9vbGVhblJlc3VsdDsKIH0KIAotYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK2Jvb2wgQWJzdHJhY3RT
dGF0ZTo6c3RhcnRFeGVjdXRpbmcoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobV9ibG9jayk7
CiAgICAgQVNTRVJUKG1faXNWYWxpZCk7CiAgICAgCiAgICAgbV9kaWRDbG9iYmVyID0gZmFsc2U7
CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
ICAgIAorICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgIAogICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQWJzdHJh
Y3RTdGF0ZTo6c3RhcnRFeGVjdXRpbmcodW5zaWduZWQgaW5kZXhJbkJsb2NrKQoreworICAgIHJl
dHVybiBzdGFydEV4ZWN1dGluZyhtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spKTsKK30KKwordm9p
ZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXMoTm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9E
RV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBmaWx0ZXJFZGdlQnlVc2UpOworfQorCit2
b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7
CisgICAgZXhlY3V0ZUVkZ2VzKG1fYmxvY2stPmF0KGluZGV4SW5CbG9jaykpOworfQorCit2b2lk
IEFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51
c2VLaW5kKCkpKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5RWRnZXMoTm9kZSog
bm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCB2ZXJp
ZnlFZGdlKTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZ25l
ZCBpbmRleEluQmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQp
CisgICAgICAgIHZlcmlmeUVkZ2VzKG5vZGUpOworICAgIAogICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAg
IGNhc2UgUGhhbnRvbUFyZ3VtZW50czogewogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dy
YXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJZGVudGl0
eTogewogICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTI2NSwxOSArMjk2LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaWYgKHZhcmlh
YmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpID09IFNwZWNOb25lKSB7CiAgICAgICAgICAgICBt
X2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxz
ZTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fdmFyaWFibGVzLm9wZXJhbmQodmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKLSAg
ICAgICAgICAgICAgICBjYW5FeGl0IHw9IHRydWU7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBmb3JOb2RlKG5vZGUp
ID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoY2FuRXhpdCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yODYsMzUgKzMxNCwxMCBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICBpZiAo
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgfHwg
bV9ncmFwaC5pc0NyZWF0ZWRUaGlzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkpIHsKLSAgICAgICAg
ICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFu
ZChub2RlLT5sb2NhbCgpKS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwot
ICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAg
ICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoaXNDZWxsU3Bl
Y3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
IWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIAogICAgICAgICBtX3Zhcmlh
Ymxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMyMiw3ICszMjUsNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAg
Ly8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCiAgICAg
ICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSku
aXNDbGVhcigpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNjIsMTEgKzM2NCw5IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmIChjb25zdGFudFdhc1NldCkgewogICAgICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNzcsMjAgKzM3Nywx
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICBBU1NFUlQoY2hpbGQuaXNJbnQzMigpKTsKICAgICAgICAgICAgIGlmICh0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKGNoaWxkLmFzVUludDMyKCkpKSkgewogICAgICAgICAgICAgICAgIG1f
Zm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIGlmICghbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIGlm
ICghbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsK
LSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgICAgICAgIAogICAgICAg
ICAgICAgCiAgICAgY2FzZSBEb3VibGVBc0ludDMyOiB7CiAgICAgICAgIEpTVmFsdWUgY2hpbGQg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwpAQCAtNDA0LDcgKzQwMSw2IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQxOSwyMCArNDE1
LDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgICAgIGNvbnN0YW50V2FzU2V0ID0gdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShKU0M6
OnRvSW50MzIoY2hpbGQuYXNEb3VibGUoKSkpKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudFdh
c1NldCkgewogICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFy
eShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQot
ICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUgJiBTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoflNwZWNDZWxsKTsKLSAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CkBAIC00NDQsMTAgKzQyOSw4IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKGNoaWxk
ICYmIGNoaWxkLmlzTnVtYmVyKCkKICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUs
IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIGNoaWxkLmFzTnVtYmVyKCkpKSkgewog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0
aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAgIGVsc2UKQEAgLTQ1NSwxMCArNDM4
LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQ2hlY2tOdW1iZXI6Ci0gICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsK
ICAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsK
QEAgLTQ2NiwzMyArNDQ1LDI3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJp
Z2h0LmlzTnVtYmVyKCkKICAgICAgICAgICAgICYmIHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFs
dWUobGVmdC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGgu
YWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRl
SW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFy
eVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5jYXRl
SW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgogICAgICAg
ICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSkKICAgICAgICAgICAgICAgICAmJiBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IFZhbHVlQWRkKSB7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVlQWRk
KTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyB8IFNwZWNJbnQz
MiB8IFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCBoYW5kbGUg
dGhpcyB5ZXQuIDotKAotICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBA
IC01MDIsMTcgKzQ3NSwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdo
dC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVl
KGxlZnQuYXNOdW1iZXIoKSAtIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLmFk
ZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2Vy
KG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlV
c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUlu
dGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVz
ZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTUyMSwxNyArNDk4
LDIxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKICAgICAgICAgICAgICYmIHRyeVNldENvbnN0
YW50KG5vZGUsIEpTVmFsdWUoLWNoaWxkLmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLm5l
Z2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
ZUludDMyVW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmICghbm9kZUNhblRydW5j
YXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVt
YmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01NDEsMjQg
KzUyMiwyNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJl
cigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNO
dW1iZXIoKSAqIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0
YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5
KAotICAgICAgICAgICAgICAgIG5vZGUsCi0gICAgICAgICAgICAgICAgIW5vZGVDYW5UcnVuY2F0
ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKLSAgICAgICAgICAgICAgICB8fCAhbm9k
ZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAg
IHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAg
aWYgKCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCisgICAg
ICAgICAgICAgICAgfHwgIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2Rl
RmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGlmIChp
c1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpCisg
ICAgICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RG91YmxlUmVhbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7
Ci0gICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpCi0gICAgICAgICAgICB8fCBpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZVJlYWwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEFyaXRoRGl2OgpAQCAtNTkxLDE4ICs1NzQsMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNv
bnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRl
SW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVl
KTsgLy8gZm9yY2luZyBjYW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2
ZSBzaWRlLgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAg
ICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMy
KTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgICAgIApAQCAtNjExLDE3ICs1OTcsMjAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIo
KQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShmYWJzKGNoaWxk
LmFzTnVtYmVyKCkpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwot
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlLCB0cnVlKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7Cisg
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgICAgIApAQCAtNjMwLDEwICs2MTksOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCiAgICAg
ICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKHNxcnQoY2hpbGQuYXNOdW1i
ZXIoKSkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjUyLDIx
ICs2MzksMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICB9CiAgICAgICAgIGlmIChkaWRTZXRDb25zdGFudCkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oY2hp
bGQtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9k
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVy
KCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBjYXNl
IE51bWJlclVzZToKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoKFNwZWNDZWxs
ICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFy
eShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigp
KQotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC03NjQsMTQgKzc1
MSwxNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgaWYg
KGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAg
ICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKQotICAg
ICAgICAgICAgICAgIGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmluZyk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihT
cGVjQ2VsbCk7CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsK
KyAgICAgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtODIzLDY1ICs4MTMsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAKICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0
KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKICAgICAgICAg
Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcUNvbnN0YW50KSB7Ci0gICAgICAg
ICAgICAvLyBXZSBjYW4gZXhpdCBpZiB3ZSBoYXZlbid0IGZpcmVkIHRoZSBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmQgd2F0Y2hwb2ludCB5ZXQuCi0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBsZWZ0ID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwotICAgICAgICBOb2RlKiByaWdodCA9IG5vZGUtPmNoaWxkMigpLm5vZGUo
KTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgZmlsdGVyOwotICAgICAgICBTcGVjdWxhdGVkVHlw
ZUNoZWNrZXIgY2hlY2tlcjsKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobGVmdCwgcmlnaHQpKSB7Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjSW50MzI7Ci0gICAg
ICAgICAgICBjaGVja2VyID0gaXNJbnQzMlNwZWN1bGF0aW9uOwotICAgICAgICB9IGVsc2UgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0LCByaWdodCkpIHsKLSAgICAgICAgICAg
IGZpbHRlciA9IFNwZWNOdW1iZXI7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNOdW1iZXJTcGVj
dWxhdGlvbjsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcSkgewot
ICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IHJpZ2h0LT5z
aG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSAKLSAgICAg
ICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiByaWdodC0+c2hvdWxk
U3BlY3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3QpOwot
ICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsZWZ0LT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiByaWdodC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JP
dGhlcigpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGVmdC0+
c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVP
YmplY3QoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCB8IFNwZWNPdGhlcik7
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotIAotICAgICAgICAgICAgZmlsdGVy
ID0gU3BlY1RvcDsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FueVNwZWN1bGF0aW9uOwotICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjVG9wOwotICAgICAgICAg
ICAgY2hlY2tlciA9IGlzQW55U3BlY3VsYXRpb247Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgfQotICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgIWNoZWNrZXIoZm9yTm9kZShsZWZ0KS5tX3R5cGUp
Ci0gICAgICAgICAgICB8fCAhY2hlY2tlcihmb3JOb2RlKHJpZ2h0KS5tX3R5cGUpKTsKLSAgICAg
ICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoZmlsdGVyKTsKLSAgICAgICAgZm9yTm9kZShyaWdodCku
ZmlsdGVyKGZpbHRlcik7CisgICAgICAgIC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2ZS4g
QnV0IHRoZSBvbmx5IHRoaW5nIHRoaXMgcHJldmVudHMgaXMgc3RvcmUgZWxpbWluYXRpb24sCisg
ICAgICAgIC8vIGFuZCBob3cgbGlrZWx5IGlzIGl0LCByZWFsbHksIHRoYXQgeW91J2xsIGhhdmUg
cmVkdW5kYW50IHN0b3JlcyBhY3Jvc3MgYSBjb21wYXJpc29uCisgICAgICAgIC8vIG9wZXJhdGlv
bj8gQ29tcGFyaXNvbiBvcGVyYXRpb25zIGFyZSB0eXBpY2FsbHkgYXQgdGhlIGVuZCBvZiBiYXNp
YyBibG9ja3MsIHNvCisgICAgICAgIC8vIHVubGVzcyB3ZSBoYXZlIGdsb2JhbCBzdG9yZSBlbGlt
aW5hdGlvbiAoc3VwZXIgdW5saWtlbHkgZ2l2ZW4gaG93IHVucHJvZml0YWJsZSB0aGF0CisgICAg
ICAgIC8vIG9wdGltaXphdGlvbiBpcyB0byBiZWdpbiB3aXRoKSwgeW91IGFyZW4ndCBnb2luZyB0
byBiZSB3YW50aW5nIHRvIHN0b3JlIGVsaW1pbmF0ZQorICAgICAgICAvLyBhY3Jvc3MgYW4gZXF1
YWxpdHkgb3AuCisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgICAgIApAQCAtODk0LDQ3ICs4MzcsMjAgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5
U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGxlZnQuYXNOdW1iZXIoKSA9PSByaWdodC5hc051
bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7Ci0gICAgICAgIGlm
IChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KSB7Ci0gICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnROb2RlLCByaWdodE5v
ZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJl
ckJpbmFyeShub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHROb2RlLT5zaG91bGRT
cGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVmdE5vZGUtPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIHJpZ2h0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0
KCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICBmb3JOb2Rl
KHJpZ2h0Tm9kZSkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2ZS4KICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CiAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC05NTQsMTUgKzg3MCwxMiBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9y
aWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VU
b3AoKTsKQEAgLTk3MCw3ICs4ODMsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKQEAgLTk4Miw0OCArODk0LDM4IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBB
cnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAg
ICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5
OjpVaW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5
OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6Rmxv
YXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMDM2LDkgKzkzOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0
QnlWYWxBbGlhczogewogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBF
ZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAgICAgIEVkZ2Ug
Y2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgRWRnZSBjaGls
ZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICBzd2l0Y2ggKG5vZGUt
PmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6
Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CkBAIC0xMDQ3LDEwNCAr
OTQ2LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRP
ZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKICAgICAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9y
YWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKICAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQz
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmls
dGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxs
KTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAg
ICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMiku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQz
KS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNw
ZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVy
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIp
OwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBDUkFT
SCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0x
MTUyLDE2ICs5NzAsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
LSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY051bWJlcik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE3NCwxNiArOTgyLDEwIEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAg
IGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoCi0gICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEp1bXA6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
QnJhbmNoOiB7CkBAIC0xMTkxLDM2ICs5OTMsMjMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBCb29sZWFuUmVzdWx0IHJlc3VsdCA9IGJvb2xlYW5S
ZXN1bHQobm9kZSwgZm9yTm9kZShjaGlsZCkpOwogICAgICAgICBpZiAocmVzdWx0ID09IERlZmlu
aXRlbHlUcnVlKSB7CiAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VUcnVlOwot
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBpZiAocmVzdWx0ID09IERlZmluaXRlbHlGYWxzZSkgewogICAg
ICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlRmFsc2U7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgYWJvdmUgaGFuZGxlcyB0aGUgdHJpdmlhbCBjYXNlcyBvZiBzcGFy
c2UgY29uZGl0aW9uYWwKICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24sIGJ1dCB3ZSBj
YW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291cmNlIHZh
cmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8gdGhlIGJyYW5j
aC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxk
LT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIoU3BlY09i
amVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAg
ICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBtX2JyYW5jaERpcmVj
dGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAg
ICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBU
aHJvdzoKQEAgLTEyMzAsMjIgKzEwMTksMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgVG9Q
cmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKGNoaWxkKS52
YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENvbnN0LmlzTnVt
YmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsKICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEFic3RyYWN0VmFs
dWUmIHNvdXJjZSA9IGZvck5vZGUoY2hpbGQpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3Vy
Y2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVz
dGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAKICAgICAgICAgLy8gTkIuIFRoZSBt
b3JlIGNhbm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVlbjoKQEAgLTEy
NzUsMzkgKzEwNjAsMTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGRl
c3RpbmF0aW9uLnNldCh0eXBlKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgU3RyQ2F0OgotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdB
cnJheToKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgc3dpdGNoIChu
b2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgQVNTRVJUKCFu
b2RlLT5udW1DaGlsZHJlbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFM
TF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFu
ZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5k
SW5kZXgpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5b
bm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5k
ZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAgICAgICAgICAg
ICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBv
cGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVE
dXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIG1faGF2ZVN0
cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTEzMjAsMTkgKzEwODEsMTYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogCiAgICAgY2FzZSBOZXdB
cnJheVdpdGhTaXplOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0FycmF5KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCht
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+cmVnRXhwU3RydWN0dXJl
KCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIE5vZGUqIGNoaWxk
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2Ug
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGlu
YXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgCkBAIC0xMzQxLDM4ICsxMDk5LDMx
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IC8vIG9iamVjdCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRoaW5rIHRoaXMg
Y2FzZSB3aWxsCiAgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWluLCB5b3UgbmV2
ZXIga25vdy4KICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0g
dHJ1ZTsgLy8gVGVsbCB0aGUgY29uc3RhbnQgZm9sZGVyIHRvIHR1cm4gdGhpcyBpbnRvIElkZW50
aXR5LgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1
bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBzb3VyY2UuZmlsdGVy
KFNwZWNPdGhlcik7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
CisgICAgICAgIGNhc2UgT3RoZXJVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXQoU3Bl
Y09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkgewot
ICAgICAgICAgICAgc291cmNlLmZpbHRlcihTcGVjT2JqZWN0KTsKKyAgICAgICAgY2FzZSBPYmpl
Y3RVc2U6CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9
IHNvdXJjZTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmplY3RPdGhlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAgICAgICBkZXN0
aW5hdGlvbi5tZXJnZShTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0
aW9uID0gZm9yTm9kZShub2RlKTsKLSAgICAgICAgCi0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
IWlzQ2VsbFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICBzb3VyY2UuZmlsdGVyKFNwZWNGdW5jdGlvbik7Ci0gICAgICAgIGRlc3RpbmF0aW9uLnNldChT
cGVjRmluYWxPYmplY3QpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRmluYWxPYmpl
Y3QpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTM4MSwzNiArMTEzMiwz
MSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJy
ZWFrOwogCiAgICAgY2FzZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAg
ICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9o
YXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IENyZWF0ZUFyZ3VtZW50czoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFRlYXJPZmZB
Y3RpdmF0aW9uOgogICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8vIERvZXMgbm90aGluZyB0aGF0IGlzIHVzZXItdmlz
aWJsZS4KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRl
ZDoKICAgICAgICAgaWYgKGlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAgICAgICAgICBtX3Zh
cmlhYmxlcy5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVu
dHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAgICAgICAgIG1f
Zm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IApAQCAtMTQzMCw3ICsxMTc2LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
c0xlbmd0aFNhZmU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAv
LyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVu
dHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0
aCBwcm9wZXJ0eS4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4
SW5CbG9jayk7CkBAIC0xNDQ0LDcgKzExODksNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUg
ZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQogICAgICAg
ICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJlaW5nIGZ1
cnRoZXIgb3B0aW1pemVkIGJ5IHRoZQogICAgICAgICAvLyBBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKQEAgLTE0NTMsOCArMTE5Nyw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3Ry
dWN0dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAgICAgICAvLyBh
IGdldHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAgIC8vIEJ1dCB3
ZSBkbyBzcGVjdWxhdGUgdGhhdCB0aGUgaW5kZXggaXMgYW4gaW50ZWdlci4KLSAgICAgICAgZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIC8vIEFuZCB0
aGUgcmVzdWx0IGlzIHVua25vd24uCiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwog
ICAgICAgICBicmVhazsKQEAgLTE0NjIsMjkgKzEyMDQsMjQgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBO
ZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Ci0gICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5mdW5jdGlvblN0
cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVl
OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
U2V0Q2FsbGVlOgogICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRTY29w
ZTogLy8gRklYTUU6IFdlIGNvdWxkIGdldCByaWQgb2YgdGhlc2UgaWYgd2Uga25vdyB0aGF0IHRo
ZSBKU0Z1bmN0aW9uIGlzIGEgY29uc3RhbnQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDYyMDIKICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgY2FzZSBTa2lwVG9w
U2NvcGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNr
aXBTY29wZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgSlNW
YWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlm
IChjaGlsZCAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxKU1Njb3BlKj4o
Y2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7CkBAIC0xNDk1LDE4ICsxMjMyLDE0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgot
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigp
OyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUtPmNvZGVPcmlnaW4pOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTUxOCw4ICsxMjUxLDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVk
aWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOwotCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAg
ICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsCkBAIC0x
NTU1LDcgKzEyODYsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgIC8vIG1vcmUgdGhvcm91Z2hseS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwNjIwMAogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZWxpbWluYXRl
IHRoZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVlIHRoYXQgZmxvd3MgaW50
byB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA2MjAxCi0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTE1NjQsNiArMTI5NCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewogICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBv
ZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlLm1f
dHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5
IGVuc3VyZWQgdGhpcy4KICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0
ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAgICAgIC8vIHRo
ZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBw
aGFzZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3Rl
YWQuCkBAIC0xNTcxLDkgKzEzMDIsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlz
U3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhdmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3Bl
Y3VsYXRpb24odmFsdWUubV90eXBlKSk7CisgICAgICAgIGlmICghdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CiAgICAgICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTE1OTEsNyArMTMyMSw2IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gaW5maW5pdHkg
b2Ygc3RydWN0dXJlcy4KICAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSk7CiAgICAg
ICAgIAotICAgICAgICBBU1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9u
KHZhbHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4g
bXVzdC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24gdG8gYmUgYmFk
LgogICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKQEAg
LTE2MDAsNyArMTMyOSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRv
bVB1dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
IGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXND
bGVhcigpKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG5vZGUtPnN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKQEAgLTE2MTAsMTQgKzEzMzgsMTEgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgR2V0QnV0dGVy
Zmx5OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFpc0NlbGxTcGVj
dWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2Rl
KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVh
azsKICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkg
ewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxvd2Vk
IGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRoZXJl
IGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIgaGVyZS4KQEAgLTE2MzAsNyAr
MTM1NSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CkBAIC0xNjczLDE1ICsx
Mzk3LDExIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBj
YXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hl
Y2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
bm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpDb252ZXJ0CiAgICAgICAg
ICAgICB8fCBub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OlJhZ2VDb252
ZXJ0KTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+YXJyYXlNb2RlKCku
YXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVz
ID0gdHJ1ZTsKQEAgLTE2OTQsMzUgKzE0MTQsMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRy
dWU7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmIChub2RlLT5j
aGlsZDIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAg
ICB2YWx1ZS5maWx0ZXIoc2V0KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6
IHsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7IAogICAgIH0KLSAgICBjYXNlIEdldEJ5T2Zmc2V0
OgotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpIHsKLSAg
ICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgfQorICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsK
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgYm9vbCBjYW5F
eGl0ID0gZmFsc2U7Ci0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1
bHQoKSkgewotICAgICAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FuRXhpdCB8PSAh
aXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAg
ICAgCkBAIC0xNzMxLDcgKzE0MzcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpKSB7CiAgICAg
ICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1
ZSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTc2NiwxMiArMTQ3MSwxMCBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmln
aW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAt
MTc4MSwzNCArMTQ4NCwyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICBjYXNlIFB1dEds
b2JhbFZhckNoZWNrOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUg
dGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7CiAgICAgICAgIC8vIEFnYWluLCBzYWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRl
IHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJbnN0YW5jZU9mCi0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9lcyBhbiB1bmNv
bmRpdGlvbmFsIGNlbGwKLSAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKLSAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6CiAg
ICAgY2FzZSBQaGFudG9tTG9jYWw6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwot
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2ludDoKLSAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBDYWxsOgpAQCAtMTgzNiw3ICsxNTI4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgY2FzZSBO
b3A6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToK
QEAgLTE4NDcsNiArMTUzOCwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgcmV0dXJuIG1faXNWYWxpZDsKIH0KIAorYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgcmV0dXJuIGV4ZWN1
dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKSk7Cit9CisK
K2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7Cisg
ICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgaWYgKCFzdGFy
dEV4ZWN1dGluZyhub2RlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgZXhlY3V0
ZUVkZ2VzKG5vZGUpOworICAgIHJldHVybiBleGVjdXRlRWZmZWN0cyhpbmRleEluQmxvY2ssIG5v
ZGUpOworfQorCiBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyV29ybGQoY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewogICAgIGNs
b2JiZXJDYXB0dXJlZFZhcnMoY29kZU9yaWdpbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1OCw3ICsxNTgsNTIgQEAgcHVibGljOgogICAgIC8vIGlmIGV4ZWN1dGlvbiBzaG91bGQgY29u
dGludWUgcGFzdCB0aGlzIG5vZGUuIE5vdGFibHksIGl0IHdpbGwgcmV0dXJuIHRydWUKICAgICAv
LyBmb3IgYmxvY2sgdGVybWluYWxzLCBzbyBsb25nIGFzIHRob3NlIHRlcm1pbmFscyBhcmUgbm90
IFJldHVybiBvciB2YXJpYW50cwogICAgIC8vIG9mIFRocm93LgotICAgIGJvb2wgZXhlY3V0ZSh1
bnNpZ25lZCk7CisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXF1aXZh
bGVudCB0byBkb2luZzoKKyAgICAvLworICAgIC8vIGlmIChzdGF0ZS5zdGFydEV4ZWN1dGluZyhp
bmRleCkpIHsKKyAgICAvLyAgICAgc3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsKKyAgICAvLyAg
ICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0ZUVmZmVjdHMoaW5kZXgpOworICAgIC8vIH0gZWxzZQor
ICAgIC8vICAgICByZXN1bHQgPSB0cnVlOworICAgIGJvb2wgZXhlY3V0ZSh1bnNpZ25lZCBpbmRl
eEluQmxvY2spOworICAgIAorICAgIC8vIEluZGljYXRlIHRoZSBzdGFydCBvZiBleGVjdXRpb24g
b2YgdGhlIG5vZGUuIEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUsCisgICAgLy8gdGhh
dCBpcyBwcm9ncmVzc2l2ZWx5IGJ1aWx0IHVwIGJ5IGV4ZWN1dGVFZGdlcygpIGFuZCBleGVjdXRl
RWZmZWN0cygpLiBJbgorICAgIC8vIHBhcnRpY3VsYXIsIHRoaXMgcmVzZXRzIGNhbkV4aXQoKSwg
c28gaWYgeW91IHdhbnQgdG8gImtub3ciIGJldHdlZW4gY2FsbHMgb2YKKyAgICAvLyBzdGFydEV4
ZWN1dGluZygpIGFuZCBleGVjdXRlRWRnZXMoKS9FZmZlY3RzKCkgd2hldGhlciB0aGUgbGFzdCBy
dW4gb2YgdGhlCisgICAgLy8gYW5hbHlzaXMgY29uY2x1ZGVkIHRoYXQgdGhlIG5vZGUgY2FuIGV4
aXQsIHlvdSBzaG91bGQgcHJvYmFibHkgc2V0IHRoYXQKKyAgICAvLyBpbmZvcm1hdGlvbiBhc2lk
ZSBwcmlvciB0byBjYWxsaW5nIHN0YXJ0RXhlY3V0aW5nKCkuCisgICAgYm9vbCBzdGFydEV4ZWN1
dGluZyhOb2RlKik7CisgICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBpbmRleEluQmxv
Y2spOworICAgIAorICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgZWRnZXMgb2YgdGhlIGdp
dmVuIG5vZGUuIFRoaXMgcnVucyBmaWx0ZXJFZGdlQnlVc2UoKQorICAgIC8vIG9uIGFsbCBlZGdl
cyBvZiB0aGUgbm9kZS4gWW91IGNhbiBza2lwIHRoaXMgc3RlcCwgaWYgeW91IGhhdmUgYWxyZWFk
eSB1c2VkCisgICAgLy8gZmlsdGVyRWRnZUJ5VXNlKCkgKG9yIHNvbWUgZXF1aXZhbGVudCkgb24g
ZWFjaCBlZGdlLgorICAgIHZvaWQgZXhlY3V0ZUVkZ2VzKE5vZGUqKTsKKyAgICB2b2lkIGV4ZWN1
dGVFZGdlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIAorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBmaWx0ZXJFZGdlQnlVc2UoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQorICAgIHsKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICBjYXNlIEtub3duTnVtYmVyVXNlOgorICAg
ICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgIEFTU0VSVCghKGZvck5vZGUoZWRn
ZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAKKyAgICAgICAgZmlsdGVyQnlU
eXBlKG5vZGUsIGVkZ2Uubm9kZSgpLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSk7Cisg
ICAgfQorICAgIAorICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgZWZmZWN0cyBvZiB0aGUg
Z2l2ZW4gbm9kZS4gVGhpcyBjaGFuZ2VzIHRoZSBhYnN0cmFjdAorICAgIC8vIHN0YXRlIGFzc3Vt
aW5nIHRoYXQgZWRnZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZmlsdGVyZWQuCisgICAgYm9vbCBleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIGJvb2wgZXhlY3V0ZUVmZmVj
dHModW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKik7CiAgICAgCiAgICAgLy8gRGlkIHRoZSBs
YXN0IGV4ZWN1dGVkIG5vZGUgY2xvYmJlciB0aGUgd29ybGQ/CiAgICAgYm9vbCBkaWRDbG9iYmVy
KCkgY29uc3QgeyByZXR1cm4gbV9kaWRDbG9iYmVyOyB9CkBAIC0xOTEsNTAgKzIzNiw2IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3Mo
QWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZSog
ZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKICAgICAKLSAgICB2b2lkIHNwZWN1
bGF0ZUludDMyVW5hcnkoTm9kZSogbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBmYWxzZSkKLSAg
ICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmb3JjZUNhbkV4aXQgfHwgIWlzSW50
MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwotICAgICAgICBjaGlsZFZhbHVlLmZp
bHRlcihTcGVjSW50MzIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVu
YXJ5KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlz
TnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKLSAgICAgICAgY2hpbGRWYWx1
ZS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQm9v
bGVhblVuYXJ5KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGls
ZFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4
aXQoIWlzQm9vbGVhblNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7Ci0gICAgICAgIGNo
aWxkVmFsdWUuZmlsdGVyKFNwZWNCb29sZWFuKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVj
dWxhdGVJbnQzMkJpbmFyeShOb2RlKiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQot
ICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAgICAg
IGZvcmNlQ2FuRXhpdAotICAgICAgICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZh
bHVlMS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFs
dWUyLm1fdHlwZSkpOwotICAgICAgICBjaGlsZFZhbHVlMS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgY2hpbGRWYWx1ZTIuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBYnN0
cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpOwot
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgIWlzTnVtYmVyU3BlY3VsYXRp
b24oY2hpbGRWYWx1ZTEubV90eXBlKQotICAgICAgICAgICAgfHwgIWlzTnVtYmVyU3BlY3VsYXRp
b24oY2hpbGRWYWx1ZTIubV90eXBlKSk7Ci0gICAgICAgIGNoaWxkVmFsdWUxLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICAgICAgY2hpbGRWYWx1ZTIuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgIH0K
LSAgICAKICAgICBlbnVtIEJvb2xlYW5SZXN1bHQgewogICAgICAgICBVbmtub3duQm9vbGVhblJl
c3VsdCwKICAgICAgICAgRGVmaW5pdGVseUZhbHNlLApAQCAtMjU5LDYgKzI2MCwxNyBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2RlLCBOb2RlKiBjaGlsZCwgU3BlY3VsYXRlZFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShj
aGlsZCk7CisgICAgICAgIGlmICh2YWx1ZS5tX3R5cGUgJiB+dHlwZSkKKyAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCB2ZXJpZnlFZGdlKE5vZGUqLCBFZGdlKTsKKyAgICB2b2lkIHZlcmlm
eUVkZ2VzKE5vZGUqKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEdy
YXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNiArMjM0
LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3Vs
ZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90CisgICAgICAg
IC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZpYyB2YWx1ZS4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2
MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOwog
ICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7
CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24g
MTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFkamFjZW5jeUxp
c3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7CiAgICAgICAg
IGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2Rl
ZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU3LDE5ICs1NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIE5vZGUqIGNoaWxkMSwg
Tm9kZSogY2hpbGQyLCBOb2RlKiBjaGlsZDMpCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAg
ICA6IG1fa2luZChGaXhlZCkKLSNlbmRpZgorICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kLCBF
ZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChraW5kLCBraW5kID09IEZpeGVkKTsKICAgICAgICAgaW5pdGlhbGl6ZShjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICB9CiAgICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5k
IGtpbmQsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQotI2lmICFB
U1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBtX2tpbmQoVmFyaWFibGUpCi0jZW5kaWYKICAgICB7
CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAg
IHNldEZpcnN0Q2hpbGQoZmlyc3RDaGlsZCk7CkBAIC03OSwyMSArNzAsMTggQEAgcHVibGljOgog
ICAgIGNvbnN0IEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQoaSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKICAgICAg
ICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfSAgICAKICAgICAKICAgICBFZGdlJiBjaGlsZCh1
bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsKLSAgICAgICAgQVNT
RVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzW2ldOwogICAgIH0K
ICAgICAKICAgICB2b2lkIHNldENoaWxkKHVuc2lnbmVkIGksIEVkZ2Ugbm9kZVVzZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4
ZWQpOwogICAgICAgICBtX3dvcmRzW2ldID0gbm9kZVVzZTsKICAgICB9CiAgICAgCkBAIC0xMjUs
OSArMTEzLDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIG1fa2luZCA9IEZpeGVkOwotI2VuZGlmCiAgICAgICAg
IGluaXRpYWxpemUoKTsKICAgICB9CiAgICAgCkBAIC0xNDIsMzQgKzEyNywyNCBAQCBwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCBmaXJzdENoaWxkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VS
VChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1swXS5tX2VuY29k
ZWRXb3JkOwogICAgIH0KICAgICB2b2lkIHNldEZpcnN0Q2hpbGQodW5zaWduZWQgZmlyc3RDaGls
ZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBt
X3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBmaXJzdENoaWxkOwogICAgIH0KICAgICAKICAgICB1
bnNpZ25lZCBudW1DaGlsZHJlbigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQobV9raW5k
ID09IFZhcmlhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZDsK
ICAgICB9CiAgICAgdm9pZCBzZXROdW1DaGlsZHJlbih1bnNpZ25lZCBudW1DaGlsZHJlbikKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICBtX3dvcmRz
WzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAgICAgCi0jaWYgIUFTU0VS
VF9ESVNBQkxFRAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotI2Vu
ZGlmCiBwcml2YXRlOgogICAgIEVkZ2UgbV93b3Jkc1tTaXplXTsKLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgS2luZCBtX2tpbmQ7Ci0jZW5kaWYKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2
aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogLy8gICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJlZUFsbCgpIGlu
c3RlYWQuCiAvLyAtIFlvdSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91IGFsbG9jYXRl
ZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCkuCiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+CisvLyBm
b3JjZWRDZWxsU2l6ZTogc2V0IHRoaXMgdG8gMCBpZiB5b3UncmUgaGFwcHkgd2l0aCB0aGUgZGVm
YXVsdCBhbGlnbm1lbnQsIG9yIHNldCBpdAorLy8gdG8gYSBub24temVybyB2YWx1ZSBpZiB5b3Ug
d2FudCB0byBmb3JjaWJseSBhbGlnbiB0aGUgYWxsb2NhdGlvbnMgdG8gYSBjZXJ0YWluCisvLyB2
YWx1ZS4gV2hlbiB5b3UgZG8gdGhpcywgQWxsb2NhdG9yIHdpbGwgQVNTRVJUIHRoYXQgZm9yY2Vk
Q2VsbEFsaWdubWVudCA+PSBzaXplb2YoVCkuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2ln
bmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CiBjbGFzcyBBbGxvY2F0b3IgewogcHVibGljOgogICAg
IEFsbG9jYXRvcigpOwpAQCAtNjMsMTMgKzY3LDI0IEBAIHByaXZhdGU6CiAgICAgdm9pZCogYnVt
cEFsbG9jYXRlKCk7CiAgICAgdm9pZCogZnJlZUxpc3RBbGxvY2F0ZSgpOwogICAgIHZvaWQqIGFs
bG9jYXRlU2xvdygpOwotCisgICAgCisgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6ZSgpCisgICAg
eworICAgICAgICBpZiAoIWZvcmNlZENlbGxBbGlnbm1lbnQpCisgICAgICAgICAgICByZXR1cm4g
c2l6ZW9mKFQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGZvcmNlZENlbGxBbGlnbm1lbnQg
Pj0gc2l6ZW9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGZvcmNlZENlbGxBbGlnbm1lbnQ7CisgICAg
fQorICAgIAogICAgIHN0cnVjdCBSZWdpb24gewogICAgICAgICBzdGF0aWMgc2l6ZV90IHNpemUo
KSB7IHJldHVybiA2NCAqIEtCOyB9Ci0gICAgICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgp
IHsgcmV0dXJuIHN0ZDo6bWF4KHNpemVvZihSZWdpb24pLCBzaXplb2YoVCkpOyB9Ci0gICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0dXJuIChzaXpl
KCkgLSBoZWFkZXJTaXplKCkpIC8gc2l6ZW9mKFQpOyB9Ci0gICAgICAgIFQqIGRhdGEoKSB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8VCo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBoZWFkZXJT
aXplKCkpOyB9Ci0gICAgICAgIGJvb2wgaXNJblRoaXNSZWdpb24oY29uc3QgVCogcG9pbnRlcikg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvaW50ZXIgLSBkYXRhKCkpIDwgbnVtYmVy
T2ZUaGluZ3NQZXJSZWdpb24oKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhlYWRlclNpemUo
KSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgY2VsbFNpemUoKSk7IH0KKyAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNp
emUoKSAtIGhlYWRlclNpemUoKSkgLyBjZWxsU2l6ZSgpOyB9CisgICAgICAgIHN0YXRpYyBzaXpl
X3QgcGF5bG9hZFNpemUoKSB7IHJldHVybiBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpICogY2Vs
bFNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkQmVnaW4oKSB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpOyB9CisgICAgICAgIGNoYXIqIHBheWxv
YWRFbmQoKSB7IHJldHVybiBwYXlsb2FkQmVnaW4oKSArIHBheWxvYWRTaXplKCk7IH0KKyAgICAg
ICAgYm9vbCBpc0luVGhpc1JlZ2lvbihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJpdHdpc2VfY2FzdDxjaGFyKj4ocG9pbnRlcikgLSBwYXlsb2FkQmVnaW4o
KSkgPCBwYXlsb2FkU2l6ZSgpOyB9CiAgICAgICAgIHN0YXRpYyBSZWdpb24qIHJlZ2lvbkZvcihj
b25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UmVnaW9uKj4oYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiB+KHNpemUoKSAtIDEpKTsgfQogICAgICAgICAKICAg
ICAgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIG1fYWxsb2NhdGlvbjsKQEAgLTgyLDI2ICs5Nywy
NiBAQCBwcml2YXRlOgogICAgIAogICAgIFJlZ2lvbiogbV9yZWdpb25IZWFkOwogICAgIHZvaWQq
KiBtX2ZyZWVMaXN0SGVhZDsKLSAgICBUKiBtX2J1bXBFbmQ7Ci0gICAgdW5zaWduZWQgbV9idW1w
UmVtYWluaW5nOworICAgIGNoYXIqIG1fYnVtcEVuZDsKKyAgICBzaXplX3QgbV9idW1wUmVtYWlu
aW5nOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0b3I8VD46OkFs
bG9jYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25t
ZW50PgoraW5saW5lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6QWxsb2NhdG9y
KCkKICAgICA6IG1fcmVnaW9uSGVhZCgwKQogICAgICwgbV9mcmVlTGlzdEhlYWQoMCkKICAgICAs
IG1fYnVtcFJlbWFpbmluZygwKQogewogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5l
IEFsbG9jYXRvcjxUPjo6fkFsbG9jYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25l
ZCBmb3JjZWRDZWxsQWxpZ25tZW50PgoraW5saW5lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxp
Z25tZW50Pjo6fkFsbG9jYXRvcigpCiB7CiAgICAgcmVzZXQoKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjphbGxvY2F0ZSgpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgorQUxXQVlT
X0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmFsbG9jYXRl
KCkKIHsKICAgICB2b2lkKiByZXN1bHQgPSBidW1wQWxsb2NhdGUoKTsKICAgICBpZiAoTElLRUxZ
KCEhcmVzdWx0KSkKQEAgLTEwOSw4ICsxMjQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9j
YXRvcjxUPjo6YWxsb2NhCiAgICAgcmV0dXJuIGZyZWVMaXN0QWxsb2NhdGUoKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlKFQqIG9iamVjdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFs
bG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZShUKiBvYmplY3QpCiB7CiAgICAg
b2JqZWN0LT5+VCgpOwogICAgIApAQCAtMTE5LDggKzEzNCw4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+
OjpmcmVlKFQqIG9iamVjdCkKICAgICBtX2ZyZWVMaXN0SGVhZCA9IGNlbGw7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFsbCgpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8
VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWVBbGwoKQogewogICAgIGlmICghbV9yZWdpb25I
ZWFkKSB7CiAgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTE0Miw4ICsxNTcs
OCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFsbCgpCiAgICAgc3RhcnRCdW1waW5nSW4obV9y
ZWdpb25IZWFkKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+
OjpyZXNldCgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25t
ZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OnJlc2V0KCkKIHsK
ICAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsKICAgICAKQEAgLTE1Miwz
OCArMTY3LDM4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpyZXNldCgpCiAgICAgbV9idW1wUmVtYWlu
aW5nID0gMDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuc2lnbmVkIEFsbG9jYXRvcjxU
Pjo6aW5kZXhPZihjb25zdCBUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25l
ZCBmb3JjZWRDZWxsQWxpZ25tZW50PgordW5zaWduZWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxB
bGlnbm1lbnQ+OjppbmRleE9mKGNvbnN0IFQqIG9iamVjdCkKIHsKICAgICB1bnNpZ25lZCBiYXNl
SW5kZXggPSAwOwogICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhlYWQ7IHJlZ2lv
bjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKICAgICAgICAgaWYgKHJlZ2lvbi0+aXNJblRo
aXNSZWdpb24ob2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXggKyAob2JqZWN0
IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIGJhc2VJbmRleCArIChiaXR3
aXNlX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSByZWdpb24tPnBheWxvYWRCZWdpbigpKSAvIGNlbGxT
aXplKCk7CiAgICAgICAgIGJhc2VJbmRleCArPSBSZWdpb246Om51bWJlck9mVGhpbmdzUGVyUmVn
aW9uKCk7CiAgICAgfQogICAgIENSQVNIKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1BbGxvY2F0b3I8VD4qIEFsbG9jYXRvcjxUPjo6YWxsb2NhdG9yT2YoY29u
c3QgVCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFs
aWdubWVudD4KK0FsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50PiogQWxsb2NhdG9yPFQs
IGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0b3JPZihjb25zdCBUKiBvYmplY3QpCiB7CiAg
ICAgcmV0dXJuIFJlZ2lvbjo6cmVnaW9uRm9yKG9iamVjdCktPm1fYWxsb2NhdG9yOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmJ1
bXBBbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxp
Z25tZW50PgorQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdu
bWVudD46OmJ1bXBBbGxvY2F0ZSgpCiB7Ci0gICAgaWYgKHVuc2lnbmVkIHJlbWFpbmluZyA9IG1f
YnVtcFJlbWFpbmluZykgewotICAgICAgICByZW1haW5pbmctLTsKKyAgICBpZiAoc2l6ZV90IHJl
bWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykgeworICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNp
emUoKTsKICAgICAgICAgbV9idW1wUmVtYWluaW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXR1
cm4gbV9idW1wRW5kIC0gKHJlbWFpbmluZyArIDEpOworICAgICAgICByZXR1cm4gbV9idW1wRW5k
IC0gKHJlbWFpbmluZyArIGNlbGxTaXplKCkpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQqIEFsbG9jYXRvcjxUPjo6ZnJlZUxpc3RBbGxvY2F0
ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgor
dm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlTGlzdEFsbG9jYXRl
KCkKIHsKICAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CiAgICAgaWYgKFVOTElL
RUxZKCFyZXN1bHQpKQpAQCAtMTkyLDggKzIwNyw4IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6ZnJl
ZUxpc3RBbGxvY2F0ZSgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkKiBBbGxvY2F0b3I8VCwg
Zm9yY2VkQ2VsbEFsaWdubWVudD46OmFsbG9jYXRlU2xvdygpCiB7CiAgICAgQVNTRVJUKCFtX2Zy
ZWVMaXN0SGVhZCk7CiAgICAgQVNTRVJUKCFtX2J1bXBSZW1haW5pbmcpOwpAQCAtMjE2LDggKzIz
MSw4IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWVS
ZWdpb25zU3RhcnRpbmdBdCh0eXBlbmFtZSBBbGxvY2F0b3I8VD46OlJlZ2lvbiogcmVnaW9uKQor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQg
QWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQo
dHlwZW5hbWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdpb24qIHJlZ2lv
bikKIHsKICAgICB3aGlsZSAocmVnaW9uKSB7CiAgICAgICAgIFJlZ2lvbiogbmV4dFJlZ2lvbiA9
IHJlZ2lvbi0+bV9uZXh0OwpAQCAtMjI2LDExICsyNDEsMTEgQEAgdm9pZCBBbGxvY2F0b3I8VD46
OmZyZWVSZWdpb25zU3RhcnRpbmdBdAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXZvaWQgQWxsb2NhdG9yPFQ+OjpzdGFydEJ1bXBpbmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8VD46
OlJlZ2lvbiogcmVnaW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2Vs
bEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpzdGFy
dEJ1bXBpbmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OlJl
Z2lvbiogcmVnaW9uKQogewotICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+ZGF0YSgpICsgUmVnaW9u
OjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwotICAgIG1fYnVtcFJlbWFpbmluZyA9IFJlZ2lv
bjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKKyAgICBtX2J1bXBFbmQgPSByZWdpb24tPnBh
eWxvYWRFbmQoKTsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246OnBheWxvYWRTaXplKCk7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjk4LDYgKzY5OCwxOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9k
ZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmln
aW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CisgICAgICAg
IEFTU0VSVChvcCAhPSBQaGkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3Vs
dCk7CisKKyAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQor
ICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBFZGdlIGNo
aWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQorICAgIHsK
KyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgRG9u
dFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCiAgICAgICAgICAgICBvcCwgY3Vy
cmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAgICAgIEFTU0VS
VChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CkBA
IC03MTAsNyArNzIyLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9
IG1fZ3JhcGguYWRkTm9kZSgKICAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8s
IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwog
ICAgICAgICBpZiAob3AgPT0gUGhpKQogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnBoaXMu
YXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIGVsc2UKQEAgLTcyNCw3ICs3MzYsNyBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAg
ICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAg
ICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwg
Y2hpbGQzKTsKKyAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5m
bzIsIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAgICBB
U1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQp
OwogCkBAIC0xNDY1LDcgKzE0NzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5N
YXgoYm9vbCB1CiAgICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAy
KSB7IC8vIE1hdGgubWluKHgpCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKTsKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja051
bWJlciwgcmVzdWx0KTsKKyAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwg
TnVtYmVyVXNlKSk7CiAgICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1
bHRPcGVyYW5kLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTQzMjc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk2OSw3ICs5NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFj
Y2Vzc2luZyBhcmd1bWVudHMgdGhlbiBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2luZyBsb2NhbHMu
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVBcmd1
bWVudHMoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vz
c2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAg
LTEwMDIsNiArMTAwMiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2Rl
LT5jaGlsZHJlbi5jaGlsZChpKTsKICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlZGdlLnVzZUtpbmQoKSAhPSBVbnR5cGVk
VXNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBLZWVwIHRoZSB0eXBlIGNoZWNrLgog
ICAgICAgICAgICAgaWYgKGVkZ2UtPmZsYWdzKCkgJiBOb2RlUmVsZXZhbnRUb09TUikKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMTAxNCwxOCArMTAxNiwxMSBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVudW0gUHJlZGljdGlvbkhh
bmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQcmVkaWN0aW9uTWlzbWF0
Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50LCBQcmVkaWN0
aW9uSGFuZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJlU2FtZVByZWRp
Y3Rpb24pCisgICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVudCkKICAgICB7
CiAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAotICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9ybSByZXBsYWNl
bWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0Ci0gICAgICAgIC8vIGFncmVlLgotICAgICAg
ICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVByZWRpY3Rpb24KLSAg
ICAgICAgICAgICYmIG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSAhPSByZXBsYWNlbWVudC0+
cHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCIg
ICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlcGxhY2Vt
ZW50LT5pbmRleCgpKTsKICNlbmRpZgpAQCAtMTIzMCw3ICsxMjI1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICAgICAgLy8gVGhpcyBpcyBzdHJhbmdlLCBi
dXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxsIGNvbnZlcnQgbm9kZXMgdG8gY29uc3RhbnRz
LAogICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGVkIGNvbnN0YW50
cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVwLgotICAgICAgICAgICAgc2V0UmVwbGFjZW1l
bnQoY29uc3RhbnRDU0Uobm9kZSksIEFsbG93UHJlZGljdGlvbk1pc21hdGNoKTsKKyAgICAgICAg
ICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEy
ICs4Myw2IEBAIHN0cnVjdCBOb2RlUG9pbnRlclRyYWl0cyB7CiAgICAgc3RhdGljIHZvaWQgZHVt
cChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiB9OwogCi1lbnVtIFVzZUtpbmQgewot
ICAgIFVudHlwZWRVc2UsCi0gICAgRG91YmxlVXNlLAotICAgIExhc3RVc2VLaW5kIC8vIE11c3Qg
YWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRl
bm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMuCi19OwotCiAvLyBVc2UgUmVmQ2hpbGRy
ZW4gaWYgdGhlIGNoaWxkIHJlZiBjb3VudHMgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQg
dXNpbmcKIC8vIG90aGVyIG1lYW5zIGFuZCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVl
OgogLy8gLSBUaGUgbm9kZSB5b3UncmUgY3JlYXRpbmcgaXMgTXVzdEdlbmVyYXRlLgpAQCAtMTA2
LDE5ICsxMDAsNiBAQCBlbnVtIFJlZk5vZGVNb2RlIHsKICAgICBEb250UmVmTm9kZQogfTsKIAot
aW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaW5kIHVzZUtpbmQpCi17Ci0g
ICAgc3dpdGNoICh1c2VLaW5kKSB7Ci0gICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICByZXR1
cm4gIiI7Ci0gICAgY2FzZSBEb3VibGVVc2U6Ci0gICAgICAgIHJldHVybiAiZCI7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotfQotCiBpbmxpbmUgYm9vbCBpc0FSTXY3cygpCiB7CiAjaWYgQ1BVKEFQ
UExFX0FSTVY3UykKQEAgLTIzNiw2ICsyMTcsOCBAQCBlbnVtIFVuaWZpY2F0aW9uU3RhdGUgewog
ICAgIEdsb2JhbGx5VW5pZmllZAogfTsKIAorZW51bSBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIHsg
QXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfTsK
KwogZW51bSBTcGVjdWxhdGlvbkRpcmVjdGlvbiB7IEZvcndhcmRTcGVjdWxhdGlvbiwgQmFja3dh
cmRTcGVjdWxhdGlvbiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxMCArMTAzLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlKCk7
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5z
dHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHZh
bHVlLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBDYXRjaCB0aGUg
ZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgICAgIGVs
aW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExNCw4ICsx
MTMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBzdHJ1Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmU7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAg
ICAgICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24oKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZh
Y3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9uIGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVZhbHVlLnNp
bmdsZXRvbigpKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkBAIC0xNDksMTAgKzE1MCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBHZXRC
eUlkOgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKICAgICAgICAgICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAg
IE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIEVk
Z2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogY2hp
bGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigp
KSkKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRFZGdlLnVzZUtpbmQoKSAhPSBDZWxsVXNlKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFBy
b3ZlblN0cnVjdHVyZSgpOwpAQCAtMTgxLDE4ICsxODMsMjQgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwg
Y29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8o
c3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3Rh
dGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBwcm9w
ZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5
U3RvcmFnZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCi0g
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkOworICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2Uo
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5
LCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CkBAIC0yMDcs
OSArMjE1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAg
ICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxk
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGRFZGdl
ID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVk
Z2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7CisgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5v
ZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0
cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzgsOSArMjQ5LDE1IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZvck5vZGUoY2hp
bGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3Ry
dWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwg
Y29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkg
eworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUs
IFNwZWNOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgUGhhbnRvbSwgY29kZU9yaWdpbiwg
Y2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlv
bkRhdGEgPSAwOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9u
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKApAQCAtMjY0LDM4ICsyODEsMzggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3Rv
cmFnZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQoc3RhdHVzLm9mZnNldCgpKSkgewogICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7
IC8vIFRoZSBjaGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4LCBzbyByZWYg
aXQgdG8gcmVmbGVjdCB0aGUgZG91YmxlIHVzZS4KLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGNoaWxkRWRnZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBsZVJl
cGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5ld1N0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwg
R2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNO
b25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0
dXMub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9y
YWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwg
T3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMu
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0
KHN0YXR1cy5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJl
biwgUmVmTm9kZSwgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFZGdl
LAorICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxk
cmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBjaGlsZCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0
aW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVy
dHlTdG9yYWdlKTsKQEAgLTM0MCw3ICszNTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBwaGFudG9tID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIHBoaSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRn
ZShwaGkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGFudG9tOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IHBoYW50b207CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTM5MSwxMyArNDA4LDEzIEBA
IHByaXZhdGU6CiAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250
UmVmTm9kZSwgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LAotICAgICAg
ICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIHdlYWtDb25z
dGFudCk7CisgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVy
ZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIHdlYWtDb25zdGFudCk7CisgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2VsbC0+c3RydWN0dXJlKCkpKSwg
RWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKICAgICB9CiAgICAgCiAgICAgLy8gVGhpcyBp
cyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQ0ZBIG1heSByZWFjaCBjb25jbHVzaW9ucyBhYm91dCBj
b25zdGFudHMgYmFzZWQgb24gaXRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw4ICsxNDQsNiBAQCBpbmxpbmUg
Ym9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgICAgIGlmICghY2hhbmdlZCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgZGZnLnJlc2V0RXhpdFN0YXRl
cygpOwotICAgICAgICBwZXJmb3JtRml4dXAoZGZnKTsKICAgICAgICAgcGVyZm9ybUNQU1JldGhy
ZWFkaW5nKGRmZyk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0VkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw5IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBFZGdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KHVzZUtpbmRUb1N0cmluZyh1c2VLaW5kKCkpLCBub2Rl
KCkpOworICAgIGlmICh1c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKKyAgICAgICAgb3V0LnByaW50
KHVzZUtpbmQoKSwgIjoiKTsKKyAgICBvdXQucHJpbnQobm9kZSgpKTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJl
dmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNp
bmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdVc2VLaW5kLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNjIsMTIgKzYzLDE4IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQoKSk7CiAgICAgfQog
ICAgIAotICAgIFVzZUtpbmQgdXNlS2luZCgpIGNvbnN0CisgICAgVXNlS2luZCB1c2VLaW5kVW5j
aGVja2VkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlKCkpOwogICAgICAgICB1
bnNpZ25lZCBtYXNrZWQgPSBtX2VuY29kZWRXb3JkICYgKCgoMSA8PCBzaGlmdCgpKSAtIDEpKTsK
ICAgICAgICAgQVNTRVJUKG1hc2tlZCA8IExhc3RVc2VLaW5kKTsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFVzZUtpbmQ+KG1hc2tlZCk7CisgICAgICAgIFVzZUtpbmQgcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8VXNlS2luZD4obWFza2VkKTsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSB8fCByZXN1
bHQgPT0gVW50eXBlZFVzZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIFVz
ZUtpbmQgdXNlS2luZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHVzZUtpbmRVbmNoZWNrZWQoKTsKICAgICB9CiAgICAgdm9pZCBzZXRVc2VL
aW5kKFVzZUtpbmQgdXNlS2luZCkKICAgICB7CkBAIC05Niw3ICsxMDMsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBZGphY2VuY3lMaXN0OwogICAgIAotICAgIHN0YXRp
YyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7IH0KKyAgICBzdGF0aWMgdWludDMyX3Qgc2hp
ZnQoKSB7IHJldHVybiA0OyB9CiAgICAgCiAgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChO
b2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDMyNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw2ICs0NSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgeworICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gQmVmb3JlRml4cG9pbnQpOwor
ICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAK
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKICAgICAgICAgICAgIGZpeHVwQmxv
Y2sobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtNzYsNTAgKzc5LDI2MiBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgICAgIAogICAg
ICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgR2V0QnlJZDogewotICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4cG9pbnQpCisgICAgICAgIGNh
c2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkKKyAgICAgICAgICAgICAgICB8fCBtX2dyYXBoLmlz
Q3JlYXRlZFRoaXNBcmd1bWVudCh2YXJpYWJsZS0+bG9jYWwoKSkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9u
KG5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVz
ZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5j
aGlsZDEoKSwgTnVtYmVyVXNlLCBGb3J3YXJkU3BlY3VsYXRpb24pOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAg
ICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBlbHNl
IGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJpdEFuZDoKKyAgICAg
ICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIGNhc2UgQml0UlNo
aWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7
CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZp
eEludEVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOiB7CisgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duSW50MzJVc2UpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZUFzSW50
MzI6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVmFsdWVU
b0ludDMyOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQo
SW50MzJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgQXJyYXlQcm9m
aWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCi0gICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgICAgICBB
cnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zKTsKLSAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBh
cnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKLSAgICAgICAgICAgICAgICBhcnJheU1vZGUg
PSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGlj
dGlvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkg
JiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hl
Y2tTdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBP
cEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVj
dHVyZSgpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChOdW1iZXJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoTm90Q2VsbFVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZTogeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDogeworICAgICAgICAgICAgaWYg
KGF0dGVtcHRUb01ha2VJbnRlZ2VyQWRkKG5vZGUpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmlu
ZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAg
ICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAg
ICAgICAgICAgIGlmIChhdHRlbXB0VG9NYWtlSW50ZWdlckFkZChub2RlKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6
IHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFyaXRoRGl2OiB7
CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0
aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCisgICAgICAg
ICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzWDg2KCkgfHwgaXNBUk12N3MoKSkgeworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLnN1
cHBvcnRzTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2Rl
KG5vZGUtPmNoaWxkMigpKTsKKworICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
ZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVtIGZy
b20KKyAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCisgICAgICAgICAg
ICAgICAgTm9kZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2Rl
LCBTcGVjRG91YmxlLCAqbm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBLbm93bk51bWJlclVzZSksIEVkZ2UoKSwg
RWRnZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG5vZGUtPnNldE9w
KEdldEFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9k
ZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7Ci0gICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUpOwotICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogc3RvcmFnZSA9IGNo
ZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAg
ICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAgICAgIGNh
c2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAgICAgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAmJiBub2RlLT5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRV
c2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
Zml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKKyAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMo
KQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4RG91YmxlRWRn
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhTcXJ0OiB7CisgICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZShzdG9y
YWdlKTsKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7CisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAgZWxzZSBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UpOworICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLmNhbkNT
RVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUeXBlT2Y6IHsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChTdHJpbmdVc2UpOworICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbXBh
cmVFcToKKyAgICAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKKyAgICAgICAgY2FzZSBDb21w
YXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6IHsKKyAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcUNvbnN0YW50KQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewor
ICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ29tcGFy
ZUVxKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigp
LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIo
KS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9i
amVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkp
IHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVy
VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5v
ZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgY2Fz
ZSBDb21wYXJlU3RyaWN0RXFDb25zdGFudDogeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgZml4
RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9i
amVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmpl
Y3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoT2JqZWN0
VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAg
IGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogeworICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIGhh
dmUgbm8gZ29vZCB3YXkgb2YgcmVmaW5pbmcgdGhlc2UuCisgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsKKyAgICAgICAgICAg
IGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBub2Rl
LT5jaGlsZDMoKSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3du
Q2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRCeVZh
bDogewogICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAogICAgICAgICAgICAgICAgIG5v
ZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKQEAgLTEyNyw3ICszNDIsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpLAogICAgICAgICAg
ICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIo
KSwgMik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBu
b2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CiAgICAgICAgICAgICBp
ZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6RG91YmxlCkBAIC0xMzgsMTMgKzM1Myw3NyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVVc2Vk
QXNPdGhlcikpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZS53
aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNhbmVDaGFpbikpOwogICAgICAgICAgICAgCisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
OlVucHJvZmlsZWQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25D
ZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBTdHJpbmdDaGFy
QXQ6Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewotICAgICAgICAgICAgLy8gQ3Vy
cmVudGx5IHdlIGhhdmUgbm8gZ29vZCB3YXkgb2YgcmVmaW5pbmcgdGhlc2UuCi0gICAgICAgICAg
ICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpKTsK
LSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNo
aWxkMigpLCAyKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgIEVkZ2UmIGNoaWxkMSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdlJiBjaGlsZDIgPSBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAgRWRnZSYgY2hpbGQzID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlN
b2RlKAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAgICAg
ICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNo
aWxkMi0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rp
b24oKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNo
aWxkMSwgY2hpbGQyLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OlVuZGVjaWRlZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgICAgICAg
ICBjaGlsZDEuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIGNoaWxk
Mi5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKGNo
aWxkMywgUmVhbE51bWJlclVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1w
ZWRBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgICAgICAgICAgY2hpbGQxLnNldFVz
ZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBjaGlsZDIuc2V0VXNlS2luZChJ
bnQzMlVzZSk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQorICAgICAgICAgICAgICAgICAgICBjaGlsZDMuc2V0VXNlS2luZChJbnQzMlVzZSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdl
KGNoaWxkMyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Cisg
ICAgICAgICAgICAgICAgY2hpbGQxLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAg
ICAgICAgICBjaGlsZDIuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgZml4
RG91YmxlRWRnZShjaGlsZDMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBjaGlsZDEuc2V0VXNlS2luZChLbm93bkNlbGxVc2Up
OworICAgICAgICAgICAgICAgIGNoaWxkMi5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTE2MywxMSArNDQyLDE1IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQ2VsbCwKICAg
ICAgICAgICAgICAgICAgICAgU3BlY0ludDMyLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDIoKS0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIDIpOworICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJh
dGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5z
ZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOwor
ICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTE3Niw0OSArNDU5LDI3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0
aW9uKG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgY2FzZSBC
aXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNhc2UgQml0UlNoaWZ0OgotICAg
ICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OiB7Ci0gICAgICAg
ICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZp
eEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAg
Y2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBj
YXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAg
ICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6OnNo
b3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIGJsZXNz
QXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIExv
Z2ljYWxOb3Q6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICBjYXNlIFJlZ0V4
cEV4ZWM6CisgICAgICAgIGNhc2UgUmVnRXhwVGVzdDogeworICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNl
dFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiBub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgZWxzZSBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAg
ICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgICAgICBOb2RlKiBs
b2dpY2FsTm90ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgaWYgKGxvZ2lj
YWxOb3QtPm9wKCkgPT0gTG9naWNhbE5vdApAQCAtMjYxLDE0OSArNTIyLDI2NCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBj
YXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlm
ICghbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwLCBGb3J3
YXJkU3BlY3VsYXRpb24pOworICAgICAgICBjYXNlIFRvUHJpbWl0aXZlOiB7CisgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBBZGQgc3RyaW5nIHNwZWN1bGF0aW9uIGhlcmUuCisgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMTc1CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGQ6
Ci0gICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNo
b3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpCisgICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9k
ZSk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCisgICAg
ICAgICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdf
VFlQRVM6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm51bUNoaWxkcmVuKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIG9ubHkgaGFwcGVuIGlmIHRoZSBjaGlsZHJlbiBo
YXZlIG5vIHR5cGUgcHJlZGljdGlvbnMuIFdlCisgICAgICAgICAgICAgICAgICAgIC8vIHdvdWxk
IGhhdmUgYWxyZWFkeSBleGl0ZWQgYnkgbm93LCBidXQgaW5zZXJ0IGEgZm9yY2VkIGV4aXQganVz
dCB0bworICAgICAgICAgICAgICAgICAgICAvLyBiZSBzYWZlLgorICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBGb3Jj
ZU9TUkV4aXQsCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsr
b3BlcmFuZEluZGV4KQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XS5zZXRVc2VLaW5kKEludDMyVXNl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9J
TkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRl
eCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4
KQorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmly
c3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XS5zZXRVc2VLaW5kKFJlYWxOdW1iZXJVc2UpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5vZGU6OnNo
b3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4
RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBOZXdB
cnJheVdpdGhTaXplOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcml0aE5lZ2F0ZTogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRl
U2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsK
KyAgICAgICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPdGhl
clVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG5vZGUtPmNo
aWxkMSgpLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoT2JqZWN0VXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoK
LSAgICAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICBjYXNlIENyZWF0
ZVRoaXM6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWw6CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2Fm
ZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJpdGhEaXY6IHsK
LSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
Yyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAg
ICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoaXNYODYoKSB8fCBpc0FSTXY3cygpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSgwKTsKLSAgICAgICAgICAg
ICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSgxKTsKLQotICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBz
dGVhbGluZyB0aGVtIGZyb20KLSAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNp
b24uCi0gICAgICAgICAgICAgICAgTm9kZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNo
aWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCAqbm9kZSk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7Ci0gICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBEb3VibGVVc2Up
LCBFZGdlKCksIEVkZ2UoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRn
ZSgxKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgorICAg
ICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKKyAgICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CisgICAg
ICAgIGNhc2UgU2tpcFNjb3BlOgorICAgICAgICBjYXNlIFNldENhbGxlZToKKyAgICAgICAgY2Fz
ZSBTZXRNeVNjb3BlOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlOgorICAgICAgICBjYXNlIEdldFNjb3BlOgorICAgICAgICBjYXNlIEdldEJ1dHRlcmZs
eTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEFyaXRoQWJzOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGNhc2UgR2V0QnlJZDogeworICAgICAgICAg
ICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxs
VXNlKTsKKyAgICAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rp
b24oKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoY29kZUJsb2Nr
KCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRpZmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCku
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKKyAgICAgICAgICAgICAgICBtX2dyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUo
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RV
c2luZ1ByZWRpY3Rpb25zKTsKKyAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsKKyAgICAg
ICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKKyAgICAgICAgICAgICAg
ICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5
OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJl
ZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwg
bm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnN1cHBv
cnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5l
eHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZShub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUu
c3VwcG9ydHNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMCk7CisgICAgICAgICAgICBub2RlLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7
CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwor
ICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2Ji
ZXJzV29ybGQpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNl
bGxVc2UpOworICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlKTsKKyAgICAgICAgICAgIG5v
ZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBO
b2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkgPSBFZGdlKHN0
b3JhZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFyaXRoU3FydDogewotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAg
ICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgUHV0QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczogewotICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApOwotICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpOwotICAgICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpOwotCi0gICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCi0gICAgICAgICAgICAg
ICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBjaGlsZDEt
PnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCks
Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIDMpOwor
ICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZToKKyAgICAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAg
ICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBj
YXNlIENoZWNrSGFzSW5zdGFuY2U6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50
eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKDIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJh
eToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNl
IEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVk
QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgICAgIGlmICghY2hpbGQzLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVk
Z2UoMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpG
bG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAg
ICAgICAgICAgICAgZml4RG91YmxlRWRnZSgyKTsKKyAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
LnNldFVzZUtpbmQoU3RyaW5nVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChD
ZWxsVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdBcnJh
eTogewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGls
ZHJlbihub2RlKTsgaS0tOykgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlw
ZSgKLSAgICAgICAgICAgICAgICAgICAgbGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRU
eXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+aW5kZXhpbmdUeXBlKCksIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgaSktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkg
ewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hp
bGRyZW4obm9kZSk7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoaSk7
Ci0gICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXlpZnk6CisgICAgICAgIGNhc2UgQXJy
YXlpZnlUb1N0cnVjdHVyZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDog
eworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBQdXRCeU9mZnNldDogeworICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3Rv
cmFnZVJlc3VsdCgpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQo
S25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoS25v
d25DZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBh
cHBlYXJzIGJyb2tlbjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRp
b25hbCBjZWxsCisgICAgICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNzQ3OQorICAgICAgICAgICAgaWYgKCEobm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVz
ZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgSWRlbnRpdHk6
CisgICAgICAgIGNhc2UgTm9wOgorICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBGb3J3
YXJkSW50MzJUb0RvdWJsZToKKyAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgorICAg
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgTGFzdE5v
ZGVUeXBlOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyNpZiAhQVNTRVJUX0RJU0FCTEVEICAgIAorICAgICAg
ICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZv
cmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KKyAgICAgICAgY2FzZSBTZXRB
cmd1bWVudDoKKyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6
CisgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgR2V0TG9jYWw6Cisg
ICAgICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICBjYXNl
IFBoYW50b21Mb2NhbDoKKyAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgorICAgICAgICBj
YXNlIElubGluZVN0YXJ0OgorICAgICAgICBjYXNlIEdldE15U2NvcGU6CisgICAgICAgIGNhc2Ug
R2V0U2NvcGVkVmFyOgorICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBQ
dXRHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKKyAgICAgICAg
Y2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKKyAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdh
dGNocG9pbnQ6CisgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Cisg
ICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAg
ICAgICBjYXNlIE5ld1JlZ2V4cDoKKyAgICAgICAgY2FzZSBSZXNvbHZlOgorICAgICAgICBjYXNl
IFJlc29sdmVCYXNlOgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgorICAgICAg
ICBjYXNlIFJlc29sdmVHbG9iYWw6CisgICAgICAgIGNhc2UgQnJlYWtwb2ludDoKKyAgICAgICAg
Y2FzZSBJc1VuZGVmaW5lZDoKKyAgICAgICAgY2FzZSBJc0Jvb2xlYW46CisgICAgICAgIGNhc2Ug
SXNOdW1iZXI6CisgICAgICAgIGNhc2UgSXNTdHJpbmc6CisgICAgICAgIGNhc2UgSXNPYmplY3Q6
CisgICAgICAgIGNhc2UgSXNGdW5jdGlvbjoKKyAgICAgICAgY2FzZSBTdHJDYXQ6CisgICAgICAg
IGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoK
KyAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CisgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3Vt
ZW50czoKKyAgICAgICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgorICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRzTGVuZ3RoOgorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToK
KyAgICAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CisgICAgICAgIGNhc2UgTmV3
RnVuY3Rpb246CisgICAgICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgICAgICBjYXNl
IE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNl
IFJldHVybjoKKyAgICAgICAgY2FzZSBUaHJvdzoKKyAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5j
ZUVycm9yOgorICAgICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKKyAgICAgICAgY2FzZSBDb3VudEV4
ZWN1dGlvbjoKKyAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgICAgICAgICBicmVhazsK
KyNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgogICAg
ICAgICB9CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC00
MjEsNiArNzk3LDggQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYXJyYXlNb2RlLm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUobV9ncmFwaCwgY29kZU9y
aWdpbik7CiAgICAgICAgIAorICAgICAgICBFZGdlIGluZGV4RWRnZSA9IGluZGV4ID8gRWRnZShp
bmRleCwgSW50MzJVc2UpIDogRWRnZSgpOworICAgICAgICAKICAgICAgICAgaWYgKGFycmF5TW9k
ZS5kb2VzQ29udmVyc2lvbigpKSB7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKG1faW5kZXhJbkJsb2NrID4gMCkgewpAQCAtNDM1LDIxICs4MTMsMjEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlpZnlUb1N0cnVjdHVyZSwgY29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIE9wSW5mbyhh
cnJheU1vZGUuYXNXb3JkKCkpLCBhcnJheSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBP
cEluZm8oc3RydWN0dXJlKSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXks
IENlbGxVc2UpLCBpbmRleEVkZ2UpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBtX2lu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlpZnks
IGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3Jk
KCkpLCBhcnJheSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSksIGluZGV4RWRnZSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlKSB7CiAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIGFycmF5KTsKKyAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBFZGdlKGFy
cmF5LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja0FycmF5LCBjb2Rl
T3JpZ2luLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwg
YXJyYXkpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwg
RWRnZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IApAQCAtNDYxLDIxICs4MzksMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywKICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZkNoaWxkcmVuIDog
RG9udFJlZkNoaWxkcmVuLAogICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVmTm9k
ZSA6IERvbnRSZWZOb2RlLAotICAgICAgICAgICAgICAgIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHks
IGNvZGVPcmlnaW4sIGFycmF5KTsKKyAgICAgICAgICAgICAgICBTcGVjTm9uZSwgR2V0QnV0dGVy
Zmx5LCBjb2RlT3JpZ2luLCBFZGdlKGFycmF5LCBLbm93bkNlbGxVc2UpKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywKICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVm
Q2hpbGRyZW4gOiBEb250UmVmQ2hpbGRyZW4sCiAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/
IFJlZk5vZGUgOiBEb250UmVmTm9kZSwKLSAgICAgICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwg
YXJyYXkpOworICAgICAgICAgICAgU3BlY05vbmUsIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2Us
IGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBLbm93
bkNlbGxVc2UpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVk
Z2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWduZWQgc3RvcmFnZUNoaWxkSWR4KQorICAgIHZvaWQg
Ymxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVkZ2UgaW5kZXgsIEVkZ2UmIHN0b3JhZ2VD
aGlsZCkKICAgICB7Ci0gICAgICAgIGlmIChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA+IEJlZm9y
ZUZpeHBvaW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudE5vZGU7CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNDk5LDcgKzg3NCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBpZiAoIXN0b3JhZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX2dyYXBoLmNoaWxkKG5vZGUsIHN0b3JhZ2VDaGlsZElkeCkgPSBFZGdl
KHN0b3JhZ2UpOworICAgICAgICAgICAgc3RvcmFnZUNoaWxkID0gRWRnZShzdG9yYWdlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSB9CiAgICAgfQpAQCAtNTA3LDQ4ICs4ODIsOTIg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKICAgICB7CiAgICAg
ICAgIE5vZGUqIG5vZGUgPSBlZGdlLm5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
VmFsdWVUb0ludDMyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBpZiAo
bm9kZS0+b3AoKSAhPSBWYWx1ZVRvSW50MzIpIHsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2lu
ZChLbm93bkludDMyVXNlKTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgRWRnZSBvbGRFZGdlID0gZWRnZTsKICAgICAgICAgRWRnZSBuZXdFZGdlID0g
bm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIAorICAgICAgICBpZiAobmV3RWRnZS51c2VLaW5kKCkg
IT0gSW50MzJVc2UpIHsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93bkludDMyVXNl
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNT
RVJUKG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CisgICAgICAgIAogICAgICAg
ICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKICAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsK
ICAgICAgICAgCiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGZpeERvdWJsZUVkZ2UodW5zaWduZWQgY2hpbGRJbmRleCwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICB2b2lkIGZpeERvdWJsZUVkZ2Uo
RWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKLSAgICAgICAgTm9k
ZSogc291cmNlID0gbV9jdXJyZW50Tm9kZTsKLSAgICAgICAgRWRnZSYgZWRnZSA9IG1fZ3JhcGgu
Y2hpbGQoc291cmNlLCBjaGlsZEluZGV4KTsKLSAgICAgICAgCiAgICAgICAgIGlmIChlZGdlLT5w
cmVkaWN0aW9uKCkgJiBTcGVjRG91YmxlKSB7Ci0gICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQo
RG91YmxlVXNlKTsKKyAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZCh1c2VLaW5kKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW5qZWN0SW50MzJU
b0RvdWJsZU5vZGUoY2hpbGRJbmRleCwgZGlyZWN0aW9uKTsKKyAgICAgICAgaW5qZWN0SW50MzJU
b0RvdWJsZU5vZGUoZWRnZSwgdXNlS2luZCwgZGlyZWN0aW9uKTsKICAgICB9CiAKLSAgICB2b2lk
IGluamVjdEludDMyVG9Eb3VibGVOb2RlKHVuc2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBpbmpl
Y3RJbnQzMlRvRG91YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJV
c2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24p
CiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwg
U3BlY0RvdWJsZSwKICAgICAgICAgICAgIGRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9u
ID8gSW50MzJUb0RvdWJsZSA6IEZvcndhcmRJbnQzMlRvRG91YmxlLAotICAgICAgICAgICAgbV9j
dXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGls
ZEluZGV4KS5ub2RlKCkpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwg
RWRnZShlZGdlLm5vZGUoKSwgTnVtYmVyVXNlKSk7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoCiAgICAgICAgICAg
ICAiKHJlcGxhY2luZyBAJXUtPkAldSB3aXRoIEAldS0+QCV1KSAiLAotICAgICAgICAgICAgbV9j
dXJyZW50Tm9kZS0+aW5kZXgoKSwgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZElu
ZGV4KS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgcmVzdWx0LT5pbmRleCgpKTsK
KyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmluZGV4KCksIGVkZ2UtPmluZGV4KCksIG1fY3Vy
cmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CiAjZW5kaWYKIAotICAgICAgICBt
X2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNoaWxkSW5kZXgpID0gRWRnZShyZXN1bHQsIERv
dWJsZVVzZSk7CisgICAgICAgIGVkZ2UgPSBFZGdlKHJlc3VsdCwgdXNlS2luZCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgdHJ1bmNhdGVDb25zdGFudFRvSW50MzIoRWRnZSYgZWRnZSkKKyAgICB7
CisgICAgICAgIE5vZGUqIG9sZE5vZGUgPSBlZGdlLm5vZGUoKTsKKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChvbGROb2RlLT5oYXNDb25zdGFudCgpKTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQob2xkTm9kZSk7CisgICAgICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9
IGpzTnVtYmVyKEpTQzo6dG9JbnQzMih2YWx1ZS5hc051bWJlcigpKSk7CisgICAgICAgIEFTU0VS
VCh2YWx1ZS5pc0ludDMyKCkpOworICAgICAgICBlZGdlLnNldE5vZGUobV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4s
IFJlZk5vZGUsIFNwZWNJbnQzMiwgSlNDb25zdGFudCwKKyAgICAgICAgICAgIG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhjb2RlQmxvY2soKS0+YWRkT3JGaW5kQ29uc3RhbnQodmFs
dWUpKSkpOworICAgICAgICBtX2dyYXBoLmRlcmVmKG9sZE5vZGUpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3NhcnkoTm9kZSogbm9kZSwgQWRkU3BlY3Vs
YXRpb25Nb2RlIG1vZGUpCisgICAgeworICAgICAgICBpZiAobW9kZSAhPSBTcGVjdWxhdGVJbnRl
Z2VyQW5kVHJ1bmNhdGVDb25zdGFudHMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkgfHwgbm9kZS0+Y2hp
bGQyKCktPmhhc0NvbnN0YW50KCkpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmhhc0Nv
bnN0YW50KCkpCisgICAgICAgICAgICB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRUb0ludDMy
KG5vZGUtPmNoaWxkMigpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBhdHRlbXB0VG9NYWtlSW50
ZWdlckFkZChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIG1v
ZGUgPSBtX2dyYXBoLmFkZFNwZWN1bGF0aW9uTW9kZShub2RlKTsKKyAgICAgICAgaWYgKG1vZGUg
PT0gRG9udFNwZWN1bGF0ZUludGVnZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICB0cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KG5vZGUsIG1vZGUpOwor
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgbm9k
ZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw0NSArMzQ2LDE0
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICB9CiB9CiAKLS8vIEZJ
WE1FOiBDb252ZXJ0IHRoaXMgdG8gYmUgaXRlcmF0aXZlLCBub3QgcmVjdXJzaXZlLgotI2RlZmlu
ZSBET19UT19DSElMRFJFTihub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkg
JiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENoaWxkKCkg
KyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAotICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGlsZHJlbltfY2hp
bGRJZHhdKTsgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9IGVsc2Ug
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVCggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg
ICAhX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+
Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQz
KCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZh
bHNlKQotCiB2b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKLSAgICBET19UT19D
SElMRFJFTihvcCwgcmVmKTsKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3As
IHJlZik7CiB9CiAKIHZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCiB7Ci0gICAg
RE9fVE9fQ0hJTERSRU4ob3AsIGRlcmVmKTsKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigq
dGhpcywgb3AsIGRlcmVmKTsKIH0KIAogdm9pZCBHcmFwaDo6ZGV0aHJlYWQoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQzMjc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3
Nyw3IEBAIHN0cnVjdCBQdXRUb0Jhc2VPcGVyYXRpb25EYXRhIHsKIAogZW51bSBBZGRTcGVjdWxh
dGlvbk1vZGUgewogICAgIERvbnRTcGVjdWxhdGVJbnRlZ2VyLAotICAgIFNwZWN1bGF0ZUludGVn
ZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93LAorICAgIFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0
ZUNvbnN0YW50cywKICAgICBTcGVjdWxhdGVJbnRlZ2VyCiB9OwogCkBAIC0xMDAsMTAgKzEwMCwx
NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKICAgICAgICAgcmV0
dXJuIG5vZGU7CiAgICAgfQotICAgIEVkZ2UgcmVmKEVkZ2Ugbm9kZVVzZSkKKyAgICBFZGdlIHJl
ZihFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICByZWYobm9kZVVzZS5ub2RlKCkpOwotICAgICAg
ICByZXR1cm4gbm9kZVVzZTsKKyAgICAgICAgcmVmKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgcmV0
dXJuIGVkZ2U7CisgICAgfQorICAgIEVkZ2UgcmVmKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVmKGVkZ2UpOwogICAgIH0KICAgICAKICAgICB2b2lkIGRlcmVmKE5v
ZGUqIG5vZGUpCkBAIC0xMTUsOSArMTE5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG5vZGUt
PnBvc3RmaXhEZXJlZigpID09IDEpCiAgICAgICAgICAgICBkZXJlZkNoaWxkcmVuKG5vZGUpOwog
ICAgIH0KLSAgICB2b2lkIGRlcmVmKEVkZ2Ugbm9kZVVzZSkKKyAgICB2b2lkIGRlcmVmKEVkZ2Ug
ZWRnZSkKICAgICB7Ci0gICAgICAgIGRlcmVmKG5vZGVVc2Uubm9kZSgpKTsKKyAgICAgICAgZGVy
ZWYoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICB2b2lkIGRlcmVmKE5vZGUqLCBFZGdlIGVkZ2Up
CisgICAgeworICAgICAgICBkZXJlZihlZGdlKTsKICAgICB9CiAgICAgCiAgICAgLy8gV2hlbiBh
IG5vZGUncyByZWZDb3VudCBnb2VzIGZyb20gMCB0byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJl
Y3Vyc2l2ZWx5IHJlZiBhbGwgb2YgaXRzIGNoaWxkcmVuLCBhbmQgdmljZSB2ZXJzYS4KQEAgLTE3
NCw5ICsxODIsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4
ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5v
ZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAgcGVyZm9ybVN1
YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdlbmVy
YXRlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25G
b3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAg
ICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwg
c2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uo
bm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBl
cmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7
CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDIoKSwg
c2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uo
bm9kZS0+Y2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgfQogICAgIH0KICAgICAK
QEAgLTUzMCw5ICs1MzgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1ByZWRpY3RlZE51
bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgbGVmdCA9
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJp
Z2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuIGlzTnVt
YmVyU3BlY3VsYXRpb24obGVmdCkgJiYgaXNOdW1iZXJTcGVjdWxhdGlvbihyaWdodCk7CisgICAg
ICAgIHJldHVybiBpc051bWVyaWNhbChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpICYmIGlzTnVt
ZXJpY2FsKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSk7CiAgICAgfQogICAgIAogICAgIC8vIE5v
dGUgdGhhdCBhICd0cnVlJyByZXR1cm4gZG9lcyBub3QgYWN0dWFsbHkgbWVhbiB0aGF0IHRoZSBC
eVZhbCBhY2Nlc3MgY2xvYmJlcnMgbm90aGluZy4KQEAgLTc4MSw3ICs3ODcsNyBAQCBwcml2YXRl
OgogICAgICAgICBpZiAoZG91YmxlSW1tZWRpYXRlIDwgLXR3b1RvVGhlNDggfHwgZG91YmxlSW1t
ZWRpYXRlID4gdHdvVG9UaGU0OCkKICAgICAgICAgICAgIHJldHVybiBEb250U3BlY3VsYXRlSW50
ZWdlcjsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKGFk
ZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVy
ZmxvdyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOworICAgICAgICByZXR1cm4gbm9kZUNhblRydW5j
YXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckFuZFRy
dW5jYXRlQ29uc3RhbnRzIDogRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAgfQogICAgIAogICAg
IGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBtdWwsIE5vZGUq
IHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCkBAIC04MzAsNiArODM2LDM2IEBAIGlubGluZSBC
bG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnkKICAgICByZXR1cm4gKmJpbmFyeVNlYXJj
aDxCbG9ja0luZGV4LCB1bnNpZ25lZD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJnZXRzLnNp
emUoKSwgYnl0ZWNvZGVCZWdpbiwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7CiB9
CiAKKyNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5nVG9E
bykgZG8geyAgICAgICAgICAgIFwKKyAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9ub2Rl
LT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQo
KTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+Zmly
c3RDaGlsZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKKyAgICAgICAgICAgICAgICBfY2hp
bGRJZHgrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICBpZiAoISEoZ3JhcGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSkg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCAoZ3Jh
cGgpLm1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7IFwKKyAgICAgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMSgpKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGlmICghX25vZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNoaWxkMigpKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICgh
X25vZGUtPmNoaWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgX25vZGUtPmNo
aWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlIChmYWxzZSkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDMyNzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTUsMTEgKzk1LDEwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3Bl
Y05vbmUpCiAgICAgewogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7Ci0gICAgICAg
IEFTU0VSVCghIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpID09IChjaGlsZHJlbi5raW5kKCkg
PT0gQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUpKTsKICAgICB9CiAgICAgCiAgICAgLy8gQ29uc3Ry
dWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAg
ICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUqIGNoaWxkMSA9
IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCisgICAgTm9kZShOb2RlVHlw
ZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFZGdlIGNoaWxkMSA9IEVkZ2UoKSwgRWRnZSBj
aGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgICAgICA6IGNvZGVPcmln
aW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwg
Y2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMTExLDcgKzExMCw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQg
YW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwg
Tm9kZSogY2hpbGQzID0gMCkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIE9wSW5mbyBpbW0sIEVkZ2UgY2hpbGQxID0gRWRnZSgpLCBFZGdlIGNoaWxkMiA9IEVk
Z2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3Jp
Z2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNo
aWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCkBAIC0xMjQsNyArMTIzLDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAg
IC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRp
YXRlIHZhbHVlcy4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQy
ID0gMCwgTm9kZSogY2hpbGQzID0gMCkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgRWRnZSBjaGlsZDEgPSBFZGdl
KCksIEVkZ2UgY2hpbGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICAgICAg
OiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlz
dDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVn
aXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTI5NCwyMiArMjkzLDIyIEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQo
c3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgs
IE5vZGUqIHN0b3JhZ2UpCisgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBz
dG9yYWdlQWNjZXNzRGF0YUluZGV4LCBFZGdlIHN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NF
UlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoKTsKICAgICAgICAgbV9v
cEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwotICAgICAgICBjaGlsZHJlbi5zZXRDaGls
ZDEoRWRnZShzdG9yYWdlKSk7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShzdG9yYWdlKTsK
ICAgICAgICAgbV9vcCA9IEdldEJ5T2Zmc2V0OwogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xv
YmJlcnNXb3JsZDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1
bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9yYWdlKQorICAgIHZvaWQg
Y29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRn
ZSBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29w
ID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXg7CiAgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMyhjaGlsZHJlbi5jaGlsZDIoKSk7CiAg
ICAgICAgIGNoaWxkcmVuLnNldENoaWxkMihjaGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgIGNo
aWxkcmVuLnNldENoaWxkMShFZGdlKHN0b3JhZ2UpKTsKKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hp
bGQxKHN0b3JhZ2UpOwogICAgICAgICBtX29wID0gUHV0QnlPZmZzZXQ7CiAgICAgICAgIG1fZmxh
Z3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KQEAgLTk0OSw5ICs5NDgsMTAgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgICAgIGNhc2UgUGhh
bnRvbUFyZ3VtZW50czoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFBo
YW50b206CiAgICAgICAgIGNhc2UgTm9wOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCkudXNlS2luZFVu
Y2hlY2tlZCgpICE9IFVudHlwZWRVc2UgfHwgY2hpbGQyKCkudXNlS2luZFVuY2hlY2tlZCgpICE9
IFVudHlwZWRVc2UgfHwgY2hpbGQzKCkudXNlS2luZFVuY2hlY2tlZCgpICE9IFVudHlwZWRVc2U7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gc2hvdWxkR2VuZXJhdGUoKTsK
ICAgICAgICAgfQpAQCAtOTk1LDcgKzk5NSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0
dXJuIG1fcmVmQ291bnQtLTsKICAgICB9CiAgICAgCi0gICAgRWRnZSBjaGlsZDEoKQorICAgIEVk
Z2UmIGNoaWxkMSgpCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1Zh
ckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMSgpOwpAQCAtMTAwOSwxMyAr
MTAwOSwxMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDFV
bmNoZWNrZWQoKTsKICAgICB9CiAKLSAgICBFZGdlIGNoaWxkMigpCisgICAgRWRnZSYgY2hpbGQy
KCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwog
ICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQyKCk7CiAgICAgfQogCi0gICAgRWRnZSBjaGls
ZDMoKQorICAgIEVkZ2UmIGNoaWxkMygpCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdz
ICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMygpOwpA
QCAtMTAzMyw2ICsxMDMzLDE3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxk
cmVuLm51bUNoaWxkcmVuKCk7CiAgICAgfQogICAgIAorICAgIFVzZUtpbmQgYmluYXJ5VXNlS2lu
ZCgpCisgICAgeworICAgICAgICBBU1NFUlQoY2hpbGQxKCkudXNlS2luZCgpID09IGNoaWxkMigp
LnVzZUtpbmQoKSk7CisgICAgICAgIHJldHVybiBjaGlsZDEoKS51c2VLaW5kKCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNCaW5hcnlVc2VLaW5kKFVzZUtpbmQgdXNlS2luZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjaGlsZDEoKS51c2VLaW5kKCkgPT0gdXNlS2luZCAmJiBjaGlsZDIoKS51
c2VLaW5kKCkgPT0gdXNlS2luZDsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE0
MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKLXR5cGVkZWYgQWxsb2NhdG9yPE5vZGU+IE5vZGVBbGxvY2F0b3I7CisjaWYg
VVNFKEpTVkFMVUU2NCkKK3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDExMj4gTm9kZUFsbG9jYXRv
cjsKKyNlbHNlCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCA4MD4gTm9kZUFsbG9jYXRvcjsKKyNl
bmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNvbnN0IGNo
YXIqIG5vZGVGbGFnc0FzU3RyaW5nKE5vZGVGbGFncyBmbGFncykKIHsKLSAgICBpZiAoIWZsYWdz
KQorICAgIGlmICghKGZsYWdzIF4gTm9kZURvZXNOb3RFeGl0KSkKICAgICAgICAgcmV0dXJuICI8
ZW1wdHk+IjsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgc2l6ZSA9IDEyODsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0MzI3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTYsOCArOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8o
Rm9yd2FyZEludDMyVG9Eb3VibGUsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICAvKiBVc2VkIHRv
IHNwZWN1bGF0ZSB0aGF0IGEgZG91YmxlIHZhbHVlIGlzIGFjdHVhbGx5IGFuIGludGVnZXIuICov
XAogICAgIG1hY3JvKERvdWJsZUFzSW50MzIsIE5vZGVSZXN1bHRJbnQzMikgXAotICAgIC8qIFVz
ZWQgdG8gcmVjb3JkIHBsYWNlcyB3aGVyZSB3ZSBtdXN0IGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBu
dW1iZXIuICovXAotICAgIG1hY3JvKENoZWNrTnVtYmVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJhdGlvbnMuICovXAogICAgIG1h
Y3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MDUsNyArODA1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CiAgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgVGVh
ck9mZkFyZ3VtZW50czoKLSAgICAgICAgY2FzZSBDaGVja051bWJlcjoKICAgICAgICAgY2FzZSBD
aGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2lu
dDoKICAgICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0MzI3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDI4ICszOSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxJbnRlZ2VyKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKK0dQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5G
b3JtYXQpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZp
cnR1YWxSZWdpc3RlcigpOworICAgIEFTU0VSVCghKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5
cGUgJiB+U3BlY0ludDMyKSk7CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICBHUFJSZWcgZ3ByID0g
YWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAg
ICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdwcik7Cisg
ICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdl
cigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZv
cm1hdEludGVnZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUp
KTsKKyAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAg
ICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25z
dGFudChlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOwot
ICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
OworICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5v
ZGUoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2Vy
KSB7CkBAIC0xMTcsMjcgKzExOSwyNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRl
Z2VyKE5vZGUqCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVl
KE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgZWRn
ZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewot
ICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICBpZiAoZWRn
ZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChlZGdl
Lm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwg
Z3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVt
YmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNW
YWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJD
b25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6
OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaXNKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBq
c1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICB9CkBAIC04MDIsMTggKzgwNCwy
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiB9CiAKIHRlbXBs
YXRlPGJvb2wgc3RyaWN0PgotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
SW50ZXJuYWwoTm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVJbnRJbnRlcm5hbChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKLSAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRh
dGFMb2dGKCJTcGVjSW50QCVkICAgIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVj
dWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5k
KCkgIT0gS25vd25JbnQzMlVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjSW50MzIpKTsKKyAg
ICB2YWx1ZS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKLSAgICAg
ICAgaWYgKChub2RlLT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQobm9kZSkpIHx8
IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgIGlmICgo
ZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgfHwg
aW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKICAgICAgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAw
LCBkaXJlY3Rpb24pOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVn
ZXI7CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKQEAgLTgyMSwxMCArODI2LDEwIEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgCiAgICAg
ICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25z
dGFudCgpKSB7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAg
ICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQp
OwotICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSk7Ci0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlKSksIGdwcik7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9k
ZSgpKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1
ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIpOwogICAgICAgICAgICAgaW5mby5m
aWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBE
YXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7CkBAIC04NjUsNyArODcw
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICBH
UFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAg
ICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
LCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKICAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7
CiAgICAgICAgIC8vIElmICFzdHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAgICAgICBpZiAo
IXN0cmljdCkgewpAQCAtOTEwLDEwICs5MTUsMTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlSW50SQogCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2Ug
RGF0YUZvcm1hdEpTRG91YmxlOiB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpICYm
IGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQo
KSAmJiBpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9k
ZSkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVP
ZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJD
b25zdGFudChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwgZ3ByKTsKICAg
ICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAg
cmV0dXJuIGdwcjsKICAgICAgICAgfQpAQCAtOTM2LDM1ICs5NDEsMzggQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZv
cm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50KEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGZpbGxTcGVj
dWxhdGVJbnRJbnRlcm5hbDxmYWxzZT4obm9kZSwgcmV0dXJuRm9ybWF0LCBkaXJlY3Rpb24pOwor
ICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KGVkZ2UsIHJldHVybkZv
cm1hdCwgZGlyZWN0aW9uKTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlSW50U3RyaWN0KE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnRTdHJpY3QoRWRnZSBlZGdlKQogewogICAgIERhdGFGb3JtYXQgbXVzdEJlRGF0YUZv
cm1hdEludGVnZXI7Ci0gICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5h
bDx0cnVlPihub2RlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlv
bik7CisgICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDx0cnVlPihl
ZGdlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAg
UkVMRUFTRV9BU1NFUlQobXVzdEJlRGF0YUZvcm1hdEludGVnZXIgPT0gRGF0YUZvcm1hdEludGVn
ZXIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZURvdWJsZShOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24pCitGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoRWRnZSBlZGdl
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjRG91YmxlQCVkICAgIiwgbm9kZS0+aW5kZXgo
KSk7CisgICAgZGF0YUxvZ0YoIlNwZWNEb3VibGVAJWQgICAiLCBlZGdlLT5pbmRleCgpKTsKICNl
bmRpZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90
eXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShl
ZGdlKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIEFTU0VS
VChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bk51bWJlclVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5T
cGVjTnVtYmVyKSk7CisgICAgdmFsdWUuZmlsdGVyKFNwZWNOdW1iZXIpOworICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
IAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAg
ICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0Nv
bnN0YW50KCkpIHsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAg
ICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXNJ
bnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIg
PSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChzdGF0aWNfY2FzdDxkb3VibGU+KHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChzdGF0
aWNfY2FzdDxkb3VibGU+KHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkpKSwgZ3By
KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAg
ICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKQEAgLTk3Miw5ICs5ODAsOSBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgaW5mby5maWxs
RG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpIHsKKyAg
ICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAg
ICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQodmFsdWVP
Zk51bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3By
KTsKIApAQCAtMTAzOSw3ICsxMDQ3LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlRG91YgogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCiAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxh
dGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3MoanNWYWx1ZUdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxl
cjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGly
ZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3MoanNWYWx1ZUdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0
aW9uKTsKIAogICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJs
ZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIHRl
bXBHcHIpOwpAQCAtMTEwMiwxMyArMTExMCwxNiBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVEb3ViCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsKE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikK
K0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwoRWRnZSBlZGdlLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJC
T1NFKQotICAgIGRhdGFMb2dGKCJTcGVjQ2VsbEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAg
IGRhdGFMb2dGKCJTcGVjQ2VsbEAlZCAgICIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAg
U3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3Rlcigp
OworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAg
IFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7CisgICAgQVNTRVJUKGVkZ2UudXNl
S2luZCgpICE9IEtub3duQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOwor
ICAgIHZhbHVlLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKQEAgLTExMjAsOCArMTEzMSw4IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBn
cHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAg
ICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUganNW
YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgIGlmIChq
c1ZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFs
dWUpKSwgZ3ByKTsKQEAgLTExMzcsNyArMTE0OCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUNlbGwKIAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwg
Z3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIp
LCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3RlciksIGRpcmVjdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBn
cHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTEx
NTMsNyArMTE2NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwK
ICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdw
cik7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9u
KTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpT
Q2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTE3NywxMyArMTE4OCwxNSBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgfQogfQogCi1H
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKE5vZGUqIG5vZGUsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24pCiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVj
Qm9vbEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFMb2dGKCJTcGVjQm9vbEAlZCAg
ICIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1f
c3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2
YWx1ZS5tX3R5cGU7CisgICAgdmFsdWUuZmlsdGVyKFNwZWNCb29sZWFuKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07
CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAtMTE5NSw4ICsxMjA4
LDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICAK
ICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhh
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpOworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwog
ICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwpAQCAtMTIxMyw3ICsxMjI2LDcgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAoIWlzQm9v
bGVhblNwZWN1bGF0aW9uKHR5cGUpKSB7CiAgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2pp
dC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5T
cGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBkaXJlY3Rpb24pOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBt
X2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xl
YW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBkaXJlY3Rpb24pOwogICAg
ICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKQEAgLTEyMzIsNyArMTI0NSw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgbV9ncHJz
LmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbih0eXBlKSkgewog
ICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZh
bGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJ
bnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAg
IH0KICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CkBAIC0xMjkwLDM1ICsxMzAzLDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGkKICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQo
KS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OworICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVs
c2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJS
ZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAg
ICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAogICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIApAQCAtMTMyNiwxNCArMTMzMCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOwogCiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigp
LCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAog
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIApAQCAtMTM2MywyNyArMTM2NCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7IAogICAgICAgICBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsK
LSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0g
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVf
Q0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBs
ZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1
cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAg
ICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3Qp
IHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQ
UiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIs
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENo
aWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTM5OSwyNyArMTM5NCwyMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhp
biB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAKICAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldh
dGNocG9pbnQoKSk7Ci0gICAgICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1f
dHlwZSAmIFNwZWNDZWxsKSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJp
Z2h0Q2hpbGQsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVH
UFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVHUFIpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUg
JiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENo
aWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVH
UFIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9Cisg
ICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwg
cmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0
cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxk
LAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTQzNywxMiArMTQyNiwxMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdp
dGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlm
IHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBv
ciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBl
ICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIpIHsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2socmln
aHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7CiAgICAgICAgIG1faml0Lm1vdmUob3Ay
R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9w
MkdQUiksIHJpZ2h0Q2hpbGQubm9kZSgpLAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwK
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwpAQCAtMTQ2NCw3ICsxNDUzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIEJsb2NrSW5kZXggbm90VGFr
ZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVmdENoaWxkKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBv
cDIodGhpcywgcmlnaHRDaGlsZCk7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0
Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICAKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwpAQCAtMTQ3Mywy
NyArMTQ2MiwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAg
ICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxs
VmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9k
ZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0
LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAg
IEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxl
ZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIo
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0
LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCiAgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
CkBAIC0xNTA5LDI3ICsxNDkyLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZU9iamUKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENo
aWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBp
ZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3Bl
Y09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAg
ICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ay
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJl
KHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwog
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKCht
X3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwpICYgflNwZWNPYmpl
Y3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNL
KAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2Vs
bCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
CkBAIC0xNTQ0LDcgKzE1MjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplCiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmln
aHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAg
ICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgaWYg
KChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSAmIH5TcGVj
T3RoZXIpCisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhyaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNw
ZWNPdGhlcikpCiAgICAgICAgIHJpZ2h0Tm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgZWxzZSB7
CiAgICAgICAgIGp1bXAobm90VGFrZW4sIEZvcmNlSnVtcCk7CkBAIC0xNTUzLDkgKzE1MzAsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIG1faml0
Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwogICAgICAg
ICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFs
dWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgK
KyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmln
aHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIG1faml0LmJyYW5jaDY0KAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwogICAgIH0KQEAg
LTE2MDksOSArMTU4NSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChO
b2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5vZGVVc2Us
IGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNlKQogewotICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwpAQCAtMTYxOSwyNyArMTU5NSwyMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgaWYgKG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hw
b2ludCgpKTsKLQotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
VXNlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERG
R19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNl
LCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBz
dHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQ
Uik7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAg
ICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9k
ZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZUdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSAKICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q4KApAQCAtMTY2MCwxMSArMTYzMSwxMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZt
X2ppdCk7CiAKLSAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKKyAgICBpZiAobmVlZHNU
eXBlQ2hlY2sobm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7CiAgICAgICAgIG1faml0
Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
VXNlLCAKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICB0eXBlQ2hlY2soCisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIFNwZWNDZWxsIHwgU3Bl
Y090aGVyLCBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CkBAIC0xNjc4LDEyICsx
NjQ5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTm9kZSogbm9kZSkKIHsKLSAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAg
ICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCksCi0gICAg
ICAgICAgICAhaXNPYmplY3RPck90aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgeworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogeworICAgICAgICBjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7Cisg
ICAgICAgIAorICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgdmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCks
IHJlc3VsdC5ncHIoKSk7CkBAIC0xNjkxLDcgKzE2NjMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdChOCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAg
IAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTE3MDMsOCAr
MTY3Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKLSAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpIHsKKyAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKICAgICAgICAgaWYgKGlz
Qm9vbGVhblNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1
ZSk7CkBAIC0xNzE2LDQxICsxNjg4LDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dpY2FsTm90KE4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklY
TUU6IFdlIGNvdWxkIHJldXNlLCBidXQgb24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJl
Y292ZXJ5IHRvIHJlc3RvcmUgdGFnIChha2luIHRvIGFkZCkuCiAgICAgICAgIAogICAgICAgICBt
X2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC54b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHQu
Z3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZh
bHVlLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxl
cjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSkpOworICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2
YWx1ZS5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbGVhbiwgbV9qaXQuYnJhbmNoVGVz
dDY0KAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCks
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAgICAgIG1faml0
LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVz
dWx0LmdwcigpKTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRC
b29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgCi0gICAgR1BSUmVn
IGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKLSAgICBhcmcxLnVzZSgpOworICAgICAg
ICBhcmcxLnVzZSgpOwogICAgIAotICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsK
LSAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVG
YWxzZSkpLCByZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9q
aXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKKyAgICAgICAgbV9qaXQubW92ZShhcmcx
R1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9u
WmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7
CiAgICAgCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbChz
bG93Q2FzZSwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJn
MUdQUikpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93Q2FzZSwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3Vs
dEdQUiwgYXJnMUdQUikpOwogICAgIAotICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKLSAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaChFZGdlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4s
IGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2Jq
ZWN0T3JPdGhlckJyYW5jaChFZGdlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5k
ZXggbm90VGFrZW4pCiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSk7
CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CkBAIC0xNzU5LDIzICsxNzQxLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRP
YmplY3RPck90aGVyQnIKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9j
dXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwogCi0gICAgICAgIGlmIChu
ZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsCi0gICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
VXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIHNjcmF0Y2hH
UFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoVGVz
dDgoSklUQ29tcGlsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKIApAQCAtMTc5MSwxMCArMTc2OSwxMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2pp
dCk7CiAgICAgCi0gICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CisgICAgaWYgKG5lZWRz
VHlwZUNoZWNrKG5vZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2pp
dC5tb3ZlKHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBu
b2RlVXNlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOworICAgICAgICB0
eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIFNw
ZWNDZWxsIHwgU3BlY090aGVyLCBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoVmFsdWVOdWxsKSkpOwogICAgIH0KICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAKQEAg
LTE4MDYsMTQgKzE3ODYsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2Rl
KiBubwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKICAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAg
Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkp
IHsKLSAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS0+Y2hpbGQxKCksIHRha2Vu
LCBub3RUYWtlbiwgCi0gICAgICAgICAgICAhaXNPYmplY3RPck90aGVyU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogeworICAg
ICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLT5jaGlsZDEoKSwgdGFrZW4sIG5vdFRh
a2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIAorICAgIGNhc2UgSW50MzJV
c2U6CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBJbnQzMlVzZSkgewogICAgICAgICAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CkBA
IC0xODM3LDU2ICsxODE4LDYyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9k
ZSogbm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKKyAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgY2FzZSBCb29sZWFuVXNlOiB7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAg
ICAgICAgCi0gICAgYm9vbCBwcmVkaWN0Qm9vbGVhbiA9IGlzQm9vbGVhblNwZWN1bGF0aW9uKG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOwotICAgIAotICAgIGlmIChwcmVkaWN0Qm9vbGVh
bikgewotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVz
dWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOworICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEJvb2xlYW5Vc2UpIHsKKyAgICAgICAg
ICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29u
ZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7Ci0gICAgICAgICAg
ICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Olplcm87Ci0gICAgICAgICAgICAgICAg
QmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2Vu
OwotICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgeworICAgICAgICAgICAgICAgICAg
ICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsKKyAgICAgICAgICAgICAgICAgICAg
QmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgICAgICAgICAgdGFrZW4gPSBub3RU
YWtlbjsKKyAgICAgICAgICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlv
biwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMih0cnVlKSwgdGFrZW4pOwotICAgICAgICAgICAganVt
cChub3RUYWtlbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKLSAgICAgICAg
ICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtl
bik7CisgICAgICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgdmFsdWVHUFIsIFRy
dXN0ZWRJbW0zMih0cnVlKSwgdGFrZW4pOworICAgICAgICAgICAgICAgIGp1bXAobm90VGFrZW4p
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKKyAgICAgICAgICAg
ICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFr
ZW4pOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkp
OwotICAgICAgICB9Ci0gICAgICAgIHZhbHVlLnVzZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKSAmIFNwZWNJbnQzMikgewotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoMCkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgYnJhbmNoNjQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgdGFrZW4pOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgdHlwZUNo
ZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNCb29sZWFuLCBt
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWUudXNlKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjSW50
MzIpIHsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bWJlcigwKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwgdGFrZW4pOworICAgICAgICAgICAgfQogICAgIAotICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNCb29sZWFuKSB7Ci0gICAgICAgICAgICBicmFuY2g2
NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKLSAg
ICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkp
LCB0YWtlbik7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpICYgU3BlY0Jvb2xlYW4pIHsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKKyAgICAgICAg
ICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
dGFrZW4pOworICAgICAgICAgICAgfQogICAgIAotICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAg
ICAgICAgIHZhbHVlLnVzZSgpOwogICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9C
b29sZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jv
b2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOworICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhyZXN1bHRHUFIpOwogICAgIAotICAgICAgICBicmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOwotICAgICAgICBqdW1wKG5vdFRha2Vu
KTsKKyAgICAgICAgICAgIGJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVz
dWx0R1BSLCB0YWtlbik7CisgICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgbm9SZXN1bHQobm9k
ZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQpAQCAtMjEzMSwxOSArMjExOCw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIENoZWNrTnVtYmVyOiB7Ci0gICAgICAgIGlmICghaXNOdW1iZXJT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMS5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAg
ICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICB9Ci0gICAgICAgIG5vUmVzdWx0
KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjYXNlIFZhbHVlQWRkOgogICAg
IGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNvbXBpbGVBZGQobm9kZSk7CkBAIC0yMTYyLDIxICsy
MTM2LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBjb21waWxlSW50ZWdlckFyaXRoRGl2
Rm9yWDg2KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgRlBS
UmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwot
ICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBGUFJSZWcg
cmVnMSA9IG9wMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwor
ICAgICAgICAgICAgbV9qaXQuZGl2RG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjE4
Niw4ICsyMTY4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAmJiBu
b2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKQEAgLTIyMDEsMTggKzIxODMsMjYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
Ci0gICAgICAgIG1faml0LmFic0RvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAg
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICBjYXNlIE51bWJl
clVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQuYWJzRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1
bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkg
eworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwpAQCAtMjIzMSwzNiArMjIyMSw0
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0
ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0
ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CiAgICAgICAgIAotICAgICAgICAvLyBvcDIg
aXMgZWF0aGVyIHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlzIE5hTgotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFy
aXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsK
KyAgICAgICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBvbmUgb3Igb25lIG9mIHRo
ZW4gaXMgTmFOCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJMZXNzID0gbV9q
aXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdy
ZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWws
IG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKICAgICAgICAgCi0gICAgICAgIC8vIFVub3JkZXJlZCBj
YXNlLiBXZSBkb24ndCBrbm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1cmUg
TmFOIGJ5IGFkZGluZyAKLSAgICAgICAgLy8gb3AxICsgb3AyIGFuZCBwdXR0aW5nIGl0IGludG8g
cmVzdWx0LgotICAgICAgICBtX2ppdC5hZGREb3VibGUob3AxLmZwcigpLCBvcDIuZnByKCksIHJl
c3VsdC5mcHIoKSk7Ci0gICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAg
ICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGljaCBvZiBvcDEsIG9wMiBp
cyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCisgICAgICAgICAgICAvLyBvcDEgKyBv
cDIgYW5kIHB1dHRpbmcgaXQgaW50byByZXN1bHQuCisgICAgICAgICAgICBtX2ppdC5hZGREb3Vi
bGUob3AxLmZwcigpLCBvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBkb25l
LmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAKLSAgICAgICAgb3AyTGVzcy5saW5rKCZt
X2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AyLmZwcigpLCByZXN1bHQuZnByKCkp
OworICAgICAgICAgICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlRG91YmxlKG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgCi0gICAgICAgIGlm
IChvcDEuZnByKCkgIT0gcmVzdWx0LmZwcigpKSB7Ci0gICAgICAgICAgICBkb25lLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgaWYgKG9wMS5mcHIoKSAhPSByZXN1bHQuZnByKCkp
IHsKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIG1faml0
Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG9wMUxlc3Mu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigp
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgb3Ax
TGVzcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAKLSAgICAgICAgZG91Ymxl
UmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApAQCAtMjYxNywxOCArMjYxNSwxOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUo
KSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQz
KTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMywgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKIAogICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFs
dWUuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFycmF5
TW9kZS50eXBlKCkgPT0gQXJyYXk6OkludDMyCi0gICAgICAgICAgICAgICAgJiYgIWlzSW50MzJT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQzKS5tX3R5cGUpKSB7Ci0gICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNW
YWx1ZVJlZ3ModmFsdWVSZWcpLCBjaGlsZDMsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVSZWcsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJy
YXk6OkludDMyKSB7CisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlUmVnKSwgY2hpbGQzLCBTcGVjSW50MzIsCisgICAg
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKGFycmF5
TW9kZS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMgJiYgSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkpIHsKQEAgLTI5MjgsMTMgKzI5MjYsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5
cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czogewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKIAotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgJiYgIWlzSW50MzJTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMigpLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkgPT0gQXJyYXk6OkludDMyKSB7CisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQyKCks
IFNwZWNJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlR1BSLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6SW50MzIgJiYgSGVhcDo6aXNX
cml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKQEAgLTI5NjIsMTMgKzI5NjEsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEZQUlJl
ZyB2YWx1ZUZQUiA9IHZhbHVlLmZwcigpOwogCi0gICAgICAgICAgICBpZiAoIWlzUmVhbE51bWJl
clNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkgewot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgd2F5IG9mIHByb2ZpbGluZyB0aGVz
ZSwgYW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBpbnRvCi0gICAgICAgICAgICAgICAgLy8gU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQsIHZhbHVlRlBSLCB2YWx1ZUZQUikpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwg
bm9kZS0+Y2hpbGQyKCksIFNwZWNSZWFsTnVtYmVyLAorICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFs
dWVGUFIsIHZhbHVlRlBSKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CkBAIC0zMTcxLDcg
KzMxNjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIFRvUHJpbWl0aXZlOiB7Ci0gICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIHN3aXRjaCAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAg
ICAgICAgIC8vIEl0J3MgcmVhbGx5IHByb2ZpdGFibGUgdG8gc3BlY3VsYXRlIGludGVnZXIsIHNp
bmNlIGl0J3MgcmVhbGx5IGNoZWFwLAogICAgICAgICAgICAgLy8gaXQgbWVhbnMgd2UgZG9uJ3Qg
aGF2ZSB0byBkbyBhbnkgcmVhbCB3b3JrLCBhbmQgd2UgZW1pdCBhIGxvdCBsZXNzIGNvZGUuCiAg
ICAgICAgICAgICAKQEAgLTMxODYsMzAgKzMxODIsMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3RyaW5nIHNwZWN1bGF0aW9uIGhlcmUuCi0gICAg
ICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgIGNhc2UgVW50
eXBlZFVzZTogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAg
ICAgICAgCi0gICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgb3AxR1BSID0g
b3AxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
ICAgICAgICAgCi0gICAgICAgIG9wMS51c2UoKTsKKyAgICAgICAgICAgIG9wMS51c2UoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmICghKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlICYgfihTcGVjTnVtYmVyIHwgU3BlY0Jvb2xlYW4pKSkKLSAgICAgICAgICAgIG1faml0Lm1v
dmUob3AxR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Cisg
ICAgICAgICAgICBpZiAoIShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAm
IH4oU3BlY051bWJlciB8IFNwZWNCb29sZWFuKSkpCisgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShvcDFHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZl
ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KG5vdFByaW1pdGl2ZSwgdGhpcywgb3BlcmF0aW9uVG9QcmltaXRpdmUsIHJlc3VsdEdQUiwgb3Ax
R1BSKSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdFByaW1pdGl2ZSwgdGhpcywgb3Bl
cmF0aW9uVG9QcmltaXRpdmUsIHJlc3VsdEdQUiwgb3AxR1BSKSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRy
ZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zMjUxLDI1ICszMjUzLDIy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAg
ICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7CiAgICAgICAgICAg
ICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSkubV90
eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3YXkg
b2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5v
cmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlUmVncygpLCB1c2UsIFNwZWNSZWFsTnVtYmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIp
KTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUob3BGUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihkb3VibGUpICogb3BlcmFuZElkeCkp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7CisgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOwogICAgICAgICAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS0+aW5kZXhpbmdUeXBlKCkpICYm
ICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9w
R1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZVJlZ3Mob3BHUFIpLCB1c2UsIFNwZWNJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChvcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpT
VmFsdWUpICogb3BlcmFuZElkeCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMz
MTksMjUgKzMzMTgsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAg
ICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7CiAgICAgICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgICAgIGlmICghaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhl
c2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAgICAgICAv
LyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwg
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIERGR19UWVBFX0NI
RUNLKAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCB1c2UsIFNwZWNSZWFsTnVt
YmVyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwg
b3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKG9wRlBSLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1
ZmZlciArIG9wZXJhbmRJZHgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7CisgICAgICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbik7CiAgICAgICAgICAgICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS0+aW5kZXhpbmdUeXBlKCkpICYmICFpc0lu
dDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewotICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS0+
aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAor
ICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsIFNwZWNJbnQz
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTM1NTksMjQgKzM1NTUsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDb252ZXJ0VGhp
czogewotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIHRoaXNWYWx1ZSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNW
YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCkpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewor
ICAgICAgICBjYXNlIE90aGVyVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlz
VmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJl
ZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
aXNPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KSkgeworICAgICAgICAgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVj
T3RoZXIpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CisgICAg
ICAgICAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0
aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY090aGVyLAorICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpLCBzY3Jh
dGNoR1BSKTsKQEAgLTM1ODQsMzAgKzM1NzcsNDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkpKSB7CisgICAgICAgIGNhc2UgT2JqZWN0VXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUpOwogICAgICAgICAgICAgR1BS
UmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
aXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAg
ICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgT2JqZWN0VXNlLAorICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlz
VmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZSh0
aGlzVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwot
ICAgICAgICAKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgCi0gICAgICAgIEdQ
UlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29u
dmVydFRoaXMsIHJlc3VsdC5ncHIoKSwgdGhpc1ZhbHVlR1BSKTsKLSAgICAgICAgCi0gICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0g
dGhpc1ZhbHVlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VGhpcywgcmVzdWx0Lmdw
cigpLCB0aGlzVmFsdWVHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC0zNzc2LDggKzM3ODEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlv
bihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworCisgICAgICAgIHN3aXRjaCAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZTogewogICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAgICAg
CkBAIC0zNzkyLDIwICszNzk4LDI3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIAotICAgICAgICBiYXNlLnVzZSgpOworICAg
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8s
IGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICBiYXNlLnVz
ZSgpOwogICAgICAgICAKLSAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBi
YXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCk7Cisg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OwogICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUt
PmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigp
LCBub3RDZWxsKTsKICAgICAgICAgCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM4MTQsOCArMzgyNyw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwg
MCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7CisKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBD
ZWxsVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
IApAQCAtMzgzMywyMSArMzg0NywyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Cisg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKIAotICAgICAgICBHUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBiYXNlLnVzZSgp
OwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAg
ICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJv
LCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9u
WmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgCi0gICAg
ICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgcmVzdWx0R1BSLCBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwsIERvbnRTcGlsbCk7CisgICAgICAgICAg
ICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9k
ZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250U3BpbGwpOwogICAgICAgICAKLSAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7Ci0KKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzg3MSwxMyArMzg5Miw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewotICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUtPnN0cnVj
dHVyZVNldCgpKQotICAgICAgICAgICAgJiYgaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBl
KSkgewotICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAKICAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9u
ID0gbm9kZS0+b3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUgPyBGb3J3YXJkU3BlY3VsYXRp
b24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBkaXJlY3Rpb24pOwogICAgICAgICAKQEAgLTM5NDIs
NiArMzk1Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPSyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxl
cjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICAgICAg
bV9qaXQuYnJlYWtwb2ludCgpOwogICAgICAgICBpc09LLmxpbmsoJm1faml0KTsKKyNlbHNlCisg
ICAgICAgIHNwZWN1bGF0ZUNlbGwobm9kZS0+Y2hpbGQxKCkpOwogI2VuZGlmCiAgICAgICAgIAog
ICAgICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTM5NDksNiArMzk2NSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
UGhhbnRvbVB1dFN0cnVjdHVyZTogeworICAgICAgICBBU1NFUlQoaXNLbm93bkNlbGwobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgIAogICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVu
Y2VUcmFuc2l0aW9uKAogICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5jb2RlT3JpZ2luT3du
ZXIoKSwKQEAgLTQyNzEsNyArNDI4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFR5cGVPZjogewotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsK
QEAgLTQyODAsMTkgKzQyOTgsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZUp1bXBzOwogCiAgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IENlbGxVc2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSk7CiAK
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UodmFsdWVH
UFIpLCBub2RlLT5jaGlsZDEoKSwgaXNOb3RDZWxsKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0so
SlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCwgaXNOb3RD
ZWxsKTsKIAotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgp
LCBub3RTdHJpbmcpOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBTdHJpbmdVc2UpCisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVNvdXJj
ZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nLCBub3RTdHJpbmcpOwogICAg
ICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21h
bGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVK
dW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpICE9IFN0cmluZ1VzZSkgewogICAgICAgICAgICAgICAgIG5vdFN0cmlu
Zy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
eXBlT2YsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwogICAgICAgICAgICAgICAgIGRvbmVKdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKQEAgLTQzMDIsNyArNDMyMiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IFVudHlwZWRVc2UpIHsKICAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2pp
dCk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3ROdW1iZXIgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSwgcmVzdWx0R1BSKTsK
QEAgLTQ3NzEsNiArNDc5MSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBERkdfTk9ERV9ET19U
T19DSElMRFJFTihtX2ppdC5ncmFwaCgpLCBub2RlLCBzcGVjdWxhdGUpOworICAgICAgICBub1Jl
c3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAogICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgogICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCiAgICAgICAgIG5vUmVzdWx0KG5vZGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTQgKzEwOCwxNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIG1faml0LmFwcGVuZEV4aXRJ
bmZvKGp1bXBUb0ZhaWwpOwogICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9T
UkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiB9CiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwg
bV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1l
bnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwogfQogCkBAIC0xMjMsNyArMTIz
LDcgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogewogICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIo
KTsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2Rl
LT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y2FuRXhpdCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVy
T2ZPU1JFeGl0cygpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKCk7CiAgICAgbV9qaXQuY29k
ZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2pp
dC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1f
c3RyZWFtLT5zaXplKCkpKTsKQEAgLTEzMiw3ICsxMzIsNyBAQCBPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyIFNwZWN1bGF0aXZlSklUOjpzCiAKIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBFZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHJldHVybiBzcGVjdWxhdGlv
bkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIApAQCAtMTQw
LDE0ICsxNDAsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAog
ewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCht
X2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7Cisg
ICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBt
X2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wc1RvRmFpbCk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCkt
PmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgp
Lm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5z
aXplKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgY29u
c3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKIHsKLSAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOwor
ICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAg
c3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVt
cHNUb0ZhaWwpOwogfQogCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVu
dE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMg
fHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kU3BlY3VsYXRpb25S
ZWNvdmVyeShyZWNvdmVyeSk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFpbCk7
CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1Zh
bHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Io
bm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJP
ZlNwZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBT
cGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVCht
X2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25D
aGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVj
b3ZlcnkpOwogfQogCkBAIC0xNzQsMTEgKzE3NCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGlvbkNoZWNrKEV4CiAgICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCgp
OwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBlZGdlLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSwg
U3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHNwZWN1bGF0aW9uQ2hlY2so
a2luZCwganNWYWx1ZVNvdXJjZSwgZWRnZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5LCBk
aXJlY3Rpb24pOworfQorCiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNW
YWx1ZVNvdXJjZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxl
cjo6SnVtcExpc3QoKSk7CiAgICAgT1NSRXhpdCYgZXhpdCA9IG1faml0LmNvZGVCbG9jaygpLT5v
c3JFeGl0KAogICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0
KApAQCAtMjgwLDE0ICsyODUsMTQgQEAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3Vs
YXRpdmVKSQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhF
eGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVl
UmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9j
dXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNv
dXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CiAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJk
KHZhbHVlUmVjb3ZlcnkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NF
UlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0
aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcHNUb0ZhaWwpOwogICAgIGNv
bnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCh2YWx1ZVJlY292ZXJ5KTsKIH0KQEAgLTMwMCw5ICsz
MDUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwp
OwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBlZGdlLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cisg
ICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBlZGdlLm5vZGUoKSwganVt
cFRvRmFpbCwgZGlyZWN0aW9uKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJl
Z3MsIE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMg
fHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkK
ICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4iKTsKICNlbmRp
ZgpAQCAtMzE0LDEzICszMjQsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3Bl
Y3VsYXRpdgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgRWRnZSBub2RlVXNl
KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5v
ZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwg
bV9jYW5FeGl0KTsKICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihraW5kLCBqc1Zh
bHVlUmVncywgbm9kZVVzZS5ub2RlKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1Zh
bHVlUmVncywgTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewot
ICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNh
bkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5F
eGl0KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWN1
bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAjZW5kaWYKQEAgLTMzMCw2ICszNDAsMjYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdgogICAgIG1fY29tcGls
ZU9rYXkgPSBmYWxzZTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNrKEpTVmFs
dWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3sKKyAgICBBU1NFUlQobmVl
ZHNUeXBlQ2hlY2soZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSk7CisgICAgbV9zdGF0ZS5mb3JO
b2RlKGVkZ2UpLmZpbHRlcih0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgc291cmNlLCBlZGdlLCBqdW1wVG9GYWlsKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Zm9yd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCit7CisgICAg
dHlwZUNoZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKTsK
KyAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBl
ZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICB0
eXBlQ2hlY2soc291cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpOwor
ICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQorICAgICAgICBjb252ZXJ0
TGFzdE9TUkV4aXRUb0ZvcndhcmQoKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkU2xv
d1BhdGhHZW5lcmF0b3IoUGFzc093blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGhHZW5l
cmF0b3IpCiB7CiAgICAgbV9zbG93UGF0aEdlbmVyYXRvcnMuYXBwZW5kKHNsb3dQYXRoR2VuZXJh
dG9yLmxlYWtQdHIoKSk7CkBAIC04NzIsOSArOTAyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
YXJyYXlpZnkoTm9kZSogbm9kZQogICAgIGFycmF5aWZ5KG5vZGUsIGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpKTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2Rl
KiBub2RlKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShFZGdlIGVkZ2UpCiB7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdp
c3RlcigpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0
dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbklu
Zm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSkgewpAQCAtODg4LDcgKzkxOCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0
b3JhZ2UoTm9kZSoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gTXVzdCBiZSBhIGNl
bGw7IGZpbGwgaXQgYXMgYSBjZWxsIGFuZCB0aGVuIHJldHVybiB0aGUgcG9pbnRlci4KLSAgICAg
ICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKG5vZGUsIEJhY2t3YXJkU3BlY3VsYXRpb24pOwor
ICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSwgQmFja3dhcmRTcGVjdWxhdGlv
bik7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOiB7CkBAIC04
OTgsNyArOTI4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlKgog
ICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZpbGxTcGVjdWxh
dGVDZWxsKG5vZGUsIEJhY2t3YXJkU3BlY3VsYXRpb24pOworICAgICAgICByZXR1cm4gZmlsbFNw
ZWN1bGF0ZUNlbGwoZWRnZSwgQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgfQogfQogCkBAIC0x
NTA5LDIwICsxNTM5LDIwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJy
YW4KICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVydmVuaW5nIG5vZGVzIHRvIGFsc28gcmVm
ZXJlbmNlIHRoZSBjb21wYXJlLiAKICAgICAgICAgQVNTRVJUKG5vZGUtPmFkanVzdGVkUmVmQ291
bnQoKSA9PSAxKTsKIAotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgIGlm
IChub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKQogICAgICAgICAgICAgY29tcGlsZVBl
ZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlLCBjb25kaXRpb24pOwotICAgICAg
ICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICBlbHNlIGlmIChub2RlLT5pc0Jp
bmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZURvdWJs
ZUJyYW5jaChub2RlLCBicmFuY2hOb2RlLCBkb3VibGVDb25kaXRpb24pOwogICAgICAgICBlbHNl
IGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBub2RlLT5jaGlsZDIoKS0+c2hvdWxk
U3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtp
bmQoU3RyaW5nVXNlKSkgewogICAgICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVC
cmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0KCkpCisgICAgICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VL
aW5kKE9iamVjdFVzZSkpCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1
YWxpdHkobm9kZSwgYnJhbmNoTm9kZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09
IE9iamVjdE9yT3RoZXJVc2UpCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0
VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBi
cmFuY2hOb2RlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVPYmplY3RPck90aGVyKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0
ZU9iamVjdCgpKQorICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IE9iamVjdE9yT3RoZXJVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVj
dFVzZSkKICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3Ro
ZXJFcXVhbGl0eShub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQxKCksIGJyYW5jaE5vZGUpOwog
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZUJyYW5jaChub2RlLCBicmFuY2hOb2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CkBAIC0xNjQ1
LDYgKzE2NzUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgog
CiAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6
ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7CiAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9ja1tt
X2luZGV4SW5CbG9ja107CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBtX2NhbkV4aXQg
PSBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCk7CisjZW5kaWYKKyAgICAgICAgYm9vbCBzaG91bGRF
eGVjdXRlRWZmZWN0cyA9IG1fc3RhdGUuc3RhcnRFeGVjdXRpbmcobV9jdXJyZW50Tm9kZSk7CiAg
ICAgICAgIG1faml0LnNldEZvck5vZGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIG1fY29kZU9y
aWdpbkZvck9TUiA9IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgIGlmICghbV9j
dXJyZW50Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewpAQCAtMTcxMSw5ICsxNzQ1LDE3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dGKAorICAgICAgICAg
ICAgICAgICAgICAiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0
IEpJVCBvZmZzZXQgMHgleCIsCisgICAgICAgICAgICAgICAgICAgIChpbnQpbV9jdXJyZW50Tm9k
ZS0+aW5kZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
bi5ieXRlY29kZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQgZ2VuZXJh
dGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQpbV9jdXJy
ZW50Tm9kZS0+aW5kZXgoKSwgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4
LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAiKTsK
KyNlbHNlCisgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKICNlbmRpZgorICAgICAgICAg
ICAgfQogI2lmIERGR19FTkFCTEUoSklUX0JSRUFLX09OX0VWRVJZX05PREUpCiAgICAgICAgICAg
ICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKQEAgLTE3NTksNyArMTgwMSw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNlbmRpZgogICAgICAgICAKICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFic3RyYWN0IHN0YXRlIGlzIHJlbWF0ZXJpYWxp
emVkIGZvciB0aGUgbmV4dCBub2RlLgotICAgICAgICBtX3N0YXRlLmV4ZWN1dGUobV9pbmRleElu
QmxvY2spOworICAgICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVmZmVjdHMpCisgICAgICAgICAgICBt
X3N0YXRlLmV4ZWN1dGVFZmZlY3RzKG1faW5kZXhJbkJsb2NrKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChtX2N1cnJlbnROb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwpAQCAtMTkwNiwxMyArMTk0OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlRG91YmxlUHV0QnlWCiAKICAgICBGUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5mcHIo
KTsKICAgICAKLSAgICBpZiAoIWlzUmVhbE51bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9k
ZShjaGlsZDMpLm1fdHlwZSkpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3YXkgb2Yg
cHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KLSAgICAgICAg
Ly8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICBtX2ppdC5i
cmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZh
bHVlUmVnLCB2YWx1ZVJlZykpOwotICAgIH0KKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoKSwgY2hpbGQzLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgbV9qaXQuYnJh
bmNoRG91YmxlKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQsIHZhbHVlUmVnLCB2YWx1ZVJlZykpOwogICAgIAogICAgIGlmICghbV9jb21waWxl
T2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjEwNCw3ICsyMTQ0LDggQEAgR2VuZXJhdGVkT3Bl
cmFuZFR5cGUgU3BlY3VsYXRpdmVKSVQ6OmNoZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVUb0ludDMyKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKQEAgLTIxMTIsMTQ1ICsyMTUzLDE2MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFsdWVUb0ludDMyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKLSAgICAgICAgU3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQu
bW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmFuZDMyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIAotICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgc3dpdGNoIChjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOiB7
Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgbV9q
aXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlLCBvcDEuZm9ybWF0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZERvdWJsZTogewotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgRG91YmxlVXNlKSk7IC8vIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgd2lsbCBhc3NlcnQgdGhhdCB0aGlzIGlzIGEgZG91YmxlIHVzZS4gV2UgZm9y
Y2UgaXQgdG8gdGhpbmsgdGhhdCBpdCB3YXMgYSBkb3VibGUgdXNlLCBzaW5jZSB3ZSBhcmUgaW5m
ZXJyaW5nIHRoYXQgd2Ugb3VnaHQgdG8gZW1pdCBhIGRvdWJsZSB1c2UgcXVpdGUgbGF0ZS4KLSAg
ICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlc3Vs
dC5ncHIoKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VHJ1bmNhdGVkVG9JbnRlZ2Vy
ID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxl
cjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgY2Fz
ZSBOb3RDZWxsVXNlOiB7CisgICAgICAgIHN3aXRjaCAoY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9J
bnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgIGNhc2UgR2VuZXJhdGVkT3Bl
cmFuZEludGVnZXI6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSwgQmFja3dhcmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsK
KyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG9wMS5mb3JtYXQoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVy
YW5kRG91YmxlOiB7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAg
ICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCks
IEJhY2t3YXJkU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
ICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJl
c3VsdC5ncHIoKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRv
SW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklU
Q29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgCi0gICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIs
IHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBn
cHIsIGZwcikpOwogCi0gICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBub2RlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRKU1ZhbHVlOiB7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0
KGdwciwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBHZW5lcmF0ZWRPcGVyYW5kSlNWYWx1ZTogeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogCi0gICAg
ICAgIEdQUlJlZyBncHIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOwotICAgICAg
ICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7Ci0KLSAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUt
PmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IG9wMS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZw
cigpOworCisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBncHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29u
dmVydGVkOworCisgICAgICAgICAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCks
IFNwZWNOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBOdW1iZXJVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZUNoZWNrKAorICAg
ICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIFNw
ZWNOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
bV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiBTcGVjQ2VsbCkKLSAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIp
LCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBn
cHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgICAgICAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGdwciksIG5v
ZGUtPmNoaWxkMSgpLCB+U3BlY0NlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0NjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Olpl
cm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBjZWxsOiBzbyB0cnVlIHR1cm5zIGludG8gMSBh
bmQgYWxsIGVsc2UgdHVybnMgaW50byAwLgotICAgICAgICAgICAgICAgIG1faml0LmNvbXBhcmU2
NChKSVRDb21waWxlcjo6RXF1YWwsIGdwciwgVHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIHJlc3Vs
dEdwcik7Ci0gICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwor
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50
byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCisgICAgICAgICAgICAgICAgICAgIG1faml0
LmNvbXBhcmU2NChKSVRDb21waWxlcjo6RXF1YWwsIGdwciwgVHJ1c3RlZEltbTMyKFZhbHVlVHJ1
ZSksIHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9q
aXQuanVtcCgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpc051bWJlci5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICAv
LyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNW
YWx1ZQotICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsKLSAgICAgICAgdW5ib3hE
b3VibGUocmVzdWx0R3ByLCBmcHIpOworICAgICAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBo
ZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoZ3ByLCByZXN1bHRHcHIpOworICAgICAgICAgICAgdW5ib3hEb3VibGUocmVzdWx0
R3ByLCBmcHIpOwogCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOwotICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7CisgICAgICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0
b0ludDMyLCByZXN1bHRHcHIsIGZwcik7CisgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdwcik7CiAKLSAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAg
IGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRy
KGdwciwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Cisg
ICAgICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHIsIHJlc3VsdEdwcik7CiAKLSAg
ICAgICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGNvbnZlcnRlZC5saW5r
KCZtX2ppdCk7CiAjZWxzZQotICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBjaGls
ZE5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgIE5vZGUqIGNo
aWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBjaGlsZE5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAg
ICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CiAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOwotICAg
ICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdwciA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBjb252ZXJ0ZWQ7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29udmVy
dGVkOwogCi0gICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpT
SW50ZWdlcikKLSAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigp
OwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXBGcHIodGhpcyk7Ci0gICAgICAgICAgICBG
UFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSk7Ci0KLSAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRh
Z0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKKyAgICAg
ICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcikK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQ
UigpOworICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOworICAgICAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOworICAgICAgICAgICAgICAgIEZQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworCisgICAgICAgICAgICAg
ICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFn
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
TnVtYmVyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSAmIFNwZWNDZWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVf
Q0hFQ0soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnR1BSLCBw
YXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2VsbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gSXQn
cyBub3QgYSBjZWxsOiBzbyB0cnVlIHR1cm5zIGludG8gMSBhbmQgYWxsIGVsc2UgdHVybnMgaW50
byAwLgotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Jvb2xlYW4gPSBt
X2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkJvb2xlYW5UYWcpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlc3VsdEdwcik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90
IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8gMC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQm9vbGVhbiA9IG1f
aml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Qm9vbGVhblRhZykpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb252
ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpc0Jvb2xlYW4ubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlzQm9vbGVhbi5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb252
ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHVuYm94RG91YmxlKHRh
Z0dQUiwgcGF5bG9hZEdQUiwgZnByLCBzY3JhdGNoLmZwcigpKTsKKyAgICAgICAgICAgICAgICB1
bmJveERvdWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CiAKLSAg
ICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3VsdEdwciwgZnByKTsKLSAgICAgICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOworICAgICAgICAgICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKIAotICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVt
cCgpKTsKIAotICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAg
IG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAgICBpc0lu
dGVnZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQ
UiwgcmVzdWx0R3ByKTsKIAotICAgICAgICAgICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICB9CiAjZW5kaWYKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHcHIsIG5vZGUpOwor
ICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHcHIsIG5vZGUpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZFR5cGVVbmtu
b3duOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGNhc2UgQm9vbGVhblVzZTog
eworICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgIAor
ICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9q
aXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgCisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRUeXBlVW5rbm93bjoK
KworICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQogfQogCkBAIC0yMzI2LDE0ICsy
Mzg0LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmwKICNlbmRp
ZgogICAgIAogICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgQmFja3dhcmRTcGVjdWxhdGlvbiwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAg
ICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1bHQuZnByKCkp
OwogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
ICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0yMzQ2LDE1ICsyNDA0LDE1IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmwKICAgICBKSVRDb21waWxlcjo6SnVtcCBp
c0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIAot
ICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZSkpIHsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNw
ZWNOdW1iZXIpKSB7CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEZvcndhcmRJbnQzMlRvRG91
YmxlKSB7Ci0gICAgICAgICAgICBmb3J3YXJkU3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
ICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCks
CisgICAgICAgICAgICBmb3J3YXJkVHlwZUNoZWNrKAorICAgICAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjTnVtYmVyLAogICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLAogICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluR1BSKG9wMUdQUiwgRGF0YUZvcm1hdEpTKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAorICAgICAgICAgICAgdHlwZUNoZWNrKAorICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjTnVt
YmVyLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTI1MzgsNDkgKzI1OTYsNjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHRvSW50MzIoZCkpLCBz
Y3JhdGNoUmVnKTsKICAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7CiAgICAgICAgIHZhbHVl
R1BSID0gc2NyYXRjaFJlZzsKLSAgICB9IGVsc2UgaWYgKHZhbHVlVXNlLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0
aGlzLCB2YWx1ZVVzZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAg
ICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIG1faml0Lm1v
dmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgIGlmIChyb3VuZGluZyA9PSBD
bGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0g
ICAgICAgICAgICBjb21waWxlQ2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsK
LSAgICAgICAgfQotICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKLSAgICAgICAgdmFsdWVH
UFIgPSBzY3JhdGNoUmVnOwotICAgIH0gZWxzZSBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGlu
ZykgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhp
cyk7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigpOwotICAgICAgICBHUFJSZWcg
Z3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUobV9q
aXQsIGdwciwgZnByLCBmbG9hdFNjcmF0Y2guZnByKCkpOwotICAgICAgICB2YWx1ZS5hZG9wdChy
ZXN1bHQpOwotICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKICAgICB9IGVsc2UgewotICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5m
cHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm90TmFOID0gbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVFcXVhbCwgZnByLCBmcHIpOwotICAgICAgICBtX2ppdC54b3JQdHIoZ3ByLCBncHIp
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmaXhlZCA9IG1faml0Lmp1bXAoKTsKLSAg
ICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWlsZWQ7Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCi0g
ICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnBy
LCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1Vp
bnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwot
ICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGZhaWxl
ZCwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKLQotICAgICAgICBmaXhlZC5saW5rKCZtX2pp
dCk7Ci0gICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7Ci0gICAgICAgIHZhbHVlR1BSID0gZ3By
OworICAgICAgICBzd2l0Y2ggKHZhbHVlVXNlLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIElu
dDMyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRo
aXMsIHZhbHVlVXNlKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAg
ICAgbV9qaXQubW92ZSh2YWx1ZU9wLmdwcigpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIGlm
IChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVs
ZW1lbnRTaXplID09IDEpOworICAgICAgICAgICAgICAgIGNvbXBpbGVDbGFtcEludGVnZXJUb0J5
dGUobV9qaXQsIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWUu
YWRvcHQoc2NyYXRjaCk7CisgICAgICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVt
YmVyVXNlOiB7CisgICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOworICAgICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICAgICAgRlBS
VGVtcG9yYXJ5IGZsb2F0U2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnBy
ID0gdmFsdWVPcC5mcHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0Lmdw
cigpOworICAgICAgICAgICAgICAgIGNvbXBpbGVDbGFtcERvdWJsZVRvQnl0ZShtX2ppdCwgZ3By
LCBmcHIsIGZsb2F0U2NyYXRjaC5mcHIoKSk7CisgICAgICAgICAgICAgICAgdmFsdWUuYWRvcHQo
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRo
aXMsIHZhbHVlVXNlKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigpOworICAgICAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm90TmFOID0gbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVFcXVhbCwgZnByLCBmcHIpOworICAgICAgICAgICAgICAgIG1faml0LnhvclB0cihn
cHIsIGdwcik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZml4ZWQgPSBt
X2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7
CisgICAgICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAg
ICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0lu
dDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5i
cmFuY2hUcnVuY2F0ZURvdWJsZVRvVWludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJh
bmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGZhaWxlZCwgdGhpcywgdG9JbnQzMiwg
Z3ByLCBmcHIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmaXhlZC5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgIH0KKyAgICAKICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlR1BSLCB2YWx1ZUdQUiAh
PSBwcm9wZXJ0eSk7CiAgICAgQVNTRVJUKHZhbHVlR1BSICE9IGJhc2UpOwogICAgIEFTU0VSVCh2
YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKQEAgLTI3MjIsOCArMjc5NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mRm8KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUluc3RhbmNlT2YoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoKCEhKG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpICYmICEhKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlICYgflNwZWNDZWxsKSkKLSAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCkt
PmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKSB7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlKSB7CiAgICAgICAgIC8vIEl0IG1pZ2h0IG5vdCBiZSBhIGNlbGwu
IFNwZWN1bGF0ZSBsZXNzIGFnZ3Jlc3NpdmVseS4KICAgICAgICAgLy8gT3I6IGl0IG1pZ2h0IG9u
bHkgYmUgdXNlZCBvbmNlIChpLmUuIGJ5IHVzKSwgc28gd2UgZ2V0IHplcm8gYmVuZWZpdAogICAg
ICAgICAvLyBmcm9tIHNwZWN1bGF0aW5nIGFueSBtb3JlIGFnZ3Jlc3NpdmVseSB0aGFuIHdlIGFi
c29sdXRlbHkgbmVlZCB0by4KQEAgLTI5NjEsOSArMzAzMywxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlU29mdE1vZHVsbyhOCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
ZGQoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsK
KyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZO
dW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAg
IGludDMyX3QgaW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApAQCAt
Mjk3OSw3ICszMDUyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBu
bwogICAgICAgICAgICAgICAgIAogICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFs
dWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAg
ICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5h
cml0aE5vZGVGbGFncygpKSkgewpAQCAtMzAyMSw4ICszMDk0LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3Vs
dCwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgICAgIAotICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIAorICAgIGNhc2UgTnVtYmVyVXNl
OiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKQEAg
LTMwMzQsMjIgKzMxMDcsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2Rl
KiBubwogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLQotICAgIGlmIChub2RlLT5vcCgpID09IFZhbHVlQWRkKSB7CisgICAg
ICAgIAorICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LT5vcCgpID09IFZhbHVlQWRkKTsKICAgICAgICAgY29tcGlsZVZhbHVlQWRkKG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0aGlzIHll
dC4gOi0oCi0gICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIDApOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2RlKiBub2RlKQogewotICAgIGlmICht
X2ppdC5ncmFwaCgpLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICBzd2l0
Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAg
ICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRl
SW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewpAQCAtMzA2OSw3ICszMTQ2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkgewotICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZk51bWJlckNvbnN0YW50
QXNJbnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0x
ID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIApA
QCAtMzA5NywyMCArMzE3NCwyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhT
dWIoTm9kCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOworICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBGUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIo
KTsKLSAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAgICBtX2ppdC5zdWJEb3VibGUocmVn
MSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7
CisgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5zdWJEb3Vi
bGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQu
ZnByKCksIG5vZGUpOworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0K
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKE5vZGUqIG5vZGUpCiB7
Ci0gICAgaWYgKG1faml0LmdyYXBoKCkubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
KSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBJ
bnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCkBAIC0z
MTI4LDE3ICszMjE0LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0
ZSgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0KLSAgICBtX2ppdC5uZWdhdGVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnBy
KCkpOwotCi0gICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgY2FzZSBO
dW1iZXJVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAg
ICAKKyAgICAgICAgbV9qaXQubmVnYXRlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kZSogbm9kZSkKIHsKLSAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAg
c3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0zMTY5LDE3ICszMjY0
LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
LSAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgIEZQUlJlZyBy
ZWcxID0gb3AxLmZwcigpOwotICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwogICAgICAgICAK
LSAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICBjYXNl
IE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEs
IG9wMik7CiAgICAgICAgIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwor
ICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJlZzIgPSBv
cDIuZnByKCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnBy
KCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47
CisgICAgfQogfQogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKQEAgLTMyODksMjUgKzMz
OTIsMzMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJBcml0aAogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICYmIG5vZGUtPmNhblNwZWN1
bGF0ZUludGVnZXIoKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Cisg
ICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBjb21waWxlU29mdE1vZHVsbyhub2RlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAg
ICAgICAgCi0gICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgb3AyRlBS
ID0gb3AyLmZwcigpOworICAgICAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZwcigpOworICAgICAg
ICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOwogICAgICAgICAKLSAgICBmbHVzaFJlZ2lzdGVy
cygpOworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAKLSAgICBGUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOwotCi0gICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24sIHJl
c3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOworICAgICAgICBGUFJSZXN1bHQgcmVzdWx0KHRo
aXMpOworICAgICAgICAKKyAgICAgICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24s
IHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOwogICAgICAgICAKLSAgICBkb3VibGVSZXN1
bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIo
KSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRo
IGEgc3Vic2VxdWVudCBicmFuY2guCkBAIC0zMzE2LDMzICszNDI3LDMzIEBAIGJvb2wgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSogbm9kZSwKICAgICBpZiAoY29tcGlsZVBlZXBIb2xlQnJh
bmNoKG5vZGUsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uLCBvcGVyYXRpb24pKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIGlmIChu
b2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7CiAgICAgICAgIGNvbXBpbGVJbnRlZ2Vy
Q29tcGFyZShub2RlLCBjb25kaXRpb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisKKyAgICBpZiAobm9kZS0+aXNCaW5h
cnlVc2VLaW5kKE51bWJlclVzZSkpIHsKICAgICAgICAgY29tcGlsZURvdWJsZUNvbXBhcmUobm9k
ZSwgZG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAK
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBub2RlLT5jaGlsZDIoKS0+c2hvdWxk
U3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChT
dHJpbmdVc2UpKSB7CiAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFy
ZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KLQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgewor
ICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKSB7
CiAgICAgICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE9iamVjdFVzZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0
T3JPdGhlclVzZSkgewogICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVx
dWFsaXR5KG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IE9iamVjdE9yT3RoZXJVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9i
amVjdFVzZSkgewogICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFs
aXR5KG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KQEAgLTM0MzAsNyArMzU0MSw4IEBAIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0
cmljdEVxKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAg
c3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAg
ICAgICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNo
KCk7CiAgICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKICAgICAg
ICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
LT5hdChicmFuY2hJbmRleEluQmxvY2spOwpAQCAtMzQ0NCw4ICszNTU2LDggQEAgYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21waWxlSW50ZWdlckNv
bXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAKKyAg
ICBjYXNlIE51bWJlclVzZTogewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sg
PSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2Nr
ICE9IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3Jh
cGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKQEAgLTM0NTks
MTAgKzM1NzEsMTIgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAog
ICAgICAgICBjb21waWxlRG91YmxlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
RXF1YWwpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAKKyAgICBjYXNlIFN0cmluZ1VzZTogewog
ICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKLSAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPYmpl
Y3RVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVl
cEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01B
WCkgewogICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9j
a3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CkBAIC0zNDc2LDggKzM1OTAsMTUg
QEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21w
aWxlT2JqZWN0RXF1YWxpdHkobm9kZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7CisgICAgICAgIAor
ICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJp
Y3RFcShub2RlKTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
KE5vZGUqIG5vZGUpCkBAIC0zODE1LDYgKzM5MzYsMjQxIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6dGVtcG9yYXJ5UmVnaXN0ZXIKICAgICByZXR1cm4gdGVtcG9yYXJ5LmdwcigpOwogfQogCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVJbnQzMihFZGdlIGVkZ2UpCit7CisgICAgaWYg
KCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjSW50MzIpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgKFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKK30KKwor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTnVtYmVyKEVkZ2UgZWRnZSkKK3sKKyAgICBp
ZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNOdW1iZXIpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
b3BlcmFuZC5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICB0eXBl
Q2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCBTcGVjTnVt
YmVyLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9w
ZXJhbmQuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgIGlzSW50
ZWdlci5saW5rKCZtX2ppdCk7CisjZWxzZQorICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBl
ZGdlKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wZXJhbmQudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZykpOworICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3Bl
cmFuZC50YWdHUFIoKSwgb3AxLm9wZXJhbmQoKSksIGVkZ2UsIFNwZWNOdW1iZXIsCisgICAgICAg
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wZXJhbmQudGFn
R1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgaXNJbnRlZ2Vy
LmxpbmsoJm1faml0KTsKKyNlbmRpZgorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVSZWFsTnVtYmVyKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2Us
IFNwZWNSZWFsTnVtYmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBGUFJSZWcgZnByID0gb3BlcmFu
ZC5mcHIoKTsKKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgZWRn
ZSwgU3BlY1JlYWxOdW1iZXIsCisgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmcHIsIGZwcikp
OworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRnZSkK
K3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNCb29sZWFuKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIChTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCh0aGlzLCBlZGdlKSku
Z3ByKCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwoRWRnZSBlZGdl
KQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgKFNwZWN1bGF0ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIo
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSkK
K3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdl
KTsKKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIo
KSksIGVkZ2UsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cGVyYW5kLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBT
cGVjT2JqZWN0IHwgU3BlY090aGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFs
dWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
KyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgZ3ByID0gb3BlcmFuZC5n
cHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0
KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpOworICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVy
YW5kLmdwcigpKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQ
dHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZ3ByLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOworICAgIG5vdENlbGwubGluaygmbV9qaXQpOworICAgIGlmIChu
ZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKKyAgICAgICAgbV9q
aXQubW92ZShncHIsIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCB0ZW1wR1BSKTsKKyAgICAgICAgCisg
ICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIFNw
ZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOworICAgIH0KKyAg
ICBkb25lLmxpbmsoJm1faml0KTsKKyNlbHNlCisgICAgR1BSUmVnIHRhZ0dQUiA9IG9wZXJhbmQu
dGFnR1BSKCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcGVyYW5kLnBheWxvYWRHUFIoKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0KKyAgICAgICAgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVSZWdzKG9w
ZXJhbmQuZ3ByKCkpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5j
aFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIG5vdENlbGwubGluaygmbV9qaXQpOwor
ICAgIGlmIChuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKKyAg
ICAgICAgbV9qaXQubW92ZSh0YWdHUFIsIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMigxKSwgdGVtcEdQUik7CisgICAgICAgIAorICAgICAgICB0eXBlQ2hlY2soCisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCByaWdodENoaWxkLCBT
cGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7Cisg
ICAgfQorICAgIGRvbmUubGluaygmbV9qaXQpOworI2VuZGlmCit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhlZGdlLCBTcGVjU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CisgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCBTcGVjU3RyaW5nLCBt
X2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3BlcmFuZC5ncHIoKSwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Cit9
CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU5vdENlbGwoRWRnZSBlZGdlKQorewor
ICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgflNwZWNDZWxsKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHR5cGVDaGVjaygKKyAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsIH5TcGVjQ2VsbCwKKyAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdDY0KAorICAgICAgICAgICAgSklUQ29tcGlsZXI6Olplcm8sIG9w
ZXJhbmQuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICB0eXBl
Q2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wZXJhbmQucGF5
bG9hZEdQUigpKSwgZWRnZSwgflNwZWNDZWxsLAorICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwgb3BlcmFuZC50YWdHUFIoKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisjZW5kaWYKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlT3RoZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2so
ZWRnZSwgU3BlY090aGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVy
YW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBH
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2ppdC5tb3ZlKG9wZXJhbmQuZ3ByKCksIHRlbXBH
UFIpOworICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0Jp
dFVuZGVmaW5lZCksIHRlbXBHUFIpOworICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJl
Z3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsIFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNo
NjQoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKKyNlbHNl
CisgICAgbV9qaXQubW92ZShvcGVyYW5kLnRhZ0dQUigpLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5v
cjMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcEdQUik7CisgICAgdHlwZUNoZWNrKAorICAgICAgICBK
U1ZhbHVlUmVncyhvcGVyYW5kLnRhZ0dQUigpLCBvcGVyYW5kLnBheWxvYWRHUFIoKSksIGVkZ2Us
IFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyNlbmRpZiAg
ICAKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZGdlIGVkZ2Up
Cit7CisgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgIGNhc2UgVW50eXBlZFVzZToK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICBBU1NFUlQo
IW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQzMikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEtub3duTnVtYmVyVXNlOgorICAgICAgICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2Us
IFNwZWNOdW1iZXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93bkNlbGxVc2U6Cisg
ICAgICAgIEFTU0VSVCghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgc3BlY3VsYXRlSW50MzIoZWRnZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAgc3BlY3Vs
YXRlUmVhbE51bWJlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOdW1iZXJVc2U6
CisgICAgICAgIHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBCb29sZWFuVXNlOgorICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENlbGxVc2U6CisgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVPYmpl
Y3QoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBTdHJpbmdVc2U6CisgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBOb3RDZWxsVXNlOgorICAgICAgICBzcGVjdWxhdGVOb3RDZWxsKGVk
Z2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE90aGVyVXNlOgorICAgICAgICBzcGVjdWxh
dGVPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTQzMjc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjEsMTMgKzEyMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgR1BSUmVnIGZpbGxJbnRlZ2VyKE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQp
OworICAgIEdQUlJlZyBmaWxsSW50ZWdlcihFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKKyAg
ICBHUFJSZWcgZmlsbEpTVmFsdWUoRWRnZSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IGJvb2wgZmlsbEpTVmFsdWUoTm9kZSosIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYpOworICAg
IGJvb2wgZmlsbEpTVmFsdWUoRWRnZSwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7CiAjZW5k
aWYKLSAgICBHUFJSZWcgZmlsbFN0b3JhZ2UoTm9kZSopOworICAgIEdQUlJlZyBmaWxsU3RvcmFn
ZShFZGdlKTsKIAogICAgIC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgog
ICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKQpAQCAtMjk1LDExICsyOTUsMTEgQEAgcHVibGljOgog
CiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBzcGVjdWxhdGl2ZSBvcGVyYW5kIHR5cGVzLCBiZWxvdywg
dG8gZmlsbCBvcGVyYW5kIHRvCiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGltcGxpY2l0bHkg
Z2VuZXJhdGluZyBzcGVjdWxhdGlvbiBjaGVja3MgYXMgbmVlZGVkLgotICAgIEdQUlJlZyBmaWxs
U3BlY3VsYXRlSW50KE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKik7Ci0g
ICAgRlBSUmVnIGZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9u
KTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0
aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9u
RGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludChFZGdlLCBEYXRhRm9ybWF0
JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNw
ZWN1bGF0ZUludFN0cmljdChFZGdlKTsKKyAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShF
ZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxs
KEVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJv
b2xlYW4oRWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwogICAgIEdlbmVyYXRlZE9wZXJhbmRU
eXBlIGNoZWNrR2VuZXJhdGVkVHlwZUZvclRvSW50MzIoTm9kZSopOwogCiAgICAgdm9pZCBhZGRT
bG93UGF0aEdlbmVyYXRvcihQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPik7CkBAIC01NDAs
MTIgKzU0MCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBu
b2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQog
ICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9q
aXQuZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChub2RlKTsgfQogICAgIGRvdWJsZSB2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZOdW1iZXJDb25z
dGFudEFzSW50MzIoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7
Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUp
KTsKLSAgICB9CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICB2b2lkKiBhZGRyZXNzT2ZEb3Vi
bGVDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25z
dGFudChub2RlKTsgfQogI2VuZGlmCkBAIC0yMDIzLDkgKzIwMTcsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU9iamVj
dFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQp
OwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVPYmpl
Y3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNr
KTsKKyAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlKTsK
ICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKLSAgICB2b2lkIGVtaXRPYmplY3RP
ck90aGVyQnJhbmNoKEVkZ2UgdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90
VGFrZW4sIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOworICAgIHZvaWQgZW1pdE9iamVjdE9y
T3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RU
YWtlbik7CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUqKTsKICAgICAKICAgICB2b2lkIGNvbXBp
bGVJbnRlZ2VyQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24pOwpAQCAtMjE3OCw3ICsyMTcyLDkgQEAgcHVibGljOgogICAgIHZvaWQgZm9yd2FyZFNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiA9IFZhbHVlUmVjb3Zlcnko
KSk7CiAgICAgdm9pZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNv
dXJjZSwgTm9kZSosIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWws
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKICAgICB2b2lkIHNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgdm9pZCBzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgdm9pZCBzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uKTsKKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFs
dWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNw
ZWN1bGF0aW9uUmVjb3ZlcnkmLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgLy8gQ2FsbGVk
IHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFp
bC4KICAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1Zh
bHVlUmVncywgTm9kZSopOwogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
RXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBFZGdlKTsKQEAgLTIxODgsNiArMjE4NCwyNCBAQCBwdWJs
aWM6CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogZm9yd2FyZFNwZWN1bGF0aW9uV2F0
Y2hwb2ludChFeGl0S2luZCA9IFVuY291bnRhYmxlV2F0Y2hwb2ludCk7CiAgICAgSnVtcFJlcGxh
Y2VtZW50V2F0Y2hwb2ludCogc3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kLCBTcGVjdWxh
dGlvbkRpcmVjdGlvbik7CiAgICAgCisgICAgLy8gSGVscGVycyBmb3IgcGVyZm9ybWluZyB0eXBl
IGNoZWNrcyBvbiBhbiBlZGdlIHN0b3JlZCBpbiB0aGUgZ2l2ZW4gcmVnaXN0ZXJzLgorICAgIGJv
b2wgbmVlZHNUeXBlQ2hlY2soRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRo
cm91Z2gpIHsgcmV0dXJuIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZXNQYXNz
ZWRUaHJvdWdoOyB9CisgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVk
Z2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsKTsKKyAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNv
dXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdo
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5Jik7
CisgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMy
KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKEVkZ2UpOworICAgIHZvaWQgc3BlY3Vs
YXRlUmVhbE51bWJlcihFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSk7Cisg
ICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVk
Z2UpOworICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlKTsKKyAgICB2b2lkIHNw
ZWN1bGF0ZVN0cmluZyhFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU5vdENlbGwoRWRnZSk7Cisg
ICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZShOb2RlKiwg
RWRnZSk7CisgICAgCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlE
ZXNjcmlwdG9yKEFycmF5TW9kZSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcFNs
b3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcFdpdGhJbmRleGluZ1R5cGVSZWcsIEFy
cmF5TW9kZSwgSW5kZXhpbmdUeXBlLCBib29sIGludmVydCk7CkBAIC0yMTk3LDcgKzIyMTEsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhcnJheWlmeShOb2RlKik7CiAgICAgCiAgICAgdGVtcGxhdGU8
Ym9vbCBzdHJpY3Q+Ci0gICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlKiwg
RGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgR1BS
UmVnIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3Jt
YXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAKICAgICAvLyBJdCBpcyBwb3NzaWJsZSwg
ZHVyaW5nIHNwZWN1bGF0aXZlIGdlbmVyYXRpb24sIHRvIHJlYWNoIGEgc2l0dWF0aW9uIGluIHdo
aWNoIHdlCiAgICAgLy8gY2FuIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIGEgc3BlY3VsYXRpb24gd2ls
bCBmYWlsIChmb3IgZXhhbXBsZSwgd2hlbiB0d28gbm9kZXMKQEAgLTIyNDcsNiArMjI2MSw5IEBA
IHB1YmxpYzoKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KICAgICBC
bG9ja0luZGV4IG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgYm9vbCBtX2NhbkV4aXQ7CisjZW5kaWYKICAgICB1bnNpZ25lZCBtX2lu
ZGV4SW5CbG9jazsKICAgICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgog
ICAgIFZlY3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87CkBAIC0yMzA1
LDE3ICsyMzIyLDE3IEBAIHB1YmxpYzoKIAogY2xhc3MgSW50ZWdlck9wZXJhbmQgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2Ug
dXNlKQorICAgIGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNw
ZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5v
ZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJ
bnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Zvcm1hdChEYXRhRm9y
bWF0Tm9uZSkKICNlbmRpZgogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAg
QVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKTsK
KyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoZWRnZS5ub2RlKCkpKQogICAgICAgICAgICAgZ3By
KCk7CiAgICAgfQogCkBAIC0yMzI1LDkgKzIzNDIsMTQgQEAgcHVibGljOgogICAgICAgICBtX2pp
dC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAKKyAgICBFZGdlIGVkZ2UoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CisgICAgCiAgICAgTm9kZSog
bm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1
cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBEYXRhRm9ybWF0IGZvcm1hdCgpCkBAIC0y
MzQwLDI3ICsyMzYyLDI3IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAg
ICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9n
cHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEludGVnZXIobm9kZSgpLCBtX2Zvcm1hdCk7CisgICAg
ICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSW50ZWdlcihtX2VkZ2UsIG1fZm9y
bWF0KTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2
b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1f
aml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQq
IG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcg
bV9ncHJPckludmFsaWQ7CiAgICAgRGF0YUZvcm1hdCBtX2Zvcm1hdDsKIH07CiAKIGNsYXNzIEpT
VmFsdWVPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVj
dWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKKyAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChT
cGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9k
ZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0g
ICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQog
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTIzNjgsMTQgKzIzOTAsMTQgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNl
LnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOworICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlw
ZWRVc2UpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1f
bm9kZSkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBn
cHIoKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIG1fcmVnaXN0ZXIucGFpci50
YWdHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgICAgICBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQ
UiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisg
ICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBmaWxsKCk7CiAj
ZW5kaWYKICAgICB9CkBAIC0yMzk2LDE3ICsyNDE4LDIyIEBAIHB1YmxpYzoKICAgICAgICAgfQog
I2VuZGlmCiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAg
ICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAg
ICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9n
cHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUobm9kZSgpKTsKKyAgICAgICAgICAgIG1f
Z3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxKU1ZhbHVlKG1fZWRnZSk7CiAgICAgICAgIHJldHVy
biBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKQpA
QCAtMjQxOSw3ICsyNDQ2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbCgpCiAgICAgewogICAg
ICAgICBpZiAobV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnICYmIG1fcmVn
aXN0ZXIucGFpci5wYXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2lz
RG91YmxlID0gIW1faml0LT5maWxsSlNWYWx1ZShub2RlKCksIG1fcmVnaXN0ZXIucGFpci50YWdH
UFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7CisgICAgICAg
ICAgICBtX2lzRG91YmxlID0gIW1faml0LT5maWxsSlNWYWx1ZShtX2VkZ2UsIG1fcmVnaXN0ZXIu
cGFpci50YWdHUFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7
CiAgICAgfQogCiAgICAgR1BSUmVnIHRhZ0dQUigpCkBAIC0yNDUxLDEyICsyNDc4LDEyIEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2Rl
KTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBT
cGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdl
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKQEAgLTI0NzMsMTQgKzI1MDAsMTQgQEAgcHJpdmF0ZToKIAogY2xh
c3MgU3RvcmFnZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5k
KFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVy
YW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKICAgICAgICAgOiBtX2ppdChqaXQp
Ci0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAg
ICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7
Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVChlZGdl
LnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVz
ZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIo
KTsKICAgICB9CiAgICAgCkBAIC0yNDkwLDI2ICsyNTE3LDMxIEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogICAgIAorICAgIEVkZ2UgZWRn
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KKyAgICAKICAg
ICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAg
ICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkK
ICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAg
ICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2Uobm9kZSgpKTsKKyAg
ICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGVkZ2UoKSk7CiAg
ICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2Uo
KQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNl
KG5vZGUoKSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9q
aXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dw
ck9ySW52YWxpZDsKIH07CiAKQEAgLTI2NDEsOSArMjY3Myw5IEBAIHByaXZhdGU6CiAKIGNsYXNz
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICBleHBsaWNp
dCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2Us
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9w
ZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikK
ICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAg
ICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJl
ZykKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9mb3JtYXQoRGF0YUZvcm1hdE5vbmUpCkBA
IC0yNjUxLDggKzI2ODMsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0
aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51
c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2Rl
KSkKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VLaW5kKCkg
PT0gS25vd25JbnQzMlVzZSkpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQog
ICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yNjYxLDEwICsyNjkzLDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwogICAg
ICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CisgICAgCisgICAgRWRn
ZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAg
ICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAg
ICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBEYXRhRm9ybWF0IGZvcm1h
dCgpCkBAIC0yNjc3LDE4ICsyNzE0LDE4IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkKICAg
ICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAg
ICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludChub2RlKCksIG1f
Zm9ybWF0LCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0
LT5maWxsU3BlY3VsYXRlSW50KGVkZ2UoKSwgbV9mb3JtYXQsIG1fZGlyZWN0aW9uKTsKICAgICAg
ICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAg
ICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9k
ZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAg
IE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFs
aWQ7CiAgICAgRGF0YUZvcm1hdCBtX2Zvcm1hdDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBt
X2RpcmVjdGlvbjsKQEAgLTI2OTYsMTQgKzI3MzMsMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UpCisgICAg
ZXhwbGljaXQgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQs
IEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFu
ZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNl
Lm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxp
ZChJbnZhbGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAg
QVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRn
ZS51c2VLaW5kKCkgPT0gS25vd25JbnQzMlVzZSkpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yNzEyLDQxICsyNzQ5
LDQ2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRH
UFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9Cisg
ICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7
CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBHUFJS
ZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BS
UmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUlu
dFN0cmljdChub2RlKCkpOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+Zmls
bFNwZWN1bGF0ZUludFN0cmljdChlZGdlKCkpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFs
aWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51
c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0
ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVk
Z2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKIGNsYXNzIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgZXhwbGljaXQgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVj
dWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAg
OiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9l
ZGdlKGVkZ2UpCiAgICAgICAgICwgbV9mcHJPckludmFsaWQoSW52YWxpZEZQUlJlZykKICAgICAg
ICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQp
OwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSA9PSBEb3VibGVVc2UpOwotICAgICAgICBp
ZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBOdW1i
ZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25OdW1iZXJVc2UgfHwgZWRnZS51c2VLaW5k
KCkgPT0gUmVhbE51bWJlclVzZSkpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkp
KQogICAgICAgICAgICAgZnByKCk7CiAgICAgfQogCkBAIC0yNzU1LDQyICsyNzk3LDQ3IEBAIHB1
YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZnByT3JJbnZhbGlkICE9IEludmFsaWRGUFJSZWcpOwog
ICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZnByT3JJbnZhbGlkKTsKICAgICB9CisgICAgCisgICAg
RWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQog
CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOwor
ICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBGUFJSZWcgZnByKCkK
ICAgICB7CiAgICAgICAgIGlmIChtX2Zwck9ySW52YWxpZCA9PSBJbnZhbGlkRlBSUmVnKQotICAg
ICAgICAgICAgbV9mcHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZURvdWJsZShub2Rl
KCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZp
bGxTcGVjdWxhdGVEb3VibGUoZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBt
X2Zwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAg
ICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAg
fQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25v
ZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgRlBSUmVnIG1fZnByT3JJbnZhbGlkOwogICAgIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKIAogY2xhc3MgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNw
ZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVy
YW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBt
b2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkK
LSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAg
ICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgICAgICAsIG1fZGlyZWN0
aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFT
U0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmls
bGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IENlbGxVc2UgfHwgZWRnZS51
c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IE9iamVjdFVzZSB8
fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxs
ZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjc5OSw0MiArMjg0
Niw0NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlk
R1BSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQor
ICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdl
OworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAgR1BS
UmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQ
UlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVD
ZWxsKG5vZGUoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBt
X2ppdC0+ZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJl
dHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsK
LSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7
CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2Rl
KiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwog
ICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKIAogY2xhc3MgU3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1
bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAg
ICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBt
X2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAg
ICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2pp
dCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwg
bW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gQm9v
bGVhblVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAg
ICBncHIoKTsKICAgICB9CiAgICAgCkBAIC0yODQ0LDMwICsyODk2LDQxIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogICAgIAorICAgIEVk
Z2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KKyAg
ICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7
CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KICAgICAKICAgICBHUFJSZWcg
Z3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVn
KQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUJvb2xl
YW4obm9kZSgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1f
aml0LT5maWxsU3BlY3VsYXRlQm9vbGVhbihlZGdlKCksIG1fZGlyZWN0aW9uKTsKICAgICAgICAg
cmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAg
ewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgp
KTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5v
ZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7
CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCisjZGVmaW5lIERG
R19UWVBFX0NIRUNLKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWls
KSBkbyB7IFwKKyAgICAgICAgaWYgKCFuZWVkc1R5cGVDaGVjaygoZWRnZSksICh0eXBlc1Bhc3Nl
ZFRocm91Z2gpKSkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdHlw
ZUNoZWNrKChzb3VyY2UpLCAoZWRnZSksICh0eXBlc1Bhc3NlZFRocm91Z2gpLCAoanVtcFRvRmFp
bCkpOyBcCisgICAgfSB3aGlsZSAoMCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzI3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDExICsyODksMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgTm9kZSogZ2V0TG9jYWwgPSBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
ayArIDEsIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHZhcmlhYmxlLT5wcmVkaWN0aW9u
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBHZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZv
KHZhcmlhYmxlKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRMb2NhbCwgY29k
ZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShub2RlKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrICsgMSwgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tT
dHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
Z2V0TG9jYWwsIENlbGxVc2UpKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9IGdldExvY2FsOwpAQCAtMzE3LDcgKzMxNyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgLy8gdG8gZXhpdC4KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47Ci0g
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCkBAIC0zMjcs
NyArMzI3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGJ5dGVjb2Rl
IGluc3RydWN0aW9uIHJhdGhlciB0aGFuIHJlZXhlY3V0aW5nIHRoZSBjdXJyZW50IG9uZS4KICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05v
bmUsIEZvcndhcmRDaGVja1N0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVP
cmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVj
dHVyZSkpLCBjaGlsZDEpOworICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIEVk
Z2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdVc2VLaW5kLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVz
ZUtpbmQgdXNlS2luZCkKK3sKKyAgICBzd2l0Y2ggKHVzZUtpbmQpIHsKKyAgICBjYXNlIFVudHlw
ZWRVc2U6CisgICAgICAgIG91dC5wcmludCgiVW50eXBlZCIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEludDMyVXNlOgorICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAgICAgb3V0LnByaW50KCJLbm93bklu
dDMyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAg
b3V0LnByaW50KCJSZWFsTnVtYmVyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTnVtYmVy
VXNlOgorICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEtub3duTnVtYmVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIktub3duTnVtYmVyIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgb3V0LnByaW50KCJC
b29sZWFuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgb3V0
LnByaW50KCJDZWxsIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS25vd25DZWxsVXNlOgor
ICAgICAgICBvdXQucHJpbnQoIktub3duQ2VsbCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE9iamVjdFVzZToKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3QiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdE9y
T3RoZXIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIG91
dC5wcmludCgiU3RyaW5nIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm90Q2VsbFVzZToK
KyAgICAgICAgb3V0LnByaW50KCJOb3RDZWxsIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
T3RoZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiT3RoZXIiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtp
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVXNlS2luZF9oCisjZGVmaW5lIERG
R1VzZUtpbmRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBVc2VL
aW5kIHsKKyAgICBVbnR5cGVkVXNlLAorICAgIEludDMyVXNlLAorICAgIEtub3duSW50MzJVc2Us
CisgICAgUmVhbE51bWJlclVzZSwKKyAgICBOdW1iZXJVc2UsCisgICAgS25vd25OdW1iZXJVc2Us
CisgICAgQm9vbGVhblVzZSwKKyAgICBDZWxsVXNlLAorICAgIEtub3duQ2VsbFVzZSwKKyAgICBP
YmplY3RVc2UsCisgICAgT2JqZWN0T3JPdGhlclVzZSwKKyAgICBTdHJpbmdVc2UsCisgICAgTm90
Q2VsbFVzZSwKKyAgICBPdGhlclVzZSwKKyAgICBMYXN0VXNlS2luZCAvLyBNdXN0IGFsd2F5cyBi
ZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0byBkZW5vdGUgdGhl
IG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgorfTsKKworQUxXQVlTX0lOTElORSBTcGVjdWxhdGVk
VHlwZSB0eXBlRmlsdGVyRm9yKFVzZUtpbmQgdXNlS2luZCkKK3sKKyAgICBzd2l0Y2ggKHVzZUtp
bmQpIHsKKyAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgIHJldHVybiBTcGVjRW1wdHlPclRv
cDsgLy8gVE9QIGlzbid0IGdvb2QgZW5vdWdoOyB1bnR5cGVkIHVzZXMgbWF5IHVzZSB0aGUgbm9y
bWFsbHkgdW5zZWVuIGVtcHR5IHZhbHVlLCBpbiB0aGUgY2FzZSBvZiBsYXp5IHJlZ2lzdGVycy4K
KyAgICBjYXNlIEludDMyVXNlOgorICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAgICAgcmV0
dXJuIFNwZWNJbnQzMjsKKyAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgICAgIHJldHVybiBT
cGVjUmVhbE51bWJlcjsKKyAgICBjYXNlIE51bWJlclVzZToKKyAgICBjYXNlIEtub3duTnVtYmVy
VXNlOgorICAgICAgICByZXR1cm4gU3BlY051bWJlcjsKKyAgICBjYXNlIEJvb2xlYW5Vc2U6Cisg
ICAgICAgIHJldHVybiBTcGVjQm9vbGVhbjsKKyAgICBjYXNlIENlbGxVc2U6CisgICAgY2FzZSBL
bm93bkNlbGxVc2U6CisgICAgICAgIHJldHVybiBTcGVjQ2VsbDsKKyAgICBjYXNlIE9iamVjdFVz
ZToKKyAgICAgICAgcmV0dXJuIFNwZWNPYmplY3Q7CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNl
OgorICAgICAgICByZXR1cm4gU3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAgICBjYXNlIFN0cmlu
Z1VzZToKKyAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmc7CisgICAgY2FzZSBOb3RDZWxsVXNlOgor
ICAgICAgICByZXR1cm4gflNwZWNDZWxsOworICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAgIHJl
dHVybiBTcGVjT3RoZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNwZWNUb3A7CisgICAgfQorfQorCitBTFdBWVNf
SU5MSU5FIGJvb2wgaXNOdW1lcmljYWwoVXNlS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgIGNhc2UgSW50MzJVc2U6CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgIGNh
c2UgUmVhbE51bWJlclVzZToKKyAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlVzZUtpbmQpOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVXNlS2lu
ZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAxNDMyNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiAg
ICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IC0+ICVzQCV1Iiwgbm9kZS0+aW5kZXgoKSwgdXNl
S2luZFRvU3RyaW5nKGVkZ2UudXNlS2luZCgpKSwgZWRnZS0+aW5kZXgoKSk7CisgICAgICAgIGRh
dGFMb2cobm9kZSwgIiAtPiAiLCBlZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRW
YWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJsb2NrSW5kZXggYmxvY2tJ
bmRleCkKQEAgLTM4OSw3ICszODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVwb3J0VmFsaWRh
dGlvbkNvbnRleHQoCiAgICAgICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwg
Tm9kZSogZXhwZWN0ZWROb2RlLCBFZGdlIGluY29taW5nRWRnZSkKICAgICB7Ci0gICAgICAgIGRh
dGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5v
ZGUtPmluZGV4KCksIGJsb2NrSW5kZXgsIGV4cGVjdGVkTm9kZS0+aW5kZXgoKSwgaW5jb21pbmdF
ZGdlLT5pbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZyhub2RlLCAiIGluIEJsb2NrICMiLCBibG9j
a0luZGV4LCAiLCBzZWFyY2hpbmcgZm9yICIsIGV4cGVjdGVkTm9kZSwgIiBmcm9tICIsIGluY29t
aW5nRWRnZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189382</attachid>
            <date>2013-02-20 14:34:21 -0800</date>
            <delta_ts>2013-02-20 16:30:21 -0800</delta_ts>
            <desc>half-way done with 32-bit, and all LayoutTests pass in 64-bit</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>366664</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NSBA
QAorMjAxMy0wMi0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgbm90IGNoYW5nZSBpdHMgbWluZCBhYm91dCB3aGF0IHR5cGUgc3BlY3VsYXRp
b25zIGEgbm9kZSBkb2VzLCBieSBlbmNvZGluZyB0aGUgY2hlY2tzIGluIHRoZSBOb2RlVHlwZSwg
VXNlS2luZCwgYW5kIEFycmF5TW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBGaXh1cFBoYXNlIG5vdyBsb2NrcyBpbiB0aGUgc3BlY3Vs
YXRpb25zIHRoYXQgZWFjaCBub2RlIHdpbGwgZG8uIEl0IHRoZW4gcmVtZW1iZXJzCisgICAgICAg
IHRob3NlIHNwZWN1bGF0aW9ucyBmb3IgYWxsIHRpbWUuIEVhY2ggbm9kZSBlbnN1cmVzIHRoYXQg
aXQgZXhlY3V0ZXMgdGhlIHNwZWN1bGF0aW9ucworICAgICAgICBwcm9taXNlZCBieSBpdHMgZWRn
ZXMuIFRoaXMgaXMgdHJ1ZSBldmVuIGZvciBQaGFudG9tIG5vZGVzLgorICAgICAgICAKKyAgICAg
ICAgV29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKToKKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVkZ2Vz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRl
Lmg6CisgICAgICAgIChBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFN0YXRlOjpmaWx0ZXJFZGdlQnlVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmZpbHRlckJ5VHlwZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAqIGRmZy9E
RkdBZGphY2VuY3lMaXN0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6QWRq
YWNlbmN5TGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6Y2hpbGQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldENoaWxkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBZGphY2VuY3lMaXN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNl
bmN5TGlzdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6
c2V0Rmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6bnVtQ2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldE51bUNoaWxkcmVu
KToKKyAgICAgICAgKEFkamFjZW5jeUxpc3QpOgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3Iu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFsbG9jYXRvcjo6Y2VsbFNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6
UmVnaW9uOjpoZWFkZXJTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBbGxvY2F0b3I6OlJlZ2lv
bjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRv
cjo6UmVnaW9uOjpwYXlsb2FkU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpS
ZWdpb246OnBheWxvYWRCZWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpSZWdp
b246OnBheWxvYWRFbmQpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6UmVnaW9uOjpp
c0luVGhpc1JlZ2lvbik6CisgICAgICAgIChKU0M6OkRGRzo6OjpBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6fkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjpmcmVlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmZy
ZWVBbGwpOgorICAgICAgICAoSlNDOjpERkc6Ojo6cmVzZXQpOgorICAgICAgICAoSlNDOjpERkc6
Ojo6aW5kZXhPZik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0b3JPZik6CisgICAgICAg
IChKU0M6OkRGRzo6OjpidW1wQWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZnJlZUxp
c3RBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0ZVNsb3cpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KToKKyAgICAgICAgKEpTQzo6REZH
Ojo6OnN0YXJ0QnVtcGluZ0luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKiBk
ZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRMb2Nh
bFN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjplbGltaW5h
dGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6c2V0UmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3Jt
Tm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToK
KyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdl
Ojp1c2VLaW5kVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjp1c2VLaW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzaGlmdCk6CisgICAgICAgICogZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAg
IChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpi
bGVzc0FycmF5T3BlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXhJ
bnRFZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXhEb3VibGVFZGdlKToK
KyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjppbmplY3RJbnQzMlRvRG91YmxlTm9kZSk6
CisgICAgICAgIChGaXh1cFBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjp0
cnVuY2F0ZUNvbnN0YW50VG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6
dHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQ
aGFzZTo6YXR0ZW1wdFRvTWFrZUludGVnZXJBZGQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWZDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRlcmVmQ2hpbGRyZW4pOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWYpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkZXJlZik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnBl
cmZvcm1TdWJzdGl0dXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1ByZWRpY3Rl
ZE51bWVyaWNhbCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZEltbWVkaWF0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmNvbnZlcnRUb0dldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6d2lsbEhhdmVD
b2RlR2VuT3JPU1IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGls
ZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmJpbmFyeVVzZUtpbmQpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNCaW5hcnlVc2VLaW5kKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZUFsbG9jYXRvci5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZUZsYWdzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpub2RlRmxhZ3NBc1N0cmlu
Zyk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFR5cGVDaGVjayk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVSZWFsTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3RP
ck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90Q2Vs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU90aGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZk51bWJlckNvbnN0YW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bmVlZHNUeXBlQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSW50ZWdlck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpub2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpJbnRl
Z2VyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6SlNW
YWx1ZU9wZXJhbmQpOgorICAgICAgICAoSlNWYWx1ZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpTVmFsdWVPcGVyYW5kOjplZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3Bl
cmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdwcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OmZpbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpTVmFsdWVPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVy
YW5kOjpTdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6
OmVkZ2UpOgorICAgICAgICAoU3RvcmFnZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlN0
b3JhZ2VPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6
Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6dXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6U3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQpOgorICAgICAgICAoU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjplZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kOjpTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQpOgorICAgICAgICAoU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVEb3VibGVPcGVy
YW5kOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kKToKKyAgICAgICAgKFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6OmVkZ2Up
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6Om5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6OmZwcik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQpOgorICAgICAgICAo
U3BlY3VsYXRlQ2VsbE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxP
cGVyYW5kOjplZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6
bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6Omdwcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5k
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6ZWRnZSk6Cisg
ICAgICAgIChTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQ6Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
ZUJvb2xlYW5PcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kOjp1c2UpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJ
bnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dFN0cmljdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhl
ckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
TG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAg
KiBkZmcvREZHVXNlS2luZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdU
Rjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQuaDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAgICAg
ICAoSlNDOjpERkc6OmlzTnVtZXJpY2FsKToKKyAgICAgICAgKFdURik6CisgICAgICAgICogZGZn
L0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6cmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQpOgorCiAyMDEzLTAyLTE5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgU2lsZW5jZSBzb21lIGFuYWx5emVyIHdhcm5pbmdzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksOCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFF
NEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5j
cHAgKi87IH07CiAJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyRjE2
ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZEMiAvKiBE
RkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMzRCMTQ5MTZENDIw
MTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5k
LmNwcCAqLzsgfTsKKwkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ4MTZE
NDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNEIxNkQ0M0UwQzAwMUNEQTVBIC8qIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGM0IzQTFBMTUzRTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwICovOyB9OwogCQkwRjNCM0ExQjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDAxLDYg
KzEwMDMsOCBAQAogCQkwRjJCREM1MDE1MjI4RkZBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUV2
ZW50LmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERG
R0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzNEIxNDcxNkQ0
MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBE
RkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQu
aDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE3MTUz
RTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHBh
dGggPSBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcwOSw2ICsyNzEzLDggQEAKIAkJCQkwRkMwOTdBMDE0
NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCiAJCQkJMEZCRTBGNkYxNkMxREIwMTAw
ODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjcwMTZDMURC
MDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggKi8sCisJCQkJMEYzNEIxNDcxNkQ0
MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovLAorCQkJCTBGMzRCMTQ4MTZENDIwMEUw
MDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8sCiAJCQkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZG
IC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKIAkJCQkwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyog
REZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjJCREMzRjE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFs
dWVSZWNvdmVyeU92ZXJyaWRlLmggKi8sCkBAIC0zMjUxLDYgKzMyNTcsNyBAQAogCQkJCTg2ODkx
NkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2RlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyogUHJvZmlsZXJC
eXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8q
IFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NTcsNiArMzk2NCw3IEBA
CiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5k
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9m
aWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZB
RDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdp
blN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAv
KiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0MzQyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNCwzMCArMjM0LDYxIEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1
bHQgQWJzdHJhY3RTdGEKICAgICByZXR1cm4gVW5rbm93bkJvb2xlYW5SZXN1bHQ7CiB9CiAKLWJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2spCitib29sIEFi
c3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG1f
YmxvY2spOwogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9
IGZhbHNlOwogICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2sp
OwotICAgICAgICAKKyAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAKICAgICBpZiAo
IW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sK
KyAgICByZXR1cm4gc3RhcnRFeGVjdXRpbmcobV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKSk7Cit9
CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVkZ2VzKE5vZGUqIG5vZGUpCit7CisgICAg
REZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgZmlsdGVyRWRnZUJ5VXNlKTsK
K30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXModW5zaWduZWQgaW5kZXhJbkJs
b2NrKQoreworICAgIGV4ZWN1dGVFZGdlcyhtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spKTsKK30K
Kwordm9pZCBBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9y
KGVkZ2UudXNlS2luZCgpKSkpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2Vz
KE5vZGUqIG5vZGUpCit7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9k
ZSwgdmVyaWZ5RWRnZSk7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlKQoreworICAgIGlmICghQVNTRVJUX0RJ
U0FCTEVEKQorICAgICAgICB2ZXJpZnlFZGdlcyhub2RlKTsKKyAgICAKICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFu
dDoKICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6IHsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
SWRlbnRpdHk6IHsKICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAgICAgCkBAIC0yNjUsMTkgKzI5NiwxNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlm
ICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSkgewogICAgICAg
ICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBjYW5FeGl0
ID0gZmFsc2U7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3ZhcmlhYmxlcy5vcGVy
YW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CiAgICAgICAgIGlmICghdmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFy
KCkpCi0gICAgICAgICAgICAgICAgY2FuRXhpdCB8PSB0cnVlOworICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVl
KCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgZm9yTm9k
ZShub2RlKSA9IHZhbHVlOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjg2LDM1ICszMTQsMTAgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAodmFsdWUudmFs
dWUoKSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBmb3JO
b2RlKG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAg
ICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkKLSAgICAgICAg
ICAgIHx8IG1fZ3JhcGguaXNDcmVhdGVkVGhpc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKSB7Ci0g
ICAgICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVz
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuc2V0KFNwZWNEb3VibGUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rl
ZFR5cGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rp
b24oKTsKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGlz
Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkp
Ci0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAKICAgICAgICAg
bV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMjIsNyArMzI1LDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAg
ICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0
LgogICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpLmlzQ2xlYXIoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgpAQCAtMzYyLDExICsz
NjQsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKICAgICAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzc3LDIw
ICszNzcsMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgQVNTRVJUKGNoaWxkLmlzSW50MzIoKSk7CiAgICAgICAgICAgICBpZiAodHJ5U2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsKICAgICAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIAogICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewogICAgICAgICBKU1ZhbHVl
IGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTQwNCw3ICs0MDEs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00MTks
MjAgKzQxNSw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFs
dWUoSlNDOjp0b0ludDMyKGNoaWxkLmFzRG91YmxlKCkpKSk7CiAgICAgICAgICAgICBpZiAoY29u
c3RhbnRXYXNTZXQpIHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVCb29sZWFuKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9k
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKH5TcGVjQ2VsbCk7Ci0gICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwpAQCAtNDQ0LDEwICs0Mjks
OCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlm
IChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigp
KSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCkBAIC00NTUs
MTAgKzQzOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIENoZWNrTnVtYmVyOgotICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRo
QWRkOiB7CiAgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CkBAIC00NjYsMzMgKzQ0NSwyNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIo
KSAmJiByaWdodC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAg
ICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICht
X2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2Rl
LT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOworICAgICAgICBjYXNlIE51bWJlclVzZToK
ICAgICAgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3R5cGUpCiAgICAgICAgICAgICAgICAgJiYgaXNSZWFsTnVtYmVyU3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKICAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCkgeworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBW
YWx1ZUFkZCk7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcgfCBT
cGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qg
aGFuZGxlIHRoaXMgeWV0LiA6LSgKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
ICAgIApAQCAtNTAyLDE3ICs0NzUsMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkg
JiYgcmlnaHQuaXNOdW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwg
SlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRl
SW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBO
dW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01MjEs
MTcgKzQ5OCwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlT
ZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKC1jaGlsZC5hc051bWJlcigpKSkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMlVuYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVD
YW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAt
NTQxLDIzICs1MjIsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQu
aXNOdW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShs
ZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5tdWxT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLAotICAgICAgICAgICAgICAgICFub2RlQ2Fu
VHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAg
fHwgIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIElu
dDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygp
KQorICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAg
ICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlKQorICAgICAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZVJlYWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5
KG5vZGUpOwotICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC01OTEsMTggKzU3NSwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQp
IHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsK
LSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUsIHRydWUpOyAvLyBmb3JjaW5n
IGNhbi1leGl0LCB3aGljaCBpcyBhIGJpdCBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUuCisgICAg
ICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJV
c2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAg
CkBAIC02MTEsMTcgKzU5OCwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCiAgICAgICAgICAg
ICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkp
KSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUsIHRydWUpOworICAgICAgICBzd2l0
Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgog
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBO
dW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC02
MzAsMTAgKzYyMCw4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKICAgICAgICAgICAgICYmIHRy
eVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoc3FydChjaGlsZC5hc051bWJlcigpKSkpKSB7CiAg
ICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
c3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC02NTIsMjEgKzY0MCwyMSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGRpZFNldENvbnN0YW50KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0g
dHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlv
bigpKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAg
ZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEJvb2xl
YW5Vc2U6CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgor
ICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmlu
ZykgfCBTcGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAg
ICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9v
bGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc2NCwxNCArNzUyLDE3IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSogY2hp
bGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNDZWxsU3BlY3Vs
YXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXNTdHJp
bmdTcGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsKKwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNl
IFN0cmluZ1VzZToKKyAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRV
c2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7
CkBAIC04MjMsNjUgKzgxNCwxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIAogICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxQ29uc3RhbnQpIHsKLSAgICAgICAgICAgIC8vIFdlIGNh
biBleGl0IGlmIHdlIGhhdmVuJ3QgZmlyZWQgdGhlIE1hc3F1ZXJhZGVzQXNVbmRlZmluZCB3YXRj
aHBvaW50IHlldC4KLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIE5vZGUqIGxlZnQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOwotICAgICAgICBT
cGVjdWxhdGVkVHlwZSBmaWx0ZXI7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlQ2hlY2tlciBjaGVj
a2VyOwotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdo
dCkpIHsKLSAgICAgICAgICAgIGZpbHRlciA9IFNwZWNJbnQzMjsKLSAgICAgICAgICAgIGNoZWNr
ZXIgPSBpc0ludDMyU3BlY3VsYXRpb247Ci0gICAgICAgIH0gZWxzZSBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkgewotICAgICAgICAgICAgZmlsdGVyID0gU3Bl
Y051bWJlcjsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc051bWJlclNwZWN1bGF0aW9uOwotICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBp
ZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQtPnNob3VsZFNwZWN1bGF0
ZVN0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAgaWYgKGxl
ZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0
ZU9iamVjdCgpICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAgICAgIGZvck5vZGUo
cmlnaHQpLmZpbHRlcihTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxh
dGVPYmplY3RPck90aGVyKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7Ci0g
ICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKGxlZnQpLmZpbHRlcihTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gCi0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjVG9wOwot
ICAgICAgICAgICAgY2hlY2tlciA9IGlzQW55U3BlY3VsYXRpb247Ci0gICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7Ci0gICAgICAgICAgICBjaGVja2VyID0g
aXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwotICAgICAgICB9Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
Ci0gICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKGxlZnQpLm1fdHlwZSkKLSAgICAgICAgICAg
IHx8ICFjaGVja2VyKGZvck5vZGUocmlnaHQpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKGxl
ZnQpLmZpbHRlcihmaWx0ZXIpOwotICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVy
KTsKKyAgICAgICAgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLiBCdXQgdGhlIG9ubHkg
dGhpbmcgdGhpcyBwcmV2ZW50cyBpcyBzdG9yZSBlbGltaW5hdGlvbiwKKyAgICAgICAgLy8gYW5k
IGhvdyBsaWtlbHkgaXMgaXQsIHJlYWxseSwgdGhhdCB5b3UnbGwgaGF2ZSByZWR1bmRhbnQgc3Rv
cmVzIGFjcm9zcyBhIGNvbXBhcmlzb24KKyAgICAgICAgLy8gb3BlcmF0aW9uPyBDb21wYXJpc29u
IG9wZXJhdGlvbnMgYXJlIHR5cGljYWxseSBhdCB0aGUgZW5kIG9mIGJhc2ljIGJsb2Nrcywgc28K
KyAgICAgICAgLy8gdW5sZXNzIHdlIGhhdmUgZ2xvYmFsIHN0b3JlIGVsaW1pbmF0aW9uIChzdXBl
ciB1bmxpa2VseSBnaXZlbiBob3cgdW5wcm9maXRhYmxlIHRoYXQKKyAgICAgICAgLy8gb3B0aW1p
emF0aW9uIGlzIHRvIGJlZ2luIHdpdGgpLCB5b3UgYXJlbid0IGdvaW5nIHRvIGJlIHdhbnRpbmcg
dG8gc3RvcmUgZWxpbWluYXRlCisgICAgICAgIC8vIGFjcm9zcyBhbiBlcXVhbGl0eSBvcC4KKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAgICAgCkBAIC04OTQsNDcgKzgzOCwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1i
ZXIoKSAmJiByaWdodC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChu
b2RlLCBqc0Jvb2xlYW4obGVmdC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkpKSkgewog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0Tm9k
ZSwgcmlnaHROb2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlZnROb2RlLT5z
aG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmlu
ZygpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0KCkgJiYgcmlnaHROb2RlLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgewotICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobGVmdE5v
ZGUpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAgIGZvck5vZGUocmlnaHROb2RlKS5m
aWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKQEAgLTk1NCwxNSArODcxLDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRv
cCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkg
ewogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTcw
LDcgKzg4NCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTgyLDQ4ICs4OTUsMzggQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1
b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VU
b3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKQEAgLTEwMzYsOSArOTM5LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIEVkZ2UgY2hpbGQxID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
bW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAg
ICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKQEAgLTEwNDcsMTA0ICs5NDcsMjMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAg
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJl
cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExNTIsMTYgKzk3MSw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IAogICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjUmVh
bE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjTnVtYmVy
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTc0LDE2ICs5ODMsMTAgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBSZWdFeHBF
eGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAg
ICAgICAgICAgICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKQEAg
LTExOTEsMzYgKzk5NCwyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChub2RlLCBm
b3JOb2RlKGNoaWxkKSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseVRydWUpIHsK
ICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7Ci0gICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgICAgICBtX2Jy
YW5jaERpcmVjdGlvbiA9IFRha2VGYWxzZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6
IFRoZSBhYm92ZSBoYW5kbGVzIHRoZSB0cml2aWFsIGNhc2VzIG9mIHNwYXJzZSBjb25kaXRpb25h
bAogICAgICAgICAvLyBjb25zdGFudCBwcm9wYWdhdGlvbiwgYnV0IHdlIGNhbiBkbyBiZXR0ZXI6
CiAgICAgICAgIC8vIFdlIGNhbiBzcGVjaWFsaXplIHRoZSBzb3VyY2UgdmFyaWFibGUncyB2YWx1
ZSBvbiBlYWNoIGRpcmVjdGlvbiBvZgogICAgICAgICAvLyB0aGUgYnJhbmNoLgotICAgICAgICBp
ZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1
bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcihTcGVjT2JqZWN0IHwgU3BlY090
aGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRl
TnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBUaGlzIGlz
IG92ZXJseSBjb25zZXJ2YXRpdmUuCiAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZUJv
dGg7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUmV0dXJu
OgogICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFRocm93OgpAQCAtMTIz
MCwyMiArMTAyMCwxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewot
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgCi0g
ICAgICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUoY2hpbGQpLnZhbHVlKCk7CisgICAg
ICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7
CiAgICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAmJiB0cnlT
ZXRDb25zdGFudChub2RlLCBjaGlsZENvbnN0KSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0
YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoY2hpbGQtPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFy
eShub2RlKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBJbnQzMlVz
ZSkgewogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0g
Zm9yTm9kZShjaGlsZCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZv
ck5vZGUobm9kZSk7CiAgICAgICAgIAogICAgICAgICAvLyBOQi4gVGhlIG1vcmUgY2Fub25pY2Fs
IHdheSBvZiB3cml0aW5nIHRoaXMgd291bGQgaGF2ZSBiZWVuOgpAQCAtMTI3NSwzOSArMTA2MSwx
NSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICB0eXBlIHw9IFNwZWNTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgZGVzdGluYXRpb24uc2V0
KHR5cGUpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBTdHJDYXQ6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5OgogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9VTkRF
Q0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGUtPm51bUNoaWxk
cmVuKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBv
cGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51
bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQotICAgICAgICAgICAgICAgIGZvck5vZGUobV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0p
LmZpbHRlcihTcGVjUmVhbE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
PmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTMyMCwxOSArMTA4MiwxNiBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjQXJyYXkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld1JlZ2V4cDoKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CiAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5v
ZGUobm9kZSk7CiAgICAgICAgICAgICAKQEAgLTEzNDEsMzggKzExMDAsMzEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgLy8gb2JqZWN0LCBz
byB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKICAg
ICAgICAgICAgIC8vIGJlIGhpdCwgYnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZlciBrbm93LgogICAg
ICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOyAvLyBUZWxs
IHRoZSBjb25zdGFudCBmb2xkZXIgdG8gdHVybiB0aGlzIGludG8gSWRlbnRpdHkuCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24oY2hpbGQt
PnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIoU3BlY090aGVyKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBPdGhlclVzZToKICAgICAgICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjT2JqZWN0T3RoZXIp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChp
c09iamVjdFNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBz
b3VyY2UuZmlsdGVyKFNwZWNPYmplY3QpOworICAgICAgICBjYXNlIE9iamVjdFVzZToKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVW50eXBlZFVzZToKICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAg
ICAgICAgICAgZGVzdGluYXRpb24ubWVyZ2UoU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7Ci0gICAgICAgIGRlc3RpbmF0aW9uLm1lcmdl
KFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQ3Jl
YXRlVGhpczogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2Rl
KG5vZGUpOwotICAgICAgICAKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3Vs
YXRpb24oc291cmNlLm1fdHlwZSkpOwotICAgICAgICAgICAgCi0gICAgICAgIHNvdXJjZS5maWx0
ZXIoU3BlY0Z1bmN0aW9uKTsKLSAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNGaW5hbE9iamVj
dCk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNGaW5hbE9iamVjdCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xMzgxLDM2ICsxMTMzLDMxIEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIE5ld09iamVjdDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3Ry
dWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0
ZUFjdGl2YXRpb246Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVz
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1l
bnRzOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+
YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAg
ICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgLy8gRG9lcyBub3RoaW5nIHRoYXQgaXMgdXNlci12aXNpYmxlLgogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBp
ZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9y
KG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBlbHNlCiAgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0xNDMwLDcg
KzExNzcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToK
LSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8vIFRoaXMgcG90ZW50
aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50cyBvYmplY3QgaGFk
IGEgZ2V0dGVyCiAgICAgICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3RoIHByb3BlcnR5Lgog
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKQEAg
LTE0NDQsNyArMTE5MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2Nh
cGUgaXRzIGFyZ3VtZW50cywgc28gd2UgY2FuIG9wdGltaXplCiAgICAgICAgIC8vIHRoZSBhcmd1
bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6
ZWQgYnkgdGhlCiAgICAgICAgIC8vIEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTQ1
Myw4ICsxMTk4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRo
ZSBwcm9wZXJ0eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBk
b24ndCBzcGVjdWxhdGUgYWdhaW5zdCB0aGlzLgogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgLy8gQnV0IHdlIGRvIHNwZWN1bGF0
ZSB0aGF0IHRoZSBpbmRleCBpcyBhbiBpbnRlZ2VyLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMg
dW5rbm93bi4KICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTQ2MiwyOSArMTIwNSwyNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgY2FzZSBOZXdGdW5jdGlvbjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhw
cmVzc2lvbjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmZ1bmN0aW9uU3RydWN0dXJlKCkpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRnVu
Y3Rpb24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTZXRDYWxsZWU6CiAg
ICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldFNjb3BlOiAvLyBGSVhNRTog
V2UgY291bGQgZ2V0IHJpZCBvZiB0aGVzZSBpZiB3ZSBrbm93IHRoYXQgdGhlIEpTRnVuY3Rpb24g
aXMgYSBjb25zdGFudC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjIwMgogICAgIGNhc2UgR2V0TXlTY29wZToKICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2tpcFNjb3BlOiB7Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBKU1ZhbHVlIGNoaWxkID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIHRy
eVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwo
KSktPm5leHQoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKQEAg
LTE0OTUsMTggKzEyMzMsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgIH0KIAogICAgIGNhc2UgR2V0U2NvcGVSZWdpc3RlcnM6Ci0gICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1
bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRTY29w
ZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFB1dFNjb3BlZFZhcjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
IGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xNTE4LDggKzEyNTIsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0K
ICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5SWRT
dGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsIHN0cnVjdHVyZSwKQEAgLTE1NTUsNyArMTI4Nyw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8g
bW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2MjAwCiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGltaW5hdGUgdGhlc2UgZW50aXJl
bHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93cyBpbnRvIHRoaXMuCiAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDEKLSAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTU2NCw2
ICsxMjk1LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
IGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAo
aS5lLiBwcm90b3R5cGVzKS4KICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWND
ZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlz
LgogICAgICAgICAvLyBJZiB0aGlzIHN0cnVjdHVyZSBjaGVjayBpcyBhdHRlbXB0aW5nIHRvIHBy
b3ZlIGtub3dsZWRnZSBhbHJlYWR5IGhlbGQgaW4KICAgICAgICAgLy8gdGhlIGZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHNldCB0aGVuIHRoZSBjb25zdGFudCBmb2xkaW5nIHBoYXNlIHNob3VsZAog
ICAgICAgICAvLyB0dXJuIHRoaXMgaW50byBhIHdhdGNocG9pbnQgaW5zdGVhZC4KQEAgLTE1NzEs
OSArMTMwMyw4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgaWYgKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQp
CiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9m
KHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAgICAgICF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbih2YWx1
ZS5tX3R5cGUpKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5p
c1N1YnNldE9mKHNldCkpCisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAg
ICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTU5MSw3ICsxMzIyLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAvLyBpbmZpbml0eSBvZiBzdHJ1Y3R1cmVz
LgogICAgICAgICBBU1NFUlQodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNl
dE9mKFN0cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKICAgICAgICAgCi0gICAgICAg
IEFTU0VSVCh2YWx1ZS5pc0NsZWFyKCkgfHwgaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBl
KSk7IC8vIFZhbHVlIGNvdWxkIGJlIGNsZWFyIGlmIHdlJ3ZlIHByb3ZlbiBtdXN0LWV4aXQgZHVl
IHRvIGEgc3BlY3VsYXRpb24gc3RhdGljYWxseSBrbm93biB0byBiZSBiYWQuCiAgICAgICAgIHZh
bHVlLmZpbHRlcihub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMg
PSB0cnVlOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwpAQCAtMTYwMCw3ICsxMzMw
LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJl
OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAg
ICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5uZXdTdHJ1Y3R1cmUpOwpAQCAtMTYxMCwxNCArMTMzOSwxMSBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgY2Fz
ZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8v
IFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q2hlY2tBcnJheTogewogICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNr
ZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsgLy8gTGllcywgYnV0IHRoaXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9u
cyAobGlrZSBHZXRCeVZhbCkgdGhhdCBhbHdheXMgZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQg
aW4gdXMgdHJ5aW5nIHRvIGJlIGNsZXZlciBoZXJlLgpAQCAtMTYzMCw3ICsxMzU2LDYgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsKQEAgLTE2NzMsMTUgKzEzOTgsMTEgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQXJyYXlpZnk6
IHsKICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgs
IG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1v
ZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKICAgICAgICAgICAgIHx8IG5vZGUt
PmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFnZUNvbnZlcnQpOwogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkpCi0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
Y2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhh
dFBhc3NGaWx0ZXJpbmcoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwpAQCAt
MTY5NCwzNSArMTQxNSwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNl
dE9mKHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIHZhbHVlLmZpbHRl
cihzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOwog
ICAgICAgICBicmVhazsgCiAgICAgfQotICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICB9CisgICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICBmb3JO
b2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAg
CiAgICAgY2FzZSBQdXRCeU9mZnNldDogewotICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsK
LSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAg
ICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsKTsKLSAgICAgICAgfQotICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGNhbkV4aXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTE3MzEs
NyArMTQzOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgaWYgKHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0xNzY2LDEyICsxNDcyLDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZh
cjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0xNzgxLDM0ICsxNDg1
LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6
Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0
IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhh
dCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgYXBwZWFycyBi
cm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2VzIGFuIHVuY29uZGl0aW9uYWwgY2Vs
bAotICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNzQ3OQotICAgICAgICBpZiAoIShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYg
flNwZWNDZWxsKSAmJiAhKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2Vs
bCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwp
OwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50
b21Mb2NhbDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCiAgICAgY2FzZSBCcmVha3BvaW50OgotICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENh
bGw6CkBAIC0xODM2LDcgKzE1MjksNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAgICBjYXNlIE5vcDoKICAgICBjYXNl
IENvdW50RXhlY3V0aW9uOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgpAQCAtMTg0Nyw2ICsx
NTM5LDIxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBy
ZXR1cm4gbV9pc1ZhbGlkOwogfQogCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5k
ZXhJbkJsb2NrLCBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spKTsKK30KKworYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICBOb2RlKiBub2Rl
ID0gbV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICBpZiAoIXN0YXJ0RXhlY3V0aW5nKG5v
ZGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBleGVjdXRlRWRnZXMobm9kZSk7
CisgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7Cit9CisKIGlu
bGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2spCiB7CiAgICAgY2xvYmJlckNhcHR1cmVk
VmFycyhjb2RlT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw1
MiBAQCBwdWJsaWM6CiAgICAgLy8gaWYgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBwYXN0IHRo
aXMgbm9kZS4gTm90YWJseSwgaXQgd2lsbCByZXR1cm4gdHJ1ZQogICAgIC8vIGZvciBibG9jayB0
ZXJtaW5hbHMsIHNvIGxvbmcgYXMgdGhvc2UgdGVybWluYWxzIGFyZSBub3QgUmV0dXJuIG9yIHZh
cmlhbnRzCiAgICAgLy8gb2YgVGhyb3cuCi0gICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkKTsKKyAg
ICAvLworICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBiZSBlcXVpdmFsZW50IHRvIGRvaW5n
OgorICAgIC8vCisgICAgLy8gaWYgKHN0YXRlLnN0YXJ0RXhlY3V0aW5nKGluZGV4KSkgeworICAg
IC8vICAgICBzdGF0ZS5leGVjdXRlRWRnZXMoaW5kZXgpOworICAgIC8vICAgICByZXN1bHQgPSBz
dGF0ZS5leGVjdXRlRWZmZWN0cyhpbmRleCk7CisgICAgLy8gfSBlbHNlCisgICAgLy8gICAgIHJl
c3VsdCA9IHRydWU7CisgICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7Cisg
ICAgCisgICAgLy8gSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbiBvZiB0aGUgbm9kZS4g
SXQgcmVzZXRzIGFueSBzdGF0ZSBpbiB0aGUgbm9kZSwKKyAgICAvLyB0aGF0IGlzIHByb2dyZXNz
aXZlbHkgYnVpbHQgdXAgYnkgZXhlY3V0ZUVkZ2VzKCkgYW5kIGV4ZWN1dGVFZmZlY3RzKCkuIElu
CisgICAgLy8gcGFydGljdWxhciwgdGhpcyByZXNldHMgY2FuRXhpdCgpLCBzbyBpZiB5b3Ugd2Fu
dCB0byAia25vdyIgYmV0d2VlbiBjYWxscyBvZgorICAgIC8vIHN0YXJ0RXhlY3V0aW5nKCkgYW5k
IGV4ZWN1dGVFZGdlcygpL0VmZmVjdHMoKSB3aGV0aGVyIHRoZSBsYXN0IHJ1biBvZiB0aGUKKyAg
ICAvLyBhbmFseXNpcyBjb25jbHVkZWQgdGhhdCB0aGUgbm9kZSBjYW4gZXhpdCwgeW91IHNob3Vs
ZCBwcm9iYWJseSBzZXQgdGhhdAorICAgIC8vIGluZm9ybWF0aW9uIGFzaWRlIHByaW9yIHRvIGNh
bGxpbmcgc3RhcnRFeGVjdXRpbmcoKS4KKyAgICBib29sIHN0YXJ0RXhlY3V0aW5nKE5vZGUqKTsK
KyAgICBib29sIHN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgCisg
ICAgLy8gQWJzdHJhY3RseSBleGVjdXRlIHRoZSBlZGdlcyBvZiB0aGUgZ2l2ZW4gbm9kZS4gVGhp
cyBydW5zIGZpbHRlckVkZ2VCeVVzZSgpCisgICAgLy8gb24gYWxsIGVkZ2VzIG9mIHRoZSBub2Rl
LiBZb3UgY2FuIHNraXAgdGhpcyBzdGVwLCBpZiB5b3UgaGF2ZSBhbHJlYWR5IHVzZWQKKyAgICAv
LyBmaWx0ZXJFZGdlQnlVc2UoKSAob3Igc29tZSBlcXVpdmFsZW50KSBvbiBlYWNoIGVkZ2UuCisg
ICAgdm9pZCBleGVjdXRlRWRnZXMoTm9kZSopOworICAgIHZvaWQgZXhlY3V0ZUVkZ2VzKHVuc2ln
bmVkIGluZGV4SW5CbG9jayk7CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckVk
Z2VCeVVzZShOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEtub3du
SW50MzJVc2U6CisgICAgICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIGNhc2UgS25v
d25DZWxsVXNlOgorICAgICAgICAgICAgQVNTRVJUKCEoZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+
dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZiAvLyAh
QVNTRVJUX0RJU0FCTEVECisgICAgICAgIAorICAgICAgICBmaWx0ZXJCeVR5cGUobm9kZSwgZWRn
ZS5ub2RlKCksIHR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKTsKKyAgICB9CisgICAgCisg
ICAgLy8gQWJzdHJhY3RseSBleGVjdXRlIHRoZSBlZmZlY3RzIG9mIHRoZSBnaXZlbiBub2RlLiBU
aGlzIGNoYW5nZXMgdGhlIGFic3RyYWN0CisgICAgLy8gc3RhdGUgYXNzdW1pbmcgdGhhdCBlZGdl
cyBoYXZlIGFscmVhZHkgYmVlbiBmaWx0ZXJlZC4KKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBp
bmRleEluQmxvY2ssIE5vZGUqKTsKICAgICAKICAgICAvLyBEaWQgdGhlIGxhc3QgZXhlY3V0ZWQg
bm9kZSBjbG9iYmVyIHRoZSB3b3JsZD8KICAgICBib29sIGRpZENsb2JiZXIoKSBjb25zdCB7IHJl
dHVybiBtX2RpZENsb2JiZXI7IH0KQEAgLTE5MSw1MCArMjM2LDYgQEAgcHJpdmF0ZToKICAgICAK
ICAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVl
JiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5v
ZGUsIE5vZGUqIHNvdXJjZU5vZGUpOwogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlSW50MzJVbmFy
eShOb2RlKiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQotICAgIHsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhpdCB8fCAhaXNJbnQzMlNwZWN1bGF0aW9u
KGNoaWxkVmFsdWUubV90eXBlKSk7Ci0gICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyVW5hcnkoTm9kZSogbm9k
ZSkKLSAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNOdW1iZXJTcGVjdWxh
dGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwotICAgICAgICBjaGlsZFZhbHVlLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuVW5hcnkoTm9k
ZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNCb29sZWFu
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKLSAgICAgICAgY2hpbGRWYWx1ZS5maWx0
ZXIoU3BlY0Jvb2xlYW4pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmlu
YXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCi0gICAgewotICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgZm9yY2VDYW5FeGl0
Ci0gICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUxLm1fdHlwZSkK
LSAgICAgICAgICAgIHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7
Ci0gICAgICAgIGNoaWxkVmFsdWUxLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICBjaGlsZFZh
bHVlMi5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVO
dW1iZXJCaW5hcnkoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNo
aWxkVmFsdWUxID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUmIGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUt
PnNldENhbkV4aXQoCi0gICAgICAgICAgICAhaXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVl
MS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhaXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVl
Mi5tX3R5cGUpKTsKLSAgICAgICAgY2hpbGRWYWx1ZTEuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAg
ICAgICBjaGlsZFZhbHVlMi5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgfQotICAgIAogICAgIGVu
dW0gQm9vbGVhblJlc3VsdCB7CiAgICAgICAgIFVua25vd25Cb29sZWFuUmVzdWx0LAogICAgICAg
ICBEZWZpbml0ZWx5RmFsc2UsCkBAIC0yNTksNiArMjYwLDE3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVy
QnlUeXBlKE5vZGUqIG5vZGUsIE5vZGUqIGNoaWxkLCBTcGVjdWxhdGVkVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKGNoaWxkKTsKKyAgICAg
ICAgaWYgKHZhbHVlLm1fdHlwZSAmIH50eXBlKQorICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKKyAgICAgICAgdmFsdWUuZmlsdGVyKHR5cGUpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHZlcmlmeUVkZ2UoTm9kZSosIEVkZ2UpOworICAgIHZvaWQgdmVyaWZ5RWRnZXMoTm9kZSop
OworICAgIAogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw2ICsyMzQsOSBAQCBzdHJ1Y3Qg
QWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG9wdGltaXpl
ZCBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIG1fdHlwZSBub3QKKyAgICAgICAgLy8gaGF2aW5nIHN0
cnVjdHVyZXMsIGFycmF5IG1vZGVzLCBvciBhIHNwZWNpZmljIHZhbHVlLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjYzCiAgICAgICAgIG1f
dHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CiAgICAgICAgIG1fYXJy
YXlNb2RlcyAmPSBvdGhlci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsKICAgICAgICAgbV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCShyZXZpc2lvbiAxNDM0MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsOSArNDcsNiBAQCBwdWJsaWM6CiAgICAgQWRqYWNlbmN5TGlzdCgpIHsgfQogICAg
IAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAg
ICAgICAgOiBtX2tpbmQoa2luZCkKLSNlbmRpZgogICAgIHsKICAgICAgICAgaWYgKGtpbmQgPT0g
VmFyaWFibGUpIHsKICAgICAgICAgICAgIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZCA9IFVJTlRf
TUFYOwpAQCAtNTcsMTkgKzU0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIs
IE5vZGUqIGNoaWxkMykKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKEZp
eGVkKQotI2VuZGlmCisgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIEVkZ2UgY2hpbGQxLCBF
ZGdlIGNoaWxkMiwgRWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGtp
bmQsIGtpbmQgPT0gRml4ZWQpOwogICAgICAgICBpbml0aWFsaXplKGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDMpOwogICAgIH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgdW5zaWdu
ZWQgZmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCi0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgICAgICA6IG1fa2luZChWYXJpYWJsZSkKLSNlbmRpZgogICAgIHsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChraW5kLCBraW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgc2V0Rmlyc3RDaGls
ZChmaXJzdENoaWxkKTsKQEAgLTc5LDIxICs3MCwxOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgRWRn
ZSYgY2hpbGQodW5zaWduZWQgaSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgU2l6
ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICByZXR1cm4gbV93
b3Jkc1tpXTsKICAgICB9ICAgIAogICAgIAogICAgIEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpCiAg
ICAgewogICAgICAgICBBU1NFUlQoaSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09
IEZpeGVkKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfQogICAgIAogICAgIHZv
aWQgc2V0Q2hpbGQodW5zaWduZWQgaSwgRWRnZSBub2RlVXNlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGkgPCBTaXplKTsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAg
IG1fd29yZHNbaV0gPSBub2RlVXNlOwogICAgIH0KICAgICAKQEAgLTEyNSw5ICsxMTMsNiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdm9pZCByZXNldCgpCiAgICAgewotI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICAgICAgbV9raW5kID0gRml4ZWQ7Ci0jZW5kaWYKICAgICAgICAgaW5pdGlhbGl6ZSgp
OwogICAgIH0KICAgICAKQEAgLTE0MiwzNCArMTI3LDI0IEBAIHB1YmxpYzoKIAogICAgIHVuc2ln
bmVkIGZpcnN0Q2hpbGQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBW
YXJpYWJsZSk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQ7CiAgICAg
fQogICAgIHZvaWQgc2V0Rmlyc3RDaGlsZCh1bnNpZ25lZCBmaXJzdENoaWxkKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIG1fd29yZHNbMF0ubV9l
bmNvZGVkV29yZCA9IGZpcnN0Q2hpbGQ7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIG51bUNo
aWxkcmVuKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUp
OwogICAgICAgICByZXR1cm4gbV93b3Jkc1sxXS5tX2VuY29kZWRXb3JkOwogICAgIH0KICAgICB2
b2lkIHNldE51bUNoaWxkcmVuKHVuc2lnbmVkIG51bUNoaWxkcmVuKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIG1fd29yZHNbMV0ubV9lbmNvZGVk
V29yZCA9IG51bUNoaWxkcmVuOwogICAgIH0KICAgICAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0jZW5kaWYKIHByaXZhdGU6
CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBLaW5k
IG1fa2luZDsKLSNlbmRpZgogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAxNDM0MjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAv
LyAgIGFueXRoaW5nLiBZb3UgY2FuIGp1c3QgY2FsbCBmcmVlQWxsKCkgaW5zdGVhZC4KIC8vIC0g
WW91IGNhbGwgZnJlZSgpIG9uIGFsbCBUJ3MgdGhhdCB5b3UgYWxsb2NhdGVkLCBhbmQgbmV2ZXIg
dXNlIGZyZWVBbGwoKS4KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KKy8vIGZvcmNlZENlbGxTaXpl
OiBzZXQgdGhpcyB0byAwIGlmIHlvdSdyZSBoYXBweSB3aXRoIHRoZSBkZWZhdWx0IGFsaWdubWVu
dCwgb3Igc2V0IGl0CisvLyB0byBhIG5vbi16ZXJvIHZhbHVlIGlmIHlvdSB3YW50IHRvIGZvcmNp
Ymx5IGFsaWduIHRoZSBhbGxvY2F0aW9ucyB0byBhIGNlcnRhaW4KKy8vIHZhbHVlLiBXaGVuIHlv
dSBkbyB0aGlzLCBBbGxvY2F0b3Igd2lsbCBBU1NFUlQgdGhhdCBmb3JjZWRDZWxsQWxpZ25tZW50
ID49IHNpemVvZihUKS4KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2Vs
bEFsaWdubWVudD4KIGNsYXNzIEFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgQWxsb2NhdG9yKCk7
CkBAIC02MywxMyArNjcsMjQgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsK
ICAgICB2b2lkKiBmcmVlTGlzdEFsbG9jYXRlKCk7CiAgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7
Ci0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKCkKKyAgICB7CisgICAgICAgIGlm
ICghZm9yY2VkQ2VsbEFsaWdubWVudCkKKyAgICAgICAgICAgIHJldHVybiBzaXplb2YoVCk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoZm9yY2VkQ2VsbEFsaWdubWVudCA+PSBzaXplb2YoVCkp
OworICAgICAgICByZXR1cm4gZm9yY2VkQ2VsbEFsaWdubWVudDsKKyAgICB9CisgICAgCiAgICAg
c3RydWN0IFJlZ2lvbiB7CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIDY0
ICogS0I7IH0KLSAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3Rk
OjptYXgoc2l6ZW9mKFJlZ2lvbiksIHNpemVvZihUKSk7IH0KLSAgICAgICAgc3RhdGljIHVuc2ln
bmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUoKSAtIGhlYWRlclNp
emUoKSkgLyBzaXplb2YoVCk7IH0KLSAgICAgICAgVCogZGF0YSgpIHsgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRlclNpemUoKSk7IH0KLSAg
ICAgICAgYm9vbCBpc0luVGhpc1JlZ2lvbihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocG9pbnRlciAtIGRhdGEoKSkgPCBudW1iZXJPZlRoaW5nc1BlclJl
Z2lvbigpOyB9CisgICAgICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIHN0
ZDo6bWF4KHNpemVvZihSZWdpb24pLCBjZWxsU2l6ZSgpKTsgfQorICAgICAgICBzdGF0aWMgdW5z
aWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVy
U2l6ZSgpKSAvIGNlbGxTaXplKCk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBwYXlsb2FkU2l6
ZSgpIHsgcmV0dXJuIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgKiBjZWxsU2l6ZSgpOyB9Cisg
ICAgICAgIGNoYXIqIHBheWxvYWRCZWdpbigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4o
dGhpcykgKyBoZWFkZXJTaXplKCk7IH0KKyAgICAgICAgY2hhciogcGF5bG9hZEVuZCgpIHsgcmV0
dXJuIHBheWxvYWRCZWdpbigpICsgcGF5bG9hZFNpemUoKTsgfQorICAgICAgICBib29sIGlzSW5U
aGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4o
Yml0d2lzZV9jYXN0PGNoYXIqPihwb2ludGVyKSAtIHBheWxvYWRCZWdpbigpKSA8IHBheWxvYWRT
aXplKCk7IH0KICAgICAgICAgc3RhdGljIFJlZ2lvbiogcmVnaW9uRm9yKGNvbnN0IFQqIHBvaW50
ZXIpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxSZWdpb24qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pihwb2ludGVyKSAmIH4oc2l6ZSgpIC0gMSkpOyB9CiAgICAgICAgIAogICAgICAgICBQYWdlQWxs
b2NhdGlvbkFsaWduZWQgbV9hbGxvY2F0aW9uOwpAQCAtODIsMjYgKzk3LDI2IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgUmVnaW9uKiBtX3JlZ2lvbkhlYWQ7CiAgICAgdm9pZCoqIG1fZnJlZUxpc3RI
ZWFkOwotICAgIFQqIG1fYnVtcEVuZDsKLSAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cisg
ICAgY2hhciogbV9idW1wRW5kOworICAgIHNpemVfdCBtX2J1bXBSZW1haW5pbmc7CiB9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIEFsbG9jYXRvcjxUPjo6QWxsb2NhdG9yKCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitpbmxpbmUg
QWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpBbGxvY2F0b3IoKQogICAgIDogbV9y
ZWdpb25IZWFkKDApCiAgICAgLCBtX2ZyZWVMaXN0SGVhZCgwKQogICAgICwgbV9idW1wUmVtYWlu
aW5nKDApCiB7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+
Ojp+QWxsb2NhdG9yKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxB
bGlnbm1lbnQ+CitpbmxpbmUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+Ojp+QWxs
b2NhdG9yKCkKIHsKICAgICByZXNldCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxX
QVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYXRlKCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBTFdBWVNfSU5MSU5FIHZvaWQq
IEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6YWxsb2NhdGUoKQogewogICAgIHZv
aWQqIHJlc3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOwogICAgIGlmIChMSUtFTFkoISFyZXN1bHQpKQpA
QCAtMTA5LDggKzEyNCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjphbGxv
Y2EKICAgICByZXR1cm4gZnJlZUxpc3RBbGxvY2F0ZSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWUoVCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZv
cmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlKFQqIG9iamVjdCkKIHsKICAgICBvYmplY3QtPn5UKCk7
CiAgICAgCkBAIC0xMTksOCArMTM0LDggQEAgdm9pZCBBbGxvY2F0b3I8VD46OmZyZWUoVCogb2Jq
ZWN0KQogICAgIG1fZnJlZUxpc3RIZWFkID0gY2VsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlQWxsKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVu
c2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxs
QWxpZ25tZW50Pjo6ZnJlZUFsbCgpCiB7CiAgICAgaWYgKCFtX3JlZ2lvbkhlYWQpIHsKICAgICAg
ICAgQVNTRVJUKCFtX2J1bXBSZW1haW5pbmcpOwpAQCAtMTQyLDggKzE1Nyw4IEBAIHZvaWQgQWxs
b2NhdG9yPFQ+OjpmcmVlQWxsKCkKICAgICBzdGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OnJlc2V0KCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFs
bG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6cmVzZXQoKQogewogICAgIGZyZWVSZWdp
b25zU3RhcnRpbmdBdChtX3JlZ2lvbkhlYWQpOwogICAgIApAQCAtMTUyLDM4ICsxNjcsMzggQEAg
dm9pZCBBbGxvY2F0b3I8VD46OnJlc2V0KCkKICAgICBtX2J1bXBSZW1haW5pbmcgPSAwOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdW5zaWduZWQgQWxsb2NhdG9yPFQ+OjppbmRleE9mKGNv
bnN0IFQqIG9iamVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxB
bGlnbm1lbnQ+Cit1bnNpZ25lZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46Omlu
ZGV4T2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHVuc2lnbmVkIGJhc2VJbmRleCA9IDA7CiAg
ICAgZm9yIChSZWdpb24qIHJlZ2lvbiA9IG1fcmVnaW9uSGVhZDsgcmVnaW9uOyByZWdpb24gPSBy
ZWdpb24tPm1fbmV4dCkgewogICAgICAgICBpZiAocmVnaW9uLT5pc0luVGhpc1JlZ2lvbihvYmpl
Y3QpKQotICAgICAgICAgICAgcmV0dXJuIGJhc2VJbmRleCArIChvYmplY3QgLSByZWdpb24tPmRh
dGEoKSk7CisgICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKGJpdHdpc2VfY2FzdDxjaGFy
Kj4ob2JqZWN0KSAtIHJlZ2lvbi0+cGF5bG9hZEJlZ2luKCkpIC8gY2VsbFNpemUoKTsKICAgICAg
ICAgYmFzZUluZGV4ICs9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKICAgICB9
CiAgICAgQ1JBU0goKTsKICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LUFsbG9jYXRvcjxUPiogQWxsb2NhdG9yPFQ+OjphbGxvY2F0b3JPZihjb25zdCBUKiBvYmplY3Qp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgorQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+KiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFs
aWdubWVudD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKIHsKICAgICByZXR1cm4gUmVn
aW9uOjpyZWdpb25Gb3Iob2JqZWN0KS0+bV9hbGxvY2F0b3I7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YnVtcEFsbG9jYXRlKCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBTFdB
WVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6YnVtcEFs
bG9jYXRlKCkKIHsKLSAgICBpZiAodW5zaWduZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5n
KSB7Ci0gICAgICAgIHJlbWFpbmluZy0tOworICAgIGlmIChzaXplX3QgcmVtYWluaW5nID0gbV9i
dW1wUmVtYWluaW5nKSB7CisgICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZSgpOwogICAgICAg
ICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiBtX2J1bXBFbmQg
LSAocmVtYWluaW5nICsgMSk7CisgICAgICAgIHJldHVybiBtX2J1bXBFbmQgLSAocmVtYWluaW5n
ICsgY2VsbFNpemUoKSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotdm9pZCogQWxsb2NhdG9yPFQ+OjpmcmVlTGlzdEFsbG9jYXRlKCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkKiBBbGxvY2F0
b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWVMaXN0QWxsb2NhdGUoKQogewogICAgIHZv
aWQqKiByZXN1bHQgPSBtX2ZyZWVMaXN0SGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkp
CkBAIC0xOTIsOCArMjA3LDggQEAgdm9pZCogQWxsb2NhdG9yPFQ+OjpmcmVlTGlzdEFsbG9jYXRl
KCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCog
QWxsb2NhdG9yPFQ+OjphbGxvY2F0ZVNsb3coKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxp
Z25tZW50Pjo6YWxsb2NhdGVTbG93KCkKIHsKICAgICBBU1NFUlQoIW1fZnJlZUxpc3RIZWFkKTsK
ICAgICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CkBAIC0yMTYsOCArMjMxLDggQEAgdm9pZCog
QWxsb2NhdG9yPFQ+OjphbGxvY2F0ZVNsb3coKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZVJlZ2lvbnNTdGFydGlu
Z0F0KHR5cGVuYW1lIEFsbG9jYXRvcjxUPjo6UmVnaW9uKiByZWdpb24pCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwg
Zm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdCh0eXBlbmFtZSBBbGxv
Y2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OlJlZ2lvbiogcmVnaW9uKQogewogICAgIHdo
aWxlIChyZWdpb24pIHsKICAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25l
eHQ7CkBAIC0yMjYsMTEgKzI0MSwxMSBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZVJlZ2lvbnNT
dGFydGluZ0F0CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0
b3I8VD46OnN0YXJ0QnVtcGluZ0luKHR5cGVuYW1lIEFsbG9jYXRvcjxUPjo6UmVnaW9uKiByZWdp
b24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgor
dm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OnN0YXJ0QnVtcGluZ0luKHR5
cGVuYW1lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24p
CiB7Ci0gICAgbV9idW1wRW5kID0gcmVnaW9uLT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhp
bmdzUGVyUmVnaW9uKCk7Ci0gICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRo
aW5nc1BlclJlZ2lvbigpOworICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+cGF5bG9hZEVuZCgpOwor
ICAgIG1fYnVtcFJlbWFpbmluZyA9IFJlZ2lvbjo6cGF5bG9hZFNpemUoKTsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OTgsNiArNjk4LDE4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBt
X2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwKKyAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBFZGdlKGNo
aWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKKyAgICAgICAgQVNTRVJUKG9wICE9
IFBoaSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKKworICAgICAg
ICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCisgICAgICAgICAgICBt
X2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIEVkZ2UgY2hpbGQxLCBFZGdlIGNo
aWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCisgICAgeworICAgICAgICBOb2Rl
KiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKICAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdp
bigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7
CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKQEAgLTcxMCw3ICs3MjIs
NyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKAogICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
Ci0gICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMyk7CisgICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywg
RWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIGlmIChv
cCA9PSBQaGkpCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+cGhpcy5hcHBlbmQocmVzdWx0
KTsKICAgICAgICAgZWxzZQpAQCAtNzI0LDcgKzczNiw3IEBAIHByaXZhdGU6CiAgICAgewogICAg
ICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAgICBEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgIG9wLCBjdXJyZW50
Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAg
ICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwgRWRnZShjaGls
ZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQ
aGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CiAKQEAgLTE0NjUs
NyArMTQ3Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAg
ICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsgLy8gTWF0aC5t
aW4oeCkKICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMSkpOwotICAgICAgICBhZGRUb0dyYXBoKENoZWNrTnVtYmVyLCByZXN1bHQp
OworICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIEVkZ2UocmVzdWx0LCBOdW1iZXJVc2UpKTsK
ICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTY5
LDcgKzk2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNzaW5nIGFyZ3Vt
ZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkFyZ3Vt
ZW50cykKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMTAwMiw2ICsxMDAy
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNo
aWxkKGkpOwogICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgaWYgKGVkZ2UudXNlS2luZCgpICE9IFVudHlwZWRVc2UpCisgICAgICAg
ICAgICAgICAgY29udGludWU7IC8vIEtlZXAgdGhlIHR5cGUgY2hlY2suCiAgICAgICAgICAgICBp
ZiAoZWRnZS0+ZmxhZ3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCkBAIC0xMDE0LDE4ICsxMDE2LDExIEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZW51bSBQcmVkaWN0aW9uSGFuZGxpbmdNb2RlIHsg
UmVxdWlyZVNhbWVQcmVkaWN0aW9uLCBBbGxvd1ByZWRpY3Rpb25NaXNtYXRjaCB9OwotICAgIGJv
b2wgc2V0UmVwbGFjZW1lbnQoTm9kZSogcmVwbGFjZW1lbnQsIFByZWRpY3Rpb25IYW5kbGluZ01v
ZGUgcHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9IFJlcXVpcmVTYW1lUHJlZGljdGlvbikKKyAgICBi
b29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50KQogICAgIHsKICAgICAgICAgaWYg
KCFyZXBsYWNlbWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAg
ICAgIC8vIEJlIHNhZmUuIERvbid0IHRyeSB0byBwZXJmb3JtIHJlcGxhY2VtZW50cyBpZiB0aGUg
cHJlZGljdGlvbnMgZG9uJ3QKLSAgICAgICAgLy8gYWdyZWUuCi0gICAgICAgIGlmIChwcmVkaWN0
aW9uSGFuZGxpbmdNb2RlID09IFJlcXVpcmVTYW1lUHJlZGljdGlvbgotICAgICAgICAgICAgJiYg
bV9jdXJyZW50Tm9kZS0+cHJlZGljdGlvbigpICE9IHJlcGxhY2VtZW50LT5wcmVkaWN0aW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIiAgIFJlcGxhY2luZyBA
JXUgLT4gQCV1IiwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgcmVwbGFjZW1lbnQtPmluZGV4KCkp
OwogI2VuZGlmCkBAIC0xMjMwLDcgKzEyMjUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEpT
Q29uc3RhbnQ6CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHN0cmFuZ2UsIGJ1dCBuZWNlc3Nhcnku
IFNvbWUgcGhhc2VzIHdpbGwgY29udmVydCBub2RlcyB0byBjb25zdGFudHMsCiAgICAgICAgICAg
ICAvLyB3aGljaCBtYXkgcmVzdWx0IGluIGR1cGxpY2F0ZWQgY29uc3RhbnRzLiBXZSB1c2UgQ1NF
IHRvIGNsZWFuIHRoaXMgdXAuCi0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjb25zdGFudENT
RShub2RlKSwgQWxsb3dQcmVkaWN0aW9uTWlzbWF0Y2gpOworICAgICAgICAgICAgc2V0UmVwbGFj
ZW1lbnQoY29uc3RhbnRDU0Uobm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTIgKzgzLDYgQEAgc3Ry
dWN0IE5vZGVQb2ludGVyVHJhaXRzIHsKICAgICBzdGF0aWMgdm9pZCBkdW1wKE5vZGUqIHZhbHVl
LCBQcmludFN0cmVhbSYgb3V0KTsKIH07CiAKLWVudW0gVXNlS2luZCB7Ci0gICAgVW50eXBlZFVz
ZSwKLSAgICBEb3VibGVVc2UsCi0gICAgTGFzdFVzZUtpbmQgLy8gTXVzdCBhbHdheXMgYmUgdGhl
IGxhc3QgZW50cnkgaW4gdGhlIGVudW0sIGFzIGl0IGlzIHVzZWQgdG8gZGVub3RlIHRoZSBudW1i
ZXIgb2YgZW51bSBlbGVtZW50cy4KLX07Ci0KIC8vIFVzZSBSZWZDaGlsZHJlbiBpZiB0aGUgY2hp
bGQgcmVmIGNvdW50cyBoYXZlbid0IGFscmVhZHkgYmVlbiBhZGp1c3RlZCB1c2luZwogLy8gb3Ro
ZXIgbWVhbnMgYW5kIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6CiAvLyAtIFRoZSBu
b2RlIHlvdSdyZSBjcmVhdGluZyBpcyBNdXN0R2VuZXJhdGUuCkBAIC0xMDYsMTkgKzEwMCw2IEBA
IGVudW0gUmVmTm9kZU1vZGUgewogICAgIERvbnRSZWZOb2RlCiB9OwogCi1pbmxpbmUgY29uc3Qg
Y2hhciogdXNlS2luZFRvU3RyaW5nKFVzZUtpbmQgdXNlS2luZCkKLXsKLSAgICBzd2l0Y2ggKHVz
ZUtpbmQpIHsKLSAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICBj
YXNlIERvdWJsZVVzZToKLSAgICAgICAgcmV0dXJuICJkIjsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KIGlubGluZSBib29sIGlzQVJNdjdzKCkKIHsKICNpZiBDUFUoQVBQTEVfQVJNVjdTKQpA
QCAtMjM2LDYgKzIxNyw4IEBAIGVudW0gVW5pZmljYXRpb25TdGF0ZSB7CiAgICAgR2xvYmFsbHlV
bmlmaWVkCiB9OwogCitlbnVtIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgeyBBdXRvbWF0aWNPcGVy
YW5kU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB9OworCiBlbnVtIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIHsgRm9yd2FyZFNwZWN1bGF0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9u
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEwICsxMDMsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgp
OwotICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSkK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIENhdGNoIHRoZSBmYWN0IHRoYXQgd2Ug
bWF5IGZpbHRlciBvbiBjZWxsLgogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE0LDggKzExMywxMSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZVZh
bHVlID0gdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZTsKICAgICAgICAgICAgICAgICBp
ZiAoc3RydWN0dXJlVmFsdWUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICAgICAgICAgICYm
IHN0cnVjdHVyZVZhbHVlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVZhbHVl
LnNpbmdsZXRvbigpKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlVmFsdWUuc2lu
Z2xldG9uKCk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxv
Y2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE0OSwxMCArMTUxLDExIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWRGbHVz
aDogewogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVP
cmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIo
KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0
aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmIChjaGlsZEVkZ2Uu
dXNlS2luZCgpICE9IENlbGxVc2UpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CkBAIC0xNjQsOCArMTY3LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhKCks
IHN0cnVjdHVyZSwgY29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkp
CisgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGFuZGxlIHByb3RvdHlwZSBjYXNlcy4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDM4NgogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmVT
ZXQoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5jaGFpbigp
LmlzRW1wdHkoKSk7CkBAIC0xODEsMTggKzE4NywyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2Rl
T3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1
Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5m
b3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5
U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9y
YWdlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsKICAg
ICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKLSAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGQ7CisgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKICAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNv
ZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQobV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlKTsKQEAgLTIwNyw5ICsy
MTksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgICAg
IGNhc2UgUHV0QnlJZERpcmVjdDogewogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBu
b2RlLT5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5u
b2RlKCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBB
U1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKKyAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShj
aGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0
dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzOCw5ICsyNTMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUuZm9yTm9kZShjaGlsZCku
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2Rl
T3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3Bl
Y05vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGls
ZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0
YSA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkg
ewogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uRGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoCkBAIC0yNjQsMzggKzI4NSwzOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgTm9k
ZSogcHJvcGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdl
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChz
dGF0dXMub2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsgLy8g
VGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUgcHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0
byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hp
bGRFZGdlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFj
ZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRC
dXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUs
IEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5v
ZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcElu
Zm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
T3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3Rh
dHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVkZ2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvZGVPcmlnaW4sIGNoaWxkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24o
KSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9Q
dXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0
b3JhZ2UpOwpAQCAtMzQwLDcgKzM2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHBoYW50b20gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b21Mb2NhbCwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgcGhpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKHBo
aSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IHBoYW50b207CiAgICAgICAgICAgICAgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhh
bnRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMzkxLDEzICs0MTIsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsCi0gICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgd2Vha0NvbnN0YW50
KTsKKyAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkp
LCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tT
dHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQoY2VsbC0+c3RydWN0dXJlKCkpKSwgd2Vha0NvbnN0YW50KTsKKyAgICAgICAgICAg
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCBFZGdl
KHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIHRoZSBDRkEgbWF5IHJlYWNoIGNvbmNsdXNpb25zIGFib3V0IGNvbnN0
YW50cyBiYXNlZCBvbiBpdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDggKzE0NCw2IEBAIGlubGluZSBib29s
IGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgaWYgKCFjaGFuZ2VkKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICBkZmcucmVzZXRFeGl0U3RhdGVzKCk7
Ci0gICAgICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDkgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEVkZ2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKLSAgICBvdXQucHJpbnQodXNlS2luZFRvU3RyaW5nKHVzZUtpbmQoKSksIG5vZGUoKSk7
CisgICAgaWYgKHVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQorICAgICAgICBvdXQucHJpbnQodXNl
S2luZCgpLCAiOiIpOworICAgIG91dC5wcmludChub2RlKCkpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNp
b24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC02MiwxMiArNjMsMTggQEAgcHVibGljOgogICAgICAg
ICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2luZCgpKTsKICAgICB9CiAgICAg
Ci0gICAgVXNlS2luZCB1c2VLaW5kKCkgY29uc3QKKyAgICBVc2VLaW5kIHVzZUtpbmRVbmNoZWNr
ZWQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUoKSk7CiAgICAgICAgIHVuc2ln
bmVkIG1hc2tlZCA9IG1fZW5jb2RlZFdvcmQgJiAoKCgxIDw8IHNoaWZ0KCkpIC0gMSkpOwogICAg
ICAgICBBU1NFUlQobWFza2VkIDwgTGFzdFVzZUtpbmQpOwotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VXNlS2luZD4obWFza2VkKTsKKyAgICAgICAgVXNlS2luZCByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxVc2VLaW5kPihtYXNrZWQpOworICAgICAgICBBU1NFUlQobm9kZSgpIHx8IHJlc3VsdCA9
PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgVXNlS2lu
ZCB1c2VLaW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworICAgICAg
ICByZXR1cm4gdXNlS2luZFVuY2hlY2tlZCgpOwogICAgIH0KICAgICB2b2lkIHNldFVzZUtpbmQo
VXNlS2luZCB1c2VLaW5kKQogICAgIHsKQEAgLTk2LDcgKzEwMyw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVp
bnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gMjsgfQorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgp
IHsgcmV0dXJuIDQ7IH0KICAgICAKICAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUq
IG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDkgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBCZWZvcmVGaXhwb2ludCk7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAogICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KQogICAgICAgICAgICAgZml4dXBCbG9jayht
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC03Niw1MCArNzksMjYyIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAg
IHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKKyAgICAgICAgY2FzZSBT
ZXRMb2NhbDogeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
dmFyaWFibGUtPmlzQ2FwdHVyZWQoKQorICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGguaXNDcmVh
dGVkVGhpc0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obm9k
ZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91
YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxk
MSgpLCBOdW1iZXJVc2UsIEZvcndhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRp
Zmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0ZWRUeXBlID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICBj
YXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6
CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKKyAg
ICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4SW50
RWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25JbnQzMlVzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjog
eworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50
MzI6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQz
MlVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSA9IAotICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMp
OwotICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgICAgIGFycmF5
UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+Y29kZU9yaWdpbikpOwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFy
cmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsK
LSAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9u
KCkpOwotICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBh
cnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0
cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJl
KCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKE51bWJlclVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChOb3RDZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOiB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAgICAgICAgICBpZiAoYXR0
ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1YjogeworICAgICAg
ICAgICAgaWYgKGF0dGVtcHRUb01ha2VJbnRlZ2VyQWRkKG5vZGUpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZTogewor
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4
RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIGlm
IChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNYODYoKSB8fCBpc0FSTXY3cygpKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
YXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigp
LCBub2RlLT5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuc3VwcG9y
dHNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUobm9k
ZS0+Y2hpbGQyKCkpOworCisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBy
ZWYnaW5nIG9uIHRoZSBjaGlsZHJlbiBiZWNhdXNlIHdlJ3JlIHN0ZWFsaW5nIHRoZW0gZnJvbQor
ICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBkaXZpc2lvbi4KKyAgICAgICAgICAgICAg
ICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNw
ZWNEb3VibGUsICpub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcChEb3VibGVBc0ludDMyKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5p
bml0aWFsaXplKEVkZ2UobmV3RGl2aXNpb24sIEtub3duTnVtYmVyVXNlKSwgRWRnZSgpLCBFZGdl
KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0
QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVz
dEdlbmVyYXRlKTsKLSAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7
Ci0gICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tB
cnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
MCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAg
ICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgY2FzZSBBcml0aE1pbjoKKyAgICAgICAgY2FzZSBB
cml0aE1heDoKKyAgICAgICAgY2FzZSBBcml0aE1vZDogeworICAgICAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtp
bmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFiczogeworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisg
ICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcml0aFNxcnQ6IHsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2Up
OworICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigp
KQorICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY2FuQ1NFU3Rv
cmFnZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFR5cGVPZjogeworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKFN0cmluZ1VzZSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZUVx
OgorICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgorICAgICAgICBjYXNlIENvbXBhcmVM
ZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcTogeworICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxQ29uc3RhbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1i
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAg
ICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDb21wYXJlRXEp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxh
dGVTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNl
dFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0
KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkgJiYgbm9kZS0+
Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICBjYXNlIENv
bXBhcmVTdHJpY3RFcUNvbnN0YW50OiB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBD
b21wYXJlU3RyaWN0RXFDb25zdGFudCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigp
LnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0
KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVz
ZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2Fz
ZSBTdHJpbmdDaGFyQ29kZUF0OiB7CisgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2UgaGF2ZSBu
byBnb29kIHdheSBvZiByZWZpbmluZyB0aGVzZS4KKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5h
cnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0cmluZykpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7
CiAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+
YXJyYXlNb2RlKCkucmVmaW5lKApAQCAtMTI3LDcgKzM0Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAg
ICAgICAgIFNwZWNOb25lLCBub2RlLT5mbGFncygpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAy
KTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUt
PmNoaWxkMigpLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFy
cmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgICAgIGlmIChh
cnJheU1vZGUudHlwZSgpID09IEFycmF5OjpEb3VibGUKQEAgLTEzOCwxMyArMzUzLDc3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgIShub2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090
aGVyKSkKICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhT
cGVjdWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5w
cm9maWxlZDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgY2FzZSBB
cnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoK
LSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0gICAgICAgICAgICAvLyBDdXJyZW50
bHkgd2UgaGF2ZSBubyBnb29kIHdheSBvZiByZWZpbmluZyB0aGVzZS4KLSAgICAgICAgICAgIEFT
U0VSVChub2RlLT5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0cmluZykpOwotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCksIDIpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgRWRnZSYgY2hpbGQxID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UmIGNoaWxkMiA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdlJiBjaGlsZDMgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpOworCisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUo
CisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAg
ICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQy
LT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+cHJlZGljdGlvbigp
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQx
LCBjaGlsZDIsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6
VW5kZWNpZGVkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAgICAgIGNo
aWxkMS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgY2hpbGQyLnNl
dFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoY2hpbGQz
LCBSZWFsTnVtYmVyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6
CisgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICAgICAgY2FzZSBB
cnJheTo6VWludDhBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgICAgICAgICBjaGlsZDEuc2V0VXNlS2lu
ZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIGNoaWxkMi5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMy5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoY2hp
bGQzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0MzJBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAg
ICAgICAgICAgICBjaGlsZDEuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAg
ICAgIGNoaWxkMi5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKGNoaWxkMyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGNoaWxkMS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7Cisg
ICAgICAgICAgICAgICAgY2hpbGQyLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtMTYzLDExICs0NDIsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNDZWxsLAogICAgICAg
ICAgICAgICAgICAgICBTcGVjSW50MzIsCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9k
ZS0+Y2hpbGQxKCksIEVkZ2UoKSwgMik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAg
ICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTc2LDQ5ICs0NTksMjcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQXJyYXlQb3A6IHsKLSAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24o
bm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQml0QW5kOgotICAgICAgICBjYXNlIEJpdE9y
OgotICAgICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAgICAg
IGNhc2UgQml0TFNoaWZ0OgotICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKLSAgICAgICAgICAg
IGZpeEludEVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkpOwotICAgICAgICAgICAgZml4SW50
RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBjYXNl
IENvbXBhcmVMZXNzOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNhc2Ug
Q29tcGFyZUdyZWF0ZXI6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAg
Y2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxk
U3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAgYmxlc3NBcnJh
eU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCBub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTG9naWNh
bE5vdDogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgIGNhc2UgUmVnRXhwRXhl
YzoKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0OiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChDZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDApOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChC
b29sZWFuVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICAgICAg
Zml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgICAgIE5vZGUqIGxvZ2lj
YWxOb3QgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAobG9naWNhbE5v
dC0+b3AoKSA9PSBMb2dpY2FsTm90CkBAIC0yNjEsMTQ5ICs1MjIsMjY0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
U2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDAsIEZvcndhcmRT
cGVjdWxhdGlvbik7CisgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgLy8g
RklYTUU6IEFkZCBzdHJpbmcgc3BlY3VsYXRpb24gaGVyZS4KKyAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxNzUKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aEFkZDoKLSAg
ICAgICAgY2FzZSBWYWx1ZUFkZDogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAgICAgY2FzZSBOZXdBcnJheTogeworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJlbihub2RlKTsg
aS0tOykgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldEluZGV4aW5nVHlwZSgKKyAgICAgICAg
ICAgICAgICAgICAgbGVhc3RVcHBlckJvdW5kT2ZJbmRleGluZ1R5cGVBbmRUeXBlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+aW5kZXhpbmdUeXBlKCksIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgaSktPnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bnVtQ2hpbGRyZW4oKSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIHdpbGwgb25seSBoYXBwZW4gaWYgdGhlIGNoaWxkcmVuIGhhdmUg
bm8gdHlwZSBwcmVkaWN0aW9ucy4gV2UKKyAgICAgICAgICAgICAgICAgICAgLy8gd291bGQgaGF2
ZSBhbHJlYWR5IGV4aXRlZCBieSBub3csIGJ1dCBpbnNlcnQgYSBmb3JjZWQgZXhpdCBqdXN0IHRv
CisgICAgICAgICAgICAgICAgICAgIC8vIGJlIHNhZmUuCisgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NS
RXhpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxM
X0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3Bl
cmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVy
YW5kSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltu
b2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSW5kZXhdLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0g
MDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCisg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSW5kZXhdLnNldFVzZUtpbmQoUmVhbE51bWJlclVzZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzoKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTm9kZTo6c2hvdWxk
U3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIENSQVNIKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcml0aFN1YjogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
MCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICBjYXNlIE5ld0FycmF5
V2l0aFNpemU6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJV
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEFyaXRoTmVnYXRlOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5uZWdhdGVTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBDb252ZXJ0VGhpczogeworICAg
ICAgICAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE90aGVyVXNl
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChPYmplY3RVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFyaXRoTWluOgotICAgICAgICBjYXNlIEFyaXRoTWF4OgotICAg
ICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdl
cigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgw
KTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgQ3JlYXRlVGhp
czogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cml0aE11bDogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7
CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBcml0aERpdjogewotICAg
ICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAg
ICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgICAgIGlm
IChpc1g4NigpIHx8IGlzQVJNdjdzKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2RlKDApOwotICAgICAgICAgICAgICAg
IGluamVjdEludDMyVG9Eb3VibGVOb2RlKDEpOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgZG9u
J3QgbmVlZCB0byBkbyByZWYnaW5nIG9uIHRoZSBjaGlsZHJlbiBiZWNhdXNlIHdlJ3JlIHN0ZWFs
aW5nIHRoZW0gZnJvbQotICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBkaXZpc2lvbi4K
LSAgICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsICpub2RlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcChEb3VibGVBc0ludDMyKTsKLSAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKEVkZ2UobmV3RGl2aXNpb24sIERvdWJsZVVzZSksIEVk
Z2UoKSwgRWRnZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEp
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0U2NvcGVSZWdpc3RlcnM6CisgICAgICAg
IGNhc2UgUHV0U2NvcGVkVmFyOgorICAgICAgICBjYXNlIFNraXBUb3BTY29wZToKKyAgICAgICAg
Y2FzZSBTa2lwU2NvcGU6CisgICAgICAgIGNhc2UgU2V0Q2FsbGVlOgorICAgICAgICBjYXNlIFNl
dE15U2NvcGU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CisgICAgICAgIGNhc2UgR2V0U2NvcGU6CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OiB7
CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJpdGhBYnM6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgY2FzZSBHZXRCeUlkOiB7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2Up
OworICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obm9kZS0+cHJlZGljdGlvbigp
KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+
aWRlbnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IGdsb2JhbERhdGEoKS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAorICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFz
ZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAg
ICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5n
UHJlZGljdGlvbnMpOworICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkgeworICAgICAgICAg
ICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFz
ZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbikpOworICAgICAgICAgICAgICAgIGFy
cmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJl
YWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5l
KAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2Rl
LT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNM
ZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNO
b25lLCBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVP
cmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVj
dGVkU3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBw
b3J0c0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91
YmxlRWRnZSgwKTsKKyAgICAgICAgICAgIG5vZGUtPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKKyAg
ICAgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7CisgICAg
ICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNX
b3JsZCk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CisgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOworICAgICAgICAgICAgbm9kZS0+
c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUq
IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKSA9IEVkZ2Uoc3RvcmFn
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJpdGhTcXJ0OiB7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOworICAgICAg
ICBjYXNlIEdldEJ5SWRGbHVzaDogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChDZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OiB7Ci0gICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCk7Ci0gICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSk7Ci0gICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
Mik7Ci0KLSAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICBu
b2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJl
ZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBjaGlsZDItPnByZWRpY3Rpb24oKSwKLSAg
ICAgICAgICAgICAgICAgICAgY2hpbGQzLT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihjaGlsZDEsIGNoaWxkMiwgMyk7CisgICAg
ICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgor
ICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKKyAgICAgICAg
Y2FzZSBQdXRCeUlkOgorICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2Ug
Q2hlY2tIYXNJbnN0YW5jZTogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2lu
ZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUo
KSkgewotICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgICAgIGZp
eERvdWJsZUVkZ2UoMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5Ogot
ICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJh
eToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGlsZDMtPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgy
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0
MzJBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKDIpOworICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0
VXNlS2luZChTdHJpbmdVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxV
c2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5ld0FycmF5OiB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVu
KG5vZGUpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBlKAot
ICAgICAgICAgICAgICAgICAgICBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCBpKS0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAobm9kZS0+aW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC52YXJBcmdOdW1DaGlsZHJl
bihub2RlKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShpKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheWlmeToKKyAgICAgICAgY2FzZSBBcnJheWlm
eVRvU3RydWN0dXJlOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENl
bGxVc2UpOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OiB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdl
UmVzdWx0KCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93
bkNlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChLbm93bkNl
bGxVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEluc3RhbmNlT2Y6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGFwcGVh
cnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9lcyBhbiB1bmNvbmRpdGlvbmFs
IGNlbGwKKyAgICAgICAgICAgIC8vIGNoZWNrLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA3NDc5CisgICAgICAgICAgICBpZiAoIShub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpICYgflNwZWNDZWxsKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2lu
ZChDZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBJZGVudGl0eToKKyAg
ICAgICAgY2FzZSBOb3A6CisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIEZvcndhcmRJ
bnQzMlRvRG91YmxlOgorICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CisgICAgICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBMYXN0Tm9kZVR5
cGU6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIAorI2lmICFBU1NFUlRfRElTQUJMRUQgICAgCisgICAgICAgIC8v
IEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0
cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgorICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50OgorICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAg
ICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKKyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAg
ICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgIGNhc2UgUGhh
bnRvbUxvY2FsOgorICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CisgICAgICAgIGNhc2Ug
SW5saW5lU3RhcnQ6CisgICAgICAgIGNhc2UgR2V0TXlTY29wZToKKyAgICAgICAgY2FzZSBHZXRT
Y29wZWRWYXI6CisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgorICAgICAgICBjYXNlIFB1dEds
b2JhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgorICAgICAgICBjYXNl
IFB1dEdsb2JhbFZhckNoZWNrOgorICAgICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hw
b2ludDoKKyAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAg
ICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CisgICAgICAg
IGNhc2UgTmV3UmVnZXhwOgorICAgICAgICBjYXNlIFJlc29sdmU6CisgICAgICAgIGNhc2UgUmVz
b2x2ZUJhc2U6CisgICAgICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6CisgICAgICAgIGNh
c2UgUmVzb2x2ZUdsb2JhbDoKKyAgICAgICAgY2FzZSBCcmVha3BvaW50OgorICAgICAgICBjYXNl
IElzVW5kZWZpbmVkOgorICAgICAgICBjYXNlIElzQm9vbGVhbjoKKyAgICAgICAgY2FzZSBJc051
bWJlcjoKKyAgICAgICAgY2FzZSBJc1N0cmluZzoKKyAgICAgICAgY2FzZSBJc09iamVjdDoKKyAg
ICAgICAgY2FzZSBJc0Z1bmN0aW9uOgorICAgICAgICBjYXNlIFN0ckNhdDoKKyAgICAgICAgY2Fz
ZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOgorICAg
ICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRz
OgorICAgICAgICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6CisgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudHNMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOgorICAg
ICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKKyAgICAgICAgY2FzZSBOZXdGdW5j
dGlvbjoKKyAgICAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CisgICAgICAgIGNhc2UgTmV3
RnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICBjYXNlIEp1bXA6CisgICAgICAgIGNhc2UgUmV0
dXJuOgorICAgICAgICBjYXNlIFRocm93OgorICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJy
b3I6CisgICAgICAgIGNhc2UgR2FyYmFnZVZhbHVlOgorICAgICAgICBjYXNlIENvdW50RXhlY3V0
aW9uOgorICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKKyAgICAgICAgICAgIGJyZWFrOworI2Vs
c2UKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAg
IH0KIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTQyMSw2
ICs3OTcsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBhcnJheU1vZGUub3JpZ2luYWxBcnJheVN0cnVjdHVyZShtX2dyYXBoLCBjb2RlT3JpZ2lu
KTsKICAgICAgICAgCisgICAgICAgIEVkZ2UgaW5kZXhFZGdlID0gaW5kZXggPyBFZGdlKGluZGV4
LCBJbnQzMlVzZSkgOiBFZGdlKCk7CisgICAgICAgIAogICAgICAgICBpZiAoYXJyYXlNb2RlLmRv
ZXNDb252ZXJzaW9uKCkpIHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKICAgICAgICAg
ICAgICAgICBpZiAobV9pbmRleEluQmxvY2sgPiAwKSB7CkBAIC00MzUsMjEgKzgxMywyMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBBcnJheWlmeVRvU3RydWN0dXJlLCBjb2RlT3Jp
Z2luLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIGFycmF5LCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhzdHJ1Y3R1cmUpLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgQ2Vs
bFVzZSksIGluZGV4RWRnZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBBcnJheWlmeSwgY29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IGFycmF5LCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNX
b3JkKCkpLCBFZGdlKGFycmF5LCBDZWxsVXNlKSwgaW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBt
X2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tT
dHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBo
LmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgYXJyYXkpOworICAgICAgICAgICAgICAgICAg
ICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIEVkZ2UoYXJyYXks
IENlbGxVc2UpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrQXJyYXksIGNvZGVPcmln
aW4sCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBhcnJh
eSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdl
KGFycmF5LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC00NjEsMjEgKzgzOSwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLAogICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBEb250
UmVmQ2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZOb2RlIDog
RG9udFJlZk5vZGUsCi0gICAgICAgICAgICAgICAgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29k
ZU9yaWdpbiwgYXJyYXkpOworICAgICAgICAgICAgICAgIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHks
IGNvZGVPcmlnaW4sIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLAogICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZDaGls
ZHJlbiA6IERvbnRSZWZDaGlsZHJlbiwKICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVm
Tm9kZSA6IERvbnRSZWZOb2RlLAotICAgICAgICAgICAgU3BlY05vbmUsIEdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBhcnJh
eSk7CisgICAgICAgICAgICBTcGVjTm9uZSwgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29k
ZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2Vs
bFVzZSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBi
YXNlLCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCisgICAgdm9pZCBibGVz
c0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgRWRnZSYgc3RvcmFnZUNoaWxk
KQogICAgIHsKLSAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4
cG9pbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAogICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50Tm9kZTsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CkBAIC00OTksNyArODc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fZ3JhcGguY2hpbGQobm9kZSwgc3RvcmFnZUNoaWxkSWR4KSA9IEVkZ2Uoc3Rv
cmFnZSk7CisgICAgICAgICAgICBzdG9yYWdlQ2hpbGQgPSBFZGdlKHN0b3JhZ2UpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9IH0KICAgICB9CkBAIC01MDcsNDggKzg4Miw5MiBAQCBw
cml2YXRlOgogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsKICAgICAgICAg
Tm9kZSogbm9kZSA9IGVkZ2Uubm9kZSgpOwotICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBWYWx1
ZVRvSW50MzIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgIGlmIChub2Rl
LT5vcCgpICE9IFZhbHVlVG9JbnQzMikgeworICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKEtu
b3duSW50MzJVc2UpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBFZGdlIG9sZEVkZ2UgPSBlZGdlOwogICAgICAgICBFZGdlIG5ld0VkZ2UgPSBub2Rl
LT5jaGlsZDEoKTsKICAgICAgICAgCisgICAgICAgIGlmIChuZXdFZGdlLnVzZUtpbmQoKSAhPSBJ
bnQzMlVzZSkgeworICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKEtub3duSW50MzJVc2UpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
bmV3RWRnZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKTsKKyAgICAgICAgCiAgICAgICAgIG1f
Z3JhcGgucmVmKG5ld0VkZ2UpOwogICAgICAgICBtX2dyYXBoLmRlcmVmKG9sZEVkZ2UpOwogICAg
ICAgICAKICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CiAgICAgfQogICAgIAotICAgIHZvaWQgZml4
RG91YmxlRWRnZSh1bnNpZ25lZCBjaGlsZEluZGV4LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIHZvaWQgZml4RG91YmxlRWRnZShFZGdl
JiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgewotICAgICAgICBOb2RlKiBz
b3VyY2UgPSBtX2N1cnJlbnROb2RlOwotICAgICAgICBFZGdlJiBlZGdlID0gbV9ncmFwaC5jaGls
ZChzb3VyY2UsIGNoaWxkSW5kZXgpOwotICAgICAgICAKICAgICAgICAgaWYgKGVkZ2UtPnByZWRp
Y3Rpb24oKSAmIFNwZWNEb3VibGUpIHsKLSAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChEb3Vi
bGVVc2UpOworICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKHVzZUtpbmQpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpbmplY3RJbnQzMlRvRG91
YmxlTm9kZShjaGlsZEluZGV4LCBkaXJlY3Rpb24pOworICAgICAgICBpbmplY3RJbnQzMlRvRG91
YmxlTm9kZShlZGdlLCB1c2VLaW5kLCBkaXJlY3Rpb24pOwogICAgIH0KIAotICAgIHZvaWQgaW5q
ZWN0SW50MzJUb0RvdWJsZU5vZGUodW5zaWduZWQgY2hpbGRJbmRleCwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICB2b2lkIGluamVjdElu
dDMyVG9Eb3VibGVOb2RlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVzZSwg
U3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKICAg
ICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVj
RG91YmxlLAogICAgICAgICAgICAgZGlyZWN0aW9uID09IEJhY2t3YXJkU3BlY3VsYXRpb24gPyBJ
bnQzMlRvRG91YmxlIDogRm9yd2FyZEludDMyVG9Eb3VibGUsCi0gICAgICAgICAgICBtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luLCBtX2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNoaWxkSW5k
ZXgpLm5vZGUoKSk7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBFZGdl
KGVkZ2Uubm9kZSgpLCBOdW1iZXJVc2UpKTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigKICAgICAgICAgICAgICIo
cmVwbGFjaW5nIEAldS0+QCV1IHdpdGggQCV1LT5AJXUpICIsCi0gICAgICAgICAgICBtX2N1cnJl
bnROb2RlLT5pbmRleCgpLCBtX2dyYXBoLmNoaWxkKG1fY3VycmVudE5vZGUsIGNoaWxkSW5kZXgp
LT5pbmRleCgpLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCByZXN1bHQtPmluZGV4KCkpOworICAg
ICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgZWRnZS0+aW5kZXgoKSwgbV9jdXJyZW50
Tm9kZS0+aW5kZXgoKSwgcmVzdWx0LT5pbmRleCgpKTsKICNlbmRpZgogCi0gICAgICAgIG1fZ3Jh
cGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkgPSBFZGdlKHJlc3VsdCwgRG91Ymxl
VXNlKTsKKyAgICAgICAgZWRnZSA9IEVkZ2UocmVzdWx0LCB1c2VLaW5kKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihFZGdlJiBlZGdlKQorICAgIHsKKyAg
ICAgICAgTm9kZSogb2xkTm9kZSA9IGVkZ2Uubm9kZSgpOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKG9sZE5vZGUtPmhhc0NvbnN0YW50KCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9n
cmFwaC52YWx1ZU9mSlNDb25zdGFudChvbGROb2RlKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50
MzIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0ganNO
dW1iZXIoSlNDOjp0b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkpKTsKKyAgICAgICAgQVNTRVJUKHZh
bHVlLmlzSW50MzIoKSk7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAorICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVm
Tm9kZSwgU3BlY0ludDMyLCBKU0NvbnN0YW50LAorICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbiwgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkp
KSk7CisgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkTm9kZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2RlKiBub2RlLCBBZGRTcGVjdWxhdGlv
bk1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGlmIChtb2RlICE9IFNwZWN1bGF0ZUludGVnZXJB
bmRUcnVuY2F0ZUNvbnN0YW50cykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSB8fCBub2RlLT5jaGlsZDIo
KS0+aGFzQ29uc3RhbnQoKSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3Rh
bnQoKSkKKyAgICAgICAgICAgIHRydW5jYXRlQ29uc3RhbnRUb0ludDMyKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJ1bmNhdGVDb25zdGFudFRvSW50MzIobm9k
ZS0+Y2hpbGQyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGF0dGVtcHRUb01ha2VJbnRlZ2Vy
QWRkKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9
IG1fZ3JhcGguYWRkU3BlY3VsYXRpb25Nb2RlKG5vZGUpOworICAgICAgICBpZiAobW9kZSA9PSBE
b250U3BlY3VsYXRlSW50ZWdlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3Nhcnkobm9kZSwgbW9kZSk7CisgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICBub2RlLT5j
aGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDQ1ICszNDYsMTQgQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIH0KIH0KIAotLy8gRklYTUU6
IENvbnZlcnQgdGhpcyB0byBiZSBpdGVyYXRpdmUsIG5vdCByZWN1cnNpdmUuCi0jZGVmaW5lIERP
X1RPX0NISUxEUkVOKG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSArIF9u
b2RlLT5udW1DaGlsZHJlbigpOyBcCi0gICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg
aWYgKCEhbV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElk
eF0pOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gZWxzZSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNTRVJUKCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICFf
bm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGls
ZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0
aGluZ1RvRG8oX25vZGUtPmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDMoKSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoZmFsc2Up
Ci0KIHZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9wKQogewotICAgIERPX1RPX0NISUxE
UkVOKG9wLCByZWYpOworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKCp0aGlzLCBvcCwgcmVm
KTsKIH0KIAogdm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2RlKiBvcCkKIHsKLSAgICBET19U
T19DSElMRFJFTihvcCwgZGVyZWYpOworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKCp0aGlz
LCBvcCwgZGVyZWYpOwogfQogCiB2b2lkIEdyYXBoOjpkZXRocmVhZCgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcg
QEAgc3RydWN0IFB1dFRvQmFzZU9wZXJhdGlvbkRhdGEgewogCiBlbnVtIEFkZFNwZWN1bGF0aW9u
TW9kZSB7CiAgICAgRG9udFNwZWN1bGF0ZUludGVnZXIsCi0gICAgU3BlY3VsYXRlSW50ZWdlckJ1
dEFsd2F5c1dhdGNoT3ZlcmZsb3csCisgICAgU3BlY3VsYXRlSW50ZWdlckFuZFRydW5jYXRlQ29u
c3RhbnRzLAogICAgIFNwZWN1bGF0ZUludGVnZXIKIH07CiAKQEAgLTEwMCwxMCArMTAwLDE0IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGUpOwogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9Ci0gICAgRWRnZSByZWYoRWRnZSBub2RlVXNlKQorICAgIEVkZ2UgcmVmKEVk
Z2UgZWRnZSkKICAgICB7Ci0gICAgICAgIHJlZihub2RlVXNlLm5vZGUoKSk7Ci0gICAgICAgIHJl
dHVybiBub2RlVXNlOworICAgICAgICByZWYoZWRnZS5ub2RlKCkpOworICAgICAgICByZXR1cm4g
ZWRnZTsKKyAgICB9CisgICAgRWRnZSByZWYoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWYoZWRnZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZGVyZWYoTm9kZSog
bm9kZSkKQEAgLTExNSw5ICsxMTksMTMgQEAgcHVibGljOgogICAgICAgICBpZiAobm9kZS0+cG9z
dGZpeERlcmVmKCkgPT0gMSkKICAgICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZSk7CiAgICAg
fQotICAgIHZvaWQgZGVyZWYoRWRnZSBub2RlVXNlKQorICAgIHZvaWQgZGVyZWYoRWRnZSBlZGdl
KQogICAgIHsKLSAgICAgICAgZGVyZWYobm9kZVVzZS5ub2RlKCkpOworICAgICAgICBkZXJlZihl
ZGdlLm5vZGUoKSk7CisgICAgfQorICAgIHZvaWQgZGVyZWYoTm9kZSosIEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIGRlcmVmKGVkZ2UpOwogICAgIH0KICAgICAKICAgICAvLyBXaGVuIGEgbm9k
ZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxseSkgcmVjdXJz
aXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgpAQCAtMTc0LDkg
KzE4Miw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3Rp
dHV0aW9uRm9yRWRnZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVk
Z2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAg
IHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBzaG91
bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2Rl
LT5jaGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKKyAg
ICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMigpLCBzaG91
bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2Rl
LT5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAt
NTMwLDkgKzUzOCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzUHJlZGljdGVkTnVtZXJp
Y2FsKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9k
ZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQg
PSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwotICAgICAgICByZXR1cm4gaXNOdW1iZXJT
cGVjdWxhdGlvbihsZWZ0KSAmJiBpc051bWJlclNwZWN1bGF0aW9uKHJpZ2h0KTsKKyAgICAgICAg
cmV0dXJuIGlzTnVtZXJpY2FsKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgJiYgaXNOdW1lcmlj
YWwobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpKTsKICAgICB9CiAgICAgCiAgICAgLy8gTm90ZSB0
aGF0IGEgJ3RydWUnIHJldHVybiBkb2VzIG5vdCBhY3R1YWxseSBtZWFuIHRoYXQgdGhlIEJ5VmFs
IGFjY2VzcyBjbG9iYmVycyBub3RoaW5nLgpAQCAtNzgxLDcgKzc4Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGlmIChkb3VibGVJbW1lZGlhdGUgPCAtdHdvVG9UaGU0OCB8fCBkb3VibGVJbW1lZGlh
dGUgPiB0d29Ub1RoZTQ4KQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVjdWxhdGVJbnRlZ2Vy
OwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoYWRkLT5h
cml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93
IDogRG9udFNwZWN1bGF0ZUludGVnZXI7CisgICAgICAgIHJldHVybiBub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKGFkZC0+YXJpdGhOb2RlRmxhZ3MoKSkgPyBTcGVjdWxhdGVJbnRlZ2VyQW5kVHJ1bmNh
dGVDb25zdGFudHMgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIG11bCwgTm9kZSogdmFy
aWFibGUsIE5vZGUqIGltbWVkaWF0ZSkKQEAgLTgzMCw2ICs4MzYsMzYgQEAgaW5saW5lIEJsb2Nr
SW5kZXggR3JhcGg6OmJsb2NrSW5kZXhGb3JCeQogICAgIHJldHVybiAqYmluYXJ5U2VhcmNoPEJs
b2NrSW5kZXgsIHVuc2lnbmVkPihsaW5raW5nVGFyZ2V0cywgbGlua2luZ1RhcmdldHMuc2l6ZSgp
LCBieXRlY29kZUJlZ2luLCBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2soKnRoaXMpKTsKIH0KIAor
I2RlZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBk
byB7ICAgICAgICAgICAgXAorICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX25vZGUtPmZs
YWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBfY2hpbGRJZHggPSBfbm9kZS0+Zmlyc3RDaGlsZCgpOyAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9jaGlsZElkeCA8IF9ub2RlLT5maXJzdENo
aWxkKCkgKyBfbm9kZS0+bnVtQ2hpbGRyZW4oKTsgXAorICAgICAgICAgICAgICAgIF9jaGlsZElk
eCsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgIGlmICghIShncmFwaCkubV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKSAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIChncmFwaCku
bV92YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgXAorICAgICAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS0+Y2hpbGQxKCkpIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgICAgICAhX25vZGUtPmNoaWxkMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUtPmNoaWxkMygpKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQxKCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYg
KCFfbm9kZS0+Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUtPmNoaWxkMygpKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9k
ZS0+Y2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLCBfbm9kZS0+Y2hpbGQz
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g
d2hpbGUgKGZhbHNlKQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0MzQyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSwx
MSArOTUsMTAgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9u
ZSkKICAgICB7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKLSAgICAgICAgQVNT
RVJUKCEhKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykgPT0gKGNoaWxkcmVuLmtpbmQoKSA9PSBB
ZGphY2VuY3lMaXN0OjpWYXJpYWJsZSkpOwogICAgIH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3Qg
YSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZSogY2hpbGQxID0gMCwg
Tm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKKyAgICBOb2RlKE5vZGVUeXBlIG9w
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEVkZ2UgY2hpbGQxID0gRWRnZSgpLCBFZGdlIGNoaWxk
MiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgICAgIDogY29kZU9yaWdpbihj
b2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIpCkBAIC0xMTEsNyArMTEwLDcgQEAgc3RydWN0IE5vZGUgewogICAgIH0K
IAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBp
bW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBPcEluZm8gaW1tLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2Rl
KiBjaGlsZDMgPSAwKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgT3BJbmZvIGltbSwgRWRnZSBjaGlsZDEgPSBFZGdlKCksIEVkZ2UgY2hpbGQyID0gRWRnZSgp
LCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4p
CiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQy
LCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKQEAgLTEyNCw3ICsxMjMsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8g
Q29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUg
dmFsdWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJ
bmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAw
LCBOb2RlKiBjaGlsZDMgPSAwKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBFZGdlIGNoaWxkMSA9IEVkZ2UoKSwg
RWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgICAgICA6IGNv
ZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpG
aXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rl
cihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpAQCAtMjk0LDIyICsyOTMsMjIgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1
Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
Y29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9k
ZSogc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X29wID09IEdldEJ5SWQgfHwgbV9vcCA9PSBHZXRCeUlkRmx1c2gpOwogICAgICAgICBtX29wSW5m
byA9IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7Ci0gICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShF
ZGdlKHN0b3JhZ2UpKTsKKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKHN0b3JhZ2UpOwogICAg
ICAgICBtX29wID0gR2V0QnlPZmZzZXQ7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVy
c1dvcmxkOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2ln
bmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIE5vZGUqIHN0b3JhZ2UpCisgICAgdm9pZCBjb252
ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBFZGdlIHN0
b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0g
UHV0QnlJZERpcmVjdCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eDsKICAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQzKGNoaWxkcmVuLmNoaWxkMigpKTsKICAgICAg
ICAgY2hpbGRyZW4uc2V0Q2hpbGQyKGNoaWxkcmVuLmNoaWxkMSgpKTsKLSAgICAgICAgY2hpbGRy
ZW4uc2V0Q2hpbGQxKEVkZ2Uoc3RvcmFnZSkpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEo
c3RvcmFnZSk7CiAgICAgICAgIG1fb3AgPSBQdXRCeU9mZnNldDsKICAgICAgICAgbV9mbGFncyAm
PSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQpAQCAtOTQ5LDkgKzk0OCwxMCBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKICAgICAgICAgY2FzZSBQaGFudG9t
QXJndW1lbnRzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgUGhhbnRv
bToKICAgICAgICAgY2FzZSBOb3A6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDEoKS51c2VLaW5kVW5jaGVj
a2VkKCkgIT0gVW50eXBlZFVzZSB8fCBjaGlsZDIoKS51c2VLaW5kVW5jaGVja2VkKCkgIT0gVW50
eXBlZFVzZSB8fCBjaGlsZDMoKS51c2VLaW5kVW5jaGVja2VkKCkgIT0gVW50eXBlZFVzZTsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBzaG91bGRHZW5lcmF0ZSgpOwogICAg
ICAgICB9CkBAIC05OTUsNyArOTk1LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4g
bV9yZWZDb3VudC0tOwogICAgIH0KICAgICAKLSAgICBFZGdlIGNoaWxkMSgpCisgICAgRWRnZSYg
Y2hpbGQxKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJn
cykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQxKCk7CkBAIC0xMDA5LDEzICsxMDA5
LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMVVuY2hl
Y2tlZCgpOwogICAgIH0KIAotICAgIEVkZ2UgY2hpbGQyKCkKKyAgICBFZGdlJiBjaGlsZDIoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAg
ICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDIoKTsKICAgICB9CiAKLSAgICBFZGdlIGNoaWxkMygp
CisgICAgRWRnZSYgY2hpbGQzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBO
b2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQzKCk7CkBAIC0x
MDMzLDYgKzEwMzMsMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gY2hpbGRyZW4u
bnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCisgICAgVXNlS2luZCBiaW5hcnlVc2VLaW5kKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChjaGlsZDEoKS51c2VLaW5kKCkgPT0gY2hpbGQyKCkudXNl
S2luZCgpKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtpbmQoKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc0JpbmFyeVVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtpbmQoKSA9PSB1c2VLaW5kICYmIGNoaWxkMigpLnVzZUtp
bmQoKSA9PSB1c2VLaW5kOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTQzNDI2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWxsb2NhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAotdHlwZWRlZiBBbGxvY2F0b3I8Tm9kZT4gTm9kZUFsbG9jYXRvcjsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgMTEyPiBOb2RlQWxsb2NhdG9yOwor
I2Vsc2UKK3R5cGVkZWYgQWxsb2NhdG9yPE5vZGUsIDgwPiBOb2RlQWxsb2NhdG9yOworI2VuZGlm
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY29uc3QgY2hhciog
bm9kZUZsYWdzQXNTdHJpbmcoTm9kZUZsYWdzIGZsYWdzKQogewotICAgIGlmICghZmxhZ3MpCisg
ICAgaWYgKCEoZmxhZ3MgXiBOb2RlRG9lc05vdEV4aXQpKQogICAgICAgICByZXR1cm4gIjxlbXB0
eT4iOwogCiAgICAgc3RhdGljIGNvbnN0IGludCBzaXplID0gMTI4OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw4
ICs5Niw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhGb3J3
YXJkSW50MzJUb0RvdWJsZSwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIC8qIFVzZWQgdG8gc3Bl
Y3VsYXRlIHRoYXQgYSBkb3VibGUgdmFsdWUgaXMgYWN0dWFsbHkgYW4gaW50ZWdlci4gKi9cCiAg
ICAgbWFjcm8oRG91YmxlQXNJbnQzMiwgTm9kZVJlc3VsdEludDMyKSBcCi0gICAgLyogVXNlZCB0
byByZWNvcmQgcGxhY2VzIHdoZXJlIHdlIG11c3QgY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIG51bWJl
ci4gKi9cCi0gICAgbWFjcm8oQ2hlY2tOdW1iZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBc
CiAgICAgLyogTm9kZXMgZm9yIGFyaXRobWV0aWMgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8o
QXJpdGhBZGQsIE5vZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgwNSw3ICs4MDUsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0cnVjdHVy
ZToKICAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBUZWFyT2Zm
QXJndW1lbnRzOgotICAgICAgICBjYXNlIENoZWNrTnVtYmVyOgogICAgICAgICBjYXNlIENoZWNr
QXJndW1lbnRzTm90Q3JlYXRlZDoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50Ogog
ICAgICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTQzNDI2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjMgKzQwLDI1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKLUdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbEludGVnZXIoTm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQor
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihFZGdlIGVkZ2UsIERhdGFGb3JtYXQm
IHJldHVybkZvcm1hdCkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
bm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQVNTRVJUKCFuZWVkc1R5cGVDaGVjayhlZGdl
LCBTcGVjSW50MzIpKTsKKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBpZiAoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxv
Y2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlm
IChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlKSkKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdwcik7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKQorICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwg
Z3ByKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkp
KQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2Rl
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSk7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5u
b2RlKCkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMy
KGpzVmFsdWUucGF5bG9hZCgpKSwgZ3ByKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKQEAgLTExMywyNSArMTE1LDI1IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVn
ZXIoTm9kZSoKICAgICB9CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5v
ZGUqIG5vZGUsIEdQUlJlZyYgdGFnR1BSLCBHUFJSZWcmIHBheWxvYWRHUFIsIEZQUlJlZyYgZnBy
KQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoRWRnZSBlZGdlLCBHUFJSZWcmIHRh
Z0dQUiwgR1BSUmVnJiBwYXlsb2FkR1BSLCBGUFJSZWcmIGZwcikKIHsKICAgICAvLyBGSVhNRTog
Rm9yIGRvdWJsZSB3ZSBjb3VsZCBmaWxsIHdpdGggYSBGUFIuCiAgICAgVU5VU0VEX1BBUkFNKGZw
cik7CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAKLSAgICAgICAgaWYgKG5vZGUt
Pmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgICAgIHRhZ0dQUiA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICBwYXlsb2FkR1BSID0g
YWxsb2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSkudGFnKCkpLCB0YWdHUFIpOwotICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2
YWx1ZU9mSlNDb25zdGFudChub2RlKS5wYXlsb2FkKCkpLCBwYXlsb2FkR1BSKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpLnRhZygp
KSwgdGFnR1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3Rh
bnQoZWRnZS5ub2RlKCkpLnBheWxvYWQoKSksIHBheWxvYWRHUFIpOwogICAgICAgICAgICAgbV9n
cHJzLnJldGFpbih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsK
ICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJl
YW0sIHRhZ0dQUiwgcGF5bG9hZEdQUiwgaXNJbnQzMkNvbnN0YW50KG5vZGUpID8gRGF0YUZvcm1h
dEpTSW50ZWdlciA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BSLCBpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2Rl
KCkpID8gRGF0YUZvcm1hdEpTSW50ZWdlciA6IERhdGFGb3JtYXRKUyk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1h
dCgpOwogICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXROb25lICYm
IHNwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXRTdG9yYWdlKTsKQEAgLTg0NCwyNyArODQ2LDMwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIH0KIAogdGVtcGxhdGU8
Ym9vbCBzdHJpY3Q+Ci1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRl
cm5hbChOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEludGVybmFsKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQot
ICAgIGRhdGFMb2dGKCJTcGVjSW50QCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7CisgICAgZGF0YUxv
Z0YoIlNwZWNJbnRAJWQgICAiLCBlZGdlLT5pbmRleCgpKTsKICNlbmRpZgotICAgIFNwZWN1bGF0
ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKKyAgICBTcGVjdWxh
dGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAh
PSBLbm93bkludDMyVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNJbnQzMikpOworICAgIHZh
bHVlLmZpbHRlcihTcGVjSW50MzIpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5mby5y
ZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewotICAgICAgICBp
ZiAoKG5vZGUtPmhhc0NvbnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChub2RlKSkgfHwgaW5m
by5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgaWYgKChlZGdl
LT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB8fCBpbmZv
LnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewogICAgICAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsIGRp
cmVjdGlvbik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsK
ICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGlzSW50
MzJDb25zdGFudChub2RlKSk7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CiAgICAgICAg
ICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNv
bnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgaW5m
by5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQg
PSBEYXRhRm9ybWF0SW50ZWdlcjsKQEAgLTg3NSw4ICs4ODAsOCBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoc3BpbGxGb3Jt
YXQsIChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUykgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZv
cm1hdEludGVnZXIpOwogCiAgICAgICAgIC8vIElmIHdlIGtub3cgdGhpcyB3YXMgc3BpbGxlZCBh
cyBhbiBpbnRlZ2VyIHdlIGNhbiBmaWxsIHdpdGhvdXQgY2hlY2tpbmcuCi0gICAgICAgIGlmICgh
aXNJbnQzMlNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlcikpLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJ
VENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNJbnQzMikK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgZWRnZSwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxS
ZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpLCBkaXJlY3Rpb24pOwog
CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKQEAgLTg5Myw4
ICs4OTgsOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAg
ICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gaW5mby5wYXlsb2FkR1BSKCk7CiAgICAgICAgIG1fZ3By
cy5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5sb2NrKHBheWxvYWRHUFIpOwotICAgICAg
ICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAodHlwZSAmIH5T
cGVjSW50MzIpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIGVkZ2UsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSwg
ZGlyZWN0aW9uKTsKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dw
cnMucmVsZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsK
QEAgLTkyOSw0MCArOTM0LDQzIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUludEkKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dChOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChF
ZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uKQogewotICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+
KG5vZGUsIHJldHVybkZvcm1hdCwgZGlyZWN0aW9uKTsKKyAgICByZXR1cm4gZmlsbFNwZWN1bGF0
ZUludEludGVybmFsPGZhbHNlPihlZGdlLCByZXR1cm5Gb3JtYXQsIGRpcmVjdGlvbik7CiB9CiAK
LUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKiBub2Rl
KQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KEVkZ2UgZWRn
ZSkKIHsKICAgICBEYXRhRm9ybWF0IG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyOwotICAgIEdQUlJl
ZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8dHJ1ZT4obm9kZSwgbXVzdEJlRGF0
YUZvcm1hdEludGVnZXIsIEJhY2t3YXJkU3BlY3VsYXRpb24pOworICAgIEdQUlJlZyByZXN1bHQg
PSBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8dHJ1ZT4oZWRnZSwgbXVzdEJlRGF0YUZvcm1hdElu
dGVnZXIsIEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgIEFTU0VSVChtdXN0QmVEYXRhRm9ybWF0
SW50ZWdlciA9PSBEYXRhRm9ybWF0SW50ZWdlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
RlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKE5vZGUqIG5vZGUsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0ZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZURvdWJsZShFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
bikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIlNwZWNE
b3VibGVAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKKyAgICBkYXRhTG9nRigiU3BlY0RvdWJsZUAl
ZCAgICIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
PSB2YWx1ZS5tX3R5cGU7CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3duTnVtYmVy
VXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNOdW1iZXIpKTsKKyAgICB2YWx1ZS5maWx0ZXIo
U3BlY051bWJlcik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgp
KSB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgIGlm
IChlZGdlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50
KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgp
OwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkp
LCBncHIpOwogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdl
cigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpIHsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAg
ICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGUpLCBmcHIpOworICAgICAgICAgICAg
ICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQoZWRnZS5ub2RlKCkp
LCBmcHIpOwogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsRG91Ymxl
KCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwpAQCAtOTg2LDgg
Kzk5NCw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKIAogICAg
ICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXRKU0ludGVnZXIgJiYgc3BpbGxG
b3JtYXQgIT0gRGF0YUZvcm1hdEludGVnZXIpIHsKICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9u
KHR5cGUpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIG5v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIEpJVENvbXBp
bGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2Vz
dFRhZykpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgICAgIGlmICh0eXBlICYgflNwZWNOdW1i
ZXIpCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgZWRnZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgSklUQ29tcGlsZXI6
OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFn
KSksIGRpcmVjdGlvbik7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAgICAg
IGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CiAKQEAgLTEwMjEsOCArMTAyOSw4IEBA
IEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgaWYgKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNJbnRlZ2VyKSB7CiAgICAgICAgICAg
ICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFn
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgICAgIGlmICgh
aXNOdW1iZXJTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgaWYgKHR5
cGUgJiB+U3BlY051bWJlcikKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIGVkZ2UsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6Okxvd2VzdFRhZykpLCBkaXJlY3Rpb24pOwogICAgICAgICAgICAgdW5ib3hEb3VibGUodGFn
R1BSLCBwYXlsb2FkR1BSLCBmcHIsIHNjcmF0Y2guZnByKCkpOwogICAgICAgICAgICAgaGFzVW5i
b3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZt
X2ppdCk7CkBAIC0xMDc2LDIwICsxMDg0LDIzIEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZURvdWIKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUNlbGwoTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQor
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbChFZGdlIGVkZ2UsIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCi0gICAgZGF0YUxvZ0YoIlNwZWNDZWxsQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7CisgICAg
ZGF0YUxvZ0YoIlNwZWNDZWxsQCVkICAgIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBT
cGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7
CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAg
U3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICBBU1NFUlQoZWRnZS51c2VL
aW5kKCkgIT0gS25vd25DZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7Cisg
ICAgdmFsdWUuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKIAotICAg
ICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBqc1Zh
bHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25z
dGFudCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFu
dChlZGdlLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAg
ICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJz
LnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKQEAgLTEx
MDIsOCArMTExMyw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwK
ICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVCgoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZv
cm1hdEpTKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdENlbGwpOwotICAgICAg
ICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlcikpLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0Nl
bGwpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2Uo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIGVkZ2UsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpLCBkaXJlY3Rpb24p
OwogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAg
IG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsK
QEAgLTExMjMsOCArMTEzNCw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUNlbGwKICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKICAg
ICAgICAgbV9ncHJzLmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQ
Uik7Ci0gICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiks
IG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAo
dHlwZSAmIH5TcGVjQ2VsbCkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSksIGRpcmVjdGlvbik7CiAgICAgICAgIG1fZ3Bycy51bmxvY2sodGFnR1BSKTsKICAgICAg
ICAgbV9ncHJzLnJlbGVhc2UodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9h
ZEdQUik7CkBAIC0xMTUxLDEzICsxMTYyLDE1IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUNlbGwKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2xlYW4oTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9u
KQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2Us
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNCb29sQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7
CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUp
Lm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5v
ZGUoZWRnZSk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICB2
YWx1ZS5maWx0ZXIoU3BlY0Jvb2xlYW4pOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5m
by5yZWdpc3RlckZvcm1hdCgpKSB7CkBAIC0xMTY3LDggKzExODAsOCBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUo
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkp
IHsKLSAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
OworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAg
R1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xl
YW4oKSkgewogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CkBAIC0xMTgyLDggKzExOTUsOCBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAKICAgICAgICAgQVNTRVJUKChpbmZvLnNw
aWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0Qm9vbGVhbik7CiAKLSAgICAgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbih0eXBl
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShK
SVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1
YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSksIGRpcmVjdGlv
bik7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNCb29sZWFuKQorICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlcikpLCBlZGdlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKSwgZGlyZWN0aW9uKTsKIAogICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CkBAIC0xMjA0LDggKzEyMTcsOCBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIEdQUlJlZyBwYXls
b2FkR1BSID0gaW5mby5wYXlsb2FkR1BSKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKHRhZ0dQUik7
CiAgICAgICAgIG1fZ3Bycy5sb2NrKHBheWxvYWRHUFIpOwotICAgICAgICBpZiAoIWlzQm9vbGVh
blNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJv
b2xlYW5UYWcpKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0Jvb2xlYW4p
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQ
UiwgcGF5bG9hZEdQUiksIGVkZ2UsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpLCBkaXJlY3Rp
b24pOwogCiAgICAgICAgIG1fZ3Bycy51bmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJl
bGVhc2UodGFnR1BSKTsKQEAgLTEyNTksMzYgKzEyNzIsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAg
ICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkg
ewotICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0
Y2hwb2ludCgpKTsgCi0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQ
UiksIG5vZGUtPmNoaWxkMSgpLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUg
JiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAg
ICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2Rl
LT5jaGlsZDIoKSwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgIG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOworICAg
ICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIp
LCBub2RlLT5jaGlsZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3Ry
dWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ax
R1BSKSwgbm9kZS0+Y2hpbGQxKCksIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09i
amVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgCiAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgCkBAIC0xMjk2LDE0ICsxMzAxLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGkKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAg
ICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCAKICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCAKQEAgLTEzMjcsNyArMTMyOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RFcXVhbGkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RU
b09iamVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkKQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOwotICAgIEpT
VmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBv
cDIodGhpcywgcmlnaHRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3By
KCk7CkBAIC0xMzM3LDI3ICsxMzM5LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RUb09iamUKICAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7IAogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgaWYg
KG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAg
ICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNw
ZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUo
dGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAK
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAobV9z
dGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygK
KyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGls
ZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCAKQEAgLTEzNzQsMjcgKzEzNzAsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFu
Y2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAKICAgICAgICAgbV9qaXQuZ3Jh
cGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7
Ci0gICAgICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFNwZWND
ZWxsKSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQ
UiksIHJpZ2h0Q2hpbGQsIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAg
ICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdz
KG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3Bl
Y09iamVjdCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJU
ZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0g
c3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Mob3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVj
dHVyZUdQUik7Ci0gICAgICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlw
ZSAmIFNwZWNDZWxsKSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3Ay
UGF5bG9hZEdQUiksIHJpZ2h0Q2hpbGQsIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0
cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVj
Q2VsbCkgfCBTcGVjT2JqZWN0LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmVHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BS
KSwgcmlnaHRDaGlsZCwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNDEyLDEyICsxNDA0LDEyIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAKICAgICAvLyBX
ZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3Qgbm90IGJlIGEg
Y2VsbC4gQ2hlY2sgaWYgdGhhdCBpcyBlbm91Z2ggdG8KICAgICAvLyBwcm92ZSB0aGF0IGl0IGlz
IGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZC4KLSAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdo
dENoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwpICYgflNwZWNPdGhlcikgeworICAgIGlmIChuZWVk
c1R5cGVDaGVjayhyaWdodENIaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKICAgICAgICAg
bV9qaXQubW92ZShvcDJUYWdHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKLSAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5
bG9hZEdQUiksIHJpZ2h0Q2hpbGQsCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiksIHJpZ2h0Q2hpbGQsIFNwZWNDZWxs
IHwgU3BlY090aGVyLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOwpAQCAtMTQ0
OSwyNyArMTQ0MSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmpl
CiAgICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0
aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1
cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQo
KS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9y
Tm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9q
aXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAg
ICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUo
bGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRy
KAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVj
dCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsCiAgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
CkBAIC0xNDg1LDI3ICsxNDcxLDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZU9iamUKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENo
aWxkIG11c3QgYmUgYSBjZWxsLgogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlm
ICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFNwZWNDZWxsKSAmIH5TcGVj
T2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiksIHJpZ2h0Q2hp
bGQsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAg
ICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBv
cDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyUGF5
bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1
Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3By
KCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJQ
YXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAg
ICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwp
ICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwg
cmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAg
ICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
b3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVj
T2JqZWN0LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENo
aWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTUyMCw3ICsxNTAyLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3
aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3QgYmUgYSBjZWxsLiBDaGVjayBp
ZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3ZlIHRoYXQgaXQgaXMgZWl0aGVyIG51bGwg
b3IgdW5kZWZpbmVkLgotICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlw
ZSAmIH5TcGVjQ2VsbCkgJiB+U3BlY090aGVyKQorICAgIGlmICghbmVlZHNUeXBlQ2hlY2socmln
aHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQogICAgICAgICByaWdodE5vdENlbGwubGlu
aygmbV9qaXQpOwogICAgIGVsc2UgewogICAgICAgICBqdW1wKG5vdFRha2VuLCBGb3JjZUp1bXAp
OwpAQCAtMTUyOSw4ICsxNTExLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZQogICAgICAgICBtX2ppdC5tb3ZlKG9wMlRhZ0dQUiwgcmVzdWx0R1BSKTsKICAgICAg
ICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
b3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwKKyAgICAgICAgdHlwZUNoZWNr
KAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmln
aHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51
bGxUYWcpKSk7CkBAIC0xNTg3LDkgKzE1NjksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVBZGQoTm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3Vs
dFBheWxvYWQuZ3ByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNlLCBib29sIG5lZWRTcGVjdWxhdGlv
bkNoZWNrKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KEVkZ2Ugbm9kZVVzZSkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
VXNlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwog
ICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgIEdQUlJlZyB2YWx1
ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CkBAIC0xNTk5LDI2ICsxNTgxLDI0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBpZiAobV9qaXQu
Z3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAg
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRj
aHBvaW50KCkpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwg
dmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQ
dHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBK
U1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgKH5TcGVj
Q2VsbCkgfCBTcGVjT2JqZWN0LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1
Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVj
aykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2
YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwKLSAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBu
b2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
IAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KApAQCAtMTY0MCwxMCArMTYyMCwx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgbm90Q2Vs
bC5saW5rKCZtX2ppdCk7CiAgCiAgICAgQ09NUElMRV9BU1NFUlQoKEpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyB8IDEpID09IEpTVmFsdWU6Ok51bGxUYWcsIFVuZGVmaW5lZFRhZ19PUl8xX0VRVUFMU19O
dWxsVGFnKTsKLSAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKKyAgICBpZiAobmVlZHNU
eXBlQ2hlY2sobm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7CiAgICAgICAgIG1faml0
Lm1vdmUodmFsdWVUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICBtX2ppdC5vcjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiks
IG5vZGVVc2UsIAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2
YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIAogICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWRHUFIsIApA
QCAtMTY1OCwyNiArMTYzOSwyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
T3JPdGhlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE5vZGUqIG5v
ZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkp
IHsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgQm9v
bGVhblVzZTogewogICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUp
OwogICAgICAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlLmdwcigpLCByZXN1
bHQuZ3ByKCkpOwogICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dp
Y2FsTm90KG5vZGUtPmNoaWxkMSgpLCAKLSAgICAgICAgICAgICFpc09iamVjdE9yT3RoZXJTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAg
ICAKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6IHsKKyAgICAgICAgY29tcGlsZU9iamVjdE9y
T3RoZXJMb2dpY2FsTm90KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICAKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFBheWxvYWQodGhpcywgdmFsdWUpOwogICAgICAgICBtX2ppdC5jb21wYXJlMzIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CiAgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0
UGF5bG9hZC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgeworICAgICAgICAKKyAgICBj
YXNlIE51bWJlclVzZTogewogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwpAQCAtMTY4OSwzMCAr
MTY3MywzOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBhcmcxLCBm
YWxzZSk7Ci0gICAgR1BSUmVnIGFyZzFUYWdHUFIgPSBhcmcxLnRhZ0dQUigpOwotICAgIEdQUlJl
ZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOwotICAgIEdQUlJlZyByZXN1bHRQ
YXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIGFyZzEsIGZhbHNlKTsKKyAgICAg
ICAgR1BSUmVnIGFyZzFUYWdHUFIgPSBhcmcxLnRhZ0dQUigpOworICAgICAgICBHUFJSZWcgYXJn
MVBheWxvYWRHUFIgPSBhcmcxLnBheWxvYWRHUFIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFBh
eWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwogICAgICAgICAKLSAgICBhcmcxLnVzZSgp
OworICAgICAgICBhcmcxLnVzZSgpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2Ug
PSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxVGFn
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwogICAgIAotICAgIG1faml0
Lm1vdmUoYXJnMVBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBtX2ppdC5t
b3ZlKGFyZzFQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKIAotICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAotICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICBzbG93Q2FzZSwg
dGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFU
YWdHUFIsCi0gICAgICAgICAgICBhcmcxUGF5bG9hZEdQUikpOworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZSwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdFBheWxvYWRH
UFIsIGFyZzFUYWdHUFIsCisgICAgICAgICAgICAgICAgYXJnMVBheWxvYWRHUFIpKTsKICAgICAK
LSAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAg
IGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKKyAgICAgICAgbV9qaXQueG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQ
YXlsb2FkR1BSKTsKKyAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2Rl
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxv
Y2tJbmRleCBub3RUYWtlbiwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmxvY2tJbmRl
eCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbikKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlVXNlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNl
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwogICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgIEdQUlJl
ZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CkBAIC0xNzIyLDIzICsxNzE0
LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICBpZiAo
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAg
ICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRp
b25XYXRjaHBvaW50KCkpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRh
Z0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgCi0gICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAg
ICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVz
ZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRy
KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2
YWx1ZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
IAotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9h
ZEdQUiksIG5vZGVVc2UsIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVn
cyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBT
cGVjT2JqZWN0LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5icmFuY2hUZXN0OChKSVRD
b21waWxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0
dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOwogCkBAIC0xNzU1LDEwICsxNzQ1LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnIKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAKICAg
ICBDT01QSUxFX0FTU0VSVCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnIHwgMSkgPT0gSlNWYWx1ZTo6
TnVsbFRhZywgVW5kZWZpbmVkVGFnX09SXzFfRVFVQUxTX051bGxUYWcpOwotICAgIGlmIChuZWVk
U3BlY3VsYXRpb25DaGVjaykgeworICAgIGlmIChuZWVkc1R5cGVDaGVjayhub2RlVXNlLCBTcGVj
Q2VsbCB8IFNwZWNPdGhlcikpIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZVRhZ0dQUiwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRh
Z0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRh
ZykpKTsKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVU
YWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLAor
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKICAgICB9CiAKICAgICBq
dW1wKG5vdFRha2VuKTsKQEAgLTE3NzEsNyArMTc2Myw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFrZW5C
bG9ja0luZGV4KCk7CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxv
Y2tJbmRleCgpOwogCi0gICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkgewor
ICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBCb29sZWFu
VXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
aXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKIApAQCAtMTc4OSwxNCArMTc4MiwxNSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVP
YmplY3RPck90aGVyKCkpIHsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6IHsKICAgICAgICAg
ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS0+Y2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwg
CiAgICAgICAgICAgICAhaXNPYmplY3RPck90aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7Ci0gICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAg
Y2FzZSBOdW1iZXJVc2U6CisgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IEludDMyVXNlKSB7CiAgICAgICAgICAgICBib29sIGludmVy
dCA9IGZhbHNlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJs
b2NrKCkpIHsKQEAgLTE4MjAsMzIgKzE4MTQsNDAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaChOb2RlKiBubwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICB2YWx1ZS5maWxsKCk7
Ci0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgR1BSUmVnIHZh
bHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKKyAgICBjYXNlIFVudHlwZWRVc2U6
IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICB2YWx1ZS5maWxsKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVl
LnRhZ0dQUigpOworICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9h
ZEdQUigpOwogCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAotICAgIHVz
ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CiAgICAgCi0g
ICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdFBhdGggPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxl
cjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSk7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKLQotICAgIGZhc3RQYXRoLmxpbmsoJm1f
aml0KTsKLSAgICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlUGF5bG9hZEdQ
Uiwgbm90VGFrZW4pOwotICAgIGp1bXAodGFrZW4sIEZvcmNlSnVtcCk7CisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGZhc3RQYXRoID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFs
LCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZykpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwogCi0gICAgc2xvd1BhdGgubGluaygmbV9qaXQp
OwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgY2FsbE9wZXJh
dGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCB2YWx1ZVRhZ0dQUiwg
dmFsdWVQYXlsb2FkR1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
CisgICAgICAgIGZhc3RQYXRoLmxpbmsoJm1faml0KTsKKyAgICAgICAgYnJhbmNoVGVzdDMyKEpJ
VENvbXBpbGVyOjpaZXJvLCB2YWx1ZVBheWxvYWRHUFIsIG5vdFRha2VuKTsKKyAgICAgICAganVt
cCh0YWtlbiwgRm9yY2VKdW1wKTsKKworICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVUYWdH
UFIsIHZhbHVlUGF5bG9hZEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKICAgICAKLSAgICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJl
c3VsdEdQUiwgdGFrZW4pOwotICAgIGp1bXAobm90VGFrZW4pOworICAgICAgICBicmFuY2hUZXN0
MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOworICAgICAgICBqdW1w
KG5vdFRha2VuKTsKICAgICAKLSAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2VPcGVyYW5kVHlwZSwgdHlwZW5hbWUgUHJv
cGVydHlPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVmFsdWVPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVGFn
VHlwZT4KQEAgLTE5MzAsMTQgKzE5MzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBJZGVudGl0eTogewotICAg
ICAgICAvLyBUaGlzIGNvdWxkIGJlIGRvbmUgYSBsb3QgYmV0dGVyLiBXZSB0YWtlIHRoZSBjaGVh
cCB3YXkgb3V0IGJlY2F1c2UgSWRlbnRpdHkKLSAgICAgICAgLy8gaXMgb25seSBnb2luZyB0byBz
dGljayBhcm91bmQgYWZ0ZXIgQ1NFIGlmIHdlIGhhZCBwcmVkaWN0aW9uIHdlaXJkbmVzcy4KLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wZXJhbmQudGFnR1BSKCks
IHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgIG1faml0Lm1vdmUob3BlcmFuZC5wYXlsb2FkR1BS
KCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRh
Zy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTk1NSw2ICsx
OTUwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxlIGFuZCBpdCBmb3Vu
ZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAgICAgLy8gY2Fubm90IGhhdmUgYmVlbiBhc3Np
Z25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCiAgICAgICAgICAgICBpZiAodmFs
dWUuaXNDbGVhcigpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFw
IGluc3RlYWQuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMDM4MwogICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMTgzLDE5ICsyMTgwLDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAotICAgIGNhc2UgQ2hlY2tOdW1iZXI6IHsKLSAgICAgICAgaWYgKCFpc051
bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkg
ewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3AxLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxLnRhZ0dQUigpLCBvcDEucGF5bG9hZEdQUigp
KSwgbm9kZS0+Y2hpbGQxKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3AxLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOwotICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgfQotICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
CiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjb21waWxl
QWRkKG5vZGUpOwpAQCAtMjIxNCw4ICsyMTk4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQXJpdGhEaXY6IHsK
LSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAg
JiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICNpZiBDUFUoWDg2
KQogICAgICAgICAgICAgY29tcGlsZUludGVnZXJBcml0aERpdkZvclg4Nihub2RlKTsKICNlbGlm
IENQVShBUFBMRV9BUk1WN1MpCkBAIC0yMjI1LDE2ICsyMjA5LDI0IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSk7Ci0KLSAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJl
ZyByZWcyID0gb3AyLmZwcigpOwotICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwg
cmVzdWx0LmZwcigpKTsKLQotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2Rl
KTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJl
ZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICAgICAgbV9qaXQuZGl2RG91YmxlKHJlZzEsIHJl
ZzIsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvdWJsZVJlc3Vs
dChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApAQCAtMjI0NCw4ICsyMjM2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
YygpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMjI1OSwxOCAr
MjI1MSwyNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYWJzRG91YmxlKG9wMS5m
cHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwg
bm9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1faml0LmFic0RvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhNaW46
CiAgICAgY2FzZSBBcml0aE1heDogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJ
bnQzMlVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKQEAgLTIyODksMzYgKzIyOTAsNDQgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBGUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBkb25lOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9
IG1faml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVMZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxLmZwcigp
LCBvcDIuZnByKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9
IG1faml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVMZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxLmZwcigp
LCBvcDIuZnByKCkpOwogICAgICAgICAKLSAgICAgICAgLy8gb3AyIGlzIGVhdGhlciB0aGUgbGVz
c2VyIG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgb3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgOiBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
TGVzc1RoYW5PckVxdWFsLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgICAgICAvLyBv
cDIgaXMgZWF0aGVyIHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlzIE5hTgorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShv
cCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwg
OiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsLCBvcDEuZnByKCksIG9wMi5m
cHIoKSk7CiAgICAgICAgIAotICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25v
dyB3aGljaCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCi0g
ICAgICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4KLSAgICAgICAg
bV9qaXQuYWRkRG91YmxlKG9wMS5mcHIoKSwgb3AyLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAg
ICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgLy8gVW5vcmRlcmVk
IGNhc2UuIFdlIGRvbid0IGtub3cgd2hpY2ggb2Ygb3AxLCBvcDIgaXMgTmFOLiBNYW51ZmFjdHVy
ZSBOYU4gYnkgYWRkaW5nIAorICAgICAgICAgICAgLy8gb3AxICsgb3AyIGFuZCBwdXR0aW5nIGl0
IGludG8gcmVzdWx0LgorICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKG9wMS5mcHIoKSwgb3Ay
LmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVt
cCgpKTsKICAgICAgICAgCi0gICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOwotICAgICAgICBt
X2ppdC5tb3ZlRG91YmxlKG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIG9w
Mkxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDIuZnBy
KCksIHJlc3VsdC5mcHIoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAob3AxLmZwcigpICE9IHJl
c3VsdC5mcHIoKSkgewotICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgICAgIGlmIChvcDEuZnByKCkgIT0gcmVzdWx0LmZwcigpKSB7CisgICAgICAgICAgICAg
ICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
b3AxTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5m
cHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvcDFMZXNz
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQp
OwogICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKICAgICAgICAgCi0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnBy
KCksIG5vZGUpOworICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMjggKzM5LDMwIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAK
LUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZSogbm9kZSwgRGF0YUZvcm1h
dCYgcmV0dXJuRm9ybWF0KQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihFZGdl
IGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQVNTRVJUKCFu
ZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjSW50MzIpKTsKKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAg
ICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7CiAgICAgICAg
IEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFu
dCgpKSB7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwot
ICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgewotICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUpKSwgZ3ByKTsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFs
dWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBp
bmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICByZXR1cm5G
b3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpIHsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mTnVtYmVy
Q29uc3RhbnQobm9kZSkpOworICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFs
dWVPZk51bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3By
KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25z
dGFudChub2RlKSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChlZGdl
Lm5vZGUoKSkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdEludGVnZXIpIHsKQEAgLTExNywyNyArMTE5LDI3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbEludGVnZXIoTm9kZSoKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbEpTVmFsdWUoTm9kZSogbm9kZSkKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpT
VmFsdWUoRWRnZSBlZGdlKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAgICAgCiAgICAgc3dpdGNo
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAg
ICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXND
b25zdGFudCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7Cisg
ICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwotICAgICAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKTsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJD
b25zdGFudChlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpIHsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOwot
ICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
dmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdl
Lm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOwotICAgICAgICAg
ICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIH0KQEAg
LTgwMiwxOCArODA0LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKIH0KIAogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+Ci1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3Jt
YXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjSW50QCVkICAgIiwgbm9kZS0+aW5k
ZXgoKSk7CisgICAgZGF0YUxvZ0YoIlNwZWNJbnRAJWQgICAiLCBlZGdlLT5pbmRleCgpKTsKICNl
bmRpZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90
eXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShl
ZGdlKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIEFTU0VS
VChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bkludDMyVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNw
ZWNJbnQzMikpOworICAgIHZhbHVlLmZpbHRlcihTcGVjSW50MzIpOworICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAog
ICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0
Tm9uZTogewotICAgICAgICBpZiAoKG5vZGUtPmhhc0NvbnN0YW50KCkgJiYgIWlzSW50MzJDb25z
dGFudChub2RlKSkgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsK
KyAgICAgICAgaWYgKChlZGdlLT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQoZWRn
ZS5ub2RlKCkpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewog
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBE
YXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwpAQCAtODIx
LDEwICs4MjYsMTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQog
ICAgICAgICAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYg
KG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkp
IHsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGUp
KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKKyAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29u
c3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAg
ICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJl
dHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsK
QEAgLTg2NCw4ICs4NjksOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJ
bnRJCiAgICAgICAgIC8vIENoZWNrIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLgogICAgICAgICBH
UFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAg
ICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
LCBkaXJlY3Rpb24pOworICAgICAgICBpZiAodHlwZSAmIH5TcGVjSW50MzIpCisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0
LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0
cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3
ZSdyZSBkb25lLCByZXR1cm4uCiAgICAgICAgIGlmICghc3RyaWN0KSB7CkBAIC05MTAsMTAgKzkx
NSwxMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAKICAgICBj
YXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6IHsKLSAg
ICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkgJiYgaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7
CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpICYmIGlzSW50MzJDb25zdGFudChlZGdl
Lm5vZGUoKSkpIHsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotICAgICAg
ICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSk7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdw
cik7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSk7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJD
b25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIpOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0g
RGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CkBA
IC05MzYsMzUgKzk0MSwzOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJ
bnRJCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQo
Tm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoRWRn
ZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKLSAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUludEludGVybmFsPGZhbHNlPihu
b2RlLCByZXR1cm5Gb3JtYXQsIGRpcmVjdGlvbik7CisgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVJ
bnRJbnRlcm5hbDxmYWxzZT4oZWRnZSwgcmV0dXJuRm9ybWF0LCBkaXJlY3Rpb24pOwogfQogCi1H
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoTm9kZSogbm9kZSkK
K0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludFN0cmljdChFZGdlIGVkZ2Up
CiB7CiAgICAgRGF0YUZvcm1hdCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlcjsKLSAgICBHUFJSZWcg
cmVzdWx0ID0gZmlsbFNwZWN1bGF0ZUludEludGVybmFsPHRydWU+KG5vZGUsIG11c3RCZURhdGFG
b3JtYXRJbnRlZ2VyLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJSZWcgcmVzdWx0ID0g
ZmlsbFNwZWN1bGF0ZUludEludGVybmFsPHRydWU+KGVkZ2UsIG11c3RCZURhdGFGb3JtYXRJbnRl
Z2VyLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKICAgICBSRUxFQVNFX0FTU0VSVChtdXN0QmVEYXRh
Rm9ybWF0SW50ZWdlciA9PSBEYXRhRm9ybWF0SW50ZWdlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKE5vZGUqIG5v
ZGUsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0ZQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0Yo
IlNwZWNEb3VibGVAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKKyAgICBkYXRhTG9nRigiU3BlY0Rv
dWJsZUAlZCAgICIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBl
IHR5cGUgPSB2YWx1ZS5tX3R5cGU7CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3du
TnVtYmVyVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNOdW1iZXIpKTsKKyAgICB2YWx1ZS5m
aWx0ZXIoU3BlY051bWJlcik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3Rh
bnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAg
R1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkp
KSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3Vi
bGVUb0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkp
KSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
NjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZklu
dDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1faml0
Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsK
IApAQCAtOTcyLDkgKzk4MCw5IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZURvdWIKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29u
c3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFs
bG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
NjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKSkp
LCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0
KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2Rl
KCkpKSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoZ3ByLCBm
cHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogCkBAIC0xMDM4LDggKzEwNDYsOCBA
QCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAKICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKIAotICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBub2Rl
LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0
eXBlICYgflNwZWNOdW1iZXIpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciksIGRpcmVjdGlvbik7CiAKICAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhh
dmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKICAgICAgICAgbV9qaXQubW92ZShqc1Zh
bHVlR3ByLCB0ZW1wR3ByKTsKQEAgLTExMDIsMTMgKzExMTAsMTYgQEAgRlBSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQ2VsbChOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKEVkZ2Ug
ZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiU3BlY0NlbGxAJWQgICAiLCBub2RlLT5pbmRl
eCgpKTsKKyAgICBkYXRhTG9nRigiU3BlY0NlbGxAJWQgICAiLCBlZGdlLT5pbmRleCgpKTsKICNl
bmRpZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90
eXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShl
ZGdlKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIEFTU0VS
VChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3Bl
Y0NlbGwpKTsKKyAgICB2YWx1ZS5maWx0ZXIoU3BlY0NlbGwpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAg
IHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CkBAIC0xMTIwLDggKzExMzEsOCBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIAogICAgICAg
ICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3Rh
bnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZSk7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CiAgICAgICAg
ICAgICBpZiAoanNWYWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRh
aW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc1ZhbHVlKSksIGdwcik7CkBAIC0xMTM2LDggKzExNDcsOCBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogCiAgICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgIGlmICgh
aXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rp
b24pOworICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2VsbCkKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
ciksIGRpcmVjdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTExNTIs
OCArMTE2Myw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAg
ICBjYXNlIERhdGFGb3JtYXRKUzogewogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsK
ICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlv
bih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAgIGlm
ICh0eXBlICYgflNwZWNDZWxsKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsK
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2Vs
bCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTE3NywxMyArMTE4OCwxNSBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgfQogfQogCi1HUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKE5vZGUqIG5vZGUsIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjQm9v
bEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFMb2dGKCJTcGVjQm9vbEAlZCAgICIs
IGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3Rh
dGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1
ZS5tX3R5cGU7CisgICAgdmFsdWUuZmlsdGVyKFNwZWNCb29sZWFuKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAK
ICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAtMTE5NSw4ICsxMjA4LDgg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICAKICAg
ICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0Nv
bnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpOworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAg
ICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwpAQCAtMTIxMSw5ICsxMjI0LDkgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBtX2ppdC5sb2FkNjQo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAogICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwotICAgICAg
ICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHR5cGUpKSB7CisgICAgICAgIGlmICh0eXBlICYg
flNwZWNCb29sZWFuKSB7CiAgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlv
bkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxh
dGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBkaXJlY3Rpb24pOwogICAgICAgICAgICAg
bV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2Up
KSwgZ3ByKTsKICAgICAgICAgfQogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwg
Z3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKQEAgLTEyMzAsOSArMTI0Myw5IEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICBjYXNlIERhdGFGb3JtYXRKUzog
ewogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2so
Z3ByKTsKLSAgICAgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbih0eXBlKSkgeworICAgICAg
ICBpZiAodHlwZSAmIH5TcGVjQm9vbGVhbikgewogICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwg
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29s
ZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRn
ZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShC
b29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSwgZGlyZWN0aW9uKTsK
ICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0KICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0xMjkwLDM1ICsxMzAz
LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgIAogICAg
IGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQo
KSk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAm
IH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUt
PmNoaWxkMSgpLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVjT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigp
LAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BS
KSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICBERkdfVFlQRV9DSEVDSygK
KyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNo
aWxkMigpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkg
c3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJl
LmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAg
ICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNwZWNPYmpl
Y3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCks
Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIs
IAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAg
ICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgo
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTMyNiwxNCAr
MTMzMCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSkpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAg
ICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlICYgflNwZWNP
YmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQy
KCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVH
UFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQor
ICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQ
dHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTM1NCw3
ICsxMzU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVk
Z2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgb3AxKHRoaXMsIGxlZnRDaGlsZCk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJp
Z2h0Q2hpbGQpOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAg
ICAgCiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKQEAgLTEzNjMsMjcgKzEzNjQsMjEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgCiAgICAgaWYg
KG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAK
ICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxh
dGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobGVmdENoaWxk
KS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
LSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFH
UFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9
CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3Ry
dWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1f
dHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiks
IGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5j
aFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAg
ICAgICAgc3RydWN0dXJlR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzOTksMjcgKzEz
OTQsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIC8v
IFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNl
bGwuIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2Rl
LT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGls
bFZhbGlkKCkpIHsgCiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3Vy
cmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgp
LT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9y
Tm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1Zh
bHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1
ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2pp
dC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAg
ICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUo
cmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJl
Z3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIo
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwg
bV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
b3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE0MzcsMTIgKzE0MjYs
MTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIAogICAg
IC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3Qg
YmUgYSBjZWxsLiBDaGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3ZlIHRoYXQg
aXQgaXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLgotICAgIGlmICgobV9zdGF0ZS5mb3JOb2Rl
KHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgJiB+U3BlY090aGVyKSB7CisgICAgaWYg
KG5lZWRzVHlwZUNoZWNrKHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAg
ICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuYW5kNjQo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBCYWRU
eXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLm5vZGUoKSwKKyAgICAgICAgdHlw
ZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgU3Bl
Y0NlbGwgfCBTcGVjT3RoZXIsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKQEAgLTE0NjQs
NyArMTQ1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7
CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIGxlZnRDaGlsZCk7Ci0g
ICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQpOworICAgIEpTVmFsdWVPcGVy
YW5kIG9wMih0aGlzLCByaWdodENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIG9wMUdQUiA9IG9w
MS5ncHIoKTsKQEAgLTE0NzMsMjcgKzE0NjIsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAor
ICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxk
LCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0
dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigp
OwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYg
KG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9D
SEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxl
ZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQs
IAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTUwOSwyNyArMTQ5MiwyMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0
aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1faml0Lmdy
YXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hw
b2ludCgpKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBl
ICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRD
aGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBE
RkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hp
bGQsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9
IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQ
Uik7Ci0gICAgICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFNw
ZWNDZWxsKSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQs
Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIs
IAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAg
ICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJp
Z2h0Q2hpbGQsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlR1BSLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxk
LAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTU0NCw3ICsxNTIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRo
aW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3QgYmUgYSBjZWxsLiBDaGVjayBpZiB0
aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3ZlIHRoYXQgaXQgaXMgZWl0aGVyIG51bGwgb3Ig
dW5kZWZpbmVkLgotICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAm
IH5TcGVjQ2VsbCkgJiB+U3BlY090aGVyKQorICAgIGlmICghbmVlZHNUeXBlQ2hlY2socmlnaHRD
aGlsZCwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKQogICAgICAgICByaWdodE5vdENlbGwubGluaygm
bV9qaXQpOwogICAgIGVsc2UgewogICAgICAgICBqdW1wKG5vdFRha2VuLCBGb3JjZUp1bXApOwpA
QCAtMTU1Myw5ICsxNTMwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
T2JqZQogICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9q
aXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVyLCBtX2ppdC5i
cmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3Vs
dEdQUiwKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVl
TnVsbCkpKTsKICAgICB9CkBAIC0xNjA5LDkgKzE1ODUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2lj
YWxOb3QoRWRnZSBub2RlVXNlLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KEVkZ2Ugbm9kZVVzZSkK
IHsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlKTsKKyAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwog
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTE2MTks
MjcgKzE1OTUsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OwogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZh
bGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFk
ZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0KLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlv
bkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIo
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAg
ICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVs
c2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJS
ZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVj
aykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIG5vZGVVc2UsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQu
YnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKQEAgLTE2NjAsMTEgKzE2
MzEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIAog
ICAgIG5vdENlbGwubGluaygmbV9qaXQpOwogCi0gICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNr
KSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVy
KSkgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBt
X2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQp
LCByZXN1bHRHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgCi0gICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAg
ICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
VXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKICAgICAgICAgICAgICAgICByZXN1bHRHUFIs
IAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxs
KSkpOwpAQCAtMTY3OCwxMiArMTY0OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0T3JPdGhlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE5v
ZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3RPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5v
ZGUtPmNoaWxkMSgpLAotICAgICAgICAgICAgIWlzT2JqZWN0T3JPdGhlclNwZWN1bGF0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgc3dpdGNoIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6IHsKKyAg
ICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkgeworICAgICAgICAKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIG1faml0LmNv
bXBhcmUzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOwpAQCAtMTY5MSw3ICsxNjYzLDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkgeworICAgICAgICAKKyAgICBjYXNlIE51bWJlclVzZTogewogICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
RlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CkBAIC0xNzAzLDkgKzE2NzYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TG9naWNhbE5vdChOCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgaWYg
KGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgIGlmIChpc0Jvb2xl
YW5TcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsK
KyAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKKyAgICAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhub2Rl
LT5jaGlsZDEoKSwgU3BlY0Jvb2xlYW4pKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVCb29sZWFu
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAgICAgIApAQCAtMTcxNiw0MSArMTY4
OCw1MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7IC8vIEZJWE1FOiBXZSBjb3VsZCByZXVzZSwg
YnV0IG9uIHNwZWN1bGF0aW9uIGZhaWwgd291bGQgbmVlZCByZWNvdmVyeSB0byByZXN0b3JlIHRh
ZyAoYWtpbiB0byBhZGQpLgogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZS5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUtPmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5n
cHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAg
dHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWUuZ3ByKCkpLCBub2RlLT5j
aGlsZDEoKSwgU3BlY0Jvb2xlYW4sIG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBp
dCBoZXJlLgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZv
cm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgICAgIAorICAgIGNh
c2UgVW50eXBlZFVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAKLSAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIAotICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIo
KTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcg
YXJnMUdQUiA9IGFyZzEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CiAgICAgCi0gICAgYXJnMS51c2UoKTsKKyAgICAgICAgYXJnMS51c2UoKTsKICAgICAK
LSAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7Ci0gICAgbV9qaXQueG9yNjQoVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRD
b21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSk7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVl
RmFsc2UpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2Ug
PSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogICAgIAotICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAotICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIGRmZ0Nv
bnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFHUFIpKTsKKyAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRo
aXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFHUFIpKTsKICAg
ICAKLSAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVUcnVlKSksIHJlc3VsdEdQUik7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUs
IERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAg
ICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRy
dWUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUs
IERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBC
bG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRTcGVjdWxhdGlv
bkNoZWNrKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRn
ZSBub2RlVXNlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuKQogewotICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOworICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwpAQCAtMTc1OSwyMyAr
MTc0MSwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAg
aWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkg
ewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1
bGF0aW9uV2F0Y2hwb2ludCgpKTsKIAotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2sp
IHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAg
fQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIGlmIChu
ZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsCi0gICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0LmJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpaZXJv
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAK
QEAgLTE3OTEsMTAgKzE3NjksMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9y
T3RoZXJCcgogICAgIAogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwogICAgIAotICAgIGlmIChu
ZWVkU3BlY3VsYXRpb25DaGVjaykgeworICAgIGlmIChuZWVkc1R5cGVDaGVjayhub2RlVXNlLCBT
cGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgbV9qaXQuYnJhbmNo
NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwg
bV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsK
ICAgICB9CiAgICAganVtcChub3RUYWtlbik7CiAgICAgCkBAIC0xODA2LDE0ICsxNzg2LDE1IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICBCbG9ja0luZGV4
IHRha2VuID0gbm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7CiAgICAgQmxvY2tJbmRleCBub3RUYWtl
biA9IG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAotICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKG5vZGUtPmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIAotICAgICAg
ICAgICAgIWlzT2JqZWN0T3JPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSk7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6IHsKKyAgICAgICAgZW1pdE9iamVjdE9yT3Ro
ZXJCcmFuY2gobm9kZS0+Y2hpbGQxKCksIHRha2VuLCBub3RUYWtlbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgCi0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkgewotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSkgeworICAgICAgICAKKyAgICBjYXNlIEludDMyVXNlOgorICAgIGNhc2UgTnVtYmVy
VXNlOiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gSW50MzJVc2Up
IHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewpAQCAtMTgzNyw1NiArMTgxOCw2MiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgY2FzZSBVbnR5cGVk
VXNlOgorICAgIGNhc2UgQm9vbGVhblVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIAotICAgIGJvb2wgcHJl
ZGljdEJvb2xlYW4gPSBpc0Jvb2xlYW5TcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpKTsKLSAgICAKLSAgICBpZiAocHJlZGljdEJvb2xlYW4pIHsKLSAgICAgICAgaWYgKGlz
Qm9vbGVhblNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRp
b24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlKSB7CisgICAgICAgICAgICBpZiAoIW5lZWRzVHlwZUNo
ZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbGVhbikpIHsKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRC
bG9jaygpKSB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Olpl
cm87Ci0gICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAgICAgICAgICAg
ICAgICB0YWtlbiA9IG5vdFRha2VuOwotICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkg
eworICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsK
KyAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAg
ICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKKyAgICAgICAgICAgICAgICAgICAgbm90VGFrZW4g
PSB0bXA7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
YnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMih0cnVlKSwgdGFr
ZW4pOwotICAgICAgICAgICAganVtcChub3RUYWtlbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSks
IG5vdFRha2VuKTsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSkpLCB0YWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNv
bmRpdGlvbiwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMih0cnVlKSwgdGFrZW4pOworICAgICAgICAg
ICAgICAgIGp1bXAobm90VGFrZW4pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5v
dFRha2VuKTsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNo
aWxkMSgpLCBtX2ppdC5qdW1wKCkpOwotICAgICAgICB9Ci0gICAgICAgIHZhbHVlLnVzZSgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNJbnQzMikgewotICAgICAgICAgICAg
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgbm90VGFrZW4pOwot
ICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVH
UFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGFrZW4pOwotICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdHlwZUNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS0+Y2hp
bGQxKCksIFNwZWNCb29sZWFuLCBtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkgJiBTcGVjSW50MzIpIHsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICAg
ICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGFrZW4pOworICAgICAgICAgICAgfQogICAgIAot
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNCb29sZWFuKSB7
Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKSksIG5vdFRha2VuKTsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0Jvb2xlYW4pIHsKKyAgICAgICAg
ICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSks
IG5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOworICAgICAgICAgICAgfQogICAgIAotICAgICAg
ICB2YWx1ZS51c2UoKTsKKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgIAotICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAgICAg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
ZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOworICAgICAg
ICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgIAotICAgICAgICBi
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOwot
ICAgICAgICBqdW1wKG5vdFRha2VuKTsKKyAgICAgICAgICAgIGJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtlbik7CisgICAgICAgICAgICBqdW1wKG5v
dFRha2VuKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAg
ICAgCi0gICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
IH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQpAQCAtMTkwOCwx
MiArMTg5NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgLy8g
VGhpcyBjb3VsZCBiZSBkb25lIGEgbG90IGJldHRlci4gV2UgdGFrZSB0aGUgY2hlYXAgd2F5IG91
dCBiZWNhdXNlIElkZW50aXR5Ci0gICAgICAgIC8vIGlzIG9ubHkgZ29pbmcgdG8gc3RpY2sgYXJv
dW5kIGFmdGVyIENTRSBpZiB3ZSBoYWQgcHJlZGljdGlvbiB3ZWlyZG5lc3MuCi0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wZXJhbmQpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wZXJh
bmQuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdw
cigpLCBub2RlKTsKKyAgICAgICAgLy8gQ1NFIHNob3VsZCBhbHdheXMgZWxpbWluYXRlIHRoaXMu
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMTkzMSw2ICsxOTE0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlz
IHZhcmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAgICAgLy8g
Y2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQu
CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKSB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCB0cmFwIGluc3RlYWQuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4MwogICAgICAgICAgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1
ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0y
MTMxLDE5ICsyMTE2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQ2hlY2tOdW1iZXI6
IHsKLSAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50
ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMS5n
cHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxLmdw
cigpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQogICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgY29tcGls
ZUFkZChub2RlKTsKQEAgLTIxNjIsMjEgKzIxMzQsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQXJpdGhEaXY6
IHsKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGlj
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAg
ICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIHN3aXRjaCAobm9k
ZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAg
ICAgIGNvbXBpbGVJbnRlZ2VyQXJpdGhEaXZGb3JYODYobm9kZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgb3AxKTsKLQotICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICAgICAg
RlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgIG1faml0LmRpdkRvdWJsZShyZWcxLCBy
ZWcyLCByZXN1bHQuZnByKCkpOwotCi0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOworICAgICAgICAgICAg
RlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAgICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVn
MSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZG91Ymxl
UmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMTg2LDggKzIxNjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aEFiczogewot
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNl
IEludDMyVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMjIwMSwxOCAr
MjE4MSwyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYWJzRG91YmxlKG9wMS5m
cHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwg
bm9kZSk7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBGUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5h
YnNEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgZG91YmxlUmVz
dWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJp
dGhNYXg6IHsKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0
aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAg
ICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIHN3aXRj
aCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSk7CkBAIC0yMjMxLDM2ICsyMjE5LDQ0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICBjYXNl
IE51bWJlclVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGRvbmU7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKICAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBtX2ppdC5icmFuY2hE
b3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4gOiBN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4sIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBtX2ppdC5icmFuY2hE
b3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4gOiBN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4sIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsK
ICAgICAgICAgCi0gICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBvbmUgb3Igb25l
IG9mIHRoZW4gaXMgTmFOCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMkxlc3MgPSBt
X2ppdC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVh
bCwgb3AxLmZwcigpLCBvcDIuZnByKCkpOworICAgICAgICAgICAgLy8gb3AyIGlzIGVhdGhlciB0
aGUgbGVzc2VyIG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG9wMkxlc3MgPSBtX2ppdC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4g
PyBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsIDogTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCwgb3AxLmZwcigpLCBvcDIuZnByKCkpOwogICAgICAg
ICAKLSAgICAgICAgLy8gVW5vcmRlcmVkIGNhc2UuIFdlIGRvbid0IGtub3cgd2hpY2ggb2Ygb3Ax
LCBvcDIgaXMgTmFOLiBNYW51ZmFjdHVyZSBOYU4gYnkgYWRkaW5nIAotICAgICAgICAvLyBvcDEg
KyBvcDIgYW5kIHB1dHRpbmcgaXQgaW50byByZXN1bHQuCi0gICAgICAgIG1faml0LmFkZERvdWJs
ZShvcDEuZnByKCksIG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgZG9uZS5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIC8vIFVub3JkZXJlZCBjYXNlLiBXZSBkb24n
dCBrbm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1cmUgTmFOIGJ5IGFkZGlu
ZyAKKyAgICAgICAgICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4K
KyAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShvcDEuZnByKCksIG9wMi5mcHIoKSwgcmVzdWx0
LmZwcigpKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAg
IAotICAgICAgICBvcDJMZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAgbV9qaXQubW92ZURvdWJs
ZShvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBvcDJMZXNzLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AyLmZwcigpLCByZXN1bHQuZnBy
KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9wMS5mcHIoKSAhPSByZXN1bHQuZnByKCkpIHsK
LSAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICBpZiAo
b3AxLmZwcigpICE9IHJlc3VsdC5mcHIoKSkgeworICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG9wMUxlc3MubGluaygm
bV9qaXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5m
cHIoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKICAgICAgICAgCi0g
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CiAgICAgICAgIAotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAg
ICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yNjE3LDE4ICsy
NjEzLDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgY2hpbGQzLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogCiAgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6SW50MzIKLSAg
ICAgICAgICAgICAgICAmJiAhaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShjaGls
ZDMpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAg
ICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVJlZyksIGNoaWxkMywKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2
YWx1ZVJlZywgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBp
ZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6SW50MzIpIHsKKyAgICAgICAgICAgICAgICBE
RkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVSZWcp
LCBjaGlsZDMsIFNwZWNJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQo
CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlUmVn
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91
cyAmJiBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgewpAQCAtMjkyOCwxMyArMjkyNCwx
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogCi0g
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiAm
JiAhaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90
eXBlKSkgewotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAg
ICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQyKCksCi0g
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywg
dmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIpIHsKKyAgICAgICAg
ICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY0ludDMyLAorICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpCZWxvdywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9
IEFycmF5OjpJbnQzMiAmJiBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgewpAQCAtMjk2
MiwxMyArMjk1OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWUuZnByKCk7CiAKLSAg
ICAgICAgICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5l
ZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGlu
dG8KLSAgICAgICAgICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpT
VmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVGUFIsIHZhbHVl
RlBSKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncygpLCBub2RlLT5jaGlsZDIoKSwgU3BlY1JlYWxOdW1iZXIs
CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVOb3RFcXVhbE9yVW5vcmRlcmVkLCB2YWx1ZUZQUiwgdmFsdWVGUFIpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhH
UFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkpKTsKQEAgLTMxNzEsNyArMzE2NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVG9QcmltaXRp
dmU6IHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICAgICAgLy8gSXQncyByZWFsbHkgcHJvZml0YWJs
ZSB0byBzcGVjdWxhdGUgaW50ZWdlciwgc2luY2UgaXQncyByZWFsbHkgY2hlYXAsCiAgICAgICAg
ICAgICAvLyBpdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSByZWFsIHdvcmssIGFuZCB3
ZSBlbWl0IGEgbG90IGxlc3MgY29kZS4KICAgICAgICAgICAgIApAQCAtMzE4NiwzMCArMzE4MCwz
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdHJp
bmcgc3BlY3VsYXRpb24gaGVyZS4KLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAKLSAgICAgICAgR1BSUmVnIG9wMUdQUiA9
IG9wMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgb3AxLnVzZSgpOwor
ICAgICAgICAgICAgb3AxLnVzZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKCEobV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjQm9vbGVh
bikpKQotICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2
ZSA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGlmICghKG1fc3RhdGUuZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjTnVtYmVyIHwgU3BlY0Jvb2xlYW4pKSkK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQ
cmltaXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9w
MUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIG1faml0Lm1v
dmUob3AxR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRH
UFIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwobm90UHJpbWl0aXZlLCB0aGlzLCBvcGVyYXRpb25U
b1ByaW1pdGl2ZSwgcmVzdWx0R1BSLCBvcDFHUFIpKTsKLSAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwobm90UHJpbWl0aXZlLCB0aGlzLCBvcGVyYXRpb25Ub1ByaW1pdGl2ZSwgcmVzdWx0R1BSLCBv
cDFHUFIpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKQEAgLTMyNTEsMjUgKzMyNTEsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19U
WVBFUzogewogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wZXJh
bmQodGhpcywgdXNlKTsKICAgICAgICAgICAgICAgICAgICAgRlBSUmVnIG9wRlBSID0gb3BlcmFu
ZC5mcHIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlv
bihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVk
IHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRl
RG91YmxlT3BlcmFuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICBERkdfVFlQRV9D
SEVDSygKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwgU3BlY1Jl
YWxOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZURvdWJsZShvcEZQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6
ZW9mKGRvdWJsZSkgKiBvcGVyYW5kSWR4KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElO
R19UWVBFUzoKICAgICAgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOiB7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywg
dXNlKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1
c2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIEdQUlJl
ZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnQz
Mihub2RlLT5pbmRleGluZ1R5cGUoKSkgJiYgIWlzSW50MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZv
ck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdz
KG9wR1BSKSwgdXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS0+aW5kZXhpbmdU
eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwgU3BlY0ludDMy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVyYW5kSWR4KSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzMxOSwyNSArMzMxNiwyMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICAgICAgRlBSUmVnIG9wRlBSID0gb3BlcmFuZC5m
cHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZv
ck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIGEgd2F5IG9mIHByb2ZpbGluZyB0aGVzZSwgYW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBp
bnRvCi0gICAgICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCi0gICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAg
ICBCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVk
LCBvcEZQUiwgb3BGUFIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKCksIHVzZSwgU3BlY1JlYWxOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaERvdWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5ib3hEb3VibGUob3BGUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsgb3BlcmFuZElkeCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9J
TkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQo
dGhpcywgdXNlKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMs
IHVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAgICBHUFJSZWcg
b3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2Rl
LT5pbmRleGluZ1R5cGUoKSkgJiYgIWlzSW50MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
dXNlKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpC
ZWxvdywgb3BHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAg
ICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncyhvcEdQUiksIHVzZSwgU3BlY0ludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQob3BHUFIsIGJ1ZmZlciAr
IG9wZXJhbmRJZHgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzU1OSwyNCArMzU1Mywy
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIGlmIChpc09iamVjdFNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAg
ICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24o
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHN3aXRjaCAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgT3RoZXJVc2U6IHsKKyAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwogICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIo
KTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAgICAgICBpZiAobmVlZHNUeXBl
Q2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNPdGhlcikpIHsKICAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQu
YW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KFZhbHVlTnVsbCkpKTsKKyAgICAgICAgICAgICAgICB0eXBlQ2hlY2soCisgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBT
cGVjT3RoZXIsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLAorICAg
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51
bGwpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsVGhpc09iamVjdEZv
cihub2RlLT5jb2RlT3JpZ2luKSksIHNjcmF0Y2hHUFIpOwpAQCAtMzU4NCwzMCArMzU3NSw0MiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGlzT2JqZWN0U3BlY3VsYXRp
b24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgY2FzZSBPYmplY3RV
c2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHRo
aXNWYWx1ZSk7CiAgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdw
cigpOwogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHRoaXNWYWx1ZUdQUiks
IG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRD
b21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNo
aWxkMSgpLCBPYmplY3RVc2UsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB0aGlzVmFs
dWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VGhpcywgcmVzdWx0LmdwcigpLCB0aGlzVmFs
dWVHUFIpOwotICAgICAgICAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUp
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbnZlcnRUaGlzLCByZXN1bHQuZ3ByKCksIHRoaXNWYWx1ZUdQUik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM3NzYsOCArMzc3OSw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1
ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkp
KSB7CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBDZWxsVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgYmFzZSk7CiAgICAgICAgICAgICAKQEAgLTM3OTIsMjAgKzM3OTYsMjcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwot
ICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6
IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAg
Ci0gICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAg
ICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRl
c3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIAotICAgICAgICBjYWNoZWRH
ZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9kZS0+aWRlbnRp
Zmllck51bWJlcigpLCBub3RDZWxsKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGJhc2VHUFIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAg
ICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgcmVzdWx0R1BS
LCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwpOwogICAgICAgICAKKyAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtMzgxNCw4ICszODI1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0
ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKSkpIHsKKworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogCkBAIC0zODMzLDIxICszODQ1LDI4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwogCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZXN1bHQgcmVzdWx0
KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Cisg
ICAgICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAg
ICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3Rlcik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJh
bmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5jb2RlT3Jp
Z2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2Vs
bCwgRG9udFNwaWxsKTsKKyAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdp
biwgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGws
IERvbnRTcGlsbCk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLQorICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zODcxLDEz
ICszODkwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgIGNhc2UgRm9yd2FyZENoZWNrU3Ry
dWN0dXJlOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLmlzU3Vic2V0T2Yobm9kZS0+c3RydWN0dXJlU2V0KCkpCi0gICAgICAgICAgICAmJiBpc0Nl
bGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBub1Jlc3VsdChub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBub2RlLT5vcCgpID09IEZvcndhcmRDaGVja1N0
cnVjdHVyZSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCksIGRpcmVj
dGlvbik7CiAgICAgICAgIApAQCAtMzk0Miw2ICszOTU0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc09LID0g
bV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
b3AxLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihub2Rl
LT5zdHJ1Y3R1cmUoKSkpOwogICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAgICAgICAgIGlz
T0subGluaygmbV9qaXQpOworI2Vsc2UKKyAgICAgICAgc3BlY3VsYXRlQ2VsbChub2RlLT5jaGls
ZDEoKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtMzk0
OSw2ICszOTYzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7CisgICAgICAg
IEFTU0VSVChpc0tub3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgCiAg
ICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3Ry
dWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKICAg
ICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oCiAgICAgICAgICAgICBub2Rl
LT5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpLApAQCAtNDI3MSw3ICs0Mjg3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
VHlwZU9mOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgR1BS
UmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwpAQCAtNDI4MCwxOSArNDI5NiwyMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBkb25lSnVtcHM7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8
fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05v
dENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BS
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBpc05vdENlbGwp
OworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFVudHlwZWRVc2UpCisg
ICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNDZWxsLCBpc05vdENlbGwpOwogCi0gICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBTdHJpbmdVc2UpIHsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsK
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IG1faml0LmJyYW5jaDgo
SklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1
Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKTsK
LSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkp
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNl
KHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG5vdFN0cmluZyk7CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkKKyAgICAgICAgICAgICAgICBE
RkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNw
ZWNTdHJpbmcsIG5vdFN0cmluZyk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Muc3RyaW5nU3RyaW5nKCkpLCByZXN1
bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAg
ICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsK
KyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gU3RyaW5nVXNlKSB7
CiAgICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7CiAg
ICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtNDMwMiw3
ICs0MzIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKSB7CisgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgewogICAgICAg
ICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgdmFs
dWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3MubnVt
YmVyU3RyaW5nKCkpLCByZXN1bHRHUFIpOwpAQCAtNDc3MSw2ICs0Nzg5LDEwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFBoYW50
b206CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1faml0LmdyYXBoKCksIG5vZGUs
IHNwZWN1bGF0ZSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgCiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuby1v
cC4KICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTQzNDI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCwxNCArMTA4LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9u
Q2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5F
eGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhp
dCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFpbCk7CiAgICAgbV9qaXQuY29k
ZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2pp
dC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1f
c3RyZWFtLT5zaXplKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9k
ZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKLSAgICBBU1NFUlQobV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAg
IEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3Bl
Y3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRv
RmFpbCk7CiB9CiAKQEAgLTEyMyw3ICsxMjMsNyBAQCBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNw
ZWN1bGF0aXZlSklUOjpzCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1
cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcigpOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNpZ25lZCBpbmRleCA9
IG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJPZk9TUkV4aXRzKCk7CiAgICAgbV9qaXQuYXBwZW5k
RXhpdEluZm8oKTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwpAQCAtMTMyLDcgKzEz
Miw3IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnMKIAogT1NSRXhp
dEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSkKIHsKLSAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5F
eGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhp
dCk7CiAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9k
ZVVzZS5ub2RlKCkpOwogfQogCkBAIC0xNDAsMTQgKzE0MCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAg
ICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9j
dXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBzVG9GYWls
KTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZv
cihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1
bXBzVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKQEAgLTE1NSw3ICsxNTUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2lu
Z0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIG1faml0LmNvZGVC
bG9jaygpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsKICAgICBtX2ppdC5h
cHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5k
T1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSwg
bV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKQEAg
LTE2Myw3ICsxNjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQog
ewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUt
PmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9j
YW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVV
c2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CiB9CiAKQEAgLTE3NCwxMSArMTc0LDE2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKICAgICAgICAgY29u
dmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBFZGdlIGVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1
bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24p
Cit7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBlZGdlLm5vZGUo
KSwganVtcFRvRmFpbCwgcmVjb3ZlcnksIGRpcmVjdGlvbik7Cit9CisKIEp1bXBSZXBsYWNlbWVu
dFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtp
bmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlKQogewogICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIG1faml0
LmFwcGVuZEV4aXRJbmZvKEpJVENvbXBpbGVyOjpKdW1wTGlzdCgpKTsKICAgICBPU1JFeGl0JiBl
eGl0ID0gbV9qaXQuY29kZUJsb2NrKCktPm9zckV4aXQoCiAgICAgICAgIG1faml0LmNvZGVCbG9j
aygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCkBAIC0yODAsMTQgKzI4NSwxNCBAQCBKdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNW
YWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsKLSAgICBBU1NFUlQobV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3Vs
YXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9GYWlsKTsKICAgICBj
b252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFs
dWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVy
eSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnRO
b2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8
IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBu
b2RlLCBqdW1wc1RvRmFpbCk7CiAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVl
UmVjb3ZlcnkpOwogfQpAQCAtMzAwLDkgKzMwNSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGlvbkNoZWNrKEV4CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBFZGdlIGVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFs
dWVTb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsLCBkaXJlY3Rpb24pOworfQorCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOwor
ICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVjdWxhdGl2ZUpJVCB3
YXMgdGVybWluYXRlZC5cbiIpOwogI2VuZGlmCkBAIC0zMTQsMTMgKzMyNCwxMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdz
IGpzVmFsdWVSZWdzLCBFZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2RlLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4iKTsK
ICNlbmRpZgpAQCAtMzMwLDYgKzM0MCwyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5h
dGVTcGVjdWxhdGl2CiAgICAgbV9jb21waWxlT2theSA9IGZhbHNlOwogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjp0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsKQoreworICAgIEFTU0VSVChuZWVkc1R5cGVDaGVjayhlZGdlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gpKTsKKyAgICBtX3N0YXRlLmZvck5vZGUoZWRnZSkuZmlsdGVyKHR5cGVzUGFzc2VkVGhy
b3VnaCk7CisgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBzb3VyY2UsIGVkZ2UsIGp1bXBU
b0ZhaWwpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkVHlwZUNoZWNrKEpTVmFs
dWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVy
eSYgdmFsdWVSZWNvdmVyeSkKK3sKKyAgICB0eXBlQ2hlY2soc291cmNlLCBlZGdlLCB0eXBlc1Bh
c3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpOworICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2Fy
ZCh2YWx1ZVJlY292ZXJ5KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNrKEpT
VmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2Vk
VGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uKQoreworICAgIHR5cGVDaGVjayhzb3VyY2UsIGVkZ2UsIHR5cGVzUGFz
c2VkVGhyb3VnaCwganVtcFRvRmFpbCk7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3J3YXJkU3Bl
Y3VsYXRpb24pCisgICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCgpOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjphZGRTbG93UGF0aEdlbmVyYXRvcihQYXNzT3duUHRyPFNsb3dQ
YXRoR2VuZXJhdG9yPiBzbG93UGF0aEdlbmVyYXRvcikKIHsKICAgICBtX3Nsb3dQYXRoR2VuZXJh
dG9ycy5hcHBlbmQoc2xvd1BhdGhHZW5lcmF0b3IubGVha1B0cigpKTsKQEAgLTg3Miw5ICs5MDIs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlKiBub2RlCiAgICAgYXJyYXlp
Znkobm9kZSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCkpOwogfQogCi1HUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTdG9yYWdlKEVkZ2UgZWRnZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAogICAg
IHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CkBAIC04ODgsNyArOTE4LDcgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlKgogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICAvLyBNdXN0IGJlIGEgY2VsbDsgZmlsbCBpdCBhcyBhIGNlbGwgYW5kIHRoZW4g
cmV0dXJuIHRoZSBwb2ludGVyLgotICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwobm9k
ZSwgQmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAgICAgIHJldHVybiBmaWxsU3BlY3VsYXRlQ2Vs
bChlZGdlLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
RGF0YUZvcm1hdFN0b3JhZ2U6IHsKQEAgLTg5OCw3ICs5MjgsNyBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGUqCiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwobm9kZSwgQmFja3dhcmRTcGVjdWxhdGlv
bik7CisgICAgICAgIHJldHVybiBmaWxsU3BlY3VsYXRlQ2VsbChlZGdlLCBCYWNrd2FyZFNwZWN1
bGF0aW9uKTsKICAgICB9CiB9CiAKQEAgLTE1MDksMjAgKzE1MzksMjAgQEAgYm9vbCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbgogICAgICAgICAvLyBzbyBjYW4gYmUgbm8gaW50
ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyByZWZlcmVuY2UgdGhlIGNvbXBhcmUuIAogICAgICAgICBB
U1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogCi0gICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSkKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVz
ZSkpCiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5j
aE5vZGUsIGNvbmRpdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisg
ICAgICAgIGVsc2UgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKQogICAgICAg
ICAgICAgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGRvdWJs
ZUNvbmRpdGlvbik7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7
Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
IHx8IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7CiAgICAgICAgICAgICAg
ICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hOb2RlLCBjb25kaXRp
b24sIG9wZXJhdGlvbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVj
dCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkKKyAgICAgICAg
ICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkKICAgICAgICAgICAgICAg
ICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAm
JiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKQorICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdFVzZSAmJiBu
b2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkKICAgICAgICAgICAg
ICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShub2RlLT5j
aGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIGJyYW5jaE5vZGUpOwotICAgICAgICAgICAgZWxzZSBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2Rl
LT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpCisgICAgICAgICAgICBlbHNlIGlm
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSAmJiBub2RlLT5j
aGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKQogICAgICAgICAgICAgICAgIGNvbXBpbGVQ
ZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMigpLCBub2Rl
LT5jaGlsZDEoKSwgYnJhbmNoTm9kZSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRp
dGlvbiwgb3BlcmF0aW9uKTsKQEAgLTE2NDUsNiArMTY3NSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAKICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsg
bV9pbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKICAgICAg
ICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrW21faW5kZXhJbkJsb2NrXTsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgICAgIG1fY2FuRXhpdCA9IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKTsKKyNl
bmRpZgorICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9zdGF0ZS5zdGFydEV4
ZWN1dGluZyhtX2N1cnJlbnROb2RlKTsKICAgICAgICAgbV9qaXQuc2V0Rm9yTm9kZShtX2N1cnJl
bnROb2RlKTsKICAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gbV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbjsKICAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7
CkBAIC0xNzExLDkgKzE3NDUsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNp
Y0Jsb2NrJgogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoCisgICAgICAgICAgICAgICAgICAgICJTcGVjdWxhdGl2ZUpJVCBnZW5l
cmF0aW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4IiwKKyAgICAgICAgICAg
ICAgICAgICAgKGludCltX2N1cnJlbnROb2RlLT5pbmRleCgpLAorICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1faml0LmRlYnVnT2Zm
c2V0KCkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFM
b2dGKCJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9m
ZnNldCAweCV4ICAgIiwgKGludCltX2N1cnJlbnROb2RlLT5pbmRleCgpLCBtX2N1cnJlbnROb2Rl
LT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkpOworICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCJcbiIpOwogI2VuZGlmCisgICAgICAgICAgICB9CiAjaWYgREZHX0VOQUJMRShKSVRfQlJFQUtf
T05fRVZFUllfTk9ERSkKICAgICAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgpA
QCAtMTc1OSw3ICsxODAxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Js
b2NrJgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYWJz
dHJhY3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5vZGUuCi0gICAgICAg
IG1fc3RhdGUuZXhlY3V0ZShtX2luZGV4SW5CbG9jayk7CisgICAgICAgIGlmIChzaG91bGRFeGVj
dXRlRWZmZWN0cykKKyAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVmZmVjdHMobV9pbmRleElu
QmxvY2spOwogICAgICAgICAKICAgICAgICAgaWYgKG1fY3VycmVudE5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpCiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC0xOTA2LDEzICsxOTQ5
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVYKIAogICAgIEZQ
UlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmZwcigpOwogICAgIAotICAgIGlmICghaXNSZWFsTnVtYmVy
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMykubV90eXBlKSkgewotICAgICAgICAv
LyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRv
IGhvaXN0IHRoZW0gaW50bwotICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcsIHZhbHVlUmVnKSk7Ci0gICAgfQorICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVlUmVncygpLCBjaGlsZDMsIFNwZWNSZWFs
TnVtYmVyLAorICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcsIHZhbHVlUmVnKSk7
CiAgICAgCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CkBAIC0yMTA0
LDcgKzIxNDQsOCBAQCBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBTcGVjdWxhdGl2ZUpJVDo6Y2hlCiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIoTm9kZSogbm9kZSkKIHsK
LSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
IHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIG1f
aml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMjExMiwxNDUgKzIxNTMsMTYy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkgewotICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
LSAgICAgICAgbV9qaXQuYW5kMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAgCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGNoZWNrR2Vu
ZXJhdGVkVHlwZUZvclRvSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgIGNhc2Ug
R2VuZXJhdGVkT3BlcmFuZEludGVnZXI6IHsKLSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG9wMS5mb3JtYXQo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kRG91
YmxlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBE
b3VibGVVc2UpKTsgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB3aWxsIGFzc2VydCB0aGF0IHRo
aXMgaXMgYSBkb3VibGUgdXNlLiBXZSBmb3JjZSBpdCB0byB0aGluayB0aGF0IGl0IHdhcyBhIGRv
dWJsZSB1c2UsIHNpbmNlIHdlIGFyZSBpbmZlcnJpbmcgdGhhdCB3ZSBvdWdodCB0byBlbWl0IGEg
ZG91YmxlIHVzZSBxdWl0ZSBsYXRlLgotICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOwot
ICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RUcnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRv
SW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKKyAg
ICBjYXNlIE51bWJlclVzZToKKyAgICBjYXNlIE5vdENlbGxVc2U6IHsKKyAgICAgICAgc3dpdGNo
IChjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsK
KyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSW50ZWdlcjogeworICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBCYWNrd2FyZFNw
ZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSwgb3AxLmZvcm1hdCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmREb3VibGU6IHsKKyAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgQmFja3dhcmRTcGVjdWxhdGlvbiwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm90VHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVE
b3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxl
ZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhD
YWxsKG5vdFRydW5jYXRlZFRvSW50ZWdlciwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRU
b0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7CiAKLSAgICAgICAgaW50ZWdlclJl
c3VsdChncHIsIG5vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgR2VuZXJh
dGVkT3BlcmFuZEpTVmFsdWU6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBub2RlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRKU1ZhbHVlOiB7Cisg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CiAKLSAgICAgICAgR1BSUmVnIGdwciA9IG9wMS5ncHIoKTsKLSAg
ICAgICAgR1BSUmVnIHJlc3VsdEdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgRlBSVGVtcG9y
YXJ5IHRlbXBGcHIodGhpcyk7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOwot
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGNvbnZlcnRlZDsKLQotICAg
ICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzTnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBn
cHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBHUFJSZWcg
Z3ByID0gb3AxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdwciA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOworICAgICAgICAg
ICAgRlBSUmVnIGZwciA9IHRlbXBGcHIuZnByKCk7CisKKyAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7CisKKyAgICAgICAgICAgIGlmIChuZWVk
c1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY051bWJlcikpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE51bWJlclVzZSkgeworICAgICAgICAg
ICAgICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhncHIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY051bWJlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fdHlwZSAmIFNwZWNDZWxsKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hU
ZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7
CisgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2VsbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNl
bGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCi0gICAg
ICAgICAgICAgICAgbV9qaXQuY29tcGFyZTY0KEpJVENvbXBpbGVyOjpFcXVhbCwgZ3ByLCBUcnVz
dGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R3ByKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0
ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90
IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8gMC4K
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuY29tcGFyZTY0KEpJVENvbXBpbGVyOjpFcXVhbCwg
Z3ByLCBUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaXNOdW1iZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KLSAgICAgICAgfQogCi0gICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZl
IGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCi0gICAgICAgIG1faml0Lm1vdmUoZ3ByLCBy
ZXN1bHRHcHIpOwotICAgICAgICB1bmJveERvdWJsZShyZXN1bHRHcHIsIGZwcik7CisgICAgICAg
ICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFz
IGEgSlNWYWx1ZQorICAgICAgICAgICAgbV9qaXQubW92ZShncHIsIHJlc3VsdEdwcik7CisgICAg
ICAgICAgICB1bmJveERvdWJsZShyZXN1bHRHcHIsIGZwcik7CiAKLSAgICAgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMy
LCByZXN1bHRHcHIsIGZwcik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0
R3ByKTsKKyAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3VsdEdwciwgZnByKTsKKyAgICAg
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKIAotICAgICAgICBjb252
ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAKLSAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHRHcHIpOworICAgICAgICAgICAg
aXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRv
UHRyKGdwciwgcmVzdWx0R3ByKTsKIAotICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgY29udmVydGVkLmxpbmsoJm1faml0KTsKICNlbHNlCi0gICAgICAgIE5vZGUq
IGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IGNoaWxkTm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0
ZXJdOworICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGNoaWxkTm9k
ZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKIAotICAgICAgICBHUFJSZWcgcGF5bG9hZEdQ
UiA9IG9wMS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOwogICAgICAgICAK
LSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGNvbnZlcnRlZDsKKyAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBjb252ZXJ0ZWQ7CiAKLSAgICAgICAgaWYgKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKQotICAgICAgICAgICAgbV9qaXQubW92
ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEdQ
UlJlZyB0YWdHUFIgPSBvcDEudGFnR1BSKCk7Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVt
cEZwcih0aGlzKTsKLSAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOwotICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0KLSAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLQotICAgICAg
ICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkubV90eXBlKSkgewotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQx
KCksIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpOworICAgICAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5
bG9hZEdQUiwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IEdQUlJlZyB0YWdHUFIgPSBvcDEudGFnR1BSKCk7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9y
YXJ5IHRlbXBGcHIodGhpcyk7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGcHIu
ZnByKCk7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRh
Z0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QmVsb3csIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykp
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0NlbGwpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwg
cGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6
RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgflNw
ZWNDZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsIHRhZ0dQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50
byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCi0gICAgICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGlzQm9vbGVhbiA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVh
bCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R3ByKTsKLSAgICAg
ICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBjZWxsOiBzbyB0cnVlIHR1cm5zIGludG8gMSBh
bmQgYWxsIGVsc2UgdHVybnMgaW50byAwLgorICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNCb29sZWFuID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFs
LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R3ByKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlzQm9vbGVhbi5saW5rKCZt
X2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0
R3ByKTsKLSAgICAgICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgaXNCb29sZWFuLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BSLCBmcHIsIHNjcmF0Y2gu
ZnByKCkpOworICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHRhZ0dQUiwgcGF5bG9hZEdQUiwg
ZnByLCBzY3JhdGNoLmZwcigpKTsKIAotICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0R3ByKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0
R3ByLCBmcHIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIp
OworICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7Cisg
ICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCByZXN1bHRHcHIsIGZwcik7Cisg
ICAgICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwogCi0gICAg
ICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAg
Y29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBpc0ludGVnZXIu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRH
cHIpOworICAgICAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOwogCi0gICAgICAgICAgICBj
b252ZXJ0ZWQubGluaygmbV9qaXQpOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udmVy
dGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdEdwciwgbm9kZSk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dEdwciwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgY2FzZSBCb29sZWFuVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5hbmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZElt
bTMyKDEpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAKKyAgICAgICAgaW50ZWdlclJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhc2UgR2Vu
ZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duOgorCisgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJU
KCFtX2NvbXBpbGVPa2F5KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9
CiB9CiAKQEAgLTIzMjYsMTQgKzIzODQsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUludDMyVG9Eb3VibAogI2VuZGlmCiAgICAgCiAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBCYWNrd2FyZFNw
ZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEu
Z3ByKCksIHJlc3VsdC5mcHIoKSk7CiAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEpTVmFsdWVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEZQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTIzNDYsMTUg
KzI0MDQsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludDMyVG9Eb3VibAogICAg
IEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KAogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CiAgICAgCi0gICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgeworICAgIGlmIChuZWVkc1R5cGVDaGVj
ayhub2RlLT5jaGlsZDEoKSwgU3BlY051bWJlcikpIHsKICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gRm9yd2FyZEludDMyVG9Eb3VibGUpIHsKLSAgICAgICAgICAgIGZvcndhcmRTcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwKKyAgICAgICAgICAgIGZvcndhcmRUeXBlQ2hlY2soCisgICAg
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1i
ZXIsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksCiAgICAgICAgICAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIob3AxR1BSLCBEYXRhRm9ybWF0SlMpKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAg
ICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCisgICAgICAg
ICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjM3NywxNSArMjQzNSwxNSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICAK
LSAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBT
cGVjTnVtYmVyKSkgewogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBGb3J3YXJkSW50MzJUb0Rv
dWJsZSkgewotICAgICAgICAgICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLAorICAgICAgICAgICAgZm9yd2FyZFR5cGVDaGVjaygKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpLCBub2RlLT5j
aGlsZDEoKSwgU3BlY051bWJlciwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpMb3dlc3RUYWcpKSwKICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblBhaXIob3Ax
VGFnR1BSLCBvcDFQYXlsb2FkR1BSKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9w
MVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLAorICAgICAgICAgICAgdHlw
ZUNoZWNrKAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMVRhZ0dQUiwgb3AxUGF5bG9h
ZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjTnVtYmVyLAogICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1Mzgs
NDkgKzI1OTYsNjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQog
ICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHRvSW50MzIoZCkpLCBzY3JhdGNoUmVnKTsKICAgICAg
ICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7CiAgICAgICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsK
LSAgICB9IGVsc2UgaWYgKHZhbHVlVXNlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICBHUFJSZWcgc2NyYXRj
aFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwg
c2NyYXRjaFJlZyk7Ci0gICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgICAgICBjb21waWxl
Q2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsKLSAgICAgICAgfQotICAgICAg
ICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKLSAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOwot
ICAgIH0gZWxzZSBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICBBU1NF
UlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFs
dWVPcCh0aGlzLCB2YWx1ZVVzZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0gICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7Ci0gICAgICAgIEZQUlJl
ZyBmcHIgPSB2YWx1ZU9wLmZwcigpOwotICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUobV9qaXQsIGdwciwgZnByLCBmbG9h
dFNjcmF0Y2guZnByKCkpOwotICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwotICAgICAgICB2
YWx1ZUdQUiA9IGdwcjsKICAgICB9IGVsc2UgewotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKLSAgICAgICAgR1BS
UmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90
TmFOID0gbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgZnBy
LCBmcHIpOwotICAgICAgICBtX2ppdC54b3JQdHIoZ3ByLCBncHIpOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmaXhlZCA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgbm90TmFOLmxpbmso
Jm1faml0KTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAg
IGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCi0gICAgICAgICAgICBmYWlsZWQg
PSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1i
bGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFj
cm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwotICAgICAgICAKLSAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGZhaWxlZCwgdGhpcywgdG9JbnQzMiwg
Z3ByLCBmcHIpKTsKLQotICAgICAgICBmaXhlZC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIHZhbHVl
LmFkb3B0KHJlc3VsdCk7Ci0gICAgICAgIHZhbHVlR1BSID0gZ3ByOworICAgICAgICBzd2l0Y2gg
KHZhbHVlVXNlLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1
ZU9wLmdwcigpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFt
cFJvdW5kaW5nKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwor
ICAgICAgICAgICAgICAgIGNvbXBpbGVDbGFtcEludGVnZXJUb0J5dGUobV9qaXQsIHNjcmF0Y2hS
ZWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7Cisg
ICAgICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAg
ICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgeworICAgICAgICAgICAgICAgIEFT
U0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOworICAgICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IGZsb2F0U2Ny
YXRjaCh0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsK
KyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAg
ICAgIGNvbXBpbGVDbGFtcERvdWJsZVRvQnl0ZShtX2ppdCwgZ3ByLCBmcHIsIGZsb2F0U2NyYXRj
aC5mcHIoKSk7CisgICAgICAgICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAg
ICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBncHIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90
TmFOID0gbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgZnBy
LCBmcHIpOworICAgICAgICAgICAgICAgIG1faml0LnhvclB0cihncHIsIGdwcik7CisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZml4ZWQgPSBtX2ppdC5qdW1wKCk7CisgICAg
ICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7CisgICAgICAgICAgICAgICAg
aWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgICAgICAgICAg
ZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNy
b0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJs
ZVRvVWludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxl
ZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKGZhaWxlZCwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmaXhlZC5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9
IGdwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KKyAgICAK
ICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlR1BSLCB2YWx1ZUdQUiAhPSBwcm9wZXJ0eSk7CiAgICAg
QVNTRVJUKHZhbHVlR1BSICE9IGJhc2UpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdl
UmVnKTsKQEAgLTI3MjIsOCArMjc5NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJ
bnN0YW5jZU9mRm8KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YoTm9k
ZSogbm9kZSkKIHsKLSAgICBpZiAoKCEhKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+
U3BlY0NlbGwpICYmICEhKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYg
flNwZWNDZWxsKSkKLSAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPmFkanVzdGVkUmVmQ291bnQo
KSA9PSAxKSB7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
KSB7CiAgICAgICAgIC8vIEl0IG1pZ2h0IG5vdCBiZSBhIGNlbGwuIFNwZWN1bGF0ZSBsZXNzIGFn
Z3Jlc3NpdmVseS4KICAgICAgICAgLy8gT3I6IGl0IG1pZ2h0IG9ubHkgYmUgdXNlZCBvbmNlIChp
LmUuIGJ5IHVzKSwgc28gd2UgZ2V0IHplcm8gYmVuZWZpdAogICAgICAgICAvLyBmcm9tIHNwZWN1
bGF0aW5nIGFueSBtb3JlIGFnZ3Jlc3NpdmVseSB0aGFuIHdlIGFic29sdXRlbHkgbmVlZCB0by4K
QEAgLTI5NjEsOSArMzAzMywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1v
ZHVsbyhOCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm9kZSkKIHsK
LSAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7
CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNl
OiB7CiAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
IHsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50
MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApAQCAtMjk3OSw3ICszMDUyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICAgICAgICAg
IAogICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7
CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50
QXNJbnQzMihub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0y
ID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkg
ewpAQCAtMzAyMSw4ICszMDk0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChO
b2RlKiBubwogICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbm9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkgeworICAgIAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBG
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKQEAgLTMwMzQsMjIgKzMxMDcsMjYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQot
ICAgIGlmIChub2RlLT5vcCgpID09IFZhbHVlQWRkKSB7CisgICAgICAgIAorICAgIGNhc2UgVW50
eXBlZFVzZTogeworICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVlQWRk
KTsKICAgICAgICAgY29tcGlsZVZhbHVlQWRkKG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIAotICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0aGlzIHlldC4gOi0oCi0gICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcml0aFN1YihOb2RlKiBub2RlKQogewotICAgIGlmIChtX2ppdC5ncmFwaCgpLmFkZFNo
b3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVz
ZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgaWYgKGlzTnVtYmVyQ29u
c3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGludDMy
X3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0
aE5vZGVGbGFncygpKSkgewpAQCAtMzA2OSw3ICszMTQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
aWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICAg
ICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIApAQCAtMzA5NywyMCArMzE3NCwy
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlz
LCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwor
ICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CiAKLSAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgcmVn
MiA9IG9wMi5mcHIoKTsKLSAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZw
cigpKTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJlZyBy
ZWcyID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVz
dWx0LmZwcigpKTsKIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG1faml0Lmdy
YXBoKCkubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgIHN3aXRjaCAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCkBAIC0zMTI4LDE3ICszMjE0LDI2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSgKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBt
X2ppdC5uZWdhdGVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotCi0gICAgZG91Ymxl
UmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
bmVnYXRlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgCisgICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQXJpdGhNdWwoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5t
dWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5h
cnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0zMTY5LDE3ICszMjY0LDI1IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1
bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwot
ICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwogICAgICAgICAKLSAgICBtX2ppdC5tdWxEb3Vi
bGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CiAgICAgICAgIAot
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICBGUFJSZWcgcmVn
MSA9IG9wMS5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAgICAg
IAorICAgICAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgCisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiAjaWYg
Q1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKQEAgLTMyODksMjUgKzMzOTIsMzMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJBcml0aAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJpdGhNb2QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpCi0gICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewor
ICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICBjb21waWxlU29mdE1vZHVsbyhub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgCi0gICAgRlBSUmVn
IG9wMUZQUiA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOworICAg
ICAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZwcigpOworICAgICAgICBGUFJSZWcgb3AyRlBSID0g
b3AyLmZwcigpOwogICAgICAgICAKLSAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwogICAgICAgICAKLSAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotCi0g
ICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgb3AxRlBS
LCBvcDJGUFIpOworICAgICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgb3Ax
RlBSLCBvcDJGUFIpOwogICAgICAgICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBu
b2RlKTsKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFu
Y2guCkBAIC0zMzE2LDMzICszNDI3LDMzIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUo
Tm9kZSogbm9kZSwKICAgICBpZiAoY29tcGlsZVBlZXBIb2xlQnJhbmNoKG5vZGUsIGNvbmRpdGlv
biwgZG91YmxlQ29uZGl0aW9uLCBvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtp
bmQoSW50MzJVc2UpKSB7CiAgICAgICAgIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShub2RlLCBjb25k
aXRpb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpKSB7CisKKyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVz
ZSkpIHsKICAgICAgICAgY29tcGlsZURvdWJsZUNvbXBhcmUobm9kZSwgZG91YmxlQ29uZGl0aW9u
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVTdHJpbmcoKSB8fCBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkp
IHsKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7CiAgICAg
ICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24s
IG9wZXJhdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLQotICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUt
PmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAKKyAgICAgICAg
aWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKSB7CiAgICAgICAgICAgICBjb21w
aWxlT2JqZWN0RXF1YWxpdHkobm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIoKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdFVz
ZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkgewogICAg
ICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxk
MSgpLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3Qo
KSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdE9yT3Ro
ZXJVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewogICAgICAg
ICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMigp
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
QEAgLTM0MzAsNyArMzU0MSw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RF
cUZvckMKIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZGUqIG5vZGUp
CiB7Ci0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5h
cnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIHVuc2lnbmVkIGJy
YW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAgIGlmIChi
cmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgIE5vZGUqIGJyYW5j
aE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleElu
QmxvY2spOwpAQCAtMzQ0NCw4ICszNTU2LDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVN0cmljdEVxKE5vZAogICAgICAgICBjb21waWxlSW50ZWdlckNvbXBhcmUobm9kZSwgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAKKyAgICBjYXNlIE51bWJlclVzZTog
ewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJy
YW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7CiAg
ICAgICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Js
b2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKQEAgLTM0NTksMTAgKzM1NzEsMTIgQEAgYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21waWxlRG91
YmxlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmlu
ZygpKQorICAgICAgICAKKyAgICBjYXNlIFN0cmluZ1VzZTogewogICAgICAgICByZXR1cm4gbm9u
U3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSkgeworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPYmplY3RVc2U6IHsKICAgICAgICAg
dW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAg
ICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewogICAgICAgICAgICAg
Tm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJy
YW5jaEluZGV4SW5CbG9jayk7CkBAIC0zNDc2LDggKzM1OTAsMTUgQEAgYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHko
bm9kZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5v
blNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7CisgICAgICAgIAorICAgIGNhc2UgVW50eXBlZFVz
ZTogeworICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCkBAIC0z
ODE1LDYgKzM5MzYsMjQxIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0
ZXIKICAgICByZXR1cm4gdGVtcG9yYXJ5LmdwcigpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVJbnQzMihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhl
ZGdlLCBTcGVjSW50MzIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgKFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlTnVtYmVyKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNr
KGVkZ2UsIFNwZWNOdW1iZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9w
ZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3BlcmFuZC5ncHIoKSwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpT
VmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCBTcGVjTnVtYmVyLAorICAgICAgICBtX2pp
dC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wZXJhbmQuZ3ByKCksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7
CisjZWxzZQorICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBlZGdlKTsKKyAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIG9wZXJhbmQudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwor
ICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC50YWdHUFIoKSwgb3Ax
Lm9wZXJhbmQoKSksIGVkZ2UsIFNwZWNOdW1iZXIsCisgICAgICAgIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wZXJhbmQudGFnR1BSKCksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyNl
bmRpZgorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2Ug
ZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNSZWFsTnVtYmVyKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFu
ZCh0aGlzLCBlZGdlKTsKKyAgICBGUFJSZWcgZnByID0gb3BlcmFuZC5mcHIoKTsKKyAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY1JlYWxOdW1iZXIs
CisgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmcHIsIGZwcikpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNCb29sZWFuKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IChTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCh0aGlzLCBlZGdlKSkuZ3ByKCk7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
KFNwZWN1bGF0ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBERkdfVFlQRV9D
SEVDSygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsIFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcGVyYW5kLmdwcigpLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlIGVk
Z2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0IHwgU3BlY090
aGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQo
dGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgZ3ByID0gb3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcg
dGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIERG
R19UWVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwg
KH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoZ3ByLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OworICAgIG5vdENlbGwubGluaygmbV9qaXQpOworICAgIGlmIChuZWVkc1R5cGVDaGVjayhlZGdl
LCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKKyAgICAgICAgbV9qaXQubW92ZShncHIsIHRlbXBH
UFIpOworICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5U
YWdCaXRVbmRlZmluZWQpLCB0ZW1wR1BSKTsKKyAgICAgICAgCisgICAgICAgIHR5cGVDaGVjaygK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVy
LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOworICAgIH0KKyAgICBkb25lLmxpbmsoJm1faml0
KTsKKyNlbHNlCisgICAgR1BSUmVnIHRhZ0dQUiA9IG9wZXJhbmQudGFnR1BSKCk7CisgICAgR1BS
UmVnIHBheWxvYWRHUFIgPSBvcGVyYW5kLnBheWxvYWRHUFIoKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBub3RDZWxsID0KKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAg
REZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdl
LCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhwYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOworICAgIG5vdENlbGwubGluaygmbV9qaXQpOworICAgIGlmIChuZWVkc1R5cGVD
aGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKKyAgICAgICAgbV9qaXQubW92ZSh0
YWdHUFIsIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgdGVt
cEdQUik7CisgICAgICAgIAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCByaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhl
ciwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CisgICAgfQorICAgIGRvbmUubGlu
aygmbV9qaXQpOworI2VuZGlmCit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0
cmluZyhFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU3Ry
aW5nKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9w
ZXJhbmQodGhpcywgZWRnZSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVS
ZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCBTcGVjU3RyaW5nLCBtX2ppdC5icmFuY2hQdHIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3BlcmFuZC5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZU5vdENlbGwoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBl
Q2hlY2soZWRnZSwgflNwZWNDZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFs
dWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
b3BlcmFuZC5ncHIoKSksIGVkZ2UsIH5TcGVjQ2VsbCwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDY0KAorICAgICAgICAgICAgSklUQ29tcGlsZXI6Olplcm8sIG9wZXJhbmQuZ3ByKCksIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpT
VmFsdWVSZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wZXJhbmQucGF5bG9hZEdQUigpKSwgZWRnZSwg
flNwZWNDZWxsLAorICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpFcXVhbCwgb3BlcmFuZC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKSk7CisjZW5kaWYKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT3RoZXIo
RWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY090aGVyKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywg
ZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0
aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBtX2ppdC5tb3ZlKG9wZXJhbmQuZ3ByKCksIHRlbXBHUFIpOworICAgIG1faml0LmFu
ZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHRlbXBH
UFIpOworICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSks
IGVkZ2UsIFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKKyNlbHNlCisgICAgbV9qaXQubW92ZShv
cGVyYW5kLnRhZ0dQUigpLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigx
KSwgdGVtcEdQUik7CisgICAgdHlwZUNoZWNrKAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5k
LnRhZ0dQUigpLCBvcGVyYW5kLnBheWxvYWRHUFIoKSksIGVkZ2UsIFNwZWNPdGhlciwKKyAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyNlbmRpZiAgICAKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZGdlIGVkZ2UpCit7CisgICAgc3dpdGNoIChl
ZGdlLnVzZUtpbmQoKSkgeworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVk
Z2UsIFNwZWNJbnQzMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duTnVtYmVyVXNl
OgorICAgICAgICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNOdW1iZXIpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgIEFTU0VSVCghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
bnQzMlVzZToKKyAgICAgICAgc3BlY3VsYXRlSW50MzIoZWRnZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAgc3BlY3VsYXRlUmVhbE51bWJlcihlZGdl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIHNwZWN1bGF0
ZU51bWJlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCb29sZWFuVXNlOgorICAg
ICAgICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENl
bGxVc2U6CisgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgT2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJpbmdVc2U6Cisg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBO
b3RDZWxsVXNlOgorICAgICAgICBzcGVjdWxhdGVOb3RDZWxsKGVkZ2UpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVPdGhlcihlZGdlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTMgKzEy
MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgR1BSUmVnIGZpbGxJ
bnRlZ2VyKE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOworICAgIEdQUlJlZyBmaWxs
SW50ZWdlcihFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKKyAgICBHUFJSZWcgZmlsbEpTVmFs
dWUoRWRnZSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGJvb2wgZmlsbEpTVmFsdWUo
Tm9kZSosIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYpOworICAgIGJvb2wgZmlsbEpTVmFsdWUo
RWRnZSwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7CiAjZW5kaWYKLSAgICBHUFJSZWcgZmls
bFN0b3JhZ2UoTm9kZSopOworICAgIEdQUlJlZyBmaWxsU3RvcmFnZShFZGdlKTsKIAogICAgIC8v
IGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhHUFJS
ZWcgcmVnKQpAQCAtMjk1LDExICsyOTUsMTEgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVkIGJ5
IHRoZSBzcGVjdWxhdGl2ZSBvcGVyYW5kIHR5cGVzLCBiZWxvdywgdG8gZmlsbCBvcGVyYW5kIHRv
CiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGltcGxpY2l0bHkgZ2VuZXJhdGluZyBzcGVjdWxh
dGlvbiBjaGVja3MgYXMgbmVlZGVkLgotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KE5vZGUq
LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBH
UFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKik7Ci0gICAgRlBSUmVnIGZpbGxTcGVj
dWxhdGVEb3VibGUoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmls
bFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBH
UFJSZWcgZmlsbFNwZWN1bGF0ZUludChFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChF
ZGdlKTsKKyAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlLCBTcGVjdWxhdGlvbkRp
cmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24pOwogICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJhdGVk
VHlwZUZvclRvSW50MzIoTm9kZSopOwogCiAgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRvcihQ
YXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPik7CkBAIC01NDAsMTIgKzU0MCw2IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2pp
dC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQogICAgIGludDMyX3QgdmFsdWVP
ZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9m
SW50MzJDb25zdGFudChub2RlKTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
Tm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
bm9kZSk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIoTm9kZSog
bm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCi0gICAgICAg
ICAgICByZXR1cm4gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiBK
U0M6OnRvSW50MzIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKLSAgICB9CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlKiBu
b2RlKSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlKTsgfQogI2Vu
ZGlmCkBAIC0yMDIzLDkgKzIwMTcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlT2JqZWN0
RXF1YWxpdHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVx
dWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpOwogICAgIHZvaWQgY29tcGls
ZVZhbHVlQWRkKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5v
dChFZGdlIHZhbHVlLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKKyAgICB2b2lkIGNvbXBp
bGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlKTsKICAgICB2b2lkIGNvbXBpbGVM
b2dpY2FsTm90KE5vZGUqKTsKLSAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ug
dmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIGJvb2wgbmVlZFNw
ZWN1bGF0aW9uQ2hlY2spOworICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2
YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbik7CiAgICAgdm9pZCBl
bWl0QnJhbmNoKE5vZGUqKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShO
b2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtMjE3OCw3ICsy
MTcyLDkgQEAgcHVibGljOgogICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBjb25zdCBWYWx1ZVJlY292ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7CiAgICAgdm9pZCBmb3J3
YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNvbnN0
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAg
ICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zlcnkm
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxs
eSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZSopOwog
ICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVS
ZWdzLCBFZGdlKTsKQEAgLTIxODgsNiArMjE4NCwyNCBAQCBwdWJsaWM6CiAgICAgSnVtcFJlcGxh
Y2VtZW50V2F0Y2hwb2ludCogZm9yd2FyZFNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCA9
IFVuY291bnRhYmxlV2F0Y2hwb2ludCk7CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCog
c3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAg
ICAgCisgICAgLy8gSGVscGVycyBmb3IgcGVyZm9ybWluZyB0eXBlIGNoZWNrcyBvbiBhbiBlZGdl
IHN0b3JlZCBpbiB0aGUgZ2l2ZW4gcmVnaXN0ZXJzLgorICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2so
RWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpIHsgcmV0dXJuIG1f
c3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZXNQYXNzZWRUaHJvdWdoOyB9CisgICAg
dm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
KTsKKyAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2Ug
ZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5Jik7CisgICAgdm9pZCB0eXBlQ2hl
Y2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQ
YXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbik7CisKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyKEVkZ2UpOworICAgIHZvaWQg
c3BlY3VsYXRlTnVtYmVyKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlUmVhbE51bWJlcihFZGdl
KTsKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVD
ZWxsKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UpOworICAgIHZvaWQgc3Bl
Y3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdl
KTsKKyAgICB2b2lkIHNwZWN1bGF0ZU5vdENlbGwoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVP
dGhlcihFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZShOb2RlKiwgRWRnZSk7CisgICAgCiAgICAg
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5TW9k
ZSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5
TW9kZShHUFJSZWcgdGVtcFdpdGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdU
eXBlLCBib29sIGludmVydCk7CkBAIC0yMTk3LDcgKzIyMTEsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhcnJheWlmeShOb2RlKik7CiAgICAgCiAgICAgdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+Ci0gICAg
R1BSUmVnIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlKiwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJ
bnRJbnRlcm5hbChFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uKTsKICAgICAKICAgICAvLyBJdCBpcyBwb3NzaWJsZSwgZHVyaW5nIHNwZWN1bGF0aXZl
IGdlbmVyYXRpb24sIHRvIHJlYWNoIGEgc2l0dWF0aW9uIGluIHdoaWNoIHdlCiAgICAgLy8gY2Fu
IHN0YXRpY2FsbHkgZGV0ZXJtaW5lIGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsIChmb3IgZXhhbXBs
ZSwgd2hlbiB0d28gbm9kZXMKQEAgLTIyNDcsNiArMjI2MSw5IEBAIHB1YmxpYzoKICAgICAvLyBU
aGUgY3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KICAgICBCbG9ja0luZGV4IG1fYmxvY2s7
CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYm9v
bCBtX2NhbkV4aXQ7CisjZW5kaWYKICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAgICAv
LyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgogICAgIFZlY3RvcjxHZW5lcmF0
aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87CkBAIC0yMzA1LDE3ICsyMzIyLDE3IEBAIHB1
YmxpYzoKIAogY2xhc3MgSW50ZWdlck9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IElu
dGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0
IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFuZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAg
ICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBt
X2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Zvcm1hdChEYXRhRm9ybWF0Tm9uZSkKICNlbmRpZgog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5k
KCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
biB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKTsKKyAgICAgICAgaWYgKGppdC0+
aXNGaWxsZWQoZWRnZS5ub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0y
MzI1LDkgKzIzNDIsMTQgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJ
bnZhbGlkKTsKICAgICB9CiAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZWRnZTsKKyAgICB9CisgICAgCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsK
ICAgICB9CiAKICAgICBEYXRhRm9ybWF0IGZvcm1hdCgpCkBAIC0yMzQwLDI3ICsyMzYyLDI3IEBA
IHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52
YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2pp
dC0+ZmlsbEludGVnZXIobm9kZSgpLCBtX2Zvcm1hdCk7CisgICAgICAgICAgICBtX2dwck9ySW52
YWxpZCA9IG1faml0LT5maWxsSW50ZWdlcihtX2VkZ2UsIG1fZm9ybWF0KTsKICAgICAgICAgcmV0
dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewot
ICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsK
ICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUq
IG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAg
ICAgRGF0YUZvcm1hdCBtX2Zvcm1hdDsKIH07CiAKIGNsYXNzIEpTVmFsdWVPcGVyYW5kIHsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBF
ZGdlIHVzZSkKKyAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJh
bmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVz
ZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKQEAgLTIzNjgsMTQgKzIzOTAsMTQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3Vi
bGVVc2UpOworICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIGlm
IChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgICAgIG1fcmVnaXN0ZXIucGFpci50YWdHUFIgPSBJbnZhbGlkR1BS
UmVnOwogICAgICAgICBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiA9IEludmFsaWRHUFJSZWc7
Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIGlmIChqaXQtPmlz
RmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBmaWxsKCk7CiAjZW5kaWYKICAgICB9CkBAIC0y
Mzk2LDE3ICsyNDE4LDIyIEBAIHB1YmxpYzoKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQorICAg
IAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOwor
ICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
bm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52
YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2pp
dC0+ZmlsbEpTVmFsdWUobm9kZSgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9q
aXQtPmZpbGxKU1ZhbHVlKG1fZWRnZSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsK
ICAgICB9CiAgICAgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKQpAQCAtMjQxOSw3ICsyNDQ2LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZmlsbCgpCiAgICAgewogICAgICAgICBpZiAobV9yZWdpc3Rl
ci5wYWlyLnRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnICYmIG1fcmVnaXN0ZXIucGFpci5wYXlsb2Fk
R1BSID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2lzRG91YmxlID0gIW1faml0LT5m
aWxsSlNWYWx1ZShub2RlKCksIG1fcmVnaXN0ZXIucGFpci50YWdHUFIsIG1fcmVnaXN0ZXIucGFp
ci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7CisgICAgICAgICAgICBtX2lzRG91YmxlID0g
IW1faml0LT5maWxsSlNWYWx1ZShtX2VkZ2UsIG1fcmVnaXN0ZXIucGFpci50YWdHUFIsIG1fcmVn
aXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7CiAgICAgfQogCiAgICAgR1BS
UmVnIHRhZ0dQUigpCkBAIC0yNDUxLDEyICsyNDc4LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
dXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQt
PnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9q
aXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
QEAgLTI0NzMsMTQgKzI1MDAsMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3RvcmFnZU9wZXJhbmQg
ewogcHVibGljOgotICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBq
aXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklU
KiBqaXQsIEVkZ2UgZWRnZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2Rl
KHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPcklu
dmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAg
ICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQt
PmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7CisgICAgICAgIGlmIChq
aXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAgICAgCkBA
IC0yNDkwLDI2ICsyNTE3LDMxIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dw
ck9ySW52YWxpZCk7CiAgICAgfQogICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KKyAgICAKICAgICBOb2RlKiBub2RlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCku
bm9kZSgpOwogICAgIH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlm
IChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPcklu
dmFsaWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2Uobm9kZSgpKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJ
bnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGVkZ2UoKSk7CiAgICAgICAgIHJldHVybiBtX2dw
ck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAg
bV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQog
ICAgIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9u
b2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAK
QEAgLTI2NDEsOSArMjY3Myw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZChT
cGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0
aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1v
ZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChq
aXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2Up
CiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICNpZm5kZWYgTkRFQlVH
CiAgICAgICAgICwgbV9mb3JtYXQoRGF0YUZvcm1hdE5vbmUpCkBAIC0yNjUxLDggKzI2ODMsOCBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91Ymxl
VXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51
c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25JbnQzMlVzZSkp
OworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7
CiAgICAgfQogCkBAIC0yNjYxLDEwICsyNjkzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2Nr
KG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgp
Lm5vZGUoKTsKICAgICB9CiAKICAgICBEYXRhRm9ybWF0IGZvcm1hdCgpCkBAIC0yNjc3LDE4ICsy
NzE0LDE4IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmICht
X2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFs
aWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludChub2RlKCksIG1fZm9ybWF0LCBtX2RpcmVjdGlv
bik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50
KGVkZ2UoKSwgbV9mb3JtYXQsIG1fZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJ
bnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2pp
dC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHBy
aXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAg
ICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgRGF0YUZvcm1h
dCBtX2Zvcm1hdDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKQEAgLTI2
OTYsMTQgKzI3MzMsMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFu
ZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAg
ICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAg
LCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5k
KCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
biB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25v
d25JbnQzMlVzZSkpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAg
ICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yNzEyLDQxICsyNzQ5LDQ2IEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwogICAgICAgICBt
X2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9k
ZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICBy
ZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAg
ICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAg
bV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludFN0cmljdChub2RlKCkpOwor
ICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludFN0cmlj
dChlZGdlKCkpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAg
ICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2
ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQ
UlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKIGNsYXNzIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
ewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRp
dmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJh
Y2t3YXJkU3BlY3VsYXRpb24pCisgICAgZXhwbGljaXQgU3BlY3VsYXRlRG91YmxlT3BlcmFuZChT
cGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9
IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAg
ICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAg
ICwgbV9mcHJPckludmFsaWQoSW52YWxpZEZQUlJlZykKICAgICAgICAgLCBtX2RpcmVjdGlvbihk
aXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQo
dXNlLnVzZUtpbmQoKSA9PSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZCht
X25vZGUpKQorICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBOdW1iZXJVc2UgfHwgZWRnZS51c2VL
aW5kKCkgPT0gS25vd25OdW1iZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gUmVhbE51bWJlclVz
ZSkpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZnBy
KCk7CiAgICAgfQogCkBAIC0yNzU1LDQyICsyNzk3LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKG1fZnByT3JJbnZhbGlkICE9IEludmFsaWRGUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5s
b2NrKG1fZnByT3JJbnZhbGlkKTsKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRn
ZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBGUFJSZWcgZnByKCkKICAgICB7CiAgICAgICAgIGlm
IChtX2Zwck9ySW52YWxpZCA9PSBJbnZhbGlkRlBSUmVnKQotICAgICAgICAgICAgbV9mcHJPcklu
dmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZURvdWJsZShub2RlKCksIG1fZGlyZWN0aW9uKTsK
KyAgICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVEb3VibGUo
ZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2Zwck9ySW52YWxpZDsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25v
ZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAg
IFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2Vk
Z2U7CiAgICAgRlBSUmVnIG1fZnByT3JJbnZhbGlkOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IG1fZGlyZWN0aW9uOwogfTsKIAogY2xhc3MgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQs
IEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1
bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklU
KiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dh
cmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3Bl
cmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUo
dXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52
YWxpZChJbnZhbGlkR1BSUmVnKQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgp
ICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAg
ICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24g
fHwgKGVkZ2UudXNlS2luZCgpID09IENlbGxVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25D
ZWxsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IE9iamVjdFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9
PSBTdHJpbmdVc2UpKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAg
ICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjc5OSw0MiArMjg0Niw0NyBAQCBwdWJsaWM6CiAg
ICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAg
bV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRn
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5v
ZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAg
cmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewog
ICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAg
IG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxsKG5vZGUoKSwgbV9kaXJl
Y3Rpb24pOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0
ZUNlbGwoZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxp
ZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVz
ZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogCiBwcml2YXRl
OgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRn
ZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogICAgIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKIAogY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQg
ewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0
aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBC
YWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5k
KFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2Rl
ID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAg
ICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAg
ICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgICAgICAsIG1fZGlyZWN0aW9u
KGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VS
VCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVk
KG1fbm9kZSkpCisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSk7CisgICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAg
ICAgCkBAIC0yODQ0LDMwICsyODk2LDQxIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQtPnVubG9j
ayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KKyAgICAKICAgICBOb2RlKiBub2Rl
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBl
ZGdlKCkubm9kZSgpOwogICAgIH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAg
ICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9n
cHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUJvb2xlYW4obm9kZSgpLCBtX2RpcmVj
dGlvbik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRl
Qm9vbGVhbihlZGdlKCksIG1fZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZh
bGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+
dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZh
dGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBF
ZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgU3BlY3VsYXRpb25E
aXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCisjZGVmaW5lIERGR19UWVBFX0NIRUNLKHNvdXJj
ZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKSBkbyB7IFwKKyAgICAgICAg
aWYgKCFuZWVkc1R5cGVDaGVjaygoZWRnZSksICh0eXBlc1Bhc3NlZFRocm91Z2gpKSkgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdHlwZUNoZWNrKChzb3VyY2UpLCAo
ZWRnZSksICh0eXBlc1Bhc3NlZFRocm91Z2gpLCAoanVtcFRvRmFpbCkpOyBcCisgICAgfSB3aGls
ZSAoMCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg5LDExICsyODksMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogZ2V0TG9jYWwgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIERvbnRSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICBHZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZh
cmlhYmxlKSwgRWRnZShub2RlKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgUmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdl
dExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZ2V0TG9jYWwsIENlbGxVc2Up
KTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQogICAgICAgICAgICAgICAgICAgICAgICAg
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IGdldExv
Y2FsOwpAQCAtMzE3LDcgKzMxNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8g
dG8gZXhpdC4KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgICAg
IE5vZGUqIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCkBAIC0zMjcsNyArMzI3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIHJhdGhl
ciB0aGFuIHJlZXhlY3V0aW5nIHRoZSBjdXJyZW50IG9uZS4KICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcndhcmRDaGVja1N0
cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLCBjaGlsZDEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIEVkZ2UoY2hpbGQxLm5vZGUoKSwg
Q2VsbFVzZSkpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdVc2VLaW5kLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVzZUtpbmQgdXNlS2luZCkKK3sK
KyAgICBzd2l0Y2ggKHVzZUtpbmQpIHsKKyAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgIG91
dC5wcmludCgiVW50eXBlZCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDMyVXNlOgor
ICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS25v
d25JbnQzMlVzZToKKyAgICAgICAgb3V0LnByaW50KCJLbm93bkludDMyIik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAgb3V0LnByaW50KCJSZWFsTnVt
YmVyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICBvdXQu
cHJpbnQoIk51bWJlciIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duTnVtYmVyVXNl
OgorICAgICAgICBvdXQucHJpbnQoIktub3duTnVtYmVyIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgb3V0LnByaW50KCJCb29sZWFuIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgb3V0LnByaW50KCJDZWxsIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgICAgICBvdXQucHJpbnQo
Iktub3duQ2VsbCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9iamVjdFVzZToKKyAgICAg
ICAgb3V0LnByaW50KCJPYmplY3QiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPYmplY3RP
ck90aGVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdE9yT3RoZXIiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIG91dC5wcmludCgiU3RyaW5nIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm90Q2VsbFVzZToKKyAgICAgICAgb3V0LnByaW50
KCJOb3RDZWxsIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAg
IG91dC5wcmludCgiT3RoZXIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHVXNlS2luZF9oCisjZGVmaW5lIERGR1VzZUtpbmRfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBVc2VLaW5kIHsKKyAgICBVbnR5cGVk
VXNlLAorICAgIEludDMyVXNlLAorICAgIEtub3duSW50MzJVc2UsCisgICAgUmVhbE51bWJlclVz
ZSwKKyAgICBOdW1iZXJVc2UsCisgICAgS25vd25OdW1iZXJVc2UsCisgICAgQm9vbGVhblVzZSwK
KyAgICBDZWxsVXNlLAorICAgIEtub3duQ2VsbFVzZSwKKyAgICBPYmplY3RVc2UsCisgICAgT2Jq
ZWN0T3JPdGhlclVzZSwKKyAgICBTdHJpbmdVc2UsCisgICAgTm90Q2VsbFVzZSwKKyAgICBPdGhl
clVzZSwKKyAgICBMYXN0VXNlS2luZCAvLyBNdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBp
biB0aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVs
ZW1lbnRzLgorfTsKKworQUxXQVlTX0lOTElORSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9y
KFVzZUtpbmQgdXNlS2luZCkKK3sKKyAgICBzd2l0Y2ggKHVzZUtpbmQpIHsKKyAgICBjYXNlIFVu
dHlwZWRVc2U6CisgICAgICAgIHJldHVybiBTcGVjRW1wdHlPclRvcDsgLy8gVE9QIGlzbid0IGdv
b2QgZW5vdWdoOyB1bnR5cGVkIHVzZXMgbWF5IHVzZSB0aGUgbm9ybWFsbHkgdW5zZWVuIGVtcHR5
IHZhbHVlLCBpbiB0aGUgY2FzZSBvZiBsYXp5IHJlZ2lzdGVycy4KKyAgICBjYXNlIEludDMyVXNl
OgorICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNJbnQzMjsKKyAg
ICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjUmVhbE51bWJlcjsKKyAg
ICBjYXNlIE51bWJlclVzZToKKyAgICBjYXNlIEtub3duTnVtYmVyVXNlOgorICAgICAgICByZXR1
cm4gU3BlY051bWJlcjsKKyAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIHJldHVybiBTcGVj
Qm9vbGVhbjsKKyAgICBjYXNlIENlbGxVc2U6CisgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAg
ICAgIHJldHVybiBTcGVjQ2VsbDsKKyAgICBjYXNlIE9iamVjdFVzZToKKyAgICAgICAgcmV0dXJu
IFNwZWNPYmplY3Q7CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAgICByZXR1cm4g
U3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAgcmV0
dXJuIFNwZWNTdHJpbmc7CisgICAgY2FzZSBOb3RDZWxsVXNlOgorICAgICAgICByZXR1cm4gflNw
ZWNDZWxsOworICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT3RoZXI7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIFNwZWNUb3A7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNOdW1l
cmljYWwoVXNlS2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgSW50
MzJVc2U6CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgIGNhc2UgUmVhbE51bWJlclVzZToK
KyAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpERkc6OlVzZUtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVXNlS2luZF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxp
ZGF0aW9uQ29udGV4dChOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBkYXRh
TG9nRigiQCV1IC0+ICVzQCV1Iiwgbm9kZS0+aW5kZXgoKSwgdXNlS2luZFRvU3RyaW5nKGVkZ2Uu
dXNlS2luZCgpKSwgZWRnZS0+aW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAi
LCBlZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKQEAgLTM4OSw3ICsz
ODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCiAgICAg
ICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgTm9kZSogZXhwZWN0ZWROb2Rl
LCBFZGdlIGluY29taW5nRWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxv
Y2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGUtPmluZGV4KCksIGJsb2Nr
SW5kZXgsIGV4cGVjdGVkTm9kZS0+aW5kZXgoKSwgaW5jb21pbmdFZGdlLT5pbmRleCgpKTsKKyAg
ICAgICAgZGF0YUxvZyhub2RlLCAiIGluIEJsb2NrICMiLCBibG9ja0luZGV4LCAiLCBzZWFyY2hp
bmcgZm9yICIsIGV4cGVjdGVkTm9kZSwgIiBmcm9tICIsIGluY29taW5nRWRnZSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189407</attachid>
            <date>2013-02-20 16:30:21 -0800</date>
            <delta_ts>2013-02-20 20:57:09 -0800</delta_ts>
            <desc>32-bit is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>384483</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NSBA
QAorMjAxMy0wMi0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgbm90IGNoYW5nZSBpdHMgbWluZCBhYm91dCB3aGF0IHR5cGUgc3BlY3VsYXRp
b25zIGEgbm9kZSBkb2VzLCBieSBlbmNvZGluZyB0aGUgY2hlY2tzIGluIHRoZSBOb2RlVHlwZSwg
VXNlS2luZCwgYW5kIEFycmF5TW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBGaXh1cFBoYXNlIG5vdyBsb2NrcyBpbiB0aGUgc3BlY3Vs
YXRpb25zIHRoYXQgZWFjaCBub2RlIHdpbGwgZG8uIEl0IHRoZW4gcmVtZW1iZXJzCisgICAgICAg
IHRob3NlIHNwZWN1bGF0aW9ucyBmb3IgYWxsIHRpbWUuIEVhY2ggbm9kZSBlbnN1cmVzIHRoYXQg
aXQgZXhlY3V0ZXMgdGhlIHNwZWN1bGF0aW9ucworICAgICAgICBwcm9taXNlZCBieSBpdHMgZWRn
ZXMuIFRoaXMgaXMgdHJ1ZSBldmVuIGZvciBQaGFudG9tIG5vZGVzLgorICAgICAgICAKKyAgICAg
ICAgV29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKToKKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVkZ2Vz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRl
Lmg6CisgICAgICAgIChBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFN0YXRlOjpmaWx0ZXJFZGdlQnlVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmZpbHRlckJ5VHlwZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAqIGRmZy9E
RkdBZGphY2VuY3lMaXN0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6QWRq
YWNlbmN5TGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6Y2hpbGQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldENoaWxkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBZGphY2VuY3lMaXN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNl
bmN5TGlzdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6
c2V0Rmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6bnVtQ2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnNldE51bUNoaWxkcmVu
KToKKyAgICAgICAgKEFkamFjZW5jeUxpc3QpOgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3Iu
aDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFsbG9jYXRvcjo6Y2VsbFNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6
UmVnaW9uOjpoZWFkZXJTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBbGxvY2F0b3I6OlJlZ2lv
bjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRv
cjo6UmVnaW9uOjpwYXlsb2FkU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpS
ZWdpb246OnBheWxvYWRCZWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpSZWdp
b246OnBheWxvYWRFbmQpOgorICAgICAgICAoSlNDOjpERkc6OkFsbG9jYXRvcjo6UmVnaW9uOjpp
c0luVGhpc1JlZ2lvbik6CisgICAgICAgIChKU0M6OkRGRzo6OjpBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6fkFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjpmcmVlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmZy
ZWVBbGwpOgorICAgICAgICAoSlNDOjpERkc6Ojo6cmVzZXQpOgorICAgICAgICAoSlNDOjpERkc6
Ojo6aW5kZXhPZik6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0b3JPZik6CisgICAgICAg
IChKU0M6OkRGRzo6OjpidW1wQWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZnJlZUxp
c3RBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxvY2F0ZVNsb3cpOgorICAgICAg
ICAoSlNDOjpERkc6Ojo6ZnJlZVJlZ2lvbnNTdGFydGluZ0F0KToKKyAgICAgICAgKEpTQzo6REZH
Ojo6OnN0YXJ0QnVtcGluZ0luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKiBk
ZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRMb2Nh
bFN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjplbGltaW5h
dGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6c2V0UmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3Jt
Tm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToK
KyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdl
Ojp1c2VLaW5kVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjp1c2VLaW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzaGlmdCk6CisgICAgICAgICogZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnJ1bik6CisgICAgICAg
IChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpi
bGVzc0FycmF5T3BlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXhJ
bnRFZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXhEb3VibGVFZGdlKToK
KyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjppbmplY3RJbnQzMlRvRG91YmxlTm9kZSk6
CisgICAgICAgIChGaXh1cFBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjp0
cnVuY2F0ZUNvbnN0YW50VG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6
dHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQ
aGFzZTo6YXR0ZW1wdFRvTWFrZUludGVnZXJBZGQpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWZDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRlcmVmQ2hpbGRyZW4pOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWYpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkZXJlZik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnBl
cmZvcm1TdWJzdGl0dXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc1ByZWRpY3Rl
ZE51bWVyaWNhbCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZEltbWVkaWF0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmNvbnZlcnRUb0dldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9QdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6d2lsbEhhdmVD
b2RlR2VuT3JPU1IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGls
ZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmJpbmFyeVVzZUtpbmQpOgorICAgICAgICAo
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNCaW5hcnlVc2VLaW5kKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZUFsbG9jYXRvci5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZUZsYWdzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpub2RlRmxhZ3NBc1N0cmlu
Zyk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFR5cGVDaGVjayk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGVSZWFsTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3RP
ck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90Q2Vs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU90aGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZk51bWJlckNvbnN0YW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bmVlZHNUeXBlQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSW50ZWdlck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpub2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpJbnRl
Z2VyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6SlNW
YWx1ZU9wZXJhbmQpOgorICAgICAgICAoSlNWYWx1ZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpTVmFsdWVPcGVyYW5kOjplZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3Bl
cmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdwcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OmZpbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpTVmFsdWVPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVy
YW5kOjpTdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6
OmVkZ2UpOgorICAgICAgICAoU3RvcmFnZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlN0
b3JhZ2VPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6
Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6dXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6U3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQpOgorICAgICAgICAoU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjplZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kOjpTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQpOgorICAgICAgICAoU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVEb3VibGVPcGVy
YW5kOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kKToKKyAgICAgICAgKFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6OmVkZ2Up
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6Om5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6OmZwcik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQpOgorICAgICAgICAo
U3BlY3VsYXRlQ2VsbE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxP
cGVyYW5kOjplZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6
bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6Omdwcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5k
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6ZWRnZSk6Cisg
ICAgICAgIChTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQ6Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
ZUJvb2xlYW5PcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kOjp1c2UpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJ
bnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dFN0cmljdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhl
ckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
TG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAg
KiBkZmcvREZHVXNlS2luZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdU
Rjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQuaDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAgICAg
ICAoSlNDOjpERkc6OmlzTnVtZXJpY2FsKToKKyAgICAgICAgKFdURik6CisgICAgICAgICogZGZn
L0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6cmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQpOgorCiAyMDEzLTAyLTE5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgU2lsZW5jZSBzb21lIGFuYWx5emVyIHdhcm5pbmdzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksOCBAQAogCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFF
NEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5j
cHAgKi87IH07CiAJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyRjE2
ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZEMiAvKiBE
RkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMzRCMTQ5MTZENDIw
MTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5k
LmNwcCAqLzsgfTsKKwkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ4MTZE
NDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNEIxNkQ0M0UwQzAwMUNEQTVBIC8qIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGM0IzQTFBMTUzRTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwICovOyB9OwogCQkwRjNCM0ExQjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDAxLDYg
KzEwMDMsOCBAQAogCQkwRjJCREM1MDE1MjI4RkZBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUV2
ZW50LmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERG
R0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzNEIxNDcxNkQ0
MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBE
RkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQu
aDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMzRCMTRCMTZENDNFMEMwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE3MTUz
RTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHBh
dGggPSBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcwOSw2ICsyNzEzLDggQEAKIAkJCQkwRkMwOTdBMDE0
NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCiAJCQkJMEZCRTBGNkYxNkMxREIwMTAw
ODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjcwMTZDMURC
MDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggKi8sCisJCQkJMEYzNEIxNDcxNkQ0
MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovLAorCQkJCTBGMzRCMTQ4MTZENDIwMEUw
MDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8sCiAJCQkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZG
IC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKIAkJCQkwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyog
REZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjJCREMzRjE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFs
dWVSZWNvdmVyeU92ZXJyaWRlLmggKi8sCkBAIC0zMjUxLDYgKzMyNTcsNyBAQAogCQkJCTg2ODkx
NkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2RlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyogUHJvZmlsZXJC
eXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8q
IFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NTcsNiArMzk2NCw3IEBA
CiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5k
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9m
aWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZB
RDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdp
blN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAv
KiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0MzQyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNCwzMCArMjM0LDYxIEBAIEFic3RyYWN0U3RhdGU6OkJvb2xlYW5SZXN1
bHQgQWJzdHJhY3RTdGEKICAgICByZXR1cm4gVW5rbm93bkJvb2xlYW5SZXN1bHQ7CiB9CiAKLWJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2spCitib29sIEFi
c3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG1f
YmxvY2spOwogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIAogICAgIG1fZGlkQ2xvYmJlciA9
IGZhbHNlOwogICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2sp
OwotICAgICAgICAKKyAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAKICAgICBpZiAo
IW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEFic3RyYWN0U3RhdGU6OnN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sK
KyAgICByZXR1cm4gc3RhcnRFeGVjdXRpbmcobV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKSk7Cit9
CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVkZ2VzKE5vZGUqIG5vZGUpCit7CisgICAg
REZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgZmlsdGVyRWRnZUJ5VXNlKTsK
K30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWRnZXModW5zaWduZWQgaW5kZXhJbkJs
b2NrKQoreworICAgIGV4ZWN1dGVFZGdlcyhtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spKTsKK30K
Kwordm9pZCBBYnN0cmFjdFN0YXRlOjp2ZXJpZnlFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9y
KGVkZ2UudXNlS2luZCgpKSkpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2Vz
KE5vZGUqIG5vZGUpCit7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9k
ZSwgdmVyaWZ5RWRnZSk7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlKQoreworICAgIGlmICghQVNTRVJUX0RJ
U0FCTEVEKQorICAgICAgICB2ZXJpZnlFZGdlcyhub2RlKTsKKyAgICAKICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFu
dDoKICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6IHsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
SWRlbnRpdHk6IHsKICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAgICAgCkBAIC0yNjUsMTkgKzI5NiwxNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGlm
ICh2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBTcGVjTm9uZSkgewogICAgICAg
ICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBjYW5FeGl0
ID0gZmFsc2U7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3ZhcmlhYmxlcy5vcGVy
YW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CiAgICAgICAgIGlmICghdmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFy
KCkpCi0gICAgICAgICAgICAgICAgY2FuRXhpdCB8PSB0cnVlOworICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLnZhbHVl
KCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgZm9yTm9k
ZShub2RlKSA9IHZhbHVlOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGNhbkV4aXQpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjg2LDM1ICszMTQsMTAgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAodmFsdWUudmFs
dWUoKSkKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICBmb3JO
b2RlKG5vZGUpID0gdmFsdWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAg
ICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkKLSAgICAgICAg
ICAgIHx8IG1fZ3JhcGguaXNDcmVhdGVkVGhpc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKSB7Ci0g
ICAgICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVz
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuc2V0KFNwZWNEb3VibGUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rl
ZFR5cGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rp
b24oKTsKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGlz
Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KCFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkp
Ci0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAKICAgICAgICAg
bV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMjIsNyArMzI1LDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAg
ICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0
LgogICAgICAgICBBU1NFUlQoIW1fYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpLmlzQ2xlYXIoKSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgpAQCAtMzYyLDExICsz
NjQsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKICAgICAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzc3LDIw
ICszNzcsMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgQVNTRVJUKGNoaWxkLmlzSW50MzIoKSk7CiAgICAgICAgICAgICBpZiAodHJ5U2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSkpIHsKICAgICAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICBpZiAoIW5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIAogICAgIGNhc2UgRG91YmxlQXNJbnQzMjogewogICAgICAgICBKU1ZhbHVl
IGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKQEAgLTQwNCw3ICs0MDEs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00MTks
MjAgKzQxNSw5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgICAgICBjb25zdGFudFdhc1NldCA9IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFs
dWUoSlNDOjp0b0ludDMyKGNoaWxkLmFzRG91YmxlKCkpKSk7CiAgICAgICAgICAgICBpZiAoY29u
c3RhbnRXYXNTZXQpIHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVCb29sZWFuKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9k
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKH5TcGVjQ2VsbCk7Ci0gICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwpAQCAtNDQ0LDEwICs0Mjks
OCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlm
IChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFu
dChub2RlLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBjaGlsZC5hc051bWJlcigp
KSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAgICAgICBlbHNlCkBAIC00NTUs
MTAgKzQzOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIENoZWNrTnVtYmVyOgotICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRo
QWRkOiB7CiAgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CkBAIC00NjYsMzMgKzQ0NSwyNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIo
KSAmJiByaWdodC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2Rl
LCBKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKSkgewogICAgICAg
ICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICht
X2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyQmluYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2Rl
LT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOworICAgICAgICBjYXNlIE51bWJlclVzZToK
ICAgICAgICAgICAgIGlmIChpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3R5cGUpCiAgICAgICAgICAgICAgICAgJiYgaXNSZWFsTnVtYmVyU3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKICAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCkgeworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBW
YWx1ZUFkZCk7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJpbmcgfCBT
cGVjSW50MzIgfCBTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qg
aGFuZGxlIHRoaXMgeWV0LiA6LSgKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
ICAgIApAQCAtNTAyLDE3ICs0NzUsMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkg
JiYgcmlnaHQuaXNOdW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwg
SlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLCAhbm9kZUNhblRydW5jYXRl
SW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBO
dW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01MjEs
MTcgKzQ5OCwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlT
ZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKC1jaGlsZC5hc051bWJlcigpKSkpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9n
cmFwaC5uZWdhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMlVuYXJ5KAotICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVD
YW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAt
NTQxLDIzICs1MjIsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQu
aXNOdW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShs
ZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5tdWxT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MkJpbmFyeSgKLSAgICAgICAgICAgICAgICBub2RlLAotICAgICAgICAgICAgICAgICFub2RlQ2Fu
VHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpCi0gICAgICAgICAgICAgICAg
fHwgIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIElu
dDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygp
KQorICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAg
ICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlKQorICAgICAgICAgICAgICAgIHx8IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXQoU3BlY0RvdWJsZVJlYWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5
KG5vZGUpOwotICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24oZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgaXNSZWFsTnVtYmVyU3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC01OTEsMTggKzU3NSwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQp
IHsKICAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsK
LSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUsIHRydWUpOyAvLyBmb3JjaW5n
IGNhbi1leGl0LCB3aGljaCBpcyBhIGJpdCBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUuCisgICAg
ICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJV
c2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAg
CkBAIC02MTEsMTcgKzU5OCwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpCiAgICAgICAgICAg
ICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGZhYnMoY2hpbGQuYXNOdW1iZXIoKSkp
KSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMoKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUsIHRydWUpOworICAgICAgICBzd2l0
Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgog
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBO
dW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBAIC02
MzAsMTAgKzYyMCw4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkKICAgICAgICAgICAgICYmIHRy
eVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoc3FydChjaGlsZC5hc051bWJlcigpKSkpKSB7CiAg
ICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
c3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC02NTIsMjEgKzY0MCwyMSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGRpZFNldENvbnN0YW50KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0g
dHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlv
bigpKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAg
ZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEJvb2xl
YW5Vc2U6CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgor
ICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcigoU3BlY0NlbGwgJiB+U3BlY1N0cmlu
ZykgfCBTcGVjT3RoZXIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAg
ICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9v
bGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc2NCwxNCArNzUyLDE3IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZSogY2hp
bGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNDZWxsU3BlY3Vs
YXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXNTdHJp
bmdTcGVjdWxhdGlvbihjaGlsZE5vZGUtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZE5vZGUpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkTm9kZSkuZmlsdGVyKFNwZWNDZWxsKTsKKwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNl
IFN0cmluZ1VzZToKKyAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRV
c2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJlYWs7
CkBAIC04MjMsNjUgKzgxNCwxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgIAogICAgICAgICBpZiAoY29uc3RhbnRXYXNTZXQpIHsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICAKLSAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxQ29uc3RhbnQpIHsKLSAgICAgICAgICAgIC8vIFdlIGNh
biBleGl0IGlmIHdlIGhhdmVuJ3QgZmlyZWQgdGhlIE1hc3F1ZXJhZGVzQXNVbmRlZmluZCB3YXRj
aHBvaW50IHlldC4KLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIE5vZGUqIGxlZnQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOwotICAgICAgICBT
cGVjdWxhdGVkVHlwZSBmaWx0ZXI7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlQ2hlY2tlciBjaGVj
a2VyOwotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdo
dCkpIHsKLSAgICAgICAgICAgIGZpbHRlciA9IFNwZWNJbnQzMjsKLSAgICAgICAgICAgIGNoZWNr
ZXIgPSBpc0ludDMyU3BlY3VsYXRpb247Ci0gICAgICAgIH0gZWxzZSBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkgewotICAgICAgICAgICAgZmlsdGVyID0gU3Bl
Y051bWJlcjsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc051bWJlclNwZWN1bGF0aW9uOwotICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBp
ZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHQtPnNob3VsZFNwZWN1bGF0
ZVN0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAgaWYgKGxl
ZnQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0
ZU9iamVjdCgpICYmIHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobGVmdCkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAgICAgIGZvck5vZGUo
cmlnaHQpLmZpbHRlcihTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxh
dGVPYmplY3RPck90aGVyKCkgJiYgcmlnaHQtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7Ci0g
ICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKGxlZnQpLmZpbHRlcihTcGVjT2JqZWN0IHwgU3BlY090aGVyKTsKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gCi0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjVG9wOwot
ICAgICAgICAgICAgY2hlY2tlciA9IGlzQW55U3BlY3VsYXRpb247Ci0gICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGZpbHRlciA9IFNwZWNUb3A7Ci0gICAgICAgICAgICBjaGVja2VyID0g
aXNBbnlTcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwotICAgICAgICB9Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
Ci0gICAgICAgICAgICAhY2hlY2tlcihmb3JOb2RlKGxlZnQpLm1fdHlwZSkKLSAgICAgICAgICAg
IHx8ICFjaGVja2VyKGZvck5vZGUocmlnaHQpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKGxl
ZnQpLmZpbHRlcihmaWx0ZXIpOwotICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoZmlsdGVy
KTsKKyAgICAgICAgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLiBCdXQgdGhlIG9ubHkg
dGhpbmcgdGhpcyBwcmV2ZW50cyBpcyBzdG9yZSBlbGltaW5hdGlvbiwKKyAgICAgICAgLy8gYW5k
IGhvdyBsaWtlbHkgaXMgaXQsIHJlYWxseSwgdGhhdCB5b3UnbGwgaGF2ZSByZWR1bmRhbnQgc3Rv
cmVzIGFjcm9zcyBhIGNvbXBhcmlzb24KKyAgICAgICAgLy8gb3BlcmF0aW9uPyBDb21wYXJpc29u
IG9wZXJhdGlvbnMgYXJlIHR5cGljYWxseSBhdCB0aGUgZW5kIG9mIGJhc2ljIGJsb2Nrcywgc28K
KyAgICAgICAgLy8gdW5sZXNzIHdlIGhhdmUgZ2xvYmFsIHN0b3JlIGVsaW1pbmF0aW9uIChzdXBl
ciB1bmxpa2VseSBnaXZlbiBob3cgdW5wcm9maXRhYmxlIHRoYXQKKyAgICAgICAgLy8gb3B0aW1p
emF0aW9uIGlzIHRvIGJlZ2luIHdpdGgpLCB5b3UgYXJlbid0IGdvaW5nIHRvIGJlIHdhbnRpbmcg
dG8gc3RvcmUgZWxpbWluYXRlCisgICAgICAgIC8vIGFjcm9zcyBhbiBlcXVhbGl0eSBvcC4KKyAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAgICAgCkBAIC04OTQsNDcgKzgzOCwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1i
ZXIoKSAmJiByaWdodC5pc051bWJlcigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChu
b2RlLCBqc0Jvb2xlYW4obGVmdC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkpKSkgewog
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0Tm9k
ZSwgcmlnaHROb2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlZnROb2RlLT5z
aG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCByaWdodE5vZGUtPnNob3VsZFNwZWN1bGF0ZVN0cmlu
ZygpKSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0KCkgJiYgcmlnaHROb2RlLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgewotICAgICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobGVmdE5v
ZGUpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAgIGZvck5vZGUocmlnaHROb2RlKS5m
aWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNw
ZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y1N0cmluZyk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKQEAgLTk1NCwxNSArODcxLDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRv
cCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkg
ewogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTcw
LDcgKzg4NCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkubWFrZVRvcCgpOwpAQCAtOTgyLDQ4ICs4OTUsMzggQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1
b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VU
b3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50
MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKQEAgLTEwMzYsOSArOTM5LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIEVkZ2UgY2hpbGQxID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
bW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAg
ICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKQEAgLTEwNDcsMTA0ICs5NDcsMjMgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAg
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNSZWFsTnVtYmVyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYg
KGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNJbnQzMik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7
Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAg
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJl
cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNo
aWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAg
aWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWND
ZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTExNTIsMTYgKzk3MSw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAg
IAogICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjUmVh
bE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjTnVtYmVy
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTc0LDE2ICs5ODMsMTAgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBSZWdFeHBF
eGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAg
ICAgICAgICAgICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUpCi0gICAgICAgICAgICB8fCAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGls
ZDIoKSkubV90eXBlKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjQ2Vs
bCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKQEAg
LTExOTEsMzYgKzk5NCwyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIEJvb2xlYW5SZXN1bHQgcmVzdWx0ID0gYm9vbGVhblJlc3VsdChub2RlLCBm
b3JOb2RlKGNoaWxkKSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseVRydWUpIHsK
ICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7Ci0gICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChyZXN1bHQgPT0gRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgICAgICBtX2Jy
YW5jaERpcmVjdGlvbiA9IFRha2VGYWxzZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6
IFRoZSBhYm92ZSBoYW5kbGVzIHRoZSB0cml2aWFsIGNhc2VzIG9mIHNwYXJzZSBjb25kaXRpb25h
bAogICAgICAgICAvLyBjb25zdGFudCBwcm9wYWdhdGlvbiwgYnV0IHdlIGNhbiBkbyBiZXR0ZXI6
CiAgICAgICAgIC8vIFdlIGNhbiBzcGVjaWFsaXplIHRoZSBzb3VyY2UgdmFyaWFibGUncyB2YWx1
ZSBvbiBlYWNoIGRpcmVjdGlvbiBvZgogICAgICAgICAvLyB0aGUgYnJhbmNoLgotICAgICAgICBp
ZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
ZUJvb2xlYW5VbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1
bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQpLmZpbHRlcihTcGVjT2JqZWN0IHwgU3BlY090
aGVyKTsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KQotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBp
ZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRl
TnVtYmVyVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOworICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBUaGlzIGlz
IG92ZXJseSBjb25zZXJ2YXRpdmUuCiAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZUJv
dGg7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUmV0dXJu
OgogICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFRocm93OgpAQCAtMTIz
MCwyMiArMTAyMCwxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewot
ICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgCi0g
ICAgICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUoY2hpbGQpLnZhbHVlKCk7CisgICAg
ICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7
CiAgICAgICAgIGlmIChjaGlsZENvbnN0ICYmIGNoaWxkQ29uc3QuaXNOdW1iZXIoKSAmJiB0cnlT
ZXRDb25zdGFudChub2RlLCBjaGlsZENvbnN0KSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0
YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoY2hpbGQtPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFy
eShub2RlKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBJbnQzMlVz
ZSkgewogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0g
Zm9yTm9kZShjaGlsZCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZv
ck5vZGUobm9kZSk7CiAgICAgICAgIAogICAgICAgICAvLyBOQi4gVGhlIG1vcmUgY2Fub25pY2Fs
IHdheSBvZiB3cml0aW5nIHRoaXMgd291bGQgaGF2ZSBiZWVuOgpAQCAtMTI3NSwzOSArMTA2MSwx
NSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICB0eXBlIHw9IFNwZWNTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgZGVzdGluYXRpb24uc2V0
KHR5cGUpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBTdHJDYXQ6Ci0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjU3RyaW5nKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5OgogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9VTkRF
Q0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBBU1NFUlQoIW5vZGUtPm51bUNoaWxk
cmVuKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBv
cGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG5vZGUtPm51
bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQotICAgICAgICAgICAgICAgIGZvck5vZGUobV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0p
LmZpbHRlcihTcGVjUmVhbE51bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
PmNvZGVPcmlnaW4pLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTMyMCwxOSArMTA4MiwxNiBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChT
cGVjQXJyYXkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld1JlZ2V4cDoKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CiAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5v
ZGUobm9kZSk7CiAgICAgICAgICAgICAKQEAgLTEzNDEsMzggKzExMDAsMzEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgLy8gb2JqZWN0LCBz
byB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKICAg
ICAgICAgICAgIC8vIGJlIGhpdCwgYnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZlciBrbm93LgogICAg
ICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOyAvLyBUZWxs
IHRoZSBjb25zdGFudCBmb2xkZXIgdG8gdHVybiB0aGlzIGludG8gSWRlbnRpdHkuCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpc090aGVyU3BlY3VsYXRpb24oY2hpbGQt
PnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIoU3BlY090aGVyKTsK
KyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBPdGhlclVzZToKICAgICAgICAgICAgIGRlc3RpbmF0aW9uLnNldChTcGVjT2JqZWN0T3RoZXIp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChp
c09iamVjdFNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBz
b3VyY2UuZmlsdGVyKFNwZWNPYmplY3QpOworICAgICAgICBjYXNlIE9iamVjdFVzZToKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVW50eXBlZFVzZToKICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAg
ICAgICAgICAgZGVzdGluYXRpb24ubWVyZ2UoU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7Ci0gICAgICAgIGRlc3RpbmF0aW9uLm1lcmdl
KFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQ3Jl
YXRlVGhpczogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2Rl
KG5vZGUpOwotICAgICAgICAKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3Vs
YXRpb24oc291cmNlLm1fdHlwZSkpOwotICAgICAgICAgICAgCi0gICAgICAgIHNvdXJjZS5maWx0
ZXIoU3BlY0Z1bmN0aW9uKTsKLSAgICAgICAgZGVzdGluYXRpb24uc2V0KFNwZWNGaW5hbE9iamVj
dCk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNGaW5hbE9iamVjdCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0xMzgxLDM2ICsxMTMzLDMxIEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIE5ld09iamVjdDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0KG5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3Ry
dWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENyZWF0
ZUFjdGl2YXRpb246Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVz
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1l
bnRzOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+
YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAg
ICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgLy8gRG9lcyBub3RoaW5nIHRoYXQgaXMgdXNlci12aXNpYmxlLgogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBp
ZiAoaXNFbXB0eVNwZWN1bGF0aW9uKAogICAgICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9y
KG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBlbHNlCiAgICAgICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0xNDMwLDcg
KzExNzcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToK
LSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8vIFRoaXMgcG90ZW50
aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIGFyZ3VtZW50cyBvYmplY3QgaGFk
IGEgZ2V0dGVyCiAgICAgICAgIC8vIGluc3RhbGxlZCBvbiB0aGUgbGVuZ3RoIHByb3BlcnR5Lgog
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKQEAg
LTE0NDQsNyArMTE5MCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2Nh
cGUgaXRzIGFyZ3VtZW50cywgc28gd2UgY2FuIG9wdGltaXplCiAgICAgICAgIC8vIHRoZSBhcmd1
bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6
ZWQgYnkgdGhlCiAgICAgICAgIC8vIEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAg
ICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICBm
b3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtMTQ1
Myw4ICsxMTk4LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRo
ZSBwcm9wZXJ0eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBk
b24ndCBzcGVjdWxhdGUgYWdhaW5zdCB0aGlzLgogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgLy8gQnV0IHdlIGRvIHNwZWN1bGF0
ZSB0aGF0IHRoZSBpbmRleCBpcyBhbiBpbnRlZ2VyLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgLy8gQW5kIHRoZSByZXN1bHQgaXMg
dW5rbm93bi4KICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTQ2MiwyOSArMTIwNSwyNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgY2FzZSBOZXdGdW5jdGlvbjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhw
cmVzc2lvbjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmZ1bmN0aW9uU3RydWN0dXJlKCkpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRnVu
Y3Rpb24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTZXRDYWxsZWU6CiAg
ICAgY2FzZSBTZXRNeVNjb3BlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldFNjb3BlOiAvLyBGSVhNRTog
V2UgY291bGQgZ2V0IHJpZCBvZiB0aGVzZSBpZiB3ZSBrbm93IHRoYXQgdGhlIEpTRnVuY3Rpb24g
aXMgYSBjb25zdGFudC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjIwMgogICAgIGNhc2UgR2V0TXlTY29wZToKICAgICBjYXNlIFNraXBUb3BTY29wZToKLSAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNDZWxsT3RoZXIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU2tpcFNjb3BlOiB7Ci0g
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBKU1ZhbHVlIGNoaWxkID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIHRy
eVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwo
KSktPm5leHQoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKQEAg
LTE0OTUsMTggKzEyMzMsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgIH0KIAogICAgIGNhc2UgR2V0U2NvcGVSZWdpc3RlcnM6Ci0gICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0
ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1
bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRTY29w
ZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFB1dFNjb3BlZFZhcjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
IGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xNTE4LDggKzEyNTIsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0K
ICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5SWRT
dGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX2dsb2JhbERhdGEsIHN0cnVjdHVyZSwKQEAgLTE1NTUsNyArMTI4Nyw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8g
bW9yZSB0aG9yb3VnaGx5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2MjAwCiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBlbGltaW5hdGUgdGhlc2UgZW50aXJl
bHkgaWYgd2Uga25vdyB0aGUgZXhhY3QgdmFsdWUgdGhhdCBmbG93cyBpbnRvIHRoaXMuCiAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDEKLSAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTU2NCw2
ICsxMjk1LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
IGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAo
aS5lLiBwcm90b3R5cGVzKS4KICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWND
ZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlz
LgogICAgICAgICAvLyBJZiB0aGlzIHN0cnVjdHVyZSBjaGVjayBpcyBhdHRlbXB0aW5nIHRvIHBy
b3ZlIGtub3dsZWRnZSBhbHJlYWR5IGhlbGQgaW4KICAgICAgICAgLy8gdGhlIGZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHNldCB0aGVuIHRoZSBjb25zdGFudCBmb2xkaW5nIHBoYXNlIHNob3VsZAog
ICAgICAgICAvLyB0dXJuIHRoaXMgaW50byBhIHdhdGNocG9pbnQgaW5zdGVhZC4KQEAgLTE1NzEs
OSArMTMwMyw4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgaWYgKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQp
CiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9m
KHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCgKLSAgICAgICAgICAgICF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgIHx8ICFpc0NlbGxTcGVjdWxhdGlvbih2YWx1
ZS5tX3R5cGUpKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5p
c1N1YnNldE9mKHNldCkpCisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAg
ICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTU5MSw3ICsxMzIyLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAvLyBpbmZpbml0eSBvZiBzdHJ1Y3R1cmVz
LgogICAgICAgICBBU1NFUlQodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNl
dE9mKFN0cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmUoKSkpKTsKICAgICAgICAgCi0gICAgICAg
IEFTU0VSVCh2YWx1ZS5pc0NsZWFyKCkgfHwgaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBl
KSk7IC8vIFZhbHVlIGNvdWxkIGJlIGNsZWFyIGlmIHdlJ3ZlIHByb3ZlbiBtdXN0LWV4aXQgZHVl
IHRvIGEgc3BlY3VsYXRpb24gc3RhdGljYWxseSBrbm93biB0byBiZSBiYWQuCiAgICAgICAgIHZh
bHVlLmZpbHRlcihub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMg
PSB0cnVlOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwpAQCAtMTYwMCw3ICsxMzMw
LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJl
OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgaWYgKCFmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAg
ICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5uZXdTdHJ1Y3R1cmUpOwpAQCAtMTYxMCwxNCArMTMzOSwxMSBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgY2Fz
ZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLmNsZWFyKCk7IC8v
IFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q2hlY2tBcnJheTogewogICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNr
ZWQobV9ncmFwaCwgbm9kZSwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsgLy8gTGllcywgYnV0IHRoaXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9u
cyAobGlrZSBHZXRCeVZhbCkgdGhhdCBhbHdheXMgZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQg
aW4gdXMgdHJ5aW5nIHRvIGJlIGNsZXZlciBoZXJlLgpAQCAtMTYzMCw3ICsxMzU2LDYgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmZpbHRlcihTcGVjQXJndW1lbnRzKTsKQEAgLTE2NzMsMTUgKzEzOTgsMTEgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgQXJyYXlpZnk6
IHsKICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgs
IG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1v
ZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQKICAgICAgICAgICAgIHx8IG5vZGUt
PmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6UmFnZUNvbnZlcnQpOwogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkpCi0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAg
Y2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLT5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhh
dFBhc3NGaWx0ZXJpbmcoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwpAQCAt
MTY5NCwzNSArMTQxNSwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNl
dE9mKHNldCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKQotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIHZhbHVlLmZpbHRl
cihzZXQpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOwog
ICAgICAgICBicmVhazsgCiAgICAgfQotICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICB9CisgICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICBmb3JO
b2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAg
CiAgICAgY2FzZSBQdXRCeU9mZnNldDogewotICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsK
LSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKSB7Ci0gICAg
ICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNDZWxsKTsKLSAgICAgICAgfQotICAgICAgICBjYW5FeGl0IHw9ICFpc0NlbGxTcGVjdWxh
dGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGNhbkV4aXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTE3MzEs
NyArMTQzOCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgaWYgKHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0xNzY2LDEyICsxNDcyLDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZh
cjoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZSkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0xNzgxLDM0ICsxNDg1
LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6
Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWND
ZWxsKTsKICAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0
IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhh
dCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgYXBwZWFycyBi
cm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2VzIGFuIHVuY29uZGl0aW9uYWwgY2Vs
bAotICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNzQ3OQotICAgICAgICBpZiAoIShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYg
flNwZWNDZWxsKSAmJiAhKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2Vs
bCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwp
OwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50
b21Mb2NhbDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCiAgICAgY2FzZSBCcmVha3BvaW50OgotICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENh
bGw6CkBAIC0xODM2LDcgKzE1MjksNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAgICBjYXNlIE5vcDoKICAgICBjYXNl
IENvdW50RXhlY3V0aW9uOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgpAQCAtMTg0Nyw2ICsx
NTM5LDIxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBy
ZXR1cm4gbV9pc1ZhbGlkOwogfQogCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5k
ZXhJbkJsb2NrLCBtX2Jsb2NrLT5hdChpbmRleEluQmxvY2spKTsKK30KKworYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICBOb2RlKiBub2Rl
ID0gbV9ibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICBpZiAoIXN0YXJ0RXhlY3V0aW5nKG5v
ZGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBleGVjdXRlRWRnZXMobm9kZSk7
CisgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7Cit9CisKIGlu
bGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2spCiB7CiAgICAgY2xvYmJlckNhcHR1cmVk
VmFycyhjb2RlT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw1
MiBAQCBwdWJsaWM6CiAgICAgLy8gaWYgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBwYXN0IHRo
aXMgbm9kZS4gTm90YWJseSwgaXQgd2lsbCByZXR1cm4gdHJ1ZQogICAgIC8vIGZvciBibG9jayB0
ZXJtaW5hbHMsIHNvIGxvbmcgYXMgdGhvc2UgdGVybWluYWxzIGFyZSBub3QgUmV0dXJuIG9yIHZh
cmlhbnRzCiAgICAgLy8gb2YgVGhyb3cuCi0gICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkKTsKKyAg
ICAvLworICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBiZSBlcXVpdmFsZW50IHRvIGRvaW5n
OgorICAgIC8vCisgICAgLy8gaWYgKHN0YXRlLnN0YXJ0RXhlY3V0aW5nKGluZGV4KSkgeworICAg
IC8vICAgICBzdGF0ZS5leGVjdXRlRWRnZXMoaW5kZXgpOworICAgIC8vICAgICByZXN1bHQgPSBz
dGF0ZS5leGVjdXRlRWZmZWN0cyhpbmRleCk7CisgICAgLy8gfSBlbHNlCisgICAgLy8gICAgIHJl
c3VsdCA9IHRydWU7CisgICAgYm9vbCBleGVjdXRlKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7Cisg
ICAgCisgICAgLy8gSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbiBvZiB0aGUgbm9kZS4g
SXQgcmVzZXRzIGFueSBzdGF0ZSBpbiB0aGUgbm9kZSwKKyAgICAvLyB0aGF0IGlzIHByb2dyZXNz
aXZlbHkgYnVpbHQgdXAgYnkgZXhlY3V0ZUVkZ2VzKCkgYW5kIGV4ZWN1dGVFZmZlY3RzKCkuIElu
CisgICAgLy8gcGFydGljdWxhciwgdGhpcyByZXNldHMgY2FuRXhpdCgpLCBzbyBpZiB5b3Ugd2Fu
dCB0byAia25vdyIgYmV0d2VlbiBjYWxscyBvZgorICAgIC8vIHN0YXJ0RXhlY3V0aW5nKCkgYW5k
IGV4ZWN1dGVFZGdlcygpL0VmZmVjdHMoKSB3aGV0aGVyIHRoZSBsYXN0IHJ1biBvZiB0aGUKKyAg
ICAvLyBhbmFseXNpcyBjb25jbHVkZWQgdGhhdCB0aGUgbm9kZSBjYW4gZXhpdCwgeW91IHNob3Vs
ZCBwcm9iYWJseSBzZXQgdGhhdAorICAgIC8vIGluZm9ybWF0aW9uIGFzaWRlIHByaW9yIHRvIGNh
bGxpbmcgc3RhcnRFeGVjdXRpbmcoKS4KKyAgICBib29sIHN0YXJ0RXhlY3V0aW5nKE5vZGUqKTsK
KyAgICBib29sIHN0YXJ0RXhlY3V0aW5nKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgCisg
ICAgLy8gQWJzdHJhY3RseSBleGVjdXRlIHRoZSBlZGdlcyBvZiB0aGUgZ2l2ZW4gbm9kZS4gVGhp
cyBydW5zIGZpbHRlckVkZ2VCeVVzZSgpCisgICAgLy8gb24gYWxsIGVkZ2VzIG9mIHRoZSBub2Rl
LiBZb3UgY2FuIHNraXAgdGhpcyBzdGVwLCBpZiB5b3UgaGF2ZSBhbHJlYWR5IHVzZWQKKyAgICAv
LyBmaWx0ZXJFZGdlQnlVc2UoKSAob3Igc29tZSBlcXVpdmFsZW50KSBvbiBlYWNoIGVkZ2UuCisg
ICAgdm9pZCBleGVjdXRlRWRnZXMoTm9kZSopOworICAgIHZvaWQgZXhlY3V0ZUVkZ2VzKHVuc2ln
bmVkIGluZGV4SW5CbG9jayk7CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlckVk
Z2VCeVVzZShOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEtub3du
SW50MzJVc2U6CisgICAgICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIGNhc2UgS25v
d25DZWxsVXNlOgorICAgICAgICAgICAgQVNTRVJUKCEoZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+
dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZiAvLyAh
QVNTRVJUX0RJU0FCTEVECisgICAgICAgIAorICAgICAgICBmaWx0ZXJCeVR5cGUobm9kZSwgZWRn
ZS5ub2RlKCksIHR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKTsKKyAgICB9CisgICAgCisg
ICAgLy8gQWJzdHJhY3RseSBleGVjdXRlIHRoZSBlZmZlY3RzIG9mIHRoZSBnaXZlbiBub2RlLiBU
aGlzIGNoYW5nZXMgdGhlIGFic3RyYWN0CisgICAgLy8gc3RhdGUgYXNzdW1pbmcgdGhhdCBlZGdl
cyBoYXZlIGFscmVhZHkgYmVlbiBmaWx0ZXJlZC4KKyAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBp
bmRleEluQmxvY2ssIE5vZGUqKTsKICAgICAKICAgICAvLyBEaWQgdGhlIGxhc3QgZXhlY3V0ZWQg
bm9kZSBjbG9iYmVyIHRoZSB3b3JsZD8KICAgICBib29sIGRpZENsb2JiZXIoKSBjb25zdCB7IHJl
dHVybiBtX2RpZENsb2JiZXI7IH0KQEAgLTE5MSw1MCArMjM2LDYgQEAgcHJpdmF0ZToKICAgICAK
ICAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVl
JiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlKiBkZXN0aW5hdGlvbk5v
ZGUsIE5vZGUqIHNvdXJjZU5vZGUpOwogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlSW50MzJVbmFy
eShOb2RlKiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQotICAgIHsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZvcmNlQ2FuRXhpdCB8fCAhaXNJbnQzMlNwZWN1bGF0aW9u
KGNoaWxkVmFsdWUubV90eXBlKSk7Ci0gICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFNwZWNJbnQz
Mik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyVW5hcnkoTm9kZSogbm9k
ZSkKLSAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNOdW1iZXJTcGVjdWxh
dGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwotICAgICAgICBjaGlsZFZhbHVlLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuVW5hcnkoTm9k
ZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNCb29sZWFu
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKLSAgICAgICAgY2hpbGRWYWx1ZS5maWx0
ZXIoU3BlY0Jvb2xlYW4pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmlu
YXJ5KE5vZGUqIG5vZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCi0gICAgewotICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9kZS0+Y2hpbGQy
KCkpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgZm9yY2VDYW5FeGl0
Ci0gICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9uKGNoaWxkVmFsdWUxLm1fdHlwZSkK
LSAgICAgICAgICAgIHx8ICFpc0ludDMyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7
Ci0gICAgICAgIGNoaWxkVmFsdWUxLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICBjaGlsZFZh
bHVlMi5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVO
dW1iZXJCaW5hcnkoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNo
aWxkVmFsdWUxID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUmIGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIG5vZGUt
PnNldENhbkV4aXQoCi0gICAgICAgICAgICAhaXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVl
MS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhaXNOdW1iZXJTcGVjdWxhdGlvbihjaGlsZFZhbHVl
Mi5tX3R5cGUpKTsKLSAgICAgICAgY2hpbGRWYWx1ZTEuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAg
ICAgICBjaGlsZFZhbHVlMi5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgfQotICAgIAogICAgIGVu
dW0gQm9vbGVhblJlc3VsdCB7CiAgICAgICAgIFVua25vd25Cb29sZWFuUmVzdWx0LAogICAgICAg
ICBEZWZpbml0ZWx5RmFsc2UsCkBAIC0yNTksNiArMjYwLDE3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVy
QnlUeXBlKE5vZGUqIG5vZGUsIE5vZGUqIGNoaWxkLCBTcGVjdWxhdGVkVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKGNoaWxkKTsKKyAgICAg
ICAgaWYgKHZhbHVlLm1fdHlwZSAmIH50eXBlKQorICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dCh0cnVlKTsKKyAgICAgICAgdmFsdWUuZmlsdGVyKHR5cGUpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHZlcmlmeUVkZ2UoTm9kZSosIEVkZ2UpOworICAgIHZvaWQgdmVyaWZ5RWRnZXMoTm9kZSop
OworICAgIAogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgR3JhcGgmIG1fZ3JhcGg7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw2ICsyMzQsOSBAQCBzdHJ1Y3Qg
QWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG9wdGltaXpl
ZCBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIG1fdHlwZSBub3QKKyAgICAgICAgLy8gaGF2aW5nIHN0
cnVjdHVyZXMsIGFycmF5IG1vZGVzLCBvciBhIHNwZWNpZmljIHZhbHVlLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjYzCiAgICAgICAgIG1f
dHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CiAgICAgICAgIG1fYXJy
YXlNb2RlcyAmPSBvdGhlci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsKICAgICAgICAgbV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCShyZXZpc2lvbiAxNDM0MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsOSArNDcsNiBAQCBwdWJsaWM6CiAgICAgQWRqYWNlbmN5TGlzdCgpIHsgfQogICAg
IAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAg
ICAgICAgOiBtX2tpbmQoa2luZCkKLSNlbmRpZgogICAgIHsKICAgICAgICAgaWYgKGtpbmQgPT0g
VmFyaWFibGUpIHsKICAgICAgICAgICAgIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZCA9IFVJTlRf
TUFYOwpAQCAtNTcsMTkgKzU0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIs
IE5vZGUqIGNoaWxkMykKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKEZp
eGVkKQotI2VuZGlmCisgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIEVkZ2UgY2hpbGQxLCBF
ZGdlIGNoaWxkMiwgRWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGtp
bmQsIGtpbmQgPT0gRml4ZWQpOwogICAgICAgICBpbml0aWFsaXplKGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDMpOwogICAgIH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCwgdW5zaWdu
ZWQgZmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCi0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgICAgICA6IG1fa2luZChWYXJpYWJsZSkKLSNlbmRpZgogICAgIHsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChraW5kLCBraW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgc2V0Rmlyc3RDaGls
ZChmaXJzdENoaWxkKTsKQEAgLTc5LDIxICs3MCwxOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgRWRn
ZSYgY2hpbGQodW5zaWduZWQgaSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgU2l6
ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOwogICAgICAgICByZXR1cm4gbV93
b3Jkc1tpXTsKICAgICB9ICAgIAogICAgIAogICAgIEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpCiAg
ICAgewogICAgICAgICBBU1NFUlQoaSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09
IEZpeGVkKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfQogICAgIAogICAgIHZv
aWQgc2V0Q2hpbGQodW5zaWduZWQgaSwgRWRnZSBub2RlVXNlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGkgPCBTaXplKTsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAg
IG1fd29yZHNbaV0gPSBub2RlVXNlOwogICAgIH0KICAgICAKQEAgLTEyNSw5ICsxMTMsNiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdm9pZCByZXNldCgpCiAgICAgewotI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICAgICAgbV9raW5kID0gRml4ZWQ7Ci0jZW5kaWYKICAgICAgICAgaW5pdGlhbGl6ZSgp
OwogICAgIH0KICAgICAKQEAgLTE0MiwzNCArMTI3LDI0IEBAIHB1YmxpYzoKIAogICAgIHVuc2ln
bmVkIGZpcnN0Q2hpbGQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBW
YXJpYWJsZSk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQ7CiAgICAg
fQogICAgIHZvaWQgc2V0Rmlyc3RDaGlsZCh1bnNpZ25lZCBmaXJzdENoaWxkKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIG1fd29yZHNbMF0ubV9l
bmNvZGVkV29yZCA9IGZpcnN0Q2hpbGQ7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIG51bUNo
aWxkcmVuKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUp
OwogICAgICAgICByZXR1cm4gbV93b3Jkc1sxXS5tX2VuY29kZWRXb3JkOwogICAgIH0KICAgICB2
b2lkIHNldE51bUNoaWxkcmVuKHVuc2lnbmVkIG51bUNoaWxkcmVuKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CiAgICAgICAgIG1fd29yZHNbMV0ubV9lbmNvZGVk
V29yZCA9IG51bUNoaWxkcmVuOwogICAgIH0KICAgICAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0jZW5kaWYKIHByaXZhdGU6
CiAgICAgRWRnZSBtX3dvcmRzW1NpemVdOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBLaW5k
IG1fa2luZDsKLSNlbmRpZgogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAxNDM0MjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAv
LyAgIGFueXRoaW5nLiBZb3UgY2FuIGp1c3QgY2FsbCBmcmVlQWxsKCkgaW5zdGVhZC4KIC8vIC0g
WW91IGNhbGwgZnJlZSgpIG9uIGFsbCBUJ3MgdGhhdCB5b3UgYWxsb2NhdGVkLCBhbmQgbmV2ZXIg
dXNlIGZyZWVBbGwoKS4KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KKy8vIGZvcmNlZENlbGxTaXpl
OiBzZXQgdGhpcyB0byAwIGlmIHlvdSdyZSBoYXBweSB3aXRoIHRoZSBkZWZhdWx0IGFsaWdubWVu
dCwgb3Igc2V0IGl0CisvLyB0byBhIG5vbi16ZXJvIHZhbHVlIGlmIHlvdSB3YW50IHRvIGZvcmNp
Ymx5IGFsaWduIHRoZSBhbGxvY2F0aW9ucyB0byBhIGNlcnRhaW4KKy8vIHZhbHVlLiBXaGVuIHlv
dSBkbyB0aGlzLCBBbGxvY2F0b3Igd2lsbCBBU1NFUlQgdGhhdCBmb3JjZWRDZWxsQWxpZ25tZW50
ID49IHNpemVvZihUKS4KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2Vs
bEFsaWdubWVudD4KIGNsYXNzIEFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgQWxsb2NhdG9yKCk7
CkBAIC02MywxMyArNjcsMjQgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBidW1wQWxsb2NhdGUoKTsK
ICAgICB2b2lkKiBmcmVlTGlzdEFsbG9jYXRlKCk7CiAgICAgdm9pZCogYWxsb2NhdGVTbG93KCk7
Ci0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGNlbGxTaXplKCkKKyAgICB7CisgICAgICAgIGlm
ICghZm9yY2VkQ2VsbEFsaWdubWVudCkKKyAgICAgICAgICAgIHJldHVybiBzaXplb2YoVCk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoZm9yY2VkQ2VsbEFsaWdubWVudCA+PSBzaXplb2YoVCkp
OworICAgICAgICByZXR1cm4gZm9yY2VkQ2VsbEFsaWdubWVudDsKKyAgICB9CisgICAgCiAgICAg
c3RydWN0IFJlZ2lvbiB7CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIDY0
ICogS0I7IH0KLSAgICAgICAgc3RhdGljIHNpemVfdCBoZWFkZXJTaXplKCkgeyByZXR1cm4gc3Rk
OjptYXgoc2l6ZW9mKFJlZ2lvbiksIHNpemVvZihUKSk7IH0KLSAgICAgICAgc3RhdGljIHVuc2ln
bmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyByZXR1cm4gKHNpemUoKSAtIGhlYWRlclNp
emUoKSkgLyBzaXplb2YoVCk7IH0KLSAgICAgICAgVCogZGF0YSgpIHsgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxUKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIGhlYWRlclNpemUoKSk7IH0KLSAg
ICAgICAgYm9vbCBpc0luVGhpc1JlZ2lvbihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocG9pbnRlciAtIGRhdGEoKSkgPCBudW1iZXJPZlRoaW5nc1BlclJl
Z2lvbigpOyB9CisgICAgICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyU2l6ZSgpIHsgcmV0dXJuIHN0
ZDo6bWF4KHNpemVvZihSZWdpb24pLCBjZWxsU2l6ZSgpKTsgfQorICAgICAgICBzdGF0aWMgdW5z
aWduZWQgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKSB7IHJldHVybiAoc2l6ZSgpIC0gaGVhZGVy
U2l6ZSgpKSAvIGNlbGxTaXplKCk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBwYXlsb2FkU2l6
ZSgpIHsgcmV0dXJuIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgKiBjZWxsU2l6ZSgpOyB9Cisg
ICAgICAgIGNoYXIqIHBheWxvYWRCZWdpbigpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4o
dGhpcykgKyBoZWFkZXJTaXplKCk7IH0KKyAgICAgICAgY2hhciogcGF5bG9hZEVuZCgpIHsgcmV0
dXJuIHBheWxvYWRCZWdpbigpICsgcGF5bG9hZFNpemUoKTsgfQorICAgICAgICBib29sIGlzSW5U
aGlzUmVnaW9uKGNvbnN0IFQqIHBvaW50ZXIpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4o
Yml0d2lzZV9jYXN0PGNoYXIqPihwb2ludGVyKSAtIHBheWxvYWRCZWdpbigpKSA8IHBheWxvYWRT
aXplKCk7IH0KICAgICAgICAgc3RhdGljIFJlZ2lvbiogcmVnaW9uRm9yKGNvbnN0IFQqIHBvaW50
ZXIpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxSZWdpb24qPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pihwb2ludGVyKSAmIH4oc2l6ZSgpIC0gMSkpOyB9CiAgICAgICAgIAogICAgICAgICBQYWdlQWxs
b2NhdGlvbkFsaWduZWQgbV9hbGxvY2F0aW9uOwpAQCAtODIsMjYgKzk3LDI2IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgUmVnaW9uKiBtX3JlZ2lvbkhlYWQ7CiAgICAgdm9pZCoqIG1fZnJlZUxpc3RI
ZWFkOwotICAgIFQqIG1fYnVtcEVuZDsKLSAgICB1bnNpZ25lZCBtX2J1bXBSZW1haW5pbmc7Cisg
ICAgY2hhciogbV9idW1wRW5kOworICAgIHNpemVfdCBtX2J1bXBSZW1haW5pbmc7CiB9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIEFsbG9jYXRvcjxUPjo6QWxsb2NhdG9yKCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitpbmxpbmUg
QWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpBbGxvY2F0b3IoKQogICAgIDogbV9y
ZWdpb25IZWFkKDApCiAgICAgLCBtX2ZyZWVMaXN0SGVhZCgwKQogICAgICwgbV9idW1wUmVtYWlu
aW5nKDApCiB7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgQWxsb2NhdG9yPFQ+
Ojp+QWxsb2NhdG9yKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxB
bGlnbm1lbnQ+CitpbmxpbmUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+Ojp+QWxs
b2NhdG9yKCkKIHsKICAgICByZXNldCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxX
QVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYXRlKCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBTFdBWVNfSU5MSU5FIHZvaWQq
IEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6YWxsb2NhdGUoKQogewogICAgIHZv
aWQqIHJlc3VsdCA9IGJ1bXBBbGxvY2F0ZSgpOwogICAgIGlmIChMSUtFTFkoISFyZXN1bHQpKQpA
QCAtMTA5LDggKzEyNCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjphbGxv
Y2EKICAgICByZXR1cm4gZnJlZUxpc3RBbGxvY2F0ZSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OmZyZWUoVCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZv
cmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlKFQqIG9iamVjdCkKIHsKICAgICBvYmplY3QtPn5UKCk7
CiAgICAgCkBAIC0xMTksOCArMTM0LDggQEAgdm9pZCBBbGxvY2F0b3I8VD46OmZyZWUoVCogb2Jq
ZWN0KQogICAgIG1fZnJlZUxpc3RIZWFkID0gY2VsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlQWxsKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVu
c2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxs
QWxpZ25tZW50Pjo6ZnJlZUFsbCgpCiB7CiAgICAgaWYgKCFtX3JlZ2lvbkhlYWQpIHsKICAgICAg
ICAgQVNTRVJUKCFtX2J1bXBSZW1haW5pbmcpOwpAQCAtMTQyLDggKzE1Nyw4IEBAIHZvaWQgQWxs
b2NhdG9yPFQ+OjpmcmVlQWxsKCkKICAgICBzdGFydEJ1bXBpbmdJbihtX3JlZ2lvbkhlYWQpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8VD46OnJlc2V0KCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkIEFs
bG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6cmVzZXQoKQogewogICAgIGZyZWVSZWdp
b25zU3RhcnRpbmdBdChtX3JlZ2lvbkhlYWQpOwogICAgIApAQCAtMTUyLDM4ICsxNjcsMzggQEAg
dm9pZCBBbGxvY2F0b3I8VD46OnJlc2V0KCkKICAgICBtX2J1bXBSZW1haW5pbmcgPSAwOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdW5zaWduZWQgQWxsb2NhdG9yPFQ+OjppbmRleE9mKGNv
bnN0IFQqIG9iamVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxB
bGlnbm1lbnQ+Cit1bnNpZ25lZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46Omlu
ZGV4T2YoY29uc3QgVCogb2JqZWN0KQogewogICAgIHVuc2lnbmVkIGJhc2VJbmRleCA9IDA7CiAg
ICAgZm9yIChSZWdpb24qIHJlZ2lvbiA9IG1fcmVnaW9uSGVhZDsgcmVnaW9uOyByZWdpb24gPSBy
ZWdpb24tPm1fbmV4dCkgewogICAgICAgICBpZiAocmVnaW9uLT5pc0luVGhpc1JlZ2lvbihvYmpl
Y3QpKQotICAgICAgICAgICAgcmV0dXJuIGJhc2VJbmRleCArIChvYmplY3QgLSByZWdpb24tPmRh
dGEoKSk7CisgICAgICAgICAgICByZXR1cm4gYmFzZUluZGV4ICsgKGJpdHdpc2VfY2FzdDxjaGFy
Kj4ob2JqZWN0KSAtIHJlZ2lvbi0+cGF5bG9hZEJlZ2luKCkpIC8gY2VsbFNpemUoKTsKICAgICAg
ICAgYmFzZUluZGV4ICs9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKICAgICB9
CiAgICAgQ1JBU0goKTsKICAgICByZXR1cm4gMDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LUFsbG9jYXRvcjxUPiogQWxsb2NhdG9yPFQ+OjphbGxvY2F0b3JPZihjb25zdCBUKiBvYmplY3Qp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgorQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+KiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFs
aWdubWVudD46OmFsbG9jYXRvck9mKGNvbnN0IFQqIG9iamVjdCkKIHsKICAgICByZXR1cm4gUmVn
aW9uOjpyZWdpb25Gb3Iob2JqZWN0KS0+bV9hbGxvY2F0b3I7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxUPjo6YnVtcEFsbG9jYXRlKCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CitBTFdB
WVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6YnVtcEFs
bG9jYXRlKCkKIHsKLSAgICBpZiAodW5zaWduZWQgcmVtYWluaW5nID0gbV9idW1wUmVtYWluaW5n
KSB7Ci0gICAgICAgIHJlbWFpbmluZy0tOworICAgIGlmIChzaXplX3QgcmVtYWluaW5nID0gbV9i
dW1wUmVtYWluaW5nKSB7CisgICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZSgpOwogICAgICAg
ICBtX2J1bXBSZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiBtX2J1bXBFbmQg
LSAocmVtYWluaW5nICsgMSk7CisgICAgICAgIHJldHVybiBtX2J1bXBFbmQgLSAocmVtYWluaW5n
ICsgY2VsbFNpemUoKSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotdm9pZCogQWxsb2NhdG9yPFQ+OjpmcmVlTGlzdEFsbG9jYXRlKCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkKiBBbGxvY2F0
b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWVMaXN0QWxsb2NhdGUoKQogewogICAgIHZv
aWQqKiByZXN1bHQgPSBtX2ZyZWVMaXN0SGVhZDsKICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkp
CkBAIC0xOTIsOCArMjA3LDggQEAgdm9pZCogQWxsb2NhdG9yPFQ+OjpmcmVlTGlzdEFsbG9jYXRl
KCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCog
QWxsb2NhdG9yPFQ+OjphbGxvY2F0ZVNsb3coKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgZm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQqIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxp
Z25tZW50Pjo6YWxsb2NhdGVTbG93KCkKIHsKICAgICBBU1NFUlQoIW1fZnJlZUxpc3RIZWFkKTsK
ICAgICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CkBAIC0yMTYsOCArMjMxLDggQEAgdm9pZCog
QWxsb2NhdG9yPFQ+OjphbGxvY2F0ZVNsb3coKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZVJlZ2lvbnNTdGFydGlu
Z0F0KHR5cGVuYW1lIEFsbG9jYXRvcjxUPjo6UmVnaW9uKiByZWdpb24pCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwg
Zm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdCh0eXBlbmFtZSBBbGxv
Y2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OlJlZ2lvbiogcmVnaW9uKQogewogICAgIHdo
aWxlIChyZWdpb24pIHsKICAgICAgICAgUmVnaW9uKiBuZXh0UmVnaW9uID0gcmVnaW9uLT5tX25l
eHQ7CkBAIC0yMjYsMTEgKzI0MSwxMSBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZVJlZ2lvbnNT
dGFydGluZ0F0CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0
b3I8VD46OnN0YXJ0QnVtcGluZ0luKHR5cGVuYW1lIEFsbG9jYXRvcjxUPjo6UmVnaW9uKiByZWdp
b24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgor
dm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OnN0YXJ0QnVtcGluZ0luKHR5
cGVuYW1lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6UmVnaW9uKiByZWdpb24p
CiB7Ci0gICAgbV9idW1wRW5kID0gcmVnaW9uLT5kYXRhKCkgKyBSZWdpb246Om51bWJlck9mVGhp
bmdzUGVyUmVnaW9uKCk7Ci0gICAgbV9idW1wUmVtYWluaW5nID0gUmVnaW9uOjpudW1iZXJPZlRo
aW5nc1BlclJlZ2lvbigpOworICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+cGF5bG9hZEVuZCgpOwor
ICAgIG1fYnVtcFJlbWFpbmluZyA9IFJlZ2lvbjo6cGF5bG9hZFNpemUoKTsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OTgsNiArNjk4LDE4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBt
X2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwKKyAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBFZGdlKGNo
aWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKKyAgICAgICAgQVNTRVJUKG9wICE9
IFBoaSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKKworICAgICAg
ICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCisgICAgICAgICAgICBt
X2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIEVkZ2UgY2hpbGQxLCBFZGdlIGNo
aWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCisgICAgeworICAgICAgICBOb2Rl
KiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKICAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdp
bigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7
CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKQEAgLTcxMCw3ICs3MjIs
NyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKAogICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
Ci0gICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMyk7CisgICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywg
RWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIGlmIChv
cCA9PSBQaGkpCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+cGhpcy5hcHBlbmQocmVzdWx0
KTsKICAgICAgICAgZWxzZQpAQCAtNzI0LDcgKzczNiw3IEBAIHByaXZhdGU6CiAgICAgewogICAg
ICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAgICBEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgIG9wLCBjdXJyZW50
Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAg
ICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwgRWRnZShjaGls
ZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQ
aGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7CiAKQEAgLTE0NjUs
NyArMTQ3Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAg
ICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsgLy8gTWF0aC5t
aW4oeCkKICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMSkpOwotICAgICAgICBhZGRUb0dyYXBoKENoZWNrTnVtYmVyLCByZXN1bHQp
OworICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIEVkZ2UocmVzdWx0LCBOdW1iZXJVc2UpKTsK
ICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTY5
LDcgKzk2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYWNjZXNzaW5nIGFyZ3Vt
ZW50cyB0aGVuIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIGxvY2Fscy4KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkFyZ3Vt
ZW50cykKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMTAwMiw2ICsxMDAy
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNo
aWxkKGkpOwogICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgaWYgKGVkZ2UudXNlS2luZCgpICE9IFVudHlwZWRVc2UpCisgICAgICAg
ICAgICAgICAgY29udGludWU7IC8vIEtlZXAgdGhlIHR5cGUgY2hlY2suCiAgICAgICAgICAgICBp
ZiAoZWRnZS0+ZmxhZ3MoKSAmIE5vZGVSZWxldmFudFRvT1NSKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCkBAIC0xMDE0LDE4ICsxMDE2LDExIEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZW51bSBQcmVkaWN0aW9uSGFuZGxpbmdNb2RlIHsg
UmVxdWlyZVNhbWVQcmVkaWN0aW9uLCBBbGxvd1ByZWRpY3Rpb25NaXNtYXRjaCB9OwotICAgIGJv
b2wgc2V0UmVwbGFjZW1lbnQoTm9kZSogcmVwbGFjZW1lbnQsIFByZWRpY3Rpb25IYW5kbGluZ01v
ZGUgcHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9IFJlcXVpcmVTYW1lUHJlZGljdGlvbikKKyAgICBi
b29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50KQogICAgIHsKICAgICAgICAgaWYg
KCFyZXBsYWNlbWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAg
ICAgIC8vIEJlIHNhZmUuIERvbid0IHRyeSB0byBwZXJmb3JtIHJlcGxhY2VtZW50cyBpZiB0aGUg
cHJlZGljdGlvbnMgZG9uJ3QKLSAgICAgICAgLy8gYWdyZWUuCi0gICAgICAgIGlmIChwcmVkaWN0
aW9uSGFuZGxpbmdNb2RlID09IFJlcXVpcmVTYW1lUHJlZGljdGlvbgotICAgICAgICAgICAgJiYg
bV9jdXJyZW50Tm9kZS0+cHJlZGljdGlvbigpICE9IHJlcGxhY2VtZW50LT5wcmVkaWN0aW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIiAgIFJlcGxhY2luZyBA
JXUgLT4gQCV1IiwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgcmVwbGFjZW1lbnQtPmluZGV4KCkp
OwogI2VuZGlmCkBAIC0xMjMwLDcgKzEyMjUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEpT
Q29uc3RhbnQ6CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHN0cmFuZ2UsIGJ1dCBuZWNlc3Nhcnku
IFNvbWUgcGhhc2VzIHdpbGwgY29udmVydCBub2RlcyB0byBjb25zdGFudHMsCiAgICAgICAgICAg
ICAvLyB3aGljaCBtYXkgcmVzdWx0IGluIGR1cGxpY2F0ZWQgY29uc3RhbnRzLiBXZSB1c2UgQ1NF
IHRvIGNsZWFuIHRoaXMgdXAuCi0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjb25zdGFudENT
RShub2RlKSwgQWxsb3dQcmVkaWN0aW9uTWlzbWF0Y2gpOworICAgICAgICAgICAgc2V0UmVwbGFj
ZW1lbnQoY29uc3RhbnRDU0Uobm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTIgKzgzLDYgQEAgc3Ry
dWN0IE5vZGVQb2ludGVyVHJhaXRzIHsKICAgICBzdGF0aWMgdm9pZCBkdW1wKE5vZGUqIHZhbHVl
LCBQcmludFN0cmVhbSYgb3V0KTsKIH07CiAKLWVudW0gVXNlS2luZCB7Ci0gICAgVW50eXBlZFVz
ZSwKLSAgICBEb3VibGVVc2UsCi0gICAgTGFzdFVzZUtpbmQgLy8gTXVzdCBhbHdheXMgYmUgdGhl
IGxhc3QgZW50cnkgaW4gdGhlIGVudW0sIGFzIGl0IGlzIHVzZWQgdG8gZGVub3RlIHRoZSBudW1i
ZXIgb2YgZW51bSBlbGVtZW50cy4KLX07Ci0KIC8vIFVzZSBSZWZDaGlsZHJlbiBpZiB0aGUgY2hp
bGQgcmVmIGNvdW50cyBoYXZlbid0IGFscmVhZHkgYmVlbiBhZGp1c3RlZCB1c2luZwogLy8gb3Ro
ZXIgbWVhbnMgYW5kIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6CiAvLyAtIFRoZSBu
b2RlIHlvdSdyZSBjcmVhdGluZyBpcyBNdXN0R2VuZXJhdGUuCkBAIC0xMDYsMTkgKzEwMCw2IEBA
IGVudW0gUmVmTm9kZU1vZGUgewogICAgIERvbnRSZWZOb2RlCiB9OwogCi1pbmxpbmUgY29uc3Qg
Y2hhciogdXNlS2luZFRvU3RyaW5nKFVzZUtpbmQgdXNlS2luZCkKLXsKLSAgICBzd2l0Y2ggKHVz
ZUtpbmQpIHsKLSAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICBj
YXNlIERvdWJsZVVzZToKLSAgICAgICAgcmV0dXJuICJkIjsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KIGlubGluZSBib29sIGlzQVJNdjdzKCkKIHsKICNpZiBDUFUoQVBQTEVfQVJNVjdTKQpA
QCAtMjM2LDYgKzIxNyw4IEBAIGVudW0gVW5pZmljYXRpb25TdGF0ZSB7CiAgICAgR2xvYmFsbHlV
bmlmaWVkCiB9OwogCitlbnVtIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgeyBBdXRvbWF0aWNPcGVy
YW5kU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB9OworCiBlbnVtIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIHsgRm9yd2FyZFNwZWN1bGF0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9u
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEwICsxMDMsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgp
OwotICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSkK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIENhdGNoIHRoZSBmYWN0IHRoYXQgd2Ug
bWF5IGZpbHRlciBvbiBjZWxsLgogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhQaGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE0LDggKzExMywxMSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZVZh
bHVlID0gdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZTsKICAgICAgICAgICAgICAgICBp
ZiAoc3RydWN0dXJlVmFsdWUuaXNTdWJzZXRPZihzZXQpCiAgICAgICAgICAgICAgICAgICAgICYm
IHN0cnVjdHVyZVZhbHVlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVZhbHVl
LnNpbmdsZXRvbigpKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlVmFsdWUuc2lu
Z2xldG9uKCk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxv
Y2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE0OSwxMCArMTUxLDExIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWRGbHVz
aDogewogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVP
cmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIo
KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0
aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmIChjaGlsZEVkZ2Uu
dXNlS2luZCgpICE9IENlbGxVc2UpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CkBAIC0xNjQsOCArMTY3LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhKCks
IHN0cnVjdHVyZSwgY29kZUJsb2NrKCktPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkp
CisgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGFuZGxlIHByb3RvdHlwZSBjYXNlcy4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDM4NgogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5zdHJ1Y3R1cmVT
ZXQoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5jaGFpbigp
LmlzRW1wdHkoKSk7CkBAIC0xODEsMTggKzE4NywyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2Rl
T3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1
Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5m
b3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5
U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9y
YWdlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsKICAg
ICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKLSAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGQ7CisgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKICAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNv
ZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQobV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlKTsKQEAgLTIwNyw5ICsy
MTksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgICAg
IGNhc2UgUHV0QnlJZERpcmVjdDogewogICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBu
b2RlLT5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5u
b2RlKCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG5vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBB
U1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKKyAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShj
aGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0
dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzOCw5ICsyNTMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUuZm9yTm9kZShjaGlsZCku
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2Rl
T3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3Bl
Y05vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGls
ZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0
YSA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkg
ewogICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uRGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoCkBAIC0yNjQsMzggKzI4NSwzOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgTm9k
ZSogcHJvcGVydHlTdG9yYWdlOworICAgICAgICAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdl
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChz
dGF0dXMub2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsgLy8g
VGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUgcHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0
byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBjaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hp
bGRFZGdlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFj
ZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRC
dXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUs
IEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5v
ZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcElu
Zm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
T3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3Rh
dHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVkZ2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvZGVPcmlnaW4sIGNoaWxkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24o
KSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9Q
dXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0
b3JhZ2UpOwpAQCAtMzQwLDcgKzM2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHBoYW50b20gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b21Mb2NhbCwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgcGhpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKHBo
aSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IHBoYW50b207CiAgICAgICAgICAgICAgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhh
bnRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMzkxLDEzICs0MTIsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsCi0gICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgd2Vha0NvbnN0YW50
KTsKKyAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkp
LCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tT
dHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQoY2VsbC0+c3RydWN0dXJlKCkpKSwgd2Vha0NvbnN0YW50KTsKKyAgICAgICAgICAg
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCBFZGdl
KHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIHRoZSBDRkEgbWF5IHJlYWNoIGNvbmNsdXNpb25zIGFib3V0IGNvbnN0
YW50cyBiYXNlZCBvbiBpdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDggKzE0NCw2IEBAIGlubGluZSBib29s
IGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgaWYgKCFjaGFuZ2VkKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICBkZmcucmVzZXRFeGl0U3RhdGVzKCk7
Ci0gICAgICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDkgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIEVkZ2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKLSAgICBvdXQucHJpbnQodXNlS2luZFRvU3RyaW5nKHVzZUtpbmQoKSksIG5vZGUoKSk7
CisgICAgaWYgKHVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQorICAgICAgICBvdXQucHJpbnQodXNl
S2luZCgpLCAiOiIpOworICAgIG91dC5wcmludChub2RlKCkpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNp
b24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC02MiwxMiArNjMsMTggQEAgcHVibGljOgogICAgICAg
ICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2luZCgpKTsKICAgICB9CiAgICAg
Ci0gICAgVXNlS2luZCB1c2VLaW5kKCkgY29uc3QKKyAgICBVc2VLaW5kIHVzZUtpbmRVbmNoZWNr
ZWQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGUoKSk7CiAgICAgICAgIHVuc2ln
bmVkIG1hc2tlZCA9IG1fZW5jb2RlZFdvcmQgJiAoKCgxIDw8IHNoaWZ0KCkpIC0gMSkpOwogICAg
ICAgICBBU1NFUlQobWFza2VkIDwgTGFzdFVzZUtpbmQpOwotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VXNlS2luZD4obWFza2VkKTsKKyAgICAgICAgVXNlS2luZCByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxVc2VLaW5kPihtYXNrZWQpOworICAgICAgICBBU1NFUlQobm9kZSgpIHx8IHJlc3VsdCA9
PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgVXNlS2lu
ZCB1c2VLaW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworICAgICAg
ICByZXR1cm4gdXNlS2luZFVuY2hlY2tlZCgpOwogICAgIH0KICAgICB2b2lkIHNldFVzZUtpbmQo
VXNlS2luZCB1c2VLaW5kKQogICAgIHsKQEAgLTk2LDcgKzEwMyw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCi0gICAgc3RhdGljIHVp
bnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gMjsgfQorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgp
IHsgcmV0dXJuIDQ7IH0KICAgICAKICAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUq
IG5vZGUsIFVzZUtpbmQgdXNlS2luZCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDkgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBCZWZvcmVGaXhwb2ludCk7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAogICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KQogICAgICAgICAgICAgZml4dXBCbG9jayht
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC03Niw1MCArNzksMjYyIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAg
IHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBHZXRCeUlkOiB7Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkKKyAgICAgICAgY2FzZSBT
ZXRMb2NhbDogeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
dmFyaWFibGUtPmlzQ2FwdHVyZWQoKQorICAgICAgICAgICAgICAgIHx8IG1fZ3JhcGguaXNDcmVh
dGVkVGhpc0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24obm9k
ZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91
YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxk
MSgpLCBOdW1iZXJVc2UsIEZvcndhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+aWRlbnRp
Zmllck51bWJlcigpKSAhPSBnbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0ZWRUeXBlID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICBj
YXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6
CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6IHsKKyAg
ICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4SW50
RWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25JbnQzMlVzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjog
eworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50
MzI6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQz
MlVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSA9IAotICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZSgKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMp
OwotICAgICAgICAgICAgaWYgKGFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgICAgIGFycmF5
UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+Y29kZU9yaWdpbikpOwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFy
cmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsK
LSAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9u
KCkpOwotICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBh
cnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0
cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJl
KCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKE51bWJlclVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChCb29sZWFuVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChOb3RDZWxsVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOiB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAgICAgICAgICBpZiAoYXR0
ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1YjogeworICAgICAg
ICAgICAgaWYgKGF0dGVtcHRUb01ha2VJbnRlZ2VyQWRkKG5vZGUpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZTogewor
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
KSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZml4
RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgICAgIGlm
IChtX2dyYXBoLm11bFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAg
ICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNYODYoKSB8fCBpc0FSTXY3cygpKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
YXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigp
LCBub2RlLT5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuc3VwcG9y
dHNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUobm9k
ZS0+Y2hpbGQyKCkpOworCisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBy
ZWYnaW5nIG9uIHRoZSBjaGlsZHJlbiBiZWNhdXNlIHdlJ3JlIHN0ZWFsaW5nIHRoZW0gZnJvbQor
ICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBkaXZpc2lvbi4KKyAgICAgICAgICAgICAg
ICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNw
ZWNEb3VibGUsICpub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcChEb3VibGVBc0ludDMyKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5p
bml0aWFsaXplKEVkZ2UobmV3RGl2aXNpb24sIEtub3duTnVtYmVyVXNlKSwgRWRnZSgpLCBFZGdl
KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0
QXJyYXlMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVz
dEdlbmVyYXRlKTsKLSAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7
Ci0gICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tB
cnJheShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
MCwgbGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAg
ICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgY2FzZSBBcml0aE1pbjoKKyAgICAgICAgY2FzZSBB
cml0aE1heDoKKyAgICAgICAgY2FzZSBBcml0aE1vZDogeworICAgICAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtp
bmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhE
b3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFiczogeworICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCisg
ICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcml0aFNxcnQ6IHsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKHN0b3JhZ2Up
OworICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSk7CisgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigp
KQorICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlOiB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY2FuQ1NFU3Rv
cmFnZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFR5cGVPZjogeworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKFN0cmluZ1VzZSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZUVx
OgorICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgorICAgICAgICBjYXNlIENvbXBhcmVM
ZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcTogeworICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxQ29uc3RhbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1i
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAg
ICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBDb21wYXJlRXEp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxh
dGVTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNl
dFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0
KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkgJiYgbm9kZS0+
Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICBjYXNlIENv
bXBhcmVTdHJpY3RFcUNvbnN0YW50OiB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBD
b21wYXJlU3RyaWN0RXFDb25zdGFudCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigp
LnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3Ry
aW5nKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0
KCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdFVz
ZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2Fz
ZSBTdHJpbmdDaGFyQ29kZUF0OiB7CisgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2UgaGF2ZSBu
byBnb29kIHdheSBvZiByZWZpbmluZyB0aGVzZS4KKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5h
cnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0cmluZykpOworICAgICAgICAgICAgYmxl
c3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7
CiAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+
YXJyYXlNb2RlKCkucmVmaW5lKApAQCAtMTI3LDcgKzM0Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAg
ICAgICAgIFNwZWNOb25lLCBub2RlLT5mbGFncygpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCAy
KTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUt
PmNoaWxkMigpLCBub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFy
cmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgICAgIGlmIChh
cnJheU1vZGUudHlwZSgpID09IEFycmF5OjpEb3VibGUKQEAgLTEzOCwxMyArMzUzLDgzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgIShub2RlLT5mbGFncygpICYgTm9kZVVzZWRBc090
aGVyKSkKICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlLndpdGhT
cGVjdWxhdGlvbihBcnJheTo6U2FuZUNoYWluKSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VW5w
cm9maWxlZDoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgY2FzZSBB
cnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxV
c2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoK
LSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0gICAgICAgICAgICAvLyBDdXJyZW50
bHkgd2UgaGF2ZSBubyBnb29kIHdheSBvZiByZWZpbmluZyB0aGVzZS4KLSAgICAgICAgICAgIEFT
U0VSVChub2RlLT5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6OlN0cmluZykpOwotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCksIDIpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNh
c2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgRWRnZSYgY2hpbGQxID0gbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UmIGNoaWxkMiA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdlJiBjaGlsZDMgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpOworCisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUo
CisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAg
ICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQy
LT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxkMy0+cHJlZGljdGlvbigp
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oY2hpbGQx
LCBjaGlsZDIsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6
VW5kZWNpZGVkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgICAgICAgICAgLy8gRHVlIHRvIHJlZ2lzdGVyIHByZXNzdXJlIG9uIDMyLWJp
dCwgd2Ugc3BlY3VsYXRlIGNlbGwgYW5kCisgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoZSBi
YXNlLWlzLW5vdC1jZWxsIGNhc2UgZW50aXJlbHkgYnkgbGV0dGluZyB0aGUKKyAgICAgICAgICAg
ICAgICAvLyBiYXNlbGluZSBKSVQgaGFuZGxlIGl0LgorICAgICAgICAgICAgICAgIGNoaWxkMS5z
ZXRVc2VLaW5kKENlbGxVc2UpOworI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgY2hpbGQxLnNldFVz
ZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBjaGlsZDIuc2V0VXNlS2luZChJ
bnQzMlVzZSk7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShjaGlsZDMsIFJlYWxOdW1i
ZXJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6
SW50OEFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50
OEFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQzMkFycmF5OgorICAgICAgICAgICAgICAgIGNoaWxkMS5zZXRVc2VLaW5kKEtub3duQ2Vs
bFVzZSk7CisgICAgICAgICAgICAgICAgY2hpbGQyLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAg
ICAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgY2hpbGQzLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShjaGlsZDMpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5
OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgICAg
IGNoaWxkMS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgY2hpbGQy
LnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoY2hp
bGQzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgY2hpbGQxLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAg
ICAgICBjaGlsZDIuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC0xNjMsMTEgKzQ0OCwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAgICAg
ICAgIFNwZWNJbnQzMiwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRp
Y3Rpb24oKSkpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEo
KSwgRWRnZSgpLCAyKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hp
bGQxKCksIEVkZ2UoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzI6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQz
MlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzYsNDkg
KzQ2NSwyNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBBcnJheVBvcDogewotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGls
ZDEoKSwgRWRnZSgpLCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAg
IGNhc2UgQml0WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRM
U2hpZnQ6Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgZml4SW50RWRn
ZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxl
c3M6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBDb21wYXJlR3Jl
YXRlcjoKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBjYXNlIENvbXBh
cmVTdHJpY3RFcTogewotICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUtPmNoaWxkMSgpLCBFZGdlKCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0g
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgICAg
ICBjYXNlIFJlZ0V4cFRlc3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKENlbGxV
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4o
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2Up
OworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9i
amVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KE9iamVjdE9yT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVF
ZGdlKG5vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNhbE5vdCA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90LT5vcCgpID09
IExvZ2ljYWxOb3QKQEAgLTI2MSwxNDkgKzUyOCwyNjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZXRMb2NhbDog
ewotICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNwZWN1bGF0aW9u
KTsKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRk
IHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDE3NQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBjYXNl
IFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUpKQorICAgICAgICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAgICAgICAgICAg
ICBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5pbmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBp
KS0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5udW1DaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgd2lsbCBvbmx5IGhhcHBlbiBpZiB0aGUgY2hpbGRyZW4gaGF2ZSBubyB0eXBlIHBy
ZWRpY3Rpb25zLiBXZQorICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGFscmVhZHkg
ZXhpdGVkIGJ5IG5vdywgYnV0IGluc2VydCBhIGZvcmNlZCBleGl0IGp1c3QgdG8KKyAgICAgICAg
ICAgICAgICAgICAgLy8gYmUgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBE
b250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5E
RVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXgg
PSAwOyBvcGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0
Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0uc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5k
SW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9w
ZXJhbmRJbmRleF0uc2V0VXNlS2luZChSZWFsTnVtYmVyVXNlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7
Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEpOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3Vi
OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTog
eworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJp
dGhOZWdhdGU6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhE
b3VibGVFZGdlKDApOworICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CisgICAgICAgICAgICAv
LyBGSVhNRTogVXNlIFBoYW50b20odHlwZSBjaGVjaykgYW5kIElkZW50aXR5IGluc3RlYWQuCisg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEw
Mzk1CisgICAgICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQo
T3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNaW46Ci0gICAgICAgIGNhc2UgQXJpdGhN
YXg6Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxh
dGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDApOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBD
cmVhdGVUaGlzOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxV
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEFyaXRoTXVsOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Zml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bFNhZmU6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIEFyaXRoRGl2
OiB7Ci0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAg
ICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzWDg2KCkgfHwgaXNBUk12N3MoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoMCk7Ci0gICAgICAg
ICAgICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoMSk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2Un
cmUgc3RlYWxpbmcgdGhlbSBmcm9tCi0gICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRp
dmlzaW9uLgotICAgICAgICAgICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRS
ZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgKm5vZGUpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOwotICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgRG91Ymxl
VXNlKSwgRWRnZSgpLCBFZGdlKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZVJlZ2lzdGVyczoK
KyAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6CisgICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgor
ICAgICAgICBjYXNlIFNraXBTY29wZToKKyAgICAgICAgY2FzZSBTZXRDYWxsZWU6CisgICAgICAg
IGNhc2UgU2V0TXlTY29wZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNh
c2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBHZXRTY29wZToKKyAgICAgICAgY2FzZSBHZXRCdXR0
ZXJmbHk6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBBcml0aEFiczogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAgICAgJiYgbm9k
ZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQo
Q2VsbFVzZSk7CisgICAgICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVk
aWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNvZGVC
bG9jaygpLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0
YSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCisgICAgICAgICAgICAgICAgbV9n
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9m
aWxlKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgp
OworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2Vs
ZWN0VXNpbmdQcmVkaWN0aW9ucyk7CisgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Cisg
ICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9n
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKSk7CisgICAgICAgICAg
ICAgICAgYXJyYXlNb2RlID0gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBB
cnJheTo6UmVhZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9k
ZS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5z
dXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkg
eworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmls
ZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghYXJyYXlN
b2RlLnN1cHBvcnRzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBmaXhEb3VibGVFZGdlKDApOworICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0QXJyYXlMZW5n
dGgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRl
KTsKKyAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVD
bG9iYmVyc1dvcmxkKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25v
d25DZWxsVXNlKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CisgICAgICAgICAg
ICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTm9kZSogc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2lu
LCBub2RlLT5jaGlsZDEoKS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpID0gRWRn
ZShzdG9yYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcml0aFNxcnQ6IHsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7
CisgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5
VmFsQWxpYXM6IHsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKTsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKTsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKTsKLQotICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAotICAgICAgICAg
ICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgY2hp
bGQxLT5wcmVkaWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlv
bigpLAotICAgICAgICAgICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAz
KTsKKyAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6CisgICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNl
IFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgorICAgICAgICBjYXNlIEZvcndhcmRTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgor
ICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAg
ICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0
KCkudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAg
ICAgICAgZml4RG91YmxlRWRnZSgyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAg
Y2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xh
bXBlZEFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAg
ICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoIWNoaWxk
My0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgICAgICBmaXhEb3Vi
bGVFZGdlKDIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJh
eTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5Ogot
ICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMik7CisgICAgICAgIGNhc2UgQ2hlY2tBcnJh
eTogeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS5zZXRVc2VLaW5kKFN0cmluZ1VzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoQ2VsbFVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3
QXJyYXk6IHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVt
Q2hpbGRyZW4obm9kZSk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGlu
Z1R5cGUoCi0gICAgICAgICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBl
QW5kVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmluZGV4aW5nVHlwZSgpLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChub2RlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3Vi
bGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051
bUNoaWxkcmVuKG5vZGUpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdl
KGkpOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5aWZ5OgorICAgICAgICBjYXNl
IEFycmF5aWZ5VG9TdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVz
ZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkpCisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6IHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQo
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhh
c1N0b3JhZ2VSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VL
aW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5k
KEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgSW5zdGFuY2VPZjogeworICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgYXBwZWFycyBicm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2VzIGFuIHVuY29u
ZGl0aW9uYWwgY2VsbAorICAgICAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKKyAgICAgICAgICAgIGlmICghKG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5z
ZXRVc2VLaW5kKENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIElkZW50
aXR5OgorICAgICAgICBjYXNlIE5vcDoKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2Ug
Rm9yd2FyZEludDMyVG9Eb3VibGU6CisgICAgICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToK
KyAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIExh
c3ROb2RlVHlwZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisjaWYgIUFTU0VSVF9ESVNBQkxFRCAgICAKKyAg
ICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9k
eSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCisgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnQ6CisgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgY2FzZSBKU0NvbnN0
YW50OgorICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgorICAgICAgICBjYXNlIEdldExvY2Fs
OgorICAgICAgICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAg
Y2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAgICAg
ICAgY2FzZSBJbmxpbmVTdGFydDoKKyAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgorICAgICAgICBj
YXNlIEdldFNjb3BlZFZhcjoKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgIGNh
c2UgUHV0R2xvYmFsVmFyOgorICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6CisgICAg
ICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hlY2s6CisgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2Zp
bGVXYXRjaHBvaW50OgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0
OgorICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoK
KyAgICAgICAgY2FzZSBOZXdSZWdleHA6CisgICAgICAgIGNhc2UgUmVzb2x2ZToKKyAgICAgICAg
Y2FzZSBSZXNvbHZlQmFzZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKKyAg
ICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOgorICAgICAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAg
ICAgIGNhc2UgSXNVbmRlZmluZWQ6CisgICAgICAgIGNhc2UgSXNCb29sZWFuOgorICAgICAgICBj
YXNlIElzTnVtYmVyOgorICAgICAgICBjYXNlIElzU3RyaW5nOgorICAgICAgICBjYXNlIElzT2Jq
ZWN0OgorICAgICAgICBjYXNlIElzRnVuY3Rpb246CisgICAgICAgIGNhc2UgU3RyQ2F0OgorICAg
ICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CisgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRp
b246CisgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21B
cmd1bWVudHM6CisgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNh
ZmU6CisgICAgICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgorICAgICAgICBjYXNl
IE5ld0Z1bmN0aW9uOgorICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoKKyAgICAgICAg
Y2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAg
Y2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgVGhyb3c6CisgICAgICAgIGNhc2UgVGhyb3dSZWZl
cmVuY2VFcnJvcjoKKyAgICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CisgICAgICAgIGNhc2UgQ291
bnRFeGVjdXRpb246CisgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICAgICAgYnJl
YWs7CisjZWxzZQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYK
ICAgICAgICAgfQogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpA
QCAtNDIxLDYgKzgwNSw4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGFycmF5TW9kZS5vcmlnaW5hbEFycmF5U3RydWN0dXJlKG1fZ3JhcGgsIGNv
ZGVPcmlnaW4pOwogICAgICAgICAKKyAgICAgICAgRWRnZSBpbmRleEVkZ2UgPSBpbmRleCA/IEVk
Z2UoaW5kZXgsIEludDMyVXNlKSA6IEVkZ2UoKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChhcnJh
eU1vZGUuZG9lc0NvbnZlcnNpb24oKSkgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSkgewog
ICAgICAgICAgICAgICAgIGlmIChtX2luZGV4SW5CbG9jayA+IDApIHsKQEAgLTQzNSwyMSArODIx
LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5VG9TdHJ1Y3R1cmUs
IGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKHN0cnVjdHVyZSksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFy
cmF5LCBDZWxsVXNlKSwgaW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5
aWZ5LCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFz
V29yZCgpKSwgYXJyYXksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpLCBpbmRleEVkZ2UpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSkgewog
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25l
LCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBhcnJheSk7CisgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgRWRn
ZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwg
Y29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQo
KSksIGFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQo
KSksIEVkZ2UoYXJyYXksIENlbGxVc2UpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKQEAgLTQ2MSwyMSArODQ3LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssCiAgICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZDaGlsZHJl
biA6IERvbnRSZWZDaGlsZHJlbiwKICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJl
Zk5vZGUgOiBEb250UmVmTm9kZSwKLSAgICAgICAgICAgICAgICBTcGVjTm9uZSwgR2V0QnV0dGVy
Zmx5LCBjb2RlT3JpZ2luLCBhcnJheSk7CisgICAgICAgICAgICAgICAgU3BlY05vbmUsIEdldEJ1
dHRlcmZseSwgY29kZU9yaWdpbiwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssCiAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/
IFJlZkNoaWxkcmVuIDogRG9udFJlZkNoaWxkcmVuLAogICAgICAgICAgICAgc2hvdWxkR2VuZXJh
dGUgPyBSZWZOb2RlIDogRG9udFJlZk5vZGUsCi0gICAgICAgICAgICBTcGVjTm9uZSwgR2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQo
KSksIGFycmF5KTsKKyAgICAgICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwg
S25vd25DZWxsVXNlKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlv
bihFZGdlIGJhc2UsIEVkZ2UgaW5kZXgsIHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKKyAgICB2
b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4LCBFZGdlJiBzdG9y
YWdlQ2hpbGQpCiAgICAgewotICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBC
ZWZvcmVGaXhwb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCiAgICAgICAgIE5v
ZGUqIG5vZGUgPSBtX2N1cnJlbnROb2RlOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKQEAgLTQ5OSw3ICs4ODIsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaWYgKCFzdG9yYWdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgbV9ncmFwaC5jaGlsZChub2RlLCBzdG9yYWdlQ2hpbGRJZHgpID0g
RWRnZShzdG9yYWdlKTsKKyAgICAgICAgICAgIHN0b3JhZ2VDaGlsZCA9IEVkZ2Uoc3RvcmFnZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gfQogICAgIH0KQEAgLTUwNyw0OCArODkw
LDkyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVkZ2UpCiAgICAgewog
ICAgICAgICBOb2RlKiBub2RlID0gZWRnZS5ub2RlKCk7Ci0gICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IFZhbHVlVG9JbnQzMikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAg
IGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAg
aWYgKG5vZGUtPm9wKCkgIT0gVmFsdWVUb0ludDMyKSB7CisgICAgICAgICAgICBlZGdlLnNldFVz
ZUtpbmQoS25vd25JbnQzMlVzZSk7CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7CiAgICAgICAgIEVkZ2UgbmV3RWRn
ZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAKKyAgICAgICAgaWYgKG5ld0VkZ2UudXNlS2lu
ZCgpICE9IEludDMyVXNlKSB7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25vd25JbnQz
MlVzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChuZXdFZGdlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOworICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRn
ZSk7CiAgICAgICAgIAogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBmaXhEb3VibGVFZGdlKHVuc2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBmaXhEb3VibGVF
ZGdlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVzZSwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKICAgICB7Ci0gICAgICAg
IE5vZGUqIHNvdXJjZSA9IG1fY3VycmVudE5vZGU7Ci0gICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dy
YXBoLmNoaWxkKHNvdXJjZSwgY2hpbGRJbmRleCk7Ci0gICAgICAgIAogICAgICAgICBpZiAoZWRn
ZS0+cHJlZGljdGlvbigpICYgU3BlY0RvdWJsZSkgewotICAgICAgICAgICAgZWRnZS5zZXRVc2VL
aW5kKERvdWJsZVVzZSk7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQodXNlS2luZCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGluamVjdElu
dDMyVG9Eb3VibGVOb2RlKGNoaWxkSW5kZXgsIGRpcmVjdGlvbik7CisgICAgICAgIGluamVjdElu
dDMyVG9Eb3VibGVOb2RlKGVkZ2UsIHVzZUtpbmQsIGRpcmVjdGlvbik7CiAgICAgfQogCi0gICAg
dm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZSh1bnNpZ25lZCBjaGlsZEluZGV4LCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIHZvaWQg
aW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVt
YmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5v
ZGUsIFNwZWNEb3VibGUsCiAgICAgICAgICAgICBkaXJlY3Rpb24gPT0gQmFja3dhcmRTcGVjdWxh
dGlvbiA/IEludDMyVG9Eb3VibGUgOiBGb3J3YXJkSW50MzJUb0RvdWJsZSwKLSAgICAgICAgICAg
IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwg
Y2hpbGRJbmRleCkubm9kZSgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4sIEVkZ2UoZWRnZS5ub2RlKCksIE51bWJlclVzZSkpOwogICAgICAgICAKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKAogICAgICAg
ICAgICAgIihyZXBsYWNpbmcgQCV1LT5AJXUgd2l0aCBAJXUtPkAldSkgIiwKLSAgICAgICAgICAg
IG1fY3VycmVudE5vZGUtPmluZGV4KCksIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hp
bGRJbmRleCktPmluZGV4KCksIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgo
KSk7CisgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCBlZGdlLT5pbmRleCgpLCBt
X2N1cnJlbnROb2RlLT5pbmRleCgpLCByZXN1bHQtPmluZGV4KCkpOwogI2VuZGlmCiAKLSAgICAg
ICAgbV9ncmFwaC5jaGlsZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0
LCBEb3VibGVVc2UpOworICAgICAgICBlZGdlID0gRWRnZShyZXN1bHQsIHVzZUtpbmQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHRydW5jYXRlQ29uc3RhbnRUb0ludDMyKEVkZ2UmIGVkZ2UpCisg
ICAgeworICAgICAgICBOb2RlKiBvbGROb2RlID0gZWRnZS5ub2RlKCk7CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQob2xkTm9kZS0+aGFzQ29uc3RhbnQoKSk7CisgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG9sZE5vZGUpOworICAgICAgICBpZiAodmFs
dWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdmFs
dWUgPSBqc051bWJlcihKU0M6OnRvSW50MzIodmFsdWUuYXNOdW1iZXIoKSkpOworICAgICAgICBB
U1NFUlQodmFsdWUuaXNJbnQzMigpKTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxk
cmVuLCBSZWZOb2RlLCBTcGVjSW50MzIsIEpTQ29uc3RhbnQsCisgICAgICAgICAgICBtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luLCBPcEluZm8oY29kZUJsb2NrKCktPmFkZE9yRmluZENvbnN0YW50
KHZhbHVlKSkpKTsKKyAgICAgICAgbV9ncmFwaC5kZXJlZihvbGROb2RlKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCB0cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KE5vZGUqIG5vZGUsIEFkZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlKQorICAgIHsKKyAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRl
SW50ZWdlckFuZFRydW5jYXRlQ29uc3RhbnRzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpIHx8IG5vZGUt
PmNoaWxkMigpLT5oYXNDb25zdGFudCgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5o
YXNDb25zdGFudCgpKQorICAgICAgICAgICAgdHJ1bmNhdGVDb25zdGFudFRvSW50MzIobm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cnVuY2F0ZUNvbnN0YW50VG9J
bnQzMihub2RlLT5jaGlsZDIoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgYXR0ZW1wdFRvTWFr
ZUludGVnZXJBZGQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9k
ZSBtb2RlID0gbV9ncmFwaC5hZGRTcGVjdWxhdGlvbk1vZGUobm9kZSk7CisgICAgICAgIGlmICht
b2RlID09IERvbnRTcGVjdWxhdGVJbnRlZ2VyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShub2RlLCBtb2Rl
KTsKKyAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAg
IG5vZGUtPmNoaWxkMigpLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNDUgKzM0
NiwxNCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgfQogfQogCi0v
LyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGJlIGl0ZXJhdGl2ZSwgbm90IHJlY3Vyc2l2ZS4KLSNk
ZWZpbmUgRE9fVE9fQ0hJTERSRU4obm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKF9ub2RlLT5mbGFn
cygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQoKTsgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+Zmlyc3RDaGls
ZCgpICsgX25vZGUtPm51bUNoaWxkcmVuKCk7IFwKLSAgICAgICAgICAgICAgICBfY2hpbGRJZHgr
KykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICBpZiAoISFtX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgdGhpbmdUb0RvKG1fdmFyQXJnQ2hpbGRyZW5b
X2NoaWxkSWR4XSk7ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSBl
bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
ICAgICAgIV9ub2RlLT5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25v
ZGUtPmNoaWxkMigpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNo
aWxkMygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxl
IChmYWxzZSkKLQogdm9pZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9kZSogb3ApCiB7Ci0gICAgRE9f
VE9fQ0hJTERSRU4ob3AsIHJlZik7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMs
IG9wLCByZWYpOwogfQogCiB2b2lkIEdyYXBoOjpkZXJlZkNoaWxkcmVuKE5vZGUqIG9wKQogewot
ICAgIERPX1RPX0NISUxEUkVOKG9wLCBkZXJlZik7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERS
RU4oKnRoaXMsIG9wLCBkZXJlZik7CiB9CiAKIHZvaWQgR3JhcGg6OmRldGhyZWFkKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MzQyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNzcs
NyArNzcsNyBAQCBzdHJ1Y3QgUHV0VG9CYXNlT3BlcmF0aW9uRGF0YSB7CiAKIGVudW0gQWRkU3Bl
Y3VsYXRpb25Nb2RlIHsKICAgICBEb250U3BlY3VsYXRlSW50ZWdlciwKLSAgICBTcGVjdWxhdGVJ
bnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdywKKyAgICBTcGVjdWxhdGVJbnRlZ2VyQW5kVHJ1
bmNhdGVDb25zdGFudHMsCiAgICAgU3BlY3VsYXRlSW50ZWdlcgogfTsKIApAQCAtMTAwLDEwICsx
MDAsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7CiAgICAgICAg
IHJldHVybiBub2RlOwogICAgIH0KLSAgICBFZGdlIHJlZihFZGdlIG5vZGVVc2UpCisgICAgRWRn
ZSByZWYoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgcmVmKG5vZGVVc2Uubm9kZSgpKTsKLSAg
ICAgICAgcmV0dXJuIG5vZGVVc2U7CisgICAgICAgIHJlZihlZGdlLm5vZGUoKSk7CisgICAgICAg
IHJldHVybiBlZGdlOworICAgIH0KKyAgICBFZGdlIHJlZihOb2RlKiwgRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHJlZihlZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZXJl
ZihOb2RlKiBub2RlKQpAQCAtMTE1LDkgKzExOSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChu
b2RlLT5wb3N0Zml4RGVyZWYoKSA9PSAxKQogICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2Rl
KTsKICAgICB9Ci0gICAgdm9pZCBkZXJlZihFZGdlIG5vZGVVc2UpCisgICAgdm9pZCBkZXJlZihF
ZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBkZXJlZihub2RlVXNlLm5vZGUoKSk7CisgICAgICAg
IGRlcmVmKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgdm9pZCBkZXJlZihOb2RlKiwgRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgZGVyZWYoZWRnZSk7CiAgICAgfQogICAgIAogICAgIC8vIFdo
ZW4gYSBub2RlJ3MgcmVmQ291bnQgZ29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9naWNhbGx5
KSByZWN1cnNpdmVseSByZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVyc2EuCkBA
IC0xNzQsOSArMTgyLDkgQEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkg
KyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAgIHBlcmZv
cm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRH
ZW5lcmF0ZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0
aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQy
KCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JF
ZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAg
ICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDEoKSwgc2hvdWxkR2VuZXJh
dGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQy
KCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JF
ZGdlKG5vZGUtPmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkBAIC01MzAsOSArNTM4LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNQcmVkaWN0
ZWROdW1lcmljYWwoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxl
ZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwotICAgICAgICBTcGVjdWxhdGVkVHlw
ZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVybiBp
c051bWJlclNwZWN1bGF0aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOwor
ICAgICAgICByZXR1cm4gaXNOdW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBp
c051bWVyaWNhbChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkpOwogICAgIH0KICAgICAKICAgICAv
LyBOb3RlIHRoYXQgYSAndHJ1ZScgcmV0dXJuIGRvZXMgbm90IGFjdHVhbGx5IG1lYW4gdGhhdCB0
aGUgQnlWYWwgYWNjZXNzIGNsb2JiZXJzIG5vdGhpbmcuCkBAIC03ODEsNyArNzg3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgaWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJs
ZUltbWVkaWF0ZSA+IHR3b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0
ZUludGVnZXI7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdl
cihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNo
T3ZlcmZsb3cgOiBEb250U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5U
cnVuY2F0ZUludGVnZXIoYWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJB
bmRUcnVuY2F0ZUNvbnN0YW50cyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAK
ICAgICBib29sIG11bEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBO
b2RlKiB2YXJpYWJsZSwgTm9kZSogaW1tZWRpYXRlKQpAQCAtODMwLDYgKzgzNiwzNiBAQCBpbmxp
bmUgQmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5CiAgICAgcmV0dXJuICpiaW5hcnlT
ZWFyY2g8QmxvY2tJbmRleCwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0
cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykp
OwogfQogCisjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGlu
Z1RvRG8pIGRvIHsgICAgICAgICAgICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChf
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENo
aWxkKCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUt
PmZpcnN0Q2hpbGQoKSArIF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCisgICAgICAgICAgICAgICAg
X2NoaWxkSWR4KyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAgaWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElk
eF0pICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwg
KGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pOyBcCisgICAgICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNT
RVJUKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDEo
KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBpZiAoIV9ub2RlLT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDIoKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBp
ZiAoIV9ub2RlLT5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2Rl
LT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgfSB3aGlsZSAoZmFsc2UpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQzNDI2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDExICs5NSwxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9u
KFNwZWNOb25lKQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwotICAg
ICAgICBBU1NFUlQoISEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSA9PSAoY2hpbGRyZW4ua2lu
ZCgpID09IEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENv
bnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUu
Ci0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBjaGls
ZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQorICAgIE5vZGUoTm9k
ZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRWRnZSBjaGlsZDEgPSBFZGdlKCksIEVk
Z2UgY2hpbGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICAgICAgOiBjb2Rl
T3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4
ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIo
SW52YWxpZFZpcnR1YWxSZWdpc3RlcikKQEAgLTExMSw3ICsxMTAsNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4g
YW5kIGFuIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9
IDAsIE5vZGUqIGNoaWxkMyA9IDApCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBPcEluZm8gaW1tLCBFZGdlIGNoaWxkMSA9IEVkZ2UoKSwgRWRnZSBjaGlsZDIg
PSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29k
ZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQx
LCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQpAQCAtMTI0LDcgKzEyMyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAK
ICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGlt
bWVkaWF0ZSB2YWx1ZXMuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNo
aWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIEVkZ2UgY2hpbGQxID0g
RWRnZSgpLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAg
ICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5j
eUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVh
bFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0yOTQsMjIgKzI5MywyMiBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50KHN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUlu
ZGV4LCBOb2RlKiBzdG9yYWdlKQorICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWdu
ZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAg
IG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsKLSAgICAgICAgY2hpbGRyZW4uc2V0
Q2hpbGQxKEVkZ2Uoc3RvcmFnZSkpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoc3RvcmFn
ZSk7CiAgICAgICAgIG1fb3AgPSBHZXRCeU9mZnNldDsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9k
ZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZz
ZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKKyAgICB2
b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgs
IEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5SWQgfHwg
bV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNz
RGF0YUluZGV4OwogICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDMoY2hpbGRyZW4uY2hpbGQyKCkp
OwogICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDIoY2hpbGRyZW4uY2hpbGQxKCkpOwotICAgICAg
ICBjaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShzdG9yYWdlKSk7CisgICAgICAgIGNoaWxkcmVuLnNl
dENoaWxkMShzdG9yYWdlKTsKICAgICAgICAgbV9vcCA9IFB1dEJ5T2Zmc2V0OwogICAgICAgICBt
X2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9CkBAIC05NDksOSArOTQ4LDEwIEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgICAgICBjYXNl
IFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2Fz
ZSBQaGFudG9tOgogICAgICAgICBjYXNlIE5vcDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtp
bmRVbmNoZWNrZWQoKSAhPSBVbnR5cGVkVXNlIHx8IGNoaWxkMigpLnVzZUtpbmRVbmNoZWNrZWQo
KSAhPSBVbnR5cGVkVXNlIHx8IGNoaWxkMygpLnVzZUtpbmRVbmNoZWNrZWQoKSAhPSBVbnR5cGVk
VXNlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHNob3VsZEdlbmVyYXRl
KCk7CiAgICAgICAgIH0KQEAgLTk5NSw3ICs5OTUsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IHJldHVybiBtX3JlZkNvdW50LS07CiAgICAgfQogICAgIAotICAgIEVkZ2UgY2hpbGQxKCkKKyAg
ICBFZGdlJiBjaGlsZDEoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVI
YXNWYXJBcmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDEoKTsKQEAgLTEwMDks
MTMgKzEwMDksMTMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hp
bGQxVW5jaGVja2VkKCk7CiAgICAgfQogCi0gICAgRWRnZSBjaGlsZDIoKQorICAgIEVkZ2UmIGNo
aWxkMigpCiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3Mp
KTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMigpOwogICAgIH0KIAotICAgIEVkZ2Ug
Y2hpbGQzKCkKKyAgICBFZGdlJiBjaGlsZDMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9m
bGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDMo
KTsKQEAgLTEwMzMsNiArMTAzMywxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBj
aGlsZHJlbi5udW1DaGlsZHJlbigpOwogICAgIH0KICAgICAKKyAgICBVc2VLaW5kIGJpbmFyeVVz
ZUtpbmQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNoaWxkMSgpLnVzZUtpbmQoKSA9PSBjaGls
ZDIoKS51c2VLaW5kKCkpOworICAgICAgICByZXR1cm4gY2hpbGQxKCkudXNlS2luZCgpOworICAg
IH0KKyAgICAKKyAgICBib29sIGlzQmluYXJ5VXNlS2luZChVc2VLaW5kIHVzZUtpbmQpCisgICAg
eworICAgICAgICByZXR1cm4gY2hpbGQxKCkudXNlS2luZCgpID09IHVzZUtpbmQgJiYgY2hpbGQy
KCkudXNlS2luZCgpID09IHVzZUtpbmQ7CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCShyZXZpc2lv
biAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCi10eXBlZGVmIEFsbG9jYXRvcjxOb2RlPiBOb2RlQWxsb2NhdG9yOwor
I2lmIFVTRShKU1ZBTFVFNjQpCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCAxMTI+IE5vZGVBbGxv
Y2F0b3I7CisjZWxzZQordHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgODA+IE5vZGVBbGxvY2F0b3I7
CisjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjb25z
dCBjaGFyKiBub2RlRmxhZ3NBc1N0cmluZyhOb2RlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKCFm
bGFncykKKyAgICBpZiAoIShmbGFncyBeIE5vZGVEb2VzTm90RXhpdCkpCiAgICAgICAgIHJldHVy
biAiPGVtcHR5PiI7CiAKICAgICBzdGF0aWMgY29uc3QgaW50IHNpemUgPSAxMjg7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNDM0MjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk2LDggKzk2LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKEZvcndhcmRJbnQzMlRvRG91YmxlLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgLyogVXNl
ZCB0byBzcGVjdWxhdGUgdGhhdCBhIGRvdWJsZSB2YWx1ZSBpcyBhY3R1YWxseSBhbiBpbnRlZ2Vy
LiAqL1wKICAgICBtYWNybyhEb3VibGVBc0ludDMyLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICAv
KiBVc2VkIHRvIHJlY29yZCBwbGFjZXMgd2hlcmUgd2UgbXVzdCBjaGVjayBpZiBhIHZhbHVlIGlz
IGEgbnVtYmVyLiAqL1wKLSAgICBtYWNybyhDaGVja051bWJlciwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgYXJpdGhtZXRpYyBvcGVyYXRpb25zLiAqL1wKICAg
ICBtYWNybyhBcml0aEFkZCwgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODA1LDcgKzgwNSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOgogICAgICAgICBjYXNl
IFRlYXJPZmZBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgQ2hlY2tOdW1iZXI6CiAgICAgICAgIGNh
c2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNo
cG9pbnQ6CiAgICAgICAgIGNhc2UgR2FyYmFnZVZhbHVlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyMyArNDAsMjUgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAotR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5G
b3JtYXQpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKEVkZ2UgZWRnZSwgRGF0
YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBBU1NFUlQoIW5lZWRzVHlwZUNo
ZWNrKGVkZ2UsIFNwZWNJbnQzMikpOworICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIGlmIChpbmZv
LnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKICAgICAgICAgR1BSUmVnIGdw
ciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRh
aW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKQotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpCisgICAgICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5v
ZGUoKSkpLCBncHIpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChlZGdl
Lm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQo
bm9kZSkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2Rl
KCkpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFu
dChlZGdlLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIoanNWYWx1ZS5wYXlsb2FkKCkpLCBncHIpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewpAQCAtMTEzLDI1ICsxMTUsMjUgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsSW50ZWdlcihOb2RlKgogICAgIH0KIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpT
VmFsdWUoTm9kZSogbm9kZSwgR1BSUmVnJiB0YWdHUFIsIEdQUlJlZyYgcGF5bG9hZEdQUiwgRlBS
UmVnJiBmcHIpCitib29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShFZGdlIGVkZ2UsIEdQ
UlJlZyYgdGFnR1BSLCBHUFJSZWcmIHBheWxvYWRHUFIsIEZQUlJlZyYgZnByKQogewogICAgIC8v
IEZJWE1FOiBGb3IgZG91YmxlIHdlIGNvdWxkIGZpbGwgd2l0aCBhIEZQUi4KICAgICBVTlVTRURf
UEFSQU0oZnByKTsKIAotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2Rl
LT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKIAotICAgICAgICBp
ZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQo
KSkgewogICAgICAgICAgICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIHBheWxv
YWRHUFIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9m
SlNDb25zdGFudChub2RlKS50YWcoKSksIHRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3Zl
KEltbTMyKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLnBheWxvYWQoKSksIHBheWxvYWRHUFIpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUo
KSkudGFnKCkpLCB0YWdHUFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9m
SlNDb25zdGFudChlZGdlLm5vZGUoKSkucGF5bG9hZCgpKSwgcGF5bG9hZEdQUik7CiAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29u
c3RhbnQpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BSLCBpc0ludDMyQ29uc3RhbnQobm9kZSkgPyBE
YXRhRm9ybWF0SlNJbnRlZ2VyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIGluZm8uZmls
bEpTVmFsdWUoKm1fc3RyZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIGlzSW50MzJDb25zdGFudChl
ZGdlLm5vZGUoKSkgPyBEYXRhRm9ybWF0SlNJbnRlZ2VyIDogRGF0YUZvcm1hdEpTKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNw
aWxsRm9ybWF0KCk7CiAgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1h
dE5vbmUgJiYgc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwpAQCAtODQ0LDI3ICs4
NDYsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogfQogCiB0
ZW1wbGF0ZTxib29sIHN0cmljdD4KLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUludEludGVybmFsKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50SW50ZXJuYWwoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCi0gICAgZGF0YUxvZ0YoIlNwZWNJbnRAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKKyAg
ICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAg
U3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3Rlcigp
OworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAg
IFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7CisgICAgQVNTRVJUKGVkZ2UudXNl
S2luZCgpICE9IEtub3duSW50MzJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0ludDMyKSk7
CisgICAgdmFsdWUuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNo
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7Ci0g
ICAgICAgIGlmICgobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KG5vZGUp
KSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICBp
ZiAoKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkp
IHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CiAgICAgICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJ
bnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsK
ICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpLCBn
cHIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVP
ZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwgZ3ByKTsKICAgICAgICAgICAgIG1fZ3Bycy5y
ZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAg
ICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJldHVy
bkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwpAQCAtODc1LDggKzg4MCw4IEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgQVNTRVJUX1VOVVNFRChz
cGlsbEZvcm1hdCwgKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9
PSBEYXRhRm9ybWF0SW50ZWdlcik7CiAKICAgICAgICAgLy8gSWYgd2Uga25vdyB0aGlzIHdhcyBz
cGlsbGVkIGFzIGFuIGludGVnZXIgd2UgY2FuIGZpbGwgd2l0aG91dCBjaGVja2luZy4KLSAgICAg
ICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgaWYgKHR5cGUgJiB+U3Bl
Y0ludDMyKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291
cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpLCBlZGdlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSksIGRpcmVj
dGlvbik7CiAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0
LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwpA
QCAtODkzLDggKzg5OCw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEkKICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKICAgICAg
ICAgbV9ncHJzLmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7
Ci0gICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBu
b2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0
eXBlICYgflNwZWNJbnQzMikKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpLCBkaXJlY3Rpb24pOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAg
ICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxv
YWRHUFIpOwpAQCAtOTI5LDQwICs5MzQsNDMgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlSW50SQogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50KE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlSW50KEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5h
bDxmYWxzZT4obm9kZSwgcmV0dXJuRm9ybWF0LCBkaXJlY3Rpb24pOworICAgIHJldHVybiBmaWxs
U3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KGVkZ2UsIHJldHVybkZvcm1hdCwgZGlyZWN0aW9u
KTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5v
ZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3Qo
RWRnZSBlZGdlKQogewogICAgIERhdGFGb3JtYXQgbXVzdEJlRGF0YUZvcm1hdEludGVnZXI7Ci0g
ICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDx0cnVlPihub2RlLCBt
dXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAgR1BSUmVn
IHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDx0cnVlPihlZGdlLCBtdXN0QmVEYXRh
Rm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgQVNTRVJUKG11c3RCZURh
dGFGb3JtYXRJbnRlZ2VyID09IERhdGFGb3JtYXRJbnRlZ2VyKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1GUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSog
bm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorRlBSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9n
RigiU3BlY0RvdWJsZUAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFMb2dGKCJTcGVj
RG91YmxlQCVkICAgIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlw
ZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25v
d25OdW1iZXJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY051bWJlcikpOworICAgIHZhbHVl
LmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBpZiAoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0Nv
bnN0YW50KCkpIHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKKyAg
ICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMy
Q29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFs
bG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
MzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uu
bm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBpbmZvLmZp
bGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgeworICAgICAg
ICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWREb3VibGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZSksIGZwcik7CisgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRyZXNzT2ZEb3VibGVDb25zdGFudChlZGdl
Lm5vZGUoKSksIGZwcik7CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBpbmZvLmZp
bGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CkBA
IC05ODYsOCArOTk0LDggQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91
YgogCiAgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdEpTSW50ZWdlciAm
JiBzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0SW50ZWdlcikgewogICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3Bl
Y3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpKSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
SklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgJiB+
U3BlY051bWJlcikKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlcikp
LCBlZGdlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBKSVRD
b21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91Ymxl
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CiAgICAgICAg
ICAgICAgICAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKIApAQCAtMTAyMSw4ICsx
MDI5LDggQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAg
ICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0ludGVnZXIpIHsKICAg
ICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICAg
ICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgICAg
ICBpZiAodHlwZSAmIH5TcGVjTnVtYmVyKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgZWRnZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSksIGRpcmVjdGlvbik7CiAgICAgICAgICAgICB1bmJveERv
dWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CiAgICAgICAgICAg
ICBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogICAgICAgICAgICAgaXNJbnRlZ2Vy
LmxpbmsoJm1faml0KTsKQEAgLTEwNzYsMjAgKzEwODQsMjMgQEAgRlBSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQ2VsbChOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UgZWRn
ZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiU3BlY0NlbGxAJWQgICAiLCBub2RlLT5pbmRleCgp
KTsKKyAgICBkYXRhTG9nRigiU3BlY0NlbGxAJWQgICAiLCBlZGdlLT5pbmRleCgpKTsKICNlbmRp
ZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBl
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdl
KTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIEFTU0VSVChl
ZGdlLnVzZUtpbmQoKSAhPSBLbm93bkNlbGxVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0Nl
bGwpKTsKKyAgICB2YWx1ZS5maWx0ZXIoU3BlY0NlbGwpOworICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIHN3
aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTog
ewogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYgKGVkZ2Ut
Pmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0
ZSgpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAg
ICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQp
OwpAQCAtMTEwMiw4ICsxMTEzLDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbAogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKChpbmZvLnNwaWxsRm9ybWF0KCkg
JiBEYXRhRm9ybWF0SlMpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Q2VsbCk7
Ci0gICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAodHlwZSAm
IH5TcGVjQ2VsbCkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgZWRnZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFn
Rm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksIGRp
cmVjdGlvbik7CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsK
ICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNw
aWxsZWQpOwpAQCAtMTEyMyw4ICsxMTM0LDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IGluZm8ucGF5bG9hZEdQ
UigpOwogICAgICAgICBtX2dwcnMubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMubG9jayhw
YXlsb2FkR1BSKTsKLSAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXls
b2FkR1BSKSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksIGRpcmVjdGlvbik7CisgICAg
ICAgIGlmICh0eXBlICYgflNwZWNDZWxsKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKSwgZGlyZWN0aW9uKTsKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIp
OwogICAgICAgICBtX2dwcnMucmVsZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFz
ZShwYXlsb2FkR1BSKTsKQEAgLTExNTEsMTMgKzExNjIsMTUgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQm9vbGVhbihOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKEVk
Z2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY0Jvb2xAJWQgICAiLCBub2RlLT5p
bmRleCgpKTsKICNlbmRpZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5v
ZGUobm9kZSkubV90eXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBu
b2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3Rh
dGUuZm9yTm9kZShlZGdlKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBl
OworICAgIHZhbHVlLmZpbHRlcihTcGVjQm9vbGVhbik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dp
dGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKQEAgLTExNjcsOCArMTE4MCw4IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgICAgIHJldHVybiBh
bGxvY2F0ZSgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29u
c3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSk7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CiAgICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVl
LmlzQm9vbGVhbigpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKQEAgLTExODIsOCArMTE5NSw4IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKIAogICAgICAgICBBU1NFUlQo
KGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUykgfHwgaW5mby5zcGlsbEZvcm1hdCgp
ID09IERhdGFGb3JtYXRCb29sZWFuKTsKIAotICAgICAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0
aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpLCBub2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdG
b3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKSwg
ZGlyZWN0aW9uKTsKKyAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0Jvb2xlYW4pCisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIGVkZ2UsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpLCBkaXJlY3Rpb24pOwogCiAgICAgICAg
IEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKQEAgLTEyMDQsOCArMTIxNyw4
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgR1BS
UmVnIHBheWxvYWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKICAgICAgICAgbV9ncHJzLmxvY2so
dGFnR1BSKTsKICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIGlmICgh
aXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Qm9vbGVhblRhZykpLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAodHlwZSAmIH5TcGVj
Qm9vbGVhbikKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSks
IGRpcmVjdGlvbik7CiAKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBt
X2dwcnMucmVsZWFzZSh0YWdHUFIpOwpAQCAtMTI1OSwzNiArMTI3MiwyOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5n
cHIoKTsKICAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxW
YWxpZCgpKSB7Ci0gICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCkpOyAKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
Lm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQ
UiksIG5vZGUtPmNoaWxkMigpLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQo
KSk7CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsIG1faml0LmJy
YW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAg
ICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQ
UlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgp
LCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCAK
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEyOTYsMTQgKzEzMDEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKIAogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLCAKLSAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAor
ICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hp
bGQyKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQy
KCksIAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTMyNyw3ICsxMzI5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0
Q2hpbGQpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIGxlZnRDaGlsZCk7
Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQpOworICAgIEpTVmFsdWVP
cGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwog
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIG9wMUdQUiA9
IG9wMS5ncHIoKTsKQEAgLTEzMzcsMjcgKzEzMzksMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsgCiAgICAgICAgIG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAg
ICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3Qp
IHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVD
SygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRD
aGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5n
cHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBF
X0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwg
bGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQs
IAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTM3NCwyNyArMTM3MCwyMyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0
aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4KICAgICBpZiAobV9qaXQuZ3Jh
cGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7IAogICAgICAgICBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hw
b2ludCgpKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBl
ICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQ
YXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRy
KAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNW
YWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2Vs
bCkgfCBTcGVjT2JqZWN0LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1
cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGls
ZCkubV90eXBlICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFn
R1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0g
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxk
LCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAg
IHN0cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBh
eWxvYWRHUFIpLCByaWdodENoaWxkLCAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE0MTIsMTIgKzE0
MDQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIAog
ICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBu
b3QgYmUgYSBjZWxsLiBDaGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3ZlIHRo
YXQgaXQgaXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLgotICAgIGlmICgobV9zdGF0ZS5mb3JO
b2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgJiB+U3BlY090aGVyKSB7CisgICAg
aWYgKG5lZWRzVHlwZUNoZWNrKHJpZ2h0Q0hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewog
ICAgICAgICBtX2ppdC5tb3ZlKG9wMlRhZ0dQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQu
b3IzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BS
LCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwg
U3BlY0NlbGwgfCBTcGVjT3RoZXIsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7
CkBAIC0xNDQ5LDI3ICsxNDQxLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZU9iamUKICAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9j
dXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAobV9z
dGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2Jq
ZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMp
OwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3RhdGUu
Zm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0g
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCAKQEAgLTE0ODUsMjcgKzE0NzEsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVBlZXBIb2xlT2JqZQogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gs
IHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAg
ICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwp
ICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwg
cmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJU
YWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmpl
Y3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVj
dHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVH
UFIpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBT
cGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
LSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxv
YWRHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1Zh
bHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxs
KSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVH
UFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiks
IHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTIwLDcgKzE1MDIsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8gV2Uga25v
dyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwu
IENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBlaXRo
ZXIgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGls
ZCkubV90eXBlICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIpCisgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhyaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCiAgICAgICAgIHJpZ2h0Tm90
Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGp1bXAobm90VGFrZW4sIEZv
cmNlSnVtcCk7CkBAIC0xNTI5LDggKzE1MTEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUGVlcEhvbGVPYmplCiAgICAgICAgIG1faml0Lm1vdmUob3AyVGFnR1BSLCByZXN1bHRHUFIp
OwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBCYWRUeXBlLCBKU1Zh
bHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLAorICAgICAgICB0
eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRH
UFIpLCByaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKICAgICAgICAgICAgIG1faml0
LmJyYW5jaDMyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVz
dWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6TnVsbFRhZykpKTsKQEAgLTE1ODcsOSArMTU2OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIo
KSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5vZGVVc2UsIGJvb2wgbmVlZFNw
ZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhl
ckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNlKQogewotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGVVc2UpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UsIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQo
dGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgR1BS
UmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKQEAgLTE1OTksMjYgKzE1
ODEsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIGlm
IChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsK
ICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxh
dGlvbldhdGNocG9pbnQoKSk7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVl
VGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNl
LCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BS
UmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxh
dGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLAotICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBF
X0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9h
ZEdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwKKyAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisg
ICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCkBAIC0xNjQwLDEw
ICsxNjIwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAg
ICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAKICAgICBDT01QSUxFX0FTU0VSVCgoSlNWYWx1ZTo6
VW5kZWZpbmVkVGFnIHwgMSkgPT0gSlNWYWx1ZTo6TnVsbFRhZywgVW5kZWZpbmVkVGFnX09SXzFf
RVFVQUxTX051bGxUYWcpOwotICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgeworICAgIGlm
IChuZWVkc1R5cGVDaGVjayhub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKICAgICAg
ICAgbV9qaXQubW92ZSh2YWx1ZVRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIG1f
aml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXls
b2FkR1BSKSwgbm9kZVVzZSwgCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCBTcGVjQ2VsbCB8
IFNwZWNPdGhlciwKICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9h
ZEdQUiwgCkBAIC0xNjU4LDI2ICsxNjM5LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RPck90aGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3Qo
Tm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJv
b2xlYW4oKSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAg
Y2FzZSBCb29sZWFuVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCB2YWx1ZSk7CiAgICAgICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWUuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0T3JP
dGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCksIAotICAgICAgICAgICAgIWlzT2JqZWN0T3JP
dGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7
CisgICAgICAgIAorICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogeworICAgICAgICBjb21waWxl
T2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KSB7CisgICAgICAgIAorICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIG1faml0LmNvbXBhcmUz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKICAgICAgICAgYm9vbGVhblJlc3Vs
dChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAg
IAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CkBAIC0x
Njg5LDMwICsxNjczLDM4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90
KE4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMs
IGFyZzEsIGZhbHNlKTsKLSAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7Ci0g
ICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7Ci0gICAgR1BSUmVn
IHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgIGNhc2UgVW50eXBl
ZFVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgYXJnMSwgZmFsc2Up
OworICAgICAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7CisgICAgICAgIEdQ
UlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CiAgICAgICAgIAotICAgIGFy
ZzEudXNlKCk7CisgICAgICAgIGFyZzEudXNlKCk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBz
bG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMVRhZ0dQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKKyAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWws
IGFyZzFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7CiAgICAgCi0g
ICAgbV9qaXQubW92ZShhcmcxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAg
IG1faml0Lm1vdmUoYXJnMVBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogCi0gICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHNs
b3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0UGF5bG9hZEdQ
UiwgYXJnMVRhZ0dQUiwKLSAgICAgICAgICAgIGFyZzFQYXlsb2FkR1BSKSk7CisgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAg
ICAgICAgIHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0
UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwKKyAgICAgICAgICAgICAgICBhcmcxUGF5bG9hZEdQUikp
OwogICAgIAotICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQ
Uik7Ci0gICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRH
UFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCbG9ja0luZGV4IHRh
a2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBC
bG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuKQogewotICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAg
ICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKQEAgLTE3MjIs
MjMgKzE3MTQsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgog
ICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlk
KCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChz
cGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNo
ZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCAKLSAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVl
UGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVD
SygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIp
LCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5i
cmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkp
KTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRy
KAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCAoflNwZWND
ZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzY3JhdGNo
R1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0LmJyYW5jaFRl
c3Q4KEpJVENvbXBpbGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7CiAKQEAgLTE3NTUsMTAgKzE3NDUsMTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwog
ICAgIAogICAgIENPTVBJTEVfQVNTRVJUKChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgfCAxKSA9PSBK
U1ZhbHVlOjpOdWxsVGFnLCBVbmRlZmluZWRUYWdfT1JfMV9FUVVBTFNfTnVsbFRhZyk7Ci0gICAg
aWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGVV
c2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlVGFn
R1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHNj
cmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpOdWxsVGFnKSkpOworICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVn
cyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVj
T3RoZXIsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOwogICAgIH0K
IAogICAgIGp1bXAobm90VGFrZW4pOwpAQCAtMTc3MSw3ICsxNzYzLDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2Rl
LT50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS0+bm90
VGFrZW5CbG9ja0luZGV4KCk7CiAKLSAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVh
bigpKSB7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNl
IEJvb2xlYW5Vc2U6IHsKICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0
aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogCkBAIC0xNzg5LDE0ICsx
NzgyLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgeworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogewog
ICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLT5jaGlsZDEoKSwgdGFrZW4sIG5v
dFRha2VuLCAKICAgICAgICAgICAgICFpc09iamVjdE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
IHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
IHsKKyAgICBjYXNlIE51bWJlclVzZToKKyAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGJv
b2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0YWtlbiA9
PSBuZXh0QmxvY2soKSkgewpAQCAtMTgyMCwzMiArMTgxNCw0MCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIHZhbHVl
LmZpbGwoKTsKLSAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICBH
UFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgIGNhc2UgVW50
eXBlZFVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIHZhbHVlLmZpbGwoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BS
ID0gdmFsdWUudGFnR1BSKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1
ZS5wYXlsb2FkR1BSKCk7CiAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAg
Ci0gICAgdXNlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgdXNlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBmYXN0UGF0aCA9IG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9IG1f
aml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwotCi0gICAgZmFzdFBhdGgu
bGluaygmbV9qaXQpOwotICAgIGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgdmFsdWVQ
YXlsb2FkR1BSLCBub3RUYWtlbik7Ci0gICAganVtcCh0YWtlbiwgRm9yY2VKdW1wKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdFBhdGggPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxl
cjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQu
YnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7CiAKLSAgICBzbG93UGF0aC5saW5r
KCZtX2ppdCk7Ci0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICBj
YWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIHZhbHVl
VGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKKyAgICAgICAgZmFzdFBhdGgubGluaygmbV9qaXQpOworICAgICAgICBicmFuY2hU
ZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlUGF5bG9hZEdQUiwgbm90VGFrZW4pOworICAg
ICAgICBqdW1wKHRha2VuLCBGb3JjZUp1bXApOworCisgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCB2
YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOwogICAgIAotICAgIGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9u
WmVybywgcmVzdWx0R1BSLCB0YWtlbik7Ci0gICAganVtcChub3RUYWtlbik7CisgICAgICAgIGJy
YW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtlbik7CisgICAg
ICAgIGp1bXAobm90VGFrZW4pOwogICAgIAotICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2Fs
bGVkRXhwbGljaXRseSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQmFzZU9wZXJhbmRUeXBlLCB0eXBl
bmFtZSBQcm9wZXJ0eU9wZXJhbmRUeXBlLCB0eXBlbmFtZSBWYWx1ZU9wZXJhbmRUeXBlLCB0eXBl
bmFtZSBUYWdUeXBlPgpAQCAtMTkzMCwxNCArMTkzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElkZW50aXR5
OiB7Ci0gICAgICAgIC8vIFRoaXMgY291bGQgYmUgZG9uZSBhIGxvdCBiZXR0ZXIuIFdlIHRha2Ug
dGhlIGNoZWFwIHdheSBvdXQgYmVjYXVzZSBJZGVudGl0eQotICAgICAgICAvLyBpcyBvbmx5IGdv
aW5nIHRvIHN0aWNrIGFyb3VuZCBhZnRlciBDU0UgaWYgd2UgaGFkIHByZWRpY3Rpb24gd2VpcmRu
ZXNzLgotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAgIG1faml0Lm1vdmUob3BlcmFuZC50
YWdHUFIoKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgbV9qaXQubW92ZShvcGVyYW5kLnBh
eWxvYWRHUFIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0x
OTU1LDYgKzE5NTAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRyYWNraW5nIHRoaXMgdmFyaWFibGUgYW5k
IGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAgICAgICAgICAvLyBjYW5ub3QgaGF2ZSBi
ZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KICAgICAgICAgICAg
IGlmICh2YWx1ZS5pc0NsZWFyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHRyYXAgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzgzCiAgICAgICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTIxODMsMTkgKzIxODAs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBDaGVja051bWJlcjogewotICAgICAgICBp
ZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3R5cGUpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcDEudGFnR1BSKCksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDEudGFnR1BSKCksIG9wMS5wYXls
b2FkR1BSKCkpLCBub2RlLT5jaGlsZDEoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDEudGFnR1BSKCksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9q
aXQpOwotICAgICAgICB9Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAg
IGNvbXBpbGVBZGQobm9kZSk7CkBAIC0yMjE0LDggKzIxOTgsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBcml0
aERpdjogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRo
bWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAg
ICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgc3dpdGNo
IChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogewogI2lm
IENQVShYODYpCiAgICAgICAgICAgICBjb21waWxlSW50ZWdlckFyaXRoRGl2Rm9yWDg2KG5vZGUp
OwogI2VsaWYgQ1BVKEFQUExFX0FSTVY3UykKQEAgLTIyMjUsMTYgKzIyMDksMjQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogI2VuZGlmCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxKTsKLQotICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICAg
ICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgIG1faml0LmRpdkRvdWJsZShyZWcx
LCByZWcyLCByZXN1bHQuZnByKCkpOwotCi0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnBy
KCksIG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOworICAgICAgICAg
ICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAgICAgICAgICBtX2ppdC5kaXZEb3VibGUo
cmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZG91
YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMjQ0LDggKzIyMzYsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aEFiczog
ewotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JB
cml0aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkg
eworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBj
YXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0y
MjU5LDE4ICsyMjUxLDI3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEZQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5hYnNEb3Vi
bGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0
LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE51bWJlclVzZTogewor
ICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbV9qaXQuYWJzRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBB
cml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAg
ICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwpAQCAtMjI4OSwzNiArMjI5MCw0NCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAg
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGRvbmU7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBv
cDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBv
cDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBv
cDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBv
cDEuZnByKCksIG9wMi5mcHIoKSk7CiAgICAgICAgIAotICAgICAgICAvLyBvcDIgaXMgZWF0aGVy
IHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlzIE5hTgotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBvcDJMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8g
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKKyAgICAgICAg
ICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBvbmUgb3Igb25lIG9mIHRoZW4gaXMgTmFO
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJMZXNzID0gbV9qaXQuYnJhbmNo
RG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wMS5mcHIo
KSwgb3AyLmZwcigpKTsKICAgICAgICAgCi0gICAgICAgIC8vIFVub3JkZXJlZCBjYXNlLiBXZSBk
b24ndCBrbm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1cmUgTmFOIGJ5IGFk
ZGluZyAKLSAgICAgICAgLy8gb3AxICsgb3AyIGFuZCBwdXR0aW5nIGl0IGludG8gcmVzdWx0Lgot
ICAgICAgICBtX2ppdC5hZGREb3VibGUob3AxLmZwcigpLCBvcDIuZnByKCksIHJlc3VsdC5mcHIo
KSk7Ci0gICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAvLyBV
bm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGljaCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1h
bnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCisgICAgICAgICAgICAvLyBvcDEgKyBvcDIgYW5kIHB1
dHRpbmcgaXQgaW50byByZXN1bHQuCisgICAgICAgICAgICBtX2ppdC5hZGREb3VibGUob3AxLmZw
cigpLCBvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBkb25lLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwogICAgICAgICAKLSAgICAgICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7Ci0g
ICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AyLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAg
ICAgICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91Ymxl
KG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChvcDEuZnBy
KCkgIT0gcmVzdWx0LmZwcigpKSB7Ci0gICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1w
KCkpOworICAgICAgICAgICAgaWYgKG9wMS5mcHIoKSAhPSByZXN1bHQuZnByKCkpIHsKKyAgICAg
ICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9q
aXQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgb3AxTGVzcy5saW5r
KCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAKLSAgICAgICAgZG91YmxlUmVzdWx0KHJl
c3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigp
LCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApAQCAtMjk4MSwxMyArMjk5MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgRlBSUmVnIHZhbHVlRlBSID0gdmFs
dWUuZnByKCk7CiAKLSAgICAgICAgICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0
byBob2lzdCB0aGVtIGludG8KLSAgICAgICAgICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kLgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
ICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwg
dmFsdWVGUFIsIHZhbHVlRlBSKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBERkdfVFlQ
RV9DSEVDSygKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCBub2RlLT5jaGlsZDIoKSwg
U3BlY1JlYWxOdW1iZXIsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCB2YWx1ZUZQUiwgdmFsdWVGUFIp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSks
IHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xv
d1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJm
bHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKQEAgLTMyMzUsNyArMzI0MCw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICAgICAgLy8gSXQncyBy
ZWFsbHkgcHJvZml0YWJsZSB0byBzcGVjdWxhdGUgaW50ZWdlciwgc2luY2UgaXQncyByZWFsbHkg
Y2hlYXAsCiAgICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSBy
ZWFsIHdvcmssIGFuZCB3ZSBlbWl0IGEgbG90IGxlc3MgY29kZS4KICAgICAgICAgICAgIApAQCAt
MzI0OCwzOCArMzI1NCw0NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewor
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgb3AxKTsKKyAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIG9wMSwgZmFsc2UpOwogICAgICAgICAK
LSAgICAgICAgLy8gRklYTUU6IEFkZCBzdHJpbmcgc3BlY3VsYXRpb24gaGVyZS4KLSAgICAgICAg
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgb3AxKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFBheWxvYWQodGhpcywgb3AxLCBmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICBH
UFJSZWcgb3AxVGFnR1BSID0gb3AxLnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgb3AxUGF5bG9h
ZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBy
ZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0
UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvcDFUYWdHUFIgPSBvcDEudGFnR1BS
KCk7CisgICAgICAgICAgICBHUFJSZWcgb3AxUGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwog
ICAgICAgICAKLSAgICAgICAgb3AxLnVzZSgpOworICAgICAgICAgICAgb3AxLnVzZSgpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKCEobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjQm9vbGVhbikpKSB7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKG9wMVRhZ0dQUiwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3Ax
UGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmlt
aXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGlmICghKG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjTnVtYmVyIHwgU3BlY0Jvb2xlYW4pKSkgewor
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxVGFnR1BSLCByZXN1bHRUYWdHUFIpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDFQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZtX2pp
dCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVRhZ0dQUiwgcmVzdWx0VGFnR1BSKTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7Cisg
ICAgICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShvcDFUYWdHUFIsIHJlc3VsdFRhZ0dQUik7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShvcDFQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBub3RQcmltaXRpdmUsIHRoaXMsIG9w
ZXJhdGlvblRvUHJpbWl0aXZlLAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpKTsK
LSAgICAgICAgfQorICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBub3RQ
cmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0aXZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSwgb3AxVGFn
R1BSLCBvcDFQYXlsb2FkR1BSKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC0zMzYzLDEzICszMzc1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBF
UzogewogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wZXJhbmQo
dGhpcywgdXNlKTsKICAgICAgICAgICAgICAgICAgICAgRlBSUmVnIG9wRlBSID0gb3BlcmFuZC5m
cHIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbiht
X3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRv
IGhvaXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRlRG91
YmxlT3BlcmFuZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjUmVhbE51bWJlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CiAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShvcEZQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJsZSkgKiBvcGVyYW5kSWR4KSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQzMiwxMyArMzQ0MCw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJM
RV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3BlcmFuZCh0aGlzLCB1c2UpOwogICAgICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9w
ZXJhbmQuZnByKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlv
bihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBuZWVkIGEgd2F5IG9mIHByb2ZpbGluZyB0aGVzZSwgYW5kIHdlIG5lZWQgdG8g
aG9pc3QgdGhlbSBpbnRvCi0gICAgICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQuCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVh
bE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KCksIDAsIHVzZSwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShvcEZQUiwg
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyICsgb3BlcmFuZElkeCkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMzYzOSwxNSArMzY0Myw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ29udmVydFRo
aXM6IHsKLSAgICAgICAgaWYgKGlzT2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUpOwotICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlz
VmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIE90aGVyVXNlOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CiAgICAgICAgICAgICAKQEAgLTM2NTUsMjMgKzM2NTIsMzIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnIHwgMSkgPT0gSlNWYWx1ZTo6TnVsbFRhZywg
VW5kZWZpbmVkVGFnX09SXzFfRVFVQUxTX051bGxUYWcpOwotICAgICAgICAgICAgbV9qaXQubW92
ZSh0aGlzVmFsdWVUYWdHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgbV9qaXQub3IzMihU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXJk
LiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gc2F2ZSB0aGUgdmFsdWUsIGJ1dCB3ZSBjYW4ndCBxdWl0
ZSBkbyBpdCwKLSAgICAgICAgICAgIC8vIHNpbmNlIHRoaXMgb3BlcmF0aW9uIGRvZXMgbm90IG90
aGVyd2lzZSBnZXQgdGhlIHBheWxvYWQuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7Cisg
ICAgICAgICAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNPdGhlcikp
IHsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZVRhZ0dQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgaGFyZC4gSXQgd291bGQgYmUgYmV0dGVy
IHRvIHNhdmUgdGhlIHZhbHVlLCBidXQgd2UgY2FuJ3QgcXVpdGUgZG8gaXQsCisgICAgICAgICAg
ICAgICAgLy8gc2luY2UgdGhpcyBvcGVyYXRpb24gZG9lcyBub3Qgb3RoZXJ3aXNlIGdldCB0aGUg
cGF5bG9hZC4KKyAgICAgICAgICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKCksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT3RoZXIsCisgICAgICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRh
ZykpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxUaGlzT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBjZWxsUmVzdWx0
KHNjcmF0Y2hHUFIsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVk
aWN0aW9uKCkpKSB7CisgICAgICAgIGNhc2UgT2JqZWN0VXNlOiB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKCFpc09iamVjdFNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHRoaXNWYWx1ZUdQUiksIG5vZGUt
PmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxl
cjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKKyAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAg
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgp
LCBTcGVjT2JqZWN0LAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUpOwogICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTM2ODAsMTcgKzM2ODYsMjUg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNW
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB0aGlzVmFsdWVUYWdH
UFIgPSB0aGlzVmFsdWUudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyB0aGlzVmFsdWVQYXlsb2Fk
R1BSID0gdGhpc1ZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgCi0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsK
LSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29udmVydFRoaXMsIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9h
ZC5ncHIoKSwgdGhpc1ZhbHVlVGFnR1BSLCB0aGlzVmFsdWVQYXlsb2FkR1BSKTsKLSAgICAgICAg
Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CisgICAgICAg
IGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVUYWdH
UFIgPSB0aGlzVmFsdWUudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlUGF5
bG9hZEdQUiA9IHRoaXNWYWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlc3Vs
dDIgcmVzdWx0VGFnKHRoaXMpOworICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQo
dGhpcyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRUaGlzLCBy
ZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIHRoaXNWYWx1ZVRhZ0dQUiwgdGhp
c1ZhbHVlUGF5bG9hZEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkBAIC0zOTA2LDcgKzM5MjAsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTM5MjYsMjUgKzM5NDEsMzIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgYmFzZVRhZ0dQUiA9IGJhc2UudGFn
R1BSKCk7Ci0gICAgICAgIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiA9IGJhc2UucGF5bG9hZEdQUigp
OworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VUYWdH
UFIgPSBiYXNlLnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VQYXlsb2FkR1BSID0g
YmFzZS5wYXlsb2FkR1BSKCk7CiAKLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFRhZyh0aGlzKTsK
LSAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBHUFJSZWcg
cmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0UGF5
bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZXN1bHQgcmVz
dWx0VGFnKHRoaXMpOworICAgICAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRQYXlsb2FkKHRoaXMp
OworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsK
IAotICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAg
Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJy
YW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYmFzZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwg
PSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGJhc2VUYWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgICAgIAotICAgICAgICBjYWNoZWRHZXRC
eUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCByZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2Vs
bCwgRG9udFNwaWxsKTsKKyAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdp
biwgYmFzZVRhZ0dQUiwgYmFzZVBheWxvYWRHUFIsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9h
ZEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250U3BpbGwpOwogICAg
ICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRH
UFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIs
IG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICB9CiAKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtMzk2NywxMyArMzk4OSw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTog
ewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1
YnNldE9mKG5vZGUtPnN0cnVjdHVyZVNldCgpKQotICAgICAgICAgICAgJiYgaXNDZWxsU3BlY3Vs
YXRpb24odmFsdWUubV90eXBlKSkgewotICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uID0gbm9kZS0+b3AoKSA9PSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUg
PyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBkaXJlY3Rpb24pOwog
ICAgICAgICAKQEAgLTQwMzIsNiArNDA0Nyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPSyA9IG1faml0LmJy
YW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMS5ncHIo
KSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobm9kZS0+c3RydWN0
dXJlKCkpKTsKICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogICAgICAgICBpc09LLmxpbmso
Jm1faml0KTsKKyNlbHNlCisgICAgICAgIHNwZWN1bGFjZUNlbGwobm9kZS0+Y2hpbGQxKCkpOwog
I2VuZGlmCiAKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC00MDM5LDYgKzQwNTYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgQVNTRVJUKGlzS25vd25D
ZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVu
Y2VUcmFuc2l0aW9uKAogICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5jb2RlT3JpZ2luT3du
ZXIoKSwKQEAgLTQzOTAsMTggKzQ0MDgsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKKyAgICAgICAgQVNT
RVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBT
dHJpbmdVc2UpOworCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0
LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgIT0gVW50eXBlZFVzZSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIGlzTm90
Q2VsbCk7CiAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KCkgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewogICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhwYXlsb2FkR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
SklUQ29tcGlsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQotICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIG5vdFN0cmluZyk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IFN0cmluZ1VzZSkKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhK
U1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmlu
Zywgbm90U3RyaW5nKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSksIHJlc3VsdEdQUik7
CiAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAg
ICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBTdHJpbmdVc2UpIHsKICAgICAg
ICAgICAgICAgICBub3RTdHJpbmcubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVHlwZU9mLCByZXN1bHRHUFIsIHBheWxvYWRHUFIpOwogICAgICAg
ICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKQEAgLTQ0MTEsNyArNDQz
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkgeworICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7CiAgICAgICAgICAg
ICBpc05vdENlbGwubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIHRhZ0dQUiwgdGVtcEdQUik7CkBAIC00OTI4LDYgKzQ5NDgsMTAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9qaXQu
Z3JhcGgoKSwgbm9kZSwgc3BlY3VsYXRlKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAg
ICAgIGJyZWFrOworCiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgIC8vIFRoaXMgaXMg
YSBuby1vcC4KICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0MzQy
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDI4ICszOSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxJbnRlZ2VyKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKK0dQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1
cm5Gb3JtYXQpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUt
PnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFTU0VSVCghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3Bl
Y0ludDMyKSk7CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVk
Z2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUo
KTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoZWRn
ZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdwcik7CisgICAgICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uu
bm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJl
YW0sIGdwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVn
ZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKKyAgICAg
ICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAgICAg
ICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdl
Lm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOwotICAgICAgICAg
ICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CkBAIC0x
MTcsMjcgKzExOSwyNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGUq
CiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGUqIG5v
ZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgZWRnZSkKIHsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVy
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxS
ZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2
aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgp
KSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBHUFJSZWcgZ3ByID0gYWxs
b2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAg
ICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29u
c3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkp
IHsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRh
Rm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051
bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJl
ckNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3Rh
bnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IGpzVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJDb25zdGFudChu
b2RlKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFz
RG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUoanNW
YWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0Nv
bnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkp
LCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICB9CkBAIC04MDIsMTggKzgwNCwyMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiB9CiAKIHRlbXBsYXRlPGJvb2wg
c3RyaWN0PgotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwo
Tm9kZSogbm9kZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRl
cm5hbChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBk
YXRhTG9nRigiU3BlY0ludEAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFMb2dGKCJT
cGVjSW50QCVkICAgIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlw
ZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25v
d25JbnQzMlVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjSW50MzIpKTsKKyAgICB2YWx1ZS5m
aWx0ZXIoU3BlY0ludDMyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
ZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dl
bmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKLSAgICAgICAgaWYgKChu
b2RlLT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQobm9kZSkpIHx8IGluZm8uc3Bp
bGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgIGlmICgoZWRnZS0+aGFz
Q29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgfHwgaW5mby5zcGls
bEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLCBkaXJlY3Rp
b24pOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAg
ICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKQEAgLTgyMSwxMCArODI2LDEwIEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgCiAgICAgICAgIEdQUlJl
ZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7
CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBtX2dwcnMu
cmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAg
ICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSk7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdw
cik7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSk7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJD
b25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIpOwogICAgICAgICAgICAgaW5mby5maWxsSW50ZWdl
cigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0
SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7CkBAIC04NjQsOCArODY5LDggQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICAvLyBDaGVjayB0
aGUgdmFsdWUgaXMgYW4gaW50ZWdlci4KICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7
CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0
aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhncHIpLCBub2RlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGdw
ciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAg
aWYgKHR5cGUgJiB+U3BlY0ludDMyKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9u
KTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpT
SW50ZWdlcik7CiAgICAgICAgIC8vIElmICFzdHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAg
ICAgICBpZiAoIXN0cmljdCkgewpAQCAtOTEwLDEwICs5MTUsMTAgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgog
ICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOiB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNDb25z
dGFudCgpICYmIGlzSW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFz
Q29uc3RhbnQoKSAmJiBpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAg
ICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29u
c3RhbnQobm9kZSkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
MzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgQVNTRVJU
KGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwg
Z3ByKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAg
ICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQpAQCAtOTM2LDM1ICs5NDEsMzggQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIH0KIH0KIAotR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGUqIG5vZGUsIERhdGFGb3JtYXQm
IHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0
dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgcmV0dXJu
IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDxmYWxzZT4obm9kZSwgcmV0dXJuRm9ybWF0LCBkaXJl
Y3Rpb24pOworICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+KGVkZ2Us
IHJldHVybkZvcm1hdCwgZGlyZWN0aW9uKTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlSW50U3RyaWN0KE5vZGUqIG5vZGUpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoRWRnZSBlZGdlKQogewogICAgIERhdGFGb3JtYXQgbXVz
dEJlRGF0YUZvcm1hdEludGVnZXI7Ci0gICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJ
bnRJbnRlcm5hbDx0cnVlPihub2RlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRT
cGVjdWxhdGlvbik7CisgICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5h
bDx0cnVlPihlZGdlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlv
bik7CiAgICAgUkVMRUFTRV9BU1NFUlQobXVzdEJlRGF0YUZvcm1hdEludGVnZXIgPT0gRGF0YUZv
cm1hdEludGVnZXIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUZQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZShOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24pCitGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUo
RWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYgREZHX0VO
QUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjRG91YmxlQCVkICAgIiwgbm9k
ZS0+aW5kZXgoKSk7CisgICAgZGF0YUxvZ0YoIlNwZWNEb3VibGVAJWQgICAiLCBlZGdlLT5pbmRl
eCgpKTsKICNlbmRpZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUo
bm9kZSkubV90eXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2Rl
LT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUu
Zm9yTm9kZShlZGdlKTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOwor
ICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBLbm93bk51bWJlclVzZSB8fCAhKHZhbHVlLm1f
dHlwZSAmIH5TcGVjTnVtYmVyKSk7CisgICAgdmFsdWUuZmlsdGVyKFNwZWNOdW1iZXIpOworICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKIAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5v
bmUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVk
Z2UtPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgp
OwogCi0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChzdGF0aWNfY2FzdDxk
b3VibGU+KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSkpLCBncHIpOworICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9J
bnQ2NChzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgp
KSkpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZw
cik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKQEAgLTk3Miw5ICs5ODAsOSBAQCBG
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAg
aW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZnByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9k
ZSkpIHsKKyAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewog
ICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9J
bnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50
NjQodmFsdWVPZk51bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkpLCBncHIpOwogICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1
bmxvY2soZ3ByKTsKIApAQCAtMTAzOCw4ICsxMDQ2LDggQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlRG91YgogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdl
ciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVH
cHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKLSAgICAgICAgaWYgKCFpc051
bWJlclNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAodHlwZSAmIH5TcGVjTnVtYmVyKQorICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3By
KSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVl
R3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogCiAgICAg
ICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMg
YSBKU1ZhbHVlCiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdwcik7CkBAIC0x
MTAyLDEzICsxMTEwLDE2IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURv
dWIKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwo
Tm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbChFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0
YUxvZ0YoIlNwZWNDZWxsQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7CisgICAgZGF0YUxvZ0YoIlNw
ZWNDZWxsQCVkICAgIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlw
ZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25v
d25DZWxsVXNlIHx8ICEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7CisgICAgdmFsdWUuZmls
dGVyKFNwZWNDZWxsKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRn
ZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVy
YXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSkgewpAQCAtMTEyMCw4ICsxMTMxLDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRl
KCk7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAgICAgICBpZiAoZWRn
ZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVP
ZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxs
KCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwpA
QCAtMTEzNiw4ICsxMTQ3LDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Q2VsbAogICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVh
bFJlZ2lzdGVyKSwgZ3ByKTsKIAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwg
Z3ByLCBEYXRhRm9ybWF0SlMpOwotICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIp
LCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgaWYgKHR5cGUg
JiB+U3BlY0NlbGwpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOwogICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAg
ICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xMTUyLDggKzExNjMsOCBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsK
ICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdw
cik7Ci0gICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2VsbCkKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRn
ZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlciksIGRpcmVjdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3By
OwogICAgIH0KQEAgLTExNzcsMTMgKzExODgsMTUgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQ2VsbAogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQm9vbGVhbihOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRn
ZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiU3BlY0Jvb2xAJWQgICAiLCBub2RlLT5pbmRleCgp
KTsKKyAgICBkYXRhTG9nRigiU3BlY0Jvb2xAJWQgICAiLCBlZGdlLT5pbmRleCgpKTsKICNlbmRp
ZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBl
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdl
KTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIHZhbHVlLmZp
bHRlcihTcGVjQm9vbGVhbik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkpIHsKQEAgLTExOTUsOCArMTIwOCw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxv
Y2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYg
KGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZh
bHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlz
Qm9vbGVhbigpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwg
Z3ByKTsKQEAgLTEyMTEsOSArMTIyNCw5IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2wKICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgaWYgKCFpc0Jvb2xlYW5TcGVjdWxh
dGlvbih0eXBlKSkgeworICAgICAgICBpZiAodHlwZSAmIH5TcGVjQm9vbGVhbikgewogICAgICAg
ICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVl
RmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3Bl
Y3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BS
UmVnKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwg
U3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlk
R1BSUmVnKSwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0KICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVh
bik7CkBAIC0xMjMwLDkgKzEyNDMsOSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sCiAgICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsKICAgICAgICAgR1BSUmVnIGdwciA9
IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIGlmICghaXNC
b29sZWFuU3BlY3VsYXRpb24odHlwZSkpIHsKKyAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0Jvb2xl
YW4pIHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdw
ciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ss
IGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CiAgICAgICAgICAgICBtX2ppdC54b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwog
ICAgICAgICB9CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFG
b3JtYXRKU0Jvb2xlYW4pOwpAQCAtMTI5MCwzNSArMTMwMywyNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAobV9zdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKLSAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwKLSAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVj
T2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGlsZDIoKSwgU3BlY09iamVjdCwgbV9q
aXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAg
ICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLAotICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
LSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEo
KSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzMjYsMTQgKzEzMzAsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKIAogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxkMigpLAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5j
aGlsZDIoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLT5jaGls
ZDIoKSwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTEzNTQsNyArMTM1NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdo
dENoaWxkKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQp
OwotICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkKTsKKyAgICBKU1ZhbHVl
T3BlcmFuZCBvcDIodGhpcywgcmlnaHRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBvcDFHUFIg
PSBvcDEuZ3ByKCk7CkBAIC0xMzYzLDI3ICsxMzY0LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RUb09iamUKICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsgCiAgICAgICAgIG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAg
ICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3Qp
IHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVD
SygKKyAgICAgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRD
aGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5n
cHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBF
X0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwg
bGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQs
CiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xMzk5LDI3ICsxMzk0LDIxIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRo
aXMgYnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBpZiAobV9qaXQuZ3Jh
cGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7IAogICAgICAgICBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hw
b2ludCgpKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBl
ICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRD
aGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBE
RkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hp
bGQsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9
IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQ
Uik7Ci0gICAgICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFNw
ZWNDZWxsKSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQs
Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCiAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgCkBAIC0xNDM3LDEyICsxNDI2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGlu
IHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3Qgbm90IGJlIGEgY2VsbC4gQ2hlY2sgaWYgdGhh
dCBpcyBlbm91Z2ggdG8KICAgICAvLyBwcm92ZSB0aGF0IGl0IGlzIGVpdGhlciBudWxsIG9yIHVu
ZGVmaW5lZC4KLSAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiB+
U3BlY0NlbGwpICYgflNwZWNPdGhlcikgeworICAgIGlmIChuZWVkc1R5cGVDaGVjayhyaWdodENo
aWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKICAgICAgICAgbV9qaXQubW92ZShvcDJHUFIs
IHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BS
KSwgcmlnaHRDaGlsZC5ub2RlKCksCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVyLAogICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCByZXN1bHRHUFIsCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CkBAIC0xNDY0LDcgKzE0NTMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9
IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOwotICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0
aGlzLCByaWdodENoaWxkKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgcmlnaHRDaGls
ZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgIAogICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CkBAIC0xNDczLDI3ICsx
NDYyLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAK
ICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxp
ZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQo
c3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxl
ZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIo
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAg
ICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwgbV9qaXQuYnJh
bmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BS
UmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobGVmdENo
aWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1f
aml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAor
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAg
LTE1MDksMjcgKzE0OTIsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
T2JqZQogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQg
bXVzdCBiZSBhIGNlbGwuIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvciht
X2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlmICgo
bV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFNwZWNDZWxsKSAmIH5TcGVjT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCi0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNP
YmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhp
cyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAoKG1fc3Rh
dGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkg
ewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBl
LCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
LSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8
IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAg
LTE1NDQsNyArMTUyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9i
amUKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENo
aWxkIG11c3Qgbm90IGJlIGEgY2VsbC4gQ2hlY2sgaWYgdGhhdCBpcyBlbm91Z2ggdG8KICAgICAv
LyBwcm92ZSB0aGF0IGl0IGlzIGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZC4KLSAgICBpZiAoKG1f
c3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwpICYgflNwZWNPdGhl
cikKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090
aGVyKSkKICAgICAgICAgcmlnaHROb3RDZWxsLmxpbmsoJm1faml0KTsKICAgICBlbHNlIHsKICAg
ICAgICAganVtcChub3RUYWtlbiwgRm9yY2VKdW1wKTsKQEAgLTE1NTMsOSArMTUzMCw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAgICAgbV9qaXQubW92
ZShvcDJHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CiAgICAgICAgIAot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJl
Z3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAg
ICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENo
aWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsCiAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgfQpAQCAtMTYw
OSw5ICsxNTg1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAog
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KEVkZ2Ugbm9kZVVzZSwgYm9v
bCBuZWVkU3BlY3VsYXRpb25DaGVjaykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmpl
Y3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5vZGVVc2UpCiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZVVzZSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZVVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC0xNjE5LDI3ICsxNTk1LDIyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2
YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50
KCkpOwotCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2Us
Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+
U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVj
dHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsK
IAotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLAotICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERG
R19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNl
LCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BS
LAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IAogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDgoCkBAIC0xNjYwLDExICsxNjMxLDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0
KTsKIAotICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgeworICAgIGlmIChuZWVkc1R5cGVD
aGVjayhub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKICAgICAgICAgbV9qaXQubW92
ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2Us
IAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIsIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKQEAgLTE2NzgsMTIgKzE2NDks
MTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOb2RlKiBub2RlKQogewotICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAg
IGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLT5jaGlsZDEoKSwKLSAgICAgICAg
ICAgICFpc09iamVjdE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fdHlwZSkpOworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOiB7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAg
ICAgCisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgdmFsdWUpOwogICAgICAgICBtX2ppdC5jb21wYXJlMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCB2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0LmdwcigpKTsKQEAgLTE2OTEsNyArMTY2Myw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKKyAgICAgICAgCisg
ICAgY2FzZSBOdW1iZXJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMTcwMyw5ICsxNjc2
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwotICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkgewotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgY2FzZSBCb29sZWFuVXNlOiB7
CisgICAgICAgIGlmICghbmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNCb29sZWFu
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1
ZSk7CiAgICAgICAgICAgICAKQEAgLTE3MTYsNDEgKzE2ODgsNTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOyAvLyBGSVhNRTogV2UgY291bGQgcmV1c2UsIGJ1dCBvbiBzcGVjdWxhdGlvbiBmYWls
IHdvdWxkIG5lZWQgcmVjb3ZlcnkgdG8gcmVzdG9yZSB0YWcgKGFraW4gdG8gYWRkKS4KICAgICAg
ICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZh
bHNlKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModmFsdWUuZ3ByKCkpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVz
dDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNCb29sZWFuLCBt
X2ppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8s
IHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsK
ICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlVHJ1ZSkpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgYWRk
IGEgRGF0YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAg
ICAKLSAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAotICAgIGFyZzEu
dXNlKCk7CisgICAgICAgIGFyZzEudXNlKCk7CiAgICAgCi0gICAgbV9qaXQubW92ZShhcmcxR1BS
LCByZXN1bHRHUFIpOwotICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOworICAgICAgICBt
X2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LnhvcjY0KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJ
VENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpKTsKICAgICAKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAg
c2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwg
cmVzdWx0R1BSLCBhcmcxR1BSKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRv
Qm9vbGVhbiwgcmVzdWx0R1BSLCBhcmcxR1BSKSk7CiAgICAgCi0gICAgbV9qaXQueG9yNjQoVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOwot
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRP
YmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJ
bmRleCBub3RUYWtlbiwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmxvY2tJbmRleCB0
YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbikKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlVXNlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwogICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKQEAgLTE3NTksMjMgKzE3NDEsMTkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAK
LSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKLSAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hF
Q0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0Nl
bGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNo
UHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBt
X2ppdC5icmFuY2hUZXN0OChKSVRDb21waWxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCkBAIC0xNzkxLDEwICsxNzY5LDEyIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAKICAgICBub3RD
ZWxsLmxpbmsoJm1faml0KTsKICAgICAKLSAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsK
KyAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7
CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBtX2pp
dC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIG5vZGVVc2UsIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwp
KSk7CisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgbm9kZVVzZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIG1faml0LmJyYW5jaDY0KAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgfQogICAgIGp1bXAobm90VGFr
ZW4pOwogICAgIApAQCAtMTgwNiwxNCArMTc4NiwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUtPnRha2VuQmxv
Y2tJbmRleCgpOwogICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2Nr
SW5kZXgoKTsKICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9i
amVjdE9yT3RoZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLT5j
aGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCAKLSAgICAgICAgICAgICFpc09iamVjdE9yT3RoZXJT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAg
IHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBPYmplY3RPck90
aGVyVXNlOiB7CisgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUtPmNoaWxkMSgp
LCB0YWtlbiwgbm90VGFrZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKLSAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgCisg
ICAgY2FzZSBJbnQzMlVzZToKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEludDMyVXNlKSB7CiAgICAgICAgICAgICBib29sIGlu
dmVydCA9IGZhbHNlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodGFrZW4gPT0gbmV4
dEJsb2NrKCkpIHsKQEAgLTE4MzcsNTYgKzE4MTgsNjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEJyYW5jaChOb2RlKiBubwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICBjYXNlIEJvb2xlYW5V
c2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOwogICAgICAgICAKLSAgICBib29sIHByZWRpY3RCb29sZWFuID0gaXNCb29sZWFu
U3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSk7Ci0gICAgCi0gICAgaWYg
KHByZWRpY3RCb29sZWFuKSB7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm87CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQm9vbGVhblVz
ZSkgeworICAgICAgICAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3Bl
Y0Jvb2xlYW4pKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRp
dGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewotICAgICAgICAgICAg
ICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpaZXJvOwotICAgICAgICAgICAgICAgIEJs
b2NrSW5kZXggdG1wID0gdGFrZW47Ci0gICAgICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsK
LSAgICAgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Olplcm87CisgICAgICAgICAgICAgICAgICAgIEJs
b2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgICAgICAgICAgICAgIHRha2VuID0gbm90VGFr
ZW47CisgICAgICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRpb24s
IHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIodHJ1ZSksIHRha2VuKTsKLSAgICAgICAgICAgIGp1bXAo
bm90VGFrZW4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7Ci0gICAgICAgICAg
ICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4p
OworICAgICAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRpb24sIHZhbHVlR1BSLCBUcnVz
dGVkSW1tMzIodHJ1ZSksIHRha2VuKTsKKyAgICAgICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICAg
ICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2Vu
KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuanVtcCgpKTsK
LSAgICAgICAgfQotICAgICAgICB2YWx1ZS51c2UoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkgJiBTcGVjSW50MzIpIHsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKDApKSksIG5vdFRha2VuKTsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHRha2VuKTsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHR5cGVDaGVj
ayhKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbGVhbiwgbV9q
aXQuanVtcCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhbHVlLnVzZSgpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0ludDMy
KSB7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoMCkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHRha2VuKTsKKyAgICAgICAgICAgIH0KICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQm9vbGVhbikgewotICAgICAgICAgICAgYnJhbmNoNjQo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7Ci0gICAg
ICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
dGFrZW4pOwotICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKSAmIFNwZWNCb29sZWFuKSB7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7CisgICAgICAgICAg
ICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRh
a2VuKTsKKyAgICAgICAgICAgIH0KICAgICAKLSAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAg
ICAgICB2YWx1ZS51c2UoKTsKICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9v
bGVhbiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29s
ZWFuLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKICAgICAKLSAgICAgICAgYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIHRha2VuKTsKLSAgICAgICAganVtcChub3RUYWtlbik7
CisgICAgICAgICAgICBicmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3Vs
dEdQUiwgdGFrZW4pOworICAgICAgICAgICAganVtcChub3RUYWtlbik7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIG5vUmVzdWx0KG5vZGUs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKQEAgLTE5MDgsMTIgKzE4OTUsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIElkZW50aXR5OiB7Ci0gICAgICAgIC8vIFRoaXMgY291bGQgYmUgZG9uZSBhIGxv
dCBiZXR0ZXIuIFdlIHRha2UgdGhlIGNoZWFwIHdheSBvdXQgYmVjYXVzZSBJZGVudGl0eQotICAg
ICAgICAvLyBpcyBvbmx5IGdvaW5nIHRvIHN0aWNrIGFyb3VuZCBhZnRlciBDU0UgaWYgd2UgaGFk
IHByZWRpY3Rpb24gd2VpcmRuZXNzLgotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cGVyYW5kKTsKLSAgICAgICAgbV9qaXQubW92ZShvcGVyYW5kLmdwcigpLCByZXN1bHQuZ3ByKCkp
OwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIC8v
IENTRSBzaG91bGQgYWx3YXlzIGVsaW1pbmF0ZSB0aGlzLgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTE5MzEsNiArMTkx
NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgZm91bmQg
dGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgICAgIC8vIGNhbm5vdCBoYXZlIGJlZW4gYXNzaWdu
ZWQsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBwcm9jZWVkLgogICAgICAgICAgICAgaWYgKHZhbHVl
LmlzQ2xlYXIoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJhcCBp
bnN0ZWFkLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTAzODMKICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMjEzMSwxOSArMjExNiw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKLSAgICBjYXNlIENoZWNrTnVtYmVyOiB7Ci0gICAgICAgIGlmICghaXNOdW1i
ZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsK
LSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMS5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAg
ICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICB9Ci0gICAgICAgIG5vUmVz
dWx0KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjYXNlIFZhbHVlQWRkOgog
ICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNvbXBpbGVBZGQobm9kZSk7CkBAIC0yMTYyLDIx
ICsyMTM0LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewor
ICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBjb21waWxlSW50ZWdlckFyaXRo
RGl2Rm9yWDg2KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAg
RlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigp
OwotICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQot
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgRlBSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBGUFJS
ZWcgcmVnMSA9IG9wMS5mcHIoKTsKKyAgICAgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigp
OworICAgICAgICAgICAgbV9qaXQuZGl2RG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5v
ZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAt
MjE4Niw4ICsyMTY2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAm
JiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTIyMDEsMTggKzIxODEsMjYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgCi0gICAgICAgIG1faml0LmFic0RvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0g
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICBjYXNlIE51
bWJlclVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQuYWJzRG91YmxlKG9wMS5mcHIoKSwgcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQo
KSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwpAQCAtMjIzMSwzNiArMjIx
OSw0NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAg
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8g
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdy
ZWF0ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8g
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdy
ZWF0ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CiAgICAgICAgIAotICAgICAgICAvLyBv
cDIgaXMgZWF0aGVyIHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlzIE5hTgotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09
IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wMS5mcHIoKSwgb3AyLmZwcigp
KTsKKyAgICAgICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBvbmUgb3Igb25lIG9m
IHRoZW4gaXMgTmFOCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJMZXNzID0g
bV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1
YWwsIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKICAgICAgICAgCi0gICAgICAgIC8vIFVub3JkZXJl
ZCBjYXNlLiBXZSBkb24ndCBrbm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1
cmUgTmFOIGJ5IGFkZGluZyAKLSAgICAgICAgLy8gb3AxICsgb3AyIGFuZCBwdXR0aW5nIGl0IGlu
dG8gcmVzdWx0LgotICAgICAgICBtX2ppdC5hZGREb3VibGUob3AxLmZwcigpLCBvcDIuZnByKCks
IHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGljaCBvZiBvcDEsIG9w
MiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCisgICAgICAgICAgICAvLyBvcDEg
KyBvcDIgYW5kIHB1dHRpbmcgaXQgaW50byByZXN1bHQuCisgICAgICAgICAgICBtX2ppdC5hZGRE
b3VibGUob3AxLmZwcigpLCBvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBk
b25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAKLSAgICAgICAgb3AyTGVzcy5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AyLmZwcigpLCByZXN1bHQuZnBy
KCkpOworICAgICAgICAgICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2pp
dC5tb3ZlRG91YmxlKG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChvcDEuZnByKCkgIT0gcmVzdWx0LmZwcigpKSB7Ci0gICAgICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgaWYgKG9wMS5mcHIoKSAhPSByZXN1bHQuZnBy
KCkpIHsKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIG1f
aml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG9wMUxl
c3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZw
cigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
b3AxTGVzcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAKLSAgICAgICAgZG91
YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIApAQCAtMjYxNywxOCArMjYxMywxOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5
cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czogewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hp
bGQzKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMywgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKIAogICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0g
dmFsdWUuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFy
cmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkludDMyCi0gICAgICAgICAgICAgICAgJiYgIWlzSW50
MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUoY2hpbGQzKS5tX3R5cGUpKSB7Ci0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModmFsdWVSZWcpLCBjaGlsZDMsCi0gICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVSZWcsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0g
QXJyYXk6OkludDMyKSB7CisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlUmVnKSwgY2hpbGQzLCBTcGVjSW50MzIsCisg
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKGFy
cmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMgJiYgSGVhcDo6aXNXcml0ZUJhcnJp
ZXJFbmFibGVkKCkpIHsKQEAgLTI5MjgsMTMgKzI5MjQsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czogewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICBH
UFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKIAotICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgJiYgIWlzSW50MzJTcGVjdWxhdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMigpLAotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkgPT0gQXJyYXk6OkludDMyKSB7CisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQy
KCksIFNwZWNJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAg
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6SW50MzIgJiYgSGVhcDo6
aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKQEAgLTI5NjIsMTMgKzI5NTksOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEZQ
UlJlZyB2YWx1ZUZQUiA9IHZhbHVlLmZwcigpOwogCi0gICAgICAgICAgICBpZiAoIWlzUmVhbE51
bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlKSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgd2F5IG9mIHByb2ZpbGluZyB0
aGVzZSwgYW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBpbnRvCi0gICAgICAgICAgICAgICAgLy8g
U3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVlRlBSLCB2YWx1ZUZQUikpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
KSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNSZWFsTnVtYmVyLAorICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwg
dmFsdWVGUFIsIHZhbHVlRlBSKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CkBAIC0zMTcx
LDcgKzMxNjQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIFRvUHJpbWl0aXZlOiB7Ci0gICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAg
ICAgICAgICAgIC8vIEl0J3MgcmVhbGx5IHByb2ZpdGFibGUgdG8gc3BlY3VsYXRlIGludGVnZXIs
IHNpbmNlIGl0J3MgcmVhbGx5IGNoZWFwLAogICAgICAgICAgICAgLy8gaXQgbWVhbnMgd2UgZG9u
J3QgaGF2ZSB0byBkbyBhbnkgcmVhbCB3b3JrLCBhbmQgd2UgZW1pdCBhIGxvdCBsZXNzIGNvZGUu
CiAgICAgICAgICAgICAKQEAgLTMxODYsMzAgKzMxODAsMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3RyaW5nIHNwZWN1bGF0aW9uIGhlcmUuCi0g
ICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgIGNhc2Ug
VW50eXBlZFVzZTogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsK
ICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgb3AxR1BS
ID0gb3AxLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKICAgICAgICAgCi0gICAgICAgIG9wMS51c2UoKTsKKyAgICAgICAgICAgIG9wMS51c2UoKTsK
ICAgICAgICAgCi0gICAgICAgIGlmICghKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlICYgfihTcGVjTnVtYmVyIHwgU3BlY0Jvb2xlYW4pKSkKLSAgICAgICAgICAgIG1faml0
Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0NjQo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7
CisgICAgICAgICAgICBpZiAoIShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSAmIH4oU3BlY051bWJlciB8IFNwZWNCb29sZWFuKSkpCisgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0
aXZlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKG5vdFByaW1pdGl2ZSwgdGhpcywgb3BlcmF0aW9uVG9QcmltaXRpdmUsIHJlc3VsdEdQUiwg
b3AxR1BSKSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdFByaW1pdGl2ZSwgdGhpcywg
b3BlcmF0aW9uVG9QcmltaXRpdmUsIHJlc3VsdEdQUiwgb3AxR1BSKSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zMjUxLDI1ICszMjUx
LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgICAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7CiAgICAgICAg
ICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghaXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSku
bV90eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3
YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9y
VW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAg
ICAgICAgICBKU1ZhbHVlUmVncygpLCB1c2UsIFNwZWNSZWFsTnVtYmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BG
UFIpKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUob3BGUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihkb3VibGUpICogb3BlcmFuZElk
eCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAg
ICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7CisgICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOwogICAgICAgICAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS0+aW5kZXhpbmdUeXBlKCkp
ICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsIFNwZWNJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChvcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9m
KEpTVmFsdWUpICogb3BlcmFuZElkeCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTMzMTksMjUgKzMzMTYsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAg
ICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7CiAgICAgICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgICAgIGlmICgh
aXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcg
dGhlc2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAgICAg
ICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIERGR19UWVBF
X0NIRUNLKAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCB1c2UsIFNwZWNSZWFs
TnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZCwgb3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKG9wRlBS
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIs
IGJ1ZmZlciArIG9wZXJhbmRJZHgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7CisgICAgICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UsIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbik7CiAgICAgICAgICAgICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsK
LSAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS0+aW5kZXhpbmdUeXBlKCkpICYmICFp
c0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHVzZSkubV90eXBlKSkgewotICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAg
QmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNL
KAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsIFNwZWNJ
bnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTM1NTksMjQgKzM1NTMsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDb252ZXJ0
VGhpczogewotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIHRoaXNWYWx1ZSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHRo
aXNWYWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkg
eworICAgICAgICBjYXNlIE90aGVyVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0
aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQ
UlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghaXNPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlKSkgeworICAgICAgICAgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBT
cGVjT3RoZXIpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNj
cmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwg
bm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7Cisg
ICAgICAgICAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY090aGVyLAorICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpLCBz
Y3JhdGNoR1BSKTsKQEAgLTM1ODQsMzAgKzM1NzUsNDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmIChpc09iamVjdFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVk
aWN0aW9uKCkpKSB7CisgICAgICAgIGNhc2UgT2JqZWN0VXNlOiB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUpOwogICAgICAgICAgICAg
R1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQu
YnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1Zh
bHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAg
ICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwKKyAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
dGhpc1ZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1v
dmUodGhpc1ZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBj
ZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIo
KTsKLSAgICAgICAgCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIAotICAgICAg
ICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbnZlcnRUaGlzLCByZXN1bHQuZ3ByKCksIHRoaXNWYWx1ZUdQUik7Ci0gICAgICAgIAotICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQ
UiA9IHRoaXNWYWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydFRoaXMsIHJlc3Vs
dC5ncHIoKSwgdGhpc1ZhbHVlR1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMzc3Niw4ICszNzc5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNDZWxsU3BlY3Vs
YXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKworICAgICAgICBzd2l0Y2gg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAg
ICAgIApAQCAtMzc5MiwyMCArMzc5NiwyNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7Ci0gICAgICAgIAotICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25a
ZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAgYmFz
ZS51c2UoKTsKICAgICAgICAgCi0gICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdp
biwgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwp
OworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRl
c3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgY2FjaGVkR2V0QnlJZChu
b2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSwgbm90Q2VsbCk7CiAgICAgICAgIAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zODE0LDggKzM4MjUsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdz
KCksIDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgewor
CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNh
c2UgQ2VsbFVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CiAKQEAgLTM4MzMsMjEgKzM4NDUsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTog
eworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAKLSAgICAgICAgR1BS
UmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgYmFzZS51
c2UoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGJhc2UudXNlKCk7
CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAKLSAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9u
WmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6
Ok5vblplcm8sIGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAot
ICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQ
Uiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250U3BpbGwpOworICAgICAg
ICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIs
IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCwgRG9udFNwaWxsKTsKICAgICAgICAg
Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOwotCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM4NzEsMTMgKzM4OTAsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6CiAgICAgY2FzZSBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihub2RlLT5z
dHJ1Y3R1cmVTZXQoKSkKLSAgICAgICAgICAgICYmIGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1f
dHlwZSkpIHsKLSAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbiA9IG5vZGUtPm9wKCkgPT0gRm9yd2FyZENoZWNrU3RydWN0dXJlID8gRm9yd2FyZFNwZWN1
bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgZGlyZWN0aW9uKTsKICAgICAgICAgCkBAIC0z
OTQyLDYgKzM5NTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29t
cGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhvcDEuZ3ByKCksIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAg
ICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICAgICAgICAgaXNPSy5saW5rKCZtX2ppdCk7CisjZWxz
ZQorICAgICAgICBzcGVjdWxhdGVDZWxsKG5vZGUtPmNoaWxkMSgpKTsKICNlbmRpZgogICAgICAg
ICAKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0zOTQ5LDYgKzM5NjMsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgQVNTRVJUKGlzS25vd25DZWxsKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpOworICAgICAgICAKICAgICAgICAgQVNTRVJUKG5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgICAgICBtX2ppdC5hZGRXZWFrUmVm
ZXJlbmNlVHJhbnNpdGlvbigKICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uY29kZU9yaWdp
bk93bmVyKCksCkBAIC00MjcxLDcgKzQyODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBUeXBlT2Y6IHsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CkBAIC00MjgwLDE5ICs0Mjk2LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmVKdW1wczsKIAog
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBDZWxsVXNlIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2Up
OwogCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaFRl
c3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3Rlcik7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgp
KQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKHZh
bHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIGlzTm90Q2VsbCk7CisgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgIERGR19UWVBFX0NI
RUNLKEpTVmFsdWVTb3VyY2UodmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwsIGlz
Tm90Q2VsbCk7CiAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0KCkgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewogICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90U3RyaW5nID0gbV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6Tm90RXF1YWws
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpOwotICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UodmFsdWVHUFIpLCBub2RlLT5jaGls
ZDEoKSwgbm90U3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gU3RyaW5nVXNlKQorICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVT
b3VyY2UodmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZywgbm90U3RyaW5nKTsK
ICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBk
b25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBTdHJpbmdVc2UpIHsKICAgICAgICAgICAgICAgICBub3RT
dHJpbmcubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVHlwZU9mLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKICAgICAgICAgICAgICAgICBkb25lSnVt
cHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CkBAIC00MzAyLDcgKzQzMjAsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBkb25lSnVtcHMuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7CiAgICAgICAgICAgICBpc05vdENlbGwubGluaygm
bV9qaXQpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVtYmVyID0gbV9qaXQu
YnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSksIHJlc3VsdEdQ
Uik7CkBAIC00NzcxLDYgKzQ3ODksMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgREZHX05PREVf
RE9fVE9fQ0hJTERSRU4obV9qaXQuZ3JhcGgoKSwgbm9kZSwgc3BlY3VsYXRlKTsKKyAgICAgICAg
bm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIFBoYW50
b21Mb2NhbDoKICAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgogICAgICAgICBub1Jlc3VsdChu
b2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDE0ICsxMDgsMTQg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBlbmRF
eGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhp
dChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKIH0KIApAQCAtMTIzLDcg
KzEyMyw3IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnMKIHsKICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyKCk7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50
Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8
fCBtX2NhbkV4aXQpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gbV9qaXQuY29kZUJsb2NrKCktPm51
bWJlck9mT1NSRXhpdHMoKTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbygpOwogICAgIG1faml0
LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwg
bV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlz
LCBtX3N0cmVhbS0+c2l6ZSgpKSk7CkBAIC0xMzIsNyArMTMyLDcgQEAgT1NSRXhpdEp1bXBQbGFj
ZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogCiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICByZXR1cm4gc3BlY3Vs
YXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAKQEAg
LTE0MCwxNCArMTQwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2so
RXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NF
UlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkp
OworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAg
ICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcHNUb0ZhaWwpOwogICAgIG1faml0LmNvZGVCbG9j
aygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3Jh
cGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVh
bS0+c2l6ZSgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2Us
IGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgp
KTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwog
ICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCks
IGp1bXBzVG9GYWlsKTsKIH0KIApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1
cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0
aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0Zh
aWwpOwogICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwg
anNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVt
YmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMoKSkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVT
b3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29u
c3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NF
UlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0
aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWws
IHJlY292ZXJ5KTsKIH0KIApAQCAtMTc0LDExICsxNzQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRpb25DaGVjayhFeAogICAgICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0Zvcndh
cmQoKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2UgZWRnZSwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3Zl
cnksIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVy
eSwgZGlyZWN0aW9uKTsKK30KKwogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8
fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oSklUQ29t
cGlsZXI6Okp1bXBMaXN0KCkpOwogICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdC5jb2RlQmxvY2so
KS0+b3NyRXhpdCgKICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NS
RXhpdCgKQEAgLTI4MCwxNCArMjg1LDE0IEBAIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNw
ZWN1bGF0aXZlSkkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2Rl
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2
YWx1ZVJlY292ZXJ5KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8
IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFs
dWVTb3VyY2UsIG5vZGUsIGp1bXBUb0ZhaWwpOwogICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9y
d2FyZCh2YWx1ZVJlY292ZXJ5KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBOb2RlKiBub2RlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWls
LCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQogewotICAgIEFTU0VSVChtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVj
dWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBzVG9GYWlsKTsKICAg
ICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7CiB9CkBAIC0zMDAs
OSArMzA1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9G
YWlsKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2UgZWRnZSwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQor
eworICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgZWRnZS5ub2RlKCks
IGp1bXBUb0ZhaWwsIGRpcmVjdGlvbik7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFs
dWVSZWdzLCBOb2RlKiBub2RlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2lu
Z0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCiAgICAgZGF0YUxvZ0YoIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAj
ZW5kaWYKQEAgLTMxNCwxMyArMzI0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0
ZVNwZWN1bGF0aXYKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9k
ZVVzZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJl
bnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7CiAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwg
anNWYWx1ZVJlZ3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3Mg
anNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikK
IHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2Rl
LT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y2FuRXhpdCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJT
cGVjdWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOwogI2VuZGlmCkBAIC0zMzAsNiArMzQw
LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKICAgICBtX2Nv
bXBpbGVPa2F5ID0gZmFsc2U7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnR5cGVDaGVjayhK
U1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3Nl
ZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCit7CisgICAgQVNTRVJU
KG5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCkpOworICAgIG1fc3RhdGUu
Zm9yTm9kZShlZGdlKS5maWx0ZXIodHlwZXNQYXNzZWRUaHJvdWdoKTsKKyAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIHNvdXJjZSwgZWRnZSwganVtcFRvRmFpbCk7Cit9CisKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2Ug
ZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQorewor
ICAgIHR5cGVDaGVjayhzb3VyY2UsIGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFp
bCk7CisgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjp0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVk
Z2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cisg
ICAgdHlwZUNoZWNrKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWls
KTsKKyAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgY29u
dmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFk
ZFNsb3dQYXRoR2VuZXJhdG9yKFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRo
R2VuZXJhdG9yKQogewogICAgIG1fc2xvd1BhdGhHZW5lcmF0b3JzLmFwcGVuZChzbG93UGF0aEdl
bmVyYXRvci5sZWFrUHRyKCkpOwpAQCAtODcyLDkgKzkwMiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmFycmF5aWZ5KE5vZGUqIG5vZGUKICAgICBhcnJheWlmeShub2RlLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSk7CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2Uo
Tm9kZSogbm9kZSkKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoRWRnZSBlZGdl
KQogewotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAgICAgCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpIHsKQEAgLTg4OCw3ICs5MTgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTdG9yYWdlKE5vZGUqCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE11c3QgYmUg
YSBjZWxsOyBmaWxsIGl0IGFzIGEgY2VsbCBhbmQgdGhlbiByZXR1cm4gdGhlIHBvaW50ZXIuCi0g
ICAgICAgIHJldHVybiBmaWxsU3BlY3VsYXRlQ2VsbChub2RlLCBCYWNrd2FyZFNwZWN1bGF0aW9u
KTsKKyAgICAgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKGVkZ2UsIEJhY2t3YXJkU3BlY3Vs
YXRpb24pOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZTogewpA
QCAtODk4LDcgKzkyOCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9k
ZSoKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmaWxsU3Bl
Y3VsYXRlQ2VsbChub2RlLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgcmV0dXJuIGZp
bGxTcGVjdWxhdGVDZWxsKGVkZ2UsIEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgIH0KIH0KIApA
QCAtMTUwOSwyMCArMTUzOSwyMCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVCcmFuCiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0byBhbHNv
IHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAgIEFTU0VSVChub2RlLT5hZGp1c3RlZFJl
ZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAg
ICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkKICAgICAgICAgICAgIGNvbXBp
bGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uKTsKLSAg
ICAgICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+
aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpCiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVE
b3VibGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgZG91YmxlQ29uZGl0aW9uKTsKICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNo
b3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlV
c2VLaW5kKFN0cmluZ1VzZSkpIHsKICAgICAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCkt
PnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5
VXNlS2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVj
dEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGUpOwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQo
KSA9PSBPYmplY3RPck90aGVyVXNlKQogICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9i
amVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIo
KSwgYnJhbmNoTm9kZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVj
dWxhdGVPYmplY3QoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBP
YmplY3RVc2UpCiAgICAgICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RP
ck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMSgpLCBicmFuY2hOb2Rl
KTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVl
cGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwpAQCAt
MTY0NSw2ICsxNjc1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9j
ayYKIAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2Nr
LnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxv
Y2tbbV9pbmRleEluQmxvY2tdOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgbV9jYW5F
eGl0ID0gbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpOworI2VuZGlmCisgICAgICAgIGJvb2wgc2hv
dWxkRXhlY3V0ZUVmZmVjdHMgPSBtX3N0YXRlLnN0YXJ0RXhlY3V0aW5nKG1fY3VycmVudE5vZGUp
OwogICAgICAgICBtX2ppdC5zZXRGb3JOb2RlKG1fY3VycmVudE5vZGUpOwogICAgICAgICBtX2Nv
ZGVPcmlnaW5Gb3JPU1IgPSBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luOwogICAgICAgICBpZiAo
IW1fY3VycmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKQEAgLTE3MTEsOSArMTc0NSwxNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
Q29tcGlsYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigKKyAgICAg
ICAgICAgICAgICAgICAgIlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcgTm9kZSBAJWQgKGJjIyV1
KSBhdCBKSVQgb2Zmc2V0IDB4JXgiLAorICAgICAgICAgICAgICAgICAgICAoaW50KW1fY3VycmVu
dE5vZGUtPmluZGV4KCksCisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIlNwZWN1bGF0aXZlSklUIGdl
bmVyYXRpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KW1f
Y3VycmVudE5vZGUtPmluZGV4KCksIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
Iik7CisjZWxzZQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKKyAgICAg
ICAgICAgIH0KICNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVSWV9OT0RFKQogICAgICAg
ICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCkBAIC0xNzU5LDcgKzE4MDEsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAjZW5kaWYKICAgICAgICAg
CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBhYnN0cmFjdCBzdGF0ZSBpcyByZW1hdGVy
aWFsaXplZCBmb3IgdGhlIG5leHQgbm9kZS4KLSAgICAgICAgbV9zdGF0ZS5leGVjdXRlKG1faW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQorICAgICAgICAg
ICAgbV9zdGF0ZS5leGVjdXRlRWZmZWN0cyhtX2luZGV4SW5CbG9jayk7CiAgICAgICAgIAogICAg
ICAgICBpZiAobV9jdXJyZW50Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKQEAgLTE5MDYsMTMgKzE5NDksMTAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZURvdWJsZVB1dEJ5VgogCiAgICAgRlBSUmVnIHZhbHVlUmVnID0gdmFsdWUu
ZnByKCk7CiAgICAgCi0gICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZv
ck5vZGUoY2hpbGQzKS5tX3R5cGUpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgd2F5
IG9mIHByb2ZpbGluZyB0aGVzZSwgYW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBpbnRvCi0gICAg
ICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgbV9q
aXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVk
LCB2YWx1ZVJlZywgdmFsdWVSZWcpKTsKLSAgICB9CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAg
ICAgIEpTVmFsdWVSZWdzKCksIGNoaWxkMywgU3BlY1JlYWxOdW1iZXIsCisgICAgICAgIG1faml0
LmJyYW5jaERvdWJsZSgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVh
bE9yVW5vcmRlcmVkLCB2YWx1ZVJlZywgdmFsdWVSZWcpKTsKICAgICAKICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTIxMDQsNyArMjE0NCw4IEBAIEdlbmVyYXRl
ZE9wZXJhbmRUeXBlIFNwZWN1bGF0aXZlSklUOjpjaGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlVG9JbnQzMihOb2RlKiBub2RlKQogewotICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJl
c3VsdC5ncHIoKSk7CkBAIC0yMTEyLDE0NSArMjE1MywxNjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7Ci0gICAgICAg
IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgCi0gICAgICAgIG1f
aml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC5hbmQzMihK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAKLSAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSW50ZWdl
cjogewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgICAg
IG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgb3AxLmZvcm1hdCgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmREb3VibGU6IHsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEo
dGhpcywgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIERvdWJsZVVzZSkpOyAvLyBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIHdpbGwgYXNzZXJ0IHRoYXQgdGhpcyBpcyBhIGRvdWJsZSB1c2UuIFdl
IGZvcmNlIGl0IHRvIHRoaW5rIHRoYXQgaXQgd2FzIGEgZG91YmxlIHVzZSwgc2luY2Ugd2UgYXJl
IGluZmVycmluZyB0aGF0IHdlIG91Z2h0IHRvIGVtaXQgYSBkb3VibGUgdXNlIHF1aXRlIGxhdGUu
Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50
ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29t
cGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOworICAgIGNhc2UgTnVtYmVyVXNlOgorICAg
IGNhc2UgTm90Q2VsbFVzZTogeworICAgICAgICBzd2l0Y2ggKGNoZWNrR2VuZXJhdGVkVHlwZUZv
clRvSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAgICAgICBjYXNlIEdlbmVyYXRl
ZE9wZXJhbmRJbnRlZ2VyOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIEJhY2t3YXJkU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBvcDEuZm9ybWF0KCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2VuZXJhdGVk
T3BlcmFuZERvdWJsZTogeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpLCBCYWNrd2FyZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAg
ICAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RUcnVuY2F0
ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIs
IEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKICAgICAgICAgICAgIAotICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRl
Z2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG5vdFRydW5jYXRlZFRvSW50ZWdlciwgdGhpcywgdG9JbnQz
MiwgZ3ByLCBmcHIpKTsKIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbm9kZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSlNWYWx1ZTogewot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgaW50ZWdlclJl
c3VsdChncHIsIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGNhc2UgR2VuZXJhdGVkT3BlcmFuZEpTVmFsdWU6IHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKIAot
ICAgICAgICBHUFJSZWcgZ3ByID0gb3AxLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R3By
ID0gcmVzdWx0LmdwcigpOwotICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKLSAg
ICAgICAgRlBSUmVnIGZwciA9IHRlbXBGcHIuZnByKCk7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3QgY29udmVydGVkOwotCi0gICAgICAgIGlmICghaXNOdW1iZXJTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBu
b2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBn
cHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIgPSBvcDEuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgRlBS
VGVtcG9yYXJ5IHRlbXBGcHIodGhpcyk7CisgICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZw
ci5mcHIoKTsKKworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9q
aXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IGNvbnZlcnRlZDsKKworICAgICAgICAgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxk
MSgpLCBTcGVjTnVtYmVyKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gTnVtYmVyVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGVDaGVjaygK
KyAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGdwciksIG5vZGUtPmNoaWxkMSgp
LCBTcGVjTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBncHIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9q
aXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0NlbGwpCi0g
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
Z3ByKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVy
bywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAg
REZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhncHIp
LCBub2RlLT5jaGlsZDEoKSwgflNwZWNDZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRv
IDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8gMC4KLSAgICAgICAgICAgICAgICBtX2ppdC5jb21w
YXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBncHIsIFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCBy
ZXN1bHRHcHIpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBjZWxsOiBzbyB0cnVlIHR1cm5z
IGludG8gMSBhbmQgYWxsIGVsc2UgdHVybnMgaW50byAwLgorICAgICAgICAgICAgICAgICAgICBt
X2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBncHIsIFRydXN0ZWRJbW0zMihWYWx1
ZVRydWUpLCByZXN1bHRHcHIpOworICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaXNOdW1i
ZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAg
ICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBh
IEpTVmFsdWUKLSAgICAgICAgbV9qaXQubW92ZShncHIsIHJlc3VsdEdwcik7Ci0gICAgICAgIHVu
Ym94RG91YmxlKHJlc3VsdEdwciwgZnByKTsKKyAgICAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBn
ZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgIHVuYm94RG91YmxlKHJl
c3VsdEdwciwgZnByKTsKIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRH
cHIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3VsdEdwciwgZnByKTsKLSAg
ICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAgICAgICAgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOworICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhyZXN1bHRHcHIpOwogCi0gICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVt
cCgpKTsKKyAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAg
ICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJU
b1B0cihncHIsIHJlc3VsdEdwcik7CisgICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQp
OworICAgICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHRHcHIpOwog
Ci0gICAgICAgIGNvbnZlcnRlZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBjb252ZXJ0ZWQu
bGluaygmbV9qaXQpOwogI2Vsc2UKLSAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
Y2hpbGROb2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICBOb2Rl
KiBjaGlsZE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gY2hpbGROb2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsK
KyAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOwogCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogCi0gICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsK
LSAgICAgICAgR1BSUmVnIHJlc3VsdEdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBwYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3QgY29udmVydGVkOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGNv
bnZlcnRlZDsKIAotICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3Jt
YXRKU0ludGVnZXIpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdw
cik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdH
UFIoKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOwotICAgICAgICAg
ICAgRlBSUmVnIGZwciA9IHRlbXBGcHIuZnByKCk7Ci0gICAgICAgICAgICBGUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKLQotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2Vy
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotCi0gICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3Bl
Y3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkK
LSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSkpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7Cisg
ICAgICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVn
ZXIpCisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50
YWdHUFIoKTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKKyAgICAgICAgICAgICAg
ICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKworICAgICAgICAg
ICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc051bWJlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdGFnR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3R5cGUgJiBTcGVjQ2VsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hp
bGQxKCksIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0dQ
UiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCB+U3BlY0NlbGwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8v
IEl0J3Mgbm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5z
IGludG8gMC4KLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNCb29sZWFu
ID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRHcHIpOwotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0
ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdz
IG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRv
IDAuCisgICAgICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Jvb2xlYW4g
PSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHcHIpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgaXNCb29sZWFuLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOwotICAgICAgICAgICAgICAg
ICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpc0Jvb2xlYW4ubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgaXNOdW1iZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaXNOdW1iZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB1bmJveERvdWJs
ZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CisgICAgICAgICAgICAg
ICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BSLCBmcHIsIHNjcmF0Y2guZnByKCkpOwog
Ci0gICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwotICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCByZXN1bHRHcHIsIGZwcik7Ci0gICAgICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKHRvSW50MzIsIHJlc3VsdEdwciwgZnByKTsKKyAgICAgICAgICAgICAgICBzaWxlbnRG
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7CiAKLSAgICAgICAgICAgIGNvbnZlcnRlZC5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgICAg
ICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7CisgICAgICAgICAgICAgICAg
aXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxv
YWRHUFIsIHJlc3VsdEdwcik7CiAKLSAgICAgICAgICAgIGNvbnZlcnRlZC5saW5rKCZtX2ppdCk7
Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R3ByLCBub2Rl
KTsKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R3ByLCBub2RlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRUeXBl
VW5rbm93bjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBjYXNlIEJvb2xlYW5V
c2U6IHsKKyAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAg
ICAKKyAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
IG1faml0LmFuZDMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdC5ncHIoKSk7
CisgICAgICAgIAorICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25v
d246CisKKyAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQoIW1fY29tcGlsZU9rYXkpOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIApAQCAtMjMyNiwxNCArMjM4
NCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAjZW5kaWYK
ICAgICAKICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIEJhY2t3YXJkU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAg
ICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwgcmVzdWx0LmZwcigpKTsK
ICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAg
ICAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMjM0NiwxNSArMjQwNCwxNSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJ
bnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAKLSAg
ICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3R5cGUpKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVj
TnVtYmVyKSkgewogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBGb3J3YXJkSW50MzJUb0RvdWJs
ZSkgewotICAgICAgICAgICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAg
ICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLAor
ICAgICAgICAgICAgZm9yd2FyZFR5cGVDaGVjaygKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY051bWJlciwKICAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMUdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwKICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpp
bkdQUihvcDFHUFIsIERhdGFGb3JtYXRKUykpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwKKyAgICAgICAgICAgIHR5cGVDaGVjaygKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY051bWJl
ciwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMzc3LDE1ICsyNDM1LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVJbnQzMlRvRG91YmwKICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5i
cmFuY2gzMigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcDFUYWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwogICAgIAotICAgIGlmICghaXNOdW1iZXJTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICBp
ZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIpKSB7CiAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEZvcndhcmRJbnQzMlRvRG91YmxlKSB7Ci0gICAgICAgICAgICBm
b3J3YXJkU3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVl
UmVncyhvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksCisg
ICAgICAgICAgICBmb3J3YXJkVHlwZUNoZWNrKAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjTnVtYmVyLAog
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpLAogICAgICAg
ICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluUGFpcihvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIp
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAg
ICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BS
KSwgbm9kZS0+Y2hpbGQxKCksCisgICAgICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCks
IFNwZWNOdW1iZXIsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0
VGFnKSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjUzOCw0OSArMjU5Niw2NCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgIG1faml0Lm1vdmUoSW1t
MzIodG9JbnQzMihkKSksIHNjcmF0Y2hSZWcpOwogICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNo
KTsKICAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOwotICAgIH0gZWxzZSBpZiAodmFsdWVV
c2UtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsK
LSAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9wLmdwcigpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAg
aWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAgICAgICAgIEFTU0VSVChlbGVt
ZW50U2l6ZSA9PSAxKTsKLSAgICAgICAgICAgIGNvbXBpbGVDbGFtcEludGVnZXJUb0J5dGUobV9q
aXQsIHNjcmF0Y2hSZWcpOwotICAgICAgICB9Ci0gICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gp
OwotICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7Ci0gICAgfSBlbHNlIGlmIChyb3VuZGlu
ZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsK
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5
IGZsb2F0U2NyYXRjaCh0aGlzKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7
Ci0gICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGNvbXBpbGVDbGFt
cERvdWJsZVRvQnl0ZShtX2ppdCwgZ3ByLCBmcHIsIGZsb2F0U2NyYXRjaC5mcHIoKSk7Ci0gICAg
ICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7Ci0gICAgICAgIHZhbHVlR1BSID0gZ3ByOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1
ZVVzZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEZQUlJl
ZyBmcHIgPSB2YWx1ZU9wLmZwcigpOwotICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3ROYU4gPSBtX2ppdC5icmFuY2hEb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsLCBmcHIsIGZwcik7Ci0gICAgICAgIG1faml0
LnhvclB0cihncHIsIGdwcik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZpeGVkID0g
bV9qaXQuanVtcCgpOwotICAgICAgICBub3ROYU4ubGluaygmbV9qaXQpOwotCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGZhaWxlZDsKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2ln
bmVkVHlwZWRBcnJheSkKLSAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRl
RG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVG
YWlsZWQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hU
cnVuY2F0ZURvdWJsZVRvVWludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZU
cnVuY2F0ZUZhaWxlZCk7Ci0gICAgICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwoZmFpbGVkLCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOwotCi0gICAgICAg
IGZpeGVkLmxpbmsoJm1faml0KTsKLSAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKLSAgICAg
ICAgdmFsdWVHUFIgPSBncHI7CisgICAgICAgIHN3aXRjaCAodmFsdWVVc2UudXNlS2luZCgpKSB7
CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2gu
Z3ByKCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT3AuZ3ByKCksIHNjcmF0Y2hSZWcp
OworICAgICAgICAgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgY29tcGls
ZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKKyAgICAgICAgICAgIHZhbHVlR1BSID0g
c2NyYXRjaFJlZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgIGlmIChyb3VuZGluZyA9PSBD
bGFtcFJvdW5kaW5nKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEp
OworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2
YWx1ZVVzZSk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgZmxvYXRTY3JhdGNoKHRoaXMpOworICAgICAgICAg
ICAgICAgIEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigpOworICAgICAgICAgICAgICAgIEdQUlJl
ZyBncHIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wRG91Ymxl
VG9CeXRlKG1faml0LCBncHIsIGZwciwgZmxvYXRTY3JhdGNoLmZwcigpKTsKKyAgICAgICAgICAg
ICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3By
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOworICAgICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3Au
ZnByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3ROYU4gPSBtX2ppdC5icmFuY2hEb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsLCBmcHIsIGZwcik7CisgICAgICAgICAgICAg
ICAgbV9qaXQueG9yUHRyKGdwciwgZ3ByKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmaXhlZCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBub3ROYU4ubGlu
aygmbV9qaXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWdu
ZWRUeXBlZEFycmF5KQorICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hU
cnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRy
dW5jYXRlRmFpbGVkKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9VaW50MzIoZnByLCBncHIsIE1h
Y3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoZmFpbGVk
LCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGZpeGVkLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICB2YWx1ZS5hZG9wdChy
ZXN1bHQpOworICAgICAgICAgICAgICAgIHZhbHVlR1BSID0gZ3ByOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQorICAgIAogICAgIEFTU0VSVF9VTlVTRUQodmFs
dWVHUFIsIHZhbHVlR1BSICE9IHByb3BlcnR5KTsKICAgICBBU1NFUlQodmFsdWVHUFIgIT0gYmFz
ZSk7CiAgICAgQVNTRVJUKHZhbHVlR1BSICE9IHN0b3JhZ2VSZWcpOwpAQCAtMjcyMiw4ICsyNzk1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGbwogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZihOb2RlKiBub2RlKQogewotICAgIGlmICgo
ISEobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgISEobV9zdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICB8
fCBub2RlLT5jaGlsZDEoKS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpIHsKKyAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKICAgICAgICAgLy8gSXQgbWln
aHQgbm90IGJlIGEgY2VsbC4gU3BlY3VsYXRlIGxlc3MgYWdncmVzc2l2ZWx5LgogICAgICAgICAv
LyBPcjogaXQgbWlnaHQgb25seSBiZSB1c2VkIG9uY2UgKGkuZS4gYnkgdXMpLCBzbyB3ZSBnZXQg
emVybyBiZW5lZml0CiAgICAgICAgIC8vIGZyb20gc3BlY3VsYXRpbmcgYW55IG1vcmUgYWdncmVz
c2l2ZWx5IHRoYW4gd2UgYWJzb2x1dGVseSBuZWVkIHRvLgpAQCAtMjk2MSw5ICszMDMzLDEwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKE4KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBub2RlKQogewotICAgIGlmIChtX2ppdC5ncmFwaCgp
LmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJp
bmFyeVVzZUtpbmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgaWYgKGlzTnVt
YmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICAgICAgaW50MzJf
dCBpbW0xID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogCkBAIC0yOTc5LDcgKzMwNTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQWRkKE5vZGUqIG5vCiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGlmIChpc051bWJl
ckNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBp
bnQzMl90IGltbTIgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFu
dChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CkBAIC0zMDIxLDggKzMwOTQsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUqIG5vCiAgICAgICAgIGludGVn
ZXJSZXN1bHQoZ3ByUmVzdWx0LCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAg
ICAgCi0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgCisg
ICAgY2FzZSBOdW1iZXJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxLCBvcDIpOwpAQCAtMzAzNCwyMiArMzEwNywyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQWRkKE5vZGUqIG5vCiAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgaWYgKG5vZGUtPm9wKCkgPT0g
VmFsdWVBZGQpIHsKKyAgICAgICAgCisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFsdWVBZGQpOwogICAgICAgICBjb21waWxlVmFs
dWVBZGQobm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgLy8gV2UgZG9u
J3QgaGFuZGxlIHRoaXMgeWV0LiA6LSgKLSAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZGUqIG5v
ZGUpCiB7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkuYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJ
bnQzMlVzZTogewogICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJl
ckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50
MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgIGlm
IChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CkBAIC0z
MDY5LDcgKzMxNDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9k
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1
ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAg
ICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAg
ICAgICAgICAgICAgICAgCkBAIC0zMDk3LDIwICszMTc0LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAg
Ci0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAg
ICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsK
KyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAotICAgIEZQUlJl
ZyByZWcxID0gb3AxLmZwcigpOwotICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwotICAgIG1f
aml0LnN1YkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOworICAgICAgICBGUFJSZWcg
cmVnMSA9IG9wMS5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAg
ICAgIG1faml0LnN1YkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOwogCi0gICAgZG91
YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1
bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdh
dGUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5uZWdhdGVTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CiAKQEAgLTMxMjgsMTcgKzMyMTQsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFyaXRoTmVnYXRlKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgIG1faml0Lm5lZ2F0ZURvdWJsZShvcDEu
ZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0KLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBu
b2RlKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5uZWdhdGVEb3VibGUob3AxLmZwcigp
LCByZXN1bHQuZnByKCkpOworICAgICAgICAKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5m
cHIoKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2Rl
KiBub2RlKQogewotICAgIGlmIChtX2ppdC5ncmFwaCgpLm11bFNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgIGNh
c2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
QEAgLTMxNjksMTcgKzMyNjQsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRo
TXVsKE5vZAogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOwotICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIp
OwotCi0gICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgRlBSUmVnIHJlZzIgPSBvcDIu
ZnByKCk7CiAgICAgICAgIAotICAgIG1faml0Lm11bERvdWJsZShyZWcxLCByZWcyLCByZXN1bHQu
ZnByKCkpOworICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKICAgICAgICAgCi0gICAgZG91YmxlUmVzdWx0KHJlc3Vs
dC5mcHIoKSwgbm9kZSk7CisgICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOworICAgICAg
ICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm11bERv
dWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOworICAgICAgICAKKyAgICAgICAgZG91Ymxl
UmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KQpAQCAtMzI4OSwyNSArMzM5MiwzMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50
ZWdlckFyaXRoCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2RlKiBu
b2RlKQogewotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
Yyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAg
JiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5h
cnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIGNvbXBpbGVTb2Z0
TW9kdWxvKG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIGNhc2UgTnVt
YmVyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOwogICAgICAgICAKLSAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZwcigpOwot
ICAgIEZQUlJlZyBvcDJGUFIgPSBvcDIuZnByKCk7CisgICAgICAgIEZQUlJlZyBvcDFGUFIgPSBv
cDEuZnByKCk7CisgICAgICAgIEZQUlJlZyBvcDJGUFIgPSBvcDIuZnByKCk7CiAgICAgICAgIAot
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAg
IAotICAgIEZQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0KLSAgICBjYWxsT3BlcmF0aW9uKGZtb2RB
c0RGR09wZXJhdGlvbiwgcmVzdWx0LmZwcigpLCBvcDFGUFIsIG9wMkZQUik7CisgICAgICAgIEZQ
UlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKGZt
b2RBc0RGR09wZXJhdGlvbiwgcmVzdWx0LmZwcigpLCBvcDFGUFIsIG9wMkZQUik7CiAgICAgICAg
IAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICBkb3VibGVS
ZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb21w
YXJlIGlzIGZ1c2VkIHdpdGggYSBzdWJzZXF1ZW50IGJyYW5jaC4KQEAgLTMzMTYsMzMgKzM0Mjcs
MzMgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlKiBub2RlLAogICAgIGlmIChj
b21waWxlUGVlcEhvbGVCcmFuY2gobm9kZSwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24sIG9w
ZXJhdGlvbikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKICAgICAg
ICAgY29tcGlsZUludGVnZXJDb21wYXJlKG5vZGUsIGNvbmRpdGlvbik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKworICAg
IGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewogICAgICAgICBjb21waWxl
RG91YmxlQ29tcGFyZShub2RlLCBkb3VibGVDb25kaXRpb24pOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIAogICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcSkgewotICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IG5vZGUt
PmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICBpZiAobm9kZS0+
aXNCaW5hcnlVc2VLaW5kKFN0cmluZ1VzZSkpIHsKICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKG5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1
bGF0ZU9iamVjdCgpKSB7CisgICAgICAgIAorICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VL
aW5kKE9iamVjdFVzZSkpIHsKICAgICAgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2Rl
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpKSB7CisgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlICYmIG5vZGUtPmNoaWxkMigpLnVz
ZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKSB7CiAgICAgICAgICAgICBjb21waWxlT2JqZWN0
VG9PYmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkgJiYgbm9k
ZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSAmJiBub2RlLT5jaGlsZDIo
KS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7CiAgICAgICAgICAgICBjb21waWxlT2JqZWN0VG9P
YmplY3RPck90aGVyRXF1YWxpdHkobm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMzQzMCw3ICszNTQxLDggQEAg
Ym9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQwogCiBib29sIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RyaWN0RXEoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgIGNh
c2UgSW50MzJVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0
ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBV
SU5UX01BWCkgewogICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCku
bV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CkBAIC0zNDQ0LDggKzM1
NTYsOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEoTm9kCiAgICAgICAg
IGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVj
dWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
KSB7CisgICAgICAgIAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIHVuc2lnbmVkIGJy
YW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAgIGlmIChi
cmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgIE5vZGUqIGJyYW5j
aE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleElu
QmxvY2spOwpAQCAtMzQ1OSwxMCArMzU3MSwxMiBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlU3RyaWN0RXEoTm9kCiAgICAgICAgIGNvbXBpbGVEb3VibGVDb21wYXJlKG5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgCi0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSB8fCBu
b2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCisgICAgICAgIAorICAgIGNh
c2UgU3RyaW5nVXNlOiB7CiAgICAgICAgIHJldHVybiBub25TcGVjdWxhdGl2ZVN0cmljdEVxKG5v
ZGUpOwotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYg
bm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIE9iamVjdFVzZTogewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleElu
QmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJ
bkJsb2NrICE9IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9q
aXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKQEAg
LTM0NzYsOCArMzU5MCwxNSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEo
Tm9kCiAgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShu
b2RlKTsKKyAgICAgICAgCisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIHJldHVybiBu
b25TcGVjdWxhdGl2ZVN0cmljdEVxKG5vZGUpOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKQEAgLTM4MTUsNiArMzkzNiwyNDEgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlcgogICAgIHJldHVybiB0ZW1wb3Jh
cnkuZ3ByKCk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUludDMyKEVkZ2Ug
ZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQzMikpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICAoU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQodGhpcywgZWRn
ZSkpLmdwcigpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVOdW1iZXIoRWRn
ZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY051bWJlcikpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVk
Z2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBvcGVyYW5kLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpOworICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIo
KSksIGVkZ2UsIFNwZWNOdW1iZXIsCisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6WmVybywgb3BlcmFuZC5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSk7CisgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyNlbHNlCisgICAgSlNWYWx1ZU9w
ZXJhbmQgb3AxKHRoaXMsIGVkZ2UpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3BlcmFuZC50YWdHUFIoKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAgdHlwZUNoZWNrKAorICAgICAg
ICBKU1ZhbHVlUmVncyhvcGVyYW5kLnRhZ0dQUigpLCBvcDEub3BlcmFuZCgpKSwgZWRnZSwgU3Bl
Y051bWJlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgb3BlcmFuZC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykp
KTsKKyAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOworI2VuZGlmCit9CisKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZVJlYWxOdW1iZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1JlYWxOdW1iZXIpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOworICAgIEZQ
UlJlZyBmcHIgPSBvcGVyYW5kLmZwcigpOworICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBK
U1ZhbHVlUmVncygpLCBlZGdlLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgbV9qaXQuYnJhbmNo
RG91YmxlKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQsIGZwciwgZnByKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUJv
b2xlYW4oRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0Jv
b2xlYW4pKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgKFNwZWN1bGF0ZUJvb2xlYW5PcGVy
YW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlQ2VsbChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVj
Q2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAoU3BlY3VsYXRlQ2VsbE9wZXJhbmQo
dGhpcywgZWRnZSkpLmdwcigpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVP
YmplY3QoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09i
amVjdCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBv
cGVyYW5kKHRoaXMsIGVkZ2UpOworICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVl
UmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wZXJhbmQuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJl
ZyBncHIgPSBvcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0NjQoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
IEpTVmFsdWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhncHIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgbm90Q2VsbC5saW5rKCZt
X2ppdCk7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVy
KSkgeworICAgICAgICBtX2ppdC5tb3ZlKGdwciwgdGVtcEdQUik7CisgICAgICAgIG1faml0LmFu
ZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHRlbXBH
UFIpOworICAgICAgICAKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MoZ3ByKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAgICBtX2ppdC5i
cmFuY2g2NCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBH
UFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51
bGwpKSk7CisgICAgfQorICAgIGRvbmUubGluaygmbV9qaXQpOworI2Vsc2UKKyAgICBHUFJSZWcg
dGFnR1BSID0gb3BlcmFuZC50YWdHUFIoKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wZXJh
bmQucGF5bG9hZEdQUigpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPQorICAg
ICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICBERkdfVFlQRV9DSEVDSygKKyAgICAg
ICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsICh+U3BlY0NlbGwpIHwgU3BlY09i
amVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBheWxvYWRHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgbm90Q2Vs
bC5saW5rKCZtX2ppdCk7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwg
U3BlY090aGVyKSkgeworICAgICAgICBtX2ppdC5tb3ZlKHRhZ0dQUiwgdGVtcEdQUik7CisgICAg
ICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wR1BSKTsKKyAgICAgICAgCisgICAg
ICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQ
UiksIHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1w
R1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TnVsbFRhZykpKTsKKyAgICB9CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisjZW5kaWYKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nKEVkZ2UgZWRnZSkKK3sKKyAg
ICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmcpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAg
ICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVk
Z2UsIFNwZWNTdHJpbmcsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcGVy
YW5kLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90Q2Vs
bChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCB+U3BlY0NlbGwp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlz
LCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgdHlwZUNoZWNrKAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwg
flNwZWNDZWxsLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICBKSVRD
b21waWxlcjo6WmVybywgb3BlcmFuZC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7
CisjZWxzZQorICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC50YWdH
UFIoKSwgb3BlcmFuZC5wYXlsb2FkR1BSKCkpLCBlZGdlLCB+U3BlY0NlbGwsCisgICAgICAgIG1f
aml0LmJyYW5jaDMyKAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCBvcGVyYW5kLnRh
Z0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyNlbmRpZgorfQorCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPdGhlcihFZGdlIGVkZ2UpCit7CisgICAgaWYg
KCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT3RoZXIpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG1faml0Lm1vdmUob3Bl
cmFuZC5ncHIoKSwgdGVtcEdQUik7CisgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7CisgICAgdHlwZUNoZWNrKAor
ICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgU3BlY090aGVyLAorICAg
ICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgdGVtcEdQUiwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFs
dWVOdWxsKSkpOworI2Vsc2UKKyAgICBtX2ppdC5tb3ZlKG9wZXJhbmQudGFnR1BSKCksIHRlbXBH
UFIpOworICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wR1BSKTsKKyAgICB0eXBl
Q2hlY2soCisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wZXJhbmQucGF5
bG9hZEdQUigpKSwgZWRnZSwgU3BlY090aGVyLAorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxs
VGFnKSkpOworI2VuZGlmICAgIAorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUo
Tm9kZSosIEVkZ2UgZWRnZSkKK3sKKyAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAg
Y2FzZSBVbnR5cGVkVXNlOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duSW50MzJVc2U6
CisgICAgICAgIEFTU0VSVCghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0ludDMyKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIEFTU0VSVCghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY051bWJlcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEtub3duQ2VsbFVzZToKKyAgICAgICAgQVNTRVJUKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVj
Q2VsbCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBzcGVj
dWxhdGVJbnQzMihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWFsTnVtYmVyVXNl
OgorICAgICAgICBzcGVjdWxhdGVSZWFsTnVtYmVyKGVkZ2UpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgc3BlY3VsYXRlTnVtYmVyKGVkZ2UpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4o
ZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgc3BlY3Vs
YXRlQ2VsbChlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPYmplY3RVc2U6CisgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPYmpl
Y3RPck90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVPYmplY3RPck90aGVyKGVkZ2UpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5n
KGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vdENlbGxVc2U6CisgICAgICAgIHNw
ZWN1bGF0ZU5vdENlbGwoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3RoZXJVc2U6
CisgICAgICAgIHNwZWN1bGF0ZU90aGVyKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMyArMTIxLDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZSosIERhdGFGb3Jt
YXQmIHJldHVybkZvcm1hdCk7CisgICAgR1BSUmVnIGZpbGxJbnRlZ2VyKEVkZ2UsIERhdGFGb3Jt
YXQmIHJldHVybkZvcm1hdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBHUFJSZWcgZmlsbEpT
VmFsdWUoTm9kZSopOworICAgIEdQUlJlZyBmaWxsSlNWYWx1ZShFZGdlKTsKICNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgYm9vbCBmaWxsSlNWYWx1ZShOb2RlKiwgR1BSUmVnJiwgR1BSUmVn
JiwgRlBSUmVnJik7CisgICAgYm9vbCBmaWxsSlNWYWx1ZShFZGdlLCBHUFJSZWcmLCBHUFJSZWcm
LCBGUFJSZWcmKTsKICNlbmRpZgotICAgIEdQUlJlZyBmaWxsU3RvcmFnZShOb2RlKik7CisgICAg
R1BSUmVnIGZpbGxTdG9yYWdlKEVkZ2UpOwogCiAgICAgLy8gbG9jayBhbmQgdW5sb2NrIEdQUiAm
IEZQUiByZWdpc3RlcnMuCiAgICAgdm9pZCBsb2NrKEdQUlJlZyByZWcpCkBAIC0yOTUsMTEgKzI5
NSwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIHNwZWN1bGF0aXZlIG9wZXJh
bmQgdHlwZXMsIGJlbG93LCB0byBmaWxsIG9wZXJhbmQgdG8KICAgICAvLyBtYWNoaW5lIHJlZ2lz
dGVycywgaW1wbGljaXRseSBnZW5lcmF0aW5nIHNwZWN1bGF0aW9uIGNoZWNrcyBhcyBuZWVkZWQu
Ci0gICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnQoTm9kZSosIERhdGFGb3JtYXQmIHJldHVybkZv
cm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50
U3RyaWN0KE5vZGUqKTsKLSAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShOb2RlKiwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQ2VsbChOb2RlKiwg
U3BlY3VsYXRpb25EaXJlY3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQm9vbGVhbihO
b2RlKiwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50
KEVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwor
ICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50U3RyaWN0KEVkZ2UpOworICAgIEZQUlJlZyBmaWxs
U3BlY3VsYXRlRG91YmxlKEVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUNlbGwoRWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEdQUlJl
ZyBmaWxsU3BlY3VsYXRlQm9vbGVhbihFZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAg
R2VuZXJhdGVkT3BlcmFuZFR5cGUgY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2RlKik7
CiAKICAgICB2b2lkIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFBhc3NPd25QdHI8U2xvd1BhdGhHZW5l
cmF0b3I+KTsKQEAgLTU0MCwxMiArNTQwLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNGdW5jdGlv
bkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNGdW5jdGlvbkNv
bnN0YW50KG5vZGUpOyB9CiAgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBu
b2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpOyB9
CiAgICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBt
X2ppdC5ncmFwaCgpLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsgfQotICAgIGludDMyX3Qg
dmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAg
aWYgKGlzSW50MzJDb25zdGFudChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMih2YWx1ZU9mTnVt
YmVyQ29uc3RhbnQobm9kZSkpOwotICAgIH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHZv
aWQqIGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmFk
ZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGUpOyB9CiAjZW5kaWYKQEAgLTIwMjMsOSArMjAxNyw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQs
IEVkZ2UgcmlnaHRDaGlsZCk7CiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoTm9kZSopOwotICAg
IHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KEVkZ2UgdmFsdWUsIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spOworICAgIHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KEVkZ2UgdmFsdWUpOwogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSopOwotICAg
IHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJbmRleCB0YWtl
biwgQmxvY2tJbmRleCBub3RUYWtlbiwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjayk7CisgICAg
dm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdlIHZhbHVlLCBCbG9ja0luZGV4IHRha2Vu
LCBCbG9ja0luZGV4IG5vdFRha2VuKTsKICAgICB2b2lkIGVtaXRCcmFuY2goTm9kZSopOwogICAg
IAogICAgIHZvaWQgY29tcGlsZUludGVnZXJDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbik7CkBAIC0yMTc4LDcgKzIxNzIsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBmb3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9k
ZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
ID0gVmFsdWVSZWNvdmVyeSgpKTsKICAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgPSBWYWx1ZVJlY292ZXJ5KCkp
OwogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9k
ZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
KTsKKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVk
Z2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
KTsKICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5v
ZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJl
Y292ZXJ5JiwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIHZvaWQgc3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
KTsKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3Bl
Y3VsYXRpb24gd2lsbCBmYWlsLgogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBOb2RlKik7CiAgICAgdm9pZCB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCwgSlNWYWx1ZVJlZ3MsIEVkZ2UpOwpAQCAtMjE4OCw2
ICsyMTg0LDI0IEBAIHB1YmxpYzoKICAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBmb3J3
YXJkU3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kID0gVW5jb3VudGFibGVXYXRjaHBvaW50
KTsKICAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9pbnQo
RXhpdEtpbmQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAKKyAgICAvLyBIZWxwZXJzIGZv
ciBwZXJmb3JtaW5nIHR5cGUgY2hlY2tzIG9uIGFuIGVkZ2Ugc3RvcmVkIGluIHRoZSBnaXZlbiBy
ZWdpc3RlcnMuCisgICAgYm9vbCBuZWVkc1R5cGVDaGVjayhFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRU
eXBlIHR5cGVzUGFzc2VkVGhyb3VnaCkgeyByZXR1cm4gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1f
dHlwZSAmIH50eXBlc1Bhc3NlZFRocm91Z2g7IH0KKyAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVl
U291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91
Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOworICAgIHZvaWQgZm9yd2FyZFR5
cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0
eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmKTsKKyAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJj
ZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKworICAgIHZv
aWQgc3BlY3VsYXRlSW50MzIoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoRWRnZSk7
CisgICAgdm9pZCBzcGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRl
Qm9vbGVhbihFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSk7CisgICAgdm9pZCBz
cGVjdWxhdGVPYmplY3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVPYmplY3RPck90aGVyKEVk
Z2UpOworICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRl
Tm90Q2VsbChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOworICAgIHZvaWQg
c3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKKyAgICAKICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKICAgICAKICAgICBKSVRDb21w
aWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aElu
ZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUsIGJvb2wgaW52ZXJ0KTsKQEAg
LTIxOTcsNyArMjIxMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFycmF5aWZ5KE5vZGUqKTsKICAg
ICAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUlu
dEludGVybmFsKE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKEVkZ2UsIERhdGFG
b3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwogICAgIAogICAgIC8v
IEl0IGlzIHBvc3NpYmxlLCBkdXJpbmcgc3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8gcmVhY2gg
YSBzaXR1YXRpb24gaW4gd2hpY2ggd2UKICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUg
YSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwgKGZvciBleGFtcGxlLCB3aGVuIHR3byBub2RlcwpAQCAt
MjI0Nyw2ICsyMjYxLDkgQEAgcHVibGljOgogICAgIC8vIFRoZSBjdXJyZW50IG5vZGUgYmVpbmcg
Z2VuZXJhdGVkLgogICAgIEJsb2NrSW5kZXggbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJlbnRO
b2RlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIG1fY2FuRXhpdDsKKyNlbmRpZgog
ICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5kIHBoeXNpY2Fs
IHJlZ2lzdGVyIG1hcHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9nZW5lcmF0
aW9uSW5mbzsKQEAgLTIzMDUsMTcgKzIzMjIsMTcgQEAgcHVibGljOgogCiBjbGFzcyBJbnRlZ2Vy
T3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSW50ZWdlck9wZXJhbmQoU3BlY3VsYXRp
dmVKSVQqIGppdCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQgSW50ZWdlck9wZXJhbmQoU3BlY3Vs
YXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBB
dXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAg
ICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAs
IG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAs
IG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQogI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09
IEtub3duSW50MzJVc2UpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChlZGdlLm5vZGUoKSkp
CiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTIzMjUsOSArMjM0MiwxNCBAQCBwdWJs
aWM6CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KIAorICAg
IEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0K
KyAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25v
ZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogICAgIERhdGFGb3Jt
YXQgZm9ybWF0KCkKQEAgLTIzNDAsMjcgKzIzNjIsMjcgQEAgcHVibGljOgogICAgIEdQUlJlZyBn
cHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcp
Ci0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSW50ZWdlcihub2RlKCks
IG1fZm9ybWF0KTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxJbnRl
Z2VyKG1fZWRnZSwgbV9mb3JtYXQpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9u
b2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAg
ICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9l
ZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBEYXRhRm9ybWF0IG1fZm9ybWF0
OwogfTsKIAogY2xhc3MgSlNWYWx1ZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IEpT
VmFsdWVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0
IEpTVmFsdWVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFuZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAg
ICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBt
X2VkZ2UoZWRnZSkKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlk
KEludmFsaWRHUFJSZWcpCiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMjM2OCwxNCArMjM5
MCwxNCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0g
ICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51
c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgp
KSkKICAgICAgICAgICAgIGdwcigpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAg
bV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgICAgIG1fcmVnaXN0
ZXIucGFpci5wYXlsb2FkR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobV9ub2RlKSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAg
ICAgICAgIGZpbGwoKTsKICNlbmRpZgogICAgIH0KQEAgLTIzOTYsMTcgKzI0MTgsMjIgQEAgcHVi
bGljOgogICAgICAgICB9CiAjZW5kaWYKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9k
ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4g
ZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEdQUlJlZyBn
cHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcp
Ci0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSlNWYWx1ZShub2RlKCkp
OworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUobV9lZGdl
KTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICBKU1ZhbHVlUmVn
cyBqc1ZhbHVlUmVncygpCkBAIC0yNDE5LDcgKzI0NDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
aWxsKCkKICAgICB7CiAgICAgICAgIGlmIChtX3JlZ2lzdGVyLnBhaXIudGFnR1BSID09IEludmFs
aWRHUFJSZWcgJiYgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIgPT0gSW52YWxpZEdQUlJlZykK
LSAgICAgICAgICAgIG1faXNEb3VibGUgPSAhbV9qaXQtPmZpbGxKU1ZhbHVlKG5vZGUoKSwgbV9y
ZWdpc3Rlci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIsIG1fcmVnaXN0
ZXIuZnByKTsKKyAgICAgICAgICAgIG1faXNEb3VibGUgPSAhbV9qaXQtPmZpbGxKU1ZhbHVlKG1f
ZWRnZSwgbV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIs
IG1fcmVnaXN0ZXIuZnByKTsKICAgICB9CiAKICAgICBHUFJSZWcgdGFnR1BSKCkKQEAgLTI0NTEs
MTIgKzI0NzgsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAg
bV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQog
CiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7
CisgICAgRWRnZSBtX2VkZ2U7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgbV9ncHJP
ckludmFsaWQ7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMjQ3MywxNCArMjUwMCwxNCBA
QCBwcml2YXRlOgogCiBjbGFzcyBTdG9yYWdlT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UpCisgICAgZXhw
bGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQogICAg
ICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAg
LCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5k
KCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAg
ICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRnZS51c2VLaW5k
KCkgPT0gS25vd25DZWxsVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkK
ICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAgLTI0OTAsMjYgKzI1MTcsMzEgQEAg
cHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAg
ICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7
CisgICAgfQorICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogICAgIAog
ICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IElu
dmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3Rv
cmFnZShub2RlKCkpOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0
b3JhZ2UoZWRnZSgpKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7Cisg
ICAgICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIFNw
ZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7
CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIApAQCAtMjY0MSw5ICsyNjczLDkgQEAg
cHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgewogcHVibGljOgotICAg
IGV4cGxpY2l0IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklU
KiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dh
cmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3Bl
cmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUo
dXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52
YWxpZChJbnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Zvcm1hdChE
YXRhRm9ybWF0Tm9uZSkKQEAgLTI2NTEsOCArMjY4Myw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAg
ICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0
LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0g
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8
fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7CisgICAgICAgIGlmIChqaXQtPmlz
RmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTI2NjEsMTAg
KzI2OTMsMTUgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52
YWxpZEdQUlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAg
IH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
ZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogICAg
IERhdGFGb3JtYXQgZm9ybWF0KCkKQEAgLTI2NzcsMTggKzI3MTQsMTggQEAgcHVibGljOgogICAg
IEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFs
aWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3Vs
YXRlSW50KG5vZGUoKSwgbV9mb3JtYXQsIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZ3By
T3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnQoZWRnZSgpLCBtX2Zvcm1hdCwgbV9k
aXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAg
ICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2
ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQ
UlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBEYXRhRm9ybWF0IG1fZm9ybWF0OwogICAgIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwpAQCAtMjY5NiwxNCArMjczMywxNCBAQCBwcml2
YXRlOgogCiBjbGFzcyBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgewogcHVibGljOgotICAg
IGV4cGxpY2l0IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBFZGdlIHVzZSkKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQoU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUg
PSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAg
ICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAg
ICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9
PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7CisgICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAK
QEAgLTI3MTIsNDEgKzI3NDksNDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9ncHJPcklu
dmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPcklu
dmFsaWQpOwogICAgIH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwog
ICAgIH0KIAogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZh
bGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0
LT5maWxsU3BlY3VsYXRlSW50U3RyaWN0KG5vZGUoKSk7CisgICAgICAgICAgICBtX2dwck9ySW52
YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50U3RyaWN0KGVkZ2UoKSk7CiAgICAgICAgIHJl
dHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsK
LSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7
CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2Rl
KiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwog
fTsKIAogY2xhc3MgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgU3BlY3VsYXRlRG91YmxlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwg
U3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAg
ICBleHBsaWNpdCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxh
dGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1
bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUo
KSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZh
bGlkRlBSUmVnKQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpID09IERvdWJs
ZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VS
VF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2Uu
dXNlS2luZCgpID09IE51bWJlclVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bk51bWJlclVz
ZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBSZWFsTnVtYmVyVXNlKSk7CisgICAgICAgIGlmIChqaXQt
PmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBmcHIoKTsKICAgICB9CiAKQEAgLTI3NTUs
NDIgKzI3OTcsNDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9mcHJPckludmFsaWQgIT0g
SW52YWxpZEZQUlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2sobV9mcHJPckludmFsaWQpOwog
ICAgIH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAog
ICAgIEZQUlJlZyBmcHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZnByT3JJbnZhbGlkID09IElu
dmFsaWRGUFJSZWcpCi0gICAgICAgICAgICBtX2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3Bl
Y3VsYXRlRG91YmxlKG5vZGUoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9mcHJPcklu
dmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZURvdWJsZShlZGdlKCksIG1fZGlyZWN0aW9uKTsK
ICAgICAgICAgcmV0dXJuIG1fZnByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVz
ZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51
c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0
OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBGUFJSZWcgbV9mcHJP
ckludmFsaWQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCiBj
bGFzcyBTcGVjdWxhdGVDZWxsT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgZXhwbGljaXQg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uLCBPcGVyYW5k
U3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAg
ICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAs
IG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAg
ICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
aml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAg
ICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2Rl
LCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0g
Q2VsbFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UgfHwgZWRnZS51c2VLaW5k
KCkgPT0gT2JqZWN0VXNlIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ1VzZSkpOworICAgICAg
ICBpZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQog
CkBAIC0yNzk5LDQyICsyODQ2LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3ByT3JJ
bnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJ
bnZhbGlkKTsKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsK
ICAgICB9CiAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52
YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2pp
dC0+ZmlsbFNwZWN1bGF0ZUNlbGwobm9kZSgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBt
X2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQ2VsbChlZGdlKCksIG1fZGlyZWN0
aW9uKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2
b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1f
aml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQq
IG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcg
bV9ncHJPckludmFsaWQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9
OwogCiBjbGFzcyBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2Us
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisg
ICAgZXhwbGljaXQgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwg
RWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1
bGF0aW9uLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3Bl
Y3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9k
ZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKElu
dmFsaWRHUFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91
YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdl
LnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9k
ZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAgLTI4NDQsMzAgKzI4OTYs
NDEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAg
ICB9CiAgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2VkZ2U7CisgICAgfQorICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQog
ICAgIAogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlk
ID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5m
aWxsU3BlY3VsYXRlQm9vbGVhbihub2RlKCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1f
Z3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVCb29sZWFuKGVkZ2UoKSwgbV9kaXJl
Y3Rpb24pOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAg
IHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAg
bV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJ
VCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJl
ZyBtX2dwck9ySW52YWxpZDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsK
IH07CiAKKyNkZWZpbmUgREZHX1RZUEVfQ0hFQ0soc291cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGp1bXBUb0ZhaWwpIGRvIHsgXAorICAgICAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKChl
ZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCkpKSAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICB0eXBlQ2hlY2soKHNvdXJjZSksIChlZGdlKSwgKHR5cGVzUGFzc2VkVGhy
b3VnaCksIChqdW1wVG9GYWlsKSk7IFwKKyAgICB9IHdoaWxlICgwKQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODksMTEgKzI4OSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBnZXRMb2NhbCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrICsgMSwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgdmFy
aWFibGUtPnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldExvY2FsLCBj
b2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsK
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUs
IFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVP
cmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVj
dHVyZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgRWRnZShnZXRMb2NhbCwgQ2VsbFVzZSkpOwogCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID09IG5vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7CkBAIC0zMTcsNyArMzE3LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyB0byBleGl0LgogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9k
ZS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQxID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG5vZGUt
PmNoaWxkMSgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBTZXRMb2NhbCwgY29k
ZU9yaWdpbiwKQEAgLTMyNyw3ICszMjcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IC8vIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gcmVleGVjdXRpbmcgdGhl
IGN1cnJlbnQgb25lLgogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yd2FyZENoZWNrU3RydWN0dXJlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0
ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIGNoaWxkMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUu
bV9zdHJ1Y3R1cmUpKSwgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtp
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2lu
ZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtp
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR1VzZUtpbmQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgV1RG
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgVXNlS2luZCB1c2VLaW5kKQoreworICAgIHN3aXRjaCAodXNlS2luZCkg
eworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgb3V0LnByaW50KCJVbnR5cGVkIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIG91dC5wcmludCgiSW50
MzIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICBv
dXQucHJpbnQoIktub3duSW50MzIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWFsTnVt
YmVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIlJlYWxOdW1iZXIiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiTnVtYmVyIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIG91dC5wcmludCgi
S25vd25OdW1iZXIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCb29sZWFuVXNlOgorICAg
ICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDZWxs
VXNlOgorICAgICAgICBvdXQucHJpbnQoIkNlbGwiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBLbm93bkNlbGxVc2U6CisgICAgICAgIG91dC5wcmludCgiS25vd25DZWxsIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CisgICAgICAgIG91
dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cmlu
Z1VzZToKKyAgICAgICAgb3V0LnByaW50KCJTdHJpbmciKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBOb3RDZWxsVXNlOgorICAgICAgICBvdXQucHJpbnQoIk5vdENlbGwiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBPdGhlclVzZToKKyAgICAgICAgb3V0LnByaW50KCJPdGhlciIpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdVc2VL
aW5kX2gKKyNkZWZpbmUgREZHVXNlS2luZF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitlbnVtIFVzZUtpbmQgeworICAgIFVudHlwZWRVc2UsCisgICAgSW50MzJVc2UsCisg
ICAgS25vd25JbnQzMlVzZSwKKyAgICBSZWFsTnVtYmVyVXNlLAorICAgIE51bWJlclVzZSwKKyAg
ICBLbm93bk51bWJlclVzZSwKKyAgICBCb29sZWFuVXNlLAorICAgIENlbGxVc2UsCisgICAgS25v
d25DZWxsVXNlLAorICAgIE9iamVjdFVzZSwKKyAgICBPYmplY3RPck90aGVyVXNlLAorICAgIFN0
cmluZ1VzZSwKKyAgICBOb3RDZWxsVXNlLAorICAgIE90aGVyVXNlLAorICAgIExhc3RVc2VLaW5k
IC8vIE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1
c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMuCit9OworCitBTFdBWVNf
SU5MSU5FIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNlS2luZCB1c2VLaW5kKQorewor
ICAgIHN3aXRjaCAodXNlS2luZCkgeworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgcmV0
dXJuIFNwZWNFbXB0eU9yVG9wOyAvLyBUT1AgaXNuJ3QgZ29vZCBlbm91Z2g7IHVudHlwZWQgdXNl
cyBtYXkgdXNlIHRoZSBub3JtYWxseSB1bnNlZW4gZW1wdHkgdmFsdWUsIGluIHRoZSBjYXNlIG9m
IGxhenkgcmVnaXN0ZXJzLgorICAgIGNhc2UgSW50MzJVc2U6CisgICAgY2FzZSBLbm93bkludDMy
VXNlOgorICAgICAgICByZXR1cm4gU3BlY0ludDMyOworICAgIGNhc2UgUmVhbE51bWJlclVzZToK
KyAgICAgICAgcmV0dXJuIFNwZWNSZWFsTnVtYmVyOworICAgIGNhc2UgTnVtYmVyVXNlOgorICAg
IGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjTnVtYmVyOworICAgIGNh
c2UgQm9vbGVhblVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNCb29sZWFuOworICAgIGNhc2UgQ2Vs
bFVzZToKKyAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNDZWxsOwor
ICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKKyAgICBjYXNl
IE9iamVjdE9yT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT2JqZWN0IHwgU3BlY090aGVy
OworICAgIGNhc2UgU3RyaW5nVXNlOgorICAgICAgICByZXR1cm4gU3BlY1N0cmluZzsKKyAgICBj
YXNlIE5vdENlbGxVc2U6CisgICAgICAgIHJldHVybiB+U3BlY0NlbGw7CisgICAgY2FzZSBPdGhl
clVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNPdGhlcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU3BlY1RvcDsKKyAg
ICB9Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBpc051bWVyaWNhbChVc2VLaW5kIGtpbmQpCit7
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnQzMlVzZToKKyAgICBjYXNlIEtub3du
SW50MzJVc2U6CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgIGNhc2UgTnVtYmVyVXNlOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYg
eworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6VXNlS2luZCk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdVc2VLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNyArMzU0LDcgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5v
ZGUsIEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgLT4gJXNAJXUiLCBu
b2RlLT5pbmRleCgpLCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLT5pbmRl
eCgpKTsKKyAgICAgICAgZGF0YUxvZyhub2RlLCAiIC0+ICIsIGVkZ2UpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3RlciBsb2NhbCwg
QmxvY2tJbmRleCBibG9ja0luZGV4KQpAQCAtMzg5LDcgKzM4OSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKICAgICAgICAgTm9kZSogbm9kZSwgQmxvY2tJ
bmRleCBibG9ja0luZGV4LCBOb2RlKiBleHBlY3RlZE5vZGUsIEVkZ2UgaW5jb21pbmdFZGdlKQog
ICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUsIHNlYXJjaGluZyBmb3Ig
QCV1IGZyb20gQCV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlLT5p
bmRleCgpLCBpbmNvbWluZ0VkZ2UtPmluZGV4KCkpOworICAgICAgICBkYXRhTG9nKG5vZGUsICIg
aW4gQmxvY2sgIyIsIGJsb2NrSW5kZXgsICIsIHNlYXJjaGluZyBmb3IgIiwgZXhwZWN0ZWROb2Rl
LCAiIGZyb20gIiwgaW5jb21pbmdFZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wR3Jh
cGhJZkFwcHJvcHJpYXRlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189453</attachid>
            <date>2013-02-20 20:57:09 -0800</date>
            <delta_ts>2013-02-20 21:08:36 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>388923</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzNTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4OCBA
QAorMjAxMy0wMi0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgbm90IGNoYW5nZSBpdHMgbWluZCBhYm91dCB3aGF0IHR5cGUgc3BlY3VsYXRp
b25zIGEgbm9kZSBkb2VzLCBieSBlbmNvZGluZyB0aGUgY2hlY2tzIGluIHRoZSBOb2RlVHlwZSwg
VXNlS2luZCwgYW5kIEFycmF5TW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBGaXh1cFBoYXNlIG5vdyBsb2NrcyBpbiB0aGUgc3BlY3Vs
YXRpb25zIHRoYXQgZWFjaCBub2RlIHdpbGwgZG8uIFRoZSBERkcgdGhlbgorICAgICAgICByZW1l
bWJlcnMgdGhvc2Ugc3BlY3VsYXRpb25zLCBhbmQgZG9lc24ndCBjaGFuZ2UgaXRzIG1pbmQgYWJv
dXQgdGhlbSBldmVuIGlmIHRoZQorICAgICAgICBncmFwaCBpcyB0cmFuc2Zvcm1lZCAtIGZvciBl
eGFtcGxlIGlmIGEgbm9kZSdzIGNoaWxkIGlzIHJlcG9pbnRlZCB0byBhIGRpZmZlcmVudAorICAg
ICAgICBub2RlIGFzIHBhcnQgb2YgQ1NFLCBDRkcgc2ltcGxpZmljYXRpb24sIG9yIGZvbGRpbmcu
IEVhY2ggbm9kZSBlbnN1cmVzIHRoYXQgaXQKKyAgICAgICAgZXhlY3V0ZXMgdGhlIHNwZWN1bGF0
aW9ucyBwcm9taXNlZCBieSBpdHMgZWRnZXMuIFRoaXMgaXMgdHJ1ZSBldmVuIGZvciBQaGFudG9t
CisgICAgICAgIG5vZGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGlsbCBsZWF2ZXMgc29t
ZSBjcmF6aW5lc3Mgb24gdGhlIHRhYmxlIGZvciBmdXR1cmUgd29yaywgbGlrZSB0aGUKKyAgICAg
ICAgZWxpbWluYXRpb24gb2Ygc3BlY3VsYXRpbmcgU2V0TG9jYWwncyBkdWUgdG8gQ0ZHIHNpbXBs
aWZpY2F0aW9uCisgICAgICAgICh3ZWJraXQub3JnL2IvMTA5Mzg4KSBhbmQgZWxpbWluYXRpb24g
b2Ygbm9kZXMgdmlhIERDRSAod2Via2l0Lm9yZy9iLzEwOTM4OSkuCisgICAgICAgIAorICAgICAg
ICBJbiBhbGwsIHRoaXMgYWxsb3dzIGZvciBhIGh1Z2Ugc2ltcGxpZmljYXRpb24gb2YgdGhlIERG
Ry4gSW5zdGVhZCBvZiBoYXZpbmcgdG8KKyAgICAgICAgZXhlY3V0ZSB0aGUgcmlnaHQgc3BlY3Vs
YXRpb24gaGV1cmlzdGljIGVhY2ggdGltZSB5b3Ugd2FudCB0byBkZWNpZGUgd2hhdCBhIG5vZGUK
KyAgICAgICAgZG9lcyAoZm9yIGV4YW1wbGUgTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihj
aGlsZDEsIGNoaWxkMikgJiYKKyAgICAgICAgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSwg
eW91IGp1c3QgYXNrIGZvciB0aGUgdXNlIGtpbmRzIG9mIGl0cyBjaGlsZHJlbgorICAgICAgICAo
dHlwaWNhbGx5IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBJbnQzMlVzZSkuIEJlY2F1c2UgdGhl
IHVzZSBraW5kcyBhcmUKKyAgICAgICAgZGlzY3JldGUsIHlvdSBjYW4gb2Z0ZW4ganVzdCBzd2l0
Y2ggb3ZlciB0aGVtLiBUaGlzIG1ha2VzIG1hbnkgcGFydHMgb2YgdGhlIGNvZGUKKyAgICAgICAg
bW9yZSBjbGVhciB0aGFuIHRoZXkgd2VyZSBiZWZvcmUuCisgICAgICAgIAorICAgICAgICBIYXZp
bmcgVXNlS2luZHMgZGVzY3JpYmUgdGhlIHNwZWN1bGF0aW9ucyBiZWluZyBwZXJmb3JtZWQgYWxz
byBtYWtlcyBpdCBmYXIKKyAgICAgICAgZWFzaWVyIHRvIHBlcmZvcm0gYW5hbHlzZXMgdGhhdCBu
ZWVkIHRvIGtub3cgd2hhdCBzcGVjdWxhdGlvbnMgYXJlIGRvbmUuIFRoaXMgaXMKKyAgICAgICAg
c28gZmFyIG9ubHkgdXNlZCB0byBzaW1wbGlmeSBsYXJnZSBwYXJ0cyBvZiB0aGUgQ0ZBLgorICAg
ICAgICAKKyAgICAgICAgVG8gaGF2ZSBhIGxhcmdlciB2b2NhYnVsYXJ5IG9mIFVzZUtpbmRzLCB0
aGlzIGFsc28gY2hhbmdlcyB0aGUgbm9kZSBhbGxvY2F0b3IgdG8KKyAgICAgICAgYmUgYWJsZSB0
byByb3VuZCB1cCBOb2RlIHNpemVzIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIDE2LgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBhcHBlYXJzIHRvIGJlIG5ldXRyYWwgb24gYmVuY2htYXJrcywg
ZXhjZXB0IGZvciBzb21lIGdvb2Z5IHNwZWVkLXVwcywgbGlrZQorICAgICAgICA4JSBvbiBPY3Rh
bmUvYm94MmQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVj
dXRpbmcpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpleGVjdXRlRWRnZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnZlcmlm
eUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2VzKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6OmZpbHRlckVkZ2VCeVVzZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6ZmlsdGVyQnlUeXBlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlcik6Cisg
ICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGph
Y2VuY3lMaXN0OjpBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGphY2VuY3lM
aXN0OjpjaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6c2V0Q2hpbGQp
OgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnJlc2V0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpBZGphY2VuY3lMaXN0OjpmaXJzdENoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpB
ZGphY2VuY3lMaXN0OjpzZXRGaXJzdENoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGphY2Vu
Y3lMaXN0OjpudW1DaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6
c2V0TnVtQ2hpbGRyZW4pOgorICAgICAgICAoQWRqYWNlbmN5TGlzdCk6CisgICAgICAgICogZGZn
L0RGR0FsbG9jYXRvci5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEFsbG9jYXRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpjZWxsU2l6ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWxsb2NhdG9yOjpSZWdpb246OmhlYWRlclNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFs
bG9jYXRvcjo6UmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbik6CisgICAgICAgIChKU0M6
OkRGRzo6QWxsb2NhdG9yOjpSZWdpb246OnBheWxvYWRTaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpBbGxvY2F0b3I6OlJlZ2lvbjo6cGF5bG9hZEJlZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpB
bGxvY2F0b3I6OlJlZ2lvbjo6cGF5bG9hZEVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2Nh
dG9yOjpSZWdpb246OmlzSW5UaGlzUmVnaW9uKToKKyAgICAgICAgKEpTQzo6REZHOjo6OkFsbG9j
YXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Ojp+QWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjo6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmZyZWUpOgorICAgICAgICAo
SlNDOjpERkc6Ojo6ZnJlZUFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6OjpyZXNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6OjppbmRleE9mKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmFsbG9jYXRv
ck9mKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmJ1bXBBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6OjpmcmVlTGlzdEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmFsbG9jYXRl
U2xvdyk6CisgICAgICAgIChKU0M6OkRGRzo6OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQpOgorICAg
ICAgICAoSlNDOjpERkc6Ojo6c3RhcnRCdW1waW5nSW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFRv
R3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgp
OgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OnNldExvY2FsU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OmVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjphZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2spOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdFZGdlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpFZGdlOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHRWRnZS5oOgorICAgICAgICAo
SlNDOjpERkc6OkVkZ2U6OnVzZUtpbmRVbmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpERkc6OkVk
Z2U6OnVzZUtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OnNoaWZ0KToKKyAgICAgICAg
KiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeEludEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZp
eERvdWJsZUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmluamVjdEludDMy
VG9Eb3VibGVOb2RlKToKKyAgICAgICAgKEZpeHVwUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OnRydW5jYXRlQ29uc3RhbnRUb0ludDMyKToKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjp0cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjphdHRlbXB0VG9NYWtlSW50ZWdlckFkZCk6CisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnJlZkNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGVyZWZDaGlsZHJl
bik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OnJlZik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRlcmVmKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6cGVyZm9ybVN1YnN0aXR1dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmlzUHJlZGljdGVkTnVtZXJpY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YWRk
SW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcik6CisgICAgICAgIChERkcpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Tm9kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjp3aWxsSGF2ZUNvZGVHZW5Pck9TUik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hp
bGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDIpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmNoaWxkMyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YmluYXJ5VXNlS2lu
ZCk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc0JpbmFyeVVz
ZUtpbmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlQWxsb2NhdG9yLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxhZ3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om5v
ZGVGbGFnc0FzU3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KERGRyk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0eXBl
Q2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmb3J3YXJkVHlwZUNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuY2gp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVB1dEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0
YW5jZU9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1Yik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVJbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZVJlYWxOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGVOb3RDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3Vs
YXRpdmVKSVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mTnVt
YmVyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpuZWVkc1R5
cGVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OkludGVnZXJPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6ZWRnZSk6CisgICAgICAg
IChJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6Om5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpncHIpOgorICAgICAgICAo
SlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFs
dWVPcGVyYW5kOjpKU1ZhbHVlT3BlcmFuZCk6CisgICAgICAgIChKU1ZhbHVlT3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpTVmFsdWVPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3Bl
cmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6ZmlsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpT
dG9yYWdlT3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChTdG9yYWdlT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0
b3JhZ2VPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjp1
c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAgIChTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQ6OmVkZ2UpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ6OlNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCk6Cisg
ICAgICAgIChTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQ6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQpOgorICAgICAgICAoU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91Ymxl
T3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFu
ZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6ZnBy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kOjp1c2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kOjpTcGVjdWxhdGVDZWxsT3BlcmFu
ZCk6CisgICAgICAgIChTcGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
ZUNlbGxPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3Bl
cmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6dXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6U3BlY3VsYXRl
Qm9vbGVhbk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xlYW5PcGVy
YW5kOjplZGdlKToKKyAgICAgICAgKFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChERkcpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpmaWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVJbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVj
dE9yT3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcik6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjppc051
bWVyaWNhbCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0KToK
KwogMjAxMy0wMi0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IERGRyBpbmxpbmVzIFJlc29sdmVzIHRoYXQgaXQgZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUg
Y29ycmVjdGx5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwog
ICAgIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1Ro
dW5rcy5jcHAKICAgICBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHVXNl
S2luZC5jcHAKICAgICBkZmcvREZHVmFsdWVTb3VyY2UuY3BwCiAgICAgZGZnL0RGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuY3BwCiAgICAgZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTQzNDI2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI3Miw2ICsyNzIsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVc2VLaW5kLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5k
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuY3BwIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNiArMTQ5LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgXAogICAg
IGRmZy9ERkdUaHVua3MuY3BwIFwKICAgICBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAgXAor
ICAgIGRmZy9ERkdVc2VLaW5kLmNwcCBcCiAgICAgZGZnL0RGR1ZhbHVlU291cmNlLmNwcCBcCiAg
ICAgZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwIFwKICAgICBkZmcvREZHVmFyaWFi
bGVFdmVudC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDggQEAKIAkJ
MEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzU1NkQxNDczOEYyRTAwMTIx
RTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovOyB9OwogCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRG
RDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU5ODdGMkYxNjgyOEE3RTAwM0MyRjhEIC8qIFVudXNlZFBvaW50ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJFODky
RDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERG
R01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBF
MDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CisJCTBGMzRCMTRBMTZENDIwMTMwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzRCMTRDMTZE
NDNFMEQwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTRCMTZENDNFMEMw
MDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCM0ExQTE1M0U2OEYyMDAz
RUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEYzQjNBMUIxNTNFNjhGNDAwM0VE
MEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTAwMSw2ICsxMDAzLDggQEAKIAkJMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4
OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHVmFyaWFibGVFdmVudC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZEMTQ3MzhGMkUwMDEy
MUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERGR0NvZGVCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0g
ZGZnL0RGR1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM0QjE0
ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdVc2VLaW5kLmg7IHBhdGggPSBkZmcvREZHVXNlS2luZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZG
IC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MDksNiArMjcx
Myw4IEBACiAJCQkJMEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oICovLAog
CQkJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRkJFMEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5o
ICovLAorCQkJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLywK
KwkJCQkwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovLAogCQkJCTBG
M0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgKi8sCiAJCQkJMEYzQjNB
MkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8sCiAJCQkJMEYyQkRDM0YxNTIy
ODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oICovLApAQCAtMzI1MSw2
ICszMjU3LDcgQEAKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmls
ZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUxMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QTUxNjZBRDM1
MTAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcy
OUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zOTU3LDYgKzM5NjQsNyBAQAogCQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQ
cm9maWxlckNvbXBpbGF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMTE2
NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRjcyOUIyMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzRCMTQ5MTZENDIwMTAwMDFDREE1QSAvKiBERkdVc2VL
aW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQ
cm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAw
RjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
MDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsMzAgKzIzNCw2MSBAQCBBYnN0
cmFjdFN0YXRlOjpCb29sZWFuUmVzdWx0IEFic3RyYWN0U3RhCiAgICAgcmV0dXJuIFVua25vd25C
b29sZWFuUmVzdWx0OwogfQogCi1ib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kZXhJbkJsb2NrKQorYm9vbCBBYnN0cmFjdFN0YXRlOjpzdGFydEV4ZWN1dGluZyhOb2RlKiBu
b2RlKQogewogICAgIEFTU0VSVChtX2Jsb2NrKTsKICAgICBBU1NFUlQobV9pc1ZhbGlkKTsKICAg
ICAKICAgICBtX2RpZENsb2JiZXIgPSBmYWxzZTsKICAgICAKLSAgICBOb2RlKiBub2RlID0gbV9i
bG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgCisgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgCiAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpzdGFydEV4ZWN1dGluZyh1bnNp
Z25lZCBpbmRleEluQmxvY2spCit7CisgICAgcmV0dXJuIHN0YXJ0RXhlY3V0aW5nKG1fYmxvY2st
PmF0KGluZGV4SW5CbG9jaykpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdl
cyhOb2RlKiBub2RlKQoreworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5v
ZGUsIGZpbHRlckVkZ2VCeVVzZSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVk
Z2VzKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICBleGVjdXRlRWRnZXMobV9ibG9jay0+
YXQoaW5kZXhJbkJsb2NrKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5RWRnZShO
b2RlKiwgRWRnZSBlZGdlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCEoZm9yTm9kZShlZGdlKS5t
X3R5cGUgJiB+dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpKTsKK30KKwordm9pZCBBYnN0
cmFjdFN0YXRlOjp2ZXJpZnlFZGdlcyhOb2RlKiBub2RlKQoreworICAgIERGR19OT0RFX0RPX1RP
X0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIHZlcmlmeUVkZ2UpOworfQorCitib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSkK
K3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgdmVyaWZ5RWRnZXMobm9kZSk7
CisgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50Ogog
ICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7CiAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkp
OwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIElkZW50aXR5OiB7CiAgICAgICAgIGZvck5vZGUobm9kZSkg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMjY1LDE5ICsyOTYs
MTYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCkg
PT0gU3BlY05vbmUpIHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwogICAgICAgICBBYnN0cmFjdFZhbHVlIHZh
bHVlID0gbV92YXJpYWJsZXMub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwog
ICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAg
ICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQotICAgICAgICAgICAgICAgIGNhbkV4aXQgfD0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAg
ICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7CiAgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChjYW5FeGl0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI4
NiwzNSArMzE0LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKICAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOwotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFNldExvY2FsOiB7Ci0gICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
aXNDYXB0dXJlZCgpCi0gICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVu
dChub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3Vi
bGVGb3JtYXQoKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0g
ICAgICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLnNldChTcGVjRG91
YmxlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7Ci0gICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUp
OwotICAgICAgICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewot
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1
bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5
KG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKLSAgICAgICAgCiAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzIy
LDcgKzMyNSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2Yg
YXJndW1lbnRzIGhhcyBiZWVuIHNldC4KICAgICAgICAgQVNTRVJUKCFtX2Jsb2NrLT52YWx1ZXNB
dEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IEJpdEFuZDoKQEAgLTM2MiwxMSArMzY0LDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2Fz
U2V0KSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnko
bm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTM3NywyMCArMzc3LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIEFTU0VSVChjaGlsZC5pc0ludDMyKCkpOwog
ICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoY2hpbGQuYXNVSW50
MzIoKSkpKSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50
MzI6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CkBAIC00MDQsNyArNDAxLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNDE5LDIwICs0MTUsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKEpTQzo6dG9JbnQzMihjaGlsZC5hc0RvdWJsZSgpKSkp
OwogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAgICAgICAgICAgc3Bl
Y3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJV
bmFyeShub2RlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcih+U3BlY0NlbGwpOwotICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBi
cmVhazsKQEAgLTQ0NCwxMCArNDI5LDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKQogICAgICAg
ICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgY2hpbGQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7
CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSkKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsK
ICAgICAgICAgZWxzZQpAQCAtNDU1LDEwICs0MzgsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAg
Y2FzZSBDaGVja051bWJlcjoKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNOdW1iZXIpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgIGNhc2UgVmFs
dWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDogewogICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwpAQCAtNDY2LDMzICs0NDUsMjcgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAobGVmdCAmJiBy
aWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQogICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5h
c051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAg
ICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW50MzJVc2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdz
KCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVt
YmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKKyAg
ICAgICAgY2FzZSBOdW1iZXJVc2U6CiAgICAgICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQogICAgICAgICAgICAgICAgICYm
IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkp
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3Vi
bGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gVmFsdWVBZGQpIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFsdWVBZGQpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjU3RyaW5nIHwgU3BlY0ludDMyIHwgU3BlY051bWJlcik7Ci0gICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0aGlzIHlldC4gOi0oCi0gICAgICAgIG1faXNW
YWxpZCA9IGZhbHNlOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTUwMiwxNyArNDc1LDIxIEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKGxlZnQgJiYgcmln
aHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKICAgICAgICAgICAgICYm
IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNO
dW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
KSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAg
bm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIElu
dDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygp
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApAQCAtNTIxLDE3ICs0OTgsMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIo
KQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZSgtY2hpbGQuYXNO
dW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeSgKLSAgICAgICAgICAgICAg
ICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNh
c2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwor
ICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZs
YWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKQEAgLTU0MSwyMyArNTIyLDI2IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKICAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKSkp
KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwKLSAg
ICAgICAgICAgICAgICAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFn
cygpKQotICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUt
PmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5k
KCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIo
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgICAgICB8fCAhbm9kZUNhbklnbm9y
ZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TnVtYmVyVXNlOgorICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgICAgICB8fCBpc1JlYWxOdW1i
ZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgaWYgKGlzUmVhbE51bWJlclNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8
IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkp
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNTkxLDE4ICs1NzUsMjEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
U3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShu
b2RlLCB0cnVlKTsgLy8gZm9yY2luZyBjYW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNv
bnNlcnZhdGl2ZSBzaWRlLgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkg
eworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2Rl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgICAgIApAQCAtNjExLDE3ICs1OTgsMjAgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQu
aXNOdW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShm
YWJzKGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2Rl
LCB0cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgICAgIApAQCAtNjMwLDEwICs2MjAsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJl
cigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKHNxcnQoY2hp
bGQuYXNOdW1iZXIoKSkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtNjUyLDIxICs2NDAsMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICB9CiAgICAgICAgIGlmIChkaWRTZXRDb25zdGFudCkgewogICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUqIGNo
aWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3Vs
YXRpb24oY2hpbGQtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFu
VW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3RPck90aGVyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBjYXNlIEludDMyVXNlOgorICAg
ICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIo
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlm
IChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRl
SW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0
ZU51bWJlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC03
NjQsMTQgKzc1MiwxNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAg
ICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGljdGlvbigpKSkgewot
ICAgICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9u
KCkpKQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmlu
Zyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUp
LmZpbHRlcihTcGVjQ2VsbCk7CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIGNhc2UgQ2VsbFVzZToK
ICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgIGJyZWFrOwpAQCAtODIzLDY1ICs4MTQsMTggQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAKICAgICAgICAgaWYgKGNvbnN0
YW50V2FzU2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcUNvbnN0YW50KSB7
Ci0gICAgICAgICAgICAvLyBXZSBjYW4gZXhpdCBpZiB3ZSBoYXZlbid0IGZpcmVkIHRoZSBNYXNx
dWVyYWRlc0FzVW5kZWZpbmQgd2F0Y2hwb2ludCB5ZXQuCi0gICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBsZWZ0ID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBOb2RlKiByaWdodCA9IG5vZGUtPmNoaWxk
MigpLm5vZGUoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgZmlsdGVyOwotICAgICAgICBTcGVj
dWxhdGVkVHlwZUNoZWNrZXIgY2hlY2tlcjsKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUludGVnZXIobGVmdCwgcmlnaHQpKSB7Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjSW50
MzI7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNJbnQzMlNwZWN1bGF0aW9uOwotICAgICAgICB9
IGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0LCByaWdodCkpIHsKLSAg
ICAgICAgICAgIGZpbHRlciA9IFNwZWNOdW1iZXI7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNO
dW1iZXJTcGVjdWxhdGlvbjsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IENvbXBh
cmVFcSkgewotICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8
IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fSAKLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiByaWdo
dC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNP
YmplY3QpOwotICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjT2JqZWN0
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChsZWZ0LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiByaWdodC0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09iamVjdCB8IFNwZWNPdGhl
cik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIHJpZ2h0LT5zaG91bGRT
cGVjdWxhdGVPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCB8IFNw
ZWNPdGhlcik7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmpl
Y3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotIAotICAgICAgICAg
ICAgZmlsdGVyID0gU3BlY1RvcDsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FueVNwZWN1bGF0
aW9uOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjVG9wOwot
ICAgICAgICAgICAgY2hlY2tlciA9IGlzQW55U3BlY3VsYXRpb247Ci0gICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgfQotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgIWNoZWNrZXIoZm9yTm9kZShsZWZ0
KS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhY2hlY2tlcihmb3JOb2RlKHJpZ2h0KS5tX3R5cGUp
KTsKLSAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoZmlsdGVyKTsKLSAgICAgICAgZm9yTm9k
ZShyaWdodCkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgIC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNl
cnZhdGl2ZS4gQnV0IHRoZSBvbmx5IHRoaW5nIHRoaXMgcHJldmVudHMgaXMgc3RvcmUgZWxpbWlu
YXRpb24sCisgICAgICAgIC8vIGFuZCBob3cgbGlrZWx5IGlzIGl0LCByZWFsbHksIHRoYXQgeW91
J2xsIGhhdmUgcmVkdW5kYW50IHN0b3JlcyBhY3Jvc3MgYSBjb21wYXJpc29uCisgICAgICAgIC8v
IG9wZXJhdGlvbj8gQ29tcGFyaXNvbiBvcGVyYXRpb25zIGFyZSB0eXBpY2FsbHkgYXQgdGhlIGVu
ZCBvZiBiYXNpYyBibG9ja3MsIHNvCisgICAgICAgIC8vIHVubGVzcyB3ZSBoYXZlIGdsb2JhbCBz
dG9yZSBlbGltaW5hdGlvbiAoc3VwZXIgdW5saWtlbHkgZ2l2ZW4gaG93IHVucHJvZml0YWJsZSB0
aGF0CisgICAgICAgIC8vIG9wdGltaXphdGlvbiBpcyB0byBiZWdpbiB3aXRoKSwgeW91IGFyZW4n
dCBnb2luZyB0byBiZSB3YW50aW5nIHRvIHN0b3JlIGVsaW1pbmF0ZQorICAgICAgICAvLyBhY3Jv
c3MgYW4gZXF1YWxpdHkgb3AuCisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtODk0LDQ3ICs4MzgsMjAgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAobGVmdCAm
JiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQogICAgICAgICAg
ICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGxlZnQuYXNOdW1iZXIoKSA9PSBy
aWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7Ci0g
ICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KSB7Ci0gICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnROb2Rl
LCByaWdodE5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHROb2Rl
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVm
dE5vZGUtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIHJpZ2h0Tm9kZS0+c2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKHJpZ2h0Tm9kZSkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2ZS4K
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJDb2Rl
QXQ6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJB
dDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC05NTQsMTUgKzg3MSwx
MiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJp
bmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VUb3AoKTsKQEAgLTk3MCw3ICs4ODQsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAg
ICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKQEAgLTk4Miw0OCAr
ODk1LDM4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xh
bXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91
YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMDM2LDkgKzkzOSw2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIFB1dEJ5VmFsOgogICAg
IGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAg
ICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAg
RWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICBzd2l0
Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CkBAIC0x
MDQ3LDEwNCArOTQ3LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5j
b2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KSkKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0
QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2Vs
bCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKICAgICAgICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBp
ZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVy
KFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVt
YmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1w
ZWRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMiku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBDUkFTSCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CkBAIC0xMTUyLDE2ICs5NzEsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY051bWJlcik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE3NCwxNiArOTgz
LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1bGF0
aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3Ao
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEp1bXA6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgQnJhbmNoOiB7CkBAIC0xMTkxLDM2ICs5OTQsMjMgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBCb29sZWFuUmVzdWx0IHJlc3VsdCA9
IGJvb2xlYW5SZXN1bHQobm9kZSwgZm9yTm9kZShjaGlsZCkpOwogICAgICAgICBpZiAocmVzdWx0
ID09IERlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRh
a2VUcnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAocmVzdWx0ID09IERlZmluaXRlbHlGYWxz
ZSkgewogICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlRmFsc2U7Ci0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgYWJvdmUgaGFuZGxlcyB0aGUgdHJpdmlhbCBjYXNl
cyBvZiBzcGFyc2UgY29uZGl0aW9uYWwKICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24s
IGJ1dCB3ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUg
c291cmNlIHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8g
dGhlIGJyYW5jaC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkp
Ci0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0
ZXIoU3BlY09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnko
bm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkK
LSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBtX2Jy
YW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
ICAgICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBUaHJvdzoKQEAgLTEyMzAsMjIgKzEwMjAsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2Rl
KGNoaWxkKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENv
bnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsKICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAg
ICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEFi
c3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUoY2hpbGQpOworICAgICAgICBBYnN0cmFjdFZh
bHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAKICAgICAgICAgLy8g
TkIuIFRoZSBtb3JlIGNhbm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVl
bjoKQEAgLTEyNzUsMzkgKzEwNjEsMTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAg
ICAgICAgIGRlc3RpbmF0aW9uLnNldCh0eXBlKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgU3Ry
Q2F0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
Y2FzZSBOZXdBcnJheToKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
c3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAg
QVNTRVJUKCFub2RlLT5udW1DaGlsZHJlbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsg
KytvcGVyYW5kSW5kZXgpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBv
cGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTEzMjAsMTkgKzEw
ODIsMTYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogCiAgICAg
Y2FzZSBOZXdBcnJheVdpdGhTaXplOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0FycmF5KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJl
cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdl
eHA6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+cmVnRXhw
U3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIE5v
ZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICBBYnN0cmFjdFZhbHVl
JiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgCkBAIC0xMzQxLDM4
ICsxMTAwLDMxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgIC8vIG9iamVjdCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRo
aW5rIHRoaXMgY2FzZSB3aWxsCiAgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWlu
LCB5b3UgbmV2ZXIga25vdy4KICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsgLy8gVGVsbCB0aGUgY29uc3RhbnQgZm9sZGVyIHRvIHR1cm4gdGhpcyBp
bnRvIElkZW50aXR5LgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNP
dGhlclNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBzb3Vy
Y2UuZmlsdGVyKFNwZWNPdGhlcik7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisgICAgICAgIGNhc2UgT3RoZXJVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlv
bi5zZXQoU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlv
bigpKSkgewotICAgICAgICAgICAgc291cmNlLmZpbHRlcihTcGVjT2JqZWN0KTsKKyAgICAgICAg
Y2FzZSBPYmplY3RVc2U6CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICBkZXN0
aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAg
ICAgICBkZXN0aW5hdGlvbi5tZXJnZShTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
c291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlKTsKLSAgICAgICAgCi0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsKLSAgICAgICAgICAg
IAotICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNGdW5jdGlvbik7Ci0gICAgICAgIGRlc3RpbmF0
aW9uLnNldChTcGVjRmluYWxPYmplY3QpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RmluYWxPYmplY3QpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTM4MSwz
NiArMTEzMywzMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUo
KSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgbV9o
YXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IFRlYXJPZmZBY3RpdmF0aW9uOgogICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKLSAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8vIERvZXMgbm90aGluZyB0aGF0IGlz
IHVzZXItdmlzaWJsZS4KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENoZWNrQXJndW1lbnRz
Tm90Q3JlYXRlZDoKICAgICAgICAgaWYgKGlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAgICAg
ICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFy
Z3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAg
ZWxzZQogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIApAQCAtMTQzMCw3ICsxMTc3LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRo
ZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQgb24g
dGhlIGxlbmd0aCBwcm9wZXJ0eS4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmln
aW4sIGluZGV4SW5CbG9jayk7CkBAIC0xNDQ0LDcgKzExOTAsNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4
ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6
ZQogICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVw
IGJlaW5nIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHRoZQogICAgICAgICAvLyBBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKQEAgLTE0NTMsOCArMTE5OCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVy
cyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAg
ICAgICAvLyBhIGdldHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAg
IC8vIEJ1dCB3ZSBkbyBzcGVjdWxhdGUgdGhhdCB0aGUgaW5kZXggaXMgYW4gaW50ZWdlci4KLSAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
IC8vIEFuZCB0aGUgcmVzdWx0IGlzIHVua25vd24uCiAgICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZVRvcCgpOwogICAgICAgICBicmVhazsKQEAgLTE0NjIsMjkgKzEyMDUsMjQgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAg
ICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hl
Y2s6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5m
dW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0Q2FsbGVlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgU2V0Q2FsbGVlOgogICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRTY29wZTogLy8gRklYTUU6IFdlIGNvdWxkIGdldCByaWQgb2YgdGhlc2UgaWYgd2Uga25v
dyB0aGF0IHRoZSBKU0Z1bmN0aW9uIGlzIGEgY29uc3RhbnQuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDIKICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgY2Fz
ZSBTa2lwVG9wU2NvcGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIFNraXBTY29wZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAg
ICAgICAgIGlmIChjaGlsZCAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxK
U1Njb3BlKj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7CkBAIC0xNDk1LDE4ICsxMjMzLDE0IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIEdldFNjb3BlUmVn
aXN0ZXJzOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2Rl
KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUtPmNvZGVPcmln
aW4pOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTUxOCw4ICsxMjUyLDYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0NlbGwpOwotCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAg
ICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsCkBAIC0xNTU1LDcgKzEyODcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIC8vIG1vcmUgdGhvcm91Z2hseS4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMAogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQg
ZWxpbWluYXRlIHRoZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVlIHRoYXQg
Zmxvd3MgaW50byB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA2MjAxCi0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTE1NjQsNiArMTI5NSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewogICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1
cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFTU0VSVCgh
KHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2
ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hl
Y2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAg
ICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQg
Zm9sZGluZyBwaGFzZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBv
aW50IGluc3RlYWQuCkBAIC0xNTcxLDkgKzEzMDMsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhdmFsdWUu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICB8fCAh
aXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSk7CisgICAgICAgIGlmICghdmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTE1OTEsNyArMTMyMiw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8g
aW5maW5pdHkgb2Ygc3RydWN0dXJlcy4KICAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkp
KSk7CiAgICAgICAgIAotICAgICAgICBBU1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2
ZSBwcm92ZW4gbXVzdC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24g
dG8gYmUgYmFkLgogICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKQEAgLTE2MDAsNyArMTMzMCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNh
c2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKQEAgLTE2MTAsMTQgKzEzMzks
MTEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2Ug
R2V0QnV0dGVyZmx5OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2Fz
ZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFp
c0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCB0aGlzIGlz
IGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3YXlzIGV4aXQs
IHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIgaGVyZS4KQEAg
LTE2MzAsNyArMTM1Niw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CkBAIC0x
NjczLDE1ICsxMzk4LDExIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsK
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpDb252ZXJ0
CiAgICAgICAgICAgICB8fCBub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6
OlJhZ2VDb252ZXJ0KTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+YXJy
YXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKQEAgLTE2OTQsMzUgKzE0MTUsMjEgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0
YW50cyA9IHRydWU7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlm
IChub2RlLT5jaGlsZDIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2sp
OwogICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9
IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6IHsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7IAogICAgIH0KLSAgICBjYXNlIEdl
dEJ5T2Zmc2V0OgotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0
KCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgfQorICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6IHsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAg
Ym9vbCBjYW5FeGl0ID0gZmFsc2U7Ci0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0
b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fu
RXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAgICAgCkBAIC0xNzMxLDcgKzE0MzgsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigp
KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIEFT
U0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTc2NiwxMiArMTQ3MiwxMCBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
PmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIApAQCAtMTc4MSwzNCArMTQ4NSwyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICBj
YXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBw
cm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIC8vIEFnYWluLCBzYWRseSwgd2UgZG9uJ3Qg
cHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJbnN0YW5jZU9mCi0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9l
cyBhbiB1bmNvbmRpdGlvbmFsIGNlbGwKLSAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKLSAgICAgICAgaWYgKCEobm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4p
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2Ug
Rmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2lu
dDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgpAQCAtMTgzNiw3ICsxNTI5LDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAg
ICAgY2FzZSBOb3A6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIExhc3RO
b2RlVHlwZToKQEAgLTE4NDcsNiArMTUzOSwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgcmV0dXJuIG1faXNWYWxpZDsKIH0KIAorYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgcmV0
dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbV9ibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KSk7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxv
Y2spCit7CisgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAg
aWYgKCFzdGFydEV4ZWN1dGluZyhub2RlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgZXhlY3V0ZUVkZ2VzKG5vZGUpOworICAgIHJldHVybiBleGVjdXRlRWZmZWN0cyhpbmRleElu
QmxvY2ssIG5vZGUpOworfQorCiBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyV29y
bGQoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKQog
ewogICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29kZU9yaWdpbik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQzNDI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OCw3ICsxNTgsNTIgQEAgcHVibGljOgogICAgIC8vIGlmIGV4ZWN1dGlvbiBz
aG91bGQgY29udGludWUgcGFzdCB0aGlzIG5vZGUuIE5vdGFibHksIGl0IHdpbGwgcmV0dXJuIHRy
dWUKICAgICAvLyBmb3IgYmxvY2sgdGVybWluYWxzLCBzbyBsb25nIGFzIHRob3NlIHRlcm1pbmFs
cyBhcmUgbm90IFJldHVybiBvciB2YXJpYW50cwogICAgIC8vIG9mIFRocm93LgotICAgIGJvb2wg
ZXhlY3V0ZSh1bnNpZ25lZCk7CisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8g
YmUgZXF1aXZhbGVudCB0byBkb2luZzoKKyAgICAvLworICAgIC8vIGlmIChzdGF0ZS5zdGFydEV4
ZWN1dGluZyhpbmRleCkpIHsKKyAgICAvLyAgICAgc3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsK
KyAgICAvLyAgICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0ZUVmZmVjdHMoaW5kZXgpOworICAgIC8v
IH0gZWxzZQorICAgIC8vICAgICByZXN1bHQgPSB0cnVlOworICAgIGJvb2wgZXhlY3V0ZSh1bnNp
Z25lZCBpbmRleEluQmxvY2spOworICAgIAorICAgIC8vIEluZGljYXRlIHRoZSBzdGFydCBvZiBl
eGVjdXRpb24gb2YgdGhlIG5vZGUuIEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUsCisg
ICAgLy8gdGhhdCBpcyBwcm9ncmVzc2l2ZWx5IGJ1aWx0IHVwIGJ5IGV4ZWN1dGVFZGdlcygpIGFu
ZCBleGVjdXRlRWZmZWN0cygpLiBJbgorICAgIC8vIHBhcnRpY3VsYXIsIHRoaXMgcmVzZXRzIGNh
bkV4aXQoKSwgc28gaWYgeW91IHdhbnQgdG8gImtub3ciIGJldHdlZW4gY2FsbHMgb2YKKyAgICAv
LyBzdGFydEV4ZWN1dGluZygpIGFuZCBleGVjdXRlRWRnZXMoKS9FZmZlY3RzKCkgd2hldGhlciB0
aGUgbGFzdCBydW4gb2YgdGhlCisgICAgLy8gYW5hbHlzaXMgY29uY2x1ZGVkIHRoYXQgdGhlIG5v
ZGUgY2FuIGV4aXQsIHlvdSBzaG91bGQgcHJvYmFibHkgc2V0IHRoYXQKKyAgICAvLyBpbmZvcm1h
dGlvbiBhc2lkZSBwcmlvciB0byBjYWxsaW5nIHN0YXJ0RXhlY3V0aW5nKCkuCisgICAgYm9vbCBz
dGFydEV4ZWN1dGluZyhOb2RlKik7CisgICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBp
bmRleEluQmxvY2spOworICAgIAorICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgZWRnZXMg
b2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgcnVucyBmaWx0ZXJFZGdlQnlVc2UoKQorICAgIC8vIG9u
IGFsbCBlZGdlcyBvZiB0aGUgbm9kZS4gWW91IGNhbiBza2lwIHRoaXMgc3RlcCwgaWYgeW91IGhh
dmUgYWxyZWFkeSB1c2VkCisgICAgLy8gZmlsdGVyRWRnZUJ5VXNlKCkgKG9yIHNvbWUgZXF1aXZh
bGVudCkgb24gZWFjaCBlZGdlLgorICAgIHZvaWQgZXhlY3V0ZUVkZ2VzKE5vZGUqKTsKKyAgICB2
b2lkIGV4ZWN1dGVFZGdlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIAorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBmaWx0ZXJFZGdlQnlVc2UoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQorICAg
IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkp
IHsKKyAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICBjYXNlIEtub3duTnVtYmVy
VXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgIEFTU0VSVCghKGZv
ck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAKKyAgICAgICAg
ZmlsdGVyQnlUeXBlKG5vZGUsIGVkZ2Uubm9kZSgpLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2lu
ZCgpKSk7CisgICAgfQorICAgIAorICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgZWZmZWN0
cyBvZiB0aGUgZ2l2ZW4gbm9kZS4gVGhpcyBjaGFuZ2VzIHRoZSBhYnN0cmFjdAorICAgIC8vIHN0
YXRlIGFzc3VtaW5nIHRoYXQgZWRnZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZmlsdGVyZWQuCisgICAg
Ym9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIGJvb2wgZXhl
Y3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKik7CiAgICAgCiAgICAgLy8g
RGlkIHRoZSBsYXN0IGV4ZWN1dGVkIG5vZGUgY2xvYmJlciB0aGUgd29ybGQ/CiAgICAgYm9vbCBk
aWRDbG9iYmVyKCkgY29uc3QgeyByZXR1cm4gbV9kaWRDbG9iYmVyOyB9CkBAIC0xOTEsNTAgKzIz
Niw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdl
ZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJj
ZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKICAgICAKLSAgICB2
b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSogbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBm
YWxzZSkKLSAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmb3JjZUNhbkV4aXQg
fHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwotICAgICAgICBjaGls
ZFZhbHVlLmZpbHRlcihTcGVjSW50MzIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0
ZU51bWJlclVuYXJ5KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBj
aGlsZFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUtPnNldENh
bkV4aXQoIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKLSAgICAgICAg
Y2hpbGRWYWx1ZS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3Bl
Y3VsYXRlQm9vbGVhblVuYXJ5KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUt
PnNldENhbkV4aXQoIWlzQm9vbGVhblNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7Ci0g
ICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFNwZWNCb29sZWFuKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzcGVjdWxhdGVJbnQzMkJpbmFyeShOb2RlKiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9
IGZhbHNlKQotICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAg
ICAgICAgICAgIGZvcmNlQ2FuRXhpdAotICAgICAgICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlv
bihjaGlsZFZhbHVlMS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9u
KGNoaWxkVmFsdWUyLm1fdHlwZSkpOwotICAgICAgICBjaGlsZFZhbHVlMS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgY2hpbGRWYWx1ZTIuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KE5vZGUqIG5vZGUpCi0gICAgewotICAg
ICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgIWlzTnVtYmVy
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZTEubV90eXBlKQotICAgICAgICAgICAgfHwgIWlzTnVtYmVy
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7Ci0gICAgICAgIGNoaWxkVmFsdWUxLmZp
bHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgY2hpbGRWYWx1ZTIuZmlsdGVyKFNwZWNOdW1iZXIp
OwotICAgIH0KLSAgICAKICAgICBlbnVtIEJvb2xlYW5SZXN1bHQgewogICAgICAgICBVbmtub3du
Qm9vbGVhblJlc3VsdCwKICAgICAgICAgRGVmaW5pdGVseUZhbHNlLApAQCAtMjU5LDYgKzI2MCwx
NyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2RlLCBOb2RlKiBjaGlsZCwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShjaGlsZCk7CisgICAgICAgIGlmICh2YWx1ZS5tX3R5cGUgJiB+dHlwZSkKKyAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2ZXJpZnlFZGdlKE5vZGUqLCBFZGdlKTsKKyAgICB2
b2lkIHZlcmlmeUVkZ2VzKE5vZGUqKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzQsNiArMjM0LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmls
dGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90
CisgICAgICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZp
YyB2YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwOTY2MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0
dXJlcygpOwogICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1
Y3R1cmVzKCk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAko
cmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2Vu
Y3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFk
amFjZW5jeUxpc3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7
CiAgICAgICAgIGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBd
Lm1fZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU3LDE5ICs1NCwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIE5vZGUq
IGNoaWxkMSwgTm9kZSogY2hpbGQyLCBOb2RlKiBjaGlsZDMpCi0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgICAgICA6IG1fa2luZChGaXhlZCkKLSNlbmRpZgorICAgIEFkamFjZW5jeUxpc3QoS2lu
ZCBraW5kLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChraW5kLCBraW5kID09IEZpeGVkKTsKICAgICAgICAgaW5pdGlh
bGl6ZShjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICB9CiAgICAgCiAgICAgQWRqYWNlbmN5
TGlzdChLaW5kIGtpbmQsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVu
KQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBtX2tpbmQoVmFyaWFibGUpCi0jZW5k
aWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBWYXJpYWJsZSk7
CiAgICAgICAgIHNldEZpcnN0Q2hpbGQoZmlyc3RDaGlsZCk7CkBAIC03OSwyMSArNzAsMTggQEAg
cHVibGljOgogICAgIGNvbnN0IEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoaSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVk
KTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfSAgICAKICAgICAKICAgICBFZGdl
JiBjaGlsZCh1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsKLSAg
ICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzW2ld
OwogICAgIH0KICAgICAKICAgICB2b2lkIHNldENoaWxkKHVuc2lnbmVkIGksIEVkZ2Ugbm9kZVVz
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tp
bmQgPT0gRml4ZWQpOwogICAgICAgICBtX3dvcmRzW2ldID0gbm9kZVVzZTsKICAgICB9CiAgICAg
CkBAIC0xMjUsOSArMTEzLDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXQoKQogICAg
IHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIG1fa2luZCA9IEZpeGVkOwotI2VuZGlm
CiAgICAgICAgIGluaXRpYWxpemUoKTsKICAgICB9CiAgICAgCkBAIC0xNDIsMzQgKzEyNywyNCBA
QCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBmaXJzdENoaWxkKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1sw
XS5tX2VuY29kZWRXb3JkOwogICAgIH0KICAgICB2b2lkIHNldEZpcnN0Q2hpbGQodW5zaWduZWQg
Zmlyc3RDaGlsZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwog
ICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBmaXJzdENoaWxkOwogICAgIH0KICAg
ICAKICAgICB1bnNpZ25lZCBudW1DaGlsZHJlbigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NF
UlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMV0ubV9lbmNv
ZGVkV29yZDsKICAgICB9CiAgICAgdm9pZCBzZXROdW1DaGlsZHJlbih1bnNpZ25lZCBudW1DaGls
ZHJlbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAg
ICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAgICAgCi0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQotI2VuZGlmCiBwcml2YXRlOgogICAgIEVkZ2UgbV93b3Jkc1tTaXplXTsKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgS2luZCBtX2tpbmQ7Ci0jZW5kaWYKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2Nh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0
b3IuaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogLy8gICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJl
ZUFsbCgpIGluc3RlYWQuCiAvLyAtIFlvdSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91
IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCkuCiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisvLyBmb3JjZWRDZWxsU2l6ZTogc2V0IHRoaXMgdG8gMCBpZiB5b3UncmUgaGFwcHkgd2l0
aCB0aGUgZGVmYXVsdCBhbGlnbm1lbnQsIG9yIHNldCBpdAorLy8gdG8gYSBub24temVybyB2YWx1
ZSBpZiB5b3Ugd2FudCB0byBmb3JjaWJseSBhbGlnbiB0aGUgYWxsb2NhdGlvbnMgdG8gYSBjZXJ0
YWluCisvLyB2YWx1ZS4gV2hlbiB5b3UgZG8gdGhpcywgQWxsb2NhdG9yIHdpbGwgQVNTRVJUIHRo
YXQgZm9yY2VkQ2VsbEFsaWdubWVudCA+PSBzaXplb2YoVCkuCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CiBjbGFzcyBBbGxvY2F0b3IgewogcHVi
bGljOgogICAgIEFsbG9jYXRvcigpOwpAQCAtNjMsMTMgKzY3LDI0IEBAIHByaXZhdGU6CiAgICAg
dm9pZCogYnVtcEFsbG9jYXRlKCk7CiAgICAgdm9pZCogZnJlZUxpc3RBbGxvY2F0ZSgpOwogICAg
IHZvaWQqIGFsbG9jYXRlU2xvdygpOwotCisgICAgCisgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6
ZSgpCisgICAgeworICAgICAgICBpZiAoIWZvcmNlZENlbGxBbGlnbm1lbnQpCisgICAgICAgICAg
ICByZXR1cm4gc2l6ZW9mKFQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGZvcmNlZENlbGxB
bGlnbm1lbnQgPj0gc2l6ZW9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGZvcmNlZENlbGxBbGlnbm1l
bnQ7CisgICAgfQorICAgIAogICAgIHN0cnVjdCBSZWdpb24gewogICAgICAgICBzdGF0aWMgc2l6
ZV90IHNpemUoKSB7IHJldHVybiA2NCAqIEtCOyB9Ci0gICAgICAgIHN0YXRpYyBzaXplX3QgaGVh
ZGVyU2l6ZSgpIHsgcmV0dXJuIHN0ZDo6bWF4KHNpemVvZihSZWdpb24pLCBzaXplb2YoVCkpOyB9
Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0
dXJuIChzaXplKCkgLSBoZWFkZXJTaXplKCkpIC8gc2l6ZW9mKFQpOyB9Ci0gICAgICAgIFQqIGRh
dGEoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykg
KyBoZWFkZXJTaXplKCkpOyB9Ci0gICAgICAgIGJvb2wgaXNJblRoaXNSZWdpb24oY29uc3QgVCog
cG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvaW50ZXIgLSBkYXRhKCkp
IDwgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhl
YWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgY2VsbFNpemUoKSk7
IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyBy
ZXR1cm4gKHNpemUoKSAtIGhlYWRlclNpemUoKSkgLyBjZWxsU2l6ZSgpOyB9CisgICAgICAgIHN0
YXRpYyBzaXplX3QgcGF5bG9hZFNpemUoKSB7IHJldHVybiBudW1iZXJPZlRoaW5nc1BlclJlZ2lv
bigpICogY2VsbFNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkQmVnaW4oKSB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpOyB9CisgICAgICAgIGNo
YXIqIHBheWxvYWRFbmQoKSB7IHJldHVybiBwYXlsb2FkQmVnaW4oKSArIHBheWxvYWRTaXplKCk7
IH0KKyAgICAgICAgYm9vbCBpc0luVGhpc1JlZ2lvbihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxzaXplX3Q+KGJpdHdpc2VfY2FzdDxjaGFyKj4ocG9pbnRlcikgLSBwYXls
b2FkQmVnaW4oKSkgPCBwYXlsb2FkU2l6ZSgpOyB9CiAgICAgICAgIHN0YXRpYyBSZWdpb24qIHJl
Z2lvbkZvcihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UmVnaW9uKj4o
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiB+KHNpemUoKSAtIDEpKTsgfQogICAg
ICAgICAKICAgICAgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIG1fYWxsb2NhdGlvbjsKQEAgLTgy
LDI2ICs5NywyNiBAQCBwcml2YXRlOgogICAgIAogICAgIFJlZ2lvbiogbV9yZWdpb25IZWFkOwog
ICAgIHZvaWQqKiBtX2ZyZWVMaXN0SGVhZDsKLSAgICBUKiBtX2J1bXBFbmQ7Ci0gICAgdW5zaWdu
ZWQgbV9idW1wUmVtYWluaW5nOworICAgIGNoYXIqIG1fYnVtcEVuZDsKKyAgICBzaXplX3QgbV9i
dW1wUmVtYWluaW5nOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0
b3I8VD46OkFsbG9jYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRD
ZWxsQWxpZ25tZW50PgoraW5saW5lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6
QWxsb2NhdG9yKCkKICAgICA6IG1fcmVnaW9uSGVhZCgwKQogICAgICwgbV9mcmVlTGlzdEhlYWQo
MCkKICAgICAsIG1fYnVtcFJlbWFpbmluZygwKQogewogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotaW5saW5lIEFsbG9jYXRvcjxUPjo6fkFsbG9jYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgoraW5saW5lIEFsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50Pjo6fkFsbG9jYXRvcigpCiB7CiAgICAgcmVzZXQoKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjphbGxv
Y2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50
PgorQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46
OmFsbG9jYXRlKCkKIHsKICAgICB2b2lkKiByZXN1bHQgPSBidW1wQWxsb2NhdGUoKTsKICAgICBp
ZiAoTElLRUxZKCEhcmVzdWx0KSkKQEAgLTEwOSw4ICsxMjQsOCBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhCiAgICAgcmV0dXJuIGZyZWVMaXN0QWxsb2NhdGUoKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlKFQqIG9i
amVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+
Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZShUKiBvYmplY3Qp
CiB7CiAgICAgb2JqZWN0LT5+VCgpOwogICAgIApAQCAtMTE5LDggKzEzNCw4IEBAIHZvaWQgQWxs
b2NhdG9yPFQ+OjpmcmVlKFQqIG9iamVjdCkKICAgICBtX2ZyZWVMaXN0SGVhZCA9IGNlbGw7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFsbCgpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBB
bGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWVBbGwoKQogewogICAgIGlmICgh
bV9yZWdpb25IZWFkKSB7CiAgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTE0
Miw4ICsxNTcsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFsbCgpCiAgICAgc3RhcnRCdW1w
aW5nSW4obV9yZWdpb25IZWFkKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxs
b2NhdG9yPFQ+OjpyZXNldCgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRD
ZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OnJl
c2V0KCkKIHsKICAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsKICAgICAK
QEAgLTE1MiwzOCArMTY3LDM4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpyZXNldCgpCiAgICAgbV9i
dW1wUmVtYWluaW5nID0gMDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuc2lnbmVkIEFs
bG9jYXRvcjxUPjo6aW5kZXhPZihjb25zdCBUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgordW5zaWduZWQgQWxsb2NhdG9yPFQsIGZv
cmNlZENlbGxBbGlnbm1lbnQ+OjppbmRleE9mKGNvbnN0IFQqIG9iamVjdCkKIHsKICAgICB1bnNp
Z25lZCBiYXNlSW5kZXggPSAwOwogICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhl
YWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKICAgICAgICAgaWYgKHJlZ2lv
bi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXgg
KyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIGJhc2VJbmRl
eCArIChiaXR3aXNlX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSByZWdpb24tPnBheWxvYWRCZWdpbigp
KSAvIGNlbGxTaXplKCk7CiAgICAgICAgIGJhc2VJbmRleCArPSBSZWdpb246Om51bWJlck9mVGhp
bmdzUGVyUmVnaW9uKCk7CiAgICAgfQogICAgIENSQVNIKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BbGxvY2F0b3I8VD4qIEFsbG9jYXRvcjxUPjo6YWxsb2Nh
dG9yT2YoY29uc3QgVCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9y
Y2VkQ2VsbEFsaWdubWVudD4KK0FsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50PiogQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0b3JPZihjb25zdCBUKiBvYmpl
Y3QpCiB7CiAgICAgcmV0dXJuIFJlZ2lvbjo6cmVnaW9uRm9yKG9iamVjdCktPm1fYWxsb2NhdG9y
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0
b3I8VD46OmJ1bXBBbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3Jj
ZWRDZWxsQWxpZ25tZW50PgorQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2Vk
Q2VsbEFsaWdubWVudD46OmJ1bXBBbGxvY2F0ZSgpCiB7Ci0gICAgaWYgKHVuc2lnbmVkIHJlbWFp
bmluZyA9IG1fYnVtcFJlbWFpbmluZykgewotICAgICAgICByZW1haW5pbmctLTsKKyAgICBpZiAo
c2l6ZV90IHJlbWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykgeworICAgICAgICByZW1haW5pbmcg
LT0gY2VsbFNpemUoKTsKICAgICAgICAgbV9idW1wUmVtYWluaW5nID0gcmVtYWluaW5nOwotICAg
ICAgICByZXR1cm4gbV9idW1wRW5kIC0gKHJlbWFpbmluZyArIDEpOworICAgICAgICByZXR1cm4g
bV9idW1wRW5kIC0gKHJlbWFpbmluZyArIGNlbGxTaXplKCkpOwogICAgIH0KICAgICByZXR1cm4g
MDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQqIEFsbG9jYXRvcjxUPjo6ZnJlZUxp
c3RBbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxp
Z25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlTGlz
dEFsbG9jYXRlKCkKIHsKICAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CiAgICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKQpAQCAtMTkyLDggKzIwNyw4IEBAIHZvaWQqIEFsbG9jYXRv
cjxUPjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkKiBBbGxv
Y2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmFsbG9jYXRlU2xvdygpCiB7CiAgICAgQVNT
RVJUKCFtX2ZyZWVMaXN0SGVhZCk7CiAgICAgQVNTRVJUKCFtX2J1bXBSZW1haW5pbmcpOwpAQCAt
MjE2LDggKzIzMSw4IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8
VD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdCh0eXBlbmFtZSBBbGxvY2F0b3I8VD46OlJlZ2lvbiog
cmVnaW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVu
dD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlUmVnaW9uc1N0
YXJ0aW5nQXQodHlwZW5hbWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdp
b24qIHJlZ2lvbikKIHsKICAgICB3aGlsZSAocmVnaW9uKSB7CiAgICAgICAgIFJlZ2lvbiogbmV4
dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0OwpAQCAtMjI2LDExICsyNDEsMTEgQEAgdm9pZCBBbGxv
Y2F0b3I8VD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpzdGFydEJ1bXBpbmdJbih0eXBlbmFtZSBBbGxv
Y2F0b3I8VD46OlJlZ2lvbiogcmVnaW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQg
Zm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1l
bnQ+OjpzdGFydEJ1bXBpbmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdu
bWVudD46OlJlZ2lvbiogcmVnaW9uKQogewotICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+ZGF0YSgp
ICsgUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwotICAgIG1fYnVtcFJlbWFpbmlu
ZyA9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKKyAgICBtX2J1bXBFbmQgPSBy
ZWdpb24tPnBheWxvYWRFbmQoKTsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246OnBheWxv
YWRTaXplKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAx
NDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDYgKzY5OCwxOCBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgRG9udFJl
ZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAgICAgICBvcCwgY3VycmVu
dENvZGVPcmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7
CisgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kKHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdl
bmVyYXRlKQorICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9w
LCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgp
KQorICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAg
ICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCiAgICAgICAgICAg
ICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAg
ICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJl
c3VsdCk7CkBAIC03MTAsNyArNzIyLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIE5vZGUq
IHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKICAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwg
RG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2lu
KCksIGluZm8sIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgb3AsIGN1cnJl
bnRDb2RlT3JpZ2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNo
aWxkMykpOwogICAgICAgICBpZiAob3AgPT0gUGhpKQogICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIGVsc2UKQEAgLTcyNCw3ICs3MzYsNyBA
QCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2Rl
KAogICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0g
ICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzKTsKKyAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBp
bmZvMSwgaW5mbzIsIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwog
ICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZChyZXN1bHQpOwogCkBAIC0xNDY1LDcgKzE0NzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVNaW5NYXgoYm9vbCB1CiAgICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9PSAyKSB7IC8vIE1hdGgubWluKHgpCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKTsKLSAgICAgICAgYWRkVG9HcmFw
aChDaGVja051bWJlciwgcmVzdWx0KTsKKyAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBFZGdl
KHJlc3VsdCwgTnVtYmVyVXNlKSk7CiAgICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVz
dWx0LCByZXN1bHRPcGVyYW5kLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNp
b24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk2OSw3ICs5NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICAvLyBJZiB0
aGlzIGlzIGFjY2Vzc2luZyBhcmd1bWVudHMgdGhlbiBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2lu
ZyBsb2NhbHMuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVBcmd1bWVudHMoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpID09IEFycmF5OjpBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5t
YXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKQEAgLTEwMDIsNiArMTAwMiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlIGVk
Z2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKICAgICAgICAgICAgIGlmICghZWRnZSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlZGdlLnVzZUtpbmQoKSAh
PSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBLZWVwIHRoZSB0eXBl
IGNoZWNrLgogICAgICAgICAgICAgaWYgKGVkZ2UtPmZsYWdzKCkgJiBOb2RlUmVsZXZhbnRUb09T
UikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMTAxNCwxOCAr
MTAxNiwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVudW0gUHJl
ZGljdGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQcmVkaWN0
aW9uTWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50
LCBQcmVkaWN0aW9uSGFuZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJl
U2FtZVByZWRpY3Rpb24pCisgICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVu
dCkKICAgICB7CiAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIAotICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9y
bSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0Ci0gICAgICAgIC8vIGFncmVl
LgotICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVByZWRp
Y3Rpb24KLSAgICAgICAgICAgICYmIG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSAhPSByZXBs
YWNlbWVudC0+cHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRh
dGFMb2dGKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY3VycmVudE5vZGUtPmluZGV4KCks
IHJlcGxhY2VtZW50LT5pbmRleCgpKTsKICNlbmRpZgpAQCAtMTIzMCw3ICsxMjI1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICAgICAgLy8gVGhpcyBpcyBz
dHJhbmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxsIGNvbnZlcnQgbm9kZXMgdG8g
Y29uc3RhbnRzLAogICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGVk
IGNvbnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVwLgotICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSksIEFsbG93UHJlZGljdGlvbk1pc21hdGNoKTsK
KyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MzQyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDEyICs4Myw2IEBAIHN0cnVjdCBOb2RlUG9pbnRlclRyYWl0cyB7CiAgICAgc3RhdGlj
IHZvaWQgZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiB9OwogCi1lbnVtIFVz
ZUtpbmQgewotICAgIFVudHlwZWRVc2UsCi0gICAgRG91YmxlVXNlLAotICAgIExhc3RVc2VLaW5k
IC8vIE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1
c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMuCi19OwotCiAvLyBVc2Ug
UmVmQ2hpbGRyZW4gaWYgdGhlIGNoaWxkIHJlZiBjb3VudHMgaGF2ZW4ndCBhbHJlYWR5IGJlZW4g
YWRqdXN0ZWQgdXNpbmcKIC8vIG90aGVyIG1lYW5zIGFuZCBlaXRoZXIgb2YgdGhlIGZvbGxvd2lu
ZyBpcyB0cnVlOgogLy8gLSBUaGUgbm9kZSB5b3UncmUgY3JlYXRpbmcgaXMgTXVzdEdlbmVyYXRl
LgpAQCAtMTA2LDE5ICsxMDAsNiBAQCBlbnVtIFJlZk5vZGVNb2RlIHsKICAgICBEb250UmVmTm9k
ZQogfTsKIAotaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaW5kIHVzZUtp
bmQpCi17Ci0gICAgc3dpdGNoICh1c2VLaW5kKSB7Ci0gICAgY2FzZSBVbnR5cGVkVXNlOgotICAg
ICAgICByZXR1cm4gIiI7Ci0gICAgY2FzZSBEb3VibGVVc2U6Ci0gICAgICAgIHJldHVybiAiZCI7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiBpbmxpbmUgYm9vbCBpc0FSTXY3cygpCiB7CiAj
aWYgQ1BVKEFQUExFX0FSTVY3UykKQEAgLTIzNiw2ICsyMTcsOCBAQCBlbnVtIFVuaWZpY2F0aW9u
U3RhdGUgewogICAgIEdsb2JhbGx5VW5pZmllZAogfTsKIAorZW51bSBPcGVyYW5kU3BlY3VsYXRp
b25Nb2RlIHsgQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24gfTsKKwogZW51bSBTcGVjdWxhdGlvbkRpcmVjdGlvbiB7IEZvcndhcmRTcGVjdWxhdGlv
biwgQmFja3dhcmRTcGVjdWxhdGlvbiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywx
MCArMTAzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3Ry
dWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQg
PSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNl
dCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50KCkgPT0gMSk7
CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBD
YXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTExNCw4ICsxMTMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlJiBzdHJ1Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmU7CiAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vic2V0T2Yoc2V0KQog
ICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24oKSkgewot
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludChzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpOworICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkg
ZmlsdGVyIG9uIGNlbGwuCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1N0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAg
IGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xNDks
MTAgKzE1MSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAg
ICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxk
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGRFZGdl
ID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVk
Z2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKKyAgICAgICAg
ICAgICAgICBpZiAoY2hpbGRFZGdlLnVzZUtpbmQoKSAhPSBDZWxsVXNlKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVy
ZSgpOwpAQCAtMTY0LDggKzE2NywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEdldEJ5
SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
ICAgICAgICAgZ2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQorICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2lt
cGxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGhhbmRsZSBw
cm90b3R5cGUgY2FzZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzODYKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFT
U0VSVChzdGF0dXMuc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgICAg
IEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0VtcHR5KCkpOwpAQCAtMTgxLDE4ICsxODcsMjQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUuZm9yTm9kZShjaGls
ZCkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJ1
Y3R1cmUpKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250
UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBj
b2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSB7
CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBQaGFudG9tLCBjb2RlT3JpZ2luLCBj
aGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAgY2hpbGRFZGdl
LnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0
YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNo
aWxkOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVj
Tm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFZGdlKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5
U3RvcmFnZSk7CkBAIC0yMDcsOSArMjE5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNl
IFB1dEJ5SWQ6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKICAgICAgICAgICAg
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAg
ICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9k
ZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMzgsOSArMjUzLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhz
dHJ1Y3R1cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRn
ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1f
dHlwZSAmIH5TcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgUGhh
bnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSAwOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMu
aXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkRh
dGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKApAQCAtMjY0LDM4ICsyODUs
MzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAgICAgICAg
ICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkgewogICAgICAgICAgICAgICAg
ICAgICBjaGlsZC0+cmVmKCk7IC8vIFRoZSBjaGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3Bl
cnR5IGluZGV4LCBzbyByZWYgaXQgdG8gcmVmbGVjdCB0aGUgZG91YmxlIHVzZS4KLSAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZCk7CisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRn
ZSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFp
c0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9k
ZSwgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hp
bGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPiBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZSht
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJh
bnNpdGlvbkRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgY2hpbGRFZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZs
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBjaGlsZCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpKSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0
dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBjb2RlT3Jp
Z2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hp
bGQpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hp
bGRFZGdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlKTsKQEAgLTM0MCw3ICszNjEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2Rl
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGFudG9tID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9j
YWwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJp
YWJsZSksIHBoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJ
bmZvKHZhcmlhYmxlKSwgRWRnZShwaGkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGFudG9tOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IHBoYW50b207CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAg
LTM5MSwxMyArNDEyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50LAotICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1
Y3R1cmUoKSksIHdlYWtDb25zdGFudCk7CisgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJ
bmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIHdlYWtD
b25zdGFudCk7CisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2Vs
bC0+c3RydWN0dXJlKCkpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKICAgICB9CiAg
ICAgCiAgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQ0ZBIG1heSByZWFjaCBj
b25jbHVzaW9ucyBhYm91dCBjb25zdGFudHMgYmFzZWQgb24gaXRzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw4
ICsxNDQsNiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAg
ICAgIGlmICghY2hhbmdlZCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAg
ZGZnLnJlc2V0RXhpdFN0YXRlcygpOwotICAgICAgICBwZXJmb3JtRml4dXAoZGZnKTsKICAgICAg
ICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBFZGdlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KHVzZUtpbmRUb1N0cmlu
Zyh1c2VLaW5kKCkpLCBub2RlKCkpOworICAgIGlmICh1c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkK
KyAgICAgICAgb3V0LnByaW50KHVzZUtpbmQoKSwgIjoiKTsKKyAgICBvdXQucHJpbnQobm9kZSgp
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdVc2VL
aW5kLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNjIsMTIgKzYz
LDE4IEBAIHB1YmxpYzoKICAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVz
ZUtpbmQoKSk7CiAgICAgfQogICAgIAotICAgIFVzZUtpbmQgdXNlS2luZCgpIGNvbnN0CisgICAg
VXNlS2luZCB1c2VLaW5kVW5jaGVja2VkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChu
b2RlKCkpOwogICAgICAgICB1bnNpZ25lZCBtYXNrZWQgPSBtX2VuY29kZWRXb3JkICYgKCgoMSA8
PCBzaGlmdCgpKSAtIDEpKTsKICAgICAgICAgQVNTRVJUKG1hc2tlZCA8IExhc3RVc2VLaW5kKTsK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVzZUtpbmQ+KG1hc2tlZCk7CisgICAgICAgIFVz
ZUtpbmQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VXNlS2luZD4obWFza2VkKTsKKyAgICAgICAgQVNT
RVJUKG5vZGUoKSB8fCByZXN1bHQgPT0gVW50eXBlZFVzZSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIFVzZUtpbmQgdXNlS2luZCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHVzZUtpbmRVbmNoZWNrZWQoKTsKICAgICB9
CiAgICAgdm9pZCBzZXRVc2VLaW5kKFVzZUtpbmQgdXNlS2luZCkKICAgICB7CkBAIC05Niw3ICsx
MDMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBZGphY2VuY3lMaXN0
OwogICAgIAotICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7IH0KKyAgICBz
dGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiA0OyB9CiAgICAgCiAgICAgc3RhdGljIHVp
bnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29s
IHJ1bigpCiAgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0g
QmVmb3JlRml4cG9pbnQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFk
ZWRDUFMpOworICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKICAg
ICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzYsNTAgKzc5LDI2MiBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgR2V0QnlJ
ZDogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4
cG9pbnQpCisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkKKyAgICAgICAgICAg
ICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudCh2YXJpYWJsZS0+bG9jYWwoKSkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
aXNJbnQzMlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICBpZiAo
dmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAgZml4
RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSwgTnVtYmVyVXNlLCBGb3J3YXJkU3BlY3VsYXRpb24p
OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5p
ZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJl
UHJlZGljdGlvbigpOworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0
ZWRUeXBlKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5
cGUpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7
CisgICAgICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBl
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEJpdEFuZDoKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6Cisg
ICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAg
Y2FzZSBCaXRVUlNoaWZ0OiB7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVJbnQzMlRvTnVt
YmVyOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duSW50MzJV
c2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIERvdWJsZUFzSW50MzI6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVBy
b2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKLSAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsK
LSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbiht
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKLSAgICAgICAg
ICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUs
IEFycmF5OjpSZWFkLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlN
b2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9m
aWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChOdW1iZXJVc2UpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkgeworICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoTm90Q2VsbFVzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZTog
eworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDog
eworICAgICAgICAgICAgaWYgKGF0dGVtcHRUb01ha2VJbnRlZ2VyQWRkKG5vZGUpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51
bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNh
c2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgIGlmIChhdHRlbXB0VG9NYWtlSW50ZWdlckFkZChu
b2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJpdGhOZWdhdGU6IHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRo
TXVsOiB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQz
MlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkgfHwgaXNBUk12N3MoKSkgeworICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKLSAgICAgICAgICAg
IGlmICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgaW5qZWN0
SW50MzJUb0RvdWJsZU5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGluamVj
dEludDMyVG9Eb3VibGVOb2RlKG5vZGUtPmNoaWxkMigpKTsKKworICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdy
ZSBzdGVhbGluZyB0aGVtIGZyb20KKyAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2
aXNpb24uCisgICAgICAgICAgICAgICAgTm9kZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCAqbm9kZSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBLbm93bk51
bWJlclVzZSksIEVkZ2UoKSwgRWRnZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIG5vZGUtPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBub2RlLT5jbGVh
ckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7Ci0gICAgICAgICAg
ICBtX2dyYXBoLmRlcmVmKG5vZGUpOwotICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFy
cmF5TW9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
Tm9kZSogc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIGNhc2UgQXJp
dGhNaW46CisgICAgICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsK
KyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
Yyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAg
ICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhB
YnM6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQo
SW50MzJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGls
ZDIoKSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgIGNhc2UgQXJpdGhTcXJ0OiB7CisgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7CisgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9y
T3RoZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVj
dE9yT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNh
c2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBUeXBlT2Y6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChT
dHJpbmdVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoK
KyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgor
ICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
RXE6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcUNvbnN0YW50KQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgIT0gQ29tcGFyZUVxKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgp
ICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxh
dGVPYmplY3RPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkg
eworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhl
clVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RV
c2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbXBhcmVTdHJp
Y3RFcToKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXFDb25zdGFudDogeworICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVj
dWxhdGVTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCkt
PnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigp
LnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogeworICAgICAgICAgICAg
Ly8gQ3VycmVudGx5IHdlIGhhdmUgbm8gZ29vZCB3YXkgb2YgcmVmaW5pbmcgdGhlc2UuCisgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJp
bmcpKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5v
ZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5z
ZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAg
ICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAog
ICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKQEAgLTEyNyw3ICszNDIs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGlj
dGlvbigpLAogICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxk
MSgpLCBub2RlLT5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2Rl
KCk7CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6RG91YmxlCkBA
IC0xMzgsMTMgKzM1Myw5MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICYmICEobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVVc2VkQXNPdGhlcikpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJy
YXlNb2RlKGFycmF5TW9kZS53aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNhbmVDaGFpbikpOwogICAg
ICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpV
bmRlY2lkZWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKENlbGxVc2UpOyAvLyBTcGVjdWxhdGluZyBjZWxsIGR1ZSB0byByZWdpc3RlciBw
cmVzc3VyZSBvbiAzMi1iaXQuCisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNl
IFN0cmluZ0NoYXJBdDoKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0gICAgICAg
ICAgICAvLyBDdXJyZW50bHkgd2UgaGF2ZSBubyBnb29kIHdheSBvZiByZWZpbmluZyB0aGVzZS4K
LSAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6
OlN0cmluZykpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCksIDIpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlW
YWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgRWRnZSYgY2hp
bGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UmIGNo
aWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdlJiBj
aGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworCisgICAgICAgICAgICBub2Rl
LT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5l
KAorICAgICAgICAgICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAg
ICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxk
My0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJsZXNzQXJyYXlP
cGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVG
b3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJl
ZGljdGlvbnM6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAg
ICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgLy8gRHVlIHRvIHJlZ2lzdGVyIHBy
ZXNzdXJlIG9uIDMyLWJpdCwgd2Ugc3BlY3VsYXRlIGNlbGwgYW5kCisgICAgICAgICAgICAgICAg
Ly8gaWdub3JlIHRoZSBiYXNlLWlzLW5vdC1jZWxsIGNhc2UgZW50aXJlbHkgYnkgbGV0dGluZyB0
aGUKKyAgICAgICAgICAgICAgICAvLyBiYXNlbGluZSBKSVQgaGFuZGxlIGl0LgorICAgICAgICAg
ICAgICAgIGNoaWxkMS5zZXRVc2VLaW5kKENlbGxVc2UpOworI2VuZGlmCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAg
ICBjaGlsZDEuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIGNoaWxk
Mi5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBjaGlsZDMuc2V0VXNlS2lu
ZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgY2hpbGQxLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKKyAgICAgICAgICAgICAgICBjaGlsZDIuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAg
ICAgICAgICAgICAgZml4RG91YmxlRWRnZShjaGlsZDMsIFJlYWxOdW1iZXJVc2UpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAg
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkludDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAg
ICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5Ogor
ICAgICAgICAgICAgICAgIGNoaWxkMS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAg
ICAgICAgICAgY2hpbGQyLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGlm
IChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y2hpbGQzLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShjaGlsZDMpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgICAgIGNoaWxkMS5zZXRVc2VL
aW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgY2hpbGQyLnNldFVzZUtpbmQoSW50
MzJVc2UpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoY2hpbGQzKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgY2hp
bGQxLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBjaGlsZDIuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xNjMsMTEg
KzQ1NywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAgICAgICAgIFNwZWNJbnQzMiwK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSkpOwotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsK
KyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwg
bm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChL
bm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdl
KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzYsNDkgKzQ3NCwyNyBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewot
ICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAx
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0WG9yOgot
ICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAg
IGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJl
bi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgIGNh
c2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogewot
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgp
LCBFZGdlKCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgICAgICBjYXNlIFJlZ0V4cFRl
c3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7Cisg
ICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEJyYW5jaDog
ewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51
bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkK
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJV
c2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxk
MSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNhbE5vdCA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90LT5vcCgpID09IExvZ2ljYWxOb3QKQEAg
LTI2MSwxNDkgKzUzNywyNjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgY2Fz
ZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN0cmluZyBzcGVjdWxh
dGlvbiBoZXJlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMDE3NQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0g
ICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQor
ICAgICAgICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07KSB7CisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAgICAgICAgICAgICBsZWFzdFVwcGVyQm91
bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5p
bmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKS0+cHJlZGljdGlvbigp
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5udW1DaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBv
bmx5IGhhcHBlbiBpZiB0aGUgY2hpbGRyZW4gaGF2ZSBubyB0eXBlIHByZWRpY3Rpb25zLiBXZQor
ICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGFscmVhZHkgZXhpdGVkIGJ5IG5vdywg
YnV0IGluc2VydCBhIGZvcmNlZCBleGl0IGp1c3QgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8g
YmUgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5k
ZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJh
bmRJbmRleF0uc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBub2RlLT5u
dW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0uc2V0
VXNlS2luZChSZWFsTnVtYmVyVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEp
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpCi0gICAgICAgICAg
ICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogeworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6IHsKLSAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwor
ICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIFBo
YW50b20odHlwZSBjaGVjaykgYW5kIElkZW50aXR5IGluc3RlYWQuCisgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzk1CisgICAgICAgICAg
ICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT3RoZXJVc2UpOworICAg
ICAgICAgICAgZWxzZSBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9i
amVjdFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJpdGhNaW46Ci0gICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgIGNh
c2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBDcmVhdGVUaGlzOiB7Cisg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTXVs
OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgw
KTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsOgorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKKyAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAgICAgJiYg
bm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzWDg2
KCkgfHwgaXNBUk12N3MoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoMCk7Ci0gICAgICAgICAgICAgICAgaW5qZWN0
SW50MzJUb0RvdWJsZU5vZGUoMSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhl
bSBmcm9tCi0gICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgotICAgICAg
ICAgICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVm
Tm9kZSwgU3BlY0RvdWJsZSwgKm5vZGUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOwotICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRnZSgpLCBF
ZGdlKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZVJlZ2lzdGVyczoKKyAgICAgICAgY2FzZSBQ
dXRTY29wZWRWYXI6CisgICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgorICAgICAgICBjYXNlIFNr
aXBTY29wZToKKyAgICAgICAgY2FzZSBTZXRDYWxsZWU6CisgICAgICAgIGNhc2UgU2V0TXlTY29w
ZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAg
ICAgICAgY2FzZSBHZXRTY29wZToKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKKyAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aEFi
czogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRl
SW50ZWdlcigpKQorICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAg
ICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMCk7CisgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAorICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdp
biktPmdldEFycmF5UHJvZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBBcnJh
eU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOworICAgICAgICAgICAgaWYgKGFy
cmF5UHJvZmlsZSkgeworICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdp
bikpOworICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVk
KGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBhcnJh
eU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgICAg
IGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmlu
aXRlU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CisgICAgICAg
ICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOworICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAg
IG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRBcnJh
eU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZSogc3RvcmFn
ZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7
CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cml0aFNxcnQ6IHsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgIGNhc2Ug
R2V0QnlJZEZsdXNoOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLQot
ICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAotICAgICAgICAgICAgICAgIG5vZGUtPmFy
cmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9u
KCksCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAotICAgICAgICAg
ICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKKyAgICAgICAgY2Fz
ZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAg
IGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50OgorICAgICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludDoKKyAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICBjYXNlIFB1
dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBDaGVja0hh
c0luc3RhbmNlOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxV
c2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDhBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAg
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoIWNoaWxkMy0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5
OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2UoMik7CisgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogeworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KFN0cmluZ1VzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7
IGktLTspIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCi0gICAgICAg
ICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChub2RlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUp
OyBpLS07KQotICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKGkpOwotICAgICAgICAg
ICAgfQorICAgICAgICBjYXNlIEFycmF5aWZ5OgorICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZz
ZXQ6IHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQo
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgSW5zdGFuY2VPZjogeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgYXBwZWFycyBicm9r
ZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2VzIGFuIHVuY29uZGl0aW9uYWwgY2VsbAor
ICAgICAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDc0NzkKKyAgICAgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKENlbGxV
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBj
YXNlIE5vcDoKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2UgRm9yd2FyZEludDMyVG9E
b3VibGU6CisgICAgICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisjaWYgIUFTU0VSVF9ESVNBQkxFRCAgICAKKyAgICAgICAgLy8gSGF2ZSB0
aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFk
ZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Cisg
ICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICBj
YXNlIFdlYWtKU0NvbnN0YW50OgorICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICBjYXNl
IEdldENhbGxlZToKKyAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6CisgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgY2FzZSBJbmxpbmVT
dGFydDoKKyAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgorICAgICAgICBjYXNlIEdldFNjb3BlZFZh
cjoKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFy
OgorICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6CisgICAgICAgIGNhc2UgUHV0R2xv
YmFsVmFyQ2hlY2s6CisgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50Ogor
ICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYXNl
IE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgY2FzZSBO
ZXdSZWdleHA6CisgICAgICAgIGNhc2UgUmVzb2x2ZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFz
ZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKKyAgICAgICAgY2FzZSBSZXNv
bHZlR2xvYmFsOgorICAgICAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgICAgIGNhc2UgSXNVbmRl
ZmluZWQ6CisgICAgICAgIGNhc2UgSXNCb29sZWFuOgorICAgICAgICBjYXNlIElzTnVtYmVyOgor
ICAgICAgICBjYXNlIElzU3RyaW5nOgorICAgICAgICBjYXNlIElzT2JqZWN0OgorICAgICAgICBj
YXNlIElzRnVuY3Rpb246CisgICAgICAgIGNhc2UgU3RyQ2F0OgorICAgICAgICBjYXNlIENyZWF0
ZUFjdGl2YXRpb246CisgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CisgICAgICAgIGNh
c2UgQ3JlYXRlQXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CisgICAg
ICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xl
bmd0aDoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CisgICAgICAgIGNh
c2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgorICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uOgor
ICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoKKyAgICAgICAgY2FzZSBOZXdGdW5jdGlv
bkV4cHJlc3Npb246CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBSZXR1cm46Cisg
ICAgICAgIGNhc2UgVGhyb3c6CisgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAg
ICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CisgICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246Cisg
ICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICAgICAgYnJlYWs7CisjZWxzZQogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgfQogCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtNDIxLDYgKzgxNCw4
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFy
cmF5TW9kZS5vcmlnaW5hbEFycmF5U3RydWN0dXJlKG1fZ3JhcGgsIGNvZGVPcmlnaW4pOwogICAg
ICAgICAKKyAgICAgICAgRWRnZSBpbmRleEVkZ2UgPSBpbmRleCA/IEVkZ2UoaW5kZXgsIEludDMy
VXNlKSA6IEVkZ2UoKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChhcnJheU1vZGUuZG9lc0NvbnZl
cnNpb24oKSkgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSkgewogICAgICAgICAgICAgICAg
IGlmIChtX2luZGV4SW5CbG9jayA+IDApIHsKQEAgLTQzNSwyMSArODMwLDIxIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5VG9TdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCi0g
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBPcEluZm8oYXJyYXlNb2RlLmFz
V29yZCgpKSwgYXJyYXksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVj
dHVyZSksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBDZWxsVXNlKSwg
aW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5LCBjb2RlT3JpZ2lu
LAotICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXks
IGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IEVkZ2UoYXJyYXksIENlbGxVc2UpLCBpbmRleEVkZ2UpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSkgewogICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVy
ZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBhcnJheSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgRWRnZShhcnJheSwgQ2VsbFVz
ZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgY29kZU9yaWdpbiwKLSAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5KTsKKyAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXks
IENlbGxVc2UpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTQ2MSwy
MSArODU2LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssCiAg
ICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZDaGlsZHJlbiA6IERvbnRSZWZDaGls
ZHJlbiwKICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZk5vZGUgOiBEb250UmVm
Tm9kZSwKLSAgICAgICAgICAgICAgICBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2lu
LCBhcnJheSk7CisgICAgICAgICAgICAgICAgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9y
aWdpbiwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssCiAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZkNoaWxkcmVuIDog
RG9udFJlZkNoaWxkcmVuLAogICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZOb2RlIDog
RG9udFJlZk5vZGUsCi0gICAgICAgICAgICBTcGVjTm9uZSwgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5KTsKKyAg
ICAgICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2lu
LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVk
Z2UgaW5kZXgsIHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKKyAgICB2b2lkIGJsZXNzQXJyYXlP
cGVyYXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4LCBFZGdlJiBzdG9yYWdlQ2hpbGQpCiAgICAg
ewotICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1
cnJlbnROb2RlOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkpIHsKQEAgLTQ5OSw3ICs4OTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFz
dG9yYWdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgbV9ncmFwaC5jaGlsZChub2RlLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsK
KyAgICAgICAgICAgIHN0b3JhZ2VDaGlsZCA9IEVkZ2Uoc3RvcmFnZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0gfQogICAgIH0KQEAgLTUwNyw0OCArODk5LDkyIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVkZ2UpCiAgICAgewogICAgICAgICBOb2RlKiBu
b2RlID0gZWRnZS5ub2RlKCk7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9JbnQz
MikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkg
IT0gVmFsdWVUb0ludDMyKSB7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25vd25JbnQz
MlVzZSk7CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7CiAgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxk
MSgpOwogICAgICAgICAKKyAgICAgICAgaWYgKG5ld0VkZ2UudXNlS2luZCgpICE9IEludDMyVXNl
KSB7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25vd25JbnQzMlVzZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChuZXdFZGdl
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOworICAgICAgICAKICAgICAgICAgbV9ncmFwaC5y
ZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CiAgICAgICAgIAog
ICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXhEb3VibGVF
ZGdlKHVuc2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9
IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBmaXhEb3VibGVFZGdlKEVkZ2UmIGVkZ2Us
IFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0
aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKICAgICB7Ci0gICAgICAgIE5vZGUqIHNvdXJjZSA9
IG1fY3VycmVudE5vZGU7Ci0gICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKHNvdXJj
ZSwgY2hpbGRJbmRleCk7Ci0gICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+cHJlZGljdGlvbigp
ICYgU3BlY0RvdWJsZSkgewotICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKERvdWJsZVVzZSk7
CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQodXNlS2luZCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2Rl
KGNoaWxkSW5kZXgsIGRpcmVjdGlvbik7CisgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2Rl
KGVkZ2UsIHVzZUtpbmQsIGRpcmVjdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBpbmplY3RJbnQz
MlRvRG91YmxlTm9kZSh1bnNpZ25lZCBjaGlsZEluZGV4LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIHZvaWQgaW5qZWN0SW50MzJUb0Rv
dWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUs
CiAgICAgICAgICAgICBkaXJlY3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlvbiA/IEludDMyVG9E
b3VibGUgOiBGb3J3YXJkSW50MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkubm9k
ZSgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5u
b2RlKCksIE51bWJlclVzZSkpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKAogICAgICAgICAgICAgIihyZXBsYWNp
bmcgQCV1LT5AJXUgd2l0aCBAJXUtPkAldSkgIiwKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGUt
PmluZGV4KCksIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCktPmluZGV4
KCksIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CisgICAgICAgICAg
ICBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCBlZGdlLT5pbmRleCgpLCBtX2N1cnJlbnROb2RlLT5p
bmRleCgpLCByZXN1bHQtPmluZGV4KCkpOwogI2VuZGlmCiAKLSAgICAgICAgbV9ncmFwaC5jaGls
ZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0LCBEb3VibGVVc2UpOwor
ICAgICAgICBlZGdlID0gRWRnZShyZXN1bHQsIHVzZUtpbmQpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHRydW5jYXRlQ29uc3RhbnRUb0ludDMyKEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBO
b2RlKiBvbGROb2RlID0gZWRnZS5ub2RlKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQob2xk
Tm9kZS0+aGFzQ29uc3RhbnQoKSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KG9sZE5vZGUpOworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBqc051bWJlcihK
U0M6OnRvSW50MzIodmFsdWUuYXNOdW1iZXIoKSkpOworICAgICAgICBBU1NFUlQodmFsdWUuaXNJ
bnQzMigpKTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBT
cGVjSW50MzIsIEpTQ29uc3RhbnQsCisgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3Jp
Z2luLCBPcEluZm8oY29kZUJsb2NrKCktPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSkpKTsKKyAg
ICAgICAgbV9ncmFwaC5kZXJlZihvbGROb2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnVu
Y2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KE5vZGUqIG5vZGUsIEFkZFNwZWN1bGF0aW9uTW9kZSBt
b2RlKQorICAgIHsKKyAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlckFuZFRydW5j
YXRlQ29uc3RhbnRzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKG5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpIHx8IG5vZGUtPmNoaWxkMigpLT5oYXND
b25zdGFudCgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQor
ICAgICAgICAgICAgdHJ1bmNhdGVDb25zdGFudFRvSW50MzIobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihub2RlLT5jaGls
ZDIoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQoTm9k
ZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gbV9ncmFw
aC5hZGRTcGVjdWxhdGlvbk1vZGUobm9kZSk7CisgICAgICAgIGlmIChtb2RlID09IERvbnRTcGVj
dWxhdGVJbnRlZ2VyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShub2RlLCBtb2RlKTsKKyAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgIG5vZGUtPmNoaWxkMigp
LnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAg
ICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNDUgKzM0NiwxNCBAQCB2b2lkIEdy
YXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgfQogfQogCi0vLyBGSVhNRTogQ29udmVy
dCB0aGlzIHRvIGJlIGl0ZXJhdGl2ZSwgbm90IHJlY3Vyc2l2ZS4KLSNkZWZpbmUgRE9fVE9fQ0hJ
TERSRU4obm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51
bUNoaWxkcmVuKCk7IFwKLSAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAoISFt
X3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgICAgdGhpbmdUb0RvKG1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7ICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIV9ub2RlLT5j
aGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRo
aW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9E
byhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQogdm9p
ZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9kZSogb3ApCiB7Ci0gICAgRE9fVE9fQ0hJTERSRU4ob3As
IHJlZik7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMsIG9wLCByZWYpOwogfQog
CiB2b2lkIEdyYXBoOjpkZXJlZkNoaWxkcmVuKE5vZGUqIG9wKQogewotICAgIERPX1RPX0NISUxE
UkVOKG9wLCBkZXJlZik7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMsIG9wLCBk
ZXJlZik7CiB9CiAKIHZvaWQgR3JhcGg6OmRldGhyZWFkKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBzdHJ1
Y3QgUHV0VG9CYXNlT3BlcmF0aW9uRGF0YSB7CiAKIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsK
ICAgICBEb250U3BlY3VsYXRlSW50ZWdlciwKLSAgICBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlz
V2F0Y2hPdmVyZmxvdywKKyAgICBTcGVjdWxhdGVJbnRlZ2VyQW5kVHJ1bmNhdGVDb25zdGFudHMs
CiAgICAgU3BlY3VsYXRlSW50ZWdlcgogfTsKIApAQCAtMTAwLDEwICsxMDAsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgIHJldHVybiBub2RlOwog
ICAgIH0KLSAgICBFZGdlIHJlZihFZGdlIG5vZGVVc2UpCisgICAgRWRnZSByZWYoRWRnZSBlZGdl
KQogICAgIHsKLSAgICAgICAgcmVmKG5vZGVVc2Uubm9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG5v
ZGVVc2U7CisgICAgICAgIHJlZihlZGdlLm5vZGUoKSk7CisgICAgICAgIHJldHVybiBlZGdlOwor
ICAgIH0KKyAgICBFZGdlIHJlZihOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHJlZihlZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZXJlZihOb2RlKiBub2RlKQpA
QCAtMTE1LDkgKzExOSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVy
ZWYoKSA9PSAxKQogICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlKTsKICAgICB9Ci0gICAg
dm9pZCBkZXJlZihFZGdlIG5vZGVVc2UpCisgICAgdm9pZCBkZXJlZihFZGdlIGVkZ2UpCiAgICAg
ewotICAgICAgICBkZXJlZihub2RlVXNlLm5vZGUoKSk7CisgICAgICAgIGRlcmVmKGVkZ2Uubm9k
ZSgpKTsKKyAgICB9CisgICAgdm9pZCBkZXJlZihOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAg
ICAgICAgZGVyZWYoZWRnZSk7CiAgICAgfQogICAgIAogICAgIC8vIFdoZW4gYSBub2RlJ3MgcmVm
Q291bnQgZ29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9naWNhbGx5KSByZWN1cnNpdmVseSBy
ZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVyc2EuCkBAIC0xNzQsOSArMTgyLDkg
QEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZp
cnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGls
ZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25G
b3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2Rl
LT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVy
YXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxk
cmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3Rp
dHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAg
ICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQyKCksIHNob3VsZEdlbmVy
YXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxk
MygpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC01MzAsOSAr
NTM4LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUt
PmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVybiBpc051bWJlclNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOworICAgICAgICByZXR1cm4g
aXNOdW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBpc051bWVyaWNhbChub2Rl
LT5jaGlsZDIoKS51c2VLaW5kKCkpOwogICAgIH0KICAgICAKICAgICAvLyBOb3RlIHRoYXQgYSAn
dHJ1ZScgcmV0dXJuIGRvZXMgbm90IGFjdHVhbGx5IG1lYW4gdGhhdCB0aGUgQnlWYWwgYWNjZXNz
IGNsb2JiZXJzIG5vdGhpbmcuCkBAIC03ODEsNyArNzg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0ZSA+IHR3
b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9k
ZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250
U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIo
YWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0
YW50cyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKICAgICBib29sIG11bElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwg
Tm9kZSogaW1tZWRpYXRlKQpAQCAtODMwLDYgKzgzNiwzNiBAQCBpbmxpbmUgQmxvY2tJbmRleCBH
cmFwaDo6YmxvY2tJbmRleEZvckJ5CiAgICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8QmxvY2tJbmRl
eCwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVj
b2RlQmVnaW4sIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOwogfQogCisjZGVmaW5l
IERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAg
ICAgICAgICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSAr
IF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgaWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgKGdyYXBoKS5tX3ZhckFy
Z0NoaWxkcmVuW19jaGlsZElkeF0pOyBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gZWxz
ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
ICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2Rl
LT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGls
ZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDMoKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAo
ZmFsc2UpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQzNDI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDExICs5NSwx
MCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAg
IHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwotICAgICAgICBBU1NFUlQoISEo
bV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSA9PSAoY2hpbGRyZW4ua2luZCgpID09IEFkamFjZW5j
eUxpc3Q6OlZhcmlhYmxlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUg
d2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2Rl
VHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBj
aGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgRWRnZSBjaGlsZDEgPSBFZGdlKCksIEVkZ2UgY2hpbGQyID0gRWRn
ZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmln
aW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hp
bGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKQEAgLTExMSw3ICsxMTAsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAg
Ly8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIGFuIGltbWVkaWF0
ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9w
SW5mbyBpbW0sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxk
MyA9IDApCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcElu
Zm8gaW1tLCBFZGdlIGNoaWxkMSA9IEVkZ2UoKSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2Ug
Y2hpbGQzID0gRWRnZSgpKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAg
ICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxk
MykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpA
QCAtMTI0LDcgKzEyMyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1
Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMu
Ci0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1t
MSwgT3BJbmZvIGltbTIsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUq
IGNoaWxkMyA9IDApCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIEVkZ2UgY2hpbGQxID0gRWRnZSgpLCBFZGdlIGNo
aWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgICAgIDogY29kZU9yaWdp
bihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBj
aGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0yOTQsMjIgKzI5MywyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNl
dCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0
VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9y
YWdlKQorICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0g
R2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleDsKLSAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uoc3Rv
cmFnZSkpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoc3RvcmFnZSk7CiAgICAgICAgIG1f
b3AgPSBHZXRCeU9mZnNldDsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7
CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb1B1
dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlk
RGlyZWN0KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwogICAg
ICAgICBjaGlsZHJlbi5zZXRDaGlsZDMoY2hpbGRyZW4uY2hpbGQyKCkpOwogICAgICAgICBjaGls
ZHJlbi5zZXRDaGlsZDIoY2hpbGRyZW4uY2hpbGQxKCkpOwotICAgICAgICBjaGlsZHJlbi5zZXRD
aGlsZDEoRWRnZShzdG9yYWdlKSk7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShzdG9yYWdl
KTsKICAgICAgICAgbV9vcCA9IFB1dEJ5T2Zmc2V0OwogICAgICAgICBtX2ZsYWdzICY9IH5Ob2Rl
Q2xvYmJlcnNXb3JsZDsKICAgICB9CkBAIC05NDksOSArOTQ4LDEwIEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVu
dHM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBQaGFudG9tOgogICAg
ICAgICBjYXNlIE5vcDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBQ
aGFudG9tOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtpbmRVbmNoZWNrZWQoKSAh
PSBVbnR5cGVkVXNlIHx8IGNoaWxkMigpLnVzZUtpbmRVbmNoZWNrZWQoKSAhPSBVbnR5cGVkVXNl
IHx8IGNoaWxkMygpLnVzZUtpbmRVbmNoZWNrZWQoKSAhPSBVbnR5cGVkVXNlOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHNob3VsZEdlbmVyYXRlKCk7CiAgICAgICAgIH0K
QEAgLTk5NSw3ICs5OTUsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3JlZkNv
dW50LS07CiAgICAgfQogICAgIAotICAgIEVkZ2UgY2hpbGQxKCkKKyAgICBFZGdlJiBjaGlsZDEo
KQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAg
ICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDEoKTsKQEAgLTEwMDksMTMgKzEwMDksMTMgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQxVW5jaGVja2VkKCk7
CiAgICAgfQogCi0gICAgRWRnZSBjaGlsZDIoKQorICAgIEVkZ2UmIGNoaWxkMigpCiAgICAgewog
ICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0
dXJuIGNoaWxkcmVuLmNoaWxkMigpOwogICAgIH0KIAotICAgIEVkZ2UgY2hpbGQzKCkKKyAgICBF
ZGdlJiBjaGlsZDMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNW
YXJBcmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDMoKTsKQEAgLTEwMzMsNiAr
MTAzMywxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5udW1DaGls
ZHJlbigpOwogICAgIH0KICAgICAKKyAgICBVc2VLaW5kIGJpbmFyeVVzZUtpbmQoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGNoaWxkMSgpLnVzZUtpbmQoKSA9PSBjaGlsZDIoKS51c2VLaW5kKCkp
OworICAgICAgICByZXR1cm4gY2hpbGQxKCkudXNlS2luZCgpOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzQmluYXJ5VXNlS2luZChVc2VLaW5kIHVzZUtpbmQpCisgICAgeworICAgICAgICByZXR1
cm4gY2hpbGQxKCkudXNlS2luZCgpID09IHVzZUtpbmQgJiYgY2hpbGQyKCkudXNlS2luZCgpID09
IHVzZUtpbmQ7CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24oKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCShyZXZpc2lvbiAxNDM0MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci10eXBlZGVmIEFsbG9jYXRvcjxOb2RlPiBOb2RlQWxsb2NhdG9yOworI2lmIFVTRShKU1ZBTFVF
NjQpCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCAxMTI+IE5vZGVBbGxvY2F0b3I7CisjZWxzZQor
dHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgODA+IE5vZGVBbGxvY2F0b3I7CisjZW5kaWYKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVGbGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlRmxhZ3MuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjb25zdCBjaGFyKiBub2RlRmxh
Z3NBc1N0cmluZyhOb2RlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKCFmbGFncykKKyAgICBpZiAo
IShmbGFncyBeIE5vZGVEb2VzTm90RXhpdCkpCiAgICAgICAgIHJldHVybiAiPGVtcHR5PiI7CiAK
ICAgICBzdGF0aWMgY29uc3QgaW50IHNpemUgPSAxMjg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDggKzk2LDYg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZvcndhcmRJbnQz
MlRvRG91YmxlLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgLyogVXNlZCB0byBzcGVjdWxhdGUg
dGhhdCBhIGRvdWJsZSB2YWx1ZSBpcyBhY3R1YWxseSBhbiBpbnRlZ2VyLiAqL1wKICAgICBtYWNy
byhEb3VibGVBc0ludDMyLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICAvKiBVc2VkIHRvIHJlY29y
ZCBwbGFjZXMgd2hlcmUgd2UgbXVzdCBjaGVjayBpZiBhIHZhbHVlIGlzIGEgbnVtYmVyLiAqL1wK
LSAgICBtYWNybyhDaGVja051bWJlciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAv
KiBOb2RlcyBmb3IgYXJpdGhtZXRpYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhBcml0aEFk
ZCwgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODA1LDcgKzgwNSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAg
ICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFRlYXJPZmZBcmd1bWVu
dHM6Ci0gICAgICAgIGNhc2UgQ2hlY2tOdW1iZXI6CiAgICAgICAgIGNhc2UgQ2hlY2tBcmd1bWVu
dHNOb3RDcmVhdGVkOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6CiAgICAgICAg
IGNhc2UgR2FyYmFnZVZhbHVlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCwyMyArNDAsMjUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsSW50ZWdlcihOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCitHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0KQogewotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJ
bnQzMikpOworICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdl
LT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7
CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVkZ2Ut
Pmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUpKQotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpCisgICAgICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpCiAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOwotICAgICAg
ICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7
CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoanNWYWx1
ZS5wYXlsb2FkKCkpLCBncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAt
MTEzLDI1ICsxMTUsMjUgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2Rl
KgogICAgIH0KIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZSogbm9k
ZSwgR1BSUmVnJiB0YWdHUFIsIEdQUlJlZyYgcGF5bG9hZEdQUiwgRlBSUmVnJiBmcHIpCitib29s
IFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShFZGdlIGVkZ2UsIEdQUlJlZyYgdGFnR1BSLCBH
UFJSZWcmIHBheWxvYWRHUFIsIEZQUlJlZyYgZnByKQogewogICAgIC8vIEZJWE1FOiBGb3IgZG91
YmxlIHdlIGNvdWxkIGZpbGwgd2l0aCBhIEZQUi4KICAgICBVTlVTRURfUEFSQU0oZnByKTsKIAot
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZv
W3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkg
ewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29u
c3RhbnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAg
ICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIHBheWxvYWRHUFIgPSBhbGxvY2F0
ZSgpOwotICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChub2Rl
KS50YWcoKSksIHRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGUpLnBheWxvYWQoKSksIHBheWxvYWRHUFIpOworICAgICAgICAgICAgbV9q
aXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSkudGFnKCkpLCB0YWdH
UFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChlZGdl
Lm5vZGUoKSkucGF5bG9hZCgpKSwgcGF5bG9hZEdQUik7CiAgICAgICAgICAgICBtX2dwcnMucmV0
YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAg
ICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3Jk
ZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFn
R1BSLCBwYXlsb2FkR1BSLCBpc0ludDMyQ29uc3RhbnQobm9kZSkgPyBEYXRhRm9ybWF0SlNJbnRl
Z2VyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkgPyBE
YXRhRm9ybWF0SlNJbnRlZ2VyIDogRGF0YUZvcm1hdEpTKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CiAg
ICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUgJiYgc3BpbGxG
b3JtYXQgIT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwpAQCAtODQ0LDI3ICs4NDYsMzAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogfQogCiB0ZW1wbGF0ZTxib29sIHN0
cmljdD4KLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5v
ZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJu
YWwoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0
YUxvZ0YoIlNwZWNJbnRAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKKyAgICBkYXRhTG9nRigiU3Bl
Y0ludEAlZCAgICIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBl
IHR5cGUgPSB2YWx1ZS5tX3R5cGU7CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3du
SW50MzJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0ludDMyKSk7CisgICAgdmFsdWUuZmls
dGVyKFNwZWNJbnQzMik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVk
Z2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7Ci0gICAgICAgIGlmICgobm9k
ZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB8fCBpbmZvLnNwaWxs
Rm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICBpZiAoKGVkZ2UtPmhhc0Nv
bnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpIHx8IGluZm8uc3BpbGxG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9u
KTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlm
IChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0
YW50KG5vZGUpKTsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgIEdQ
UlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQo
ZWRnZS5ub2RlKCkpKSwgZ3ByKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICBpbmZvLmZpbGxJ
bnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFG
b3JtYXRJbnRlZ2VyOwpAQCAtODc1LDggKzg4MCw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgQVNTRVJUX1VOVVNFRChzcGlsbEZvcm1hdCwgKHNw
aWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50
ZWdlcik7CiAKICAgICAgICAgLy8gSWYgd2Uga25vdyB0aGlzIHdhcyBzcGlsbGVkIGFzIGFuIGlu
dGVnZXIgd2UgY2FuIGZpbGwgd2l0aG91dCBjaGVja2luZy4KLSAgICAgICAgaWYgKCFpc0ludDMy
U3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSks
IG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGls
ZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0ludDMyKQorICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpLCBlZGdlLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVy
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSksIGRpcmVjdGlvbik7CiAKICAgICAg
ICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwpAQCAtODkzLDggKzg5OCw4
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgR1BS
UmVnIHBheWxvYWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKICAgICAgICAgbV9ncHJzLmxvY2so
dGFnR1BSKTsKICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIGlmICgh
aXNJbnQzMlNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNJbnQz
MikKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFn
R1BSLCBwYXlsb2FkR1BSKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpLCBkaXJlY3Rp
b24pOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxl
YXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwpAQCAtOTI5
LDQwICs5MzQsNDMgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQog
ICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGUq
IG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KEVkZ2UgZWRn
ZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24pCiB7Ci0gICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDxmYWxzZT4obm9kZSwg
cmV0dXJuRm9ybWF0LCBkaXJlY3Rpb24pOworICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWw8ZmFsc2U+KGVkZ2UsIHJldHVybkZvcm1hdCwgZGlyZWN0aW9uKTsKIH0KIAotR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5vZGUqIG5vZGUpCitHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoRWRnZSBlZGdlKQogewog
ICAgIERhdGFGb3JtYXQgbXVzdEJlRGF0YUZvcm1hdEludGVnZXI7Ci0gICAgR1BSUmVnIHJlc3Vs
dCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDx0cnVlPihub2RlLCBtdXN0QmVEYXRhRm9ybWF0
SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxT
cGVjdWxhdGVJbnRJbnRlcm5hbDx0cnVlPihlZGdlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwg
QmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgQVNTRVJUKG11c3RCZURhdGFGb3JtYXRJbnRlZ2Vy
ID09IERhdGFGb3JtYXRJbnRlZ2VyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1GUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSogbm9kZSwgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uKQorRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlRG91YmxlKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewog
I2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiU3BlY0RvdWJsZUAl
ZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFMb2dGKCJTcGVjRG91YmxlQCVkICAgIiwg
ZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0
ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVl
Lm1fdHlwZTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25vd25OdW1iZXJVc2UgfHwg
ISh2YWx1ZS5tX3R5cGUgJiB+U3BlY051bWJlcikpOworICAgIHZhbHVlLmZpbHRlcihTcGVjTnVt
YmVyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZv
W3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERh
dGFGb3JtYXROb25lKSB7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKKyAgICAgICAgaWYgKGVkZ2Ut
Pmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7
CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0
cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgeworICAgICAgICAgICAgfSBlbHNlIGlm
IChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEZQUlJl
ZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUo
YWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZSksIGZwcik7CisgICAgICAgICAgICAgICAgbV9q
aXQubG9hZERvdWJsZShhZGRyZXNzT2ZEb3VibGVDb25zdGFudChlZGdlLm5vZGUoKSksIGZwcik7
CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3Ry
ZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CkBAIC05ODYsOCArOTk0LDgg
QEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogCiAgICAgICAgICAg
ICBpZiAoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdEpTSW50ZWdlciAmJiBzcGlsbEZvcm1hdCAh
PSBEYXRhRm9ybWF0SW50ZWdlcikgewogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgSklUQ29t
cGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24odHlwZSkp
Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgSklUQ29tcGlsZXI6OnRh
Z0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSks
IGRpcmVjdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgJiB+U3BlY051bWJlcikKKyAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNl
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpLCBlZGdlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9y
KHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSwgZGly
ZWN0aW9uKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CiAgICAgICAgICAgICAgICAgaGFzVW5i
b3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKIApAQCAtMTAyMSw4ICsxMDI5LDggQEAgRlBSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBpZiAoaW5mby5yZWdp
c3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0ludGVnZXIpIHsKICAgICAgICAgICAgIEZQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJ
bnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICAgICAgaWYgKCFpc051bWJl
clNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZSwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6TG93ZXN0VGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBpZiAodHlwZSAmIH5T
cGVjTnVtYmVyKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSksIGRpcmVjdGlvbik7CiAgICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIsIHBh
eWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CiAgICAgICAgICAgICBoYXNVbmJveGVkRG91
YmxlID0gbV9qaXQuanVtcCgpOwogICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsK
QEAgLTEwNzYsMjAgKzEwODQsMjMgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlRG91YgogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Q2VsbChOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICBkYXRhTG9nRigiU3BlY0NlbGxAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKKyAgICBkYXRhTG9n
RigiU3BlY0NlbGxAJWQgICAiLCBlZGdlLT5pbmRleCgpKTsKICNlbmRpZgotICAgIFNwZWN1bGF0
ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKKyAgICBTcGVjdWxh
dGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAh
PSBLbm93bkNlbGxVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsKKyAgICB2YWx1
ZS5maWx0ZXIoU3BlY0NlbGwpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdp
c3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogCi0gICAgICAgIGlm
IChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2
YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uu
bm9kZSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICAg
ICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwpAQCAtMTEwMiw4ICsx
MTEzLDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAg
ICB9CiAKICAgICAgICAgQVNTRVJUKChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMp
IHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Q2VsbCk7Ci0gICAgICAgIGlmICgh
aXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2VsbCkKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdp
c3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksIGRpcmVjdGlvbik7CiAgICAg
ICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgbV9ncHJz
LnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwpAQCAtMTEy
Myw4ICsxMTM0LDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAog
ICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IGluZm8ucGF5bG9hZEdQUigpOwogICAgICAgICBt
X2dwcnMubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMubG9jayhwYXlsb2FkR1BSKTsKLSAg
ICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0eXBlICYg
flNwZWNDZWxsKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSwg
ZGlyZWN0aW9uKTsKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dw
cnMucmVsZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsK
QEAgLTExNTEsMTMgKzExNjIsMTUgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbAogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbGVhbihOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRnZSwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKICAgICBkYXRhTG9nRigiU3BlY0Jvb2xAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKICNlbmRp
ZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBl
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdl
KTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIHZhbHVlLmZp
bHRlcihTcGVjQm9vbGVhbik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkpIHsKQEAgLTExNjcsOCArMTE4MCw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAg
ICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CisgICAg
ICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKSB7
CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckNvbnN0YW50KTsKQEAgLTExODIsOCArMTE5NSw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKIAogICAgICAgICBBU1NFUlQoKGluZm8uc3BpbGxGb3Jt
YXQoKSAmIERhdGFGb3JtYXRKUykgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRC
b29sZWFuKTsKIAotICAgICAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHR5cGUpKQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpLCBub2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lz
dGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKSwgZGlyZWN0aW9uKTsKKyAg
ICAgICAgaWYgKHR5cGUgJiB+U3BlY0Jvb2xlYW4pCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVh
bFJlZ2lzdGVyKSksIGVkZ2UsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Qm9vbGVhblRhZykpLCBkaXJlY3Rpb24pOwogCiAgICAgICAgIEdQUlJlZyBncHIgPSBh
bGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKQEAgLTEyMDQsOCArMTIxNyw4IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIg
PSBpbmZvLnBheWxvYWRHUFIoKTsKICAgICAgICAgbV9ncHJzLmxvY2sodGFnR1BSKTsKICAgICAg
ICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIGlmICghaXNCb29sZWFuU3BlY3Vs
YXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRh
ZykpLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAodHlwZSAmIH5TcGVjQm9vbGVhbikKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXls
b2FkR1BSKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSksIGRpcmVjdGlvbik7CiAK
ICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZSh0
YWdHUFIpOwpAQCAtMTI1OSwzNiArMTI3MiwyNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAKICAg
ICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAg
ICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50
KCkpOyAKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
ICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVj
T2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxk
MigpLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsK
KyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNo
UHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgIERG
R19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ay
R1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVH
UFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
LSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBt
X2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCAKICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCAKQEAgLTEyOTYsMTQgKzEzMDAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0
cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
Lm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQ
UiksIG5vZGUtPmNoaWxkMigpLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksIAogICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIApAQCAtMTMyNyw3ICsxMzI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdEVxdWFsaQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0
T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpCiB7CiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIGxlZnRDaGlsZCk7Ci0gICAgSlNWYWx1ZU9w
ZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQpOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlz
LCByaWdodENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKQEAg
LTEzMzcsMjcgKzEzMzgsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRv
T2JqZQogICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
aXNTdGlsbFZhbGlkKCkpIHsgCiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAobV9zdGF0
ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVj
dCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsK
ICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZv
ck5vZGUobGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVj
T2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIApAQCAtMTM3NCwyNyArMTM2OSwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0VG9PYmplCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmln
aHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4KICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7IAogICAgICAgICBtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAg
ICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwpICYg
flNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmln
aHRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9
CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyVGFn
R1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0
LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1
cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BS
KTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3Bl
Y0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2Fk
R1BSKSwgcmlnaHRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8
IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdo
dENoaWxkLCAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE0MTIsMTIgKzE0MDMsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIAogICAgIC8vIFdlIGtub3cg
dGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3QgYmUgYSBjZWxsLiBD
aGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3ZlIHRoYXQgaXQgaXMgZWl0aGVy
IG51bGwgb3IgdW5kZWZpbmVkLgotICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQp
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkgJiB+U3BlY090aGVyKSB7CisgICAgaWYgKG5lZWRzVHlwZUNo
ZWNrKHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5t
b3ZlKG9wMlRhZ0dQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BS
KSwgcmlnaHRDaGlsZCwKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJl
Z3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVj
T3RoZXIsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CkBAIC0xNDM5LDcgKzE0
MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgQmxv
Y2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAg
IAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOwotICAgIEpT
VmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBv
cDIodGhpcywgcmlnaHRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3By
KCk7CkBAIC0xNDQ5LDI3ICsxNDQwLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZU9iamUKICAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAo
bV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLAotICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVj
T2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRo
aXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3Rh
dGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAor
ICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxk
LCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCAKQEAgLTE0ODUsMjcgKzE0NzAsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFu
Y2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsK
LSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0Nl
bGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAg
ICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BS
KSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhv
cDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNP
YmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0
cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVHUFIpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUg
JiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBh
eWxvYWRHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBK
U1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAoflNwZWND
ZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQ
UiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTIwLDcgKzE1MDEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8gV2Ug
a25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNl
bGwuIENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBl
aXRoZXIgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRD
aGlsZCkubV90eXBlICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIpCisgICAgaWYgKCFuZWVkc1R5
cGVDaGVjayhyaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCiAgICAgICAgIHJpZ2h0
Tm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGp1bXAobm90VGFrZW4s
IEZvcmNlSnVtcCk7CkBAIC0xNTI5LDggKzE1MTAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIG1faml0Lm1vdmUob3AyVGFnR1BSLCByZXN1bHRH
UFIpOwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKICAg
ICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBCYWRUeXBlLCBK
U1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLAorICAgICAg
ICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxv
YWRHUFIpLCByaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
cmVzdWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TnVsbFRhZykpKTsKQEAgLTE1ODcsOSArMTU2OCw5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5n
cHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5vZGVVc2UsIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JP
dGhlckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNlKQogewotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGVVc2UpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxv
YWQodGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAg
R1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKQEAgLTE1OTksMjYg
KzE1ODAsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAg
IGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkp
IHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVj
dWxhdGlvbldhdGNocG9pbnQoKSk7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNr
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZh
bHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxv
YWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2Rl
VXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQ
dHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAg
R1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVj
dWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLAotICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5
bG9hZEdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
CisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCkBAIC0xNjQw
LDEwICsxNjE5LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUK
ICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAKICAgICBDT01QSUxFX0FTU0VSVCgoSlNWYWx1
ZTo6VW5kZWZpbmVkVGFnIHwgMSkgPT0gSlNWYWx1ZTo6TnVsbFRhZywgVW5kZWZpbmVkVGFnX09S
XzFfRVFVQUxTX051bGxUYWcpOwotICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgeworICAg
IGlmIChuZWVkc1R5cGVDaGVjayhub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKICAg
ICAgICAgbV9qaXQubW92ZSh2YWx1ZVRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAg
IG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQ
YXlsb2FkR1BSKSwgbm9kZVVzZSwgCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCBTcGVjQ2Vs
bCB8IFNwZWNPdGhlciwKICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAgICAgICAgICAgICAgcmVzdWx0UGF5
bG9hZEdQUiwgCkBAIC0xNjU4LDI2ICsxNjM4LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RPck90aGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxO
b3QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Cisg
ICAgY2FzZSBCb29sZWFuVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCB2YWx1ZSk7CiAgICAgICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWUu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0Lmdwcigp
LCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCksIAotICAgICAgICAgICAgIWlzT2JqZWN0
T3JPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KSk7CisgICAgICAgIAorICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogeworICAgICAgICBjb21w
aWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKSB7CisgICAgICAgIAorICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIG1faml0LmNvbXBh
cmUzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKICAgICAgICAgYm9vbGVhblJl
c3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAg
ICAgIAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CkBA
IC0xNjg5LDMwICsxNjcyLDM4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2Fs
Tm90KE4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRo
aXMsIGFyZzEsIGZhbHNlKTsKLSAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7
Ci0gICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7Ci0gICAgR1BS
UmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgIGNhc2UgVW50
eXBlZFVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgYXJnMSwgZmFs
c2UpOworICAgICAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7CisgICAgICAg
IEdQUlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CiAgICAgICAgIAotICAg
IGFyZzEudXNlKCk7CisgICAgICAgIGFyZzEudXNlKCk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVt
cCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMVRh
Z0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1
YWwsIGFyZzFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7CiAgICAg
Ci0gICAgbV9qaXQubW92ZShhcmcxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAg
ICAgIG1faml0Lm1vdmUoYXJnMVBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogCi0gICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAg
IHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0UGF5bG9h
ZEdQUiwgYXJnMVRhZ0dQUiwKLSAgICAgICAgICAgIGFyZzFQYXlsb2FkR1BSKSk7CisgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVz
dWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwKKyAgICAgICAgICAgICAgICBhcmcxUGF5bG9hZEdQ
UikpOwogICAgIAotICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9h
ZEdQUik7Ci0gICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxv
YWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCbG9ja0luZGV4
IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNl
LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuKQogewotICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7
CiAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKQEAgLTE3
MjIsMjMgKzE3MTMsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJC
cgogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZh
bGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFk
ZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlv
bkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCAKLSAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9D
SEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRH
UFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwg
dmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCAoflNw
ZWNDZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzY3Jh
dGNoR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0LmJyYW5j
aFRlc3Q4KEpJVENvbXBpbGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKQEAgLTE3NTUsMTAgKzE3NDQsMTIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIG5vdENlbGwubGluaygmbV9qaXQp
OwogICAgIAogICAgIENPTVBJTEVfQVNTRVJUKChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgfCAxKSA9
PSBKU1ZhbHVlOjpOdWxsVGFnLCBVbmRlZmluZWRUYWdfT1JfMV9FUVVBTFNfTnVsbFRhZyk7Ci0g
ICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5v
ZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVl
VGFnR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpOdWxsVGFnKSkpOworICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgU3BlY0NlbGwgfCBT
cGVjT3RoZXIsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOwogICAg
IH0KIAogICAgIGp1bXAobm90VGFrZW4pOwpAQCAtMTc3MSw3ICsxNzYyLDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBu
b2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS0+
bm90VGFrZW5CbG9ja0luZGV4KCk7CiAKLSAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlQm9v
bGVhbigpKSB7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBj
YXNlIEJvb2xlYW5Vc2U6IHsKICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29u
ZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogCkBAIC0xNzg5LDE0
ICsxNzgxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJy
YW5jaChub2RlLT5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCAKLSAgICAgICAgICAgICFpc09i
amVjdE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpOworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogeworICAgICAgICBlbWl0T2JqZWN0
T3JPdGhlckJyYW5jaChub2RlLT5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgY2FzZSBJbnQzMlVzZTog
eworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEludDMyVXNlKSB7CiAg
ICAgICAgICAgICBib29sIGludmVydCA9IGZhbHNlOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKQEAgLTE4MjAsMzIgKzE4MTIsNDAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICB2YWx1ZS5maWxsKCk7Ci0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFn
R1BSKCk7Ci0gICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsK
KyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICB2YWx1ZS5maWxsKCk7CisgICAgICAgIEdQUlJl
ZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOworICAgICAgICBHUFJSZWcgdmFsdWVQYXls
b2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwogICAgIAotICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2Rl
LT5jaGlsZDEoKSk7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdFBhdGggPSBtX2pp
dC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFn
R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKLQot
ICAgIGZhc3RQYXRoLmxpbmsoJm1faml0KTsKLSAgICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
Olplcm8sIHZhbHVlUGF5bG9hZEdQUiwgbm90VGFrZW4pOwotICAgIGp1bXAodGFrZW4sIEZvcmNl
SnVtcCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGZhc3RQYXRoID0gbV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6OkVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93
UGF0aCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIs
IEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwogCi0gICAg
c2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVz
dWx0R1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKTsKLSAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGZhc3RQYXRoLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCB2YWx1ZVBheWxvYWRHUFIsIG5v
dFRha2VuKTsKKyAgICAgICAganVtcCh0YWtlbiwgRm9yY2VKdW1wKTsKKworICAgICAgICBzbG93
UGF0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4s
IHJlc3VsdEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUik7CisgICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAKLSAgICBicmFuY2hUZXN0MzIoSklU
Q29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOwotICAgIGp1bXAobm90VGFrZW4p
OworICAgICAgICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwg
dGFrZW4pOworICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAKLSAgICBub1Jlc3VsdChub2Rl
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2VPcGVy
YW5kVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVmFsdWVPcGVy
YW5kVHlwZSwgdHlwZW5hbWUgVGFnVHlwZT4KQEAgLTE5MzAsMTQgKzE5MzAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBJZGVudGl0eTogewotICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGRvbmUgYSBsb3QgYmV0
dGVyLiBXZSB0YWtlIHRoZSBjaGVhcCB3YXkgb3V0IGJlY2F1c2UgSWRlbnRpdHkKLSAgICAgICAg
Ly8gaXMgb25seSBnb2luZyB0byBzdGljayBhcm91bmQgYWZ0ZXIgQ1NFIGlmIHdlIGhhZCBwcmVk
aWN0aW9uIHdlaXJkbmVzcy4KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBtX2ppdC5t
b3ZlKG9wZXJhbmQudGFnR1BSKCksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgIG1faml0Lm1v
dmUob3BlcmFuZC5wYXlsb2FkR1BSKCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMTk1NSw2ICsxOTQ4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlz
IHZhcmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAgICAgLy8g
Y2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQu
CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKSB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCB0cmFwIGluc3RlYWQuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4MwogICAgICAgICAgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1
ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0y
MDU1LDcgKzIwNTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBl
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7
CiAgICAgICAgICAgICBpZiAobV9nZW5lcmF0aW9uSW5mb1tub2RlLT5jaGlsZDEoKS0+dmlydHVh
bFJlZ2lzdGVyKCldLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgRWRnZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIERvdWJsZVVzZSkpOworICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIEJhY2t3YXJkU3BlY3Vs
YXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVEb3VibGUodmFsdWUuZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUtPmxv
Y2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgICAgICAg
ICByZWNvcmRTZXRMb2NhbChub2RlLT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3Rh
Y2spKTsKQEAgLTIxODMsMTkgKzIxNzgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBD
aGVja051bWJlcjogewotICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBv
cDEudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhvcDEudGFnR1BSKCksIG9wMS5wYXlsb2FkR1BSKCkpLCBub2RlLT5jaGlsZDEoKSwKLSAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBv
cDEudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgICAg
ICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICB9Ci0gICAgICAgIG5vUmVzdWx0
KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjYXNlIFZhbHVlQWRkOgogICAg
IGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNvbXBpbGVBZGQobm9kZSk7CkBAIC0yMjE0LDggKzIx
OTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbnQzMlVzZTogewogI2lmIENQVShYODYpCiAgICAgICAgICAgICBjb21waWxlSW50
ZWdlckFyaXRoRGl2Rm9yWDg2KG5vZGUpOwogI2VsaWYgQ1BVKEFQUExFX0FSTVY3UykKQEAgLTIy
MjUsMTYgKzIyMDcsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLQotICAgICAgICBGUFJSZWcg
cmVnMSA9IG9wMS5mcHIoKTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAg
ICAgIG1faml0LmRpdkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOwotCi0gICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEZQUlJlZyByZWcx
ID0gb3AxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAg
ICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMjQ0LDgg
KzIyMzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yMjU5LDE4ICsyMjQ5LDI3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAg
IAotICAgICAgICBtX2ppdC5hYnNEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQuYWJzRG91YmxlKG9w
MS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQu
ZnByKCksIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0g
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICYm
IG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJp
bmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwpAQCAt
MjI4OSwzNiArMjI4OCw0NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6
IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
KTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CiAgICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09
IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09
IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CiAgICAgICAgIAot
ICAgICAgICAvLyBvcDIgaXMgZWF0aGVyIHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlz
IE5hTgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJMZXNzID0gbV9qaXQuYnJhbmNo
RG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wMS5mcHIo
KSwgb3AyLmZwcigpKTsKKyAgICAgICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBv
bmUgb3Igb25lIG9mIHRoZW4gaXMgTmFOCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvcDJMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbk9yRXF1YWwsIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKICAgICAgICAgCi0gICAgICAg
IC8vIFVub3JkZXJlZCBjYXNlLiBXZSBkb24ndCBrbm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5h
Ti4gTWFudWZhY3R1cmUgTmFOIGJ5IGFkZGluZyAKLSAgICAgICAgLy8gb3AxICsgb3AyIGFuZCBw
dXR0aW5nIGl0IGludG8gcmVzdWx0LgotICAgICAgICBtX2ppdC5hZGREb3VibGUob3AxLmZwcigp
LCBvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CisgICAgICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGlj
aCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCisgICAgICAg
ICAgICAvLyBvcDEgKyBvcDIgYW5kIHB1dHRpbmcgaXQgaW50byByZXN1bHQuCisgICAgICAgICAg
ICBtX2ppdC5hZGREb3VibGUob3AxLmZwcigpLCBvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAKLSAgICAgICAg
b3AyTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AyLmZwcigp
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChvcDEuZnByKCkgIT0gcmVzdWx0LmZwcigpKSB7Ci0gICAgICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgaWYgKG9wMS5mcHIoKSAh
PSByZXN1bHQuZnByKCkpIHsKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAg
ICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmVE
b3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAK
LSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBk
b3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjk4MSwxMyArMjk4OCw5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAg
ICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWUuZnByKCk7CiAKLSAgICAgICAgICAgIGlmICghaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmls
aW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KLSAgICAgICAgICAgICAg
ICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0g
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVGUFIsIHZhbHVlRlBSKSk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncygpLCBub2RlLT5jaGlsZDIoKSwgU3BlY1JlYWxOdW1iZXIsCisgICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkLCB2YWx1ZUZQUiwgdmFsdWVGUFIpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKQEAg
LTMyMzUsNyArMzIzOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgc3dp
dGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICAgICAgLy8gSXQncyByZWFsbHkgcHJvZml0YWJsZSB0byBzcGVjdWxhdGUgaW50
ZWdlciwgc2luY2UgaXQncyByZWFsbHkgY2hlYXAsCiAgICAgICAgICAgICAvLyBpdCBtZWFucyB3
ZSBkb24ndCBoYXZlIHRvIGRvIGFueSByZWFsIHdvcmssIGFuZCB3ZSBlbWl0IGEgbG90IGxlc3Mg
Y29kZS4KICAgICAgICAgICAgIApAQCAtMzI0OCwzOCArMzI1Miw0NCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWco
dGhpcywgb3AxKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMs
IG9wMSwgZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdHJpbmcgc3Bl
Y3VsYXRpb24gaGVyZS4KLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywg
b3AxKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgb3AxLCBmYWxz
ZSk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgb3AxVGFnR1BSID0gb3AxLnRhZ0dQUigpOwot
ICAgICAgICBHUFJSZWcgb3AxUGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7Ci0gICAgICAg
IEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBvcDFUYWdHUFIgPSBvcDEudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgb3AxUGF5bG9h
ZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BS
ID0gcmVzdWx0VGFnLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIg
PSByZXN1bHRQYXlsb2FkLmdwcigpOwogICAgICAgICAKLSAgICAgICAgb3AxLnVzZSgpOworICAg
ICAgICAgICAgb3AxLnVzZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKCEobV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjQm9vbGVhbikp
KSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVRhZ0dQUiwgcmVzdWx0VGFnR1BSKTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5
UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGlmICghKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjTnVt
YmVyIHwgU3BlY0Jvb2xlYW4pKSkgeworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxVGFn
R1BSLCByZXN1bHRUYWdHUFIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9h
ZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBu
b3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYWxy
ZWFkeVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVRh
Z0dQUiwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9hZEdQ
UiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFUYWdHUFIsIHJlc3Vs
dFRhZ0dQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFQYXlsb2FkR1BSLCByZXN1
bHRQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAg
ICBub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0aXZlLAotICAgICAgICAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBvcDFU
YWdHUFIsIG9wMVBheWxvYWRHUFIpKTsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAg
ICAgICAgICAgICAgICAgICAgICBub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0
aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCBy
ZXN1bHRQYXlsb2FkR1BSKSwgb3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zMzYzLDEzICszMzczLDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIGNhc2Ug
QUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKICAgICAgICAgICAgICAgICAgICAg
RlBSUmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxp
bmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9w
RlBSLCBvcEZQUikpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwg
dXNlLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIs
IG9wRlBSKSk7CiAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJs
ZShvcEZQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJs
ZSkgKiBvcGVyYW5kSWR4KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQzMiwx
MyArMzQzOCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwogICAgICAgICAg
ICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgd2F5IG9mIHByb2ZpbGlu
ZyB0aGVzZSwgYW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBpbnRvCi0gICAgICAgICAgICAgICAg
ICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVn
cygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwgU3BlY1JlYWxOdW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90
RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUob3BGUFIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGJ1ZmZlciArIG9wZXJhbmRJZHgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2
MzksMzkgKzM2NDEsNDEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBpZiAo
aXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHRo
aXNWYWx1ZSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPdGhl
clNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIE90aGVy
VXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSUmVnIHRo
aXNWYWx1ZVRhZ0dQUiA9IHRoaXNWYWx1ZS50YWdHUFIoKTsKICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyB8IDEpID09IEpTVmFsdWU6Ok51bGxU
YWcsIFVuZGVmaW5lZFRhZ19PUl8xX0VRVUFMU19OdWxsVGFnKTsKLSAgICAgICAgICAgIG1faml0
Lm1vdmUodGhpc1ZhbHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG1faml0Lm9y
MzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMg
aGFyZC4gSXQgd291bGQgYmUgYmV0dGVyIHRvIHNhdmUgdGhlIHZhbHVlLCBidXQgd2UgY2FuJ3Qg
cXVpdGUgZG8gaXQsCi0gICAgICAgICAgICAvLyBzaW5jZSB0aGlzIG9wZXJhdGlvbiBkb2VzIG5v
dCBvdGhlcndpc2UgZ2V0IHRoZSBwYXlsb2FkLgotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkp
OworICAgICAgICAgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjT3Ro
ZXIpKSB7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVUYWdHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGhhcmQuIEl0IHdvdWxkIGJlIGJl
dHRlciB0byBzYXZlIHRoZSB2YWx1ZSwgYnV0IHdlIGNhbid0IHF1aXRlIGRvIGl0LAorICAgICAg
ICAgICAgICAgIC8vIHNpbmNlIHRoaXMgb3BlcmF0aW9uIGRvZXMgbm90IG90aGVyd2lzZSBnZXQg
dGhlIHBheWxvYWQuCisgICAgICAgICAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlUmVncygpLCBub2RlLT5jaGlsZDEoKSwgU3BlY090aGVyLAorICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51
bGxUYWcpKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsVGhpc09iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgY2VsbFJl
c3VsdChzY3JhdGNoR1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpKSkgeworICAgICAgICBjYXNlIE9iamVjdFVzZTogewogICAgICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY09iamVjdCwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAg
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKICAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC0zNjgwLDE3ICszNjg0
LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0
aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdGhpc1ZhbHVl
VGFnR1BSID0gdGhpc1ZhbHVlLnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlUGF5
bG9hZEdQUiA9IHRoaXNWYWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIAotICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRUYWcodGhp
cyk7Ci0gICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRUaGlzLCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBh
eWxvYWQuZ3ByKCksIHRoaXNWYWx1ZVRhZ0dQUiwgdGhpc1ZhbHVlUGF5bG9hZEdQUik7Ci0gICAg
ICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAg
ICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNW
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVl
VGFnR1BSID0gdGhpc1ZhbHVlLnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1
ZVBheWxvYWRHUFIgPSB0aGlzVmFsdWUucGF5bG9hZEdQUigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJS
ZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXls
b2FkKHRoaXMpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VGhp
cywgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCB0aGlzVmFsdWVUYWdHUFIs
IHRoaXNWYWx1ZVBheWxvYWRHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjZWxsUmVz
dWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzkwNiw3ICszOTE4LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC0zOTI2LDI0ICszOTM5LDMy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIGJhc2VUYWdHUFIgPSBiYXNl
LnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgYmFzZVBheWxvYWRHUFIgPSBiYXNlLnBheWxvYWRH
UFIoKTsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNl
VGFnR1BSID0gYmFzZS50YWdHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUGF5bG9hZEdQ
UiA9IGJhc2UucGF5bG9hZEdQUigpOwogCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHRUYWcodGhp
cyk7Ci0gICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgR1BS
UmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0UGF5bG9hZCh0
aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7CiAKLSAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAg
ICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2pp
dC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGJhc2VUYWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RD
ZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBiYXNlVGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgICAgICAKLSAgICAgICAgY2FjaGVk
R2V0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlVGFnR1BSLCBiYXNlUGF5bG9hZEdQUiwgcmVz
dWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5v
dENlbGwsIERvbnRTcGlsbCk7CisgICAgICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVP
cmlnaW4sIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBh
eWxvYWRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCwgRG9udFNwaWxsKTsK
ICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXls
b2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0zOTY3LDEzICszOTg4LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgogICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yobm9kZS0+c3RydWN0dXJl
U2V0KCkpCi0gICAgICAgICAgICAmJiBpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKSB7
Ci0gICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIAogICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBu
b2RlLT5vcCgpID09IEZvcndhcmRDaGVja1N0cnVjdHVyZSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6
IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCksIGRpcmVjdGlvbik7CiAgICAgICAgIApAQCAtNDAzMiw2ICs0
MDQ2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpF
cXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbVB0cihub2RlLT5zdHJ1Y3R1cmUoKSkpOwogICAgICAgICBtX2pp
dC5icmVha3BvaW50KCk7CiAgICAgICAgIGlzT0subGluaygmbV9qaXQpOworI2Vsc2UKKyAgICAg
ICAgc3BlY3VsYWNlQ2VsbChub2RlLT5jaGlsZDEoKSk7CiAjZW5kaWYKIAogICAgICAgICBub1Jl
c3VsdChub2RlKTsKQEAgLTQwMzksNiArNDA1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUGhhbnRvbVB1dFN0
cnVjdHVyZTogeworICAgICAgICBBU1NFUlQoaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnBy
ZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRl
ZCgpKTsKICAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oCiAgICAgICAg
ICAgICBub2RlLT5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpLApAQCAtNDM5MCwxOCArNDQw
NywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKIAorICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxV
c2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSk7CisKICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCB0YWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZykpOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwo
KSkKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIs
IHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgaXNOb3RDZWxsKTsKIAotICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSB8fCBub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCB0ZW1wR1BSKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IG1f
aml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0
ZW1wR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0
cmluZ1R5cGUpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgbm90U3RyaW5n
KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KQorICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5
bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nLCBub3RTdHJpbmcpOwogICAgICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxT
dHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVKdW1w
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpICE9IFN0cmluZ1VzZSkgewogICAgICAgICAgICAgICAgIG5vdFN0cmluZy5s
aW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBl
T2YsIHJlc3VsdEdQUiwgcGF5bG9hZEdQUik7CiAgICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtNDQxMSw3ICs0NDMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSkgewogICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0
KTsKIAogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCB0YWdHUFIsIHRl
bXBHUFIpOwpAQCAtNDkyOCw2ICs0OTQ3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFBoYW50b206CisgICAg
ICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1faml0LmdyYXBoKCksIG5vZGUsIHNwZWN1bGF0
ZSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKwogICAgIGNhc2Ug
UGhhbnRvbUxvY2FsOgogICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCiAgICAgICAgIG5vUmVz
dWx0KG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwy
OCArMzksMzAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlKiBub2Rl
LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJ
bnRlZ2VyKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewotICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQzMikpOworICAgIAorICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsK
ICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXTsKIAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUp
IHsKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUt
Pmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJD
b25zdGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChl
ZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIpOwogICAgICAg
ICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAg
ICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFu
dChub2RlKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZh
bHVlT2ZOdW1iZXJDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25z
dGFudChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBq
c051bWJlcih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUoanNW
YWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0Nv
bnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkp
LCBncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewpAQCAtMTE3LDI3ICsxMTksMjcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlKgogICAgIH0KIH0KIAotR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlKiBub2RlKQorR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsSlNWYWx1ZShFZGdlIGVkZ2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAK
ICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1h
dE5vbmU6IHsKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYg
KG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZSkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaW5m
by5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZSkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZh
bHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3By
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgeworICAg
ICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAg
ICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRK
U0RvdWJsZSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6OkVuY29k
ZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpOworICAgICAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWVPZk51bWJlckNv
bnN0YW50KGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlKSk7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9k
ZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChlZGdlLm5vZGUoKSkpOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uu
bm9kZSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAg
ICAgICAgfQpAQCAtODAyLDE4ICs4MDQsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZQogfQogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KLUdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQm
IHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoRWRnZSBlZGdlLCBEYXRhRm9y
bWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIlNwZWNJbnRAJWQgICAi
LCBub2RlLT5pbmRleCgpKTsKKyAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIGVkZ2UtPmlu
ZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9k
ZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5v
ZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7
CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3duSW50MzJVc2UgfHwgISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0ludDMyKSk7CisgICAgdmFsdWUuZmlsdGVyKFNwZWNJbnQzMik7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3Rlcigp
OwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNl
IERhdGFGb3JtYXROb25lOiB7Ci0gICAgICAgIGlmICgobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiAh
aXNJbnQzMkNvbnN0YW50KG5vZGUpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1h
dERvdWJsZSkgeworICAgICAgICBpZiAoKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWlzSW50MzJD
b25zdGFudChlZGdlLm5vZGUoKSkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
RG91YmxlKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVy
bkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KCk7CkBAIC04MjEsMTAgKzgyNiwxMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnRJCiAgICAgICAgIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAot
ICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFz
Q29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29u
c3RhbnQobm9kZSkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
MzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgQVNTRVJU
KGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwg
Z3ByKTsKICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAg
ICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICBy
ZXR1cm4gZ3ByOwpAQCAtODY0LDggKzg2OSw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKICAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIu
CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhn
cHIpOwotICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNJbnQzMikK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwg
ZWRnZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIGRpcmVjdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAvLyBJ
ZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJldHVybi4KICAgICAgICAgaWYgKCFzdHJpY3QpIHsKQEAg
LTkxMCwxMCArOTE1LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEkKIAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0Rv
dWJsZTogewotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiBpc0ludDMyQ29uc3Rh
bnQobm9kZSkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgaXNJbnQzMkNv
bnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRl
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGUpKSwgZ3ByKTsKKyAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZh
bHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICByZXR1
cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAg
ICAgICAgIH0KQEAgLTkzNiwzNSArOTQxLDM4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUludChOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUludChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJu
YWw8ZmFsc2U+KG5vZGUsIHJldHVybkZvcm1hdCwgZGlyZWN0aW9uKTsKKyAgICByZXR1cm4gZmls
bFNwZWN1bGF0ZUludEludGVybmFsPGZhbHNlPihlZGdlLCByZXR1cm5Gb3JtYXQsIGRpcmVjdGlv
bik7CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludFN0cmljdChO
b2RlKiBub2RlKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0
KEVkZ2UgZWRnZSkKIHsKICAgICBEYXRhRm9ybWF0IG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyOwot
ICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8dHJ1ZT4obm9kZSwg
bXVzdEJlRGF0YUZvcm1hdEludGVnZXIsIEJhY2t3YXJkU3BlY3VsYXRpb24pOworICAgIEdQUlJl
ZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8dHJ1ZT4oZWRnZSwgbXVzdEJlRGF0
YUZvcm1hdEludGVnZXIsIEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgIFJFTEVBU0VfQVNTRVJU
KG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyID09IERhdGFGb3JtYXRJbnRlZ2VyKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1GUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
bGUoTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorRlBSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICBkYXRhTG9nRigiU3BlY0RvdWJsZUAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFM
b2dGKCJTcGVjRG91YmxlQCVkICAgIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVj
dWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5k
KCkgIT0gS25vd25OdW1iZXJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY051bWJlcikpOwor
ICAgIHZhbHVlLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBpZiAoaW5m
by5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAgIGlmIChub2Rl
LT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAg
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChl
ZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUo
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWlu
dGVycHJldERvdWJsZVRvSW50NjQoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlKSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQoc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpKSksIGdwcik7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAgICAgICAgICAgIHVu
bG9jayhncHIpOwogCkBAIC05NzIsOSArOTgwLDkgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJl
YW0sIGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICBpZiAo
aXNOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcg
ZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQodmFsdWVPZk51bWJlckNvbnN0
YW50KG5vZGUpKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFu
dChlZGdlLm5vZGUoKSkpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0Rv
dWJsZShncHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKQEAgLTEwMzgs
OCArMTA0Niw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogCi0gICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbih0eXBlKSkK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoanNWYWx1
ZUdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywganNW
YWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAg
ICAgICAgaWYgKHR5cGUgJiB+U3BlY051bWJlcikKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoanNWYWx1ZUdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKIAogICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0
IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICBtX2pp
dC5tb3ZlKGpzVmFsdWVHcHIsIHRlbXBHcHIpOwpAQCAtMTEwMiwxMyArMTExMCwxNiBAQCBGUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgfQogfQogCi1HUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUNlbGwoRWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjQ2VsbEAlZCAgICIs
IG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFMb2dGKCJTcGVjQ2VsbEAlZCAgICIsIGVkZ2UtPmlu
ZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9k
ZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5v
ZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7
CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSB8fCAhKHZhbHVlLm1f
dHlwZSAmIH5TcGVjQ2VsbCkpOworICAgIHZhbHVlLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0
ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKQEAgLTExMjAsOCAr
MTEzMSw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAg
ICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2Rl
LT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9m
SlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgp
KTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKQEAgLTExMzYsOCArMTE0Nyw4IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgbV9qaXQubG9h
ZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKLSAg
ICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
ciksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNDZWxsKQorICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2pp
dC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAg
fQpAQCAtMTE1Miw4ICsxMTYzLDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbAogICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBp
bmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBpZiAoIWlzQ2Vs
bFNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsK
KyAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0NlbGwpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBk
aXJlY3Rpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRh
Rm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xMTc3LDEzICsx
MTg4LDE1IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICB9
CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSog
bm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxv
Z0YoIlNwZWNCb29sQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7CisgICAgZGF0YUxvZ0YoIlNwZWNC
b29sQCVkICAgIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0
eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICB2YWx1ZS5maWx0ZXIoU3BlY0Jvb2xlYW4pOworICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CkBAIC0xMTk1
LDggKzEyMDgsOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAg
ICAgICAgIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAo
bm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZSk7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7
CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5v
ZGUoKSk7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CkBAIC0xMjExLDkgKzEyMjQs
OSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIG1f
aml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OwogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRK
Uyk7Ci0gICAgICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkpIHsKKyAgICAgICAg
aWYgKHR5cGUgJiB+U3BlY0Jvb2xlYW4pIHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVh
blNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2Us
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9v
bGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CiAg
ICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAtMTIzMCw5ICsxMjQzLDkg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIGNhc2UgRGF0
YUZvcm1hdEpTOiB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBt
X2dwcnMubG9jayhncHIpOwotICAgICAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHR5cGUp
KSB7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNCb29sZWFuKSB7CiAgICAgICAgICAgICBtX2pp
dC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBn
cHIpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhn
cHIpLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdw
ciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJl
Y292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBkaXJl
Y3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlv
blJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBk
aXJlY3Rpb24pOwogICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQogICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKQEAgLTEy
OTAsMzUgKzEzMDMsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFs
aQogICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQo
KSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ax
R1BSKSwgbm9kZS0+Y2hpbGQxKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
ICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9k
ZS0+Y2hpbGQyKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRy
KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BS
KSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIg
PSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVH
UFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUg
JiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAg
ICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2Rl
LT5jaGlsZDEoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAg
ICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsIG1faml0
LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCiAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBA
IC0xMzI2LDE0ICsxMzMwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RF
cXVhbGkKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5
cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBu
b2RlLT5jaGlsZDIoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwot
ICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1f
aml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAor
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
CkBAIC0xMzU0LDcgKzEzNTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
RXF1YWxpCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVy
RXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVmdENoaWxkKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBv
cDIodGhpcywgcmlnaHRDaGlsZCk7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0
Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICAKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwpAQCAtMTM2Mywy
NyArMTM2NCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAg
ICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxW
YWxpZCgpKSB7IAogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9k
ZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0
LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAg
IEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxl
ZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIo
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwg
bV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAt
MTM5OSwyNyArMTM5NCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9P
YmplCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBt
dXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1f
Y3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlmICgo
bV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFNwZWNDZWxsKSAmIH5TcGVjT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCi0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNP
YmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhp
cyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAoKG1fc3Rh
dGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkg
ewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBl
LCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTQz
NywxMiArMTQyNiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmpl
CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGls
ZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8g
cHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0
YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIp
IHsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2socmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIpKSB7CiAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBt
X2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQp
LCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQubm9kZSgpLAor
ICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkp
OwpAQCAtMTQ2NCw3ICsxNDUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZQogICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJs
b2NrSW5kZXgoKTsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVm
dENoaWxkKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgcmlnaHRDaGlsZCk7CisgICAg
SlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAKICAgICBHUFJSZWcg
b3AxR1BSID0gb3AxLmdwcigpOwpAQCAtMTQ3MywyNyArMTQ2MiwyMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5n
cmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgp
KTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVj
T2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwg
Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIp
LCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1
Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwot
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmpl
Y3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
b3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiks
IGxlZnRDaGlsZCwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTA5LDI3ICsxNDkyLDIxIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAvLyBXZSBrbm93IHRo
YXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7
CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENo
aWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJH
UFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9
CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BS
KSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3Ry
dWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCku
bV90eXBlICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwg
cmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAg
ICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
b3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiks
IHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTQ0LDcgKzE1MjEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8gV2Uga25v
dyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwu
IENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBlaXRo
ZXIgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGls
ZCkubV90eXBlICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIpCisgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhyaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCiAgICAgICAgIHJpZ2h0Tm90
Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGp1bXAobm90VGFrZW4sIEZv
cmNlSnVtcCk7CkBAIC0xNTUzLDkgKzE1MzAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUGVlcEhvbGVPYmplCiAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOwog
ICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRV
bmRlZmluZWQpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQs
Ci0gICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIsIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgcmVzdWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoVmFsdWVOdWxsKSkpOwogICAgIH0KQEAgLTE2MDksOSArMTU4NSw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RP
ck90aGVyTG9naWNhbE5vdChFZGdlIG5vZGVVc2UsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2sp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoRWRn
ZSBub2RlVXNlKQogewotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOwor
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwpAQCAtMTYxOSwyNyArMTU5NSwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3Vy
cmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgp
LT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLQotICAgICAgICBpZiAobmVl
ZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAg
ICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVj
dWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2Jq
ZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KApAQCAt
MTY2MCwxMSArMTYzMSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JP
dGhlCiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAKLSAgICBpZiAobmVlZFNwZWN1
bGF0aW9uQ2hlY2spIHsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZVVzZSwgU3BlY0NlbGwg
fCBTcGVjT3RoZXIpKSB7CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CiAgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0Jp
dFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAKLSAgICAgICAgICAgIG1faml0LmJy
YW5jaDY0KAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLCBtX2ppdC5icmFuY2g2NCgKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAogICAgICAgICAgICAgICAg
IHJlc3VsdEdQUiwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChWYWx1ZU51bGwpKSk7CkBAIC0xNjc4LDEyICsxNjQ5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z2ljYWxOb3QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxv
Z2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCksCi0gICAgICAgICAgICAhaXNPYmplY3RPck90aGVyU3Bl
Y3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICBz
d2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgT2JqZWN0T3JPdGhl
clVzZTogeworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIAorICAgIGNhc2UgSW50MzJVc2U6
IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAg
ICAgbV9qaXQuY29tcGFyZTMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWUuZ3ByKCksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIoKSk7CkBAIC0xNjkxLDcg
KzE2NjMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAgIAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTE3MDMsOSArMTY3Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KTsKLSAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAg
aWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSkgeworICAgIGNhc2UgQm9vbGVhblVzZTogeworICAgICAgICBpZiAoIW5lZWRzVHlw
ZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbGVhbikpIHsKICAgICAgICAgICAgIFNwZWN1
bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICAgICAgCkBAIC0x
NzE2LDQxICsxNjg4LDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90
KE4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklYTUU6IFdlIGNv
dWxkIHJldXNlLCBidXQgb24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRv
IHJlc3RvcmUgdGFnIChha2luIHRvIGFkZCkuCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3Zl
KHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHQuZ3ByKCkpOwot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlLmdwcigp
KSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVy
bywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkp
OworICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIo
KSksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbGVhbiwgbV9qaXQuYnJhbmNoVGVzdDY0KAorICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAgICAgIG1faml0LnhvcjY0KFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0Lmdwcigp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBz
aG91bGQgdXNlIGl0IGhlcmUuCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICAg
ICAgCisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgCi0gICAgR1BSUmVnIGFyZzFHUFIg
PSBhcmcxLmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgICAKLSAgICBhcmcxLnVzZSgpOworICAgICAgICBhcmcxLnVz
ZSgpOwogICAgIAotICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsKLSAgICBtX2pp
dC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBy
ZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNo
VGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKKyAgICAgICAgbV9qaXQubW92ZShhcmcxR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7CiAgICAgCi0g
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbChzbG93Q2FzZSwg
dGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJnMUdQUikpOwor
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChz
bG93Q2FzZSwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJn
MUdQUikpOwogICAgIAotICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdl
IG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhl
ckJyYW5jaChFZGdlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFr
ZW4pCiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSk7CisgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CkBA
IC0xNzU5LDIzICsxNzQxLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90
aGVyQnIKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3Rp
bGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3Vy
cmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgp
LT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3Vs
YXRpb25DaGVjaykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0
LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAKLSAg
ICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKLSAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBF
X0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNw
ZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoVGVzdDgoSklUQ29t
cGlsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVy
ZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKIApAQCAtMTc5MSwxMCArMTc2OSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0T2JqZWN0T3JPdGhlckJyCiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAg
Ci0gICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNr
KG5vZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5tb3ZlKHZh
bHVlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCBt
X2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOworICAgICAgICB0eXBlQ2hlY2so
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIFNwZWNDZWxsIHwg
U3BlY090aGVyLCBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFs
dWVOdWxsKSkpOwogICAgIH0KICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAKQEAgLTE4MDYsMTQg
KzE3ODYsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBCbG9ja0lu
ZGV4IG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCi0gICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAg
ICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS0+Y2hpbGQxKCksIHRha2VuLCBub3RUYWtl
biwgCi0gICAgICAgICAgICAhaXNPYmplY3RPck90aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSkgeworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogeworICAgICAgICBlbWl0
T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLT5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIAorICAgIGNhc2UgSW50MzJVc2U6CisgICAg
Y2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBJbnQzMlVzZSkgewogICAgICAgICAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CkBAIC0xODM3LDU2
ICsxODE4LDYyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICBj
YXNlIFVudHlwZWRVc2U6CisgICAgY2FzZSBCb29sZWFuVXNlOiB7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgCi0g
ICAgYm9vbCBwcmVkaWN0Qm9vbGVhbiA9IGlzQm9vbGVhblNwZWN1bGF0aW9uKG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCkpOwotICAgIAotICAgIGlmIChwcmVkaWN0Qm9vbGVhbikgewotICAg
ICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0
aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOworICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEJvb2xlYW5Vc2UpIHsKKyAgICAgICAgICAgIGlmICgh
bmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNCb29sZWFuKSkgeworICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodGFr
ZW4gPT0gbmV4dEJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fz
c2VtYmxlcjo6WmVybzsKLSAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwot
ICAgICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47Ci0gICAgICAgICAgICAgICAgbm90VGFr
ZW4gPSB0bXA7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRha2VuID09IG5l
eHRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1i
bGVyOjpaZXJvOworICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwor
ICAgICAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAgICAgICAgICAgICAg
ICBub3RUYWtlbiA9IHRtcDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBicmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMy
KHRydWUpLCB0YWtlbik7Ci0gICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsKKyAgICAgICAgICAgICAgICBicmFu
Y2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKHRydWUpLCB0YWtlbik7
CisgICAgICAgICAgICAgICAganVtcChub3RUYWtlbik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgbm9kZS0+Y2hpbGQxKCksIG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFs
dWUudXNlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0ludDMyKSB7Ci0g
ICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBu
b3RUYWtlbik7Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7Ci0g
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0eXBlQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBub2RlLT5jaGlsZDEoKSwgU3BlY0Jvb2xlYW4sIG1faml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNJbnQzMikgeworICAgICAgICAgICAgICAgIGJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIG5vdFRha2VuKTsKKyAg
ICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB2YWx1
ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7CisgICAgICAgICAg
ICB9CiAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3Bl
Y0Jvb2xlYW4pIHsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsKLSAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQm9vbGVhbikg
eworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihmYWxzZSkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7CisgICAgICAgICAgICB9CiAg
ICAgCi0gICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAg
Ci0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVH
UFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CiAgICAg
Ci0gICAgICAgIGJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0R1BS
LCB0YWtlbik7Ci0gICAgICAgIGp1bXAobm90VGFrZW4pOworICAgICAgICAgICAgYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIHRha2VuKTsKKyAgICAgICAg
ICAgIGp1bXAobm90VGFrZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBub1Jlc3Vs
dChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAgICAKLSAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CkBAIC0xOTA4LDEyICsxODk1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBJZGVudGl0eTogewot
ICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGRvbmUgYSBsb3QgYmV0dGVyLiBXZSB0YWtlIHRoZSBj
aGVhcCB3YXkgb3V0IGJlY2F1c2UgSWRlbnRpdHkKLSAgICAgICAgLy8gaXMgb25seSBnb2luZyB0
byBzdGljayBhcm91bmQgYWZ0ZXIgQ1NFIGlmIHdlIGhhZCBwcmVkaWN0aW9uIHdlaXJkbmVzcy4K
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3BlcmFuZCk7Ci0gICAgICAgIG1faml0
Lm1vdmUob3BlcmFuZC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICAvLyBDU0Ugc2hvdWxkIGFsd2F5cyBlbGlt
aW5hdGUgdGhpcy4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkBAIC0xOTMxLDYgKzE5MTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRy
YWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAg
ICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQg
dG8gcHJvY2VlZC4KICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyYXAgaW5zdGVhZC4KKyAgICAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzgzCiAgICAg
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVy
YWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTIxMzEsMTkgKzIxMTYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBD
aGVja051bWJlcjogewotICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgb3AxLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVl
UmVncyhvcDEuZ3ByKCkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksCi0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDEuZ3ByKCksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmso
Jm1faml0KTsKLSAgICAgICAgfQotICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOgogICAg
ICAgICBjb21waWxlQWRkKG5vZGUpOwpAQCAtMjE2MiwyMSArMjEzNCwyOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBBcml0aERpdjogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZv
ckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
Ci0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICAgICAgY29tcGlsZUludGVnZXJBcml0aERpdkZvclg4Nihub2RlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotCi0gICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigp
OwotICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAgICAgICAgbV9qaXQuZGl2RG91
YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7Ci0KLSAgICAgICAgZG91YmxlUmVzdWx0KHJl
c3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6
IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Cisg
ICAgICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgICAgIG1faml0LmRp
dkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIxODYsOCArMjE2Niw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFy
aXRoQWJzOiB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBA
IC0yMjAxLDE4ICsyMTgxLDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5hYnNE
b3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1faml0LmFic0RvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhNaW46CiAg
ICAgY2FzZSBBcml0aE1heDogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxKTsKQEAgLTIyMzEsMzYgKzIyMTksNDQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Cisg
ICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBk
b25lOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1f
aml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxLmZwcigpLCBv
cDIuZnByKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1f
aml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxLmZwcigpLCBv
cDIuZnByKCkpOwogICAgICAgICAKLSAgICAgICAgLy8gb3AyIGlzIGVhdGhlciB0aGUgbGVzc2Vy
IG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
b3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgOiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW5PckVxdWFsLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgICAgICAvLyBvcDIg
aXMgZWF0aGVyIHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlzIE5hTgorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9
PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgOiBN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsLCBvcDEuZnByKCksIG9wMi5mcHIo
KSk7CiAgICAgICAgIAotICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3
aGljaCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCi0gICAg
ICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4KLSAgICAgICAgbV9q
aXQuYWRkRG91YmxlKG9wMS5mcHIoKSwgb3AyLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgLy8gVW5vcmRlcmVkIGNh
c2UuIFdlIGRvbid0IGtub3cgd2hpY2ggb2Ygb3AxLCBvcDIgaXMgTmFOLiBNYW51ZmFjdHVyZSBO
YU4gYnkgYWRkaW5nIAorICAgICAgICAgICAgLy8gb3AxICsgb3AyIGFuZCBwdXR0aW5nIGl0IGlu
dG8gcmVzdWx0LgorICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKG9wMS5mcHIoKSwgb3AyLmZw
cigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKICAgICAgICAgCi0gICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOwotICAgICAgICBtX2pp
dC5tb3ZlRG91YmxlKG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIG9wMkxl
c3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDIuZnByKCks
IHJlc3VsdC5mcHIoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAob3AxLmZwcigpICE9IHJlc3Vs
dC5mcHIoKSkgewotICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgICAgIGlmIChvcDEuZnByKCkgIT0gcmVzdWx0LmZwcigpKSB7CisgICAgICAgICAgICAgICAg
ZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgb3Ax
TGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvcDFMZXNzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwog
ICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBkb25lLmxp
bmsoJm1faml0KTsKICAgICAgICAgCi0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG5vZGUpOworICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTI2MTcsMTggKzI2MTMsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwogICAgICAgICAK
ICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5
OjpJbnQzMgotICAgICAgICAgICAgICAgICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKGNoaWxkMykubV90eXBlKSkgewotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlUmVnKSwg
Y2hpbGQzLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIHZhbHVlUmVnLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAg
ICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpJbnQzMikgeworICAgICAg
ICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyh2YWx1ZVJlZyksIGNoaWxkMywgU3BlY0ludDMyLAorICAgICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxv
dywgdmFsdWVSZWcsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5
OjpDb250aWd1b3VzICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CkBAIC0yOTI4
LDEzICsyOTI0LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CiAKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJy
YXk6OkludDMyICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLT5j
aGlsZDIoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMikg
eworICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjSW50MzIsCisgICAgICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgIT0gQXJyYXk6OkludDMyICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgp
KSB7CkBAIC0yOTYyLDEzICsyOTU5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSB2YWx1ZS5m
cHIoKTsKIAotICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRvIGhv
aXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQu
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAg
QmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCB2YWx1
ZUZQUiwgdmFsdWVGUFIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERGR19UWVBFX0NI
RUNLKAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIG5vZGUtPmNoaWxkMigpLCBTcGVj
UmVhbE51bWJlciwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVlRlBSLCB2YWx1ZUZQUikpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3Rv
cmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0
aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwpAQCAtMzE3MSw3ICszMTY0LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBUb1ByaW1pdGl2ZTogewotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICAvLyBJdCdzIHJlYWxs
eSBwcm9maXRhYmxlIHRvIHNwZWN1bGF0ZSBpbnRlZ2VyLCBzaW5jZSBpdCdzIHJlYWxseSBjaGVh
cCwKICAgICAgICAgICAgIC8vIGl0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IHJlYWwg
d29yaywgYW5kIHdlIGVtaXQgYSBsb3QgbGVzcyBjb2RlLgogICAgICAgICAgICAgCkBAIC0zMTg2
LDMwICszMTgwLDM2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhN
RTogQWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgotICAgICAgICAKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIAotICAgICAgICBHUFJS
ZWcgb3AxR1BSID0gb3AxLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBv
cDEudXNlKCk7CisgICAgICAgICAgICBvcDEudXNlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAo
IShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH4oU3BlY051bWJlciB8
IFNwZWNCb29sZWFuKSkpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BS
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJl
YWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgaWYgKCEobV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVj
Qm9vbGVhbikpKQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYWxyZWFk
eVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFH
UFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChub3RQcmltaXRpdmUsIHRoaXMs
IG9wZXJhdGlvblRvUHJpbWl0aXZlLCByZXN1bHRHUFIsIG9wMUdQUikpOwotICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbChub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0aXZlLCBy
ZXN1bHRHUFIsIG9wMUdQUikpOworICAgICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApAQCAtMzI1MSwyNSArMzI1MSwyMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxF
X0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwogICAgICAgICAgICAgICAgICAgICBGUFJSZWcgb3BG
UFIgPSBvcGVyYW5kLmZwcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVhbE51bWJl
clNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgd2F5IG9mIHByb2ZpbGluZyB0aGVzZSwg
YW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBpbnRvCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVl
UmVncygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJs
ZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBS
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwg
dXNlLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aERvdWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlRG91YmxlKG9wRlBSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBzaXplb2YoZG91YmxlKSAqIG9wZXJhbmRJZHgpKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgQUxMX0lO
VDMyX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3Bl
cmFuZCh0aGlzLCB1c2UpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVy
YW5kKHRoaXMsIHVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAg
ICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSAmJiAhaXNJbnQzMlNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2Rl
LT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NI
RUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wR1BSKSwgdXNl
LCBTcGVjSW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywg
b3BHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQob3BHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHgp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMzE5LDI1ICszMzE2LDIyIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgICAgICBGUFJSZWcgb3BGUFIg
PSBvcGVyYW5kLmZwcigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBo
b2lzdCB0aGVtIGludG8KLSAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZC4KLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwogICAg
ICAgICAgICAgICAgIG1faml0LmJveERvdWJsZShvcEZQUiwgc2NyYXRjaEdQUik7CiAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2Ug
QUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3BlcmFuZCh0aGlzLCB1c2UpOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
ZXJhbmQodGhpcywgdXNlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICAgICAg
ICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhh
c0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSAmJiAhaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3Rh
dGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9w
R1BSKSwgdXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
CisgICAgICAgICAgICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewor
ICAgICAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKG9wR1BSKSwgdXNlLCBTcGVjSW50MzIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQ
UiwgYnVmZmVyICsgb3BlcmFuZElkeCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTU5
LDI0ICszNTUzLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgaWYgKGlz
T2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
KSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlz
VmFsdWUpOwotICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWUuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7Ci0gICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzT3RoZXJT
cGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBPdGhlclVz
ZTogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhp
c1ZhbHVlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgIGlm
IChuZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY090aGVyKSkgewogICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRl
ZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOworICAgICAgICAgICAgICAgIHR5cGVDaGVj
aygKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNPdGhlciwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQo
CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0
Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KFZhbHVlTnVsbCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxU
aGlzT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKSwgc2NyYXRjaEdQUik7CkBAIC0zNTg0LDMw
ICszNTc1LDQyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPYmpl
Y3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICBj
YXNlIE9iamVjdFVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1Zh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgdGhpc1ZhbHVlKTsKICAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0
aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwodGhp
c1ZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6
RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwodGhpc1ZhbHVlR1BS
KSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoUHRyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsCisgICAgICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQ
UlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VGhpcywgcmVzdWx0Lmdw
cigpLCB0aGlzVmFsdWVHUFIpOwotICAgICAgICAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewor
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRUaGlzLCByZXN1bHQuZ3ByKCksIHRoaXNWYWx1ZUdQUik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM3
NzYsOCArMzc3OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3Zl
cmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkpKSB7CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgICAgICAKQEAgLTM3OTIsMjAgKzM3OTYs
MjcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIGJhc2UpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYXNl
IFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNl
KTsKICAgICAgICAgCi0gICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIAotICAg
ICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwg
bm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsKTsKKyAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblpl
cm8sIGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQ
UiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwpOwogICAgICAg
ICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtMzgxNCw4ICszODI1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24o
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKworICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogCkBAIC0zODMzLDIxICszODQ1
LDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwogCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CisgICAgICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGJhc2VHUFIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgY2FjaGVkR2V0QnlJZChu
b2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSwgbm90Q2VsbCwgRG9udFNwaWxsKTsKKyAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9k
ZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVy
KCksIG5vdENlbGwsIERvbnRTcGlsbCk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLQorICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0zODcxLDEzICszODkwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgIGNhc2UgRm9y
d2FyZENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yobm9kZS0+c3RydWN0dXJlU2V0KCkpCi0gICAgICAg
ICAgICAmJiBpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBu
b1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAog
ICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBub2RlLT5vcCgpID09IEZv
cndhcmRDaGVja1N0cnVjdHVyZSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3Vs
YXRpb247CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCksIGRpcmVjdGlvbik7CiAgICAgICAgIApAQCAtMzk0Miw2ICszOTU0LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGls
ZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbVB0cihub2RlLT5zdHJ1Y3R1cmUoKSkpOwogICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7
CiAgICAgICAgIGlzT0subGluaygmbV9qaXQpOworI2Vsc2UKKyAgICAgICAgc3BlY3VsYXRlQ2Vs
bChub2RlLT5jaGlsZDEoKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG5v
ZGUpOwpAQCAtMzk0OSw2ICszOTYzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJl
OiB7CisgICAgICAgIEFTU0VSVChpc0tub3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsK
KyAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
LnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpKTsKICAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oCiAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpLApAQCAtNDI3MSw3ICs0
Mjg3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgVHlwZU9mOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsK
ICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwpAQCAtNDI4MCwxOSArNDI5Niwy
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBkb25lSnVtcHM7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKIAogICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblpl
cm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgp
LCBpc05vdENlbGwpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFVu
dHlwZWRVc2UpCisgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNlKHZhbHVl
R1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsLCBpc05vdENlbGwpOwogCi0gICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpIHx8IG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCB0ZW1wR1BSKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IG1f
aml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0
ZW1wR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0
cmluZ1R5cGUpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG5vdFN0cmluZyk7CisgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkKKyAgICAg
ICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7CiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Muc3RyaW5nU3Ry
aW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
U3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0g
U3RyaW5nVXNlKSB7CiAgICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmsoJm1faml0KTsKICAg
ICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVzdWx0R1BSLCB2
YWx1ZUdQUik7CiAgICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwpAQCAtNDMwMiw3ICs0MzIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2Vs
bCgpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSkgewogICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxl
cjo6WmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFs
bFN0cmluZ3MubnVtYmVyU3RyaW5nKCkpLCByZXN1bHRHUFIpOwpAQCAtNDc3MSw2ICs0Nzg5LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIFBoYW50b206CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1faml0Lmdy
YXBoKCksIG5vZGUsIHNwZWN1bGF0ZSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgIC8vIFRo
aXMgaXMgYSBuby1vcC4KICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTQz
NDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOCwxNCArMTA4LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJl
bnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFpbCk7CiAg
ICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVl
U291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9k
ZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKLSAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5F
eGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhp
dCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5v
ZGUoKSwganVtcFRvRmFpbCk7CiB9CiAKQEAgLTEyMyw3ICsxMjMsNyBAQCBPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcigpOwotICAgIEFTU0VSVChtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNp
Z25lZCBpbmRleCA9IG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJPZk9TUkV4aXRzKCk7CiAgICAg
bV9qaXQuYXBwZW5kRXhpdEluZm8oKTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NS
RXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwpA
QCAtMTMyLDcgKzEzMiw3IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6
OnMKIAogT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9k
ZVVzZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJl
bnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7CiAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCkpOwogfQogCkBAIC0xNDAsMTQgKzE0MCwxNCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZv
KGp1bXBzVG9GYWlsKTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JF
eGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
b3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIGp1bXBzVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKQEAg
LTE1NSw3ICsxNTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsK
KyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAg
IG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsK
ICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5jb2RlQmxv
Y2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0Lmdy
YXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJl
YW0tPnNpemUoKSwgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVy
aWVzKCkpKTsKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zlcnkm
IHJlY292ZXJ5KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CiB9CiAKQEAgLTE3
NCwxMSArMTc0LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgK
ICAgICAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBFZGdlIGVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5LCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24pCit7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNl
LCBlZGdlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3ZlcnksIGRpcmVjdGlvbik7Cit9CisKIEp1
bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNo
cG9pbnQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBu
b2RlKQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhp
dCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQp
OwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKEpJVENvbXBpbGVyOjpKdW1wTGlzdCgpKTsKICAg
ICBPU1JFeGl0JiBleGl0ID0gbV9qaXQuY29kZUJsb2NrKCktPm9zckV4aXQoCiAgICAgICAgIG1f
aml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCkBAIC0yODAsMTQgKzI4NSwx
NCBAQCBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJCiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFs
dWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsKLSAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0
KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7
CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9G
YWlsKTsKICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7CiB9
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgY29uc3QgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYg
dmFsdWVSZWNvdmVyeSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8
fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1Zh
bHVlU291cmNlLCBub2RlLCBqdW1wc1RvRmFpbCk7CiAgICAgY29udmVydExhc3RPU1JFeGl0VG9G
b3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQpAQCAtMzAwLDkgKzMwNSwxNCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
a2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBFZGdlIGVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzcGVjdWxhdGlvbkNoZWNr
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsLCBkaXJlY3Rpb24p
OworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSkKIHsK
LSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5j
YW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVj
dWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOwogI2VuZGlmCkBAIC0zMTQsMTMgKzMyNCwx
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBFZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNTRVJUKG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNlLm5v
ZGUoKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2Rl
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NF
UlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1p
bmF0ZWQuXG4iKTsKICNlbmRpZgpAQCAtMzMwLDYgKzM0MCwyNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiAgICAgbV9jb21waWxlT2theSA9IGZhbHNlOwogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjp0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVk
Z2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsKQoreworICAgIEFTU0VSVChuZWVkc1R5cGVDaGVjayhlZGdlLCB0
eXBlc1Bhc3NlZFRocm91Z2gpKTsKKyAgICBtX3N0YXRlLmZvck5vZGUoZWRnZSkuZmlsdGVyKHR5
cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBzb3VyY2Us
IGVkZ2UsIGp1bXBUb0ZhaWwpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkVHlw
ZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5
cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKK3sKKyAgICB0eXBlQ2hlY2soc291cmNlLCBl
ZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpOworICAgIGNvbnZlcnRMYXN0T1NS
RXhpdFRvRm9yd2FyZCh2YWx1ZVJlY292ZXJ5KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
dHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBl
IHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHR5cGVDaGVjayhzb3VyY2UsIGVk
Z2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFpbCk7CisgICAgaWYgKGRpcmVjdGlvbiA9
PSBGb3J3YXJkU3BlY3VsYXRpb24pCisgICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2Fy
ZCgpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjphZGRTbG93UGF0aEdlbmVyYXRvcihQYXNz
T3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aEdlbmVyYXRvcikKIHsKICAgICBtX3Ns
b3dQYXRoR2VuZXJhdG9ycy5hcHBlbmQoc2xvd1BhdGhHZW5lcmF0b3IubGVha1B0cigpKTsKQEAg
LTg3Miw5ICs5MDIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlKiBub2Rl
CiAgICAgYXJyYXlpZnkobm9kZSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCkpOwogfQogCi1H
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGUqIG5vZGUpCitHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKEVkZ2UgZWRnZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAg
IEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJd
OwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CkBAIC04ODgsNyAr
OTE4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlKgogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBNdXN0IGJlIGEgY2VsbDsgZmlsbCBpdCBhcyBhIGNl
bGwgYW5kIHRoZW4gcmV0dXJuIHRoZSBwb2ludGVyLgotICAgICAgICByZXR1cm4gZmlsbFNwZWN1
bGF0ZUNlbGwobm9kZSwgQmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAgICAgIHJldHVybiBmaWxs
U3BlY3VsYXRlQ2VsbChlZGdlLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6IHsKQEAgLTg5OCw3ICs5MjgsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGUqCiAgICAgfQogICAgICAgICAKICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwobm9kZSwgQmFja3dh
cmRTcGVjdWxhdGlvbik7CisgICAgICAgIHJldHVybiBmaWxsU3BlY3VsYXRlQ2VsbChlZGdlLCBC
YWNrd2FyZFNwZWN1bGF0aW9uKTsKICAgICB9CiB9CiAKQEAgLTE1MDksMjAgKzE1MzksMjAgQEAg
Ym9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbgogICAgICAgICAvLyBzbyBj
YW4gYmUgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyByZWZlcmVuY2UgdGhlIGNvbXBhcmUu
IAogICAgICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogCi0gICAg
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNl
S2luZChJbnQzMlVzZSkpCiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNo
KG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpCisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJV
c2UpKQogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKG5vZGUsIGJyYW5j
aE5vZGUsIGRvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0g
Q29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpIHx8IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkg
eworICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7CiAg
ICAgICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hO
b2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3Qo
KSkKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkKICAg
ICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hO
b2RlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhl
cigpKQorICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9i
amVjdFVzZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkK
ICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVh
bGl0eShub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIGJyYW5jaE5vZGUpOwotICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpCisgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVz
ZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKQogICAgICAgICAgICAg
ICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNo
aWxkMigpLCBub2RlLT5jaGlsZDEoKSwgYnJhbmNoTm9kZSk7CiAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5j
aE5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKQEAgLTE2NDUsNiArMTY3NSwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAKICAgICBmb3IgKG1faW5kZXhJ
bkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsrbV9pbmRleEluQmxv
Y2spIHsKICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrW21faW5kZXhJbkJsb2NrXTsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIG1fY2FuRXhpdCA9IG1fY3VycmVudE5vZGUtPmNh
bkV4aXQoKTsKKyNlbmRpZgorICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9z
dGF0ZS5zdGFydEV4ZWN1dGluZyhtX2N1cnJlbnROb2RlKTsKICAgICAgICAgbV9qaXQuc2V0Rm9y
Tm9kZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gbV9jdXJy
ZW50Tm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKSB7CkBAIC0xNzExLDkgKzE3NDUsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7
CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoCisgICAgICAgICAgICAgICAgICAgICJTcGVjdWxh
dGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4IiwK
KyAgICAgICAgICAgICAgICAgICAgKGludCltX2N1cnJlbnROb2RlLT5pbmRleCgpLAorICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1f
aml0LmRlYnVnT2Zmc2V0KCkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIChiYyMl
dSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2N1cnJlbnROb2RlLT5pbmRleCgpLCBt
X2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICIpOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJcbiIpOwogI2VuZGlmCisgICAgICAgICAgICB9CiAjaWYgREZHX0VOQUJM
RShKSVRfQlJFQUtfT05fRVZFUllfTk9ERSkKICAgICAgICAgICAgIG1faml0LmJyZWFrcG9pbnQo
KTsKICNlbmRpZgpAQCAtMTc1OSw3ICsxODAxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShCYXNpY0Jsb2NrJgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgYWJzdHJhY3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5v
ZGUuCi0gICAgICAgIG1fc3RhdGUuZXhlY3V0ZShtX2luZGV4SW5CbG9jayk7CisgICAgICAgIGlm
IChzaG91bGRFeGVjdXRlRWZmZWN0cykKKyAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVmZmVj
dHMobV9pbmRleEluQmxvY2spOwogICAgICAgICAKICAgICAgICAgaWYgKG1fY3VycmVudE5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC0x
OTA2LDEzICsxOTQ5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRC
eVYKIAogICAgIEZQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmZwcigpOwogICAgIAotICAgIGlmICgh
aXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMykubV90eXBlKSkg
ewotICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFu
ZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcsIHZhbHVlUmVnKSk7
Ci0gICAgfQorICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVlUmVncygpLCBjaGls
ZDMsIFNwZWNSZWFsTnVtYmVyLAorICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcs
IHZhbHVlUmVnKSk7CiAgICAgCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1
cm47CkBAIC0yMTA0LDcgKzIxNDQsOCBAQCBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBTcGVjdWxhdGl2
ZUpJVDo6Y2hlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIoTm9k
ZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2Fz
ZSBJbnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMjExMiw1
OCArMjE1Myw1MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3Vs
dC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmFuZDMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNo
IChjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsK
LSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJl
c3VsdC5ncHIoKSk7Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBv
cDEuZm9ybWF0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgR2VuZXJhdGVk
T3BlcmFuZERvdWJsZTogewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBFZGdlKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgRG91YmxlVXNlKSk7IC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgd2lsbCBhc3Nl
cnQgdGhhdCB0aGlzIGlzIGEgZG91YmxlIHVzZS4gV2UgZm9yY2UgaXQgdG8gdGhpbmsgdGhhdCBp
dCB3YXMgYSBkb3VibGUgdXNlLCBzaW5jZSB3ZSBhcmUgaW5mZXJyaW5nIHRoYXQgd2Ugb3VnaHQg
dG8gZW1pdCBhIGRvdWJsZSB1c2UgcXVpdGUgbGF0ZS4KLSAgICAgICAgRlBSUmVnIGZwciA9IG9w
MS5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90VHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNh
dGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZh
aWxlZCk7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgY2FzZSBOb3RDZWxsVXNlOiB7CisgICAg
ICAgIHN3aXRjaCAoY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKSB7CisgICAgICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEludGVnZXI6IHsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwg
QmFja3dhcmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUsIG9wMS5mb3JtYXQoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kRG91YmxlOiB7CisgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIEJhY2t3YXJkU3BlY3VsYXRpb24s
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBGUFJSZWcgZnByID0gb3Ax
LmZwcigpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5j
aFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1
bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwg
ZnByKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90
VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOwogCi0gICAgICAg
IGludGVnZXJSZXN1bHQoZ3ByLCBub2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
YXNlIEdlbmVyYXRlZE9wZXJhbmRKU1ZhbHVlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbm9kZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSlNW
YWx1ZTogeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogCi0gICAgICAgIEdQUlJlZyBncHIgPSBvcDEu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZw
ci5mcHIoKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBncHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBjb252ZXJ0
ZWQ7Ci0KLSAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdQUlJlZyBncHIg
PSBvcDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0Lmdwcigp
OworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXBGcHIodGhpcyk7CisgICAgICAgICAgICBG
UFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKKworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IGNvbnZlcnRlZDsKKworICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBOdW1iZXJVc2UpIHsKKyAgICAgICAgICAgICAgICBERkdfVFlQ
RV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hp
bGQxKCksIFNwZWNOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2
NCgKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKQotICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUt
PmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIGdwciwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGdwciksIG5vZGUtPmNoaWxkMSgpLCB+
U3BlY0NlbGwsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEl0J3Mg
bm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8g
MC4KICAgICAgICAgICAgICAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBn
cHIsIFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHcHIpOwpAQCAtMjE3MSw1MiArMjIw
Nyw1NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyCiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaXNOdW1iZXIubGluaygmbV9qaXQpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdl
IGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICAgICAgbV9qaXQubW92ZShn
cHIsIHJlc3VsdEdwcik7Ci0gICAgICAgIHVuYm94RG91YmxlKHJlc3VsdEdwciwgZnByKTsKKyAg
ICAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29k
ZWQgYXMgYSBKU1ZhbHVlCisgICAgICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsK
KyAgICAgICAgICAgIHVuYm94RG91YmxlKHJlc3VsdEdwciwgZnByKTsKIAotICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKHRv
SW50MzIsIHJlc3VsdEdwciwgZnByKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHcHIpOworICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3By
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOwor
ICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwogCi0gICAgICAg
IGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIGNvbnZlcnRlZC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwot
ICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHIsIHJlc3VsdEdwcik7CisgICAgICAg
ICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQuemVyb0V4dGVu
ZDMyVG9QdHIoZ3ByLCByZXN1bHRHcHIpOwogCi0gICAgICAgIGNvbnZlcnRlZC5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwogI2Vsc2UKLSAgICAgICAg
Tm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gY2hpbGROb2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsK
LSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CisgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gY2hp
bGROb2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCi0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CiAKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOwotICAg
ICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdwciA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBjb252ZXJ0ZWQ7Ci0KLSAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0SlNJbnRlZ2VyKQotICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCBy
ZXN1bHRHcHIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEdQUlJlZyB0YWdHUFIgPSBv
cDEudGFnR1BSKCk7Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKLSAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOwotICAgICAgICAgICAgRlBSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBjb252ZXJ0ZWQ7CiAKLSAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRh
Z0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoaW5mby5y
ZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIpCisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcg
ZnByID0gdGVtcEZwci5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gTnVtYmVyVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnR1BSLCBw
YXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJl
ciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUg
JiBTcGVjQ2VsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1f
aml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgflNwZWNDZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFs
LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBjZWxsOiBzbyB0cnVl
IHR1cm5zIGludG8gMSBhbmQgYWxsIGVsc2UgdHVybnMgaW50byAwLgogICAgICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Jvb2xlYW4gPSBtX2ppdC5icmFuY2gzMihKSVRDb21w
aWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsK
QEAgLTIyMjksMjggKzIyNjksNDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVl
VG9JbnQzMgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaXNOdW1i
ZXIubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BSLCBmcHIsIHNjcmF0Y2guZnBy
KCkpOworICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgZnBy
LCBzY3JhdGNoLmZwcigpKTsKIAotICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0R3ByKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3By
LCBmcHIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwor
ICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7CisgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCByZXN1bHRHcHIsIGZwcik7CisgICAg
ICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwogCi0gICAgICAg
ICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgY29u
dmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBpc0ludGVnZXIubGlu
aygmbV9qaXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIp
OworICAgICAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOwogCi0gICAgICAgICAgICBjb252
ZXJ0ZWQubGluaygmbV9qaXQpOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udmVydGVk
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdEdwciwgbm9kZSk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdw
ciwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBH
ZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
Y2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246CisgICAgCisgICAgY2FzZSBCb29sZWFu
VXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAg
ICAgCisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICBtX2ppdC5hbmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKCFt
X2NvbXBpbGVPa2F5KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9CiB9
CiAKQEAgLTIzMjYsMTQgKzIzODQsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlu
dDMyVG9Eb3VibAogI2VuZGlmCiAgICAgCiAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBCYWNrd2FyZFNwZWN1
bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3By
KCksIHJlc3VsdC5mcHIoKSk7CiAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5v
ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEZQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTIzNDYsMTUgKzI0
MDQsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludDMyVG9Eb3VibAogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KAogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CiAgICAgCi0gICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgeworICAgIGlmIChuZWVkc1R5cGVDaGVjayhu
b2RlLT5jaGlsZDEoKSwgU3BlY051bWJlcikpIHsKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
Rm9yd2FyZEludDMyVG9Eb3VibGUpIHsKLSAgICAgICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNo
ZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwKKyAgICAgICAgICAgIGZvcndhcmRUeXBlQ2hlY2soCisgICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIs
CiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksCiAgICAgICAgICAgICAg
ICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIob3AxR1BSLCBEYXRhRm9ybWF0SlMpKTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
QmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCisgICAgICAgICAg
ICB0eXBlQ2hlY2soCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNOdW1iZXIsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjM3NywxNSArMjQzNSwxNSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICAKLSAg
ICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3R5cGUpKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVj
TnVtYmVyKSkgewogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBGb3J3YXJkSW50MzJUb0RvdWJs
ZSkgewotICAgICAgICAgICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAg
ICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+
Y2hpbGQxKCkubm9kZSgpLAorICAgICAgICAgICAgZm9yd2FyZFR5cGVDaGVjaygKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY051bWJlciwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSwKICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblBhaXIob3AxVGFn
R1BSLCBvcDFQYXlsb2FkR1BSKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMVRh
Z0dQUiwgb3AxUGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLAorICAgICAgICAgICAgdHlwZUNo
ZWNrKAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQ
UiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjTnVtYmVyLAogICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1MzgsNDkg
KzI1OTYsNjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAg
ICAgICBtX2ppdC5tb3ZlKEltbTMyKHRvSW50MzIoZCkpLCBzY3JhdGNoUmVnKTsKICAgICAgICAg
dmFsdWUuYWRvcHQoc2NyYXRjaCk7CiAgICAgICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsKLSAg
ICB9IGVsc2UgaWYgKHZhbHVlVXNlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJl
ZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2Ny
YXRjaFJlZyk7Ci0gICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgICAgICBjb21waWxlQ2xh
bXBJbnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsKLSAgICAgICAgfQotICAgICAgICB2
YWx1ZS5hZG9wdChzY3JhdGNoKTsKLSAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOwotICAg
IH0gZWxzZSBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICBBU1NFUlQo
ZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVP
cCh0aGlzLCB2YWx1ZVVzZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7Ci0gICAgICAgIEZQUlJlZyBm
cHIgPSB2YWx1ZU9wLmZwcigpOwotICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwot
ICAgICAgICBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUobV9qaXQsIGdwciwgZnByLCBmbG9hdFNj
cmF0Y2guZnByKCkpOwotICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwotICAgICAgICB2YWx1
ZUdQUiA9IGdwcjsKICAgICB9IGVsc2UgewotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKLSAgICAgICAgR1BSUmVn
IGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFO
ID0gbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgZnByLCBm
cHIpOwotICAgICAgICBtX2ppdC54b3JQdHIoZ3ByLCBncHIpOwotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmaXhlZCA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgbm90TmFOLmxpbmsoJm1f
aml0KTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAgIGlm
IChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCi0gICAgICAgICAgICBmYWlsZWQgPSBt
X2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVy
OjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFp
bGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9B
c3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwotICAgICAgICAKLSAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGZhaWxlZCwgdGhpcywgdG9JbnQzMiwgZ3By
LCBmcHIpKTsKLQotICAgICAgICBmaXhlZC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIHZhbHVlLmFk
b3B0KHJlc3VsdCk7Ci0gICAgICAgIHZhbHVlR1BSID0gZ3ByOworICAgICAgICBzd2l0Y2ggKHZh
bHVlVXNlLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9w
LmdwcigpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJv
dW5kaW5nKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAg
ICAgICAgICAgICAgIGNvbXBpbGVDbGFtcEludGVnZXJUb0J5dGUobV9qaXQsIHNjcmF0Y2hSZWcp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7CisgICAg
ICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAg
ICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgeworICAgICAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IGZsb2F0U2NyYXRj
aCh0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgICAg
IGNvbXBpbGVDbGFtcERvdWJsZVRvQnl0ZShtX2ppdCwgZ3ByLCBmcHIsIGZsb2F0U2NyYXRjaC5m
cHIoKSk7CisgICAgICAgICAgICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICB2YWx1ZUdQUiA9IGdwcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKKyAgICAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TmFO
ID0gbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCwgZnByLCBm
cHIpOworICAgICAgICAgICAgICAgIG1faml0LnhvclB0cihncHIsIGdwcik7CisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZml4ZWQgPSBtX2ppdC5qdW1wKCk7CisgICAgICAg
ICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7CisgICAgICAgICAgICAgICAgaWYg
KHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgICAgICAgICAgZmFp
bGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fz
c2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRv
VWludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKGZhaWxlZCwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBmaXhlZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICAgICAgdmFsdWUuYWRvcHQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUdQUiA9IGdw
cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KKyAgICAKICAg
ICBBU1NFUlRfVU5VU0VEKHZhbHVlR1BSLCB2YWx1ZUdQUiAhPSBwcm9wZXJ0eSk7CiAgICAgQVNT
RVJUKHZhbHVlR1BSICE9IGJhc2UpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVn
KTsKQEAgLTI3MjIsOCArMjc5NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0
YW5jZU9mRm8KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YoTm9kZSog
bm9kZSkKIHsKLSAgICBpZiAoKCEhKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiB+U3Bl
Y0NlbGwpICYmICEhKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgflNw
ZWNDZWxsKSkKLSAgICAgICAgfHwgbm9kZS0+Y2hpbGQxKCktPmFkanVzdGVkUmVmQ291bnQoKSA9
PSAxKSB7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7
CiAgICAgICAgIC8vIEl0IG1pZ2h0IG5vdCBiZSBhIGNlbGwuIFNwZWN1bGF0ZSBsZXNzIGFnZ3Jl
c3NpdmVseS4KICAgICAgICAgLy8gT3I6IGl0IG1pZ2h0IG9ubHkgYmUgdXNlZCBvbmNlIChpLmUu
IGJ5IHVzKSwgc28gd2UgZ2V0IHplcm8gYmVuZWZpdAogICAgICAgICAvLyBmcm9tIHNwZWN1bGF0
aW5nIGFueSBtb3JlIGFnZ3Jlc3NpdmVseSB0aGFuIHdlIGFic29sdXRlbHkgbmVlZCB0by4KQEAg
LTI5NjEsOSArMzAzMywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVs
byhOCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm9kZSkKIHsKLSAg
ICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Cisg
ICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7
CiAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsK
LSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApAQCAtMjk3OSw3ICszMDUyLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICAgICAgICAgIAog
ICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJ
bnQzMihub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0yID0g
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewpA
QCAtMzAyMSw4ICszMDk0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2Rl
KiBubwogICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbm9kZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgICAgIAotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1i
ZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkgeworICAgIAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBGUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKQEAgLTMwMzQsMjIgKzMxMDcsMjYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICBkb3VibGVS
ZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAg
IGlmIChub2RlLT5vcCgpID09IFZhbHVlQWRkKSB7CisgICAgICAgIAorICAgIGNhc2UgVW50eXBl
ZFVzZTogeworICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsK
ICAgICAgICAgY29tcGlsZVZhbHVlQWRkKG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIAotICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0aGlzIHlldC4gOi0oCi0gICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOworICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcml0aFN1YihOb2RlKiBub2RlKQogewotICAgIGlmIChtX2ppdC5ncmFwaCgpLmFkZFNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtp
bmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGludDMyX3Qg
aW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQyKCkubm9kZSgp
KTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUt
PmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5v
ZGVGbGFncygpKSkgewpAQCAtMzA2OSw3ICszMTQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgaWYg
KGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICAgICAg
aW50MzJfdCBpbW0xID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIApAQCAtMzA5NywyMCArMzE3NCwyOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7Ci0gICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAg
IGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSk7CiAKLSAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgcmVnMiA9
IG9wMi5mcHIoKTsKLSAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJlZyByZWcy
ID0gb3AyLmZwcigpOworICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0
LmZwcigpKTsKIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoTmVnYXRlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG1faml0LmdyYXBo
KCkubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgIHN3aXRjaCAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCkBAIC0zMTI4LDE3ICszMjE0LDI2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSgKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBtX2pp
dC5uZWdhdGVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotCi0gICAgZG91YmxlUmVz
dWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubmVn
YXRlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgCisgICAgICAgIGRv
dWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJpdGhNdWwoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobV9qaXQuZ3JhcGgoKS5tdWxT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlV
c2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CkBAIC0zMTY5LDE3ICszMjY0LDI1IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSwgb3AyKTsKLQotICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwotICAg
IEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwogICAgICAgICAKLSAgICBtX2ppdC5tdWxEb3VibGUo
cmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CisgICAgICAgIAorICAg
ICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKKyAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIu
ZnByKCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVz
dWx0LmZwcigpKTsKICAgICAgICAgCi0gICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9k
ZSk7CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogfQogCiAjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkKQEAgLTMyODksMjUgKzMzOTIsMzMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUludGVnZXJBcml0aAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhNb2QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpCi0gICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
IHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewog
ICAgICAgICBjb21waWxlU29mdE1vZHVsbyhub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAgICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgCi0gICAgRlBSUmVnIG9w
MUZQUiA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOworICAgICAg
ICBGUFJSZWcgb3AxRlBSID0gb3AxLmZwcigpOworICAgICAgICBGUFJSZWcgb3AyRlBSID0gb3Ay
LmZwcigpOwogICAgICAgICAKLSAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOwogICAgICAgICAKLSAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotCi0gICAg
Y2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBv
cDJGUFIpOworICAgICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgb3AxRlBS
LCBvcDJGUFIpOworICAgICAgICAKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwg
bm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAotICAgIGRvdWJsZVJlc3Vs
dChyZXN1bHQuZnByKCksIG5vZGUpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2gu
CkBAIC0zMzE2LDMzICszNDI3LDMzIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9k
ZSogbm9kZSwKICAgICBpZiAoY29tcGlsZVBlZXBIb2xlQnJhbmNoKG5vZGUsIGNvbmRpdGlvbiwg
ZG91YmxlQ29uZGl0aW9uLCBvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQo
SW50MzJVc2UpKSB7CiAgICAgICAgIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShub2RlLCBjb25kaXRp
b24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpKSB7CisKKyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkp
IHsKICAgICAgICAgY29tcGlsZURvdWJsZUNvbXBhcmUobm9kZSwgZG91YmxlQ29uZGl0aW9uKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBpZiAobm9kZS0+b3AoKSA9
PSBDb21wYXJlRXEpIHsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVTdHJpbmcoKSB8fCBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsK
KyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7CiAgICAgICAg
ICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9w
ZXJhdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLQotICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNo
aWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAKKyAgICAgICAgaWYg
KG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKSB7CiAgICAgICAgICAgICBjb21waWxl
T2JqZWN0RXF1YWxpdHkobm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIo
KSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdFVzZSAm
JiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkgewogICAgICAg
ICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMSgp
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkg
eworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJV
c2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewogICAgICAgICAg
ICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNoaWxkMigpLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAg
LTM0MzAsNyArMzU0MSw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZv
ckMKIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZGUqIG5vZGUpCiB7
Ci0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlV
c2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIHVuc2lnbmVkIGJyYW5j
aEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAgIGlmIChicmFu
Y2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5v
ZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxv
Y2spOwpAQCAtMzQ0NCw4ICszNTU2LDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0
cmljdEVxKE5vZAogICAgICAgICBjb21waWxlSW50ZWdlckNvbXBhcmUobm9kZSwgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAKKyAgICBjYXNlIE51bWJlclVzZTogewog
ICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5j
aCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7CiAgICAg
ICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2Nr
XS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKQEAgLTM0NTksMTAgKzM1NzEsMTIgQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21waWxlRG91Ymxl
Q29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
KQorICAgICAgICAKKyAgICBjYXNlIFN0cmluZ1VzZTogewogICAgICAgICByZXR1cm4gbm9uU3Bl
Y3VsYXRpdmVTdHJpY3RFcShub2RlKTsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3Qo
KSkgeworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPYmplY3RVc2U6IHsKICAgICAgICAgdW5z
aWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICAg
ICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewogICAgICAgICAgICAgTm9k
ZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5j
aEluZGV4SW5CbG9jayk7CkBAIC0zNDc2LDggKzM1OTAsMTUgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9k
ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5vblNw
ZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7CisgICAgICAgIAorICAgIGNhc2UgVW50eXBlZFVzZTog
eworICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCkBAIC0zODE1
LDYgKzM5MzYsMjQxIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXIK
ICAgICByZXR1cm4gdGVtcG9yYXJ5LmdwcigpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGVJbnQzMihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdl
LCBTcGVjSW50MzIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgKFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlTnVtYmVyKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVk
Z2UsIFNwZWNOdW1iZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9wZXJh
bmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJh
bmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3BlcmFuZC5ncHIoKSwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpTVmFs
dWVSZWdzKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCBTcGVjTnVtYmVyLAorICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wZXJhbmQuZ3ByKCksIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Cisj
ZWxzZQorICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBlZGdlKTsKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IG9wZXJhbmQudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAg
IHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC50YWdHUFIoKSwgb3AxLnBh
eWxvYWRHUFIoKSksIGVkZ2UsIFNwZWNOdW1iZXIsCisgICAgICAgIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wZXJhbmQudGFnR1BSKCksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyNl
bmRpZgorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2Ug
ZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNSZWFsTnVtYmVyKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFu
ZCh0aGlzLCBlZGdlKTsKKyAgICBGUFJSZWcgZnByID0gb3BlcmFuZC5mcHIoKTsKKyAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY1JlYWxOdW1iZXIs
CisgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmcHIsIGZwcikpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNCb29sZWFuKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IChTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCh0aGlzLCBlZGdlKSkuZ3ByKCk7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUNlbGwoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
KFNwZWN1bGF0ZUNlbGxPcGVyYW5kKHRoaXMsIGVkZ2UpKS5ncHIoKTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBERkdfVFlQRV9D
SEVDSygKKyAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3BlcmFuZC5ncHIoKSks
IGVkZ2UsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcGVy
YW5kLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0
T3JPdGhlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVj
T2JqZWN0IHwgU3BlY090aGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVP
cGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3By
KCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBHUFJSZWcgZ3ByID0gb3BlcmFuZC5ncHIoKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpOworICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5k
LmdwcigpKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoZ3ByLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOworICAgIG5vdENlbGwubGluaygmbV9qaXQpOworICAgIGlmIChuZWVk
c1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKKyAgICAgICAgbV9qaXQu
bW92ZShncHIsIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCB0ZW1wR1BSKTsKKyAgICAgICAgCisgICAg
ICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIFNwZWND
ZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOworICAgIH0KKyAgICBk
b25lLmxpbmsoJm1faml0KTsKKyNlbHNlCisgICAgR1BSUmVnIHRhZ0dQUiA9IG9wZXJhbmQudGFn
R1BSKCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcGVyYW5kLnBheWxvYWRHUFIoKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0KKyAgICAgICAgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0dQ
UiwgcGF5bG9hZEdQUiksIGVkZ2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJh
bmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7
CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewor
ICAgICAgICBtX2ppdC5tb3ZlKHRhZ0dQUiwgdGVtcEdQUik7CisgICAgICAgIG1faml0Lm9yMzIo
VHJ1c3RlZEltbTMyKDEpLCB0ZW1wR1BSKTsKKyAgICAgICAgCisgICAgICAgIHR5cGVDaGVjaygK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIGVkZ2UsIFNwZWND
ZWxsIHwgU3BlY090aGVyLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyAgICB9
CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisjZW5kaWYKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlU3RyaW5nKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNr
KGVkZ2UsIFNwZWNTdHJpbmcpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBERkdfVFlQRV9DSEVDSygKKyAg
ICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3BlcmFuZC5ncHIoKSksIGVkZ2UsIFNw
ZWNTdHJpbmcsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcGVyYW5kLmdw
cigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90Q2VsbChFZGdl
IGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCB+U3BlY0NlbGwpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdl
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgdHlw
ZUNoZWNrKAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgflNwZWND
ZWxsLAorICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCisgICAgICAgICAgICBKSVRDb21waWxl
cjo6WmVybywgb3BlcmFuZC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisjZWxz
ZQorICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC50YWdHUFIoKSwg
b3BlcmFuZC5wYXlsb2FkR1BSKCkpLCBlZGdlLCB+U3BlY0NlbGwsCisgICAgICAgIG1faml0LmJy
YW5jaDMyKAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCBvcGVyYW5kLnRhZ0dQUigp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyNlbmRpZgorfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPdGhlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVk
c1R5cGVDaGVjayhlZGdlLCBTcGVjT3RoZXIpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
SlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG1faml0Lm1vdmUob3BlcmFuZC5n
cHIoKSwgdGVtcEdQUik7CisgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7CisgICAgdHlwZUNoZWNrKAorICAgICAg
ICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgU3BlY090aGVyLAorICAgICAgICBt
X2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVt
cEdQUiwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxs
KSkpOworI2Vsc2UKKyAgICBtX2ppdC5tb3ZlKG9wZXJhbmQudGFnR1BSKCksIHRlbXBHUFIpOwor
ICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wR1BSKTsKKyAgICB0eXBlQ2hlY2so
CisgICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wZXJhbmQucGF5bG9hZEdQ
UigpKSwgZWRnZSwgU3BlY090aGVyLAorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkp
OworI2VuZGlmICAgIAorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSos
IEVkZ2UgZWRnZSkKK3sKKyAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgY2FzZSBV
bnR5cGVkVXNlOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAg
ICAgIEFTU0VSVCghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0ludDMyKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIEFTU0VSVCghbmVlZHNUeXBl
Q2hlY2soZWRnZSwgU3BlY051bWJlcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3du
Q2VsbFVzZToKKyAgICAgICAgQVNTRVJUKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBzcGVjdWxhdGVJ
bnQzMihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAg
ICAgICBzcGVjdWxhdGVSZWFsTnVtYmVyKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE51bWJlclVzZToKKyAgICAgICAgc3BlY3VsYXRlTnVtYmVyKGVkZ2UpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oZWRnZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgc3BlY3VsYXRlQ2Vs
bChlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPYmplY3RPck90
aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVPYmplY3RPck90aGVyKGVkZ2UpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFN0cmluZ1VzZToKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGVkZ2Up
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vdENlbGxVc2U6CisgICAgICAgIHNwZWN1bGF0
ZU5vdENlbGwoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3RoZXJVc2U6CisgICAg
ICAgIHNwZWN1bGF0ZU90aGVyKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAx
NDM0MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMyArMTIxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZSosIERhdGFGb3JtYXQmIHJl
dHVybkZvcm1hdCk7CisgICAgR1BSUmVnIGZpbGxJbnRlZ2VyKEVkZ2UsIERhdGFGb3JtYXQmIHJl
dHVybkZvcm1hdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBHUFJSZWcgZmlsbEpTVmFsdWUo
Tm9kZSopOworICAgIEdQUlJlZyBmaWxsSlNWYWx1ZShFZGdlKTsKICNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgYm9vbCBmaWxsSlNWYWx1ZShOb2RlKiwgR1BSUmVnJiwgR1BSUmVnJiwgRlBS
UmVnJik7CisgICAgYm9vbCBmaWxsSlNWYWx1ZShFZGdlLCBHUFJSZWcmLCBHUFJSZWcmLCBGUFJS
ZWcmKTsKICNlbmRpZgotICAgIEdQUlJlZyBmaWxsU3RvcmFnZShOb2RlKik7CisgICAgR1BSUmVn
IGZpbGxTdG9yYWdlKEVkZ2UpOwogCiAgICAgLy8gbG9jayBhbmQgdW5sb2NrIEdQUiAmIEZQUiBy
ZWdpc3RlcnMuCiAgICAgdm9pZCBsb2NrKEdQUlJlZyByZWcpCkBAIC0yOTUsMTEgKzI5NSwxMSBA
QCBwdWJsaWM6CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIHNwZWN1bGF0aXZlIG9wZXJhbmQgdHlw
ZXMsIGJlbG93LCB0byBmaWxsIG9wZXJhbmQgdG8KICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywg
aW1wbGljaXRseSBnZW5lcmF0aW5nIHNwZWN1bGF0aW9uIGNoZWNrcyBhcyBuZWVkZWQuCi0gICAg
R1BSUmVnIGZpbGxTcGVjdWxhdGVJbnQoTm9kZSosIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwg
U3BlY3VsYXRpb25EaXJlY3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50U3RyaWN0
KE5vZGUqKTsKLSAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShOb2RlKiwgU3BlY3VsYXRp
b25EaXJlY3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQ2VsbChOb2RlKiwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24pOwotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQm9vbGVhbihOb2RlKiwg
U3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KEVkZ2Us
IERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEdQ
UlJlZyBmaWxsU3BlY3VsYXRlSW50U3RyaWN0KEVkZ2UpOworICAgIEZQUlJlZyBmaWxsU3BlY3Vs
YXRlRG91YmxlKEVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNw
ZWN1bGF0ZUNlbGwoRWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEdQUlJlZyBmaWxs
U3BlY3VsYXRlQm9vbGVhbihFZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgR2VuZXJh
dGVkT3BlcmFuZFR5cGUgY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2RlKik7CiAKICAg
ICB2b2lkIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+
KTsKQEAgLTU0MCwxMiArNTQwLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0
YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNGdW5jdGlvbkNvbnN0YW50
KG5vZGUpOyB9CiAgICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2RlKSB7
IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpOyB9CiAgICAg
ZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5n
cmFwaCgpLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsgfQotICAgIGludDMyX3QgdmFsdWVP
Zk51bWJlckNvbnN0YW50QXNJbnQzMihOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMih2YWx1ZU9mTnVtYmVyQ29u
c3RhbnQobm9kZSkpOwotICAgIH0KICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHZvaWQqIGFk
ZHJlc3NPZkRvdWJsZUNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmFkZHJlc3NP
ZkRvdWJsZUNvbnN0YW50KG5vZGUpOyB9CiAjZW5kaWYKQEAgLTIwMjMsOSArMjAxNyw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2Ug
cmlnaHRDaGlsZCk7CiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoTm9kZSopOwotICAgIHZvaWQg
Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KEVkZ2UgdmFsdWUsIGJvb2wgbmVlZFNwZWN1
bGF0aW9uQ2hlY2spOworICAgIHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KEVk
Z2UgdmFsdWUpOwogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSopOwotICAgIHZvaWQg
ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxv
Y2tJbmRleCBub3RUYWtlbiwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjayk7CisgICAgdm9pZCBl
bWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdlIHZhbHVlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9j
a0luZGV4IG5vdFRha2VuKTsKICAgICB2b2lkIGVtaXRCcmFuY2goTm9kZSopOwogICAgIAogICAg
IHZvaWQgY29tcGlsZUludGVnZXJDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbik7CkBAIC0yMTc4LDcgKzIxNzIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
b3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFs
dWVSZWNvdmVyeSgpKTsKICAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
LCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBq
dW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgPSBWYWx1ZVJlY292ZXJ5KCkpOwogICAg
IHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAg
ICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAg
ICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5
JiwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0
S2luZCwgSlNWYWx1ZVNvdXJjZSwgRWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAg
ICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRp
b24gd2lsbCBmYWlsLgogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhp
dEtpbmQsIEpTVmFsdWVSZWdzLCBOb2RlKik7CiAgICAgdm9pZCB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihFeGl0S2luZCwgSlNWYWx1ZVJlZ3MsIEVkZ2UpOwpAQCAtMjE4OCw2ICsyMTg0
LDI0IEBAIHB1YmxpYzoKICAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBmb3J3YXJkU3Bl
Y3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kID0gVW5jb3VudGFibGVXYXRjaHBvaW50KTsKICAg
ICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBzcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtp
bmQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAKKyAgICAvLyBIZWxwZXJzIGZvciBwZXJm
b3JtaW5nIHR5cGUgY2hlY2tzIG9uIGFuIGVkZ2Ugc3RvcmVkIGluIHRoZSBnaXZlbiByZWdpc3Rl
cnMuCisgICAgYm9vbCBuZWVkc1R5cGVDaGVjayhFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5
cGVzUGFzc2VkVGhyb3VnaCkgeyByZXR1cm4gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAm
IH50eXBlc1Bhc3NlZFRocm91Z2g7IH0KKyAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVlU291cmNl
IHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOworICAgIHZvaWQgZm9yd2FyZFR5cGVDaGVj
ayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bh
c3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmKTsKKyAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVlU291cmNlIHNvdXJjZSwgRWRn
ZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKworICAgIHZvaWQgc3Bl
Y3VsYXRlSW50MzIoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoRWRnZSk7CisgICAg
dm9pZCBzcGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVh
bihFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxh
dGVPYmplY3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UpOwor
ICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTm90Q2Vs
bChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOworICAgIHZvaWQgc3BlY3Vs
YXRlKE5vZGUqLCBFZGdlKTsKKyAgICAKICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciog
dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6
SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5n
VHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUsIGJvb2wgaW52ZXJ0KTsKQEAgLTIxOTcs
NyArMjIxMSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFycmF5aWZ5KE5vZGUqKTsKICAgICAKICAg
ICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVy
bmFsKE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
KTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKEVkZ2UsIERhdGFGb3JtYXQm
IHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwogICAgIAogICAgIC8vIEl0IGlz
IHBvc3NpYmxlLCBkdXJpbmcgc3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8gcmVhY2ggYSBzaXR1
YXRpb24gaW4gd2hpY2ggd2UKICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUgYSBzcGVj
dWxhdGlvbiB3aWxsIGZhaWwgKGZvciBleGFtcGxlLCB3aGVuIHR3byBub2RlcwpAQCAtMjI0Nyw2
ICsyMjYxLDkgQEAgcHVibGljOgogICAgIC8vIFRoZSBjdXJyZW50IG5vZGUgYmVpbmcgZ2VuZXJh
dGVkLgogICAgIEJsb2NrSW5kZXggbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIG1fY2FuRXhpdDsKKyNlbmRpZgogICAgIHVu
c2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5kIHBoeXNpY2FsIHJlZ2lz
dGVyIG1hcHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9nZW5lcmF0aW9uSW5m
bzsKQEAgLTIzMDUsMTcgKzIzMjIsMTcgQEAgcHVibGljOgogCiBjbGFzcyBJbnRlZ2VyT3BlcmFu
ZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSW50ZWdlck9wZXJhbmQoU3BlY3VsYXRpdmVKSVQq
IGppdCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQgSW50ZWdlck9wZXJhbmQoU3BlY3VsYXRpdmVK
SVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0
aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1f
bm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3By
T3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fZm9y
bWF0KERhdGFGb3JtYXROb25lKQogI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQp
OwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBp
ZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3du
SW50MzJVc2UpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChlZGdlLm5vZGUoKSkpCiAgICAg
ICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTIzMjUsOSArMjM0MiwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KIAorICAgIEVkZ2Ug
ZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KKyAgICAK
ICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7Cisg
ICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogICAgIERhdGFGb3JtYXQgZm9y
bWF0KCkKQEAgLTIzNDAsMjcgKzIzNjIsMjcgQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKQog
ICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAg
ICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSW50ZWdlcihub2RlKCksIG1fZm9y
bWF0KTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxJbnRlZ2VyKG1f
ZWRnZSwgbV9mb3JtYXQpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsK
KyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVj
dWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwog
ICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKICAgICBEYXRhRm9ybWF0IG1fZm9ybWF0OwogfTsK
IAogY2xhc3MgSlNWYWx1ZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IEpTVmFsdWVP
cGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IEpTVmFs
dWVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0
aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1f
aml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2Uo
ZWRnZSkKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFs
aWRHUFJSZWcpCiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMjM2OCwxNCArMjM5MCwxNCBA
QCBwdWJsaWM6CiAjZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAg
IEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5k
KCkgPT0gVW50eXBlZFVzZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKGppdC0+
aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAg
ICAgICAgICAgIGdwcigpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgbV9yZWdp
c3Rlci5wYWlyLnRhZ0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgICAgIG1fcmVnaXN0ZXIucGFp
ci5wYXlsb2FkR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bV9ub2RlKSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAg
IGZpbGwoKTsKICNlbmRpZgogICAgIH0KQEAgLTIzOTYsMTcgKzI0MTgsMjIgQEAgcHVibGljOgog
ICAgICAgICB9CiAjZW5kaWYKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgp
Lm5vZGUoKTsKICAgICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEdQUlJlZyBncHIoKQog
ICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAg
ICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSlNWYWx1ZShub2RlKCkpOworICAg
ICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUobV9lZGdlKTsKICAg
ICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICBKU1ZhbHVlUmVncyBqc1Zh
bHVlUmVncygpCkBAIC0yNDE5LDcgKzI0NDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWxsKCkK
ICAgICB7CiAgICAgICAgIGlmIChtX3JlZ2lzdGVyLnBhaXIudGFnR1BSID09IEludmFsaWRHUFJS
ZWcgJiYgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIgPT0gSW52YWxpZEdQUlJlZykKLSAgICAg
ICAgICAgIG1faXNEb3VibGUgPSAhbV9qaXQtPmZpbGxKU1ZhbHVlKG5vZGUoKSwgbV9yZWdpc3Rl
ci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIsIG1fcmVnaXN0ZXIuZnBy
KTsKKyAgICAgICAgICAgIG1faXNEb3VibGUgPSAhbV9qaXQtPmZpbGxKU1ZhbHVlKG1fZWRnZSwg
bV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiwgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIsIG1fcmVn
aXN0ZXIuZnByKTsKICAgICB9CiAKICAgICBHUFJSZWcgdGFnR1BSKCkKQEAgLTI0NTEsMTIgKzI0
NzgsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQt
PnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAg
RWRnZSBtX2VkZ2U7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgbV9ncHJPckludmFs
aWQ7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMjQ3MywxNCArMjUwMCwxNCBAQCBwcml2
YXRlOgogCiBjbGFzcyBTdG9yYWdlT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3Rv
cmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UpCisgICAgZXhwbGljaXQg
U3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQogICAgICAgICA6
IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2Vk
Z2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0g
RG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAg
QVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0g
S25vd25DZWxsVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAg
ICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAgLTI0OTAsMjYgKzI1MTcsMzEgQEAgcHVibGlj
OgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAgICAgCisg
ICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAg
fQorICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
bm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogICAgIAogICAgIEdQ
UlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRH
UFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3RvcmFnZShu
b2RlKCkpOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2Uo
ZWRnZSgpKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAg
ICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAg
IG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIFNwZWN1bGF0
aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAg
R1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIApAQCAtMjY0MSw5ICsyNjczLDkgQEAgcHJpdmF0
ZToKIAogY2xhc3MgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxp
Y2l0IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNl
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQor
ICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQs
IEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVj
dWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNw
ZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5v
ZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJ
bnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Zvcm1hdChEYXRhRm9y
bWF0Tm9uZSkKQEAgLTI2NTEsOCArMjY4Myw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RpcmVj
dGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBB
U1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBpZiAoaml0LT5pc0Zp
bGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdl
LnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVk
KG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTI2NjEsMTAgKzI2OTMs
MTUgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQ
UlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KKyAg
ICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsK
KyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogICAgIERhdGFG
b3JtYXQgZm9ybWF0KCkKQEAgLTI2NzcsMTggKzI3MTQsMTggQEAgcHVibGljOgogICAgIEdQUlJl
ZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJS
ZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlSW50
KG5vZGUoKSwgbV9mb3JtYXQsIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZh
bGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVJbnQoZWRnZSgpLCBtX2Zvcm1hdCwgbV9kaXJlY3Rp
b24pOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZv
aWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9q
aXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCog
bV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBt
X2dwck9ySW52YWxpZDsKICAgICBEYXRhRm9ybWF0IG1fZm9ybWF0OwogICAgIFNwZWN1bGF0aW9u
RGlyZWN0aW9uIG1fZGlyZWN0aW9uOwpAQCAtMjY5NiwxNCArMjczMywxNCBAQCBwcml2YXRlOgog
CiBjbGFzcyBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxp
Y2l0IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdl
IHVzZSkKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQoU3BlY3VsYXRp
dmVKSVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRv
bWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAs
IG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1f
Z3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQp
OwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOwotICAgICAgICBp
ZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQz
MlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7CisgICAgICAgIGlmIChq
aXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTI3
MTIsNDEgKzI3NDksNDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQg
IT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQp
OwogICAgIH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZWRnZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0K
IAogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09
IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxs
U3BlY3VsYXRlSW50U3RyaWN0KG5vZGUoKSk7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9
IG1faml0LT5maWxsU3BlY3VsYXRlSW50U3RyaWN0KGVkZ2UoKSk7CiAgICAgICAgIHJldHVybiBt
X2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKLSAgICAg
ICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CiAgICAg
fQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2RlKiBtX25v
ZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIAog
Y2xhc3MgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICBleHBs
aWNpdCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRn
ZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwg
T3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9u
KQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAg
ICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBS
UmVnKQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpID09IERvdWJsZVVzZSk7
Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVF9VTlVT
RUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2lu
ZCgpID09IE51bWJlclVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bk51bWJlclVzZSB8fCBl
ZGdlLnVzZUtpbmQoKSA9PSBSZWFsTnVtYmVyVXNlKSk7CisgICAgICAgIGlmIChqaXQtPmlzRmls
bGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBmcHIoKTsKICAgICB9CiAKQEAgLTI3NTUsNDIgKzI3
OTcsNDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9mcHJPckludmFsaWQgIT0gSW52YWxp
ZEZQUlJlZyk7CiAgICAgICAgIG1faml0LT51bmxvY2sobV9mcHJPckludmFsaWQpOwogICAgIH0K
KyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRn
ZTsKKyAgICB9CiAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KIAogICAgIEZQ
UlJlZyBmcHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZnByT3JJbnZhbGlkID09IEludmFsaWRG
UFJSZWcpCi0gICAgICAgICAgICBtX2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRl
RG91YmxlKG5vZGUoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9mcHJPckludmFsaWQg
PSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZURvdWJsZShlZGdlKCksIG1fZGlyZWN0aW9uKTsKICAgICAg
ICAgcmV0dXJuIG1fZnByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAg
ICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uobm9k
ZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwotICAg
IE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBGUFJSZWcgbV9mcHJPckludmFs
aWQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCiBjbGFzcyBT
cGVjdWxhdGVDZWxsT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgZXhwbGljaXQgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uLCBPcGVyYW5kU3BlY3Vs
YXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDog
bV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQorICAgICAgICAsIG1fZWRn
ZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgICAg
ICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsK
LSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2Rl
ID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0g
T2JqZWN0VXNlIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ1VzZSkpOworICAgICAgICBpZiAo
aml0LT5pc0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0y
Nzk5LDQyICsyODQ2LDQ3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlk
ICE9IEludmFsaWRHUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlk
KTsKICAgICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9
CiAKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9
PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+Zmls
bFNwZWN1bGF0ZUNlbGwobm9kZSgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2dwck9y
SW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQ2VsbChlZGdlKCksIG1fZGlyZWN0aW9uKTsK
ICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVz
ZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51
c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0
OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJP
ckludmFsaWQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCiBj
bGFzcyBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgZXhw
bGljaXQgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBl
ZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9u
LCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRp
b24pCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1fbm9kZSh1c2Uubm9kZSgpKQor
ICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRH
UFJSZWcpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNl
KTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtp
bmQoKSA9PSBCb29sZWFuVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkK
ICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAgLTI4NDQsMzAgKzI4OTYsNDEgQEAg
cHVibGljOgogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAg
ICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7
CisgICAgfQorICAgIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogICAgIAog
ICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IElu
dmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3Bl
Y3VsYXRlQm9vbGVhbihub2RlKCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJ
bnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVCb29sZWFuKGVkZ2UoKSwgbV9kaXJlY3Rpb24p
OwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQg
dXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQt
PnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9q
aXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dw
ck9ySW52YWxpZDsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CiAK
KyNkZWZpbmUgREZHX1RZUEVfQ0hFQ0soc291cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gs
IGp1bXBUb0ZhaWwpIGRvIHsgXAorICAgICAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKChlZGdlKSwg
KHR5cGVzUGFzc2VkVGhyb3VnaCkpKSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICB0eXBlQ2hlY2soKHNvdXJjZSksIChlZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCks
IChqdW1wVG9GYWlsKSk7IFwKKyAgICB9IHdoaWxlICgwKQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24g
MTQzNDI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODksMTEgKzI4OSwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiBnZXRM
b2NhbCA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrICsgMSwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgdmFyaWFibGUt
PnByZWRpY3Rpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldExvY2FsLCBjb2RlT3Jp
Z2luLCBPcEluZm8odmFyaWFibGUpLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdl
dExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNO
b25lLCBDaGVja1N0cnVjdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4s
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWwpOworICAgICAgICAgICAgICAgICAg
ICAgICAgRWRnZShnZXRMb2NhbCwgQ2VsbFVzZSkpOwogCiAgICAgICAgICAgICAgICAgICAgIGlm
IChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID09IG5v
ZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7CkBAIC0zMTcsNyArMzE3LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAvLyB0byBleGl0LgogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29k
ZU9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQxID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG5vZGUtPmNoaWxk
MSgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERv
bnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBTZXRMb2NhbCwgY29kZU9yaWdp
biwKQEAgLTMyNyw3ICszMjcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIG5l
eHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gcmVleGVjdXRpbmcgdGhlIGN1cnJl
bnQgb25lLgogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgRm9yd2FyZENoZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZh
bHVlLm1fc3RydWN0dXJlKSksIGNoaWxkMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
T3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1
Y3R1cmUpKSwgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R1VzZUtpbmQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgV1RGIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgVXNlS2luZCB1c2VLaW5kKQoreworICAgIHN3aXRjaCAodXNlS2luZCkgeworICAg
IGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgb3V0LnByaW50KCJVbnR5cGVkIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICBvdXQucHJp
bnQoIktub3duSW50MzIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWFsTnVtYmVyVXNl
OgorICAgICAgICBvdXQucHJpbnQoIlJlYWxOdW1iZXIiKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBOdW1iZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiTnVtYmVyIik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiS25vd25O
dW1iZXIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBv
dXQucHJpbnQoIkJvb2xlYW4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDZWxsVXNlOgor
ICAgICAgICBvdXQucHJpbnQoIkNlbGwiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93
bkNlbGxVc2U6CisgICAgICAgIG91dC5wcmludCgiS25vd25DZWxsIik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICBvdXQucHJpbnQoIk9iamVjdCIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CisgICAgICAgIG91dC5wcmlu
dCgiT2JqZWN0T3JPdGhlciIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cmluZ1VzZToK
KyAgICAgICAgb3V0LnByaW50KCJTdHJpbmciKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBO
b3RDZWxsVXNlOgorICAgICAgICBvdXQucHJpbnQoIk5vdENlbGwiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBPdGhlclVzZToKKyAgICAgICAgb3V0LnByaW50KCJPdGhlciIpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdVc2VLaW5kX2gK
KyNkZWZpbmUgREZHVXNlS2luZF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitlbnVtIFVzZUtpbmQgeworICAgIFVudHlwZWRVc2UsCisgICAgSW50MzJVc2UsCisgICAgS25v
d25JbnQzMlVzZSwKKyAgICBSZWFsTnVtYmVyVXNlLAorICAgIE51bWJlclVzZSwKKyAgICBLbm93
bk51bWJlclVzZSwKKyAgICBCb29sZWFuVXNlLAorICAgIENlbGxVc2UsCisgICAgS25vd25DZWxs
VXNlLAorICAgIE9iamVjdFVzZSwKKyAgICBPYmplY3RPck90aGVyVXNlLAorICAgIFN0cmluZ1Vz
ZSwKKyAgICBOb3RDZWxsVXNlLAorICAgIE90aGVyVXNlLAorICAgIExhc3RVc2VLaW5kIC8vIE11
c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1c2VkIHRv
IGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMuCit9OworCitBTFdBWVNfSU5MSU5F
IFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNlS2luZCB1c2VLaW5kKQoreworICAgIHN3
aXRjaCAodXNlS2luZCkgeworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgcmV0dXJuIFNw
ZWNFbXB0eU9yVG9wOyAvLyBUT1AgaXNuJ3QgZ29vZCBlbm91Z2g7IHVudHlwZWQgdXNlcyBtYXkg
dXNlIHRoZSBub3JtYWxseSB1bnNlZW4gZW1wdHkgdmFsdWUsIGluIHRoZSBjYXNlIG9mIGxhenkg
cmVnaXN0ZXJzLgorICAgIGNhc2UgSW50MzJVc2U6CisgICAgY2FzZSBLbm93bkludDMyVXNlOgor
ICAgICAgICByZXR1cm4gU3BlY0ludDMyOworICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAg
ICAgcmV0dXJuIFNwZWNSZWFsTnVtYmVyOworICAgIGNhc2UgTnVtYmVyVXNlOgorICAgIGNhc2Ug
S25vd25OdW1iZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjTnVtYmVyOworICAgIGNhc2UgQm9v
bGVhblVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNCb29sZWFuOworICAgIGNhc2UgQ2VsbFVzZToK
KyAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNDZWxsOworICAgIGNh
c2UgT2JqZWN0VXNlOgorICAgICAgICByZXR1cm4gU3BlY09iamVjdDsKKyAgICBjYXNlIE9iamVj
dE9yT3RoZXJVc2U6CisgICAgICAgIHJldHVybiBTcGVjT2JqZWN0IHwgU3BlY090aGVyOworICAg
IGNhc2UgU3RyaW5nVXNlOgorICAgICAgICByZXR1cm4gU3BlY1N0cmluZzsKKyAgICBjYXNlIE5v
dENlbGxVc2U6CisgICAgICAgIHJldHVybiB+U3BlY0NlbGw7CisgICAgY2FzZSBPdGhlclVzZToK
KyAgICAgICAgcmV0dXJuIFNwZWNPdGhlcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gU3BlY1RvcDsKKyAgICB9Cit9
CisKK0FMV0FZU19JTkxJTkUgYm9vbCBpc051bWVyaWNhbChVc2VLaW5kIGtpbmQpCit7CisgICAg
c3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBJbnQzMlVzZToKKyAgICBjYXNlIEtub3duSW50MzJV
c2U6CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6VXNlS2luZCk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdVc2VLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDE0MzQyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUsIEVk
Z2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgLT4gJXNAJXUiLCBub2RlLT5p
bmRleCgpLCB1c2VLaW5kVG9TdHJpbmcoZWRnZS51c2VLaW5kKCkpLCBlZGdlLT5pbmRleCgpKTsK
KyAgICAgICAgZGF0YUxvZyhub2RlLCAiIC0+ICIsIGVkZ2UpOwogICAgIH0KICAgICAKICAgICB2
b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJ
bmRleCBibG9ja0luZGV4KQpAQCAtMzg5LDcgKzM4OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKICAgICAgICAgTm9kZSogbm9kZSwgQmxvY2tJbmRleCBi
bG9ja0luZGV4LCBOb2RlKiBleHBlY3RlZE5vZGUsIEVkZ2UgaW5jb21pbmdFZGdlKQogICAgIHsK
LSAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBCbG9jayAjJXUsIHNlYXJjaGluZyBmb3IgQCV1IGZy
b20gQCV1Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlLT5pbmRleCgp
LCBpbmNvbWluZ0VkZ2UtPmluZGV4KCkpOworICAgICAgICBkYXRhTG9nKG5vZGUsICIgaW4gQmxv
Y2sgIyIsIGJsb2NrSW5kZXgsICIsIHNlYXJjaGluZyBmb3IgIiwgZXhwZWN0ZWROb2RlLCAiIGZy
b20gIiwgaW5jb21pbmdFZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wR3JhcGhJZkFw
cHJvcHJpYXRlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189455</attachid>
            <date>2013-02-20 21:08:36 -0800</date>
            <delta_ts>2013-02-21 11:24:12 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>388975</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzNTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4OCBA
QAorMjAxMy0wMi0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgbm90IGNoYW5nZSBpdHMgbWluZCBhYm91dCB3aGF0IHR5cGUgc3BlY3VsYXRp
b25zIGEgbm9kZSBkb2VzLCBieSBlbmNvZGluZyB0aGUgY2hlY2tzIGluIHRoZSBOb2RlVHlwZSwg
VXNlS2luZCwgYW5kIEFycmF5TW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA5MzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBGaXh1cFBoYXNlIG5vdyBsb2NrcyBpbiB0aGUgc3BlY3Vs
YXRpb25zIHRoYXQgZWFjaCBub2RlIHdpbGwgZG8uIFRoZSBERkcgdGhlbgorICAgICAgICByZW1l
bWJlcnMgdGhvc2Ugc3BlY3VsYXRpb25zLCBhbmQgZG9lc24ndCBjaGFuZ2UgaXRzIG1pbmQgYWJv
dXQgdGhlbSBldmVuIGlmIHRoZQorICAgICAgICBncmFwaCBpcyB0cmFuc2Zvcm1lZCAtIGZvciBl
eGFtcGxlIGlmIGEgbm9kZSdzIGNoaWxkIGlzIHJlcG9pbnRlZCB0byBhIGRpZmZlcmVudAorICAg
ICAgICBub2RlIGFzIHBhcnQgb2YgQ1NFLCBDRkcgc2ltcGxpZmljYXRpb24sIG9yIGZvbGRpbmcu
IEVhY2ggbm9kZSBlbnN1cmVzIHRoYXQgaXQKKyAgICAgICAgZXhlY3V0ZXMgdGhlIHNwZWN1bGF0
aW9ucyBwcm9taXNlZCBieSBpdHMgZWRnZXMuIFRoaXMgaXMgdHJ1ZSBldmVuIGZvciBQaGFudG9t
CisgICAgICAgIG5vZGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGlsbCBsZWF2ZXMgc29t
ZSBjcmF6aW5lc3Mgb24gdGhlIHRhYmxlIGZvciBmdXR1cmUgd29yaywgbGlrZSB0aGUKKyAgICAg
ICAgZWxpbWluYXRpb24gb2Ygc3BlY3VsYXRpbmcgU2V0TG9jYWwncyBkdWUgdG8gQ0ZHIHNpbXBs
aWZpY2F0aW9uCisgICAgICAgICh3ZWJraXQub3JnL2IvMTA5Mzg4KSBhbmQgZWxpbWluYXRpb24g
b2Ygbm9kZXMgdmlhIERDRSAod2Via2l0Lm9yZy9iLzEwOTM4OSkuCisgICAgICAgIAorICAgICAg
ICBJbiBhbGwsIHRoaXMgYWxsb3dzIGZvciBhIGh1Z2Ugc2ltcGxpZmljYXRpb24gb2YgdGhlIERG
Ry4gSW5zdGVhZCBvZiBoYXZpbmcgdG8KKyAgICAgICAgZXhlY3V0ZSB0aGUgcmlnaHQgc3BlY3Vs
YXRpb24gaGV1cmlzdGljIGVhY2ggdGltZSB5b3Ugd2FudCB0byBkZWNpZGUgd2hhdCBhIG5vZGUK
KyAgICAgICAgZG9lcyAoZm9yIGV4YW1wbGUgTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihj
aGlsZDEsIGNoaWxkMikgJiYKKyAgICAgICAgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSwg
eW91IGp1c3QgYXNrIGZvciB0aGUgdXNlIGtpbmRzIG9mIGl0cyBjaGlsZHJlbgorICAgICAgICAo
dHlwaWNhbGx5IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBJbnQzMlVzZSkuIEJlY2F1c2UgdGhl
IHVzZSBraW5kcyBhcmUKKyAgICAgICAgZGlzY3JldGUsIHlvdSBjYW4gb2Z0ZW4ganVzdCBzd2l0
Y2ggb3ZlciB0aGVtLiBUaGlzIG1ha2VzIG1hbnkgcGFydHMgb2YgdGhlIGNvZGUKKyAgICAgICAg
bW9yZSBjbGVhciB0aGFuIHRoZXkgd2VyZSBiZWZvcmUuCisgICAgICAgIAorICAgICAgICBIYXZp
bmcgVXNlS2luZHMgZGVzY3JpYmUgdGhlIHNwZWN1bGF0aW9ucyBiZWluZyBwZXJmb3JtZWQgYWxz
byBtYWtlcyBpdCBmYXIKKyAgICAgICAgZWFzaWVyIHRvIHBlcmZvcm0gYW5hbHlzZXMgdGhhdCBu
ZWVkIHRvIGtub3cgd2hhdCBzcGVjdWxhdGlvbnMgYXJlIGRvbmUuIFRoaXMgaXMKKyAgICAgICAg
c28gZmFyIG9ubHkgdXNlZCB0byBzaW1wbGlmeSBsYXJnZSBwYXJ0cyBvZiB0aGUgQ0ZBLgorICAg
ICAgICAKKyAgICAgICAgVG8gaGF2ZSBhIGxhcmdlciB2b2NhYnVsYXJ5IG9mIFVzZUtpbmRzLCB0
aGlzIGFsc28gY2hhbmdlcyB0aGUgbm9kZSBhbGxvY2F0b3IgdG8KKyAgICAgICAgYmUgYWJsZSB0
byByb3VuZCB1cCBOb2RlIHNpemVzIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIDE2LgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBhcHBlYXJzIHRvIGJlIG5ldXRyYWwgb24gYmVuY2htYXJrcywg
ZXhjZXB0IGZvciBzb21lIGdvb2Z5IHNwZWVkLXVwcywgbGlrZQorICAgICAgICA4JSBvbiBPY3Rh
bmUvYm94MmQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6c3RhcnRFeGVj
dXRpbmcpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpleGVjdXRlRWRnZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnZlcmlm
eUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnZlcmlmeUVkZ2VzKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6OmZpbHRlckVkZ2VCeVVzZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6ZmlsdGVyQnlUeXBlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlcik6Cisg
ICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGph
Y2VuY3lMaXN0OjpBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpBZGphY2VuY3lM
aXN0OjpjaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6c2V0Q2hpbGQp
OgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnJlc2V0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpBZGphY2VuY3lMaXN0OjpmaXJzdENoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpB
ZGphY2VuY3lMaXN0OjpzZXRGaXJzdENoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpBZGphY2Vu
Y3lMaXN0OjpudW1DaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6
c2V0TnVtQ2hpbGRyZW4pOgorICAgICAgICAoQWRqYWNlbmN5TGlzdCk6CisgICAgICAgICogZGZn
L0RGR0FsbG9jYXRvci5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEFsbG9jYXRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWxsb2NhdG9yOjpjZWxsU2l6ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWxsb2NhdG9yOjpSZWdpb246OmhlYWRlclNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFs
bG9jYXRvcjo6UmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbik6CisgICAgICAgIChKU0M6
OkRGRzo6QWxsb2NhdG9yOjpSZWdpb246OnBheWxvYWRTaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpBbGxvY2F0b3I6OlJlZ2lvbjo6cGF5bG9hZEJlZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpB
bGxvY2F0b3I6OlJlZ2lvbjo6cGF5bG9hZEVuZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWxsb2Nh
dG9yOjpSZWdpb246OmlzSW5UaGlzUmVnaW9uKToKKyAgICAgICAgKEpTQzo6REZHOjo6OkFsbG9j
YXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Ojp+QWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjo6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmZyZWUpOgorICAgICAgICAo
SlNDOjpERkc6Ojo6ZnJlZUFsbCk6CisgICAgICAgIChKU0M6OkRGRzo6OjpyZXNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6OjppbmRleE9mKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmFsbG9jYXRv
ck9mKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmJ1bXBBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6OjpmcmVlTGlzdEFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmFsbG9jYXRl
U2xvdyk6CisgICAgICAgIChKU0M6OkRGRzo6OjpmcmVlUmVnaW9uc1N0YXJ0aW5nQXQpOgorICAg
ICAgICAoSlNDOjpERkc6Ojo6c3RhcnRCdW1waW5nSW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZFRv
R3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgp
OgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OnNldExvY2FsU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OmVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjphZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2spOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdFZGdlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpFZGdlOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHRWRnZS5oOgorICAgICAgICAo
SlNDOjpERkc6OkVkZ2U6OnVzZUtpbmRVbmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpERkc6OkVk
Z2U6OnVzZUtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OnNoaWZ0KToKKyAgICAgICAg
KiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6
cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OmJsZXNzQXJyYXlPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeEludEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZp
eERvdWJsZUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmluamVjdEludDMy
VG9Eb3VibGVOb2RlKToKKyAgICAgICAgKEZpeHVwUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkZpeHVwUGhhc2U6OnRydW5jYXRlQ29uc3RhbnRUb0ludDMyKToKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjp0cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjphdHRlbXB0VG9NYWtlSW50ZWdlckFkZCk6CisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnJlZkNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGVyZWZDaGlsZHJl
bik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OnJlZik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRlcmVmKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6cGVyZm9ybVN1YnN0aXR1dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmlzUHJlZGljdGVkTnVtZXJpY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YWRk
SW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcik6CisgICAgICAgIChERkcpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Tm9kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjp3aWxsSGF2ZUNvZGVHZW5Pck9TUik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hp
bGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDIpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmNoaWxkMyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YmluYXJ5VXNlS2lu
ZCk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc0JpbmFyeVVz
ZUtpbmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlQWxsb2NhdG9yLmg6CisgICAgICAgIChERkcp
OgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxhZ3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om5v
ZGVGbGFnc0FzU3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KERGRyk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0eXBl
Q2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmb3J3YXJkVHlwZUNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuY2gp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVB1dEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0
YW5jZU9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1Yik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVJbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZVJlYWxOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGVOb3RDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3Vs
YXRpdmVKSVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mTnVt
YmVyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpuZWVkc1R5
cGVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OkludGVnZXJPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6ZWRnZSk6CisgICAgICAg
IChJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6Om5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpncHIpOgorICAgICAgICAo
SlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFs
dWVPcGVyYW5kOjpKU1ZhbHVlT3BlcmFuZCk6CisgICAgICAgIChKU1ZhbHVlT3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpTVmFsdWVPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3Bl
cmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6ZmlsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpT
dG9yYWdlT3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChTdG9yYWdlT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6Om5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0
b3JhZ2VPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjp1
c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAgIChTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQ6OmVkZ2UpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ6OlNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCk6Cisg
ICAgICAgIChTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQ6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQpOgorICAgICAgICAoU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91Ymxl
T3BlcmFuZDo6ZWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFu
ZDo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZDo6ZnBy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVEb3VibGVPcGVyYW5kOjp1c2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kOjpTcGVjdWxhdGVDZWxsT3BlcmFu
ZCk6CisgICAgICAgIChTcGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6OmVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
ZUNlbGxPcGVyYW5kOjpub2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3Bl
cmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6dXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6U3BlY3VsYXRl
Qm9vbGVhbk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xlYW5PcGVy
YW5kOjplZGdlKToKKyAgICAgICAgKFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6bm9kZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChERkcpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpmaWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVJbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVj
dE9yT3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcik6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjppc051
bWVyaWNhbCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0KToK
KwogMjAxMy0wMi0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IERGRyBpbmxpbmVzIFJlc29sdmVzIHRoYXQgaXQgZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUg
Y29ycmVjdGx5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAxNDM1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwog
ICAgIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1Ro
dW5rcy5jcHAKICAgICBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHVXNl
S2luZC5jcHAKICAgICBkZmcvREZHVmFsdWVTb3VyY2UuY3BwCiAgICAgZGZnL0RGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuY3BwCiAgICAgZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTQzNTYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI3Miw2ICsyNzIsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVc2VLaW5kLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5k
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuY3BwIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE0MzU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNiArMTQ5LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgXAogICAg
IGRmZy9ERkdUaHVua3MuY3BwIFwKICAgICBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAgXAor
ICAgIGRmZy9ERkdVc2VLaW5kLmNwcCBcCiAgICAgZGZnL0RGR1ZhbHVlU291cmNlLmNwcCBcCiAg
ICAgZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwIFwKICAgICBkZmcvREZHVmFyaWFi
bGVFdmVudC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE0MzU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDggQEAKIAkJ
MEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzU1NkQxNDczOEYyRTAwMTIx
RTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovOyB9OwogCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRG
RDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU5ODdGMkYxNjgyOEE3RTAwM0MyRjhEIC8qIFVudXNlZFBvaW50ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJFODky
RDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERG
R01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBF
MDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CisJCTBGMzRCMTRBMTZENDIwMTMwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzRCMTRDMTZE
NDNFMEQwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTRCMTZENDNFMEMw
MDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCM0ExQTE1M0U2OEYyMDAz
RUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEYzQjNBMUIxNTNFNjhGNDAwM0VE
MEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTAwMSw2ICsxMDAzLDggQEAKIAkJMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4
OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHVmFyaWFibGVFdmVudC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZEMTQ3MzhGMkUwMDEy
MUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERGR0NvZGVCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0g
ZGZnL0RGR1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjM0QjE0
ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdVc2VLaW5kLmg7IHBhdGggPSBkZmcvREZHVXNlS2luZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZG
IC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MDksNiArMjcx
Myw4IEBACiAJCQkJMEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oICovLAog
CQkJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRkJFMEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5o
ICovLAorCQkJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLywK
KwkJCQkwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovLAogCQkJCTBG
M0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgKi8sCiAJCQkJMEYzQjNB
MkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8sCiAJCQkJMEYyQkRDM0YxNTIy
ODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oICovLApAQCAtMzI1MSw2
ICszMjU3LDcgQEAKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmls
ZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVB
IC8qIERGR1VzZUtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUxMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QTUxNjZBRDM1
MTAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcy
OUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zOTU3LDYgKzM5NjQsNyBAQAogCQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQ
cm9maWxlckNvbXBpbGF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMTE2
NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRjcyOUIyMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzRCMTQ5MTZENDIwMTAwMDFDREE1QSAvKiBERkdVc2VL
aW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQ
cm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAw
RjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
MDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCShyZXZpc2lvbiAxNDM1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsMzAgKzIzNCw2MSBAQCBBYnN0
cmFjdFN0YXRlOjpCb29sZWFuUmVzdWx0IEFic3RyYWN0U3RhCiAgICAgcmV0dXJuIFVua25vd25C
b29sZWFuUmVzdWx0OwogfQogCi1ib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kZXhJbkJsb2NrKQorYm9vbCBBYnN0cmFjdFN0YXRlOjpzdGFydEV4ZWN1dGluZyhOb2RlKiBu
b2RlKQogewogICAgIEFTU0VSVChtX2Jsb2NrKTsKICAgICBBU1NFUlQobV9pc1ZhbGlkKTsKICAg
ICAKICAgICBtX2RpZENsb2JiZXIgPSBmYWxzZTsKICAgICAKLSAgICBOb2RlKiBub2RlID0gbV9i
bG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgCisgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgCiAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjpzdGFydEV4ZWN1dGluZyh1bnNp
Z25lZCBpbmRleEluQmxvY2spCit7CisgICAgcmV0dXJuIHN0YXJ0RXhlY3V0aW5nKG1fYmxvY2st
PmF0KGluZGV4SW5CbG9jaykpOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZGdl
cyhOb2RlKiBub2RlKQoreworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5v
ZGUsIGZpbHRlckVkZ2VCeVVzZSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVk
Z2VzKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3sKKyAgICBleGVjdXRlRWRnZXMobV9ibG9jay0+
YXQoaW5kZXhJbkJsb2NrKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6dmVyaWZ5RWRnZShO
b2RlKiwgRWRnZSBlZGdlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCEoZm9yTm9kZShlZGdlKS5t
X3R5cGUgJiB+dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpKTsKK30KKwordm9pZCBBYnN0
cmFjdFN0YXRlOjp2ZXJpZnlFZGdlcyhOb2RlKiBub2RlKQoreworICAgIERGR19OT0RFX0RPX1RP
X0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIHZlcmlmeUVkZ2UpOworfQorCitib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSkK
K3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgdmVyaWZ5RWRnZXMobm9kZSk7
CisgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50Ogog
ICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7CiAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkp
OwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIElkZW50aXR5OiB7CiAgICAgICAgIGZvck5vZGUobm9kZSkg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMjY1LDE5ICsyOTYs
MTYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCkg
PT0gU3BlY05vbmUpIHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOwogICAgICAgICBBYnN0cmFjdFZhbHVlIHZh
bHVlID0gbV92YXJpYWJsZXMub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwog
ICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAg
ICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQotICAgICAgICAgICAgICAgIGNhbkV4aXQgfD0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAg
ICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9
IHRydWU7CiAgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChjYW5FeGl0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTI4
NiwzNSArMzE0LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkpCiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKICAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOwotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIFNldExvY2FsOiB7Ci0gICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
aXNDYXB0dXJlZCgpCi0gICAgICAgICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVu
dChub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVc2VEb3Vi
bGVGb3JtYXQoKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0g
ICAgICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLnNldChTcGVjRG91
YmxlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7Ci0gICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUp
OwotICAgICAgICBlbHNlIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkgewot
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCghaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlKSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1
bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5
KG5vZGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNl
KTsKLSAgICAgICAgCiAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzIy
LDcgKzMyNSw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2Yg
YXJndW1lbnRzIGhhcyBiZWVuIHNldC4KICAgICAgICAgQVNTRVJUKCFtX2Jsb2NrLT52YWx1ZXNB
dEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwotICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IEJpdEFuZDoKQEAgLTM2MiwxMSArMzY0LDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2Fz
U2V0KSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnko
bm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTM3NywyMCArMzc3LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIEFTU0VSVChjaGlsZC5pc0ludDMyKCkpOwog
ICAgICAgICAgICAgaWYgKHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoY2hpbGQuYXNVSW50
MzIoKSkpKSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKLSAgICAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICBjYXNlIERvdWJsZUFzSW50
MzI6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CkBAIC00MDQsNyArNDAxLDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVj
TnVtYmVyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtNDE5LDIwICs0MTUsOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgY29uc3RhbnRXYXNTZXQgPSB0cnlT
ZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKEpTQzo6dG9JbnQzMihjaGlsZC5hc0RvdWJsZSgpKSkp
OwogICAgICAgICAgICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAgICAgICAgICAgc3Bl
Y3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJV
bmFyeShub2RlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlcih+U3BlY0NlbGwpOwotICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICBi
cmVhazsKQEAgLTQ0NCwxMCArNDI5LDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKQogICAgICAg
ICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgY2hpbGQuYXNOdW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7
CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSkKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsK
ICAgICAgICAgZWxzZQpAQCAtNDU1LDEwICs0MzgsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAg
Y2FzZSBDaGVja051bWJlcjoKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVy
KFNwZWNOdW1iZXIpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgIGNhc2UgVmFs
dWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDogewogICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwpAQCAtNDY2LDMzICs0NDUsMjcgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAobGVmdCAmJiBy
aWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQogICAgICAgICAgICAg
JiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5h
c051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKLSAgICAgICAgICAgICAg
ICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW50MzJVc2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOworICAg
ICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdz
KCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVt
YmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKKyAg
ICAgICAgY2FzZSBOdW1iZXJVc2U6CiAgICAgICAgICAgICBpZiAoaXNSZWFsTnVtYmVyU3BlY3Vs
YXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQogICAgICAgICAgICAgICAgICYm
IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkp
CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZVJlYWwpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3Vi
bGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gVmFsdWVBZGQpIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFsdWVBZGQpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChTcGVjU3RyaW5nIHwgU3BlY0ludDMyIHwgU3BlY051bWJlcik7Ci0gICAgICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIC8vIFdlIGRvbid0IGhhbmRsZSB0aGlzIHlldC4gOi0oCi0gICAgICAgIG1faXNW
YWxpZCA9IGZhbHNlOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTUwMiwxNyArNDc1LDIxIEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKGxlZnQgJiYgcmln
aHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKICAgICAgICAgICAgICYm
IHRyeVNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNO
dW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
KSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAg
bm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpOwor
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIElu
dDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygp
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApAQCAtNTIxLDE3ICs0OTgsMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIo
KQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZSgtY2hpbGQuYXNO
dW1iZXIoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeSgKLSAgICAgICAgICAgICAg
ICBub2RlLCAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFncygpKSk7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNh
c2UgSW50MzJVc2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwor
ICAgICAgICAgICAgaWYgKCFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZs
YWdzKCkpKQorICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKQEAgLTU0MSwyMyArNTIyLDI2IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVm
dC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkKICAgICAgICAgICAgICYmIHRyeVNldENv
bnN0YW50KG5vZGUsIEpTVmFsdWUobGVmdC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKSkp
KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAg
ICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCi0gICAgICAgICAgICAgICAgbm9kZSwKLSAg
ICAgICAgICAgICAgICAhbm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLT5hcml0aE5vZGVGbGFn
cygpKQotICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUt
PmFyaXRoTm9kZUZsYWdzKCkpKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5k
KCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0KFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIo
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgICAgICB8fCAhbm9kZUNhbklnbm9y
ZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TnVtYmVyVXNlOgorICAgICAgICAgICAgaWYgKGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgICAgICB8fCBpc1JlYWxOdW1i
ZXJTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgaWYgKGlzUmVhbE51bWJlclNw
ZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkKLSAgICAgICAgICAgIHx8
IGlzUmVhbE51bWJlclNwZWN1bGF0aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkp
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlUmVhbCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNTkxLDE4ICs1NzUsMjEgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGNvbnN0YW50V2FzU2V0KSB7CiAgICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2Fu
U3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShu
b2RlLCB0cnVlKTsgLy8gZm9yY2luZyBjYW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQgb24gdGhlIGNv
bnNlcnZhdGl2ZSBzaWRlLgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkg
eworICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQo
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldChTcGVjRG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2Rl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgICAgIApAQCAtNjExLDE3ICs1OTgsMjAgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQu
aXNOdW1iZXIoKQogICAgICAgICAgICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShm
YWJzKGNoaWxkLmFzTnVtYmVyKCkpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUtPmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2Rl
LCB0cnVlKTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJ
bnQzMik7CisgICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoU3BlY0RvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgICAgIApAQCAtNjMwLDEwICs2MjAsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJl
cigpCiAgICAgICAgICAgICAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKHNxcnQoY2hp
bGQuYXNOdW1iZXIoKSkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtNjUyLDIxICs2NDAsMjEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICB9CiAgICAgICAgIGlmIChkaWRTZXRDb25zdGFudCkgewogICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIE5vZGUqIGNo
aWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3Vs
YXRpb24oY2hpbGQtPnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFu
VW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3RPck90aGVyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBjYXNlIEludDMyVXNlOgorICAg
ICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0ZXIo
KFNwZWNDZWxsICYgflNwZWNTdHJpbmcpIHwgU3BlY090aGVyKTsKLSAgICAgICAgfSBlbHNlIGlm
IChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRl
SW50MzJVbmFyeShub2RlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnNob3VsZFNwZWN1bGF0
ZU51bWJlcigpKQotICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC03
NjQsMTQgKzc1MiwxNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAg
ICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGNoaWxkTm9kZS0+cHJlZGljdGlvbigpKSkgewot
ICAgICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oY2hpbGROb2RlLT5wcmVkaWN0aW9u
KCkpKQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGROb2RlKS5maWx0ZXIoU3BlY1N0cmlu
Zyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZE5vZGUp
LmZpbHRlcihTcGVjQ2VsbCk7CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgICAgIGNhc2UgQ2VsbFVzZToK
ICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY1N0
cmluZyk7CiAgICAgICAgIGJyZWFrOwpAQCAtODIzLDY1ICs4MTQsMTggQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAKICAgICAgICAgaWYgKGNvbnN0
YW50V2FzU2V0KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNCb29sZWFuKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcUNvbnN0YW50KSB7
Ci0gICAgICAgICAgICAvLyBXZSBjYW4gZXhpdCBpZiB3ZSBoYXZlbid0IGZpcmVkIHRoZSBNYXNx
dWVyYWRlc0FzVW5kZWZpbmQgd2F0Y2hwb2ludCB5ZXQuCi0gICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBOb2RlKiBsZWZ0ID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBOb2RlKiByaWdodCA9IG5vZGUtPmNoaWxk
MigpLm5vZGUoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgZmlsdGVyOwotICAgICAgICBTcGVj
dWxhdGVkVHlwZUNoZWNrZXIgY2hlY2tlcjsKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUludGVnZXIobGVmdCwgcmlnaHQpKSB7Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjSW50
MzI7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNJbnQzMlNwZWN1bGF0aW9uOwotICAgICAgICB9
IGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0LCByaWdodCkpIHsKLSAg
ICAgICAgICAgIGZpbHRlciA9IFNwZWNOdW1iZXI7Ci0gICAgICAgICAgICBjaGVja2VyID0gaXNO
dW1iZXJTcGVjdWxhdGlvbjsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IENvbXBh
cmVFcSkgewotICAgICAgICAgICAgaWYgKGxlZnQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8
IHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIG5vZGUt
PnNldENhbkV4aXQoZmFsc2UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fSAKLSAgICAgICAgICAgIGlmIChsZWZ0LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiByaWdo
dC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobGVmdCkuZmlsdGVyKFNwZWNP
YmplY3QpOwotICAgICAgICAgICAgICAgIGZvck5vZGUocmlnaHQpLmZpbHRlcihTcGVjT2JqZWN0
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChsZWZ0LT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiByaWdodC0+c2hvdWxkU3BlY3VsYXRl
T2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGxlZnQpLmZpbHRlcihTcGVjT2JqZWN0KTsKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKHJpZ2h0KS5maWx0ZXIoU3BlY09iamVjdCB8IFNwZWNPdGhl
cik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAobGVmdC0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIHJpZ2h0LT5zaG91bGRT
cGVjdWxhdGVPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoU3BlY09iamVjdCB8IFNw
ZWNPdGhlcik7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShyaWdodCkuZmlsdGVyKFNwZWNPYmpl
Y3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotIAotICAgICAgICAg
ICAgZmlsdGVyID0gU3BlY1RvcDsKLSAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FueVNwZWN1bGF0
aW9uOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5C
bG9jayk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmaWx0ZXIgPSBTcGVjVG9wOwot
ICAgICAgICAgICAgY2hlY2tlciA9IGlzQW55U3BlY3VsYXRpb247Ci0gICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgfQotICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgIWNoZWNrZXIoZm9yTm9kZShsZWZ0
KS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhY2hlY2tlcihmb3JOb2RlKHJpZ2h0KS5tX3R5cGUp
KTsKLSAgICAgICAgZm9yTm9kZShsZWZ0KS5maWx0ZXIoZmlsdGVyKTsKLSAgICAgICAgZm9yTm9k
ZShyaWdodCkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgIC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNl
cnZhdGl2ZS4gQnV0IHRoZSBvbmx5IHRoaW5nIHRoaXMgcHJldmVudHMgaXMgc3RvcmUgZWxpbWlu
YXRpb24sCisgICAgICAgIC8vIGFuZCBob3cgbGlrZWx5IGlzIGl0LCByZWFsbHksIHRoYXQgeW91
J2xsIGhhdmUgcmVkdW5kYW50IHN0b3JlcyBhY3Jvc3MgYSBjb21wYXJpc29uCisgICAgICAgIC8v
IG9wZXJhdGlvbj8gQ29tcGFyaXNvbiBvcGVyYXRpb25zIGFyZSB0eXBpY2FsbHkgYXQgdGhlIGVu
ZCBvZiBiYXNpYyBibG9ja3MsIHNvCisgICAgICAgIC8vIHVubGVzcyB3ZSBoYXZlIGdsb2JhbCBz
dG9yZSBlbGltaW5hdGlvbiAoc3VwZXIgdW5saWtlbHkgZ2l2ZW4gaG93IHVucHJvZml0YWJsZSB0
aGF0CisgICAgICAgIC8vIG9wdGltaXphdGlvbiBpcyB0byBiZWdpbiB3aXRoKSwgeW91IGFyZW4n
dCBnb2luZyB0byBiZSB3YW50aW5nIHRvIHN0b3JlIGVsaW1pbmF0ZQorICAgICAgICAvLyBhY3Jv
c3MgYW4gZXF1YWxpdHkgb3AuCisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtODk0LDQ3ICs4MzgsMjAgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAobGVmdCAm
JiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKQogICAgICAgICAg
ICAgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGxlZnQuYXNOdW1iZXIoKSA9PSBy
aWdodC5hc051bWJlcigpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQm9vbGVhbik7Ci0g
ICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVTdHJpY3RFcUNvbnN0YW50KSB7Ci0gICAg
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnROb2Rl
LCByaWdodE5vZGUpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXIobGVmdE5vZGUsIHJpZ2h0Tm9kZSkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZU51bWJlckJpbmFyeShub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChsZWZ0Tm9kZS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgcmlnaHROb2Rl
LT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhp
dChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVm
dE5vZGUtPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIHJpZ2h0Tm9kZS0+c2hvdWxkU3BlY3Vs
YXRlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGxlZnROb2RlKS5maWx0ZXIoU3BlY09iamVjdCk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKHJpZ2h0Tm9kZSkuZmlsdGVyKFNwZWNPYmplY3QpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2ZS4K
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJDb2Rl
QXQ6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJB
dDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC05NTQsMTUgKzg3MSwx
MiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNTdHJp
bmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VUb3AoKTsKQEAgLTk3MCw3ICs4ODQsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3Bl
Y0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKICAg
ICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKQEAgLTk4Miw0OCAr
ODk1LDM4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xh
bXBlZEFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY0RvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVjRG91
YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJy
YXk6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMy
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KFNwZWNEb3VibGUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMDM2LDkgKzkzOSw2IEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIFB1dEJ5VmFsOgogICAg
IGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAg
ICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAg
RWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICBzd2l0
Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CkBAIC0x
MDQ3LDEwNCArOTQ3LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5j
b2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3Bl
Y0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjUmVhbE51bWJlcik7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5m
aWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KSkKICAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0
QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2Vs
bCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKSkKICAgICAgICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmls
dGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVj
TnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgotICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBp
ZiAoY2hpbGQzLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgaWYgKGNoaWxkMy0+c2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVy
KFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVt
YmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1w
ZWRBcnJheToKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwot
ICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAg
ICAgaWYgKGNoaWxkMy0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBpZiAoY2hpbGQzLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZp
bHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSku
ZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3Bl
Y0ludDMyKTsKLSAgICAgICAgICAgIGlmIChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjTnVtYmVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsK
LSAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMiku
ZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNw
ZWNOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBDUkFTSCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CkBAIC0xMTUyLDE2ICs5NzEsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgbm9k
ZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUtPmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXQoU3BlY051bWJlcik7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE3NCwxNiArOTgz
LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKQotICAgICAgICAgICAgfHwgIWlzQ2VsbFNwZWN1bGF0
aW9uKGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpOwotICAgICAgICBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3Ao
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEp1bXA6Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgQnJhbmNoOiB7CkBAIC0xMTkxLDM2ICs5OTQsMjMgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBCb29sZWFuUmVzdWx0IHJlc3VsdCA9
IGJvb2xlYW5SZXN1bHQobm9kZSwgZm9yTm9kZShjaGlsZCkpOwogICAgICAgICBpZiAocmVzdWx0
ID09IERlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRh
a2VUcnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAocmVzdWx0ID09IERlZmluaXRlbHlGYWxz
ZSkgewogICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlRmFsc2U7Ci0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgYWJvdmUgaGFuZGxlcyB0aGUgdHJpdmlhbCBjYXNl
cyBvZiBzcGFyc2UgY29uZGl0aW9uYWwKICAgICAgICAgLy8gY29uc3RhbnQgcHJvcGFnYXRpb24s
IGJ1dCB3ZSBjYW4gZG8gYmV0dGVyOgogICAgICAgICAvLyBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUg
c291cmNlIHZhcmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKICAgICAgICAgLy8g
dGhlIGJyYW5jaC4KLSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkp
Ci0gICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKGNoaWxkKS5maWx0
ZXIoU3BlY09iamVjdCB8IFNwZWNPdGhlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnko
bm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkK
LSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBtX2Jy
YW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
ICAgICAKICAgICBjYXNlIFJldHVybjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBUaHJvdzoKQEAgLTEyMzAsMjIgKzEwMjAsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2Rl
KGNoaWxkKS52YWx1ZSgpOworICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBjaGlsZENv
bnN0LmlzTnVtYmVyKCkgJiYgdHJ5U2V0Q29uc3RhbnQobm9kZSwgY2hpbGRDb25zdCkpIHsKICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKGNoaWxkLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAg
ICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gSW50MzJVc2UpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEFi
c3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUoY2hpbGQpOworICAgICAgICBBYnN0cmFjdFZh
bHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAKICAgICAgICAgLy8g
TkIuIFRoZSBtb3JlIGNhbm9uaWNhbCB3YXkgb2Ygd3JpdGluZyB0aGlzIHdvdWxkIGhhdmUgYmVl
bjoKQEAgLTEyNzUsMzkgKzEwNjEsMTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOwogICAgICAgICB9CiAg
ICAgICAgIGRlc3RpbmF0aW9uLnNldCh0eXBlKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgU3Ry
Q2F0OgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXQoU3BlY1N0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
Y2FzZSBOZXdBcnJheToKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
c3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAg
QVNTRVJUKCFub2RlLT5udW1DaGlsZHJlbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsg
KytvcGVyYW5kSW5kZXgpCi0gICAgICAgICAgICAgICAgZm9yTm9kZShtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZEluZGV4XSkuZmlsdGVyKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBv
cGVyYW5kSW5kZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSW5kZXhdKS5maWx0ZXIoU3BlY1JlYWxOdW1iZXIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTEzMjAsMTkgKzEw
ODIsMTYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogCiAgICAg
Y2FzZSBOZXdBcnJheVdpdGhTaXplOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwot
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0FycmF5KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJl
cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdl
eHA6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+cmVnRXhw
U3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIE5v
ZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICBBYnN0cmFjdFZhbHVl
JiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgCkBAIC0xMzQxLDM4
ICsxMTAwLDMxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgIC8vIG9iamVjdCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRo
aW5rIHRoaXMgY2FzZSB3aWxsCiAgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWlu
LCB5b3UgbmV2ZXIga25vdy4KICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAg
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsgLy8gVGVsbCB0aGUgY29uc3RhbnQgZm9sZGVyIHRvIHR1cm4gdGhpcyBp
bnRvIElkZW50aXR5LgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNP
dGhlclNwZWN1bGF0aW9uKGNoaWxkLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBzb3Vy
Y2UuZmlsdGVyKFNwZWNPdGhlcik7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisgICAgICAgIGNhc2UgT3RoZXJVc2U6CiAgICAgICAgICAgICBkZXN0aW5hdGlv
bi5zZXQoU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlv
bigpKSkgewotICAgICAgICAgICAgc291cmNlLmZpbHRlcihTcGVjT2JqZWN0KTsKKyAgICAgICAg
Y2FzZSBPYmplY3RVc2U6CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICBkZXN0
aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLm1lcmdlKFNwZWNPYmpl
Y3RPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOwotICAg
ICAgICBkZXN0aW5hdGlvbi5tZXJnZShTcGVjT2JqZWN0T3RoZXIpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
c291cmNlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUm
IGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlKTsKLSAgICAgICAgCi0gICAgICAgIG5vZGUtPnNl
dENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKHNvdXJjZS5tX3R5cGUpKTsKLSAgICAgICAgICAg
IAotICAgICAgICBzb3VyY2UuZmlsdGVyKFNwZWNGdW5jdGlvbik7Ci0gICAgICAgIGRlc3RpbmF0
aW9uLnNldChTcGVjRmluYWxPYmplY3QpOworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChTcGVj
RmluYWxPYmplY3QpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTM4MSwz
NiArMTEzMywzMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdPYmplY3Q6Ci0gICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChub2RlLT5zdHJ1Y3R1cmUo
KSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgICAgICBub2RlLT5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKICAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKTsKICAgICAgICAgbV9o
YXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IFRlYXJPZmZBY3RpdmF0aW9uOgogICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKLSAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8vIERvZXMgbm90aGluZyB0aGF0IGlz
IHVzZXItdmlzaWJsZS4KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENoZWNrQXJndW1lbnRz
Tm90Q3JlYXRlZDoKICAgICAgICAgaWYgKGlzRW1wdHlTcGVjdWxhdGlvbigKICAgICAgICAgICAg
ICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFy
Z3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7Ci0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAg
ZWxzZQogICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIApAQCAtMTQzMCw3ICsxMTc3LDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50c0xlbmd0aFNhZmU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRo
ZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQgb24g
dGhlIGxlbmd0aCBwcm9wZXJ0eS4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmln
aW4sIGluZGV4SW5CbG9jayk7CkBAIC0xNDQ0LDcgKzExOTAsNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4
ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6
ZQogICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVw
IGJlaW5nIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHRoZQogICAgICAgICAvLyBBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLgotICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKQEAgLTE0NTMsOCArMTE5OCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVy
cyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAg
ICAgICAvLyBhIGdldHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Ci0gICAgICAg
IC8vIEJ1dCB3ZSBkbyBzcGVjdWxhdGUgdGhhdCB0aGUgaW5kZXggaXMgYW4gaW50ZWdlci4KLSAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
IC8vIEFuZCB0aGUgcmVzdWx0IGlzIHVua25vd24uCiAgICAgICAgIGZvck5vZGUobm9kZSkubWFr
ZVRvcCgpOwogICAgICAgICBicmVhazsKQEAgLTE0NjIsMjkgKzEyMDUsMjQgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAg
ICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hl
Y2s6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5m
dW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0Q2FsbGVlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXQoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgU2V0Q2FsbGVlOgogICAgIGNhc2UgU2V0TXlTY29wZToKLSAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRTY29wZTogLy8gRklYTUU6IFdlIGNvdWxkIGdldCByaWQgb2YgdGhlc2UgaWYgd2Uga25v
dyB0aGF0IHRoZSBKU0Z1bmN0aW9uIGlzIGEgY29uc3RhbnQuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYyMDIKICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgY2Fz
ZSBTa2lwVG9wU2NvcGU6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChTcGVjQ2VsbE90aGVyKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIFNraXBTY29wZTogewotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAg
ICAgICAgIGlmIChjaGlsZCAmJiB0cnlTZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxK
U1Njb3BlKj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKSkgewogICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7CkBAIC0xNDk1LDE4ICsxMjMzLDE0IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAKICAgICBjYXNlIEdldFNjb3BlUmVn
aXN0ZXJzOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKLSAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2Rl
KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgR2V0U2NvcGVkVmFyOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTY29wZWRWYXI6Ci0gICAgICAgIG5vZGUtPnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICBjbG9iYmVyQ2FwdHVyZWRWYXJzKG5vZGUtPmNvZGVPcmln
aW4pOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTUxOCw4ICsxMjUyLDYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5maWx0ZXIoU3BlY0NlbGwpOwotCiAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKICAg
ICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9nbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsCkBAIC0xNTU1LDcgKzEyODcsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIC8vIG1vcmUgdGhvcm91Z2hseS4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjIwMAogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQg
ZWxpbWluYXRlIHRoZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVlIHRoYXQg
Zmxvd3MgaW50byB0aGlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA2MjAxCi0gICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTE1NjQsNiArMTI5NSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewogICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1
cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCiAgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFTU0VSVCgh
KHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2
ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KICAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hl
Y2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCiAgICAg
ICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQg
Zm9sZGluZyBwaGFzZSBzaG91bGQKICAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBv
aW50IGluc3RlYWQuCkBAIC0xNTcxLDkgKzEzMDMsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoCi0gICAgICAgICAgICAhdmFsdWUu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICB8fCAh
aXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSk7CisgICAgICAgIGlmICghdmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgdmFsdWUuZmlsdGVyKHNldCk7CiAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTE1OTEsNyArMTMyMiw2
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8g
aW5maW5pdHkgb2Ygc3RydWN0dXJlcy4KICAgICAgICAgQVNTRVJUKHZhbHVlLm1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkp
KSk7CiAgICAgICAgIAotICAgICAgICBBU1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2
ZSBwcm92ZW4gbXVzdC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24g
dG8gYmUgYmFkLgogICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS0+c3RydWN0dXJlKCkpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0
cnVlKTsKQEAgLTE2MDAsNyArMTMzMCw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNh
c2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleElu
QmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKQEAgLTE2MTAsMTQgKzEzMzks
MTEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2Ug
R2V0QnV0dGVyZmx5OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2Fz
ZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KCFp
c0NlbGxTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKLSAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCB0aGlzIGlz
IGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlWYWwpIHRoYXQgYWx3YXlzIGV4aXQs
IHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0byBiZSBjbGV2ZXIgaGVyZS4KQEAg
LTE2MzAsNyArMTM1Niw2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5maWx0ZXIoU3BlY0FyZ3VtZW50cyk7CkBAIC0x
NjczLDE1ICsxMzk4LDExIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsK
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS0+
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lvbigpID09IEFycmF5OjpDb252ZXJ0
CiAgICAgICAgICAgICB8fCBub2RlLT5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6
OlJhZ2VDb252ZXJ0KTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMobm9kZS0+YXJy
YXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKQEAgLTE2OTQsMzUgKzE0MTUsMjEgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9mb3VuZENvbnN0
YW50cyA9IHRydWU7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlm
IChub2RlLT5jaGlsZDIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2sp
OwogICAgICAgICB2YWx1ZS5maWx0ZXIoc2V0KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9
IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6IHsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZv
ck5vZGUobm9kZSkuY2xlYXIoKTsKICAgICAgICAgYnJlYWs7IAogICAgIH0KLSAgICBjYXNlIEdl
dEJ5T2Zmc2V0OgotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0
KCkpIHsKLSAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoIWlzQ2VsbFNwZWN1bGF0aW9uKGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgfQorICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6IHsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFr
OworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAg
Ym9vbCBjYW5FeGl0ID0gZmFsc2U7Ci0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0
b3JhZ2VSZXN1bHQoKSkgewotICAgICAgICAgICAgY2FuRXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRp
b24oZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fu
RXhpdCB8PSAhaXNDZWxsU3BlY3VsYXRpb24oZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
KTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdChjYW5FeGl0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAgICAgCkBAIC0xNzMxLDcgKzE0MzgsNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigp
KSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIEFT
U0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTc2NiwxMiArMTQ3MiwxMCBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
PmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIApAQCAtMTc4MSwzNCArMTQ4NSwyMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICBj
YXNlIFB1dEdsb2JhbFZhckNoZWNrOgotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBw
cm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIC8vIEFnYWluLCBzYWRseSwgd2UgZG9uJ3Qg
cHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJbnN0YW5jZU9mCi0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIGFwcGVhcnMgYnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9l
cyBhbiB1bmNvbmRpdGlvbmFsIGNlbGwKLSAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKLSAgICAgICAgaWYgKCEobm9kZS0+Y2hp
bGQxKCktPnByZWRpY3Rpb24oKSAmIH5TcGVjQ2VsbCkgJiYgIShmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUgJiB+U3BlY0NlbGwpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoU3BlY0Jvb2xlYW4p
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2Ug
Rmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
ZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2lu
dDoKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgpAQCAtMTgzNiw3ICsxNTI5LDYgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAg
ICAgY2FzZSBOb3A6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKLSAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIExhc3RO
b2RlVHlwZToKQEAgLTE4NDcsNiArMTUzOSwyMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgcmV0dXJuIG1faXNWYWxpZDsKIH0KIAorYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2spCit7CisgICAgcmV0
dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbV9ibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KSk7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxv
Y2spCit7CisgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAg
aWYgKCFzdGFydEV4ZWN1dGluZyhub2RlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgZXhlY3V0ZUVkZ2VzKG5vZGUpOworICAgIHJldHVybiBleGVjdXRlRWZmZWN0cyhpbmRleElu
QmxvY2ssIG5vZGUpOworfQorCiBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyV29y
bGQoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKQog
ewogICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29kZU9yaWdpbik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQzNTYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OCw3ICsxNTgsNTIgQEAgcHVibGljOgogICAgIC8vIGlmIGV4ZWN1dGlvbiBz
aG91bGQgY29udGludWUgcGFzdCB0aGlzIG5vZGUuIE5vdGFibHksIGl0IHdpbGwgcmV0dXJuIHRy
dWUKICAgICAvLyBmb3IgYmxvY2sgdGVybWluYWxzLCBzbyBsb25nIGFzIHRob3NlIHRlcm1pbmFs
cyBhcmUgbm90IFJldHVybiBvciB2YXJpYW50cwogICAgIC8vIG9mIFRocm93LgotICAgIGJvb2wg
ZXhlY3V0ZSh1bnNpZ25lZCk7CisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8g
YmUgZXF1aXZhbGVudCB0byBkb2luZzoKKyAgICAvLworICAgIC8vIGlmIChzdGF0ZS5zdGFydEV4
ZWN1dGluZyhpbmRleCkpIHsKKyAgICAvLyAgICAgc3RhdGUuZXhlY3V0ZUVkZ2VzKGluZGV4KTsK
KyAgICAvLyAgICAgcmVzdWx0ID0gc3RhdGUuZXhlY3V0ZUVmZmVjdHMoaW5kZXgpOworICAgIC8v
IH0gZWxzZQorICAgIC8vICAgICByZXN1bHQgPSB0cnVlOworICAgIGJvb2wgZXhlY3V0ZSh1bnNp
Z25lZCBpbmRleEluQmxvY2spOworICAgIAorICAgIC8vIEluZGljYXRlIHRoZSBzdGFydCBvZiBl
eGVjdXRpb24gb2YgdGhlIG5vZGUuIEl0IHJlc2V0cyBhbnkgc3RhdGUgaW4gdGhlIG5vZGUsCisg
ICAgLy8gdGhhdCBpcyBwcm9ncmVzc2l2ZWx5IGJ1aWx0IHVwIGJ5IGV4ZWN1dGVFZGdlcygpIGFu
ZCBleGVjdXRlRWZmZWN0cygpLiBJbgorICAgIC8vIHBhcnRpY3VsYXIsIHRoaXMgcmVzZXRzIGNh
bkV4aXQoKSwgc28gaWYgeW91IHdhbnQgdG8gImtub3ciIGJldHdlZW4gY2FsbHMgb2YKKyAgICAv
LyBzdGFydEV4ZWN1dGluZygpIGFuZCBleGVjdXRlRWRnZXMoKS9FZmZlY3RzKCkgd2hldGhlciB0
aGUgbGFzdCBydW4gb2YgdGhlCisgICAgLy8gYW5hbHlzaXMgY29uY2x1ZGVkIHRoYXQgdGhlIG5v
ZGUgY2FuIGV4aXQsIHlvdSBzaG91bGQgcHJvYmFibHkgc2V0IHRoYXQKKyAgICAvLyBpbmZvcm1h
dGlvbiBhc2lkZSBwcmlvciB0byBjYWxsaW5nIHN0YXJ0RXhlY3V0aW5nKCkuCisgICAgYm9vbCBz
dGFydEV4ZWN1dGluZyhOb2RlKik7CisgICAgYm9vbCBzdGFydEV4ZWN1dGluZyh1bnNpZ25lZCBp
bmRleEluQmxvY2spOworICAgIAorICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgZWRnZXMg
b2YgdGhlIGdpdmVuIG5vZGUuIFRoaXMgcnVucyBmaWx0ZXJFZGdlQnlVc2UoKQorICAgIC8vIG9u
IGFsbCBlZGdlcyBvZiB0aGUgbm9kZS4gWW91IGNhbiBza2lwIHRoaXMgc3RlcCwgaWYgeW91IGhh
dmUgYWxyZWFkeSB1c2VkCisgICAgLy8gZmlsdGVyRWRnZUJ5VXNlKCkgKG9yIHNvbWUgZXF1aXZh
bGVudCkgb24gZWFjaCBlZGdlLgorICAgIHZvaWQgZXhlY3V0ZUVkZ2VzKE5vZGUqKTsKKyAgICB2
b2lkIGV4ZWN1dGVFZGdlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIAorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBmaWx0ZXJFZGdlQnlVc2UoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQorICAg
IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkp
IHsKKyAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICBjYXNlIEtub3duTnVtYmVy
VXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgIEFTU0VSVCghKGZv
ck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAKKyAgICAgICAg
ZmlsdGVyQnlUeXBlKG5vZGUsIGVkZ2Uubm9kZSgpLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2lu
ZCgpKSk7CisgICAgfQorICAgIAorICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgZWZmZWN0
cyBvZiB0aGUgZ2l2ZW4gbm9kZS4gVGhpcyBjaGFuZ2VzIHRoZSBhYnN0cmFjdAorICAgIC8vIHN0
YXRlIGFzc3VtaW5nIHRoYXQgZWRnZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZmlsdGVyZWQuCisgICAg
Ym9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIGJvb2wgZXhl
Y3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKik7CiAgICAgCiAgICAgLy8g
RGlkIHRoZSBsYXN0IGV4ZWN1dGVkIG5vZGUgY2xvYmJlciB0aGUgd29ybGQ/CiAgICAgYm9vbCBk
aWRDbG9iYmVyKCkgY29uc3QgeyByZXR1cm4gbV9kaWRDbG9iYmVyOyB9CkBAIC0xOTEsNTAgKzIz
Niw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdl
ZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJj
ZSwgTm9kZSogZGVzdGluYXRpb25Ob2RlLCBOb2RlKiBzb3VyY2VOb2RlKTsKICAgICAKLSAgICB2
b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSogbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBm
YWxzZSkKLSAgICB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmb3JjZUNhbkV4aXQg
fHwgIWlzSW50MzJTcGVjdWxhdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOwotICAgICAgICBjaGls
ZFZhbHVlLmZpbHRlcihTcGVjSW50MzIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0
ZU51bWJlclVuYXJ5KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBj
aGlsZFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUtPnNldENh
bkV4aXQoIWlzTnVtYmVyU3BlY3VsYXRpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKLSAgICAgICAg
Y2hpbGRWYWx1ZS5maWx0ZXIoU3BlY051bWJlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3Bl
Y3VsYXRlQm9vbGVhblVuYXJ5KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBYnN0cmFjdFZh
bHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIG5vZGUt
PnNldENhbkV4aXQoIWlzQm9vbGVhblNwZWN1bGF0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7Ci0g
ICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFNwZWNCb29sZWFuKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzcGVjdWxhdGVJbnQzMkJpbmFyeShOb2RlKiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9
IGZhbHNlKQotICAgIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTIg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCgKLSAg
ICAgICAgICAgIGZvcmNlQ2FuRXhpdAotICAgICAgICAgICAgfHwgIWlzSW50MzJTcGVjdWxhdGlv
bihjaGlsZFZhbHVlMS5tX3R5cGUpCi0gICAgICAgICAgICB8fCAhaXNJbnQzMlNwZWN1bGF0aW9u
KGNoaWxkVmFsdWUyLm1fdHlwZSkpOwotICAgICAgICBjaGlsZFZhbHVlMS5maWx0ZXIoU3BlY0lu
dDMyKTsKLSAgICAgICAgY2hpbGRWYWx1ZTIuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KE5vZGUqIG5vZGUpCi0gICAgewotICAg
ICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9kZS0+Y2hp
bGQyKCkpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0KAotICAgICAgICAgICAgIWlzTnVtYmVy
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZTEubV90eXBlKQotICAgICAgICAgICAgfHwgIWlzTnVtYmVy
U3BlY3VsYXRpb24oY2hpbGRWYWx1ZTIubV90eXBlKSk7Ci0gICAgICAgIGNoaWxkVmFsdWUxLmZp
bHRlcihTcGVjTnVtYmVyKTsKLSAgICAgICAgY2hpbGRWYWx1ZTIuZmlsdGVyKFNwZWNOdW1iZXIp
OwotICAgIH0KLSAgICAKICAgICBlbnVtIEJvb2xlYW5SZXN1bHQgewogICAgICAgICBVbmtub3du
Qm9vbGVhblJlc3VsdCwKICAgICAgICAgRGVmaW5pdGVseUZhbHNlLApAQCAtMjU5LDYgKzI2MCwx
NyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGZpbHRlckJ5VHlwZShOb2RlKiBub2RlLCBOb2RlKiBjaGlsZCwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShjaGlsZCk7CisgICAgICAgIGlmICh2YWx1ZS5tX3R5cGUgJiB+dHlwZSkKKyAgICAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIHZhbHVlLmZpbHRlcih0eXBl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2ZXJpZnlFZGdlKE5vZGUqLCBFZGdlKTsKKyAgICB2
b2lkIHZlcmlmeUVkZ2VzKE5vZGUqKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OwogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE0MzU2MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzQsNiArMjM0LDkgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIHZvaWQgZmls
dGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBtX3R5cGUgbm90
CisgICAgICAgIC8vIGhhdmluZyBzdHJ1Y3R1cmVzLCBhcnJheSBtb2Rlcywgb3IgYSBzcGVjaWZp
YyB2YWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwOTY2MwogICAgICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0
dXJlcygpOwogICAgICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1
Y3R1cmVzKCk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAko
cmV2aXNpb24gMTQzNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2Vu
Y3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDYgQEAgcHVibGljOgogICAgIEFk
amFjZW5jeUxpc3QoKSB7IH0KICAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9raW5kKGtpbmQpCi0jZW5kaWYKICAgICB7
CiAgICAgICAgIGlmIChraW5kID09IFZhcmlhYmxlKSB7CiAgICAgICAgICAgICBtX3dvcmRzWzBd
Lm1fZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKQEAgLTU3LDE5ICs1NCwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQsIE5vZGUq
IGNoaWxkMSwgTm9kZSogY2hpbGQyLCBOb2RlKiBjaGlsZDMpCi0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgICAgICA6IG1fa2luZChGaXhlZCkKLSNlbmRpZgorICAgIEFkamFjZW5jeUxpc3QoS2lu
ZCBraW5kLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChraW5kLCBraW5kID09IEZpeGVkKTsKICAgICAgICAgaW5pdGlh
bGl6ZShjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKICAgICB9CiAgICAgCiAgICAgQWRqYWNlbmN5
TGlzdChLaW5kIGtpbmQsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVu
KQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgOiBtX2tpbmQoVmFyaWFibGUpCi0jZW5k
aWYKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBWYXJpYWJsZSk7
CiAgICAgICAgIHNldEZpcnN0Q2hpbGQoZmlyc3RDaGlsZCk7CkBAIC03OSwyMSArNzAsMTggQEAg
cHVibGljOgogICAgIGNvbnN0IEVkZ2UmIGNoaWxkKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoaSA8IFNpemUpOwotICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVk
KTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CiAgICAgfSAgICAKICAgICAKICAgICBFZGdl
JiBjaGlsZCh1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBTaXplKTsKLSAg
ICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CiAgICAgICAgIHJldHVybiBtX3dvcmRzW2ld
OwogICAgIH0KICAgICAKICAgICB2b2lkIHNldENoaWxkKHVuc2lnbmVkIGksIEVkZ2Ugbm9kZVVz
ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgU2l6ZSk7Ci0gICAgICAgIEFTU0VSVChtX2tp
bmQgPT0gRml4ZWQpOwogICAgICAgICBtX3dvcmRzW2ldID0gbm9kZVVzZTsKICAgICB9CiAgICAg
CkBAIC0xMjUsOSArMTEzLDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXQoKQogICAg
IHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIG1fa2luZCA9IEZpeGVkOwotI2VuZGlm
CiAgICAgICAgIGluaXRpYWxpemUoKTsKICAgICB9CiAgICAgCkBAIC0xNDIsMzQgKzEyNywyNCBA
QCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBmaXJzdENoaWxkKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAgICByZXR1cm4gbV93b3Jkc1sw
XS5tX2VuY29kZWRXb3JkOwogICAgIH0KICAgICB2b2lkIHNldEZpcnN0Q2hpbGQodW5zaWduZWQg
Zmlyc3RDaGlsZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwog
ICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBmaXJzdENoaWxkOwogICAgIH0KICAg
ICAKICAgICB1bnNpZ25lZCBudW1DaGlsZHJlbigpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NF
UlQobV9raW5kID09IFZhcmlhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fd29yZHNbMV0ubV9lbmNv
ZGVkV29yZDsKICAgICB9CiAgICAgdm9pZCBzZXROdW1DaGlsZHJlbih1bnNpZ25lZCBudW1DaGls
ZHJlbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOwogICAgICAg
ICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBudW1DaGlsZHJlbjsKICAgICB9CiAgICAgCi0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQotI2VuZGlmCiBwcml2YXRlOgogICAgIEVkZ2UgbV93b3Jkc1tTaXplXTsKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgS2luZCBtX2tpbmQ7Ci0jZW5kaWYKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2Nh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0
b3IuaAkocmV2aXNpb24gMTQzNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogLy8gICBhbnl0aGluZy4gWW91IGNhbiBqdXN0IGNhbGwgZnJl
ZUFsbCgpIGluc3RlYWQuCiAvLyAtIFlvdSBjYWxsIGZyZWUoKSBvbiBhbGwgVCdzIHRoYXQgeW91
IGFsbG9jYXRlZCwgYW5kIG5ldmVyIHVzZSBmcmVlQWxsKCkuCiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisvLyBmb3JjZWRDZWxsU2l6ZTogc2V0IHRoaXMgdG8gMCBpZiB5b3UncmUgaGFwcHkgd2l0
aCB0aGUgZGVmYXVsdCBhbGlnbm1lbnQsIG9yIHNldCBpdAorLy8gdG8gYSBub24temVybyB2YWx1
ZSBpZiB5b3Ugd2FudCB0byBmb3JjaWJseSBhbGlnbiB0aGUgYWxsb2NhdGlvbnMgdG8gYSBjZXJ0
YWluCisvLyB2YWx1ZS4gV2hlbiB5b3UgZG8gdGhpcywgQWxsb2NhdG9yIHdpbGwgQVNTRVJUIHRo
YXQgZm9yY2VkQ2VsbEFsaWdubWVudCA+PSBzaXplb2YoVCkuCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+CiBjbGFzcyBBbGxvY2F0b3IgewogcHVi
bGljOgogICAgIEFsbG9jYXRvcigpOwpAQCAtNjMsMTMgKzY3LDI0IEBAIHByaXZhdGU6CiAgICAg
dm9pZCogYnVtcEFsbG9jYXRlKCk7CiAgICAgdm9pZCogZnJlZUxpc3RBbGxvY2F0ZSgpOwogICAg
IHZvaWQqIGFsbG9jYXRlU2xvdygpOwotCisgICAgCisgICAgc3RhdGljIHNpemVfdCBjZWxsU2l6
ZSgpCisgICAgeworICAgICAgICBpZiAoIWZvcmNlZENlbGxBbGlnbm1lbnQpCisgICAgICAgICAg
ICByZXR1cm4gc2l6ZW9mKFQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGZvcmNlZENlbGxB
bGlnbm1lbnQgPj0gc2l6ZW9mKFQpKTsKKyAgICAgICAgcmV0dXJuIGZvcmNlZENlbGxBbGlnbm1l
bnQ7CisgICAgfQorICAgIAogICAgIHN0cnVjdCBSZWdpb24gewogICAgICAgICBzdGF0aWMgc2l6
ZV90IHNpemUoKSB7IHJldHVybiA2NCAqIEtCOyB9Ci0gICAgICAgIHN0YXRpYyBzaXplX3QgaGVh
ZGVyU2l6ZSgpIHsgcmV0dXJuIHN0ZDo6bWF4KHNpemVvZihSZWdpb24pLCBzaXplb2YoVCkpOyB9
Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpIHsgcmV0
dXJuIChzaXplKCkgLSBoZWFkZXJTaXplKCkpIC8gc2l6ZW9mKFQpOyB9Ci0gICAgICAgIFQqIGRh
dGEoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykg
KyBoZWFkZXJTaXplKCkpOyB9Ci0gICAgICAgIGJvb2wgaXNJblRoaXNSZWdpb24oY29uc3QgVCog
cG9pbnRlcikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvaW50ZXIgLSBkYXRhKCkp
IDwgbnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsgfQorICAgICAgICBzdGF0aWMgc2l6ZV90IGhl
YWRlclNpemUoKSB7IHJldHVybiBzdGQ6Om1heChzaXplb2YoUmVnaW9uKSwgY2VsbFNpemUoKSk7
IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIG51bWJlck9mVGhpbmdzUGVyUmVnaW9uKCkgeyBy
ZXR1cm4gKHNpemUoKSAtIGhlYWRlclNpemUoKSkgLyBjZWxsU2l6ZSgpOyB9CisgICAgICAgIHN0
YXRpYyBzaXplX3QgcGF5bG9hZFNpemUoKSB7IHJldHVybiBudW1iZXJPZlRoaW5nc1BlclJlZ2lv
bigpICogY2VsbFNpemUoKTsgfQorICAgICAgICBjaGFyKiBwYXlsb2FkQmVnaW4oKSB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgaGVhZGVyU2l6ZSgpOyB9CisgICAgICAgIGNo
YXIqIHBheWxvYWRFbmQoKSB7IHJldHVybiBwYXlsb2FkQmVnaW4oKSArIHBheWxvYWRTaXplKCk7
IH0KKyAgICAgICAgYm9vbCBpc0luVGhpc1JlZ2lvbihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxzaXplX3Q+KGJpdHdpc2VfY2FzdDxjaGFyKj4ocG9pbnRlcikgLSBwYXls
b2FkQmVnaW4oKSkgPCBwYXlsb2FkU2l6ZSgpOyB9CiAgICAgICAgIHN0YXRpYyBSZWdpb24qIHJl
Z2lvbkZvcihjb25zdCBUKiBwb2ludGVyKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8UmVnaW9uKj4o
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiB+KHNpemUoKSAtIDEpKTsgfQogICAg
ICAgICAKICAgICAgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIG1fYWxsb2NhdGlvbjsKQEAgLTgy
LDI2ICs5NywyNiBAQCBwcml2YXRlOgogICAgIAogICAgIFJlZ2lvbiogbV9yZWdpb25IZWFkOwog
ICAgIHZvaWQqKiBtX2ZyZWVMaXN0SGVhZDsKLSAgICBUKiBtX2J1bXBFbmQ7Ci0gICAgdW5zaWdu
ZWQgbV9idW1wUmVtYWluaW5nOworICAgIGNoYXIqIG1fYnVtcEVuZDsKKyAgICBzaXplX3QgbV9i
dW1wUmVtYWluaW5nOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBBbGxvY2F0
b3I8VD46OkFsbG9jYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRD
ZWxsQWxpZ25tZW50PgoraW5saW5lIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6
QWxsb2NhdG9yKCkKICAgICA6IG1fcmVnaW9uSGVhZCgwKQogICAgICwgbV9mcmVlTGlzdEhlYWQo
MCkKICAgICAsIG1fYnVtcFJlbWFpbmluZygwKQogewogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotaW5saW5lIEFsbG9jYXRvcjxUPjo6fkFsbG9jYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgoraW5saW5lIEFsbG9jYXRvcjxULCBmb3Jj
ZWRDZWxsQWxpZ25tZW50Pjo6fkFsbG9jYXRvcigpCiB7CiAgICAgcmVzZXQoKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLUFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2NhdG9yPFQ+OjphbGxv
Y2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50
PgorQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46
OmFsbG9jYXRlKCkKIHsKICAgICB2b2lkKiByZXN1bHQgPSBidW1wQWxsb2NhdGUoKTsKICAgICBp
ZiAoTElLRUxZKCEhcmVzdWx0KSkKQEAgLTEwOSw4ICsxMjQsOCBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhCiAgICAgcmV0dXJuIGZyZWVMaXN0QWxsb2NhdGUoKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpmcmVlKFQqIG9i
amVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+
Cit2b2lkIEFsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50Pjo6ZnJlZShUKiBvYmplY3Qp
CiB7CiAgICAgb2JqZWN0LT5+VCgpOwogICAgIApAQCAtMTE5LDggKzEzNCw4IEBAIHZvaWQgQWxs
b2NhdG9yPFQ+OjpmcmVlKFQqIG9iamVjdCkKICAgICBtX2ZyZWVMaXN0SGVhZCA9IGNlbGw7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFsbCgpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50Pgordm9pZCBB
bGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmZyZWVBbGwoKQogewogICAgIGlmICgh
bV9yZWdpb25IZWFkKSB7CiAgICAgICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKQEAgLTE0
Miw4ICsxNTcsOCBAQCB2b2lkIEFsbG9jYXRvcjxUPjo6ZnJlZUFsbCgpCiAgICAgc3RhcnRCdW1w
aW5nSW4obV9yZWdpb25IZWFkKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgQWxs
b2NhdG9yPFQ+OjpyZXNldCgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRD
ZWxsQWxpZ25tZW50Pgordm9pZCBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OnJl
c2V0KCkKIHsKICAgICBmcmVlUmVnaW9uc1N0YXJ0aW5nQXQobV9yZWdpb25IZWFkKTsKICAgICAK
QEAgLTE1MiwzOCArMTY3LDM4IEBAIHZvaWQgQWxsb2NhdG9yPFQ+OjpyZXNldCgpCiAgICAgbV9i
dW1wUmVtYWluaW5nID0gMDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuc2lnbmVkIEFs
bG9jYXRvcjxUPjo6aW5kZXhPZihjb25zdCBUKiBvYmplY3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxpZ25tZW50PgordW5zaWduZWQgQWxsb2NhdG9yPFQsIGZv
cmNlZENlbGxBbGlnbm1lbnQ+OjppbmRleE9mKGNvbnN0IFQqIG9iamVjdCkKIHsKICAgICB1bnNp
Z25lZCBiYXNlSW5kZXggPSAwOwogICAgIGZvciAoUmVnaW9uKiByZWdpb24gPSBtX3JlZ2lvbkhl
YWQ7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQpIHsKICAgICAgICAgaWYgKHJlZ2lv
bi0+aXNJblRoaXNSZWdpb24ob2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZXgg
KyAob2JqZWN0IC0gcmVnaW9uLT5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIGJhc2VJbmRl
eCArIChiaXR3aXNlX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSByZWdpb24tPnBheWxvYWRCZWdpbigp
KSAvIGNlbGxTaXplKCk7CiAgICAgICAgIGJhc2VJbmRleCArPSBSZWdpb246Om51bWJlck9mVGhp
bmdzUGVyUmVnaW9uKCk7CiAgICAgfQogICAgIENSQVNIKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1BbGxvY2F0b3I8VD4qIEFsbG9jYXRvcjxUPjo6YWxsb2Nh
dG9yT2YoY29uc3QgVCogb2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9y
Y2VkQ2VsbEFsaWdubWVudD4KK0FsbG9jYXRvcjxULCBmb3JjZWRDZWxsQWxpZ25tZW50PiogQWxs
b2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjphbGxvY2F0b3JPZihjb25zdCBUKiBvYmpl
Y3QpCiB7CiAgICAgcmV0dXJuIFJlZ2lvbjo6cmVnaW9uRm9yKG9iamVjdCktPm1fYWxsb2NhdG9y
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0
b3I8VD46OmJ1bXBBbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3Jj
ZWRDZWxsQWxpZ25tZW50PgorQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0b3I8VCwgZm9yY2Vk
Q2VsbEFsaWdubWVudD46OmJ1bXBBbGxvY2F0ZSgpCiB7Ci0gICAgaWYgKHVuc2lnbmVkIHJlbWFp
bmluZyA9IG1fYnVtcFJlbWFpbmluZykgewotICAgICAgICByZW1haW5pbmctLTsKKyAgICBpZiAo
c2l6ZV90IHJlbWFpbmluZyA9IG1fYnVtcFJlbWFpbmluZykgeworICAgICAgICByZW1haW5pbmcg
LT0gY2VsbFNpemUoKTsKICAgICAgICAgbV9idW1wUmVtYWluaW5nID0gcmVtYWluaW5nOwotICAg
ICAgICByZXR1cm4gbV9idW1wRW5kIC0gKHJlbWFpbmluZyArIDEpOworICAgICAgICByZXR1cm4g
bV9idW1wRW5kIC0gKHJlbWFpbmluZyArIGNlbGxTaXplKCkpOwogICAgIH0KICAgICByZXR1cm4g
MDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQqIEFsbG9jYXRvcjxUPjo6ZnJlZUxp
c3RBbGxvY2F0ZSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBmb3JjZWRDZWxsQWxp
Z25tZW50Pgordm9pZCogQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlTGlz
dEFsbG9jYXRlKCkKIHsKICAgICB2b2lkKiogcmVzdWx0ID0gbV9mcmVlTGlzdEhlYWQ7CiAgICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKQpAQCAtMTkyLDggKzIwNyw4IEBAIHZvaWQqIEFsbG9jYXRv
cjxUPjo6ZnJlZUxpc3RBbGxvY2F0ZSgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGZvcmNlZENlbGxBbGlnbm1lbnQ+Cit2b2lkKiBBbGxv
Y2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdubWVudD46OmFsbG9jYXRlU2xvdygpCiB7CiAgICAgQVNT
RVJUKCFtX2ZyZWVMaXN0SGVhZCk7CiAgICAgQVNTRVJUKCFtX2J1bXBSZW1haW5pbmcpOwpAQCAt
MjE2LDggKzIzMSw4IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBBbGxvY2F0b3I8
VD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdCh0eXBlbmFtZSBBbGxvY2F0b3I8VD46OlJlZ2lvbiog
cmVnaW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgZm9yY2VkQ2VsbEFsaWdubWVu
dD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpmcmVlUmVnaW9uc1N0
YXJ0aW5nQXQodHlwZW5hbWUgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1lbnQ+OjpSZWdp
b24qIHJlZ2lvbikKIHsKICAgICB3aGlsZSAocmVnaW9uKSB7CiAgICAgICAgIFJlZ2lvbiogbmV4
dFJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0OwpAQCAtMjI2LDExICsyNDEsMTEgQEAgdm9pZCBBbGxv
Y2F0b3I8VD46OmZyZWVSZWdpb25zU3RhcnRpbmdBdAogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXZvaWQgQWxsb2NhdG9yPFQ+OjpzdGFydEJ1bXBpbmdJbih0eXBlbmFtZSBBbGxv
Y2F0b3I8VD46OlJlZ2lvbiogcmVnaW9uKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQg
Zm9yY2VkQ2VsbEFsaWdubWVudD4KK3ZvaWQgQWxsb2NhdG9yPFQsIGZvcmNlZENlbGxBbGlnbm1l
bnQ+OjpzdGFydEJ1bXBpbmdJbih0eXBlbmFtZSBBbGxvY2F0b3I8VCwgZm9yY2VkQ2VsbEFsaWdu
bWVudD46OlJlZ2lvbiogcmVnaW9uKQogewotICAgIG1fYnVtcEVuZCA9IHJlZ2lvbi0+ZGF0YSgp
ICsgUmVnaW9uOjpudW1iZXJPZlRoaW5nc1BlclJlZ2lvbigpOwotICAgIG1fYnVtcFJlbWFpbmlu
ZyA9IFJlZ2lvbjo6bnVtYmVyT2ZUaGluZ3NQZXJSZWdpb24oKTsKKyAgICBtX2J1bXBFbmQgPSBy
ZWdpb24tPnBheWxvYWRFbmQoKTsKKyAgICBtX2J1bXBSZW1haW5pbmcgPSBSZWdpb246OnBheWxv
YWRTaXplKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAx
NDM1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDYgKzY5OCwxOCBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgRG9udFJl
ZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCisgICAgICAgICAgICBvcCwgY3VycmVu
dENvZGVPcmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7
CisgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kKHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdl
bmVyYXRlKQorICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9w
LCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgp
KQorICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAg
ICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCiAgICAgICAgICAg
ICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAg
ICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJl
c3VsdCk7CkBAIC03MTAsNyArNzIyLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIE5vZGUq
IHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKICAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwg
RG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2lu
KCksIGluZm8sIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgb3AsIGN1cnJl
bnRDb2RlT3JpZ2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNo
aWxkMykpOwogICAgICAgICBpZiAob3AgPT0gUGhpKQogICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIGVsc2UKQEAgLTcyNCw3ICs3MzYsNyBA
QCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2Rl
KAogICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0g
ICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzKTsKKyAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBp
bmZvMSwgaW5mbzIsIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwog
ICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZChyZXN1bHQpOwogCkBAIC0xNDY1LDcgKzE0NzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVNaW5NYXgoYm9vbCB1CiAgICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9PSAyKSB7IC8vIE1hdGgubWluKHgpCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdldChy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKTsKLSAgICAgICAgYWRkVG9HcmFw
aChDaGVja051bWJlciwgcmVzdWx0KTsKKyAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBFZGdl
KHJlc3VsdCwgTnVtYmVyVXNlKSk7CiAgICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVz
dWx0LCByZXN1bHRPcGVyYW5kLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNp
b24gMTQzNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk2OSw3ICs5NjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICAvLyBJZiB0
aGlzIGlzIGFjY2Vzc2luZyBhcmd1bWVudHMgdGhlbiBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2lu
ZyBsb2NhbHMuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVBcmd1bWVudHMoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpID09IEFycmF5OjpBcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5t
YXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKQEAgLTEwMDIsNiArMTAwMiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlIGVk
Z2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKICAgICAgICAgICAgIGlmICghZWRnZSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlZGdlLnVzZUtpbmQoKSAh
PSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBLZWVwIHRoZSB0eXBl
IGNoZWNrLgogICAgICAgICAgICAgaWYgKGVkZ2UtPmZsYWdzKCkgJiBOb2RlUmVsZXZhbnRUb09T
UikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMTAxNCwxOCAr
MTAxNiwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGVudW0gUHJl
ZGljdGlvbkhhbmRsaW5nTW9kZSB7IFJlcXVpcmVTYW1lUHJlZGljdGlvbiwgQWxsb3dQcmVkaWN0
aW9uTWlzbWF0Y2ggfTsKLSAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50
LCBQcmVkaWN0aW9uSGFuZGxpbmdNb2RlIHByZWRpY3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJl
U2FtZVByZWRpY3Rpb24pCisgICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlKiByZXBsYWNlbWVu
dCkKICAgICB7CiAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIAotICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9y
bSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0Ci0gICAgICAgIC8vIGFncmVl
LgotICAgICAgICBpZiAocHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9PSBSZXF1aXJlU2FtZVByZWRp
Y3Rpb24KLSAgICAgICAgICAgICYmIG1fY3VycmVudE5vZGUtPnByZWRpY3Rpb24oKSAhPSByZXBs
YWNlbWVudC0+cHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRh
dGFMb2dGKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY3VycmVudE5vZGUtPmluZGV4KCks
IHJlcGxhY2VtZW50LT5pbmRleCgpKTsKICNlbmRpZgpAQCAtMTIzMCw3ICsxMjI1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgICAgICAgICAgLy8gVGhpcyBpcyBz
dHJhbmdlLCBidXQgbmVjZXNzYXJ5LiBTb21lIHBoYXNlcyB3aWxsIGNvbnZlcnQgbm9kZXMgdG8g
Y29uc3RhbnRzLAogICAgICAgICAgICAgLy8gd2hpY2ggbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGVk
IGNvbnN0YW50cy4gV2UgdXNlIENTRSB0byBjbGVhbiB0aGlzIHVwLgotICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSksIEFsbG93UHJlZGljdGlvbk1pc21hdGNoKTsK
KyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MzU2MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDEyICs4Myw2IEBAIHN0cnVjdCBOb2RlUG9pbnRlclRyYWl0cyB7CiAgICAgc3RhdGlj
IHZvaWQgZHVtcChOb2RlKiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCk7CiB9OwogCi1lbnVtIFVz
ZUtpbmQgewotICAgIFVudHlwZWRVc2UsCi0gICAgRG91YmxlVXNlLAotICAgIExhc3RVc2VLaW5k
IC8vIE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBlbnVtLCBhcyBpdCBpcyB1
c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMuCi19OwotCiAvLyBVc2Ug
UmVmQ2hpbGRyZW4gaWYgdGhlIGNoaWxkIHJlZiBjb3VudHMgaGF2ZW4ndCBhbHJlYWR5IGJlZW4g
YWRqdXN0ZWQgdXNpbmcKIC8vIG90aGVyIG1lYW5zIGFuZCBlaXRoZXIgb2YgdGhlIGZvbGxvd2lu
ZyBpcyB0cnVlOgogLy8gLSBUaGUgbm9kZSB5b3UncmUgY3JlYXRpbmcgaXMgTXVzdEdlbmVyYXRl
LgpAQCAtMTA2LDE5ICsxMDAsNiBAQCBlbnVtIFJlZk5vZGVNb2RlIHsKICAgICBEb250UmVmTm9k
ZQogfTsKIAotaW5saW5lIGNvbnN0IGNoYXIqIHVzZUtpbmRUb1N0cmluZyhVc2VLaW5kIHVzZUtp
bmQpCi17Ci0gICAgc3dpdGNoICh1c2VLaW5kKSB7Ci0gICAgY2FzZSBVbnR5cGVkVXNlOgotICAg
ICAgICByZXR1cm4gIiI7Ci0gICAgY2FzZSBEb3VibGVVc2U6Ci0gICAgICAgIHJldHVybiAiZCI7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiBpbmxpbmUgYm9vbCBpc0FSTXY3cygpCiB7CiAj
aWYgQ1BVKEFQUExFX0FSTVY3UykKQEAgLTIzNiw2ICsyMTcsOCBAQCBlbnVtIFVuaWZpY2F0aW9u
U3RhdGUgewogICAgIEdsb2JhbGx5VW5pZmllZAogfTsKIAorZW51bSBPcGVyYW5kU3BlY3VsYXRp
b25Nb2RlIHsgQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24gfTsKKwogZW51bSBTcGVjdWxhdGlvbkRpcmVjdGlvbiB7IEZvcndhcmRTcGVjdWxhdGlv
biwgQmFja3dhcmRTcGVjdWxhdGlvbiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQzNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywx
MCArMTAzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3Ry
dWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQg
PSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1
bGF0aW9uKHZhbHVlLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNl
dCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50KCkgPT0gMSk7
CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBD
YXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTExNCw4ICsxMTMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlJiBzdHJ1Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmU7CiAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vic2V0T2Yoc2V0KQog
ICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24oKSkgewot
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludChzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpOworICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkg
ZmlsdGVyIG9uIGNlbGwuCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1N0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAg
IGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xNDks
MTAgKzE1MSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAg
ICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxk
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGRFZGdl
ID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVk
Z2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbihjaGlsZC0+cHJlZGljdGlvbigpKSkKKyAgICAgICAg
ICAgICAgICBpZiAoY2hpbGRFZGdlLnVzZUtpbmQoKSAhPSBDZWxsVXNlKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVy
ZSgpOwpAQCAtMTY0LDggKzE2NywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEdldEJ5
SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
ICAgICAgICAgZ2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQorICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2lt
cGxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGhhbmRsZSBw
cm90b3R5cGUgY2FzZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzODYKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFT
U0VSVChzdGF0dXMuc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgICAg
IEFTU0VSVChzdGF0dXMuY2hhaW4oKS5pc0VtcHR5KCkpOwpAQCAtMTgxLDE4ICsxODcsMjQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUuZm9yTm9kZShjaGls
ZCkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJ1
Y3R1cmUpKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250
UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBj
b2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSB7
CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBQaGFudG9tLCBjb2RlT3JpZ2luLCBj
aGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAgY2hpbGRFZGdl
LnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0
YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNo
aWxkOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVj
Tm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFZGdlKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5
U3RvcmFnZSk7CkBAIC0yMDcsOSArMjE5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNl
IFB1dEJ5SWQ6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKICAgICAgICAgICAg
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAg
ICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9k
ZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMzgsOSArMjUzLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhz
dHJ1Y3R1cmUpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRn
ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1f
dHlwZSAmIH5TcGVjQ2VsbCkgeworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgUGhh
bnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSAwOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMu
aXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkRh
dGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKApAQCAtMjY0LDM4ICsyODUs
MzggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAgICAgICAg
ICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkgewogICAgICAgICAgICAgICAg
ICAgICBjaGlsZC0+cmVmKCk7IC8vIFRoZSBjaGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3Bl
cnR5IGluZGV4LCBzbyByZWYgaXQgdG8gcmVmbGVjdCB0aGUgZG91YmxlIHVzZS4KLSAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGQ7CisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZCk7CisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRn
ZSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFp
c0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9k
ZSwgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hp
bGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPiBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZSht
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJh
bnNpdGlvbkRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgY2hpbGRFZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZs
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBjaGlsZCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpKSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0
dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBjb2RlT3Jp
Z2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hp
bGQpOworICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hp
bGRFZGdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlKTsKQEAgLTM0MCw3ICszNjEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2Rl
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGFudG9tID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9j
YWwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJp
YWJsZSksIHBoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJ
bmZvKHZhcmlhYmxlKSwgRWRnZShwaGkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGFudG9tOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IHBoYW50b207CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAg
LTM5MSwxMyArNDEyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50LAotICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1
Y3R1cmUoKSksIHdlYWtDb25zdGFudCk7CisgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJ
bmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIHdlYWtD
b25zdGFudCk7CisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2Vs
bC0+c3RydWN0dXJlKCkpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKICAgICB9CiAg
ICAgCiAgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQ0ZBIG1heSByZWFjaCBj
b25jbHVzaW9ucyBhYm91dCBjb25zdGFudHMgYmFzZWQgb24gaXRzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDM1NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw4
ICsxNDQsNiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAg
ICAgIGlmICghY2hhbmdlZCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAg
ZGZnLnJlc2V0RXhpdFN0YXRlcygpOwotICAgICAgICBwZXJmb3JtRml4dXAoZGZnKTsKICAgICAg
ICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lvbiAxNDM1NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBFZGdlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KHVzZUtpbmRUb1N0cmlu
Zyh1c2VLaW5kKCkpLCBub2RlKCkpOworICAgIGlmICh1c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkK
KyAgICAgICAgb3V0LnByaW50KHVzZUtpbmQoKSwgIjoiKTsKKyAgICBvdXQucHJpbnQobm9kZSgp
KTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE0MzU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdVc2VL
aW5kLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNjIsMTIgKzYz
LDE4IEBAIHB1YmxpYzoKICAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVz
ZUtpbmQoKSk7CiAgICAgfQogICAgIAotICAgIFVzZUtpbmQgdXNlS2luZCgpIGNvbnN0CisgICAg
VXNlS2luZCB1c2VLaW5kVW5jaGVja2VkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChu
b2RlKCkpOwogICAgICAgICB1bnNpZ25lZCBtYXNrZWQgPSBtX2VuY29kZWRXb3JkICYgKCgoMSA8
PCBzaGlmdCgpKSAtIDEpKTsKICAgICAgICAgQVNTRVJUKG1hc2tlZCA8IExhc3RVc2VLaW5kKTsK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVzZUtpbmQ+KG1hc2tlZCk7CisgICAgICAgIFVz
ZUtpbmQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VXNlS2luZD4obWFza2VkKTsKKyAgICAgICAgQVNT
RVJUKG5vZGUoKSB8fCByZXN1bHQgPT0gVW50eXBlZFVzZSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIFVzZUtpbmQgdXNlS2luZCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHVzZUtpbmRVbmNoZWNrZWQoKTsKICAgICB9
CiAgICAgdm9pZCBzZXRVc2VLaW5kKFVzZUtpbmQgdXNlS2luZCkKICAgICB7CkBAIC05Niw3ICsx
MDMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBZGphY2VuY3lMaXN0
OwogICAgIAotICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDI7IH0KKyAgICBz
dGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiA0OyB9CiAgICAgCiAgICAgc3RhdGljIHVp
bnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAxNDM1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29s
IHJ1bigpCiAgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0g
QmVmb3JlRml4cG9pbnQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFk
ZWRDUFMpOworICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKICAg
ICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzYsNTAgKzc5LDI2MiBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgR2V0QnlJ
ZDogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9maXhwb2ludFN0YXRlID4gQmVmb3JlRml4
cG9pbnQpCisgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkKKyAgICAgICAgICAg
ICAgICB8fCBtX2dyYXBoLmlzQ3JlYXRlZFRoaXNBcmd1bWVudCh2YXJpYWJsZS0+bG9jYWwoKSkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
aXNJbnQzMlNwZWN1bGF0aW9uKG5vZGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICBpZiAo
dmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAgZml4
RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSwgTnVtYmVyVXNlLCBGb3J3YXJkU3BlY3VsYXRpb24p
OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5p
ZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJl
UHJlZGljdGlvbigpOworICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0
ZWRUeXBlKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMy
VXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5
cGUpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7
CisgICAgICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBl
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEJpdEFuZDoKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6Cisg
ICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAg
Y2FzZSBCaXRVUlNoaWZ0OiB7CisgICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIGZpeEludEVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVJbnQzMlRvTnVt
YmVyOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duSW50MzJV
c2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIERvdWJsZUFzSW50MzI6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVBy
b2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKLSAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsK
LSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbiht
X2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKLSAgICAgICAg
ICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUs
IEFycmF5OjpSZWFkLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlN
b2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9m
aWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChOdW1iZXJVc2UpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkgeworICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQm9vbGVhblVzZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoTm90Q2VsbFVzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZTog
eworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDog
eworICAgICAgICAgICAgaWYgKGF0dGVtcHRUb01ha2VJbnRlZ2VyQWRkKG5vZGUpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51
bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNh
c2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgIGlmIChhdHRlbXB0VG9NYWtlSW50ZWdlckFkZChu
b2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJpdGhOZWdhdGU6IHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRo
TXVsOiB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQz
MlVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
aXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uo
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIEFyaXRoRGl2OiB7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIo
KS5ub2RlKCkpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzWDg2KCkgfHwgaXNBUk12N3MoKSkgeworICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKLSAgICAgICAgICAg
IGlmICghYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgaW5qZWN0
SW50MzJUb0RvdWJsZU5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGluamVj
dEludDMyVG9Eb3VibGVOb2RlKG5vZGUtPmNoaWxkMigpKTsKKworICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IG5lZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdy
ZSBzdGVhbGluZyB0aGVtIGZyb20KKyAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2
aXNpb24uCisgICAgICAgICAgICAgICAgTm9kZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91YmxlLCAqbm9kZSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBLbm93bk51
bWJlclVzZSksIEVkZ2UoKSwgRWRnZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIG5vZGUtPnNldE9wKEdldEFycmF5TGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBub2RlLT5jbGVh
ckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7Ci0gICAgICAgICAg
ICBtX2dyYXBoLmRlcmVmKG5vZGUpOwotICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFy
cmF5TW9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
Tm9kZSogc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIGNhc2UgQXJp
dGhNaW46CisgICAgICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsK
KyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRp
Yyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKKyAgICAgICAg
ICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhB
YnM6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQo
SW50MzJVc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGls
ZDIoKSA9IEVkZ2Uoc3RvcmFnZSk7CisgICAgICAgIGNhc2UgQXJpdGhTcXJ0OiB7CisgICAgICAg
ICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7CisgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9y
T3RoZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVj
dE9yT3RoZXJVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNh
c2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBUeXBlT2Y6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChT
dHJpbmdVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoK
KyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgor
ICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
RXE6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcUNvbnN0YW50KQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2Uobm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgIT0gQ29tcGFyZUVxKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgp
ICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxh
dGVPYmplY3RPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRV
c2VLaW5kKE9iamVjdFVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNl
S2luZChPYmplY3RPck90aGVyVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkg
eworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT2JqZWN0T3JPdGhl
clVzZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChPYmplY3RV
c2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbXBhcmVTdHJp
Y3RFcToKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXFDb25zdGFudDogeworICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpKSB7CisgICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVj
dWxhdGVTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgbm9kZS0+Y2hpbGQyKCkt
PnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkuc2V0VXNlS2luZChPYmplY3RVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigp
LnNldFVzZUtpbmQoT2JqZWN0VXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogeworICAgICAgICAgICAg
Ly8gQ3VycmVudGx5IHdlIGhhdmUgbm8gZ29vZCB3YXkgb2YgcmVmaW5pbmcgdGhlc2UuCisgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkgPT0gQXJyYXlNb2RlKEFycmF5OjpTdHJp
bmcpKTsKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5v
ZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5z
ZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAg
ICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAog
ICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKQEAgLTEyNyw3ICszNDIs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGlj
dGlvbigpLAogICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxk
MSgpLCBub2RlLT5jaGlsZDIoKSwgMik7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2Rl
KCk7CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6RG91YmxlCkBA
IC0xMzgsMTMgKzM1Myw5MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICYmICEobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVVc2VkQXNPdGhlcikpCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJy
YXlNb2RlKGFycmF5TW9kZS53aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNhbmVDaGFpbikpOwogICAg
ICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpV
bmRlY2lkZWQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKENlbGxVc2UpOyAvLyBTcGVjdWxhdGluZyBjZWxsIGR1ZSB0byByZWdpc3RlciBw
cmVzc3VyZSBvbiAzMi1iaXQuCisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLnNldFVz
ZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNl
IFN0cmluZ0NoYXJBdDoKLSAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0gICAgICAg
ICAgICAvLyBDdXJyZW50bHkgd2UgaGF2ZSBubyBnb29kIHdheSBvZiByZWZpbmluZyB0aGVzZS4K
LSAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKSA9PSBBcnJheU1vZGUoQXJyYXk6
OlN0cmluZykpOwotICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEo
KSwgbm9kZS0+Y2hpbGQyKCksIDIpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlW
YWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgRWRnZSYgY2hp
bGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UmIGNo
aWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdlJiBj
aGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworCisgICAgICAgICAgICBub2Rl
LT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5l
KAorICAgICAgICAgICAgICAgICAgICBjaGlsZDEtPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAg
ICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNoaWxk
My0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJsZXNzQXJyYXlP
cGVyYXRpb24oY2hpbGQxLCBjaGlsZDIsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLm1vZGVG
b3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJl
ZGljdGlvbnM6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICAg
ICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgLy8gRHVlIHRvIHJlZ2lzdGVyIHBy
ZXNzdXJlIG9uIDMyLWJpdCwgd2Ugc3BlY3VsYXRlIGNlbGwgYW5kCisgICAgICAgICAgICAgICAg
Ly8gaWdub3JlIHRoZSBiYXNlLWlzLW5vdC1jZWxsIGNhc2UgZW50aXJlbHkgYnkgbGV0dGluZyB0
aGUKKyAgICAgICAgICAgICAgICAvLyBiYXNlbGluZSBKSVQgaGFuZGxlIGl0LgorICAgICAgICAg
ICAgICAgIGNoaWxkMS5zZXRVc2VLaW5kKENlbGxVc2UpOworI2VuZGlmCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAg
ICBjaGlsZDEuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIGNoaWxk
Mi5zZXRVc2VLaW5kKEludDMyVXNlKTsKKyAgICAgICAgICAgICAgICBjaGlsZDMuc2V0VXNlS2lu
ZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgY2hpbGQxLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKKyAgICAgICAgICAgICAgICBjaGlsZDIuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAg
ICAgICAgICAgICAgZml4RG91YmxlRWRnZShjaGlsZDMsIFJlYWxOdW1iZXJVc2UpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAg
ICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkludDMyQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAg
ICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5Ogor
ICAgICAgICAgICAgICAgIGNoaWxkMS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAg
ICAgICAgICAgY2hpbGQyLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGlm
IChjaGlsZDMtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICAgICAg
Y2hpbGQzLnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgZml4RG91YmxlRWRnZShjaGlsZDMpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgICAgIGNoaWxkMS5zZXRVc2VL
aW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgY2hpbGQyLnNldFVzZUtpbmQoSW50
MzJVc2UpOworICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoY2hpbGQzKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgY2hp
bGQxLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICBjaGlsZDIuc2V0
VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xNjMsMTEg
KzQ1NywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpICYgU3BlY0NlbGwsCiAgICAgICAgICAgICAgICAgICAgIFNwZWNJbnQzMiwK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSkpOwotICAg
ICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAyKTsK
KyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIEVkZ2UoKSwg
bm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChL
bm93bkNlbGxVc2UpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdl
KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzYsNDkgKzQ3NCwyNyBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheVBvcDogewot
ICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgRWRnZSgpLCAx
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBCaXRBbmQ6Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0WG9yOgot
ICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAg
IGNhc2UgQml0VVJTaGlmdDogewotICAgICAgICAgICAgZml4SW50RWRnZShub2RlLT5jaGlsZHJl
bi5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhJbnRFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgIGNh
c2UgQ29tcGFyZUxlc3NFcToKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogewot
ICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgaWYgKCFOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMSk7CisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgp
LCBFZGdlKCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNl
dFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZU51bWJlcigpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgwKTsKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgICAgICBjYXNlIFJlZ0V4cFRl
c3Q6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7Cisg
ICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEJyYW5jaDog
ewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51
bWJlcigpKQotICAgICAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEJvb2xlYW5Vc2UpOworICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkK
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9iamVjdE9yT3RoZXJV
c2UpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKElu
dDMyVXNlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVj
dWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKG5vZGUtPmNoaWxk
MSgpKTsKIAogICAgICAgICAgICAgTm9kZSogbG9naWNhbE5vdCA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsTm90LT5vcCgpID09IExvZ2ljYWxOb3QKQEAg
LTI2MSwxNDkgKzUzNywyNjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAg
aWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGZpeERvdWJsZUVkZ2UoMCwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgY2Fz
ZSBUb1ByaW1pdGl2ZTogeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNl
S2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN0cmluZyBzcGVjdWxh
dGlvbiBoZXJlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMDE3NQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0g
ICAgICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQor
ICAgICAgICBjYXNlIE5ld0FycmF5OiB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUpOyBpLS07KSB7CisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0SW5kZXhpbmdUeXBlKAorICAgICAgICAgICAgICAgICAgICBsZWFzdFVwcGVyQm91
bmRPZkluZGV4aW5nVHlwZUFuZFR5cGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5p
bmRleGluZ1R5cGUoKSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBpKS0+cHJlZGljdGlvbigp
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5udW1DaGlsZHJlbigpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBv
bmx5IGhhcHBlbiBpZiB0aGUgY2hpbGRyZW4gaGF2ZSBubyB0eXBlIHByZWRpY3Rpb25zLiBXZQor
ICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGFscmVhZHkgZXhpdGVkIGJ5IG5vdywg
YnV0IGluc2VydCBhIGZvcmNlZCBleGl0IGp1c3QgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8g
YmUgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5k
ZXggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKKyAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJh
bmRJbmRleF0uc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBub2RlLT5u
dW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJbmRleF0uc2V0
VXNlS2luZChSZWFsTnVtYmVyVXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGlmICghTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDEp
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpCi0gICAgICAgICAg
ICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogeworICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6IHsKLSAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwor
ICAgICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CisgICAgICAgICAgICAvLyBGSVhNRTogVXNlIFBo
YW50b20odHlwZSBjaGVjaykgYW5kIElkZW50aXR5IGluc3RlYWQuCisgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzk1CisgICAgICAgICAg
ICBpZiAoaXNPdGhlclNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKQor
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoT3RoZXJVc2UpOworICAg
ICAgICAgICAgZWxzZSBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKE9i
amVjdFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJpdGhNaW46Ci0gICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgIGNh
c2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYyhub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkKLSAgICAgICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBmaXhEb3VibGVFZGdlKDApOwotICAg
ICAgICAgICAgZml4RG91YmxlRWRnZSgxKTsKKyAgICAgICAgY2FzZSBDcmVhdGVUaGlzOiB7Cisg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTXVs
OiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5v
ZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZml4RG91YmxlRWRnZSgw
KTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsOgorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKKyAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoSW50MzJVc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAgICAgJiYg
bm9kZS0+Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzWDg2
KCkgfHwgaXNBUk12N3MoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoMCk7Ci0gICAgICAgICAgICAgICAgaW5qZWN0
SW50MzJUb0RvdWJsZU5vZGUoMSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhl
bSBmcm9tCi0gICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgotICAgICAg
ICAgICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVm
Tm9kZSwgU3BlY0RvdWJsZSwgKm5vZGUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOwotICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgRG91YmxlVXNlKSwgRWRnZSgpLCBF
ZGdlKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZml4RG91YmxlRWRnZSgwKTsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRTY29wZVJlZ2lzdGVyczoKKyAgICAgICAgY2FzZSBQ
dXRTY29wZWRWYXI6CisgICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgorICAgICAgICBjYXNlIFNr
aXBTY29wZToKKyAgICAgICAgY2FzZSBTZXRDYWxsZWU6CisgICAgICAgIGNhc2UgU2V0TXlTY29w
ZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAg
ICAgICAgY2FzZSBHZXRTY29wZToKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKKyAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aEFi
czogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyRm9yQXJpdGhtZXRpYygpCi0gICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRl
SW50ZWdlcigpKQorICAgICAgICBjYXNlIEdldEJ5SWQ6IHsKKyAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAg
ICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihub2RlLT5wcmVkaWN0aW9uKCkpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZpeERvdWJs
ZUVkZ2UoMCk7CisgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAorICAg
ICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdp
biktPmdldEFycmF5UHJvZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBBcnJh
eU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOworICAgICAgICAgICAgaWYgKGFy
cmF5UHJvZmlsZSkgeworICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdp
bikpOworICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVk
KGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBhcnJh
eU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgICAg
IGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmlu
aXRlU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CisgICAgICAg
ICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOworICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAg
IG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsK
KyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CisgICAgICAgICAgICBub2RlLT5zZXRBcnJh
eU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZSogc3RvcmFn
ZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7
CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpID0gRWRnZShzdG9yYWdlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cml0aFNxcnQ6IHsKLSAgICAgICAgICAgIGZpeERvdWJsZUVkZ2UoMCk7CisgICAgICAgIGNhc2Ug
R2V0QnlJZEZsdXNoOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KENlbGxVc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAg
ICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLQot
ICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAotICAgICAgICAgICAgICAgIG5vZGUtPmFy
cmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9u
KCksCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAotICAgICAgICAg
ICAgICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGNoaWxkMSwgY2hpbGQyLCAzKTsKKyAgICAgICAgY2Fz
ZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAg
IGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgorICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50OgorICAgICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludDoKKyAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICBjYXNlIFB1
dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBDaGVja0hh
c0luc3RhbmNlOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxV
c2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgZml4RG91Ymxl
RWRnZSgyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDhBcnJheToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAg
ICAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoIWNoaWxkMy0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKQotICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKDIpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5
OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2UoMik7CisgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogeworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5k
KFN0cmluZ1VzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3QXJyYXk6IHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgudmFyQXJnTnVtQ2hpbGRyZW4obm9kZSk7
IGktLTspIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRJbmRleGluZ1R5cGUoCi0gICAgICAg
ICAgICAgICAgICAgIGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlQW5kVHlwZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmluZGV4aW5nVHlwZSgpLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIGkpLT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChub2RlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLnZhckFyZ051bUNoaWxkcmVuKG5vZGUp
OyBpLS07KQotICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVFZGdlKGkpOwotICAgICAgICAg
ICAgfQorICAgICAgICBjYXNlIEFycmF5aWZ5OgorICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6IHsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkpCisgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZz
ZXQ6IHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQo
KSkKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVz
ZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgSW5zdGFuY2VPZjogeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgYXBwZWFycyBicm9r
ZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2VzIGFuIHVuY29uZGl0aW9uYWwgY2VsbAor
ICAgICAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDc0NzkKKyAgICAgICAgICAgIGlmICghKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCkgJiB+U3BlY0NlbGwpKQorICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtp
bmQoQ2VsbFVzZSk7CisgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS5zZXRVc2VLaW5kKENlbGxV
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBj
YXNlIE5vcDoKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2UgRm9yd2FyZEludDMyVG9E
b3VibGU6CisgICAgICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisjaWYgIUFTU0VSVF9ESVNBQkxFRCAgICAKKyAgICAgICAgLy8gSGF2ZSB0
aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFk
ZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Cisg
ICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICBj
YXNlIFdlYWtKU0NvbnN0YW50OgorICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICBjYXNl
IEdldENhbGxlZToKKyAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6CisgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgY2FzZSBJbmxpbmVT
dGFydDoKKyAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgorICAgICAgICBjYXNlIEdldFNjb3BlZFZh
cjoKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFy
OgorICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6CisgICAgICAgIGNhc2UgUHV0R2xv
YmFsVmFyQ2hlY2s6CisgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50Ogor
ICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYXNl
IE5ld09iamVjdDoKKyAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgY2FzZSBO
ZXdSZWdleHA6CisgICAgICAgIGNhc2UgUmVzb2x2ZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFz
ZToKKyAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKKyAgICAgICAgY2FzZSBSZXNv
bHZlR2xvYmFsOgorICAgICAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgICAgIGNhc2UgSXNVbmRl
ZmluZWQ6CisgICAgICAgIGNhc2UgSXNCb29sZWFuOgorICAgICAgICBjYXNlIElzTnVtYmVyOgor
ICAgICAgICBjYXNlIElzU3RyaW5nOgorICAgICAgICBjYXNlIElzT2JqZWN0OgorICAgICAgICBj
YXNlIElzRnVuY3Rpb246CisgICAgICAgIGNhc2UgU3RyQ2F0OgorICAgICAgICBjYXNlIENyZWF0
ZUFjdGl2YXRpb246CisgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CisgICAgICAgIGNh
c2UgQ3JlYXRlQXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CisgICAg
ICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xl
bmd0aDoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CisgICAgICAgIGNh
c2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgorICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uOgor
ICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoKKyAgICAgICAgY2FzZSBOZXdGdW5jdGlv
bkV4cHJlc3Npb246CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBSZXR1cm46Cisg
ICAgICAgIGNhc2UgVGhyb3c6CisgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAg
ICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6CisgICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246Cisg
ICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICAgICAgYnJlYWs7CisjZWxzZQogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgfQogCiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtNDIxLDYgKzgxNCw4
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFy
cmF5TW9kZS5vcmlnaW5hbEFycmF5U3RydWN0dXJlKG1fZ3JhcGgsIGNvZGVPcmlnaW4pOwogICAg
ICAgICAKKyAgICAgICAgRWRnZSBpbmRleEVkZ2UgPSBpbmRleCA/IEVkZ2UoaW5kZXgsIEludDMy
VXNlKSA6IEVkZ2UoKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChhcnJheU1vZGUuZG9lc0NvbnZl
cnNpb24oKSkgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSkgewogICAgICAgICAgICAgICAg
IGlmIChtX2luZGV4SW5CbG9jayA+IDApIHsKQEAgLTQzNSwyMSArODMwLDIxIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5VG9TdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCi0g
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBPcEluZm8oYXJyYXlNb2RlLmFz
V29yZCgpKSwgYXJyYXksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVj
dHVyZSksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBDZWxsVXNlKSwg
aW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5LCBjb2RlT3JpZ2lu
LAotICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXks
IGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IEVkZ2UoYXJyYXksIENlbGxVc2UpLCBpbmRleEVkZ2UpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSkgewogICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVy
ZSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBhcnJheSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgRWRnZShhcnJheSwgQ2VsbFVz
ZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgY29kZU9yaWdpbiwKLSAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5KTsKKyAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXks
IENlbGxVc2UpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKQEAgLTQ2MSwy
MSArODU2LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssCiAg
ICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZDaGlsZHJlbiA6IERvbnRSZWZDaGls
ZHJlbiwKICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZk5vZGUgOiBEb250UmVm
Tm9kZSwKLSAgICAgICAgICAgICAgICBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2lu
LCBhcnJheSk7CisgICAgICAgICAgICAgICAgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9y
aWdpbiwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssCiAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZkNoaWxkcmVuIDog
RG9udFJlZkNoaWxkcmVuLAogICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZOb2RlIDog
RG9udFJlZk5vZGUsCi0gICAgICAgICAgICBTcGVjTm9uZSwgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5KTsKKyAg
ICAgICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2lu
LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVk
Z2UgaW5kZXgsIHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKKyAgICB2b2lkIGJsZXNzQXJyYXlP
cGVyYXRpb24oRWRnZSBiYXNlLCBFZGdlIGluZGV4LCBFZGdlJiBzdG9yYWdlQ2hpbGQpCiAgICAg
ewotICAgICAgICBpZiAobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPiBCZWZvcmVGaXhwb2ludCkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1
cnJlbnROb2RlOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkpIHsKQEAgLTQ5OSw3ICs4OTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFz
dG9yYWdlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgbV9ncmFwaC5jaGlsZChub2RlLCBzdG9yYWdlQ2hpbGRJZHgpID0gRWRnZShzdG9yYWdlKTsK
KyAgICAgICAgICAgIHN0b3JhZ2VDaGlsZCA9IEVkZ2Uoc3RvcmFnZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0gfQogICAgIH0KQEAgLTUwNyw0OCArODk5LDkyIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVkZ2UpCiAgICAgewogICAgICAgICBOb2RlKiBu
b2RlID0gZWRnZS5ub2RlKCk7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpICE9IFZhbHVlVG9JbnQz
MikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkg
IT0gVmFsdWVUb0ludDMyKSB7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25vd25JbnQz
MlVzZSk7CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7CiAgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxk
MSgpOwogICAgICAgICAKKyAgICAgICAgaWYgKG5ld0VkZ2UudXNlS2luZCgpICE9IEludDMyVXNl
KSB7CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25vd25JbnQzMlVzZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChuZXdFZGdl
LT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOworICAgICAgICAKICAgICAgICAgbV9ncmFwaC5y
ZWYobmV3RWRnZSk7CiAgICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CiAgICAgICAgIAog
ICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXhEb3VibGVF
ZGdlKHVuc2lnbmVkIGNoaWxkSW5kZXgsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9
IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgdm9pZCBmaXhEb3VibGVFZGdlKEVkZ2UmIGVkZ2Us
IFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVzZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0
aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKICAgICB7Ci0gICAgICAgIE5vZGUqIHNvdXJjZSA9
IG1fY3VycmVudE5vZGU7Ci0gICAgICAgIEVkZ2UmIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKHNvdXJj
ZSwgY2hpbGRJbmRleCk7Ci0gICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+cHJlZGljdGlvbigp
ICYgU3BlY0RvdWJsZSkgewotICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKERvdWJsZVVzZSk7
CisgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQodXNlS2luZCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2Rl
KGNoaWxkSW5kZXgsIGRpcmVjdGlvbik7CisgICAgICAgIGluamVjdEludDMyVG9Eb3VibGVOb2Rl
KGVkZ2UsIHVzZUtpbmQsIGRpcmVjdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBpbmplY3RJbnQz
MlRvRG91YmxlTm9kZSh1bnNpZ25lZCBjaGlsZEluZGV4LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIHZvaWQgaW5qZWN0SW50MzJUb0Rv
dWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUs
CiAgICAgICAgICAgICBkaXJlY3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlvbiA/IEludDMyVG9E
b3VibGUgOiBGb3J3YXJkSW50MzJUb0RvdWJsZSwKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4sIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCkubm9k
ZSgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5u
b2RlKCksIE51bWJlclVzZSkpOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKAogICAgICAgICAgICAgIihyZXBsYWNp
bmcgQCV1LT5AJXUgd2l0aCBAJXUtPkAldSkgIiwKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGUt
PmluZGV4KCksIG1fZ3JhcGguY2hpbGQobV9jdXJyZW50Tm9kZSwgY2hpbGRJbmRleCktPmluZGV4
KCksIG1fY3VycmVudE5vZGUtPmluZGV4KCksIHJlc3VsdC0+aW5kZXgoKSk7CisgICAgICAgICAg
ICBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCBlZGdlLT5pbmRleCgpLCBtX2N1cnJlbnROb2RlLT5p
bmRleCgpLCByZXN1bHQtPmluZGV4KCkpOwogI2VuZGlmCiAKLSAgICAgICAgbV9ncmFwaC5jaGls
ZChtX2N1cnJlbnROb2RlLCBjaGlsZEluZGV4KSA9IEVkZ2UocmVzdWx0LCBEb3VibGVVc2UpOwor
ICAgICAgICBlZGdlID0gRWRnZShyZXN1bHQsIHVzZUtpbmQpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHRydW5jYXRlQ29uc3RhbnRUb0ludDMyKEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBO
b2RlKiBvbGROb2RlID0gZWRnZS5ub2RlKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQob2xk
Tm9kZS0+aGFzQ29uc3RhbnQoKSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KG9sZE5vZGUpOworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBqc051bWJlcihK
U0M6OnRvSW50MzIodmFsdWUuYXNOdW1iZXIoKSkpOworICAgICAgICBBU1NFUlQodmFsdWUuaXNJ
bnQzMigpKTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBT
cGVjSW50MzIsIEpTQ29uc3RhbnQsCisgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3Jp
Z2luLCBPcEluZm8oY29kZUJsb2NrKCktPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSkpKTsKKyAg
ICAgICAgbV9ncmFwaC5kZXJlZihvbGROb2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnVu
Y2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KE5vZGUqIG5vZGUsIEFkZFNwZWN1bGF0aW9uTW9kZSBt
b2RlKQorICAgIHsKKyAgICAgICAgaWYgKG1vZGUgIT0gU3BlY3VsYXRlSW50ZWdlckFuZFRydW5j
YXRlQ29uc3RhbnRzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKG5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpIHx8IG5vZGUtPmNoaWxkMigpLT5oYXND
b25zdGFudCgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQor
ICAgICAgICAgICAgdHJ1bmNhdGVDb25zdGFudFRvSW50MzIobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMihub2RlLT5jaGls
ZDIoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQoTm9k
ZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gbV9ncmFw
aC5hZGRTcGVjdWxhdGlvbk1vZGUobm9kZSk7CisgICAgICAgIGlmIChtb2RlID09IERvbnRTcGVj
dWxhdGVJbnRlZ2VyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShub2RlLCBtb2RlKTsKKyAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChJbnQzMlVzZSk7CisgICAgICAgIG5vZGUtPmNoaWxkMigp
LnNldFVzZUtpbmQoSW50MzJVc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAg
ICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDE0MzU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNDUgKzM0NiwxNCBAQCB2b2lkIEdy
YXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgfQogfQogCi0vLyBGSVhNRTogQ29udmVy
dCB0aGlzIHRvIGJlIGl0ZXJhdGl2ZSwgbm90IHJlY3Vyc2l2ZS4KLSNkZWZpbmUgRE9fVE9fQ0hJ
TERSRU4obm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgX2NoaWxkSWR4ID0gX25vZGUtPmZpcnN0Q2hpbGQoKTsgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgICAgICBfY2hpbGRJZHggPCBfbm9kZS0+Zmlyc3RDaGlsZCgpICsgX25vZGUtPm51
bUNoaWxkcmVuKCk7IFwKLSAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAoISFt
X3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgICAgICAgdGhpbmdUb0RvKG1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7ICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgIGlmICghX25vZGUtPmNoaWxkMSgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIV9ub2RlLT5j
aGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
ICAgICAgICAgJiYgIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRo
aW5nVG9Ebyhfbm9kZS0+Y2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMigpKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIV9ub2RlLT5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRoaW5nVG9E
byhfbm9kZS0+Y2hpbGQyKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghX25vZGUtPmNoaWxkMygpKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIHRoaW5nVG9Ebyhfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlIChmYWxzZSkKLQogdm9p
ZCBHcmFwaDo6cmVmQ2hpbGRyZW4oTm9kZSogb3ApCiB7Ci0gICAgRE9fVE9fQ0hJTERSRU4ob3As
IHJlZik7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMsIG9wLCByZWYpOwogfQog
CiB2b2lkIEdyYXBoOjpkZXJlZkNoaWxkcmVuKE5vZGUqIG9wKQogewotICAgIERPX1RPX0NISUxE
UkVOKG9wLCBkZXJlZik7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMsIG9wLCBk
ZXJlZik7CiB9CiAKIHZvaWQgR3JhcGg6OmRldGhyZWFkKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MzU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBzdHJ1
Y3QgUHV0VG9CYXNlT3BlcmF0aW9uRGF0YSB7CiAKIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsK
ICAgICBEb250U3BlY3VsYXRlSW50ZWdlciwKLSAgICBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlz
V2F0Y2hPdmVyZmxvdywKKyAgICBTcGVjdWxhdGVJbnRlZ2VyQW5kVHJ1bmNhdGVDb25zdGFudHMs
CiAgICAgU3BlY3VsYXRlSW50ZWdlcgogfTsKIApAQCAtMTAwLDEwICsxMDAsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgIHJldHVybiBub2RlOwog
ICAgIH0KLSAgICBFZGdlIHJlZihFZGdlIG5vZGVVc2UpCisgICAgRWRnZSByZWYoRWRnZSBlZGdl
KQogICAgIHsKLSAgICAgICAgcmVmKG5vZGVVc2Uubm9kZSgpKTsKLSAgICAgICAgcmV0dXJuIG5v
ZGVVc2U7CisgICAgICAgIHJlZihlZGdlLm5vZGUoKSk7CisgICAgICAgIHJldHVybiBlZGdlOwor
ICAgIH0KKyAgICBFZGdlIHJlZihOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHJlZihlZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZXJlZihOb2RlKiBub2RlKQpA
QCAtMTE1LDkgKzExOSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVy
ZWYoKSA9PSAxKQogICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlKTsKICAgICB9Ci0gICAg
dm9pZCBkZXJlZihFZGdlIG5vZGVVc2UpCisgICAgdm9pZCBkZXJlZihFZGdlIGVkZ2UpCiAgICAg
ewotICAgICAgICBkZXJlZihub2RlVXNlLm5vZGUoKSk7CisgICAgICAgIGRlcmVmKGVkZ2Uubm9k
ZSgpKTsKKyAgICB9CisgICAgdm9pZCBkZXJlZihOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAg
ICAgICAgZGVyZWYoZWRnZSk7CiAgICAgfQogICAgIAogICAgIC8vIFdoZW4gYSBub2RlJ3MgcmVm
Q291bnQgZ29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9naWNhbGx5KSByZWN1cnNpdmVseSBy
ZWYgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVyc2EuCkBAIC0xNzQsOSArMTgyLDkg
QEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZp
cnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGls
ZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25G
b3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2Rl
LT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVy
YXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxk
cmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3Rp
dHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAg
ICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQyKCksIHNob3VsZEdlbmVy
YXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxk
MygpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC01MzAsOSAr
NTM4LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUt
PmNoaWxkMigpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVybiBpc051bWJlclNwZWN1bGF0
aW9uKGxlZnQpICYmIGlzTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQpOworICAgICAgICByZXR1cm4g
aXNOdW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBpc051bWVyaWNhbChub2Rl
LT5jaGlsZDIoKS51c2VLaW5kKCkpOwogICAgIH0KICAgICAKICAgICAvLyBOb3RlIHRoYXQgYSAn
dHJ1ZScgcmV0dXJuIGRvZXMgbm90IGFjdHVhbGx5IG1lYW4gdGhhdCB0aGUgQnlWYWwgYWNjZXNz
IGNsb2JiZXJzIG5vdGhpbmcuCkBAIC03ODEsNyArNzg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKGRvdWJsZUltbWVkaWF0ZSA8IC10d29Ub1RoZTQ4IHx8IGRvdWJsZUltbWVkaWF0ZSA+IHR3
b1RvVGhlNDgpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludGVnZXI7CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9k
ZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3cgOiBEb250
U3BlY3VsYXRlSW50ZWdlcjsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIo
YWRkLT5hcml0aE5vZGVGbGFncygpKSA/IFNwZWN1bGF0ZUludGVnZXJBbmRUcnVuY2F0ZUNvbnN0
YW50cyA6IERvbnRTcGVjdWxhdGVJbnRlZ2VyOwogICAgIH0KICAgICAKICAgICBib29sIG11bElt
bWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogbXVsLCBOb2RlKiB2YXJpYWJsZSwg
Tm9kZSogaW1tZWRpYXRlKQpAQCAtODMwLDYgKzgzNiwzNiBAQCBpbmxpbmUgQmxvY2tJbmRleCBH
cmFwaDo6YmxvY2tJbmRleEZvckJ5CiAgICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8QmxvY2tJbmRl
eCwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVj
b2RlQmVnaW4sIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOwogfQogCisjZGVmaW5l
IERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAg
ICAgICAgICBcCisgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIF9jaGlsZElkeCA9IF9ub2RlLT5maXJzdENoaWxkKCk7ICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4IDwgX25vZGUtPmZpcnN0Q2hpbGQoKSAr
IF9ub2RlLT5udW1DaGlsZHJlbigpOyBcCisgICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgaWYgKCEhKGdyYXBoKS5tX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZSwgKGdyYXBoKS5tX3ZhckFy
Z0NoaWxkcmVuW19jaGlsZElkeF0pOyBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gZWxz
ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
ICAgICFfbm9kZS0+Y2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDEoKSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2Rl
LT5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS0+Y2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLT5jaGls
ZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUsIF9ub2RlLT5jaGlsZDMoKSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAo
ZmFsc2UpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQzNTYyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDExICs5NSwx
MCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAg
IHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwotICAgICAgICBBU1NFUlQoISEo
bV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSA9PSAoY2hpbGRyZW4ua2luZCgpID09IEFkamFjZW5j
eUxpc3Q6OlZhcmlhYmxlKSk7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUg
d2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2Rl
VHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBj
aGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgRWRnZSBjaGlsZDEgPSBFZGdlKCksIEVkZ2UgY2hpbGQyID0gRWRn
ZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmln
aW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hp
bGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKQEAgLTExMSw3ICsxMTAsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAg
Ly8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIGFuIGltbWVkaWF0
ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9w
SW5mbyBpbW0sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxk
MyA9IDApCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcElu
Zm8gaW1tLCBFZGdlIGNoaWxkMSA9IEVkZ2UoKSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2Ug
Y2hpbGQzID0gRWRnZSgpKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAg
ICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxk
MykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQpA
QCAtMTI0LDcgKzEyMyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1
Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMu
Ci0gICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1t
MSwgT3BJbmZvIGltbTIsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUq
IGNoaWxkMyA9IDApCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIEVkZ2UgY2hpbGQxID0gRWRnZSgpLCBFZGdlIGNo
aWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgICAgIDogY29kZU9yaWdp
bihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBj
aGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpCkBAIC0yOTQsMjIgKzI5MywyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNl
dCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0
VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBOb2RlKiBzdG9y
YWdlKQorICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0g
R2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleDsKLSAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uoc3Rv
cmFnZSkpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoc3RvcmFnZSk7CiAgICAgICAgIG1f
b3AgPSBHZXRCeU9mZnNldDsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7
CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCwgTm9kZSogc3RvcmFnZSkKKyAgICB2b2lkIGNvbnZlcnRUb1B1
dEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlk
RGlyZWN0KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdlQWNjZXNzRGF0YUluZGV4OwogICAg
ICAgICBjaGlsZHJlbi5zZXRDaGlsZDMoY2hpbGRyZW4uY2hpbGQyKCkpOwogICAgICAgICBjaGls
ZHJlbi5zZXRDaGlsZDIoY2hpbGRyZW4uY2hpbGQxKCkpOwotICAgICAgICBjaGlsZHJlbi5zZXRD
aGlsZDEoRWRnZShzdG9yYWdlKSk7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShzdG9yYWdl
KTsKICAgICAgICAgbV9vcCA9IFB1dEJ5T2Zmc2V0OwogICAgICAgICBtX2ZsYWdzICY9IH5Ob2Rl
Q2xvYmJlcnNXb3JsZDsKICAgICB9CkBAIC05NDksOSArOTQ4LDEwIEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVu
dHM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBQaGFudG9tOgogICAg
ICAgICBjYXNlIE5vcDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBQ
aGFudG9tOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpLnVzZUtpbmRVbmNoZWNrZWQoKSAh
PSBVbnR5cGVkVXNlIHx8IGNoaWxkMigpLnVzZUtpbmRVbmNoZWNrZWQoKSAhPSBVbnR5cGVkVXNl
IHx8IGNoaWxkMygpLnVzZUtpbmRVbmNoZWNrZWQoKSAhPSBVbnR5cGVkVXNlOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHNob3VsZEdlbmVyYXRlKCk7CiAgICAgICAgIH0K
QEAgLTk5NSw3ICs5OTUsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3JlZkNv
dW50LS07CiAgICAgfQogICAgIAotICAgIEVkZ2UgY2hpbGQxKCkKKyAgICBFZGdlJiBjaGlsZDEo
KQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAg
ICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDEoKTsKQEAgLTEwMDksMTMgKzEwMDksMTMgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQxVW5jaGVja2VkKCk7
CiAgICAgfQogCi0gICAgRWRnZSBjaGlsZDIoKQorICAgIEVkZ2UmIGNoaWxkMigpCiAgICAgewog
ICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0
dXJuIGNoaWxkcmVuLmNoaWxkMigpOwogICAgIH0KIAotICAgIEVkZ2UgY2hpbGQzKCkKKyAgICBF
ZGdlJiBjaGlsZDMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNW
YXJBcmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5jaGlsZDMoKTsKQEAgLTEwMzMsNiAr
MTAzMywxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5udW1DaGls
ZHJlbigpOwogICAgIH0KICAgICAKKyAgICBVc2VLaW5kIGJpbmFyeVVzZUtpbmQoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGNoaWxkMSgpLnVzZUtpbmQoKSA9PSBjaGlsZDIoKS51c2VLaW5kKCkp
OworICAgICAgICByZXR1cm4gY2hpbGQxKCkudXNlS2luZCgpOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzQmluYXJ5VXNlS2luZChVc2VLaW5kIHVzZUtpbmQpCisgICAgeworICAgICAgICByZXR1
cm4gY2hpbGQxKCkudXNlS2luZCgpID09IHVzZUtpbmQgJiYgY2hpbGQyKCkudXNlS2luZCgpID09
IHVzZUtpbmQ7CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24oKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZUFsbG9jYXRvci5oCShyZXZpc2lvbiAxNDM1NjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci10eXBlZGVmIEFsbG9jYXRvcjxOb2RlPiBOb2RlQWxsb2NhdG9yOworI2lmIFVTRShKU1ZBTFVF
NjQpCit0eXBlZGVmIEFsbG9jYXRvcjxOb2RlLCAxMTI+IE5vZGVBbGxvY2F0b3I7CisjZWxzZQor
dHlwZWRlZiBBbGxvY2F0b3I8Tm9kZSwgODA+IE5vZGVBbGxvY2F0b3I7CisjZW5kaWYKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVGbGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlRmxhZ3MuY3BwCShyZXZpc2lvbiAxNDM1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjb25zdCBjaGFyKiBub2RlRmxh
Z3NBc1N0cmluZyhOb2RlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKCFmbGFncykKKyAgICBpZiAo
IShmbGFncyBeIE5vZGVEb2VzTm90RXhpdCkpCiAgICAgICAgIHJldHVybiAiPGVtcHR5PiI7CiAK
ICAgICBzdGF0aWMgY29uc3QgaW50IHNpemUgPSAxMjg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNDM1NjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDggKzk2LDYg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZvcndhcmRJbnQz
MlRvRG91YmxlLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgLyogVXNlZCB0byBzcGVjdWxhdGUg
dGhhdCBhIGRvdWJsZSB2YWx1ZSBpcyBhY3R1YWxseSBhbiBpbnRlZ2VyLiAqL1wKICAgICBtYWNy
byhEb3VibGVBc0ludDMyLCBOb2RlUmVzdWx0SW50MzIpIFwKLSAgICAvKiBVc2VkIHRvIHJlY29y
ZCBwbGFjZXMgd2hlcmUgd2UgbXVzdCBjaGVjayBpZiBhIHZhbHVlIGlzIGEgbnVtYmVyLiAqL1wK
LSAgICBtYWNybyhDaGVja051bWJlciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAv
KiBOb2RlcyBmb3IgYXJpdGhtZXRpYyBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhBcml0aEFk
ZCwgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDM1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODA1LDcgKzgwNSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAg
ICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOgogICAgICAgICBjYXNlIFRlYXJPZmZBcmd1bWVu
dHM6Ci0gICAgICAgIGNhc2UgQ2hlY2tOdW1iZXI6CiAgICAgICAgIGNhc2UgQ2hlY2tBcmd1bWVu
dHNOb3RDcmVhdGVkOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6CiAgICAgICAg
IGNhc2UgR2FyYmFnZVZhbHVlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNDM1NjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCwyMyArNDAsMjUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsSW50ZWdlcihOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCitHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0KQogewotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJ
bnQzMikpOworICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdl
LT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7
CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVkZ2Ut
Pmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUpKQotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpKSwgZ3ByKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpCisgICAgICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpCiAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOwotICAgICAg
ICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7
CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoanNWYWx1
ZS5wYXlsb2FkKCkpLCBncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAt
MTEzLDI1ICsxMTUsMjUgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2Rl
KgogICAgIH0KIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZSogbm9k
ZSwgR1BSUmVnJiB0YWdHUFIsIEdQUlJlZyYgcGF5bG9hZEdQUiwgRlBSUmVnJiBmcHIpCitib29s
IFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShFZGdlIGVkZ2UsIEdQUlJlZyYgdGFnR1BSLCBH
UFJSZWcmIHBheWxvYWRHUFIsIEZQUlJlZyYgZnByKQogewogICAgIC8vIEZJWE1FOiBGb3IgZG91
YmxlIHdlIGNvdWxkIGZpbGwgd2l0aCBhIEZQUi4KICAgICBVTlVTRURfUEFSQU0oZnByKTsKIAot
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZv
W3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkg
ewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29u
c3RhbnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAg
ICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIHBheWxvYWRHUFIgPSBhbGxvY2F0
ZSgpOwotICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChub2Rl
KS50YWcoKSksIHRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGUpLnBheWxvYWQoKSksIHBheWxvYWRHUFIpOworICAgICAgICAgICAgbV9q
aXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSkudGFnKCkpLCB0YWdH
UFIpOworICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChlZGdl
Lm5vZGUoKSkucGF5bG9hZCgpKSwgcGF5bG9hZEdQUik7CiAgICAgICAgICAgICBtX2dwcnMucmV0
YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAg
ICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3Jk
ZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFn
R1BSLCBwYXlsb2FkR1BSLCBpc0ludDMyQ29uc3RhbnQobm9kZSkgPyBEYXRhRm9ybWF0SlNJbnRl
Z2VyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkgPyBE
YXRhRm9ybWF0SlNJbnRlZ2VyIDogRGF0YUZvcm1hdEpTKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CiAg
ICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUgJiYgc3BpbGxG
b3JtYXQgIT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwpAQCAtODQ0LDI3ICs4NDYsMzAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogfQogCiB0ZW1wbGF0ZTxib29sIHN0
cmljdD4KLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5v
ZGUqIG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJu
YWwoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0
YUxvZ0YoIlNwZWNJbnRAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKKyAgICBkYXRhTG9nRigiU3Bl
Y0ludEAlZCAgICIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBl
IHR5cGUgPSB2YWx1ZS5tX3R5cGU7CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3du
SW50MzJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0ludDMyKSk7CisgICAgdmFsdWUuZmls
dGVyKFNwZWNJbnQzMik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVk
Z2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7Ci0gICAgICAgIGlmICgobm9k
ZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB8fCBpbmZvLnNwaWxs
Rm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICBpZiAoKGVkZ2UtPmhhc0Nv
bnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpIHx8IGluZm8uc3BpbGxG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9u
KTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlm
IChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0
YW50KG5vZGUpKTsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgIEdQ
UlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQo
ZWRnZS5ub2RlKCkpKSwgZ3ByKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICBpbmZvLmZpbGxJ
bnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFG
b3JtYXRJbnRlZ2VyOwpAQCAtODc1LDggKzg4MCw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgQVNTRVJUX1VOVVNFRChzcGlsbEZvcm1hdCwgKHNw
aWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50
ZWdlcik7CiAKICAgICAgICAgLy8gSWYgd2Uga25vdyB0aGlzIHdhcyBzcGlsbGVkIGFzIGFuIGlu
dGVnZXIgd2UgY2FuIGZpbGwgd2l0aG91dCBjaGVja2luZy4KLSAgICAgICAgaWYgKCFpc0ludDMy
U3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSks
IG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGls
ZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0ludDMyKQorICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpLCBlZGdlLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVy
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSksIGRpcmVjdGlvbik7CiAKICAgICAg
ICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwpAQCAtODkzLDggKzg5OCw4
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgR1BS
UmVnIHBheWxvYWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKICAgICAgICAgbV9ncHJzLmxvY2so
dGFnR1BSKTsKICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIGlmICgh
aXNJbnQzMlNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNJbnQz
MikKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFn
R1BSLCBwYXlsb2FkR1BSKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpLCBkaXJlY3Rp
b24pOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxl
YXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwpAQCAtOTI5
LDQwICs5MzQsNDMgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQog
ICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGUq
IG5vZGUsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KEVkZ2UgZWRn
ZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24pCiB7Ci0gICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDxmYWxzZT4obm9kZSwg
cmV0dXJuRm9ybWF0LCBkaXJlY3Rpb24pOworICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWw8ZmFsc2U+KGVkZ2UsIHJldHVybkZvcm1hdCwgZGlyZWN0aW9uKTsKIH0KIAotR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0KE5vZGUqIG5vZGUpCitHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRTdHJpY3QoRWRnZSBlZGdlKQogewog
ICAgIERhdGFGb3JtYXQgbXVzdEJlRGF0YUZvcm1hdEludGVnZXI7Ci0gICAgR1BSUmVnIHJlc3Vs
dCA9IGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDx0cnVlPihub2RlLCBtdXN0QmVEYXRhRm9ybWF0
SW50ZWdlciwgQmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAgR1BSUmVnIHJlc3VsdCA9IGZpbGxT
cGVjdWxhdGVJbnRJbnRlcm5hbDx0cnVlPihlZGdlLCBtdXN0QmVEYXRhRm9ybWF0SW50ZWdlciwg
QmFja3dhcmRTcGVjdWxhdGlvbik7CiAgICAgQVNTRVJUKG11c3RCZURhdGFGb3JtYXRJbnRlZ2Vy
ID09IERhdGFGb3JtYXRJbnRlZ2VyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1GUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUoTm9kZSogbm9kZSwgU3BlY3VsYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uKQorRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlRG91YmxlKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewog
I2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiU3BlY0RvdWJsZUAl
ZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFMb2dGKCJTcGVjRG91YmxlQCVkICAgIiwg
ZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0
ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVl
Lm1fdHlwZTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gS25vd25OdW1iZXJVc2UgfHwg
ISh2YWx1ZS5tX3R5cGUgJiB+U3BlY051bWJlcikpOworICAgIHZhbHVlLmZpbHRlcihTcGVjTnVt
YmVyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gZWRnZS0+dmlydHVh
bFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZv
W3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERh
dGFGb3JtYXROb25lKSB7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpIHsKKyAgICAgICAgaWYgKGVkZ2Ut
Pmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7
CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0
cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgeworICAgICAgICAgICAgfSBlbHNlIGlm
IChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEZQUlJl
ZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUo
YWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZSksIGZwcik7CisgICAgICAgICAgICAgICAgbV9q
aXQubG9hZERvdWJsZShhZGRyZXNzT2ZEb3VibGVDb25zdGFudChlZGdlLm5vZGUoKSksIGZwcik7
CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3Ry
ZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CkBAIC05ODYsOCArOTk0LDgg
QEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogCiAgICAgICAgICAg
ICBpZiAoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdEpTSW50ZWdlciAmJiBzcGlsbEZvcm1hdCAh
PSBEYXRhRm9ybWF0SW50ZWdlcikgewogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgSklUQ29t
cGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24odHlwZSkp
Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgSklUQ29tcGlsZXI6OnRh
Z0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSks
IGRpcmVjdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgJiB+U3BlY051bWJlcikKKyAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNl
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpLCBlZGdlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9y
KHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSwgZGly
ZWN0aW9uKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CiAgICAgICAgICAgICAgICAgaGFzVW5i
b3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKIApAQCAtMTAyMSw4ICsxMDI5LDggQEAgRlBSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBpZiAoaW5mby5yZWdp
c3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0ludGVnZXIpIHsKICAgICAgICAgICAgIEZQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJ
bnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICAgICAgaWYgKCFpc051bWJl
clNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZSwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6TG93ZXN0VGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBpZiAodHlwZSAmIH5T
cGVjTnVtYmVyKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSksIGRpcmVjdGlvbik7CiAgICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIsIHBh
eWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CiAgICAgICAgICAgICBoYXNVbmJveGVkRG91
YmxlID0gbV9qaXQuanVtcCgpOwogICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsK
QEAgLTEwNzYsMjAgKzEwODQsMjMgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlRG91YgogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Q2VsbChOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICBkYXRhTG9nRigiU3BlY0NlbGxAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKKyAgICBkYXRhTG9n
RigiU3BlY0NlbGxAJWQgICAiLCBlZGdlLT5pbmRleCgpKTsKICNlbmRpZgotICAgIFNwZWN1bGF0
ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdlKTsKKyAgICBTcGVjdWxh
dGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAh
PSBLbm93bkNlbGxVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsKKyAgICB2YWx1
ZS5maWx0ZXIoU3BlY0NlbGwpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdp
c3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogCi0gICAgICAgIGlm
IChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2
YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uu
bm9kZSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICAg
ICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwpAQCAtMTEwMiw4ICsx
MTEzLDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAg
ICB9CiAKICAgICAgICAgQVNTRVJUKChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMp
IHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Q2VsbCk7Ci0gICAgICAgIGlmICgh
aXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2VsbCkKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdp
c3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksIGRpcmVjdGlvbik7CiAgICAg
ICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgbV9ncHJz
LnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwpAQCAtMTEy
Myw4ICsxMTM0LDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAog
ICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IGluZm8ucGF5bG9hZEdQUigpOwogICAgICAgICBt
X2dwcnMubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMubG9jayhwYXlsb2FkR1BSKTsKLSAg
ICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0eXBlICYg
flNwZWNDZWxsKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSwg
ZGlyZWN0aW9uKTsKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dw
cnMucmVsZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsK
QEAgLTExNTEsMTMgKzExNjIsMTUgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbAogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbGVhbihOb2RlKiBub2RlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRnZSwgU3BlY3Vs
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKICAgICBkYXRhTG9nRigiU3BlY0Jvb2xAJWQgICAiLCBub2RlLT5pbmRleCgpKTsKICNlbmRp
ZgotICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBl
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShlZGdl
KTsKKyAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gdmFsdWUubV90eXBlOworICAgIHZhbHVlLmZp
bHRlcihTcGVjQm9vbGVhbik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkpIHsKQEAgLTExNjcsOCArMTE4MCw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAg
ICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7CisgICAg
ICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKSB7
CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckNvbnN0YW50KTsKQEAgLTExODIsOCArMTE5NSw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKIAogICAgICAgICBBU1NFUlQoKGluZm8uc3BpbGxGb3Jt
YXQoKSAmIERhdGFGb3JtYXRKUykgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRC
b29sZWFuKTsKIAotICAgICAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHR5cGUpKQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpLCBub2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lz
dGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKSwgZGlyZWN0aW9uKTsKKyAg
ICAgICAgaWYgKHR5cGUgJiB+U3BlY0Jvb2xlYW4pCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVh
bFJlZ2lzdGVyKSksIGVkZ2UsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Qm9vbGVhblRhZykpLCBkaXJlY3Rpb24pOwogCiAgICAgICAgIEdQUlJlZyBncHIgPSBh
bGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKQEAgLTEyMDQsOCArMTIxNyw4IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIg
PSBpbmZvLnBheWxvYWRHUFIoKTsKICAgICAgICAgbV9ncHJzLmxvY2sodGFnR1BSKTsKICAgICAg
ICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIGlmICghaXNCb29sZWFuU3BlY3Vs
YXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRh
ZykpLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAodHlwZSAmIH5TcGVjQm9vbGVhbikKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXls
b2FkR1BSKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSksIGRpcmVjdGlvbik7CiAK
ICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZSh0
YWdHUFIpOwpAQCAtMTI1OSwzNiArMTI3MiwyNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAKICAg
ICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAg
ICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50
KCkpOyAKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
ICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIH5TcGVj
T2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUtPmNoaWxk
MigpLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsK
KyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNo
UHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgIERG
R19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ay
R1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVH
UFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVHUFIsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
LSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjT2JqZWN0LCBt
X2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCAKICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCAKQEAgLTEyOTYsMTQgKzEzMDAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0
cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
Lm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQ
UiksIG5vZGUtPmNoaWxkMigpLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksIAogICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIApAQCAtMTMyNyw3ICsxMzI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdEVxdWFsaQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0
T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpCiB7CiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIGxlZnRDaGlsZCk7Ci0gICAgSlNWYWx1ZU9w
ZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQpOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlz
LCByaWdodENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKQEAg
LTEzMzcsMjcgKzEzMzgsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRv
T2JqZQogICAgIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
aXNTdGlsbFZhbGlkKCkpIHsgCiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAobV9zdGF0
ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVj
dCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsK
ICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZv
ck5vZGUobGVmdENoaWxkKS5tX3R5cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAotICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVj
T2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIAogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIApAQCAtMTM3NCwyNyArMTM2OSwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0VG9PYmplCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmln
aHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4KICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7IAogICAgICAgICBtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAg
ICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0NlbGwpICYg
flNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmln
aHRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9
CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyVGFn
R1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0
LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AyUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1
cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BS
KTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3Bl
Y0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2Fk
R1BSKSwgcmlnaHRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZUdQUiwKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8
IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdo
dENoaWxkLCAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCAKQEAgLTE0MTIsMTIgKzE0MDMsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIAogICAgIC8vIFdlIGtub3cg
dGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3QgYmUgYSBjZWxsLiBD
aGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3ZlIHRoYXQgaXQgaXMgZWl0aGVy
IG51bGwgb3IgdW5kZWZpbmVkLgotICAgIGlmICgobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQp
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkgJiB+U3BlY090aGVyKSB7CisgICAgaWYgKG5lZWRzVHlwZUNo
ZWNrKHJpZ2h0Q2hpbGQsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5t
b3ZlKG9wMlRhZ0dQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAot
ICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BS
KSwgcmlnaHRDaGlsZCwKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgSlNWYWx1ZVJl
Z3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVj
T3RoZXIsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CkBAIC0xNDM5LDcgKzE0
MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgQmxv
Y2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAg
IAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOwotICAgIEpT
VmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBv
cDIodGhpcywgcmlnaHRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3By
KCk7CkBAIC0xNDQ5LDI3ICsxNDQwLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZU9iamUKICAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAo
bV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLAotICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCBTcGVj
T2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRo
aXMpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKG1fc3Rh
dGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
Ci0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAor
ICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxk
LCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCAKQEAgLTE0ODUsMjcgKzE0NzAsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFu
Y2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsK
LSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgU3BlY0Nl
bGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAg
ICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BS
KSwgcmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhv
cDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNP
YmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDJQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0
cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVHUFIpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUg
JiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBh
eWxvYWRHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlR1BSLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBK
U1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLCAoflNwZWND
ZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQ
UiksIHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTIwLDcgKzE1MDEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8gV2Ug
a25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNl
bGwuIENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBl
aXRoZXIgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRD
aGlsZCkubV90eXBlICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIpCisgICAgaWYgKCFuZWVkc1R5
cGVDaGVjayhyaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCiAgICAgICAgIHJpZ2h0
Tm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGp1bXAobm90VGFrZW4s
IEZvcmNlSnVtcCk7CkBAIC0xNTI5LDggKzE1MTAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIG1faml0Lm1vdmUob3AyVGFnR1BSLCByZXN1bHRH
UFIpOwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKICAg
ICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBCYWRUeXBlLCBK
U1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLAorICAgICAg
ICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxv
YWRHUFIpLCByaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
cmVzdWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TnVsbFRhZykpKTsKQEAgLTE1ODcsOSArMTU2OCw5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5n
cHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5vZGVVc2UsIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JP
dGhlckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNlKQogewotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGVVc2UpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxv
YWQodGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAg
R1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKQEAgLTE1OTksMjYg
KzE1ODAsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAg
IGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkp
IHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVj
dWxhdGlvbldhdGNocG9pbnQoKSk7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNr
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZh
bHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxv
YWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2Rl
VXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQ
dHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAg
R1BSUmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKIAogICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVj
dWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLAotICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5
bG9hZEdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
CisgICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCkBAIC0xNjQw
LDEwICsxNjE5LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUK
ICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAKICAgICBDT01QSUxFX0FTU0VSVCgoSlNWYWx1
ZTo6VW5kZWZpbmVkVGFnIHwgMSkgPT0gSlNWYWx1ZTo6TnVsbFRhZywgVW5kZWZpbmVkVGFnX09S
XzFfRVFVQUxTX051bGxUYWcpOwotICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgeworICAg
IGlmIChuZWVkc1R5cGVDaGVjayhub2RlVXNlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKICAg
ICAgICAgbV9qaXQubW92ZSh2YWx1ZVRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAg
IG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQ
YXlsb2FkR1BSKSwgbm9kZVVzZSwgCisgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCBTcGVjQ2Vs
bCB8IFNwZWNPdGhlciwKICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAgICAgICAgICAgICAgcmVzdWx0UGF5
bG9hZEdQUiwgCkBAIC0xNjU4LDI2ICsxNjM4LDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RPck90aGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxO
b3QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZUJvb2xlYW4oKSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Cisg
ICAgY2FzZSBCb29sZWFuVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCB2YWx1ZSk7CiAgICAgICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMigxKSwgdmFsdWUu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0Lmdwcigp
LCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCksIAotICAgICAgICAgICAgIWlzT2JqZWN0
T3JPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KSk7CisgICAgICAgIAorICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogeworICAgICAgICBjb21w
aWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKSB7CisgICAgICAgIAorICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIG1faml0LmNvbXBh
cmUzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKICAgICAgICAgYm9vbGVhblJl
c3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAg
ICAgIAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CkBA
IC0xNjg5LDMwICsxNjcyLDM4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2Fs
Tm90KE4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRo
aXMsIGFyZzEsIGZhbHNlKTsKLSAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7
Ci0gICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7Ci0gICAgR1BS
UmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgIGNhc2UgVW50
eXBlZFVzZTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgYXJnMSwgZmFs
c2UpOworICAgICAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7CisgICAgICAg
IEdQUlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CiAgICAgICAgIAotICAg
IGFyZzEudXNlKCk7CisgICAgICAgIGFyZzEudXNlKCk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVt
cCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMVRh
Z0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1
YWwsIGFyZzFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7CiAgICAg
Ci0gICAgbV9qaXQubW92ZShhcmcxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAg
ICAgIG1faml0Lm1vdmUoYXJnMVBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogCi0gICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAg
IHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0UGF5bG9h
ZEdQUiwgYXJnMVRhZ0dQUiwKLSAgICAgICAgICAgIGFyZzFQYXlsb2FkR1BSKSk7CisgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVz
dWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwKKyAgICAgICAgICAgICAgICBhcmcxUGF5bG9hZEdQ
UikpOwogICAgIAotICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9h
ZEdQUik7Ci0gICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxv
YWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCbG9ja0luZGV4
IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNl
LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuKQogewotICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7
CiAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKQEAgLTE3
MjIsMjMgKzE3MTMsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJC
cgogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZh
bGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFk
ZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVjdWxhdGlv
bkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCAKLSAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9D
SEVDSygKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRH
UFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2pp
dC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwg
dmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCAoflNw
ZWNDZWxsKSB8IFNwZWNPYmplY3QsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzY3Jh
dGNoR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0LmJyYW5j
aFRlc3Q4KEpJVENvbXBpbGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKQEAgLTE3NTUsMTAgKzE3NDQsMTIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIG5vdENlbGwubGluaygmbV9qaXQp
OwogICAgIAogICAgIENPTVBJTEVfQVNTRVJUKChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgfCAxKSA9
PSBKU1ZhbHVlOjpOdWxsVGFnLCBVbmRlZmluZWRUYWdfT1JfMV9FUVVBTFNfTnVsbFRhZyk7Ci0g
ICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5v
ZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVl
VGFnR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpOdWxsVGFnKSkpOworICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgU3BlY0NlbGwgfCBT
cGVjT3RoZXIsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOwogICAg
IH0KIAogICAgIGp1bXAobm90VGFrZW4pOwpAQCAtMTc3MSw3ICsxNzYyLDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBu
b2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS0+
bm90VGFrZW5CbG9ja0luZGV4KCk7CiAKLSAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlQm9v
bGVhbigpKSB7CisgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBj
YXNlIEJvb2xlYW5Vc2U6IHsKICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29u
ZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogCkBAIC0xNzg5LDE0
ICsxNzgxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJy
YW5jaChub2RlLT5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCAKLSAgICAgICAgICAgICFpc09i
amVjdE9yT3RoZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
dHlwZSkpOworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogeworICAgICAgICBlbWl0T2JqZWN0
T3JPdGhlckJyYW5jaChub2RlLT5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgY2FzZSBJbnQzMlVzZTog
eworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEludDMyVXNlKSB7CiAg
ICAgICAgICAgICBib29sIGludmVydCA9IGZhbHNlOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKQEAgLTE4MjAsMzIgKzE4MTIsNDAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICB2YWx1ZS5maWxsKCk7Ci0gICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFn
R1BSKCk7Ci0gICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsK
KyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICB2YWx1ZS5maWxsKCk7CisgICAgICAgIEdQUlJl
ZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOworICAgICAgICBHUFJSZWcgdmFsdWVQYXls
b2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwogICAgIAotICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2Rl
LT5jaGlsZDEoKSk7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdFBhdGggPSBtX2pp
dC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFn
R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKLQot
ICAgIGZhc3RQYXRoLmxpbmsoJm1faml0KTsKLSAgICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
Olplcm8sIHZhbHVlUGF5bG9hZEdQUiwgbm90VGFrZW4pOwotICAgIGp1bXAodGFrZW4sIEZvcmNl
SnVtcCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGZhc3RQYXRoID0gbV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6OkVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93
UGF0aCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIs
IEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwogCi0gICAg
c2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVz
dWx0R1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKTsKLSAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGZhc3RQYXRoLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCB2YWx1ZVBheWxvYWRHUFIsIG5v
dFRha2VuKTsKKyAgICAgICAganVtcCh0YWtlbiwgRm9yY2VKdW1wKTsKKworICAgICAgICBzbG93
UGF0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4s
IHJlc3VsdEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUik7CisgICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAKLSAgICBicmFuY2hUZXN0MzIoSklU
Q29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4pOwotICAgIGp1bXAobm90VGFrZW4p
OworICAgICAgICBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwg
dGFrZW4pOworICAgICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAKLSAgICBub1Jlc3VsdChub2Rl
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2VPcGVy
YW5kVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVmFsdWVPcGVy
YW5kVHlwZSwgdHlwZW5hbWUgVGFnVHlwZT4KQEAgLTE5MzAsMTQgKzE5MzAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBJZGVudGl0eTogewotICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGRvbmUgYSBsb3QgYmV0
dGVyLiBXZSB0YWtlIHRoZSBjaGVhcCB3YXkgb3V0IGJlY2F1c2UgSWRlbnRpdHkKLSAgICAgICAg
Ly8gaXMgb25seSBnb2luZyB0byBzdGljayBhcm91bmQgYWZ0ZXIgQ1NFIGlmIHdlIGhhZCBwcmVk
aWN0aW9uIHdlaXJkbmVzcy4KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBtX2ppdC5t
b3ZlKG9wZXJhbmQudGFnR1BSKCksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgIG1faml0Lm1v
dmUob3BlcmFuZC5wYXlsb2FkR1BSKCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMTk1NSw2ICsxOTQ4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlz
IHZhcmlhYmxlIGFuZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAgICAgLy8g
Y2Fubm90IGhhdmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQu
CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKSB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCB0cmFwIGluc3RlYWQuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4MwogICAgICAgICAgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1
ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0y
MDU1LDcgKzIwNTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBl
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7
CiAgICAgICAgICAgICBpZiAobV9nZW5lcmF0aW9uSW5mb1tub2RlLT5jaGlsZDEoKS0+dmlydHVh
bFJlZ2lzdGVyKCldLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgRWRnZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIERvdWJsZVVzZSkpOworICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIEJhY2t3YXJkU3BlY3Vs
YXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVEb3VibGUodmFsdWUuZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUtPmxv
Y2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgICAgICAg
ICByZWNvcmRTZXRMb2NhbChub2RlLT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3Rh
Y2spKTsKQEAgLTIxODMsMTkgKzIxNzgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBD
aGVja051bWJlcjogewotICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBv
cDEudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhvcDEudGFnR1BSKCksIG9wMS5wYXlsb2FkR1BSKCkpLCBub2RlLT5jaGlsZDEoKSwKLSAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBv
cDEudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgICAg
ICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICB9Ci0gICAgICAgIG5vUmVzdWx0
KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjYXNlIFZhbHVlQWRkOgogICAg
IGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNvbXBpbGVBZGQobm9kZSk7CkBAIC0yMjE0LDggKzIx
OTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbnQzMlVzZTogewogI2lmIENQVShYODYpCiAgICAgICAgICAgICBjb21waWxlSW50
ZWdlckFyaXRoRGl2Rm9yWDg2KG5vZGUpOwogI2VsaWYgQ1BVKEFQUExFX0FSTVY3UykKQEAgLTIy
MjUsMTYgKzIyMDcsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLQotICAgICAgICBGUFJSZWcg
cmVnMSA9IG9wMS5mcHIoKTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAg
ICAgIG1faml0LmRpdkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOwotCi0gICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEZQUlJlZyByZWcx
ID0gb3AxLmZwcigpOworICAgICAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7CisgICAg
ICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMjQ0LDgg
KzIyMzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKCkKLSAgICAgICAgICAgICYmIG5vZGUt
PmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yMjU5LDE4ICsyMjQ5LDI3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAg
IAotICAgICAgICBtX2ppdC5hYnNEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQuYWJzRG91YmxlKG9w
MS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQu
ZnByKCksIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0g
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyRm9yQXJpdGhtZXRpYyhub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkKLSAgICAgICAgICAgICYm
IG5vZGUtPmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmJp
bmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwpAQCAt
MjI4OSwzNiArMjI4OCw0NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6
IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
KTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CiAgICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09
IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09
IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CiAgICAgICAgIAot
ICAgICAgICAvLyBvcDIgaXMgZWF0aGVyIHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlz
IE5hTgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJMZXNzID0gbV9qaXQuYnJhbmNo
RG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wMS5mcHIo
KSwgb3AyLmZwcigpKTsKKyAgICAgICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBv
bmUgb3Igb25lIG9mIHRoZW4gaXMgTmFOCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvcDJMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbk9yRXF1YWwsIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKICAgICAgICAgCi0gICAgICAg
IC8vIFVub3JkZXJlZCBjYXNlLiBXZSBkb24ndCBrbm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5h
Ti4gTWFudWZhY3R1cmUgTmFOIGJ5IGFkZGluZyAKLSAgICAgICAgLy8gb3AxICsgb3AyIGFuZCBw
dXR0aW5nIGl0IGludG8gcmVzdWx0LgotICAgICAgICBtX2ppdC5hZGREb3VibGUob3AxLmZwcigp
LCBvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CisgICAgICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGlj
aCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCisgICAgICAg
ICAgICAvLyBvcDEgKyBvcDIgYW5kIHB1dHRpbmcgaXQgaW50byByZXN1bHQuCisgICAgICAgICAg
ICBtX2ppdC5hZGREb3VibGUob3AxLmZwcigpLCBvcDIuZnByKCksIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAKLSAgICAgICAg
b3AyTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AyLmZwcigp
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChvcDEuZnByKCkgIT0gcmVzdWx0LmZwcigpKSB7Ci0gICAgICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgaWYgKG9wMS5mcHIoKSAh
PSByZXN1bHQuZnByKCkpIHsKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAg
ICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmVE
b3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAK
LSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICBk
b3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjk4MSwxMyArMjk4OCw5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAg
ICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWUuZnByKCk7CiAKLSAgICAgICAgICAgIGlmICghaXNS
ZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmls
aW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBob2lzdCB0aGVtIGludG8KLSAgICAgICAgICAgICAg
ICAvLyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0g
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVGUFIsIHZhbHVlRlBSKSk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncygpLCBub2RlLT5jaGlsZDIoKSwgU3BlY1JlYWxOdW1iZXIsCisgICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkLCB2YWx1ZUZQUiwgdmFsdWVGUFIpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKQEAg
LTMyMzUsNyArMzIzOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgc3dp
dGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICAgICAgLy8gSXQncyByZWFsbHkgcHJvZml0YWJsZSB0byBzcGVjdWxhdGUgaW50
ZWdlciwgc2luY2UgaXQncyByZWFsbHkgY2hlYXAsCiAgICAgICAgICAgICAvLyBpdCBtZWFucyB3
ZSBkb24ndCBoYXZlIHRvIGRvIGFueSByZWFsIHdvcmssIGFuZCB3ZSBlbWl0IGEgbG90IGxlc3Mg
Y29kZS4KICAgICAgICAgICAgIApAQCAtMzI0OCwzOCArMzI1Miw0NCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWco
dGhpcywgb3AxKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMs
IG9wMSwgZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdHJpbmcgc3Bl
Y3VsYXRpb24gaGVyZS4KLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywg
b3AxKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgb3AxLCBmYWxz
ZSk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgb3AxVGFnR1BSID0gb3AxLnRhZ0dQUigpOwot
ICAgICAgICBHUFJSZWcgb3AxUGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7Ci0gICAgICAg
IEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBvcDFUYWdHUFIgPSBvcDEudGFnR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgb3AxUGF5bG9h
ZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BS
ID0gcmVzdWx0VGFnLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIg
PSByZXN1bHRQYXlsb2FkLmdwcigpOwogICAgICAgICAKLSAgICAgICAgb3AxLnVzZSgpOworICAg
ICAgICAgICAgb3AxLnVzZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKCEobV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjQm9vbGVhbikp
KSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVRhZ0dQUiwgcmVzdWx0VGFnR1BSKTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5
UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGlmICghKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjTnVt
YmVyIHwgU3BlY0Jvb2xlYW4pKSkgeworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxVGFn
R1BSLCByZXN1bHRUYWdHUFIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9h
ZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBu
b3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYWxy
ZWFkeVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMVRh
Z0dQUiwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AxUGF5bG9hZEdQ
UiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFUYWdHUFIsIHJlc3Vs
dFRhZ0dQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFQYXlsb2FkR1BSLCByZXN1
bHRQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAg
ICBub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0aXZlLAotICAgICAgICAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBvcDFU
YWdHUFIsIG9wMVBheWxvYWRHUFIpKTsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAg
ICAgICAgICAgICAgICAgICAgICBub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0
aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCBy
ZXN1bHRQYXlsb2FkR1BSKSwgb3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zMzYzLDEzICszMzczLDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgICAgIGNhc2Ug
QUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKICAgICAgICAgICAgICAgICAgICAg
RlBSUmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxp
bmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9w
RlBSLCBvcEZQUikpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwg
dXNlLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIs
IG9wRlBSKSk7CiAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJs
ZShvcEZQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJs
ZSkgKiBvcGVyYW5kSWR4KSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQzMiwx
MyArMzQzOCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwogICAgICAgICAg
ICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUodXNlKS5tX3R5cGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgd2F5IG9mIHByb2ZpbGlu
ZyB0aGVzZSwgYW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBpbnRvCi0gICAgICAgICAgICAgICAg
ICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQuCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVn
cygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwgU3BlY1JlYWxOdW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90
RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUob3BGUFIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGJ1ZmZlciArIG9wZXJhbmRJZHgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2
MzksMzkgKzM2NDEsNDEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDb252ZXJ0VGhpczogewotICAgICAgICBpZiAo
aXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHRo
aXNWYWx1ZSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNPdGhl
clNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIE90aGVy
VXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSUmVnIHRo
aXNWYWx1ZVRhZ0dQUiA9IHRoaXNWYWx1ZS50YWdHUFIoKTsKICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyB8IDEpID09IEpTVmFsdWU6Ok51bGxU
YWcsIFVuZGVmaW5lZFRhZ19PUl8xX0VRVUFMU19OdWxsVGFnKTsKLSAgICAgICAgICAgIG1faml0
Lm1vdmUodGhpc1ZhbHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG1faml0Lm9y
MzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMg
aGFyZC4gSXQgd291bGQgYmUgYmV0dGVyIHRvIHNhdmUgdGhlIHZhbHVlLCBidXQgd2UgY2FuJ3Qg
cXVpdGUgZG8gaXQsCi0gICAgICAgICAgICAvLyBzaW5jZSB0aGlzIG9wZXJhdGlvbiBkb2VzIG5v
dCBvdGhlcndpc2UgZ2V0IHRoZSBwYXlsb2FkLgotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkp
OworICAgICAgICAgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjT3Ro
ZXIpKSB7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVUYWdHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGhhcmQuIEl0IHdvdWxkIGJlIGJl
dHRlciB0byBzYXZlIHRoZSB2YWx1ZSwgYnV0IHdlIGNhbid0IHF1aXRlIGRvIGl0LAorICAgICAg
ICAgICAgICAgIC8vIHNpbmNlIHRoaXMgb3BlcmF0aW9uIGRvZXMgbm90IG90aGVyd2lzZSBnZXQg
dGhlIHBheWxvYWQuCisgICAgICAgICAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlUmVncygpLCBub2RlLT5jaGlsZDEoKSwgU3BlY090aGVyLAorICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51
bGxUYWcpKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsVGhpc09iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgY2VsbFJl
c3VsdChzY3JhdGNoR1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAoaXNPYmplY3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpKSkgeworICAgICAgICBjYXNlIE9iamVjdFVzZTogewogICAgICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghaXNPYmplY3RTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBub2RlLT5jaGls
ZDEoKSwgU3BlY09iamVjdCwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAg
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKICAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC0zNjgwLDE3ICszNjg0
LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0
aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdGhpc1ZhbHVl
VGFnR1BSID0gdGhpc1ZhbHVlLnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlUGF5
bG9hZEdQUiA9IHRoaXNWYWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIAotICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRUYWcodGhp
cyk7Ci0gICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRUaGlzLCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBh
eWxvYWQuZ3ByKCksIHRoaXNWYWx1ZVRhZ0dQUiwgdGhpc1ZhbHVlUGF5bG9hZEdQUik7Ci0gICAg
ICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAg
ICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNW
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVl
VGFnR1BSID0gdGhpc1ZhbHVlLnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1
ZVBheWxvYWRHUFIgPSB0aGlzVmFsdWUucGF5bG9hZEdQUigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJS
ZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXls
b2FkKHRoaXMpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VGhp
cywgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCB0aGlzVmFsdWVUYWdHUFIs
IHRoaXNWYWx1ZVBheWxvYWRHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjZWxsUmVz
dWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzkwNiw3ICszOTE4LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC0zOTI2LDI0ICszOTM5LDMy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIGJhc2VUYWdHUFIgPSBiYXNl
LnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgYmFzZVBheWxvYWRHUFIgPSBiYXNlLnBheWxvYWRH
UFIoKTsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNl
VGFnR1BSID0gYmFzZS50YWdHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUGF5bG9hZEdQ
UiA9IGJhc2UucGF5bG9hZEdQUigpOwogCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHRUYWcodGhp
cyk7Ci0gICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgR1BS
UmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0UGF5bG9hZCh0
aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7
CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7CiAKLSAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAg
ICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2pp
dC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGJhc2VUYWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RD
ZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBiYXNlVGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgICAgICAKLSAgICAgICAgY2FjaGVk
R2V0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlVGFnR1BSLCBiYXNlUGF5bG9hZEdQUiwgcmVz
dWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5v
dENlbGwsIERvbnRTcGlsbCk7CisgICAgICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVP
cmlnaW4sIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBh
eWxvYWRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCwgRG9udFNwaWxsKTsK
ICAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXls
b2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0zOTY3LDEzICszOTg4LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgogICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yobm9kZS0+c3RydWN0dXJl
U2V0KCkpCi0gICAgICAgICAgICAmJiBpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKSB7
Ci0gICAgICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIAogICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBu
b2RlLT5vcCgpID09IEZvcndhcmRDaGVja1N0cnVjdHVyZSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6
IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCksIGRpcmVjdGlvbik7CiAgICAgICAgIApAQCAtNDAzMiw2ICs0
MDQ2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpF
cXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbVB0cihub2RlLT5zdHJ1Y3R1cmUoKSkpOwogICAgICAgICBtX2pp
dC5icmVha3BvaW50KCk7CiAgICAgICAgIGlzT0subGluaygmbV9qaXQpOworI2Vsc2UKKyAgICAg
ICAgc3BlY3VsYWNlQ2VsbChub2RlLT5jaGlsZDEoKSk7CiAjZW5kaWYKIAogICAgICAgICBub1Jl
c3VsdChub2RlKTsKQEAgLTQwMzksNiArNDA1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUGhhbnRvbVB1dFN0
cnVjdHVyZTogeworICAgICAgICBBU1NFUlQoaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnBy
ZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRl
ZCgpKTsKICAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oCiAgICAgICAg
ICAgICBub2RlLT5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpLApAQCAtNDM5MCwxOCArNDQw
NywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKIAorICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IFVudHlwZWRVc2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxV
c2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSk7CisKICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCB0YWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZykpOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwo
KSkKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIs
IHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgaXNOb3RDZWxsKTsKIAotICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgeworICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSB8fCBub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCB0ZW1wR1BSKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IG1f
aml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0
ZW1wR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0
cmluZ1R5cGUpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgbm90U3RyaW5n
KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KQorICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5
bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nLCBub3RTdHJpbmcpOwogICAgICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c21hbGxT
dHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIGRvbmVKdW1w
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpICE9IFN0cmluZ1VzZSkgewogICAgICAgICAgICAgICAgIG5vdFN0cmluZy5s
aW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBl
T2YsIHJlc3VsdEdQUiwgcGF5bG9hZEdQUik7CiAgICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwpAQCAtNDQxMSw3ICs0NDMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSkgewogICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0
KTsKIAogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCB0YWdHUFIsIHRl
bXBHUFIpOwpAQCAtNDkyOCw2ICs0OTQ3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFBoYW50b206CisgICAg
ICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1faml0LmdyYXBoKCksIG5vZGUsIHNwZWN1bGF0
ZSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKwogICAgIGNhc2Ug
UGhhbnRvbUxvY2FsOgogICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCiAgICAgICAgIG5vUmVz
dWx0KG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNDM1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwy
OCArMzksMzAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlKiBub2Rl
LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJ
bnRlZ2VyKEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewotICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAg
ICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQzMikpOworICAgIAorICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsK
ICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXTsKIAogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUp
IHsKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUt
Pmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJD
b25zdGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChl
ZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpLCBncHIpOwogICAgICAg
ICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAg
ICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFu
dChub2RlKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZh
bHVlT2ZOdW1iZXJDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25z
dGFudChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBq
c051bWJlcih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUoanNW
YWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0Nv
bnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkp
LCBncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewpAQCAtMTE3LDI3ICsxMTksMjcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlKgogICAgIH0KIH0KIAotR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlKiBub2RlKQorR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsSlNWYWx1ZShFZGdlIGVkZ2UpCiB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAK
ICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1h
dE5vbmU6IHsKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYg
KG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZSkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaW5m
by5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZSkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZh
bHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3By
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgeworICAg
ICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAg
ICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRK
U0RvdWJsZSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6OkVuY29k
ZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpOworICAgICAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWVPZk51bWJlckNv
bnN0YW50KGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlKSk7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9k
ZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChlZGdlLm5vZGUoKSkpOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uu
bm9kZSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAg
ICAgICAgfQpAQCAtODAyLDE4ICs4MDQsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZQogfQogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KLUdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGUqIG5vZGUsIERhdGFGb3JtYXQm
IHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoRWRnZSBlZGdlLCBEYXRhRm9y
bWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIlNwZWNJbnRAJWQgICAi
LCBub2RlLT5pbmRleCgpKTsKKyAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIGVkZ2UtPmlu
ZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9k
ZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5v
ZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7
CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3duSW50MzJVc2UgfHwgISh2YWx1ZS5t
X3R5cGUgJiB+U3BlY0ludDMyKSk7CisgICAgdmFsdWUuZmlsdGVyKFNwZWNJbnQzMik7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3Rlcigp
OwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNl
IERhdGFGb3JtYXROb25lOiB7Ci0gICAgICAgIGlmICgobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiAh
aXNJbnQzMkNvbnN0YW50KG5vZGUpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1h
dERvdWJsZSkgeworICAgICAgICBpZiAoKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWlzSW50MzJD
b25zdGFudChlZGdlLm5vZGUoKSkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
RG91YmxlKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVy
bkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KCk7CkBAIC04MjEsMTAgKzgyNiwxMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnRJCiAgICAgICAgIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAot
ICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFz
Q29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29u
c3RhbnQobm9kZSkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
MzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSkpLCBncHIpOworICAgICAgICAgICAgQVNTRVJU
KGlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSwg
Z3ByKTsKICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAg
ICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICBy
ZXR1cm4gZ3ByOwpAQCAtODY0LDggKzg2OSw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKICAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIu
CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhn
cHIpOwotICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNJbnQzMikK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwg
ZWRnZSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIGRpcmVjdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAvLyBJ
ZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJldHVybi4KICAgICAgICAgaWYgKCFzdHJpY3QpIHsKQEAg
LTkxMCwxMCArOTE1LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEkKIAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0Rv
dWJsZTogewotICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiBpc0ludDMyQ29uc3Rh
bnQobm9kZSkpIHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgaXNJbnQzMkNv
bnN0YW50KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRl
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGUpKSwgZ3ByKTsKKyAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZh
bHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CiAgICAgICAgICAgICByZXR1
cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAg
ICAgICAgIH0KQEAgLTkzNiwzNSArOTQxLDM4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKICAgICB9CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUludChOb2RlKiBub2RlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUludChFZGdlIGVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJu
YWw8ZmFsc2U+KG5vZGUsIHJldHVybkZvcm1hdCwgZGlyZWN0aW9uKTsKKyAgICByZXR1cm4gZmls
bFNwZWN1bGF0ZUludEludGVybmFsPGZhbHNlPihlZGdlLCByZXR1cm5Gb3JtYXQsIGRpcmVjdGlv
bik7CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludFN0cmljdChO
b2RlKiBub2RlKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50U3RyaWN0
KEVkZ2UgZWRnZSkKIHsKICAgICBEYXRhRm9ybWF0IG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyOwot
ICAgIEdQUlJlZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8dHJ1ZT4obm9kZSwg
bXVzdEJlRGF0YUZvcm1hdEludGVnZXIsIEJhY2t3YXJkU3BlY3VsYXRpb24pOworICAgIEdQUlJl
ZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8dHJ1ZT4oZWRnZSwgbXVzdEJlRGF0
YUZvcm1hdEludGVnZXIsIEJhY2t3YXJkU3BlY3VsYXRpb24pOwogICAgIFJFTEVBU0VfQVNTRVJU
KG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyID09IERhdGFGb3JtYXRJbnRlZ2VyKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1GUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
bGUoTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorRlBSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uKQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICBkYXRhTG9nRigiU3BlY0RvdWJsZUAlZCAgICIsIG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFM
b2dGKCJTcGVjRG91YmxlQCVkICAgIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVj
dWxhdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICBBU1NFUlQoZWRnZS51c2VLaW5k
KCkgIT0gS25vd25OdW1iZXJVc2UgfHwgISh2YWx1ZS5tX3R5cGUgJiB+U3BlY051bWJlcikpOwor
ICAgIHZhbHVlLmZpbHRlcihTcGVjTnVtYmVyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyID0gZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICBpZiAoaW5m
by5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAgIGlmIChub2Rl
LT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAg
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChl
ZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUo
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWlu
dGVycHJldERvdWJsZVRvSW50NjQoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlKSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQoc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpKSksIGdwcik7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAgICAgICAgICAgIHVu
bG9jayhncHIpOwogCkBAIC05NzIsOSArOTgwLDkgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJl
YW0sIGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUpKSB7CisgICAgICAgICAgICBpZiAo
aXNOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcg
ZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQodmFsdWVPZk51bWJlckNvbnN0
YW50KG5vZGUpKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFu
dChlZGdlLm5vZGUoKSkpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0Rv
dWJsZShncHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKQEAgLTEwMzgs
OCArMTA0Niw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogCi0gICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbih0eXBlKSkK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoanNWYWx1
ZUdwciksIG5vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywganNW
YWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAg
ICAgICAgaWYgKHR5cGUgJiB+U3BlY051bWJlcikKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoanNWYWx1ZUdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKIAogICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0
IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICBtX2pp
dC5tb3ZlKGpzVmFsdWVHcHIsIHRlbXBHcHIpOwpAQCAtMTEwMiwxMyArMTExMCwxNiBAQCBGUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgfQogfQogCi1HUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKE5vZGUqIG5vZGUsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUNlbGwoRWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjQ2VsbEAlZCAgICIs
IG5vZGUtPmluZGV4KCkpOworICAgIGRhdGFMb2dGKCJTcGVjQ2VsbEAlZCAgICIsIGVkZ2UtPmlu
ZGV4KCkpOwogI2VuZGlmCi0gICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9k
ZShub2RlKS5tX3R5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5v
ZGUtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS5mb3JOb2RlKGVkZ2UpOworICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSB2YWx1ZS5tX3R5cGU7
CisgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSB8fCAhKHZhbHVlLm1f
dHlwZSAmIH5TcGVjQ2VsbCkpOworICAgIHZhbHVlLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0
ZXJdOwogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKQEAgLTExMjAsOCAr
MTEzMSw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAg
ICAgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2Rl
LT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9m
SlNDb25zdGFudChub2RlKTsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgp
KTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKQEAgLTExMzYsOCArMTE0Nyw4IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgbV9qaXQubG9h
ZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKLSAg
ICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZSwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
ciksIGRpcmVjdGlvbik7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNDZWxsKQorICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2pp
dC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAg
fQpAQCAtMTE1Miw4ICsxMTYzLDggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbAogICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBp
bmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBpZiAoIWlzQ2Vs
bFNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgZGlyZWN0aW9uKTsK
KyAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0NlbGwpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBk
aXJlY3Rpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRh
Rm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xMTc3LDEzICsx
MTg4LDE1IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICB9
CiB9CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSog
bm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbikKIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxv
Z0YoIlNwZWNCb29sQCVkICAgIiwgbm9kZS0+aW5kZXgoKSk7CisgICAgZGF0YUxvZ0YoIlNwZWNC
b29sQCVkICAgIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICBTcGVjdWxhdGVkVHlwZSB0
eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoZWRnZSk7CisgICAgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IHZhbHVlLm1fdHlwZTsKKyAgICB2YWx1ZS5maWx0ZXIoU3BlY0Jvb2xlYW4pOworICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CkBAIC0xMTk1
LDggKzEyMDgsOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAg
ICAgICAgIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAo
bm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZSk7CisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7
CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5v
ZGUoKSk7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CkBAIC0xMjExLDkgKzEyMjQs
OSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIG1f
aml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OwogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRK
Uyk7Ci0gICAgICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkpIHsKKyAgICAgICAg
aWYgKHR5cGUgJiB+U3BlY0Jvb2xlYW4pIHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUsIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVh
blNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2Us
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9v
bGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CiAg
ICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAtMTIzMCw5ICsxMjQzLDkg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIGNhc2UgRGF0
YUZvcm1hdEpTOiB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBt
X2dwcnMubG9jayhncHIpOwotICAgICAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHR5cGUp
KSB7CisgICAgICAgIGlmICh0eXBlICYgflNwZWNCb29sZWFuKSB7CiAgICAgICAgICAgICBtX2pp
dC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBn
cHIpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhn
cHIpLCBub2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdw
ciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJl
Y292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBkaXJl
Y3Rpb24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlv
blJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpLCBk
aXJlY3Rpb24pOwogICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQogICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKQEAgLTEy
OTAsMzUgKzEzMDMsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFs
aQogICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQo
KSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
Ci0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ax
R1BSKSwgbm9kZS0+Y2hpbGQxKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBl
ICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9k
ZS0+Y2hpbGQyKCksCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRy
KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BS
KSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIg
PSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVH
UFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUg
JiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAg
ICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2Rl
LT5jaGlsZDEoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAg
ICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsIG1faml0
LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksCiAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBA
IC0xMzI2LDE0ICsxMzMwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RF
cXVhbGkKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5
cGUgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBu
b2RlLT5jaGlsZDIoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwot
ICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksIFNwZWNPYmplY3QsIG1f
aml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAor
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS0+Y2hpbGQyKCksCiAgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
CkBAIC0xMzU0LDcgKzEzNTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
RXF1YWxpCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVy
RXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVmdENoaWxkKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBv
cDIodGhpcywgcmlnaHRDaGlsZCk7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0
Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICAKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwpAQCAtMTM2Mywy
NyArMTM2NCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAg
ICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxW
YWxpZCgpKSB7IAogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9k
ZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVjT2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0
LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAg
IEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxl
ZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIo
Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwgU3BlY09iamVjdCwg
bV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAt
MTM5OSwyNyArMTM5NCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9P
YmplCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBt
dXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1f
Y3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7Ci0gICAgICAgIGlmICgo
bV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFNwZWNDZWxsKSAmIH5TcGVjT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQsCi0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLCAoflNwZWNDZWxsKSB8IFNwZWNP
YmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhp
cyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBpZiAoKG1fc3Rh
dGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkg
ewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBl
LCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVHUFIsCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBT
cGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIApAQCAtMTQz
NywxMiArMTQyNiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmpl
CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGls
ZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8g
cHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0
YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIp
IHsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2socmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIpKSB7CiAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBt
X2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQp
LCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQubm9kZSgpLAor
ICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkp
OwpAQCAtMTQ2NCw3ICsxNDUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZQogICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJs
b2NrSW5kZXgoKTsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVm
dENoaWxkKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgcmlnaHRDaGlsZCk7CisgICAg
SlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAKICAgICBHUFJSZWcg
b3AxR1BSID0gb3AxLmdwcigpOwpAQCAtMTQ3MywyNyArMTQ2MiwyMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5n
cmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgp
KTsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShsZWZ0Q2hpbGQpLm1fdHlwZSAmIH5TcGVj
T2JqZWN0KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIGxlZnRDaGlsZCwg
Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCAKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCisgICAgICAgICAgICBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIp
LCBsZWZ0Q2hpbGQsIFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1
Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwot
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlICYgflNwZWNPYmpl
Y3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENoaWxkLCAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwgCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
b3AxR1BSKSwgbGVmdENoaWxkLCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiks
IGxlZnRDaGlsZCwgCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTA5LDI3ICsxNDkyLDIxIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAvLyBXZSBrbm93IHRo
YXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7
CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5hZGQoc3BlY3Vs
YXRpb25XYXRjaHBvaW50KCkpOwotICAgICAgICBpZiAoKG1fc3RhdGUuZm9yTm9kZShyaWdodENo
aWxkKS5tX3R5cGUgJiBTcGVjQ2VsbCkgJiB+U3BlY09iamVjdCkgewotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJH
UFIpLCByaWdodENoaWxkLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKLSAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9
CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BS
KSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCAKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJSZWcgc3Ry
dWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c3RydWN0dXJlR1BSKTsKLSAgICAgICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCku
bV90eXBlICYgU3BlY0NlbGwpICYgflNwZWNPYmplY3QpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwg
cmlnaHRDaGlsZCwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZUdQUiwgCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAg
ICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
b3AyR1BSKSwgcmlnaHRDaGlsZCwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmVHUFIsIAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiks
IHJpZ2h0Q2hpbGQsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgCkBAIC0xNTQ0LDcgKzE1MjEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgCiAgICAgLy8gV2Uga25v
dyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwu
IENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBlaXRo
ZXIgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgaWYgKChtX3N0YXRlLmZvck5vZGUocmlnaHRDaGls
ZCkubV90eXBlICYgflNwZWNDZWxsKSAmIH5TcGVjT3RoZXIpCisgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhyaWdodENoaWxkLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpCiAgICAgICAgIHJpZ2h0Tm90
Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGp1bXAobm90VGFrZW4sIEZv
cmNlSnVtcCk7CkBAIC0xNTUzLDkgKzE1MzAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUGVlcEhvbGVPYmplCiAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOwog
ICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRV
bmRlZmluZWQpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKLSAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQs
Ci0gICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgdHlwZUNoZWNrKAorICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZCwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIsIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgcmVzdWx0R1BSLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoVmFsdWVOdWxsKSkpOwogICAgIH0KQEAgLTE2MDksOSArMTU4NSw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RP
ck90aGVyTG9naWNhbE5vdChFZGdlIG5vZGVVc2UsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2sp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoRWRn
ZSBub2RlVXNlKQogewotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOwor
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwpAQCAtMTYxOSwyNyArMTU5NSwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3Vy
cmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgp
LT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKLQotICAgICAgICBpZiAobmVl
ZFNwZWN1bGF0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLAotICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFB0cigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAot
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3Qs
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAg
ICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZUdQUik7CiAKLSAgICAgICAgaWYgKG5lZWRTcGVj
dWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlR1BSLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpKTsKLSAgICAgICAgfQorICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2Jq
ZWN0LCBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZUdQUiwKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSAKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KApAQCAt
MTY2MCwxMSArMTYzMSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JP
dGhlCiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAKLSAgICBpZiAobmVlZFNwZWN1
bGF0aW9uQ2hlY2spIHsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZVVzZSwgU3BlY0NlbGwg
fCBTcGVjT3RoZXIpKSB7CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CiAgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0Jp
dFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAKLSAgICAgICAgICAgIG1faml0LmJy
YW5jaDY0KAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLCBtX2ppdC5icmFuY2g2NCgKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAogICAgICAgICAgICAgICAg
IHJlc3VsdEdQUiwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChWYWx1ZU51bGwpKSk7CkBAIC0xNjc4LDEyICsxNjQ5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z2ljYWxOb3QoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxv
Z2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCksCi0gICAgICAgICAgICAhaXNPYmplY3RPck90aGVyU3Bl
Y3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICBz
d2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgT2JqZWN0T3JPdGhl
clVzZTogeworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIAorICAgIGNhc2UgSW50MzJVc2U6
IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAg
ICAgbV9qaXQuY29tcGFyZTMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWUuZ3ByKCksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIoKSk7CkBAIC0xNjkxLDcg
KzE2NjMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAgIAorICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTE3MDMsOSArMTY3Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KTsKLSAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAg
aWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSkgeworICAgIGNhc2UgQm9vbGVhblVzZTogeworICAgICAgICBpZiAoIW5lZWRzVHlw
ZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbGVhbikpIHsKICAgICAgICAgICAgIFNwZWN1
bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICAgICAgCkBAIC0x
NzE2LDQxICsxNjg4LDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90
KE4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklYTUU6IFdlIGNv
dWxkIHJldXNlLCBidXQgb24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRv
IHJlc3RvcmUgdGFnIChha2luIHRvIGFkZCkuCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3Zl
KHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHQuZ3ByKCkpOwot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlLmdwcigp
KSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVy
bywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkp
OworICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIo
KSksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbGVhbiwgbV9qaXQuYnJhbmNoVGVzdDY0KAorICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAgICAgIG1faml0LnhvcjY0KFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0Lmdwcigp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBz
aG91bGQgdXNlIGl0IGhlcmUuCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICAg
ICAgCisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgCi0gICAgR1BSUmVnIGFyZzFHUFIg
PSBhcmcxLmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgICAKLSAgICBhcmcxLnVzZSgpOworICAgICAgICBhcmcxLnVz
ZSgpOwogICAgIAotICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsKLSAgICBtX2pp
dC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBy
ZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNo
VGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKKyAgICAgICAgbV9qaXQubW92ZShhcmcxR1BSLCByZXN1
bHRHUFIpOworICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7CiAgICAgCi0g
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbChzbG93Q2FzZSwg
dGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJnMUdQUikpOwor
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChz
bG93Q2FzZSwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgYXJn
MUdQUikpOwogICAgIAotICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdl
IG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhl
ckJyYW5jaChFZGdlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFr
ZW4pCiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSk7CisgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CkBA
IC0xNzU5LDIzICsxNzQxLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90
aGVyQnIKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3Rp
bGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1fY3Vy
cmVudE5vZGUtPmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgp
LT5hZGQoc3BlY3VsYXRpb25XYXRjaHBvaW50KCkpOwogCi0gICAgICAgIGlmIChuZWVkU3BlY3Vs
YXRpb25DaGVjaykgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
UHRyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAotICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkp
OwotICAgICAgICB9CisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0
LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHZhbHVlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAKLSAg
ICAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwKLSAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwotICAgICAgICB9CisgICAgICAgIERGR19UWVBF
X0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNw
ZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoVGVzdDgoSklUQ29t
cGlsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVy
ZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKIApAQCAtMTc5MSwxMCArMTc2OSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0T2JqZWN0T3JPdGhlckJyCiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAg
Ci0gICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CisgICAgaWYgKG5lZWRzVHlwZUNoZWNr
KG5vZGVVc2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewogICAgICAgICBtX2ppdC5tb3ZlKHZh
bHVlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCBt
X2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOworICAgICAgICB0eXBlQ2hlY2so
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIFNwZWNDZWxsIHwg
U3BlY090aGVyLCBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFs
dWVOdWxsKSkpOwogICAgIH0KICAgICBqdW1wKG5vdFRha2VuKTsKICAgICAKQEAgLTE4MDYsMTQg
KzE3ODYsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBCbG9ja0lu
ZGV4IG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCi0gICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKLSAgICAg
ICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS0+Y2hpbGQxKCksIHRha2VuLCBub3RUYWtl
biwgCi0gICAgICAgICAgICAhaXNPYmplY3RPck90aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSkgeworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogeworICAgICAgICBlbWl0
T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLT5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKSB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIAorICAgIGNhc2UgSW50MzJVc2U6CisgICAg
Y2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBJbnQzMlVzZSkgewogICAgICAgICAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CkBAIC0xODM3LDU2
ICsxODE4LDYyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICBj
YXNlIFVudHlwZWRVc2U6CisgICAgY2FzZSBCb29sZWFuVXNlOiB7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgCi0g
ICAgYm9vbCBwcmVkaWN0Qm9vbGVhbiA9IGlzQm9vbGVhblNwZWN1bGF0aW9uKG5vZGUtPmNoaWxk
MSgpLT5wcmVkaWN0aW9uKCkpOwotICAgIAotICAgIGlmIChwcmVkaWN0Qm9vbGVhbikgewotICAg
ICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0
aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOworICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IEJvb2xlYW5Vc2UpIHsKKyAgICAgICAgICAgIGlmICgh
bmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNCb29sZWFuKSkgeworICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodGFr
ZW4gPT0gbmV4dEJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fz
c2VtYmxlcjo6WmVybzsKLSAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwot
ICAgICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47Ci0gICAgICAgICAgICAgICAgbm90VGFr
ZW4gPSB0bXA7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRha2VuID09IG5l
eHRCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1i
bGVyOjpaZXJvOworICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwor
ICAgICAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAgICAgICAgICAgICAg
ICBub3RUYWtlbiA9IHRtcDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBicmFuY2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMy
KHRydWUpLCB0YWtlbik7Ci0gICAgICAgICAgICBqdW1wKG5vdFRha2VuKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsKKyAgICAgICAgICAgICAgICBicmFu
Y2hUZXN0MzIoY29uZGl0aW9uLCB2YWx1ZUdQUiwgVHJ1c3RlZEltbTMyKHRydWUpLCB0YWtlbik7
CisgICAgICAgICAgICAgICAganVtcChub3RUYWtlbik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgbm9kZS0+Y2hpbGQxKCksIG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFs
dWUudXNlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY0ludDMyKSB7Ci0g
ICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBu
b3RUYWtlbik7Ci0gICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7Ci0g
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0eXBlQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBub2RlLT5jaGlsZDEoKSwgU3BlY0Jvb2xlYW4sIG1faml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YWx1ZS51c2UoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNJbnQzMikgeworICAgICAgICAgICAgICAgIGJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIG5vdFRha2VuKTsKKyAg
ICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB2YWx1
ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7CisgICAgICAgICAg
ICB9CiAgICAgCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3Bl
Y0Jvb2xlYW4pIHsKLSAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsKLSAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQm9vbGVhbikg
eworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihmYWxzZSkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCB0YWtlbik7CisgICAgICAgICAgICB9CiAg
ICAgCi0gICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAg
Ci0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0Jvb2xlYW4sIHJlc3VsdEdQUiwgdmFsdWVH
UFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0R1BSLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CiAgICAg
Ci0gICAgICAgIGJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0R1BS
LCB0YWtlbik7Ci0gICAgICAgIGp1bXAobm90VGFrZW4pOworICAgICAgICAgICAgYnJhbmNoVGVz
dDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIHRha2VuKTsKKyAgICAgICAg
ICAgIGp1bXAobm90VGFrZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBub1Jlc3Vs
dChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAgICAKLSAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CkBAIC0xOTA4LDEyICsxODk1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBJZGVudGl0eTogewot
ICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGRvbmUgYSBsb3QgYmV0dGVyLiBXZSB0YWtlIHRoZSBj
aGVhcCB3YXkgb3V0IGJlY2F1c2UgSWRlbnRpdHkKLSAgICAgICAgLy8gaXMgb25seSBnb2luZyB0
byBzdGljayBhcm91bmQgYWZ0ZXIgQ1NFIGlmIHdlIGhhZCBwcmVkaWN0aW9uIHdlaXJkbmVzcy4K
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3BlcmFuZCk7Ci0gICAgICAgIG1faml0
Lm1vdmUob3BlcmFuZC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICAvLyBDU0Ugc2hvdWxkIGFsd2F5cyBlbGlt
aW5hdGUgdGhpcy4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkBAIC0xOTMxLDYgKzE5MTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAvLyBJZiB0aGUgQ0ZBIGlzIHRy
YWNraW5nIHRoaXMgdmFyaWFibGUgYW5kIGl0IGZvdW5kIHRoYXQgdGhlIHZhcmlhYmxlCiAgICAg
ICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVuIGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQg
dG8gcHJvY2VlZC4KICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyYXAgaW5zdGVhZC4KKyAgICAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzgzCiAgICAg
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVy
YWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTIxMzEsMTkgKzIxMTYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBD
aGVja051bWJlcjogewotICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgb3AxLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVl
UmVncyhvcDEuZ3ByKCkpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksCi0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDEuZ3ByKCksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmso
Jm1faml0KTsKLSAgICAgICAgfQotICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOgogICAg
ICAgICBjb21waWxlQWRkKG5vZGUpOwpAQCAtMjE2MiwyMSArMjEzNCwyOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBBcml0aERpdjogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlckZv
ckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkp
Ci0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTog
ewogICAgICAgICAgICAgY29tcGlsZUludGVnZXJBcml0aERpdkZvclg4Nihub2RlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotCi0gICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigp
OwotICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAgICAgICAgbV9qaXQuZGl2RG91
YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7Ci0KLSAgICAgICAgZG91YmxlUmVzdWx0KHJl
c3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6
IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Cisg
ICAgICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgICAgIG1faml0LmRp
dkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIxODYsOCArMjE2Niw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFy
aXRoQWJzOiB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMoKQotICAgICAgICAgICAgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBA
IC0yMjAxLDE4ICsyMTgxLDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5hYnNE
b3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1faml0LmFic0RvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhNaW46CiAg
ICAgY2FzZSBBcml0aE1heDogewotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlckZvckFyaXRobWV0aWMobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5jaGlsZDIoKS5u
b2RlKCkpCi0gICAgICAgICAgICAmJiBub2RlLT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxKTsKQEAgLTIyMzEsMzYgKzIyMTksNDQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Cisg
ICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBk
b25lOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1f
aml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxLmZwcigpLCBv
cDIuZnByKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1f
aml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxLmZwcigpLCBv
cDIuZnByKCkpOwogICAgICAgICAKLSAgICAgICAgLy8gb3AyIGlzIGVhdGhlciB0aGUgbGVzc2Vy
IG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
b3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgOiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW5PckVxdWFsLCBvcDEuZnByKCksIG9wMi5mcHIoKSk7CisgICAgICAgICAgICAvLyBvcDIg
aXMgZWF0aGVyIHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlzIE5hTgorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9
PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgOiBN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsLCBvcDEuZnByKCksIG9wMi5mcHIo
KSk7CiAgICAgICAgIAotICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3
aGljaCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCi0gICAg
ICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4KLSAgICAgICAgbV9q
aXQuYWRkRG91YmxlKG9wMS5mcHIoKSwgb3AyLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAg
ICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgLy8gVW5vcmRlcmVkIGNh
c2UuIFdlIGRvbid0IGtub3cgd2hpY2ggb2Ygb3AxLCBvcDIgaXMgTmFOLiBNYW51ZmFjdHVyZSBO
YU4gYnkgYWRkaW5nIAorICAgICAgICAgICAgLy8gb3AxICsgb3AyIGFuZCBwdXR0aW5nIGl0IGlu
dG8gcmVzdWx0LgorICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKG9wMS5mcHIoKSwgb3AyLmZw
cigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKICAgICAgICAgCi0gICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOwotICAgICAgICBtX2pp
dC5tb3ZlRG91YmxlKG9wMi5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIG9wMkxl
c3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDIuZnByKCks
IHJlc3VsdC5mcHIoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAob3AxLmZwcigpICE9IHJlc3Vs
dC5mcHIoKSkgewotICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAg
ICAgICAgIGlmIChvcDEuZnByKCkgIT0gcmVzdWx0LmZwcigpKSB7CisgICAgICAgICAgICAgICAg
ZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgb3Ax
TGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIo
KSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBvcDFMZXNzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwog
ICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBkb25lLmxp
bmsoJm1faml0KTsKICAgICAgICAgCi0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG5vZGUpOworICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTI2MTcsMTggKzI2MTMsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CisgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwogICAgICAgICAK
ICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5
OjpJbnQzMgotICAgICAgICAgICAgICAgICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKGNoaWxkMykubV90eXBlKSkgewotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlUmVnKSwg
Y2hpbGQzLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIHZhbHVlUmVnLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAg
ICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5OjpJbnQzMikgeworICAgICAg
ICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyh2YWx1ZVJlZyksIGNoaWxkMywgU3BlY0ludDMyLAorICAgICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxv
dywgdmFsdWVSZWcsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgICAgIGlmIChhcnJheU1vZGUudHlwZSgpID09IEFycmF5
OjpDb250aWd1b3VzICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CkBAIC0yOTI4
LDEzICsyOTI0LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CiAKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJy
YXk6OkludDMyICYmICFpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNo
aWxkMigpKS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAg
ICAgICAgICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLT5j
aGlsZDIoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMikg
eworICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMigpLCBTcGVjSW50MzIsCisgICAgICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgIT0gQXJyYXk6OkludDMyICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgp
KSB7CkBAIC0yOTYyLDEzICsyOTU5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSB2YWx1ZS5m
cHIoKTsKIAotICAgICAgICAgICAgaWYgKCFpc1JlYWxOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFuZCB3ZSBuZWVkIHRvIGhv
aXN0IHRoZW0gaW50bwotICAgICAgICAgICAgICAgIC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQu
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAg
QmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCB2YWx1
ZUZQUiwgdmFsdWVGUFIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERGR19UWVBFX0NI
RUNLKAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIG5vZGUtPmNoaWxkMigpLCBTcGVj
UmVhbE51bWJlciwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHZhbHVlRlBSLCB2YWx1ZUZQUikpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3Rv
cmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0
aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwpAQCAtMzE3MSw3ICszMTY0LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBUb1ByaW1pdGl2ZTogewotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgICAgICAvLyBJdCdzIHJlYWxs
eSBwcm9maXRhYmxlIHRvIHNwZWN1bGF0ZSBpbnRlZ2VyLCBzaW5jZSBpdCdzIHJlYWxseSBjaGVh
cCwKICAgICAgICAgICAgIC8vIGl0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IHJlYWwg
d29yaywgYW5kIHdlIGVtaXQgYSBsb3QgbGVzcyBjb2RlLgogICAgICAgICAgICAgCkBAIC0zMTg2
LDMwICszMTgwLDM2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhN
RTogQWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgotICAgICAgICAKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIAotICAgICAgICBHUFJS
ZWcgb3AxR1BSID0gb3AxLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBv
cDEudXNlKCk7CisgICAgICAgICAgICBvcDEudXNlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAo
IShtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH4oU3BlY051bWJlciB8
IFNwZWNCb29sZWFuKSkpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BS
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJl
YWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICAgICAgaWYgKCEobV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVj
Qm9vbGVhbikpKQorICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgYWxyZWFk
eVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDFH
UFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChub3RQcmltaXRpdmUsIHRoaXMs
IG9wZXJhdGlvblRvUHJpbWl0aXZlLCByZXN1bHRHUFIsIG9wMUdQUikpOwotICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbChub3RQcmltaXRpdmUsIHRoaXMsIG9wZXJhdGlvblRvUHJpbWl0aXZlLCBy
ZXN1bHRHUFIsIG9wMUdQUikpOworICAgICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApAQCAtMzI1MSwyNSArMzI1MSwyMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxF
X0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwogICAgICAgICAgICAgICAgICAgICBGUFJSZWcgb3BG
UFIgPSBvcGVyYW5kLmZwcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVhbE51bWJl
clNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgd2F5IG9mIHByb2ZpbGluZyB0aGVzZSwg
YW5kIHdlIG5lZWQgdG8gaG9pc3QgdGhlbSBpbnRvCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kLgotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVl
UmVncygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJs
ZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBS
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwg
dXNlLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aERvdWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CiAgICAgICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlRG91YmxlKG9wRlBSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBzaXplb2YoZG91YmxlKSAqIG9wZXJhbmRJZHgpKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgQUxMX0lO
VDMyX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3Bl
cmFuZCh0aGlzLCB1c2UpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVy
YW5kKHRoaXMsIHVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgICAg
ICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSAmJiAhaXNJbnQzMlNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2Rl
LT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NI
RUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wR1BSKSwgdXNl
LCBTcGVjSW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywg
b3BHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQob3BHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHgp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMzE5LDI1ICszMzE2LDIyIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgICAgICBGUFJSZWcgb3BGUFIg
PSBvcGVyYW5kLmZwcigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzUmVhbE51bWJlclNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIG5lZWQgYSB3YXkgb2YgcHJvZmlsaW5nIHRoZXNlLCBhbmQgd2UgbmVlZCB0byBo
b2lzdCB0aGVtIGludG8KLSAgICAgICAgICAgICAgICAgICAgLy8gU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZC4KLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjUmVhbE51bWJlciwKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwogICAg
ICAgICAgICAgICAgIG1faml0LmJveERvdWJsZShvcEZQUiwgc2NyYXRjaEdQUik7CiAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2Ug
QUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3BlcmFuZCh0aGlzLCB1c2UpOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
ZXJhbmQodGhpcywgdXNlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICAgICAg
ICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhh
c0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSAmJiAhaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3Rh
dGUuZm9yTm9kZSh1c2UpLm1fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9w
R1BSKSwgdXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
CisgICAgICAgICAgICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewor
ICAgICAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKG9wR1BSKSwgdXNlLCBTcGVjSW50MzIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQ
UiwgYnVmZmVyICsgb3BlcmFuZElkeCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTU5
LDI0ICszNTUzLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgaWYgKGlz
T2JqZWN0U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUp
KSB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlz
VmFsdWUpOwotICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWUuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7Ci0gICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzT3RoZXJT
cGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgewotICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBPdGhlclVz
ZTogeworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhp
c1ZhbHVlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzT3RoZXJTcGVjdWxhdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgIGlm
IChuZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY090aGVyKSkgewogICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRl
ZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOworICAgICAgICAgICAgICAgIHR5cGVDaGVj
aygKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNPdGhlciwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQo
CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0
Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KFZhbHVlTnVsbCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxU
aGlzT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKSwgc2NyYXRjaEdQUik7CkBAIC0zNTg0LDMw
ICszNTc1LDQyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNPYmpl
Y3RTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgeworICAgICAgICBj
YXNlIE9iamVjdFVzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1Zh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgdGhpc1ZhbHVlKTsKICAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0
aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzT2JqZWN0U3BlY3VsYXRpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwodGhp
c1ZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6
RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOworICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwodGhpc1ZhbHVlR1BS
KSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNPYmplY3QsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoUHRyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsCisgICAgICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQ
UlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VGhpcywgcmVzdWx0Lmdw
cigpLCB0aGlzVmFsdWVHUFIpOwotICAgICAgICAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewor
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRUaGlzLCByZXN1bHQuZ3ByKCksIHRoaXNWYWx1ZUdQUik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM3
NzYsOCArMzc3OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3Zl
cmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkpKSB7CisKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNlOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgICAgICAKQEAgLTM3OTIsMjAgKzM3OTYs
MjcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIGJhc2UpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBjYXNl
IFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNl
KTsKICAgICAgICAgCi0gICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIAotICAg
ICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwg
bm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsKTsKKyAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblpl
cm8sIGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQ
UiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwpOwogICAgICAg
ICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtMzgxNCw4ICszODI1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24o
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKKworICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogCkBAIC0zODMzLDIxICszODQ1
LDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwogCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CisgICAgICAgICAgICBiYXNlLnVzZSgpOworICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGJhc2VHUFIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgY2FjaGVkR2V0QnlJZChu
b2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSwgbm90Q2VsbCwgRG9udFNwaWxsKTsKKyAgICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9k
ZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVy
KCksIG5vdENlbGwsIERvbnRTcGlsbCk7CiAgICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLQorICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0zODcxLDEzICszODkwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgIGNhc2UgRm9y
d2FyZENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yobm9kZS0+c3RydWN0dXJlU2V0KCkpCi0gICAgICAg
ICAgICAmJiBpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBu
b1Jlc3VsdChub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAog
ICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBub2RlLT5vcCgpID09IEZv
cndhcmRDaGVja1N0cnVjdHVyZSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3Vs
YXRpb247CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCksIGRpcmVjdGlvbik7CiAgICAgICAgIApAQCAtMzk0Miw2ICszOTU0LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGls
ZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbVB0cihub2RlLT5zdHJ1Y3R1cmUoKSkpOwogICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7
CiAgICAgICAgIGlzT0subGluaygmbV9qaXQpOworI2Vsc2UKKyAgICAgICAgc3BlY3VsYXRlQ2Vs
bChub2RlLT5jaGlsZDEoKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG5v
ZGUpOwpAQCAtMzk0OSw2ICszOTYzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJl
OiB7CisgICAgICAgIEFTU0VSVChpc0tub3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsK
KyAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
LnByZXZpb3VzU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpKTsKICAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oCiAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpLApAQCAtNDI3MSw3ICs0
Mjg3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgVHlwZU9mOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsK
ICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwpAQCAtNDI4MCwxOSArNDI5Niwy
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBkb25lSnVtcHM7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKIAogICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblpl
cm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgp
LCBpc05vdENlbGwpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFVu
dHlwZWRVc2UpCisgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNlKHZhbHVl
R1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsLCBpc05vdENlbGwpOwogCi0gICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKSB7CisgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpIHx8IG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCB0ZW1wR1BSKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IG1f
aml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0
ZW1wR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0
cmluZ1R5cGUpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG5vdFN0cmluZyk7CisgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkKKyAgICAg
ICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7CiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Muc3RyaW5nU3Ry
aW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
U3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0g
U3RyaW5nVXNlKSB7CiAgICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmsoJm1faml0KTsKICAg
ICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVzdWx0R1BSLCB2
YWx1ZUdQUik7CiAgICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwpAQCAtNDMwMiw3ICs0MzIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2Vs
bCgpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSkgewogICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxl
cjo6WmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFs
bFN0cmluZ3MubnVtYmVyU3RyaW5nKCkpLCByZXN1bHRHUFIpOwpAQCAtNDc3MSw2ICs0Nzg5LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIFBoYW50b206CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1faml0Lmdy
YXBoKCksIG5vZGUsIHNwZWN1bGF0ZSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgIC8vIFRo
aXMgaXMgYSBuby1vcC4KICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTQz
NTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOCwxNCArMTA4LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJl
bnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFpbCk7CiAg
ICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVl
U291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9k
ZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKLSAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5F
eGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhp
dCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5v
ZGUoKSwganVtcFRvRmFpbCk7CiB9CiAKQEAgLTEyMyw3ICsxMjMsNyBAQCBPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcigpOwotICAgIEFTU0VSVChtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNp
Z25lZCBpbmRleCA9IG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJPZk9TUkV4aXRzKCk7CiAgICAg
bV9qaXQuYXBwZW5kRXhpdEluZm8oKTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NS
RXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwpA
QCAtMTMyLDcgKzEzMiw3IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6
OnMKIAogT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9k
ZVVzZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJl
bnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7CiAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCkpOwogfQogCkBAIC0xNDAsMTQgKzE0MCwxNCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZv
KGp1bXBzVG9GYWlsKTsKICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JF
eGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwogfQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
b3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmIGp1bXBzVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzIHx8IG1fY3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKQEAg
LTE1NSw3ICsxNTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsK
KyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAg
IG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsK
ICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5jb2RlQmxv
Y2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0Lmdy
YXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJl
YW0tPnNpemUoKSwgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVy
aWVzKCkpKTsKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zlcnkm
IHJlY292ZXJ5KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y3VycmVudE5vZGUtPmNhbkV4aXQoKSk7CisgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CiB9CiAKQEAgLTE3
NCwxMSArMTc0LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgK
ICAgICAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBFZGdlIGVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5LCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24pCit7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNl
LCBlZGdlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3ZlcnksIGRpcmVjdGlvbik7Cit9CisKIEp1
bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldhdGNo
cG9pbnQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBu
b2RlKQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhp
dCgpKTsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQp
OwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKEpJVENvbXBpbGVyOjpKdW1wTGlzdCgpKTsKICAg
ICBPU1JFeGl0JiBleGl0ID0gbV9qaXQuY29kZUJsb2NrKCktPm9zckV4aXQoCiAgICAgICAgIG1f
aml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCkBAIC0yODAsMTQgKzI4NSwx
NCBAQCBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJCiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFs
dWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsKLSAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0
KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7
CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBqdW1wVG9G
YWlsKTsKICAgICBjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQodmFsdWVSZWNvdmVyeSk7CiB9
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgY29uc3QgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYg
dmFsdWVSZWNvdmVyeSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8
fCBtX2N1cnJlbnROb2RlLT5jYW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1Zh
bHVlU291cmNlLCBub2RlLCBqdW1wc1RvRmFpbCk7CiAgICAgY29udmVydExhc3RPU1JFeGl0VG9G
b3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQpAQCAtMzAwLDkgKzMwNSwxNCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
a2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBFZGdlIGVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzcGVjdWxhdGlvbkNoZWNr
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsLCBkaXJlY3Rpb24p
OworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSkKIHsK
LSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2N1cnJlbnROb2RlLT5j
YW5FeGl0KCkpOworICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVj
dWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOwogI2VuZGlmCkBAIC0zMTQsMTMgKzMyNCwx
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBFZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNTRVJUKG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNlLm5v
ZGUoKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2Rl
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jdXJyZW50Tm9kZS0+Y2FuRXhpdCgpKTsKKyAgICBBU1NF
UlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1p
bmF0ZWQuXG4iKTsKICNlbmRpZgpAQCAtMzMwLDYgKzM0MCwyNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiAgICAgbV9jb21waWxlT2theSA9IGZhbHNlOwogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjp0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVk
Z2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsKQoreworICAgIEFTU0VSVChuZWVkc1R5cGVDaGVjayhlZGdlLCB0
eXBlc1Bhc3NlZFRocm91Z2gpKTsKKyAgICBtX3N0YXRlLmZvck5vZGUoZWRnZSkuZmlsdGVyKHR5
cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBzb3VyY2Us
IGVkZ2UsIGp1bXBUb0ZhaWwpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkVHlw
ZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5
cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKK3sKKyAgICB0eXBlQ2hlY2soc291cmNlLCBl
ZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpOworICAgIGNvbnZlcnRMYXN0T1NS
RXhpdFRvRm9yd2FyZCh2YWx1ZVJlY292ZXJ5KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
dHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBl
IHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHR5cGVDaGVjayhzb3VyY2UsIGVk
Z2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFpbCk7CisgICAgaWYgKGRpcmVjdGlvbiA9
PSBGb3J3YXJkU3BlY3VsYXRpb24pCisgICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2Fy
ZCgpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjphZGRTbG93UGF0aEdlbmVyYXRvcihQYXNz
T3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aEdlbmVyYXRvcikKIHsKICAgICBtX3Ns
b3dQYXRoR2VuZXJhdG9ycy5hcHBlbmQoc2xvd1BhdGhHZW5lcmF0b3IubGVha1B0cigpKTsKQEAg
LTg3Miw5ICs5MDIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlKiBub2Rl
CiAgICAgYXJyYXlpZnkobm9kZSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCkpOwogfQogCi1H
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGUqIG5vZGUpCitHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKEVkZ2UgZWRnZSkKIHsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAg
IEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJd
OwogICAgIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CkBAIC04ODgsNyAr
OTE4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlKgogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBNdXN0IGJlIGEgY2VsbDsgZmlsbCBpdCBhcyBhIGNl
bGwgYW5kIHRoZW4gcmV0dXJuIHRoZSBwb2ludGVyLgotICAgICAgICByZXR1cm4gZmlsbFNwZWN1
bGF0ZUNlbGwobm9kZSwgQmFja3dhcmRTcGVjdWxhdGlvbik7CisgICAgICAgIHJldHVybiBmaWxs
U3BlY3VsYXRlQ2VsbChlZGdlLCBCYWNrd2FyZFNwZWN1bGF0aW9uKTsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6IHsKQEAgLTg5OCw3ICs5MjgsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGUqCiAgICAgfQogICAgICAgICAKICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwobm9kZSwgQmFja3dh
cmRTcGVjdWxhdGlvbik7CisgICAgICAgIHJldHVybiBmaWxsU3BlY3VsYXRlQ2VsbChlZGdlLCBC
YWNrd2FyZFNwZWN1bGF0aW9uKTsKICAgICB9CiB9CiAKQEAgLTE1MDksMjAgKzE1MzksMjAgQEAg
Ym9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbgogICAgICAgICAvLyBzbyBj
YW4gYmUgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyByZWZlcmVuY2UgdGhlIGNvbXBhcmUu
IAogICAgICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogCi0gICAg
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNl
S2luZChJbnQzMlVzZSkpCiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNo
KG5vZGUsIGJyYW5jaE5vZGUsIGNvbmRpdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpCisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJV
c2UpKQogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKG5vZGUsIGJyYW5j
aE5vZGUsIGRvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0g
Q29tcGFyZUVxKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZVN0cmluZygpIHx8IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkg
eworICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7CiAg
ICAgICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChub2RlLCBicmFuY2hO
b2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3Qo
KSkKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkKICAg
ICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hO
b2RlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhl
cigpKQorICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9i
amVjdFVzZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkK
ICAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVh
bGl0eShub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIGJyYW5jaE5vZGUpOwotICAgICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpCisgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVz
ZSAmJiBub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKQogICAgICAgICAgICAg
ICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KG5vZGUtPmNo
aWxkMigpLCBub2RlLT5jaGlsZDEoKSwgYnJhbmNoTm9kZSk7CiAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5j
aE5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKQEAgLTE2NDUsNiArMTY3NSwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAKICAgICBmb3IgKG1faW5kZXhJ
bkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsrbV9pbmRleEluQmxv
Y2spIHsKICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrW21faW5kZXhJbkJsb2NrXTsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIG1fY2FuRXhpdCA9IG1fY3VycmVudE5vZGUtPmNh
bkV4aXQoKTsKKyNlbmRpZgorICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9z
dGF0ZS5zdGFydEV4ZWN1dGluZyhtX2N1cnJlbnROb2RlKTsKICAgICAgICAgbV9qaXQuc2V0Rm9y
Tm9kZShtX2N1cnJlbnROb2RlKTsKICAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gbV9jdXJy
ZW50Tm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKSB7CkBAIC0xNzExLDkgKzE3NDUsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7
CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoCisgICAgICAgICAgICAgICAgICAgICJTcGVjdWxh
dGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4IiwK
KyAgICAgICAgICAgICAgICAgICAgKGludCltX2N1cnJlbnROb2RlLT5pbmRleCgpLAorICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1f
aml0LmRlYnVnT2Zmc2V0KCkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIChiYyMl
dSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2N1cnJlbnROb2RlLT5pbmRleCgpLCBt
X2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICIpOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJcbiIpOwogI2VuZGlmCisgICAgICAgICAgICB9CiAjaWYgREZHX0VOQUJM
RShKSVRfQlJFQUtfT05fRVZFUllfTk9ERSkKICAgICAgICAgICAgIG1faml0LmJyZWFrcG9pbnQo
KTsKICNlbmRpZgpAQCAtMTc1OSw3ICsxODAxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShCYXNpY0Jsb2NrJgogI2VuZGlmCiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgYWJzdHJhY3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5v
ZGUuCi0gICAgICAgIG1fc3RhdGUuZXhlY3V0ZShtX2luZGV4SW5CbG9jayk7CisgICAgICAgIGlm
IChzaG91bGRFeGVjdXRlRWZmZWN0cykKKyAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVmZmVj
dHMobV9pbmRleEluQmxvY2spOwogICAgICAgICAKICAgICAgICAgaWYgKG1fY3VycmVudE5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CkBAIC0x
OTA2LDEzICsxOTQ5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRC
eVYKIAogICAgIEZQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmZwcigpOwogICAgIAotICAgIGlmICgh
aXNSZWFsTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKGNoaWxkMykubV90eXBlKSkg
ewotICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSBvZiBwcm9maWxpbmcgdGhlc2UsIGFu
ZCB3ZSBuZWVkIHRvIGhvaXN0IHRoZW0gaW50bwotICAgICAgICAvLyBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcsIHZhbHVlUmVnKSk7
Ci0gICAgfQorICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICBKU1ZhbHVlUmVncygpLCBjaGls
ZDMsIFNwZWNSZWFsTnVtYmVyLAorICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgdmFsdWVSZWcs
IHZhbHVlUmVnKSk7CiAgICAgCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1
cm47CkBAIC0yMTA0LDcgKzIxNDQsOCBAQCBHZW5lcmF0ZWRPcGVyYW5kVHlwZSBTcGVjdWxhdGl2
ZUpJVDo6Y2hlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIoTm9k
ZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkgeworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2Fz
ZSBJbnQzMlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMjExMiw1
OCArMjE1Myw1MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVCb29sZWFuKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3Vs
dC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmFuZDMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIAotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNo
IChjaGVja0dlbmVyYXRlZFR5cGVGb3JUb0ludDMyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsK
LSAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJl
c3VsdC5ncHIoKSk7Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBv
cDEuZm9ybWF0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgR2VuZXJhdGVk
T3BlcmFuZERvdWJsZTogewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBFZGdlKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgRG91YmxlVXNlKSk7IC8vIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgd2lsbCBhc3Nl
cnQgdGhhdCB0aGlzIGlzIGEgZG91YmxlIHVzZS4gV2UgZm9yY2UgaXQgdG8gdGhpbmsgdGhhdCBp
dCB3YXMgYSBkb3VibGUgdXNlLCBzaW5jZSB3ZSBhcmUgaW5mZXJyaW5nIHRoYXQgd2Ugb3VnaHQg
dG8gZW1pdCBhIGRvdWJsZSB1c2UgcXVpdGUgbGF0ZS4KLSAgICAgICAgRlBSUmVnIGZwciA9IG9w
MS5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90VHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNh
dGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZh
aWxlZCk7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgY2FzZSBOb3RDZWxsVXNlOiB7CisgICAg
ICAgIHN3aXRjaCAoY2hlY2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKSB7CisgICAgICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEludGVnZXI6IHsKKyAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwg
QmFja3dhcmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgaW50ZWdlclJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUsIG9wMS5mb3JtYXQoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kRG91YmxlOiB7CisgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIEJhY2t3YXJkU3BlY3VsYXRpb24s
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBGUFJSZWcgZnByID0gb3Ax
LmZwcigpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5j
aFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1
bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChub3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwg
ZnByKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90
VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOwogCi0gICAgICAg
IGludGVnZXJSZXN1bHQoZ3ByLCBub2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
YXNlIEdlbmVyYXRlZE9wZXJhbmRKU1ZhbHVlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbm9kZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kSlNW
YWx1ZTogeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogCi0gICAgICAgIEdQUlJlZyBncHIgPSBvcDEu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZw
ci5mcHIoKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBncHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBjb252ZXJ0
ZWQ7Ci0KLSAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdQUlJlZyBncHIg
PSBvcDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0Lmdwcigp
OworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXBGcHIodGhpcyk7CisgICAgICAgICAgICBG
UFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKKworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IGNvbnZlcnRlZDsKKworICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBOdW1iZXJVc2UpIHsKKyAgICAgICAgICAgICAgICBERkdfVFlQ
RV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hp
bGQxKCksIFNwZWNOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2
NCgKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIFNwZWNDZWxsKQotICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUt
PmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIGdwciwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGdwciksIG5vZGUtPmNoaWxkMSgpLCB+
U3BlY0NlbGwsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEl0J3Mg
bm90IGEgY2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8g
MC4KICAgICAgICAgICAgICAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBn
cHIsIFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHcHIpOwpAQCAtMjE3MSw1MiArMjIw
Nyw1NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyCiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaXNOdW1iZXIubGluaygmbV9qaXQpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdl
IGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICAgICAgbV9qaXQubW92ZShn
cHIsIHJlc3VsdEdwcik7Ci0gICAgICAgIHVuYm94RG91YmxlKHJlc3VsdEdwciwgZnByKTsKKyAg
ICAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29k
ZWQgYXMgYSBKU1ZhbHVlCisgICAgICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsK
KyAgICAgICAgICAgIHVuYm94RG91YmxlKHJlc3VsdEdwciwgZnByKTsKIAotICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKHRv
SW50MzIsIHJlc3VsdEdwciwgZnByKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHcHIpOworICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3By
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOwor
ICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwogCi0gICAgICAg
IGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIGNvbnZlcnRlZC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwot
ICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHIsIHJlc3VsdEdwcik7CisgICAgICAg
ICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQuemVyb0V4dGVu
ZDMyVG9QdHIoZ3ByLCByZXN1bHRHcHIpOwogCi0gICAgICAgIGNvbnZlcnRlZC5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwogI2Vsc2UKLSAgICAgICAg
Tm9kZSogY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gY2hpbGROb2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsK
LSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CisgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gY2hp
bGROb2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCi0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CiAKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOwotICAg
ICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgR1BSUmVn
IHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdwciA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBjb252ZXJ0ZWQ7Ci0KLSAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0SlNJbnRlZ2VyKQotICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCBy
ZXN1bHRHcHIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEdQUlJlZyB0YWdHUFIgPSBv
cDEudGFnR1BSKCk7Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKLSAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOwotICAgICAgICAgICAgRlBSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBjb252ZXJ0ZWQ7CiAKLSAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRh
Z0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoaW5mby5y
ZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIpCisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcg
ZnByID0gdGVtcEZwci5mcHIoKTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gTnVtYmVyVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnR1BSLCBw
YXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJl
ciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUg
JiBTcGVjQ2VsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1f
aml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgflNwZWNDZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFs
LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYSBjZWxsOiBzbyB0cnVl
IHR1cm5zIGludG8gMSBhbmQgYWxsIGVsc2UgdHVybnMgaW50byAwLgogICAgICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Jvb2xlYW4gPSBtX2ppdC5icmFuY2gzMihKSVRDb21w
aWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsK
QEAgLTIyMjksMjggKzIyNjksNDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVl
VG9JbnQzMgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaXNOdW1i
ZXIubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BSLCBmcHIsIHNjcmF0Y2guZnBy
KCkpOworICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgZnBy
LCBzY3JhdGNoLmZwcigpKTsKIAotICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0R3ByKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3By
LCBmcHIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwor
ICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7CisgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCByZXN1bHRHcHIsIGZwcik7CisgICAg
ICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwogCi0gICAgICAg
ICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgY29u
dmVydGVkLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBpc0ludGVnZXIubGlu
aygmbV9qaXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIp
OworICAgICAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOwogCi0gICAgICAgICAgICBjb252
ZXJ0ZWQubGluaygmbV9qaXQpOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udmVydGVk
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdEdwciwgbm9kZSk7CisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdw
ciwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBH
ZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
Y2FzZSBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd246CisgICAgCisgICAgY2FzZSBCb29sZWFu
VXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAg
ICAgCisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICBtX2ppdC5hbmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHQuZ3ByKCkp
OworICAgICAgICAKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKCFt
X2NvbXBpbGVPa2F5KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9CiB9
CiAKQEAgLTIzMTMsMTQgKzIzNzEsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlu
dDMyVG9Eb3VibAogICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkpOyAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY29uc3RhbnQgZm9sZGVkLgogICAgIAog
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3R5cGUpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSwgQmFja3dhcmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgbV9q
aXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1bHQuZnByKCkpOwogICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIAogI2lm
IFVTRShKU1ZBTFVFNjQpCkBAIC0yMzMzLDE1ICsyMzkxLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVJbnQzMlRvRG91YmwKICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIg
PSBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
b3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIAotICAgIGlmICgh
aXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpIHsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIp
KSB7CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEZvcndhcmRJbnQzMlRvRG91YmxlKSB7Ci0g
ICAgICAgICAgICBmb3J3YXJkU3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBCYWRU
eXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksCisgICAgICAg
ICAgICBmb3J3YXJkVHlwZUNoZWNrKAorICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQ
UiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjTnVtYmVyLAogICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpLAogICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKG9w
MUdQUiwgRGF0YUZvcm1hdEpTKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQ
UiksIG5vZGUtPmNoaWxkMSgpLAorICAgICAgICAgICAgdHlwZUNoZWNrKAorICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjTnVtYmVyLAogICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3Ax
R1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTIzNjQsMTUgKzI0MjIsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludDMy
VG9Eb3VibAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMy
KAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgCi0gICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSkgeworICAgIGlmIChuZWVk
c1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY051bWJlcikpIHsKICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gRm9yd2FyZEludDMyVG9Eb3VibGUpIHsKLSAgICAgICAgICAgIGZvcndhcmRT
cGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9w
MVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwKKyAgICAgICAg
ICAgIGZvcndhcmRUeXBlQ2hlY2soCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxVGFn
R1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNOdW1iZXIsCiAgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3Ax
VGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSksCiAgICAgICAgICAgICAg
ICAgVmFsdWVSZWNvdmVyeTo6aW5QYWlyKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUikpOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAg
ICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpLCBub2Rl
LT5jaGlsZDEoKSwKKyAgICAgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgICAgICBKU1Zh
bHVlUmVncyhvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY051
bWJlciwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTI1LDQ5ICsyNTgzLDY0IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgbV9qaXQubW92ZShJbW0zMih0b0lu
dDMyKGQpKSwgc2NyYXRjaFJlZyk7CiAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwogICAg
ICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZVVzZS0+c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAg
ICBtX2ppdC5tb3ZlKHZhbHVlT3AuZ3ByKCksIHNjcmF0Y2hSZWcpOwotICAgICAgICBpZiAocm91
bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXpl
ID09IDEpOwotICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwgc2Ny
YXRjaFJlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7Ci0gICAg
ICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsKLSAgICB9IGVsc2UgaWYgKHJvdW5kaW5nID09IENs
YW1wUm91bmRpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwotICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwotICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBGUFJUZW1wb3JhcnkgZmxvYXRT
Y3JhdGNoKHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKLSAgICAg
ICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY29tcGlsZUNsYW1wRG91Ymxl
VG9CeXRlKG1faml0LCBncHIsIGZwciwgZmxvYXRTY3JhdGNoLmZwcigpKTsKLSAgICAgICAgdmFs
dWUuYWRvcHQocmVzdWx0KTsKLSAgICAgICAgdmFsdWVHUFIgPSBncHI7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsK
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgRlBSUmVnIGZwciA9
IHZhbHVlT3AuZnByKCk7Ci0gICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IG1faml0LmJyYW5jaERvdWJsZShNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwsIGZwciwgZnByKTsKLSAgICAgICAgbV9qaXQueG9yUHRy
KGdwciwgZ3ByKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZml4ZWQgPSBtX2ppdC5q
dW1wKCk7Ci0gICAgICAgIG5vdE5hTi5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZmFpbGVkOwotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBl
ZEFycmF5KQotICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVU
b0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRl
RG91YmxlVG9VaW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRl
RmFpbGVkKTsKLSAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChmYWlsZWQsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7Ci0KLSAgICAgICAgZml4ZWQu
bGluaygmbV9qaXQpOwotICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwotICAgICAgICB2YWx1
ZUdQUiA9IGdwcjsKKyAgICAgICAgc3dpdGNoICh2YWx1ZVVzZS51c2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
dmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsK
KyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7CisgICAg
ICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgeworICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBjb21waWxlQ2xhbXBJ
bnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOworICAgICAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNo
UmVnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91
bmRpbmcpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7CisgICAg
ICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNl
KTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICAgICAg
RlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgICAgICBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUo
bV9qaXQsIGdwciwgZnByLCBmbG9hdFNjcmF0Y2guZnByKCkpOworICAgICAgICAgICAgICAgIHZh
bHVlLmFkb3B0KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHI7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
dmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsK
KyAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IG1faml0LmJyYW5jaERvdWJsZShNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwsIGZwciwgZnByKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC54b3JQdHIoZ3ByLCBncHIpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGZpeGVkID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgICAgIG5vdE5hTi5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZmFpbGVkOworICAgICAgICAgICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVk
QXJyYXkpCisgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRl
RG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVG
YWlsZWQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVk
ID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3Nl
bWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChmYWlsZWQsIHRoaXMs
IHRvSW50MzIsIGdwciwgZnByKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Zml4ZWQubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgdmFsdWVHUFIgPSBncHI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICB9CisgICAgCiAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZUdQUiwg
dmFsdWVHUFIgIT0gcHJvcGVydHkpOwogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBiYXNlKTsKICAg
ICBBU1NFUlQodmFsdWVHUFIgIT0gc3RvcmFnZVJlZyk7CkBAIC0yNzA5LDggKzI3ODIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCghIShub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgflNwZWNDZWxsKSAmJiAhIShtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpCi0gICAgICAgIHx8IG5vZGUt
PmNoaWxkMSgpLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSkgeworICAgIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgewogICAgICAgICAvLyBJdCBtaWdodCBub3Qg
YmUgYSBjZWxsLiBTcGVjdWxhdGUgbGVzcyBhZ2dyZXNzaXZlbHkuCiAgICAgICAgIC8vIE9yOiBp
dCBtaWdodCBvbmx5IGJlIHVzZWQgb25jZSAoaS5lLiBieSB1cyksIHNvIHdlIGdldCB6ZXJvIGJl
bmVmaXQKICAgICAgICAgLy8gZnJvbSBzcGVjdWxhdGluZyBhbnkgbW9yZSBhZ2dyZXNzaXZlbHkg
dGhhbiB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8uCkBAIC0yOTQ4LDkgKzMwMjAsMTAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8oTgogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQWRkKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkuYWRkU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNl
S2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBpZiAoaXNOdW1iZXJDb25z
dGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTEg
PSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Cisg
ICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAKQEAgLTI5NjYsNyArMzAzOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
ZGQoTm9kZSogbm8KICAgICAgICAgICAgICAgICAKICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGludDMyX3Qg
aW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQyKCkubm9kZSgp
KTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUt
PmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKQEAgLTMwMDgsOCArMzA4MSw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgaW50ZWdlclJlc3Vs
dChncHJSZXN1bHQsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgICAgICAKLSAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyRXhwZWN0aW5nRGVmaW5lZChub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAKKyAgICBjYXNl
IE51bWJlclVzZTogewogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEs
IG9wMik7CkBAIC0zMDIxLDIyICszMDk0LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBZGQoTm9kZSogbm8KICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZUFk
ZCkgeworICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7CiAgICAgICAgIGNvbXBpbGVWYWx1ZUFkZChu
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICAvLyBXZSBkb24ndCBoYW5k
bGUgdGhpcyB5ZXQuIDotKAotICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQog
fQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kZSogbm9kZSkKIHsK
LSAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7
CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNl
OiB7CiAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkp
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnRBc0ludDMyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90IGlt
bTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgaWYgKG5vZGVD
YW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKQEAgLTMwNTYsNyAr
MzEzMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1i
ZXJDb25zdGFudEFzSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGlu
dDMyX3QgaW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAg
ICAgICAgICAKQEAgLTMwODQsMjAgKzMxNjEsMjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFyaXRoU3ViKE5vZAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKLSAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIEZQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICBjYXNlIE51bWJlclVzZTogeworICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgRlBSUmVnIHJlZzEg
PSBvcDEuZnByKCk7Ci0gICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgbV9qaXQuc3Vi
RG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIEZQUlJlZyByZWcxID0g
b3AxLmZwcigpOworICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKKyAgICAgICAgbV9q
aXQuc3ViRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKLSAgICBkb3VibGVSZXN1
bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIo
KSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZShOb2Rl
KiBub2RlKQogewotICAgIGlmIChtX2ppdC5ncmFwaCgpLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZSkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewor
ICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKIApAQCAtMzExNSwxNyArMzIwMSwyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
QXJpdGhOZWdhdGUoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBGUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgbV9qaXQubmVnYXRlRG91YmxlKG9wMS5mcHIoKSwg
cmVzdWx0LmZwcigpKTsKLQotICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwor
ICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm5lZ2F0ZURvdWJsZShvcDEuZnByKCksIHJlc3Vs
dC5mcHIoKSk7CisgICAgICAgIAorICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBu
b2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZGUqIG5vZGUp
CiB7Ci0gICAgaWYgKG1faml0LmdyYXBoKCkubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2Rl
KSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQz
MlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMzE1
NiwxNyArMzI1MSwyNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9k
CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLQotICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5j
aGlsZDIoKSk7Ci0gICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7Ci0KLSAg
ICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsK
ICAgICAgICAgCi0gICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7
CisgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgb3AxLCBvcDIpOworICAgICAgICAKKyAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnBy
KCk7CisgICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOworICAgICAgICAKKyAgICAgICAg
bV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAgICAgICAgIAotICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIH0KIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCkBAIC0z
Mjc2LDI1ICszMzc5LDMzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnRlZ2VyQXJp
dGgKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZGUqIG5vZGUpCiB7
Ci0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXJGb3JBcml0aG1ldGljKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQotICAgICAgICAmJiBub2Rl
LT5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtp
bmQoKSkgeworICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgY29tcGlsZVNvZnRNb2R1bG8o
bm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgY2FzZSBOdW1iZXJVc2U6
IHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CiAgICAgICAgIAotICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7Ci0gICAgRlBS
UmVnIG9wMkZQUiA9IG9wMi5mcHIoKTsKKyAgICAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIo
KTsKKyAgICAgICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5mcHIoKTsKICAgICAgICAgCi0gICAgZmx1
c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgCi0gICAg
RlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLQotICAgIGNhbGxPcGVyYXRpb24oZm1vZEFzREZHT3Bl
cmF0aW9uLCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKKyAgICAgICAgRlBSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGNhbGxPcGVyYXRpb24oZm1vZEFzREZH
T3BlcmF0aW9uLCByZXN1bHQuZnByKCksIG9wMUZQUiwgb3AyRlBSKTsKKyAgICAgICAgCisgICAg
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogICAgICAgICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQogfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUgaXMg
ZnVzZWQgd2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgpAQCAtMzMwMywzMyArMzQxNCwzMyBAQCBi
b29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsCiAgICAgaWYgKGNvbXBpbGVQ
ZWVwSG9sZUJyYW5jaChub2RlLCBjb25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0aW9u
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsK
KyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewogICAgICAgICBjb21w
aWxlSW50ZWdlckNvbXBhcmUobm9kZSwgY29uZGl0aW9uKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworCisgICAgaWYgKG5v
ZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7CiAgICAgICAgIGNvbXBpbGVEb3VibGVD
b21wYXJlKG5vZGUsIGRvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCiAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7Ci0gICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgfHwgbm9kZS0+Y2hpbGQy
KCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgIGlmIChub2RlLT5pc0JpbmFy
eVVzZUtpbmQoU3RyaW5nVXNlKSkgewogICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmUobm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2Jq
ZWN0KCkpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2Jq
ZWN0VXNlKSkgewogICAgICAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigp
LT5zaG91bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UgJiYgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgp
ID09IE9iamVjdE9yT3RoZXJVc2UpIHsKICAgICAgICAgICAgIGNvbXBpbGVPYmplY3RUb09iamVj
dE9yT3RoZXJFcXVhbGl0eShub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoKSAmJiBub2RlLT5jaGls
ZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlICYmIG5vZGUtPmNoaWxkMigpLnVzZUtp
bmQoKSA9PSBPYmplY3RVc2UpIHsKICAgICAgICAgICAgIGNvbXBpbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eShub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zNDE3LDcgKzM1MjgsOCBAQCBib29sIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDCiAKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVTdHJpY3RFcShOb2RlKiBub2RlKQogewotICAgIGlmIChOb2RlOjpzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KSkgeworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQz
MlVzZTogewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVw
SG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFY
KSB7CiAgICAgICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
c1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKQEAgLTM0MzEsOCArMzU0Myw4IEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAgICAgY29tcGls
ZUludGVnZXJDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51
bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAg
ICAgICAgCisgICAgY2FzZSBOdW1iZXJVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5k
ZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaElu
ZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewogICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9
IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7
CkBAIC0zNDQ2LDEwICszNTU4LDEyIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJp
Y3RFcShOb2QKICAgICAgICAgY29tcGlsZURvdWJsZUNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUVxdWFsKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpIHx8IG5vZGUtPmNo
aWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkKKyAgICAgICAgCisgICAgY2FzZSBTdHJp
bmdVc2U6IHsKICAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7Ci0g
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkpIHsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgT2JqZWN0VXNlOiB7CiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9
IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sg
IT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOwpAQCAtMzQ2Myw4
ICszNTc3LDE1IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAg
ICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIAotICAgIHJldHVybiBub25TcGVjdWxhdGl2ZVN0cmljdEVxKG5vZGUpOwor
ICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgcmV0dXJuIG5vblNwZWN1
bGF0aXZlU3RyaWN0RXEobm9kZSk7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZShOb2RlKiBub2RlKQpAQCAtMzgwMiw2ICszOTIzLDI0MSBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVyCiAgICAgcmV0dXJuIHRlbXBvcmFyeS5ncHIo
KTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlSW50MzIoRWRnZSBlZGdlKQor
eworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0ludDMyKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIChTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCh0aGlzLCBlZGdlKSkuZ3By
KCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU51bWJlcihFZGdlIGVkZ2Up
Cit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjTnVtYmVyKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIG9wZXJhbmQuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisgICAgdHlwZUNoZWNrKAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRn
ZSwgU3BlY051bWJlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBvcGVyYW5kLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
KyAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOworI2Vsc2UKKyAgICBKU1ZhbHVlT3BlcmFuZCBv
cDEodGhpcywgZWRnZSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcGVyYW5kLnRhZ0dQUigpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIEpTVmFs
dWVSZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wMS5wYXlsb2FkR1BSKCkpLCBlZGdlLCBTcGVjTnVt
YmVyLAorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBvcGVyYW5kLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwor
ICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisjZW5kaWYKK30KKwordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRlUmVhbE51bWJlcihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5
cGVDaGVjayhlZGdlLCBTcGVjUmVhbE51bWJlcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CisgICAgRlBSUmVn
IGZwciA9IG9wZXJhbmQuZnByKCk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFs
dWVSZWdzKCksIGVkZ2UsIFNwZWNSZWFsTnVtYmVyLAorICAgICAgICBtX2ppdC5icmFuY2hEb3Vi
bGUoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZCwgZnByLCBmcHIpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlQm9vbGVh
bihFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjQm9vbGVh
bikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAoU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQo
dGhpcywgZWRnZSkpLmdwcigpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVD
ZWxsKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxs
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIChTcGVjdWxhdGVDZWxsT3BlcmFuZCh0aGlz
LCBlZGdlKSkuZ3ByKCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVj
dChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJh
bmQodGhpcywgZWRnZSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCBTcGVjT2JqZWN0LCBtX2ppdC5i
cmFuY2hQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3BlcmFuZC5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoRWRnZSBlZGdlKQoreworICAg
IGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09iamVjdCB8IFNwZWNPdGhlcikpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgR1BSUmVnIGdwciA9IG9wZXJhbmQuZ3ByKCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NCgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBERkdfVFlQRV9DSEVD
SygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsICh+U3BlY0NlbGwp
IHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGdwciwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICBub3RD
ZWxsLmxpbmsoJm1faml0KTsKKyAgICBpZiAobmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwg
fCBTcGVjT3RoZXIpKSB7CisgICAgICAgIG1faml0Lm1vdmUoZ3ByLCB0ZW1wR1BSKTsKKyAgICAg
ICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZp
bmVkKSwgdGVtcEdQUik7CisgICAgICAgIAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaDY0KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGVtcEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KFZhbHVlTnVsbCkpKTsKKyAgICB9CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisjZWxzZQor
ICAgIEdQUlJlZyB0YWdHUFIgPSBvcGVyYW5kLnRhZ0dQUigpOworICAgIEdQUlJlZyBwYXlsb2Fk
R1BSID0gb3BlcmFuZC5wYXlsb2FkR1BSKCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90
Q2VsbCA9CisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
dGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgIERGR19UWVBFX0NI
RUNLKAorICAgICAgICBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCAoflNw
ZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhw
YXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOworICAgIG5vdENlbGwubGluaygmbV9qaXQpOworICAgIGlmIChuZWVkc1R5cGVDaGVjayhl
ZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlcikpIHsKKyAgICAgICAgbV9qaXQubW92ZSh0YWdHUFIs
IHRlbXBHUFIpOworICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcEdQUik7
CisgICAgICAgIAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBKU1ZhbHVlUmVncyh0
YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGVtcEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CisgICAgfQorICAgIGRvbmUubGluaygmbV9qaXQpOwor
I2VuZGlmCit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZyhFZGdlIGVk
Z2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU3RyaW5nKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywg
ZWRnZSk7CisgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKG9wZXJhbmQuZ3ByKCkpLCBlZGdlLCBTcGVjU3RyaW5nLCBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3BlcmFuZC5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Cit9CisKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZU5vdENlbGwoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNU
eXBlQ2hlY2soZWRnZSwgflNwZWNDZWxsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpT
VmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJl
Z3Mob3BlcmFuZC5ncHIoKSksIGVkZ2UsIH5TcGVjQ2VsbCwKKyAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDY0KAorICAgICAgICAgICAgSklUQ29tcGlsZXI6Olplcm8sIG9wZXJhbmQuZ3ByKCksIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworI2Vsc2UKKyAgICB0eXBlQ2hlY2soCisgICAgICAg
IEpTVmFsdWVSZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wZXJhbmQucGF5bG9hZEdQUigpKSwgZWRn
ZSwgflNwZWNDZWxsLAorICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpFcXVhbCwgb3BlcmFuZC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpKSk7CisjZW5kaWYKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT3Ro
ZXIoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY090aGVy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhp
cywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBtX2ppdC5tb3ZlKG9wZXJhbmQuZ3ByKCksIHRlbXBHUFIpOworICAgIG1faml0
LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHRl
bXBHUFIpOworICAgIHR5cGVDaGVjaygKKyAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC5ncHIo
KSksIGVkZ2UsIFNwZWNPdGhlciwKKyAgICAgICAgbV9qaXQuYnJhbmNoNjQoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKKyNlbHNlCisgICAgbV9qaXQubW92
ZShvcGVyYW5kLnRhZ0dQUigpLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0z
MigxKSwgdGVtcEdQUik7CisgICAgdHlwZUNoZWNrKAorICAgICAgICBKU1ZhbHVlUmVncyhvcGVy
YW5kLnRhZ0dQUigpLCBvcGVyYW5kLnBheWxvYWRHUFIoKSksIGVkZ2UsIFNwZWNPdGhlciwKKyAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyNlbmRpZiAgICAKK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZGdlIGVkZ2UpCit7CisgICAgc3dpdGNo
IChlZGdlLnVzZUtpbmQoKSkgeworICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNr
KGVkZ2UsIFNwZWNJbnQzMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtub3duTnVtYmVy
VXNlOgorICAgICAgICBBU1NFUlQoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNOdW1iZXIpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgIEFTU0VSVCgh
bmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJbnQzMlVzZToKKyAgICAgICAgc3BlY3VsYXRlSW50MzIoZWRnZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAgc3BlY3VsYXRlUmVhbE51bWJlcihl
ZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIHNwZWN1
bGF0ZU51bWJlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCb29sZWFuVXNlOgor
ICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENlbGxVc2U6CisgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgT2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgc3BlY3VsYXRl
T2JqZWN0T3JPdGhlcihlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJpbmdVc2U6
CisgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBOb3RDZWxsVXNlOgorICAgICAgICBzcGVjdWxhdGVOb3RDZWxsKGVkZ2UpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIE90aGVyVXNlOgorICAgICAgICBzcGVjdWxhdGVPdGhlcihlZGdlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTQzNTYyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMTMg
KzEyMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgR1BSUmVnIGZp
bGxJbnRlZ2VyKE5vZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOworICAgIEdQUlJlZyBm
aWxsSW50ZWdlcihFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKKyAgICBHUFJSZWcgZmlsbEpT
VmFsdWUoRWRnZSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGJvb2wgZmlsbEpTVmFs
dWUoTm9kZSosIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYpOworICAgIGJvb2wgZmlsbEpTVmFs
dWUoRWRnZSwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7CiAjZW5kaWYKLSAgICBHUFJSZWcg
ZmlsbFN0b3JhZ2UoTm9kZSopOworICAgIEdQUlJlZyBmaWxsU3RvcmFnZShFZGdlKTsKIAogICAg
IC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhH
UFJSZWcgcmVnKQpAQCAtMjk1LDExICsyOTUsMTEgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVk
IGJ5IHRoZSBzcGVjdWxhdGl2ZSBvcGVyYW5kIHR5cGVzLCBiZWxvdywgdG8gZmlsbCBvcGVyYW5k
IHRvCiAgICAgLy8gbWFjaGluZSByZWdpc3RlcnMsIGltcGxpY2l0bHkgZ2VuZXJhdGluZyBzcGVj
dWxhdGlvbiBjaGVja3MgYXMgbmVlZGVkLgotICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50KE5v
ZGUqLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmljdChOb2RlKik7Ci0gICAgRlBSUmVnIGZpbGxT
cGVjdWxhdGVEb3VibGUoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUNlbGwoTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJS
ZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZSosIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAg
ICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludChFZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQs
IFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludFN0cmlj
dChFZGdlKTsKKyAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UsIFNwZWN1bGF0
aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24pOwogICAgIEdlbmVyYXRlZE9wZXJhbmRUeXBlIGNoZWNrR2VuZXJh
dGVkVHlwZUZvclRvSW50MzIoTm9kZSopOwogCiAgICAgdm9pZCBhZGRTbG93UGF0aEdlbmVyYXRv
cihQYXNzT3duUHRyPFNsb3dQYXRoR2VuZXJhdG9yPik7CkBAIC01NDAsMTIgKzU0MCw2IEBAIHB1
YmxpYzoKICAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBt
X2ppdC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQogICAgIGludDMyX3QgdmFs
dWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1
ZU9mSW50MzJDb25zdGFudChub2RlKTsgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQobm9kZSk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIoTm9k
ZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCi0gICAg
ICAgICAgICByZXR1cm4gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVy
biBKU0M6OnRvSW50MzIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpKTsKLSAgICB9CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2Rl
KiBub2RlKSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlKTsgfQog
I2VuZGlmCkBAIC0yMDIzLDkgKzIwMTcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlT2Jq
ZWN0RXF1YWxpdHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhl
ckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpOwogICAgIHZvaWQgY29t
cGlsZVZhbHVlQWRkKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNh
bE5vdChFZGdlIHZhbHVlLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKKyAgICB2b2lkIGNv
bXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlKTsKICAgICB2b2lkIGNvbXBp
bGVMb2dpY2FsTm90KE5vZGUqKTsKLSAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVk
Z2UgdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spOworICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRn
ZSB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbik7CiAgICAgdm9p
ZCBlbWl0QnJhbmNoKE5vZGUqKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVJbnRlZ2VyQ29tcGFy
ZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwpAQCAtMjE3OCw3
ICsyMTcyLDkgQEAgcHVibGljOgogICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiA9IFZhbHVlUmVjb3ZlcnkoKSk7CiAgICAgdm9pZCBm
b3J3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIGNv
bnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgpKTsKICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsK
KyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2Us
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zl
cnkmLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGlj
YWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZSop
OwogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFs
dWVSZWdzLCBFZGdlKTsKQEAgLTIxODgsNiArMjE4NCwyNCBAQCBwdWJsaWM6CiAgICAgSnVtcFJl
cGxhY2VtZW50V2F0Y2hwb2ludCogZm9yd2FyZFNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2lu
ZCA9IFVuY291bnRhYmxlV2F0Y2hwb2ludCk7CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dCogc3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7
CiAgICAgCisgICAgLy8gSGVscGVycyBmb3IgcGVyZm9ybWluZyB0eXBlIGNoZWNrcyBvbiBhbiBl
ZGdlIHN0b3JlZCBpbiB0aGUgZ2l2ZW4gcmVnaXN0ZXJzLgorICAgIGJvb2wgbmVlZHNUeXBlQ2hl
Y2soRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpIHsgcmV0dXJu
IG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZXNQYXNzZWRUaHJvdWdoOyB9Cisg
ICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwgRWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlw
ZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKKyAgICB2
b2lkIGZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwgRWRnZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25z
dCBWYWx1ZVJlY292ZXJ5Jik7CisgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwgRWRn
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisKKyAgICB2b2lkIHNwZWN1bGF0
ZUludDMyKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKEVkZ2UpOworICAgIHZvaWQg
c3BlY3VsYXRlUmVhbE51bWJlcihFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRn
ZSk7CisgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlT2Jq
ZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlKTsKKyAgICB2
b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU5vdENlbGwoRWRn
ZSk7CisgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZShO
b2RlKiwgRWRnZSk7CisgICAgCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVk
QXJyYXlEZXNjcmlwdG9yKEFycmF5TW9kZSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAg
anVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcFdpdGhJbmRleGluZ1R5cGVS
ZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdUeXBlLCBib29sIGludmVydCk7CkBAIC0yMTk3LDcgKzIy
MTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcnJheWlmeShOb2RlKik7CiAgICAgCiAgICAgdGVt
cGxhdGU8Ym9vbCBzdHJpY3Q+Ci0gICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChO
b2RlKiwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7Cisg
ICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChFZGdlLCBEYXRhRm9ybWF0JiByZXR1
cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKICAgICAKICAgICAvLyBJdCBpcyBwb3Nz
aWJsZSwgZHVyaW5nIHNwZWN1bGF0aXZlIGdlbmVyYXRpb24sIHRvIHJlYWNoIGEgc2l0dWF0aW9u
IGluIHdoaWNoIHdlCiAgICAgLy8gY2FuIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIGEgc3BlY3VsYXRp
b24gd2lsbCBmYWlsIChmb3IgZXhhbXBsZSwgd2hlbiB0d28gbm9kZXMKQEAgLTIyNDcsNiArMjI2
MSw5IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4K
ICAgICBCbG9ja0luZGV4IG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgYm9vbCBtX2NhbkV4aXQ7CisjZW5kaWYKICAgICB1bnNpZ25l
ZCBtX2luZGV4SW5CbG9jazsKICAgICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBt
YXBzLgogICAgIFZlY3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87CkBA
IC0yMzA1LDE3ICsyMzIyLDE3IEBAIHB1YmxpYzoKIAogY2xhc3MgSW50ZWdlck9wZXJhbmQgewog
cHVibGljOgotICAgIGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQs
IEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBq
aXQsIEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3Bl
cmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUo
dXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52
YWxpZChJbnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Zvcm1hdChE
YXRhRm9ybWF0Tm9uZSkKICNlbmRpZgogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAg
ICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGpp
dC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMy
VXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoZWRnZS5ub2RlKCkpKQogICAgICAgICAg
ICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yMzI1LDkgKzIzNDIsMTQgQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAKKyAgICBFZGdlIGVkZ2Uo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CisgICAgCiAgICAg
Tm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOworICAgICAg
ICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBEYXRhRm9ybWF0IGZvcm1hdCgp
CkBAIC0yMzQwLDI3ICsyMzYyLDI3IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7
CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAg
ICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEludGVnZXIobm9kZSgpLCBtX2Zvcm1hdCk7
CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSW50ZWdlcihtX2VkZ2Us
IG1fZm9ybWF0KTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHVzZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAg
ICAgIG1faml0LT51c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRp
dmVKSVQqIG1faml0OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBH
UFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgRGF0YUZvcm1hdCBtX2Zvcm1hdDsKIH07CiAKIGNs
YXNzIEpTVmFsdWVPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFu
ZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSkKKyAgICBleHBsaWNpdCBKU1ZhbHVlT3Bl
cmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1v
ZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChq
aXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVkZ2Up
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BS
UmVnKQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTIzNjgsMTQgKzIzOTAsMTQgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NF
UlQodXNlLnVzZUtpbmQoKSAhPSBEb3VibGVVc2UpOworICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09
IFVudHlwZWRVc2UpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGlmIChqaXQtPmlzRmls
bGVkKG1fbm9kZSkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAg
ICAgICBncHIoKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIG1fcmVnaXN0ZXIu
cGFpci50YWdHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgICAgICBtX3JlZ2lzdGVyLnBhaXIucGF5
bG9hZEdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9k
ZSkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBmaWxs
KCk7CiAjZW5kaWYKICAgICB9CkBAIC0yMzk2LDE3ICsyNDE4LDIyIEBAIHB1YmxpYzoKICAgICAg
ICAgfQogI2VuZGlmCiAgICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2Rl
KCk7CiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7
CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAg
ICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbEpTVmFsdWUobm9kZSgpKTsKKyAgICAgICAg
ICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxKU1ZhbHVlKG1fZWRnZSk7CiAgICAgICAg
IHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgSlNWYWx1ZVJlZ3MganNWYWx1ZVJl
Z3MoKQpAQCAtMjQxOSw3ICsyNDQ2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbCgpCiAgICAg
ewogICAgICAgICBpZiAobV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnICYm
IG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAg
ICBtX2lzRG91YmxlID0gIW1faml0LT5maWxsSlNWYWx1ZShub2RlKCksIG1fcmVnaXN0ZXIucGFp
ci50YWdHUFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7Cisg
ICAgICAgICAgICBtX2lzRG91YmxlID0gIW1faml0LT5maWxsSlNWYWx1ZShtX2VkZ2UsIG1fcmVn
aXN0ZXIucGFpci50YWdHUFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVy
LmZwcik7CiAgICAgfQogCiAgICAgR1BSUmVnIHRhZ0dQUigpCkBAIC0yNDUxLDEyICsyNDc4LDEy
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1faml0LT51c2Uo
bV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAogcHJpdmF0ZToK
ICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2Ug
bV9lZGdlOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwog
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTI0NzMsMTQgKzI1MDAsMTQgQEAgcHJpdmF0ZToK
IAogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFN0b3JhZ2VP
cGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQorICAgIGV4cGxpY2l0IFN0b3Jh
Z2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKICAgICAgICAgOiBtX2pp
dChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAgICwgbV9lZGdlKGVk
Z2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJs
ZVVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VS
VChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3du
Q2VsbFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAg
ICBncHIoKTsKICAgICB9CiAgICAgCkBAIC0yNDkwLDI2ICsyNTE3LDMxIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogICAgIAorICAgIEVk
Z2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAgIH0KKyAg
ICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX25vZGU7
CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KICAgICAKICAgICBHUFJSZWcg
Z3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVn
KQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2Uobm9kZSgp
KTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGVkZ2Uo
KSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCB1c2UoKQogICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2pp
dC0+dXNlKG5vZGUoKSk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJ
VCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOworICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJl
ZyBtX2dwck9ySW52YWxpZDsKIH07CiAKQEAgLTI2NDEsOSArMjY3Myw5IEBAIHByaXZhdGU6CiAK
IGNsYXNzIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIHVzZSwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKKyAgICBl
eHBsaWNpdCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdl
IGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRp
b24sIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxh
dGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkp
CisgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxp
ZEdQUlJlZykKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9mb3JtYXQoRGF0YUZvcm1hdE5v
bmUpCkBAIC0yNjUxLDggKzI2ODMsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXJlY3Rpb24o
ZGlyZWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJU
KHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VL
aW5kKCkgPT0gS25vd25JbnQzMlVzZSkpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChub2Rl
KCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yNjYxLDEwICsyNjkzLDE1IEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcp
OwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CisgICAgCisg
ICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7CisgICAg
fQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ub2Rl
OworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBEYXRhRm9ybWF0
IGZvcm1hdCgpCkBAIC0yNjc3LDE4ICsyNzE0LDE4IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3By
KCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQot
ICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludChub2Rl
KCksIG1fZm9ybWF0LCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9
IG1faml0LT5maWxsU3BlY3VsYXRlSW50KGVkZ2UoKSwgbV9mb3JtYXQsIG1fZGlyZWN0aW9uKTsK
ICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVz
ZSgpCiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51
c2Uobm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0
OwotICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJP
ckludmFsaWQ7CiAgICAgRGF0YUZvcm1hdCBtX2Zvcm1hdDsKICAgICBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBtX2RpcmVjdGlvbjsKQEAgLTI2OTYsMTQgKzI3MzMsMTQgQEAgcHJpdmF0ZToKIAogY2xh
c3MgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2Up
CisgICAgZXhwbGljaXQgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kKFNwZWN1bGF0aXZlSklU
KiBqaXQsIEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGlj
T3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25v
ZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9y
SW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAg
ICAgICAgQVNTRVJUKHVzZS51c2VLaW5kKCkgIT0gRG91YmxlVXNlKTsKLSAgICAgICAgaWYgKGpp
dC0+aXNGaWxsZWQobV9ub2RlKSkKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2Ug
fHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25JbnQzMlVzZSkpOworICAgICAgICBpZiAoaml0LT5p
c0ZpbGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yNzEyLDQx
ICsyNzQ5LDQ2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IElu
dmFsaWRHUFJSZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAg
ICB9CisgICAgCisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2VkZ2U7CisgICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9ub2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAg
ICBHUFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZh
bGlkR1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1
bGF0ZUludFN0cmljdChub2RlKCkpOworICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2pp
dC0+ZmlsbFNwZWN1bGF0ZUludFN0cmljdChlZGdlKCkpOwogICAgICAgICByZXR1cm4gbV9ncHJP
ckludmFsaWQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKCkKICAgICB7Ci0gICAgICAgIG1f
aml0LT51c2UobV9ub2RlKTsKKyAgICAgICAgbV9qaXQtPnVzZShub2RlKCkpOwogICAgIH0KIAog
cHJpdmF0ZToKICAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSogbV9ub2RlOwor
ICAgIEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKIGNsYXNz
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSB1c2UsIFNwZWN1bGF0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCisgICAgZXhwbGljaXQg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJh
bmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAg
ICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9ub2RlKHVzZS5ub2RlKCkpCisgICAgICAg
ICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9mcHJPckludmFsaWQoSW52YWxpZEZQUlJlZykK
ICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9qaXQpOwotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSA9PSBEb3VibGVVc2UpOwotICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX25vZGUpKQorICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9
PSBOdW1iZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25OdW1iZXJVc2UgfHwgZWRnZS51
c2VLaW5kKCkgPT0gUmVhbE51bWJlclVzZSkpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChu
b2RlKCkpKQogICAgICAgICAgICAgZnByKCk7CiAgICAgfQogCkBAIC0yNzU1LDQyICsyNzk3LDQ3
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZnByT3JJbnZhbGlkICE9IEludmFsaWRGUFJS
ZWcpOwogICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZnByT3JJbnZhbGlkKTsKICAgICB9CisgICAg
CisgICAgRWRnZSBlZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VkZ2U7Cisg
ICAgfQogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9u
b2RlOworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKICAgICBGUFJSZWcg
ZnByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2Zwck9ySW52YWxpZCA9PSBJbnZhbGlkRlBSUmVn
KQotICAgICAgICAgICAgbV9mcHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZURvdWJs
ZShub2RlKCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZnByT3JJbnZhbGlkID0gbV9q
aXQtPmZpbGxTcGVjdWxhdGVEb3VibGUoZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAgIHJl
dHVybiBtX2Zwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsK
LSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7
CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAgICBOb2Rl
KiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgRlBSUmVnIG1fZnByT3JJbnZhbGlkOwog
ICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKIAogY2xhc3MgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVy
YW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNl
bGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9u
TW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgICAgICA6IG1faml0
KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAgICAgLCBtX2VkZ2UoZWRn
ZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgICAgICAsIG1f
ZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAg
ICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0gICAgICAgIGlmIChqaXQt
PmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IENlbGxVc2UgfHwg
ZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IE9iamVj
dFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpKTsKKyAgICAgICAgaWYgKGppdC0+
aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjc5OSw0
MiArMjg0Niw0NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJ
bnZhbGlkR1BSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAg
ICAgfQorICAgIAorICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9lZGdlOworICAgIH0KIAogICAgIE5vZGUqIG5vZGUoKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fbm9kZTsKKyAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCiAg
ICAgR1BSUmVnIGdwcigpCiAgICAgewogICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52
YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVj
dWxhdGVDZWxsKG5vZGUoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgbV9ncHJPckludmFs
aWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSgpLCBtX2RpcmVjdGlvbik7CiAgICAg
ICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQog
ICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOworICAgICAgICBtX2ppdC0+dXNlKG5v
ZGUoKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKLSAg
ICBOb2RlKiBtX25vZGU7CisgICAgRWRnZSBtX2VkZ2U7CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZh
bGlkOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKIAogY2xhc3Mg
U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0
ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0
IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwg
U3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3Bl
cmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQog
ICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX25vZGUodXNlLm5vZGUoKSkKKyAgICAg
ICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVn
KQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVCh1c2UudXNlS2luZCgpICE9IERvdWJsZVVzZSk7Ci0g
ICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1fbm9kZSkpCisgICAgICAgIEFTU0VSVF9VTlVTRUQo
bW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkg
PT0gQm9vbGVhblVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAg
ICAgICAgICBncHIoKTsKICAgICB9CiAgICAgCkBAIC0yODQ0LDMwICsyODk2LDQxIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CiAgICAgfQogICAgIAor
ICAgIEVkZ2UgZWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lZGdlOworICAg
IH0KKyAgICAKICAgICBOb2RlKiBub2RlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X25vZGU7CisgICAgICAgIHJldHVybiBlZGdlKCkubm9kZSgpOwogICAgIH0KICAgICAKICAgICBH
UFJSZWcgZ3ByKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlk
R1BSUmVnKQotICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0
ZUJvb2xlYW4obm9kZSgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxp
ZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQm9vbGVhbihlZGdlKCksIG1fZGlyZWN0aW9uKTsKICAg
ICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgp
CiAgICAgewotICAgICAgICBtX2ppdC0+dXNlKG1fbm9kZSk7CisgICAgICAgIG1faml0LT51c2Uo
bm9kZSgpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0Owot
ICAgIE5vZGUqIG1fbm9kZTsKKyAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPcklu
dmFsaWQ7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCisjZGVm
aW5lIERGR19UWVBFX0NIRUNLKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1w
VG9GYWlsKSBkbyB7IFwKKyAgICAgICAgaWYgKCFuZWVkc1R5cGVDaGVjaygoZWRnZSksICh0eXBl
c1Bhc3NlZFRocm91Z2gpKSkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgdHlwZUNoZWNrKChzb3VyY2UpLCAoZWRnZSksICh0eXBlc1Bhc3NlZFRocm91Z2gpLCAoanVt
cFRvRmFpbCkpOyBcCisgICAgfSB3aGlsZSAoMCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzU2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDExICsyODksMTEgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgTm9kZSogZ2V0TG9jYWwg
PSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jayArIDEsIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHZhcmlhYmxlLT5wcmVk
aWN0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBHZXRMb2NhbCwgY29kZU9yaWdpbiwg
T3BJbmZvKHZhcmlhYmxlKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRMb2Nh
bCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShub2RlKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrICsgMSwgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwg
Q2hlY2tTdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEVkZ2UoZ2V0TG9jYWwsIENlbGxVc2UpKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IGdldExvY2FsOwpAQCAtMzE3LDcgKzMxNyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZXhpdC4KICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmln
aW47Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKTsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCkBA
IC0zMjcsNyArMzI3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGJ5
dGVjb2RlIGluc3RydWN0aW9uIHJhdGhlciB0aGFuIHJlZXhlY3V0aW5nIHRoZSBjdXJyZW50IG9u
ZS4KICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIEZvcndhcmRDaGVja1N0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5t
X3N0cnVjdHVyZSkpLCBjaGlsZDEpOworICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdp
biwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJl
KSksIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdVc2VL
aW5kLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFVzZUtpbmQgdXNlS2luZCkKK3sKKyAgICBzd2l0Y2ggKHVzZUtpbmQpIHsKKyAgICBjYXNl
IFVudHlwZWRVc2U6CisgICAgICAgIG91dC5wcmludCgiVW50eXBlZCIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAgICAgb3V0LnByaW50KCJL
bm93bkludDMyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAg
ICAgICAgb3V0LnByaW50KCJSZWFsTnVtYmVyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TnVtYmVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEtub3duTnVtYmVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIktub3duTnVtYmVy
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgb3V0LnBy
aW50KCJCb29sZWFuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2VsbFVzZToKKyAgICAg
ICAgb3V0LnByaW50KCJDZWxsIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS25vd25DZWxs
VXNlOgorICAgICAgICBvdXQucHJpbnQoIktub3duQ2VsbCIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIE9iamVjdFVzZToKKyAgICAgICAgb3V0LnByaW50KCJPYmplY3QiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIk9i
amVjdE9yT3RoZXIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAg
ICAgIG91dC5wcmludCgiU3RyaW5nIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm90Q2Vs
bFVzZToKKyAgICAgICAgb3V0LnByaW50KCJOb3RDZWxsIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgT3RoZXJVc2U6CisgICAgICAgIG91dC5wcmludCgiT3RoZXIiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Vz
ZUtpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNl
S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVXNlS2luZF9oCisjZGVm
aW5lIERGR1VzZUtpbmRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51
bSBVc2VLaW5kIHsKKyAgICBVbnR5cGVkVXNlLAorICAgIEludDMyVXNlLAorICAgIEtub3duSW50
MzJVc2UsCisgICAgUmVhbE51bWJlclVzZSwKKyAgICBOdW1iZXJVc2UsCisgICAgS25vd25OdW1i
ZXJVc2UsCisgICAgQm9vbGVhblVzZSwKKyAgICBDZWxsVXNlLAorICAgIEtub3duQ2VsbFVzZSwK
KyAgICBPYmplY3RVc2UsCisgICAgT2JqZWN0T3JPdGhlclVzZSwKKyAgICBTdHJpbmdVc2UsCisg
ICAgTm90Q2VsbFVzZSwKKyAgICBPdGhlclVzZSwKKyAgICBMYXN0VXNlS2luZCAvLyBNdXN0IGFs
d2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0byBkZW5v
dGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgorfTsKKworQUxXQVlTX0lOTElORSBTcGVj
dWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVzZUtpbmQgdXNlS2luZCkKK3sKKyAgICBzd2l0Y2gg
KHVzZUtpbmQpIHsKKyAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgIHJldHVybiBTcGVjRW1w
dHlPclRvcDsgLy8gVE9QIGlzbid0IGdvb2QgZW5vdWdoOyB1bnR5cGVkIHVzZXMgbWF5IHVzZSB0
aGUgbm9ybWFsbHkgdW5zZWVuIGVtcHR5IHZhbHVlLCBpbiB0aGUgY2FzZSBvZiBsYXp5IHJlZ2lz
dGVycy4KKyAgICBjYXNlIEludDMyVXNlOgorICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICAg
ICAgcmV0dXJuIFNwZWNJbnQzMjsKKyAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgICAgIHJl
dHVybiBTcGVjUmVhbE51bWJlcjsKKyAgICBjYXNlIE51bWJlclVzZToKKyAgICBjYXNlIEtub3du
TnVtYmVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY051bWJlcjsKKyAgICBjYXNlIEJvb2xlYW5V
c2U6CisgICAgICAgIHJldHVybiBTcGVjQm9vbGVhbjsKKyAgICBjYXNlIENlbGxVc2U6CisgICAg
Y2FzZSBLbm93bkNlbGxVc2U6CisgICAgICAgIHJldHVybiBTcGVjQ2VsbDsKKyAgICBjYXNlIE9i
amVjdFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNPYmplY3Q7CisgICAgY2FzZSBPYmplY3RPck90
aGVyVXNlOgorICAgICAgICByZXR1cm4gU3BlY09iamVjdCB8IFNwZWNPdGhlcjsKKyAgICBjYXNl
IFN0cmluZ1VzZToKKyAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmc7CisgICAgY2FzZSBOb3RDZWxs
VXNlOgorICAgICAgICByZXR1cm4gflNwZWNDZWxsOworICAgIGNhc2UgT3RoZXJVc2U6CisgICAg
ICAgIHJldHVybiBTcGVjT3RoZXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFNwZWNUb3A7CisgICAgfQorfQorCitB
TFdBWVNfSU5MSU5FIGJvb2wgaXNOdW1lcmljYWwoVXNlS2luZCBraW5kKQoreworICAgIHN3aXRj
aCAoa2luZCkgeworICAgIGNhc2UgSW50MzJVc2U6CisgICAgY2FzZSBLbm93bkludDMyVXNlOgor
ICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlVzZUtpbmQpOworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
VXNlS2luZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCShyZXZpc2lvbiAxNDM1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlLCBFZGdlIGVk
Z2UpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IC0+ICVzQCV1Iiwgbm9kZS0+aW5kZXgo
KSwgdXNlS2luZFRvU3RyaW5nKGVkZ2UudXNlS2luZCgpKSwgZWRnZS0+aW5kZXgoKSk7CisgICAg
ICAgIGRhdGFMb2cobm9kZSwgIiAtPiAiLCBlZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBy
ZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJsb2NrSW5kZXgg
YmxvY2tJbmRleCkKQEAgLTM4OSw3ICszODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQoCiAgICAgICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXggYmxvY2tJ
bmRleCwgTm9kZSogZXhwZWN0ZWROb2RlLCBFZGdlIGluY29taW5nRWRnZSkKICAgICB7Ci0gICAg
ICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAl
dSIsIG5vZGUtPmluZGV4KCksIGJsb2NrSW5kZXgsIGV4cGVjdGVkTm9kZS0+aW5kZXgoKSwgaW5j
b21pbmdFZGdlLT5pbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZyhub2RlLCAiIGluIEJsb2NrICMi
LCBibG9ja0luZGV4LCAiLCBzZWFyY2hpbmcgZm9yICIsIGV4cGVjdGVkTm9kZSwgIiBmcm9tICIs
IGluY29taW5nRWRnZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcEdyYXBoSWZBcHByb3By
aWF0ZSgpCg==
</data>
<flag name="review"
          id="209858"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>