<?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>119050</bug_id>
          
          <creation_ts>2013-07-24 11:42:59 -0700</creation_ts>
          <short_desc>fourthTier: DFG IR dumps should be easier to read</short_desc>
          <delta_ts>2013-07-24 14:46:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>911378</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-24 11:42:59 -0700</bug_when>
    <thetext>Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911380</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-24 11:50:00 -0700</bug_when>
    <thetext>DFG for DrawLine#DciOyf:[0x7fecbb847e00-&gt;0x10e9dfef0, DFGFunctionCall]:
  Fixpoint state: FixpointConverged; Form: ThreadedCPS; Unification state: GloballyUnified; Ref count state: ExactRefCount

Block #0 (bc#0):  (OSR target)
  Predecessors:
  Dominated by: #0
  Dominates: #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13
  vars before: arg2:(Cell, TOP, TOP, TOP) arg1:(Cell, TOP, TOP, TOP) arg0:(Top, TOP, TOP, TOP)
  var links: arg2:@2 arg1:@1 arg0:@0
   0:  skipped  &lt; 0:-&gt;	SetArgument(arg0(a), W:SideState, bc#0)
   1:           &lt; 3:-&gt;	SetArgument(arg1(B&lt;Final&gt;), W:SideState, bc#0)  predicting Final
 348:           &lt; 7:17&gt;	GetLocal(@1, JS|PureInt, arg1(B&lt;Final&gt;), R:Variables(-8), bc#0)  predicting Final
 349:           &lt;!0:-&gt;	CheckStructure(Cell:@348&lt;Final&gt;, MustGen|CanExit, [%DK:Object], R:JSCell_structure, bc#0)
   2:           &lt; 3:-&gt;	SetArgument(arg2(C&lt;Final&gt;), W:SideState, bc#0)  predicting Final
 350:           &lt; 7:18&gt;	GetLocal(@2, JS|PureInt, arg2(C&lt;Final&gt;), R:Variables(-9), bc#0)  predicting Final
 351:           &lt;!0:-&gt;	CheckStructure(Cell:@350&lt;Final&gt;, MustGen|CanExit, [%DK:Object], R:JSCell_structure, bc#0)
   3:           &lt;!0:-&gt;	Phantom(MustGen|CanExit, bc#0)
   4:  skipped  &lt; 0:-&gt;	ZombieHint(r0(D~&lt;Other&gt;), W:SideState, bc#0)
   5:  skipped  &lt; 0:-&gt;	ZombieHint(r1(E~&lt;Other&gt;), W:SideState, bc#0)
   6:  skipped  &lt; 0:-&gt;	ZombieHint(r2(F~&lt;Other&gt;), W:SideState, bc#0)
   7:  skipped  &lt; 0:-&gt;	ZombieHint(r3(G~&lt;Other&gt;), W:SideState, bc#0)
   8:  skipped  &lt; 0:-&gt;	ZombieHint(r4(H~&lt;Other&gt;), W:SideState, bc#0)
   9:  skipped  &lt; 0:-&gt;	ZombieHint(r5(I~&lt;Other&gt;), W:SideState, bc#0)
  10:  skipped  &lt; 0:-&gt;	ZombieHint(r6(J~&lt;Other&gt;), W:SideState, bc#0)
  11:  skipped  &lt; 0:-&gt;	ZombieHint(r7(K~&lt;Other&gt;), W:SideState, bc#0)
  12:  skipped  &lt; 0:-&gt;	ZombieHint(r8(L~&lt;Other&gt;), W:SideState, bc#0)
  13:  skipped  &lt; 0:-&gt;	ZombieHint(r9(M~&lt;Other&gt;), W:SideState, bc#0)
  14:  skipped  &lt; 0:-&gt;	ZombieHint(r10(N~&lt;Other&gt;), W:SideState, bc#0)
  15:  skipped  &lt; 0:-&gt;	ZombieHint(r11(O~&lt;Other&gt;), W:SideState, bc#0)
  16:  skipped  &lt; 0:-&gt;	ZombieHint(r12(P~&lt;Other&gt;), W:SideState, bc#0)
  17:  skipped  &lt; 0:-&gt;	ZombieHint(r13(Q~&lt;Other&gt;), W:SideState, bc#0)
  18:  skipped  &lt; 0:-&gt;	ZombieHint(r14(R~&lt;Other&gt;), W:SideState, bc#0)
  19:  skipped  &lt; 0:-&gt;	ZombieHint(r15(S~&lt;Other&gt;), W:SideState, bc#0)
  20:  skipped  &lt; 0:-&gt;	ZombieHint(r16(T~&lt;Other&gt;), W:SideState, bc#0)
  21:  skipped  &lt; 0:-&gt;	GetLocal(@1, JS|UseAsOther, arg1(B&lt;Final&gt;), R:Variables(-8), bc#1)
  22:           &lt;!0:-&gt;	Phantom(Cell:@348&lt;Final&gt;, MustGen, bc#1)
  23:           &lt; 6:19&gt;	GetByOffset(KnownCell:@348&lt;Final&gt;, KnownCell:@348&lt;Final&gt;, JS|UseAsOther, id0{V}, 0, R:NamedProperties(0), bc#1)  predicting Array
  24:  skipped  &lt; 0:-&gt;	MovHint(@23&lt;Array&gt;, r17(U~&lt;Array&gt;), W:SideState, bc#1)
  25:           &lt; 2:20&gt;	JSConstant(JS|PureNum|UseAsOther|UseAsInt, $0 = Int32: 0, bc#10)
 333:           &lt;!0:-&gt;	CheckStructure(Check:Cell:@23&lt;Array&gt;, MustGen|CanExit, [%AJ:Array], R:JSCell_structure, bc#10)
 334:           &lt; 2:21&gt;	GetButterfly(Cell:@23&lt;Array&gt;, Storage|PureInt, R:JSObject_butterfly, bc#10)
  26:           &lt;!3:22&gt;	GetByVal(KnownCell:@23&lt;Array&gt;, Int32:@25&lt;Int32&gt;, @334, JS|MustGen|MightClobber|UseAsOther|CanExit, DoubleOriginalArrayInBoundsAsIs, R:Butterfly_publicLength,Butterfly_vectorLength,IndexedDoubleProperties, bc#10)  predicting Doublereal
  27:  skipped  &lt; 0:-&gt;	MovHint(@26&lt;Double&gt;, r0(V~&lt;Double&gt;), W:SideState, bc#10)
  28:  skipped  &lt; 0:-&gt;	GetLocal(@2, JS|UseAsOther, arg2(C&lt;Final&gt;), R:Variables(-9), bc#16)
  29:           &lt;!0:-&gt;	Phantom(Cell:@350&lt;Final&gt;, MustGen, bc#16)
  30:           &lt; 6:23&gt;	GetByOffset(KnownCell:@350&lt;Final&gt;, KnownCell:@350&lt;Final&gt;, JS|UseAsOther, id0{V}, 0, R:NamedProperties(0), bc#16)  predicting Array
  31:  skipped  &lt; 0:-&gt;	MovHint(@30&lt;Array&gt;, r17(W~&lt;Array&gt;), W:SideState, bc#16)
 335:           &lt;!0:-&gt;	CheckStructure(Check:Cell:@30&lt;Array&gt;, MustGen|CanExit, [%AJ:Array], R:JSCell_structure, bc#25)
 336:           &lt; 2:24&gt;	GetButterfly(Cell:@30&lt;Array&gt;, Storage|PureInt, R:JSObject_butterfly, bc#25)
  32:           &lt;!2:20&gt;	GetByVal(KnownCell:@30&lt;Array&gt;, Int32:@25&lt;Int32&gt;, @336, JS|MustGen|MightClobber|UseAsOther|CanExit, DoubleOriginalArrayInBoundsAsIs, R:Butterfly_publicLength,Butterfly_vectorLength,IndexedDoubleProperties, bc#25)  predicting Doublereal
  33:  skipped  &lt; 0:-&gt;	MovHint(@32&lt;Double&gt;, r1(X~&lt;Double&gt;), W:SideState, bc#25)
  34:           &lt;!0:-&gt;	Phantom(Cell:@348&lt;Final&gt;, MustGen, bc#31)
  35:           &lt;!0:-&gt;	Phantom(KnownCell:@348&lt;Final&gt;, KnownCell:@348&lt;Final&gt;, MustGen, bc#31)
  36:  skipped  &lt; 0:-&gt;	MovHint(@23&lt;Array&gt;, r17(Y~&lt;Array&gt;), W:SideState, bc#31)
  37:           &lt; 2:17&gt;	JSConstant(JS|PureNum|UseAsOther|UseAsInt, $1 = Int32: 1, bc#40)
 337:           &lt;!0:-&gt;	Phantom(Cell:@23&lt;Array&gt;, MustGen, bc#40)
 338:           &lt;!0:-&gt;	Phantom(Cell:@23&lt;Array&gt;, MustGen, bc#40)
  38:           &lt;!3:21&gt;	GetByVal(KnownCell:@23&lt;Array&gt;, Int32:@37&lt;Int32&gt;, @334, JS|MustGen|MightClobber|UseAsOther|CanExit, DoubleOriginalArrayInBoundsAsIs, R:Butterfly_publicLength,Butterfly_vectorLength,IndexedDoubleProperties, bc#40)  predicting Doublereal
  39:           &lt; 2:-&gt;	SetLocal(Number:@38&lt;Double&gt;, NodeExitsForward, r2(Z&lt;Double&gt;), W:Variables(2), bc#40)  predicting Double, forcing double
  40:           &lt;!0:-&gt;	Phantom(Cell:@350&lt;Final&gt;, MustGen, bc#46)
  41:           &lt;!0:-&gt;	Phantom(KnownCell:@350&lt;Final&gt;, KnownCell:@350&lt;Final&gt;, MustGen, bc#46)
  42:  skipped  &lt; 0:-&gt;	MovHint(@30&lt;Array&gt;, r17(AB~&lt;Array&gt;), W:SideState, bc#46)
 339:           &lt;!0:-&gt;	Phantom(Cell:@30&lt;Array&gt;, MustGen, bc#55)
 340:           &lt;!0:-&gt;	Phantom(Cell:@30&lt;Array&gt;, MustGen, bc#55)
  43:           &lt;!2:24&gt;	GetByVal(KnownCell:@30&lt;Array&gt;, Int32:@37&lt;Int32&gt;, @336, JS|MustGen|MightClobber|UseAsOther|CanExit, DoubleOriginalArrayInBoundsAsIs, R:Butterfly_publicLength,Butterfly_vectorLength,IndexedDoubleProperties, bc#55)  predicting Doublereal
  44:           &lt; 2:-&gt;	SetLocal(Number:@43&lt;Double&gt;, NodeExitsForward, r3(BB&lt;Double&gt;), W:Variables(3), bc#55)  predicting Double, forcing double
  45:           &lt; 6:17&gt;	WeakJSConstant(JS|UseAsOther, 0x10e93f970 (%BC:global), bc#61)
  46:  skipped  &lt; 0:-&gt;	MovHint(@45&lt;Object&gt;, r19(CB~&lt;Object&gt;), W:SideState, bc#61)
  47:           &lt;!0:-&gt;	StructureTransitionWatchpoint(Cell:@45&lt;Object&gt;, MustGen|CanExit, %BC:global, R:JSCell_structure, bc#66)
  48:           &lt; 1:23&gt;	GetButterfly(Cell:@45&lt;Object&gt;, Storage|UseAsOther, R:JSObject_butterfly, bc#66)
  49:           &lt; 8:23&gt;	GetByOffset(@48&lt;Other&gt;, KnownCell:@45&lt;Object&gt;, JS|UseAsOther, id1{Math}, 117, R:NamedProperties(1), bc#66)  predicting Otherobj
  50:  skipped  &lt; 0:-&gt;	MovHint(@49&lt;Object&gt;, r19(DB~&lt;Object&gt;), W:SideState, bc#66)
  51:           &lt;!0:-&gt;	CheckStructure(Check:Cell:@49&lt;Object&gt;, MustGen|CanExit, [%BY:Math], R:JSCell_structure, bc#74)
  52:           &lt;!0:-&gt;	Phantom(@49&lt;Object&gt;, MustGen, bc#74)
  53:           &lt; 4:18&gt;	WeakJSConstant(JS|UseAsOther, 0x10e98f2b0 (%D3:Function), bc#74)
  54:  skipped  &lt; 0:-&gt;	MovHint(@53&lt;Function&gt;, r17(EB~&lt;Function&gt;), W:SideState, bc#74)
  55:           &lt;!2:19&gt;	ArithSub(Number:@32&lt;Double&gt;, Number:@26&lt;Double&gt;, Number|MustGen|UseAsOther, bc#83)
  56:  skipped  &lt; 0:-&gt;	MovHint(@55&lt;Double&gt;, r18(FB~&lt;Double&gt;), W:SideState, bc#83)
  57:           &lt;!0:-&gt;	Phantom(@53&lt;Function&gt;, @49&lt;Object&gt;, MustGen, bc#88)
  58:           &lt;!1:25&gt;	ArithAbs(Number:@55&lt;Double&gt;, Number|MustGen|UseAsOther, bc#88)
  59:           &lt; 2:-&gt;	SetLocal(Number:@58&lt;Double&gt;, NodeExitsForward, r4(GB&lt;Double&gt;), W:Variables(4), bc#88)  predicting Double, forcing double
  60:           &lt;!0:-&gt;	Phantom(@53&lt;Function&gt;, MustGen, bc#88)
  61:           &lt;!0:-&gt;	Phantom(@49&lt;Object&gt;, MustGen, bc#88)
  62:           &lt;!0:-&gt;	Phantom(@55&lt;Double&gt;, MustGen, bc#88)
  63:  skipped  &lt; 0:-&gt;	MovHint(@45&lt;Object&gt;, r19(HB~&lt;Object&gt;), W:SideState, bc#96)
  64:           &lt;!0:-&gt;	Phantom(Cell:@45&lt;Object&gt;, MustGen, bc#101)
  65:           &lt;!0:-&gt;	Phantom(Cell:@45&lt;Object&gt;, MustGen, bc#101)
  66:           &lt;!0:-&gt;	Phantom(KnownCell:@45&lt;Object&gt;, MustGen, bc#101)
  67:  skipped  &lt; 0:-&gt;	MovHint(@49&lt;Object&gt;, r19(IB~&lt;Object&gt;), W:SideState, bc#101)
  68:           &lt;!0:-&gt;	Phantom(Cell:@49&lt;Object&gt;, MustGen, bc#109)
  69:           &lt;!0:-&gt;	Phantom(@49&lt;Object&gt;, MustGen, bc#109)
  70:  skipped  &lt; 0:-&gt;	MovHint(@53&lt;Function&gt;, r17(JB~&lt;Function&gt;), W:SideState, bc#109)
  71:           &lt;!2:24&gt;	ArithSub(Number:@43&lt;Double&gt;, Number:@38&lt;Double&gt;, Number|MustGen|UseAsOther, bc#118)
  72:  skipped  &lt; 0:-&gt;	MovHint(@71&lt;Double&gt;, r18(KB~&lt;Double&gt;), W:SideState, bc#118)
  73:           &lt;!0:-&gt;	Phantom(@53&lt;Function&gt;, @49&lt;Object&gt;, MustGen, bc#123)
  74:           &lt;!1:17&gt;	ArithAbs(Number:@71&lt;Double&gt;, Number|MustGen|UseAsOther, bc#123)
  75:           &lt; 2:-&gt;	SetLocal(Number:@74&lt;Double&gt;, NodeExitsForward, r5(LB&lt;Double&gt;), W:Variables(5), bc#123)  predicting Double, forcing double
  76:           &lt;!0:-&gt;	Phantom(@53&lt;Function&gt;, MustGen, bc#123)
  77:           &lt;!0:-&gt;	Phantom(@49&lt;Object&gt;, MustGen, bc#123)
  78:           &lt;!0:-&gt;	Phantom(@71&lt;Double&gt;, MustGen, bc#123)
  79:           &lt; 2:-&gt;	SetLocal(Number:@26&lt;Double&gt;, NodeExitsForward, r6(MB&lt;Double&gt;), W:Variables(6), bc#131)  predicting Double, forcing double
  80:           &lt; 2:-&gt;	SetLocal(Number:@38&lt;Double&gt;, NodeExitsForward, r7(NB&lt;Double&gt;), W:Variables(7), bc#134)  predicting Double, forcing double
  81:           &lt;!1:22&gt;	CompareGreaterEq(Number:@32&lt;Double&gt;, Number:@26&lt;Double&gt;, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#137)
  82:           &lt;!0:-&gt;	Branch(Boolean:@81&lt;Boolean&gt;, MustGen|CanExit, T:#1, F:#2, W:SideState, bc#137)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) arg0:(Top, TOP, TOP, TOP) r0:(Doublereal) r1:(Doublereal) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Other, Undefined) r9:(Other, Undefined) r10:(Other, Undefined) r11:(Other, Undefined) r12:(Other, Undefined) r13:(Other, Undefined) r14:(Other, Undefined) r15:(Other, Undefined) r16:(Other, Undefined) r17:(Function, TOP, TOP, [%D3:Function], Cell: 0x10e98f2b0 (%D3:Function)) r18:(Double) r19:(Otherobj, NonArray, [%BY:Math], [%BY:Math])
  var links: arg2:@350&lt;Final&gt; arg1:@348&lt;Final&gt; arg0:@0 r0:@27 r1:@33 r2:@39 r3:@44 r4:@59 r5:@75 r6:@79 r7:@80 r8:@12 r9:@13 r10:@14 r11:@15 r12:@16 r13:@17 r14:@18 r15:@19 r16:@20 r17:@70 r18:@72 r19:@67

Block #1 (bc#141): 
  Predecessors: #0
  Dominated by: #0 #1
  Dominates: #1
  Phi Nodes: @239&lt;1&gt;-&gt;(@39), @241&lt;1&gt;-&gt;(@44), @246&lt;1&gt;-&gt;(@75), @251&lt;1&gt;-&gt;(@59), @273&lt;1&gt;-&gt;(@80), @291&lt;1&gt;-&gt;(@79), @318&lt;1&gt;-&gt;(@1), @330&lt;1&gt;-&gt;(@2)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double)
  var links: arg2:@330 arg1:@318 r2:@239 r3:@241 r4:@251 r5:@246 r6:@291 r7:@273
  83:           &lt; 2:22&gt;	JSConstant(JS|UseAsOther, $1 = Int32: 1, bc#141)
  84:           &lt; 1:-&gt;	SetLocal(@83&lt;Int32&gt;, NodeExitsForward, r8(OB~&lt;Int32&gt;), W:Variables(8), bc#141)  predicting Int
  85:           &lt; 1:-&gt;	SetLocal(@83&lt;Int32&gt;, NodeExitsForward, r10(PB~&lt;Int32&gt;), W:Variables(10), bc#144)  predicting Int
  86:           &lt;!0:-&gt;	Jump(MustGen, T:#3, W:SideState, bc#147)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int, Int32: 1) r10:(Int, Int32: 1)
  var links: arg2:@330 arg1:@318 r2:@239 r3:@241 r4:@251 r5:@246 r6:@291 r7:@273 r8:@84 r10:@85

Block #2 (bc#149): 
  Predecessors: #0
  Dominated by: #0 #2
  Dominates: #2
  Phi Nodes: @238&lt;1&gt;-&gt;(@39), @240&lt;1&gt;-&gt;(@44), @245&lt;1&gt;-&gt;(@75), @250&lt;1&gt;-&gt;(@59), @272&lt;1&gt;-&gt;(@80), @290&lt;1&gt;-&gt;(@79), @317&lt;1&gt;-&gt;(@1), @329&lt;1&gt;-&gt;(@2)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double)
  var links: arg2:@329 arg1:@317 r2:@238 r3:@240 r4:@250 r5:@245 r6:@290 r7:@272
  87:           &lt; 2:22&gt;	JSConstant(JS|UseAsOther, $2 = Int32: -1, bc#149)
  88:           &lt; 1:-&gt;	SetLocal(@87&lt;Int32&gt;, NodeExitsForward, r8(OB~&lt;Int32&gt;), W:Variables(8), bc#149)  predicting Int
  89:           &lt; 1:-&gt;	SetLocal(@87&lt;Int32&gt;, NodeExitsForward, r10(PB~&lt;Int32&gt;), W:Variables(10), bc#152)  predicting Int
  90:           &lt;!0:-&gt;	Jump(MustGen, T:#3, W:SideState, bc#155)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int, Int32: -1) r10:(Int, Int32: -1)
  var links: arg2:@329 arg1:@317 r2:@238 r3:@240 r4:@250 r5:@245 r6:@290 r7:@272 r8:@88 r10:@89

Block #3 (bc#155): 
  Predecessors: #1 #2
  Dominated by: #0 #3
  Dominates: #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13
  Phi Nodes: @236&lt;1&gt;-&gt;(@240, @241), @237&lt;1&gt;-&gt;(@238, @239), @244&lt;2&gt;-&gt;(@245, @246), @249&lt;2&gt;-&gt;(@250, @251), @271&lt;2&gt;-&gt;(@272, @273), @281&lt;2&gt;-&gt;(@88, @84), @289&lt;2&gt;-&gt;(@290, @291), @308&lt;2&gt;-&gt;(@89, @85), @316&lt;2&gt;-&gt;(@317, @318), @328&lt;2&gt;-&gt;(@329, @330)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r10:(Int)
  var links: arg2:@328 arg1:@316 r2:@237 r3:@236 r4:@249 r5:@244 r6:@289 r7:@271 r8:@281 r10:@308
  91:           &lt; 1:22&gt;	GetLocal(@236, JS|UseAsOther, r3(BB&lt;Double&gt;), R:Variables(3), bc#155)  predicting Double, forcing double
  92:           &lt; 1:20&gt;	GetLocal(@237, JS|UseAsOther, r2(Z&lt;Double&gt;), R:Variables(2), bc#155)  predicting Double, forcing double
  93:           &lt;!1:20&gt;	CompareGreaterEq(Number:@91&lt;Double&gt;, Number:@92&lt;Double&gt;, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#155)
  94:           &lt;!0:-&gt;	Branch(Boolean:@93&lt;Boolean&gt;, MustGen|CanExit, T:#4, F:#5, W:SideState, bc#155)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r10:(Int)
  var links: arg2:@328 arg1:@316 r2:@92&lt;Double&gt; r3:@91&lt;Double&gt; r4:@249 r5:@244 r6:@289 r7:@271 r8:@281 r10:@308

Block #4 (bc#159): 
  Predecessors: #3
  Dominated by: #0 #3 #4
  Dominates: #4
  Phi Nodes: @243&lt;1&gt;-&gt;(@244), @248&lt;1&gt;-&gt;(@249), @270&lt;1&gt;-&gt;(@271), @280&lt;1&gt;-&gt;(@281), @288&lt;1&gt;-&gt;(@289), @307&lt;1&gt;-&gt;(@308), @315&lt;1&gt;-&gt;(@316), @327&lt;1&gt;-&gt;(@328)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r10:(Int)
  var links: arg2:@327 arg1:@315 r4:@248 r5:@243 r6:@288 r7:@270 r8:@280 r10:@307
  95:           &lt; 2:20&gt;	JSConstant(JS|UseAsOther, $1 = Int32: 1, bc#159)
  96:           &lt; 1:-&gt;	SetLocal(@95&lt;Int32&gt;, NodeExitsForward, r9(UB~&lt;Int32&gt;), W:Variables(9), bc#159)  predicting Int
  97:           &lt; 1:-&gt;	SetLocal(@95&lt;Int32&gt;, NodeExitsForward, r11(VB~&lt;Int32&gt;), W:Variables(11), bc#162)  predicting Int
  98:           &lt;!0:-&gt;	Jump(MustGen, T:#6, W:SideState, bc#165)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r9:(Int, Int32: 1) r10:(Int) r11:(Int, Int32: 1)
  var links: arg2:@327 arg1:@315 r4:@248 r5:@243 r6:@288 r7:@270 r8:@280 r9:@96 r10:@307 r11:@97

Block #5 (bc#167): 
  Predecessors: #3
  Dominated by: #0 #3 #5
  Dominates: #5
  Phi Nodes: @242&lt;1&gt;-&gt;(@244), @247&lt;1&gt;-&gt;(@249), @269&lt;1&gt;-&gt;(@271), @279&lt;1&gt;-&gt;(@281), @287&lt;1&gt;-&gt;(@289), @306&lt;1&gt;-&gt;(@308), @314&lt;1&gt;-&gt;(@316), @326&lt;1&gt;-&gt;(@328)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r10:(Int)
  var links: arg2:@326 arg1:@314 r4:@247 r5:@242 r6:@287 r7:@269 r8:@279 r10:@306
  99:           &lt; 2:20&gt;	JSConstant(JS|UseAsOther, $2 = Int32: -1, bc#167)
 100:           &lt; 1:-&gt;	SetLocal(@99&lt;Int32&gt;, NodeExitsForward, r9(UB~&lt;Int32&gt;), W:Variables(9), bc#167)  predicting Int
 101:           &lt; 1:-&gt;	SetLocal(@99&lt;Int32&gt;, NodeExitsForward, r11(VB~&lt;Int32&gt;), W:Variables(11), bc#170)  predicting Int
 102:           &lt;!0:-&gt;	Jump(MustGen, T:#6, W:SideState, bc#173)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r9:(Int, Int32: -1) r10:(Int) r11:(Int, Int32: -1)
  var links: arg2:@326 arg1:@314 r4:@247 r5:@242 r6:@287 r7:@269 r8:@279 r9:@100 r10:@306 r11:@101

Block #6 (bc#173): 
  Predecessors: #4 #5
  Dominated by: #0 #3 #6
  Dominates: #6 #7 #8 #9 #10 #11 #12 #13
  Phi Nodes: @234&lt;3&gt;-&gt;(@247, @248), @235&lt;3&gt;-&gt;(@242, @243), @263&lt;1&gt;-&gt;(@100, @96), @268&lt;2&gt;-&gt;(@269, @270), @278&lt;1&gt;-&gt;(@279, @280), @286&lt;2&gt;-&gt;(@287, @288), @300&lt;1&gt;-&gt;(@101, @97), @305&lt;1&gt;-&gt;(@306, @307), @313&lt;2&gt;-&gt;(@314, @315), @325&lt;2&gt;-&gt;(@326, @327)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int)
  var links: arg2:@325 arg1:@313 r4:@234 r5:@235 r6:@286 r7:@268 r8:@278 r9:@263 r10:@305 r11:@300
 103:           &lt; 1:20&gt;	GetLocal(@234, JS|UseAsOther, r4(GB&lt;Double&gt;), R:Variables(4), bc#173)  predicting Double, forcing double
 104:           &lt; 1:22&gt;	GetLocal(@235, JS|UseAsOther, r5(LB&lt;Double&gt;), R:Variables(5), bc#173)  predicting Double, forcing double
 105:           &lt;!1:22&gt;	CompareGreaterEq(Number:@103&lt;Double&gt;, Number:@104&lt;Double&gt;, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#173)
 106:           &lt;!0:-&gt;	Branch(Boolean:@105&lt;Boolean&gt;, MustGen|CanExit, T:#7, F:#8, W:SideState, bc#173)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int)
  var links: arg2:@325 arg1:@313 r4:@103&lt;Double&gt; r5:@104&lt;Double&gt; r6:@286 r7:@268 r8:@278 r9:@263 r10:@305 r11:@300

Block #7 (bc#177): 
  Predecessors: #6
  Dominated by: #0 #3 #6 #7
  Dominates: #7
  Phi Nodes: @232&lt;1&gt;-&gt;(@234), @233&lt;1&gt;-&gt;(@235), @262&lt;1&gt;-&gt;(@263), @267&lt;1&gt;-&gt;(@268), @285&lt;1&gt;-&gt;(@286), @304&lt;1&gt;-&gt;(@305), @312&lt;1&gt;-&gt;(@313), @324&lt;1&gt;-&gt;(@325)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r9:(Int) r10:(Int)
  var links: arg2:@324 arg1:@312 r4:@232 r5:@233 r6:@285 r7:@267 r9:@262 r10:@304
 107:           &lt; 2:22&gt;	JSConstant(JS|UseAsOther, $0 = Int32: 0, bc#177)
 108:           &lt; 1:-&gt;	SetLocal(@107&lt;Int32&gt;, NodeExitsForward, r8(OB~&lt;Int32&gt;), W:Variables(8), bc#177)  predicting Int
 109:           &lt; 1:-&gt;	SetLocal(@107&lt;Int32&gt;, NodeExitsForward, r11(VB~&lt;Int32&gt;), W:Variables(11), bc#180)  predicting Int
 110:           &lt; 3:22&gt;	GetLocal(@232, JS|UseAsOther, r4(GB&lt;Double&gt;), R:Variables(4), bc#183)  predicting Double, forcing double
 111:           &lt; 1:-&gt;	SetLocal(Number:@110&lt;Double&gt;, NodeExitsForward, r12(DC&lt;Double&gt;), W:Variables(12), bc#183)  predicting Double, forcing double
 112:           &lt; 1:20&gt;	JSConstant(JS, $3 = Int32: 2, bc#186)
 352:           &lt;!0:-&gt;	Phantom(Number:@112&lt;Int32&gt;, MustGen, bc#186)
 341:           &lt; 1:20&gt;	JSConstant(Number|PureInt, $5 = Double: 4611686018427387904, 2.000000, bc#186)
 113:           &lt;!1:20&gt;	ArithDiv(Number:@110&lt;Double&gt;, Number:@341&lt;Double&gt;, Number|MustGen|UseAsOther|MayOverflow|MayNegZero, bc#186)
 114:           &lt; 1:-&gt;	SetLocal(Number:@113&lt;Double&gt;, NodeExitsForward, r13(EC&lt;Double&gt;), W:Variables(13), bc#186)  predicting Double, forcing double
 115:           &lt; 1:20&gt;	GetLocal(@233, JS|UseAsOther, r5(LB&lt;Double&gt;), R:Variables(5), bc#191)  predicting Double, forcing double
 116:           &lt; 1:-&gt;	SetLocal(Number:@115&lt;Double&gt;, NodeExitsForward, r14(GC&lt;Double&gt;), W:Variables(14), bc#191)  predicting Double, forcing double
 117:           &lt; 1:-&gt;	SetLocal(Number:@110&lt;Double&gt;, NodeExitsForward, r15(HC&lt;Double&gt;), W:Variables(15), bc#194)  predicting Double, forcing double
 118:           &lt;!0:-&gt;	Jump(MustGen, T:#9, W:SideState, bc#197)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int, Int32: 0) r9:(Int) r10:(Int) r11:(Int, Int32: 0) r12:(Double) r13:(Double) r14:(Double) r15:(Double)
  var links: arg2:@324 arg1:@312 r4:@110&lt;Double&gt; r5:@115&lt;Double&gt; r6:@285 r7:@267 r8:@108 r9:@262 r10:@304 r11:@109 r12:@111 r13:@114 r14:@116 r15:@117

Block #8 (bc#199): 
  Predecessors: #6
  Dominated by: #0 #3 #6 #8
  Dominates: #8
  Phi Nodes: @230&lt;1&gt;-&gt;(@235), @231&lt;1&gt;-&gt;(@234), @266&lt;1&gt;-&gt;(@268), @277&lt;1&gt;-&gt;(@278), @284&lt;1&gt;-&gt;(@286), @299&lt;1&gt;-&gt;(@300), @311&lt;1&gt;-&gt;(@313), @323&lt;1&gt;-&gt;(@325)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r11:(Int)
  var links: arg2:@323 arg1:@311 r4:@231 r5:@230 r6:@284 r7:@266 r8:@277 r11:@299
 119:           &lt; 2:22&gt;	JSConstant(JS|UseAsOther, $0 = Int32: 0, bc#199)
 120:           &lt; 1:-&gt;	SetLocal(@119&lt;Int32&gt;, NodeExitsForward, r10(PB~&lt;Int32&gt;), W:Variables(10), bc#199)  predicting Int
 121:           &lt; 1:-&gt;	SetLocal(@119&lt;Int32&gt;, NodeExitsForward, r9(UB~&lt;Int32&gt;), W:Variables(9), bc#202)  predicting Int
 122:           &lt; 3:22&gt;	GetLocal(@230, JS|UseAsOther, r5(LB&lt;Double&gt;), R:Variables(5), bc#205)  predicting Double, forcing double
 123:           &lt; 1:-&gt;	SetLocal(Number:@122&lt;Double&gt;, NodeExitsForward, r12(DC&lt;Double&gt;), W:Variables(12), bc#205)  predicting Double, forcing double
 124:           &lt; 1:20&gt;	JSConstant(JS, $3 = Int32: 2, bc#208)
 353:           &lt;!0:-&gt;	Phantom(Number:@124&lt;Int32&gt;, MustGen, bc#208)
 342:           &lt; 1:20&gt;	JSConstant(Number|PureInt, $5 = Double: 4611686018427387904, 2.000000, bc#208)
 125:           &lt;!1:20&gt;	ArithDiv(Number:@122&lt;Double&gt;, Number:@342&lt;Double&gt;, Number|MustGen|UseAsOther|MayOverflow|MayNegZero, bc#208)
 126:           &lt; 1:-&gt;	SetLocal(Number:@125&lt;Double&gt;, NodeExitsForward, r13(EC&lt;Double&gt;), W:Variables(13), bc#208)  predicting Double, forcing double
 127:           &lt; 1:20&gt;	GetLocal(@231, JS|UseAsOther, r4(GB&lt;Double&gt;), R:Variables(4), bc#213)  predicting Double, forcing double
 128:           &lt; 1:-&gt;	SetLocal(Number:@127&lt;Double&gt;, NodeExitsForward, r14(GC&lt;Double&gt;), W:Variables(14), bc#213)  predicting Double, forcing double
 129:           &lt; 1:-&gt;	SetLocal(Number:@122&lt;Double&gt;, NodeExitsForward, r15(HC&lt;Double&gt;), W:Variables(15), bc#216)  predicting Double, forcing double
 130:           &lt;!0:-&gt;	Jump(MustGen, T:#9, W:SideState, bc#219)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r9:(Int, Int32: 0) r10:(Int, Int32: 0) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Double)
  var links: arg2:@323 arg1:@311 r4:@127&lt;Double&gt; r5:@122&lt;Double&gt; r6:@284 r7:@266 r8:@277 r9:@121 r10:@120 r11:@299 r12:@123 r13:@126 r14:@128 r15:@129

Block #9 (bc#219): 
  Predecessors: #7 #8
  Dominated by: #0 #3 #6 #9
  Dominates: #9 #10 #11 #12 #13
  Phi Nodes: @229&lt;1&gt;-&gt;(@129, @117), @253&lt;1&gt;-&gt;(@123, @111), @255&lt;1&gt;-&gt;(@128, @116), @258&lt;1&gt;-&gt;(@126, @114), @261&lt;1&gt;-&gt;(@121, @262), @265&lt;1&gt;-&gt;(@266, @267), @276&lt;1&gt;-&gt;(@277, @108), @283&lt;1&gt;-&gt;(@284, @285), @298&lt;1&gt;-&gt;(@299, @109), @303&lt;1&gt;-&gt;(@120, @304), @310&lt;2&gt;-&gt;(@311, @312), @322&lt;2&gt;-&gt;(@323, @324)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Double)
  var links: arg2:@322 arg1:@310 r6:@283 r7:@265 r8:@276 r9:@261 r10:@303 r11:@298 r12:@253 r13:@258 r14:@255 r15:@229
 131:           &lt; 3:22&gt;	WeakJSConstant(JS|UseAsOther, 0x10e93f970 (%BC:global), bc#219)
 132:  skipped  &lt; 0:-&gt;	MovHint(@131&lt;Object&gt;, r19(QC~&lt;Object&gt;), W:SideState, bc#219)
 133:           &lt;!0:-&gt;	StructureTransitionWatchpoint(Cell:@131&lt;Object&gt;, MustGen|CanExit, %BC:global, R:JSCell_structure, bc#224)
 134:           &lt; 1:20&gt;	GetButterfly(Cell:@131&lt;Object&gt;, Storage|UseAsOther, R:JSObject_butterfly, bc#224)
 135:           &lt; 4:22&gt;	GetByOffset(@134&lt;Other&gt;, KnownCell:@131&lt;Object&gt;, JS|UseAsOther, id1{Math}, 117, R:NamedProperties(1), bc#224)  predicting Otherobj
 136:  skipped  &lt; 0:-&gt;	MovHint(@135&lt;Object&gt;, r19(RC~&lt;Object&gt;), W:SideState, bc#224)
 137:           &lt;!0:-&gt;	CheckStructure(Check:Cell:@135&lt;Object&gt;, MustGen|CanExit, [%BY:Math], R:JSCell_structure, bc#232)
 138:           &lt;!0:-&gt;	Phantom(@135&lt;Object&gt;, MustGen, bc#232)
 139:           &lt; 2:20&gt;	WeakJSConstant(JS|UseAsOther, 0x10e98ef30 (%D3:Function), bc#232)
 140:  skipped  &lt; 0:-&gt;	MovHint(@139&lt;Function&gt;, r17(SC~&lt;Function&gt;), W:SideState, bc#232)
 141:  skipped  &lt; 0:-&gt;	MovHint(@131&lt;Object&gt;, r20(TC~&lt;Object&gt;), W:SideState, bc#241)
 142:           &lt; 3:21&gt;	GetGlobalVar(JS|UseAsOther, global18(0x7fecbb5040a8), R:Absolute(140654731608232), bc#246)  predicting Array
 143:  skipped  &lt; 0:-&gt;	MovHint(@142&lt;Array&gt;, r21(UC~&lt;Array&gt;), W:SideState, bc#246)
 144:           &lt;!0:-&gt;	CheckStructure(Check:Cell:@142&lt;Array&gt;, MustGen|CanExit, [%B4:Array], R:JSCell_structure, bc#254)
 145:           &lt; 1:24&gt;	GetButterfly(Cell:@142&lt;Array&gt;, Storage|UseAsOther, R:JSObject_butterfly, bc#254)
 146:           &lt; 1:21&gt;	GetByOffset(@145&lt;Other&gt;, KnownCell:@142&lt;Array&gt;, JS|UseAsOther, id5{LastPx}, 104, R:NamedProperties(5), bc#254)  predicting Int
 147:  skipped  &lt; 0:-&gt;	MovHint(@146&lt;Int32&gt;, r20(VC~&lt;Int32&gt;), W:SideState, bc#254)
 148:           &lt; 1:24&gt;	GetLocal(@229, JS|UseAsOther, r15(HC&lt;Double&gt;), R:Variables(15), bc#263)  predicting Double, forcing double
 343:           &lt; 1:21&gt;	Int32ToDouble(Check:Number:@146&lt;Int32&gt;, Number|PureInt|CanExit, bc#263)
 149:           &lt;!1:24&gt;	ValueAdd(Number:@343&lt;Double&gt;, Number:@148&lt;Double&gt;, JS|MustGen|MightClobber|UseAsOther, bc#263)
 150:  skipped  &lt; 0:-&gt;	MovHint(@149&lt;Double&gt;, r18(XC~&lt;Double&gt;), W:SideState, bc#263)
 151:           &lt;!0:-&gt;	Phantom(@139&lt;Function&gt;, @135&lt;Object&gt;, MustGen, bc#268)
 152:           &lt;!2:24&gt;	Call(@139&lt;Function&gt;, @135&lt;Object&gt;, @149&lt;Double&gt;, JS|MustGen|VarArgs|Clobbers|UseAsOther|CanExit, R:World, W:World, bc#268)  predicting Int
 153:           &lt; 2:-&gt;	SetLocal(Check:Int32:@152&lt;Int32&gt;, CanExit|NodeExitsForward, r15(YC&lt;Int32&gt;), W:Variables(15), bc#268)  predicting Int
 154:  skipped  &lt; 0:-&gt;	MovHint(@131&lt;Object&gt;, r17(ZC~&lt;Object&gt;), W:SideState, bc#276)
 155:           &lt; 3:22&gt;	GetGlobalVar(JS|UseAsOther, global18(0x7fecbb5040a8), R:Absolute(140654731608232), bc#281)  predicting Array
 156:  skipped  &lt; 0:-&gt;	MovHint(@155&lt;Array&gt;, r18(AD~&lt;Array&gt;), W:SideState, bc#281)
 157:           &lt;!0:-&gt;	CheckStructure(Check:Cell:@155&lt;Array&gt;, MustGen|CanExit, [%B4:Array], R:JSCell_structure, bc#289)
 158:           &lt; 1:20&gt;	GetButterfly(Cell:@155&lt;Array&gt;, Storage|UseAsOther, R:JSObject_butterfly, bc#289)
 159:           &lt; 2:22&gt;	GetByOffset(@158&lt;Other&gt;, KnownCell:@155&lt;Array&gt;, JS|UseAsOther, id5{LastPx}, 104, R:NamedProperties(5), bc#289)  predicting Int
 160:           &lt; 1:-&gt;	SetLocal(Check:Int32:@159&lt;Int32&gt;, CanExit|NodeExitsForward, r16(BD&lt;Int32&gt;), W:Variables(16), bc#289)  predicting Int
 161:           &lt;!1:24&gt;	CompareLess(Int32:@159&lt;Int32&gt;, Int32:@152&lt;Int32&gt;, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#298)
 162:           &lt;!0:-&gt;	Branch(Boolean:@161&lt;Boolean&gt;, MustGen|CanExit, T:#10, F:#13, W:SideState, bc#298)
  vars after: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int) r17:(Otherobj, TOP, TOP, [%BC:global], Cell: 0x10e93f970 (%BC:global)) r18:(Array, ArrayWithContiguous, [%B4:Array], [%B4:Array]) r19:(Otherobj, TOP, TOP, [%BY:Math]) r20:(IntDouble) r21:(Array, TOP, TOP, [%B4:Array])
  var links: arg2:@322 arg1:@310 r6:@283 r7:@265 r8:@276 r9:@261 r10:@303 r11:@298 r12:@253 r13:@258 r14:@255 r15:@153 r16:@160 r17:@154 r18:@156 r19:@136 r20:@147 r21:@143

Block #10 (bc#303):  (OSR target)
  Predecessors: #9 #12
  Dominated by: #0 #3 #6 #9 #10
  Dominates: #10 #11 #12
  Loop header, contains: #10 #11 #12
  Containing loop headers: #10
  Phi Nodes: @226&lt;1&gt;-&gt;(@257, @258), @227&lt;3&gt;-&gt;(@254, @255), @228&lt;3&gt;-&gt;(@252, @253), @259&lt;2&gt;-&gt;(@260, @261), @264&lt;2&gt;-&gt;(@191, @265), @274&lt;2&gt;-&gt;(@275, @276), @282&lt;2&gt;-&gt;(@187, @283), @293&lt;2&gt;-&gt;(@219, @153), @295&lt;2&gt;-&gt;(@195, @160), @297&lt;2&gt;-&gt;(@217, @298), @302&lt;2&gt;-&gt;(@215, @303), @320&lt;2&gt;-&gt;(@309, @310), @332&lt;2&gt;-&gt;(@321, @322)
  vars before: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) arg0:(Otherobj, NonArray, [%BC:global], [%BC:global], Cell: 0x10e93f970 (%BC:global)) r0:(Doublereal, Double: 4639342159172064522, 146.034796) r1:(Doublereal, Double: 4640571429092064255, 180.972749) r2:(Doublereal, Double: 4638361214191237942, 123.077331) r3:(Doublereal, Double: 4639132401904757561, 140.073136) r4:(Doublereal, Double: 4630113896989498324, 34.937952) r5:(Doublereal, Double: 4625477111388794096, 16.995805) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@332 arg1:@320 r6:@282 r7:@264 r8:@274 r9:@259 r10:@302 r11:@297 r12:@228 r13:@226 r14:@227 r15:@293 r16:@295
 164:           &lt; 1:24&gt;	GetLocal(@226, JS|UseAsOther, r13(EC&lt;Double&gt;), R:Variables(13), bc#303)  predicting Double, forcing double
 165:           &lt; 1:22&gt;	GetLocal(@227, JS|UseAsOther, r14(GC&lt;Double&gt;), R:Variables(14), bc#303)  predicting Double, forcing double
 166:           &lt;!2:22&gt;	ValueAdd(Number:@164&lt;Double&gt;, Number:@165&lt;Double&gt;, JS|MustGen|MightClobber|UseAsOther|MayOverflow, bc#303)
 167:           &lt; 2:-&gt;	SetLocal(Number:@166&lt;Double&gt;, NodeExitsForward, r13(EC&lt;Double&gt;), W:Variables(13), bc#303)  predicting Double, forcing double
 168:           &lt; 1:24&gt;	GetLocal(@228, JS|UseAsOther, r12(DC&lt;Double&gt;), R:Variables(12), bc#308)  predicting Double, forcing double
 169:           &lt;!1:24&gt;	CompareGreaterEq(Number:@166&lt;Double&gt;, Number:@168&lt;Double&gt;, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#308)
 170:           &lt;!0:-&gt;	Branch(Boolean:@169&lt;Boolean&gt;, MustGen|CanExit, T:#11, F:#12, W:SideState, bc#308)
  vars after: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@332 arg1:@320 r6:@282 r7:@264 r8:@274 r9:@259 r10:@302 r11:@297 r12:@168&lt;Double&gt; r13:@167 r14:@165&lt;Double&gt; r15:@293 r16:@295

Block #11 (bc#312): 
  Predecessors: #10
  Dominated by: #0 #3 #6 #9 #10 #11
  Dominates: #11
  Containing loop headers: #10
  Phi Nodes: @220&lt;1&gt;-&gt;(@167), @221&lt;2&gt;-&gt;(@228), @222&lt;1&gt;-&gt;(@282), @223&lt;2&gt;-&gt;(@274), @224&lt;1&gt;-&gt;(@264), @225&lt;2&gt;-&gt;(@259), @256&lt;1&gt;-&gt;(@227), @292&lt;1&gt;-&gt;(@293), @294&lt;1&gt;-&gt;(@295), @296&lt;1&gt;-&gt;(@297), @301&lt;1&gt;-&gt;(@302), @319&lt;1&gt;-&gt;(@320), @331&lt;1&gt;-&gt;(@332)
  vars before: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@331 arg1:@319 r6:@222 r7:@224 r8:@223 r9:@225 r10:@301 r11:@296 r12:@221 r13:@220 r14:@256 r15:@292 r16:@294
 171:           &lt; 1:24&gt;	GetLocal(@220, JS|UseAsOther, r13(EC&lt;Double&gt;), R:Variables(13), bc#312)  predicting Double, forcing double
 172:           &lt; 1:22&gt;	GetLocal(@221, JS|UseAsOther, r12(DC&lt;Double&gt;), R:Variables(12), bc#312)  predicting Double, forcing double
 173:           &lt;!1:22&gt;	ArithSub(Number:@171&lt;Double&gt;, Number:@172&lt;Double&gt;, Number|MustGen|UseAsOther|MayOverflow, bc#312)
 174:           &lt; 1:-&gt;	SetLocal(Number:@173&lt;Double&gt;, NodeExitsForward, r13(EC&lt;Double&gt;), W:Variables(13), bc#312)  predicting Double, forcing double
 175:           &lt; 1:22&gt;	GetLocal(@222, JS|UseAsOther, r6(MB&lt;Double&gt;), R:Variables(6), bc#317)  predicting Double, forcing double
 176:           &lt; 1:24&gt;	GetLocal(@223, JS|UseAsOther, r8(OB~&lt;Int32&gt;), R:Variables(8), bc#317)  predicting Int
 344:           &lt; 1:24&gt;	Int32ToDouble(Number:@176&lt;Int32&gt;, Number|PureInt, bc#317)
 177:           &lt;!1:24&gt;	ValueAdd(Number:@175&lt;Double&gt;, Number:@344&lt;Double&gt;, JS|MustGen|MightClobber|UseAsOther|MayOverflow, bc#317)
 178:           &lt; 1:-&gt;	SetLocal(Number:@177&lt;Double&gt;, NodeExitsForward, r6(MB&lt;Double&gt;), W:Variables(6), bc#317)  predicting Double, forcing double
 179:           &lt; 1:24&gt;	GetLocal(@224, JS|UseAsOther, r7(NB&lt;Double&gt;), R:Variables(7), bc#322)  predicting Double, forcing double
 180:           &lt; 1:22&gt;	GetLocal(@225, JS|UseAsOther, r9(UB~&lt;Int32&gt;), R:Variables(9), bc#322)  predicting Int
 345:           &lt; 1:22&gt;	Int32ToDouble(Number:@180&lt;Int32&gt;, Number|PureInt, bc#322)
 181:           &lt;!1:22&gt;	ValueAdd(Number:@179&lt;Double&gt;, Number:@345&lt;Double&gt;, JS|MustGen|MightClobber|UseAsOther|MayOverflow, bc#322)
 182:           &lt; 1:-&gt;	SetLocal(Number:@181&lt;Double&gt;, NodeExitsForward, r7(NB&lt;Double&gt;), W:Variables(7), bc#322)  predicting Double, forcing double
 183:           &lt;!0:-&gt;	Jump(MustGen, T:#12, W:SideState, bc#327)
  vars after: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@331 arg1:@319 r6:@178 r7:@182 r8:@176&lt;Int32&gt; r9:@180&lt;Int32&gt; r10:@301 r11:@296 r12:@172&lt;Double&gt; r13:@174 r14:@256 r15:@292 r16:@294

Block #12 (bc#327): 
  Predecessors: #10 #11
  Dominated by: #0 #3 #6 #9 #10 #12
  Dominates: #12
  Containing loop headers: #10
  Phi Nodes: @214&lt;1&gt;-&gt;(@178, @282), @215&lt;2&gt;-&gt;(@301, @302), @216&lt;1&gt;-&gt;(@182, @264), @217&lt;2&gt;-&gt;(@296, @297), @218&lt;1&gt;-&gt;(@294, @295), @219&lt;3&gt;-&gt;(@292, @293), @252&lt;1&gt;-&gt;(@221, @228), @254&lt;1&gt;-&gt;(@256, @227), @257&lt;1&gt;-&gt;(@174, @167), @260&lt;1&gt;-&gt;(@225, @259), @275&lt;1&gt;-&gt;(@223, @274), @309&lt;2&gt;-&gt;(@319, @320), @321&lt;2&gt;-&gt;(@331, @332)
  vars before: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@321 arg1:@309 r6:@214 r7:@216 r8:@275 r9:@260 r10:@215 r11:@217 r12:@252 r13:@257 r14:@254 r15:@219 r16:@218
 184:           &lt; 1:22&gt;	GetLocal(@214, JS|UseAsOther, r6(MB&lt;Double&gt;), R:Variables(6), bc#327)  predicting Double, forcing double
 185:           &lt; 1:24&gt;	GetLocal(@215, JS|UseAsOther, r10(PB~&lt;Int32&gt;), R:Variables(10), bc#327)  predicting Int
 346:           &lt; 1:24&gt;	Int32ToDouble(Number:@185&lt;Int32&gt;, Number|PureInt, bc#327)
 186:           &lt;!1:24&gt;	ValueAdd(Number:@184&lt;Double&gt;, Number:@346&lt;Double&gt;, JS|MustGen|MightClobber|UseAsOther|MayOverflow, bc#327)
 187:           &lt; 1:-&gt;	SetLocal(Number:@186&lt;Double&gt;, NodeExitsForward, r6(MB&lt;Double&gt;), W:Variables(6), bc#327)  predicting Double, forcing double
 188:           &lt; 1:24&gt;	GetLocal(@216, JS|UseAsOther, r7(NB&lt;Double&gt;), R:Variables(7), bc#332)  predicting Double, forcing double
 189:           &lt; 1:22&gt;	GetLocal(@217, JS|UseAsOther, r11(VB~&lt;Int32&gt;), R:Variables(11), bc#332)  predicting Int
 347:           &lt; 1:22&gt;	Int32ToDouble(Number:@189&lt;Int32&gt;, Number|PureInt, bc#332)
 190:           &lt;!1:22&gt;	ValueAdd(Number:@188&lt;Double&gt;, Number:@347&lt;Double&gt;, JS|MustGen|MightClobber|UseAsOther|MayOverflow, bc#332)
 191:           &lt; 1:-&gt;	SetLocal(Number:@190&lt;Double&gt;, NodeExitsForward, r7(NB&lt;Double&gt;), W:Variables(7), bc#332)  predicting Double, forcing double
 192:           &lt; 1:22&gt;	GetLocal(@218, JS|UseAsOther, r16(BD&lt;Int32&gt;), R:Variables(16), bc#337)  predicting Int
 193:           &lt; 1:24&gt;	JSConstant(JS|UseAsOther, $1 = Int32: 1, bc#337)
 194:           &lt;!2:24&gt;	ArithAdd(Int32:@192&lt;Int32&gt;, Int32:@193&lt;Int32&gt;, Number|MustGen|UseAsOther|CanExit, bc#337)
 195:           &lt; 1:-&gt;	SetLocal(Int32:@194&lt;Int32&gt;, NodeExitsForward, r16(BD&lt;Int32&gt;), W:Variables(16), bc#337)  predicting Int
 196:           &lt; 1:22&gt;	GetLocal(@219, JS|UseAsOther, r15(YC&lt;Int32&gt;), R:Variables(15), bc#339)  predicting Int
 197:           &lt;!1:22&gt;	CompareLess(Int32:@194&lt;Int32&gt;, Int32:@196&lt;Int32&gt;, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#339)
 198:           &lt;!0:-&gt;	Branch(Boolean:@197&lt;Boolean&gt;, MustGen|CanExit, T:#10, F:#13, W:SideState, bc#339)
  vars after: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@321 arg1:@309 r6:@187 r7:@191 r8:@275 r9:@260 r10:@185&lt;Int32&gt; r11:@189&lt;Int32&gt; r12:@252 r13:@257 r14:@254 r15:@196&lt;Int32&gt; r16:@195

Block #13 (bc#343): 
  Predecessors: #9 #12
  Dominated by: #0 #3 #6 #9 #13
  Dominates: #13
  Phi Nodes: @211&lt;1&gt;-&gt;(@219, @153), @212&lt;1&gt;-&gt;(@321, @322), @213&lt;1&gt;-&gt;(@309, @310)
  vars before: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r15:(Int)
  var links: arg2:@207 arg1:@208 r15:@211
 199:           &lt;!0:-&gt;	Phantom(MustGen|CanExit, bc#343)
 200:  skipped  &lt; 0:-&gt;	ZombieHint(r17(YD~&lt;Object&gt;), W:SideState, bc#343)
 201:           &lt; 3:22&gt;	GetGlobalVar(JS|UseAsOther, global18(0x7fecbb5040a8), R:Absolute(140654731608232), bc#348)  predicting Array
 202:  skipped  &lt; 0:-&gt;	MovHint(@201&lt;Array&gt;, r18(ZD~&lt;Array&gt;), W:SideState, bc#348)
 203:           &lt; 1:24&gt;	GetLocal(@211, JS|UseAsOther, r15(YC&lt;Int32&gt;), R:Variables(15), bc#356)  predicting Int
 204:           &lt;!0:-&gt;	CheckStructure(Check:Cell:@201&lt;Array&gt;, MustGen|CanExit, [%B4:Array], R:JSCell_structure, bc#356)
 205:           &lt; 1:20&gt;	GetButterfly(Cell:@201&lt;Array&gt;, Storage|UseAsOther, R:JSObject_butterfly, bc#356)
 206:           &lt;!0:-&gt;	PutByOffset(@205&lt;Other&gt;, KnownCell:@201&lt;Array&gt;, @203&lt;Int32&gt;, MustGen, id5{LastPx}, 104, W:NamedProperties(5), bc#356)
 207:           &lt;!0:-&gt;	Flush(@212, MustGen, arg2(C&lt;Final&gt;), W:SideState, bc#365)  predicting Final
 208:           &lt;!0:-&gt;	Flush(@213, MustGen, arg1(B&lt;Final&gt;), W:SideState, bc#365)  predicting Final
 209:           &lt; 1:24&gt;	JSConstant(JS|UseAsOther, $4 = Undefined, bc#365)
 210:           &lt;!0:-&gt;	Return(@209&lt;Other&gt;, MustGen, W:SideState, bc#365)
  vars after: 
  var links: arg2:@207 arg1:@208 r15:@203&lt;Int32&gt; r17:@200 r18:@202

Structures:
    %AJ:Array    = 0x10e91e5c0:[Array, {}, ArrayWithDouble, Proto:0x10e99ffe0]
    %B4:Array    = 0x10e91a180:[Array, {Edge:100, Normal:101, Line:102, NumPx:103, LastPx:104}, ArrayWithContiguous, Proto:0x10e99ffe0]
    %BC:global   = 0x10e91a1f0:[global, {Object:100, Function:101, Array:102, Boolean:103, String:104, Number:105, Date:106, RegExp:107, Error:108, EvalError:109, RangeError:110, ReferenceError:111, SyntaxError:112, TypeError:113, URIError:114, eval:115, JSON:116, Math:117, Name:118, debug:119, describe:120, print:121, quit:122, gc:123, dumpCallFrame:124, releaseExecutableMemory:125, version:126, run:127, load:128, checkSyntax:129, jscStack:130, readline:131, preciseTime:132, Uint8Array:133, Uint8ClampedArray:134, Uint16Array:135, Uint32Array:136, Int8Array:137, Int16Array:138, Int32Array:139, Float32Array:140, Float64Array:141, arguments:142, V:143}, NonArray, Proto:0x10e99fff0]
    %BY:Math     = 0x10e91bf40:[Math, {E:100, LN2:101, LN10:102, LOG2E:103, LOG10E:104, PI:105, SQRT1_2:106, SQRT2:107, abs:108, acos:109, asin:110, atan:111, atan2:112, ceil:113, cos:114, exp:115, floor:116, log:117, max:118, min:119, pow:120, random:121, round:122, sin:123, sqrt:124, tan:125}, NonArray, Proto:0x10e99fff0]
    %D3:Function = 0x10e91f190:[Function, {name:100, length:101}, NonArray, Proto:0x10e95ffe0]
    %DK:Object   = 0x10e91a420:[Object, {V:0}, NonArray, Proto:0x10ea2fef0]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911382</commentid>
    <comment_count>2</comment_count>
      <attachid>207408</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-24 11:54:40 -0700</bug_when>
    <thetext>Created attachment 207408
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911397</commentid>
    <comment_count>3</comment_count>
      <attachid>207408</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-07-24 12:31:39 -0700</bug_when>
    <thetext>Comment on attachment 207408
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911424</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-24 14:46:58 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/153103</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207408</attachid>
            <date>2013-07-24 11:54:40 -0700</date>
            <delta_ts>2013-07-24 12:31:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80125</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzMDkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBA
QAorMjAxMy0wNy0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBJUiBkdW1wcyBzaG91bGQgYmUgZWFzaWVyIHRvIHJlYWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA1MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkZWQg
YSBEdW1wQ29udGV4dCB0aGF0IGluY2x1ZGVzIHN1cHBvcnQgZm9yIHByaW50aW5nIGFuIGVuZG5v
dGUKKyAgICAgICAgdGhhdCBkZXNjcmliZXMgYWxsIHN0cnVjdHVyZXMgaW4gZnVsbCwgd2hpbGUg
dGhlIG1haW4gZmxvdyBvZiB0aGUKKyAgICAgICAgZHVtcCBqdXN0IHVzZXMgbWFkZS11cCBuYW1l
cyBmb3IgdGhlIHN0cnVjdHVyZXMuIFRoaXMgaXMgaGVscGZ1bAorICAgICAgICBzaW5jZSBTdHJ1
Y3R1cmU6OmR1bXAoKSBtYXkgcHJpbnQgYSBsb3QuIFRoZSBzdHVmZiBpdCBwcmludHMgaXMKKyAg
ICAgICAgdXNlZnVsLCBidXQgaWYgaXQncyBhbGwgaW5saW5lIHdpdGggdGhlIHN1cnJvdW5kaW5n
IHRoaW5nIHlvdSdyZSAgICAgICAgCisgICAgICAgIGR1bXBpbmcgKG9mdGVuLCBhIG5vZGUgaW4g
dGhlIERGRyksIHRoZW4geW91IGdldCBhIHJpZGljdWxvdXNseQorICAgICAgICBsb25nIHByaW50
LW91dC4gQWxsIGNsYXNzZXMgdGhhdCBkdW1wIHN0cnVjdHVyZXMgKGluY2x1ZGluZworICAgICAg
ICBTdHJ1Y3R1cmUgaXRzZWxmKSBub3cgaGF2ZSBkdW1wSW5Db250ZXh0KCkgbWV0aG9kcyB0aGF0
IHVzZQorICAgICAgICBpbkNvbnRleHQoKSBmb3IgZHVtcGluZyBhbnl0aGluZyB0aGF0IG1pZ2h0
IHRyYW5zaXRpdmVseSBwcmludCBhCisgICAgICAgIHN0cnVjdHVyZS4gSWYgU3RydWN0dXJlOjpk
dW1wSW5Db250ZXh0KCkgaXMgY2FsbGVkIHdpdGggYSBOVUxMCisgICAgICAgIGNvbnRleHQsIGl0
IGp1c3QgdXNlcyBkdW1wKCkgbGlrZSBiZWZvcmUuIEhlbmNlIHlvdSBkb24ndCBoYXZlIHRvCisg
ICAgICAgIGtub3cgYW55dGhpbmcgYWJvdXQgRHVtcENvbnRleHQgdW5sZXNzIHlvdSB3YW50IHRv
LgorICAgICAgICAKKyAgICAgICAgaW5Db250ZXh0KCpzdHJ1Y3R1cmUsIGNvbnRleHQpIGR1bXBz
IHNvbWV0aGluZyBsaWtlICVCNDpBcnJheSwKKyAgICAgICAgYW5kIHRoZSBlbmRub3RlIHdpbGwg
aGF2ZSBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgCisgICAgICAgICAgICAlQjQ6QXJyYXkgICAg
PSAweDEwZTkxYTE4MDpbQXJyYXksIHtFZGdlOjEwMCwgTm9ybWFsOjEwMSwgTGluZToxMDIsIE51
bVB4OjEwMywgTGFzdFB4OjEwNH0sIEFycmF5V2l0aENvbnRpZ3VvdXMsIFByb3RvOjB4MTBlOTlm
ZmUwXQorICAgICAgICAKKyAgICAgICAgd2hlcmUgQjQgaXMgdGhlIGluZmVycmVkIG5hbWUgdGhh
dCBTdHJpbmdIYXNoRHVtcENvbnRleHQgY2FtZSB1cAorICAgICAgICB3aXRoLgorICAgICAgICAK
KyAgICAgICAgQWxzbyBzaG9ydGVuZWQgYSBidW5jaCBvZiBvdGhlciBkdW1wcywgcmVtb3Zpbmcg
aW5mb3JtYXRpb24gdGhhdAorICAgICAgICBpc24ndCBzbyBpbXBvcnRhbnQuCisgICAgICAgIAor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6ZHVtcEFycmF5
TW9kZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9ja0hhc2guY3BwOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrSGFzaDo6Q29kZUJsb2NrSGFzaCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja0hhc2g6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVP
cmlnaW4uY3BwOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpkdW1wSW5Db250ZXh0KToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6ZHVtcEluQ29udGV4
dCk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6ZHVtcCk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoQ29kZU9yaWdpbik6CisgICAgICAgIChJbmxp
bmVDYWxsRnJhbWUpOgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChK
U0M6Ok9wZXJhbmRWYWx1ZVRyYWl0czo6aXNFbXB0eUZvckR1bXApOgorICAgICAgICAoT3BlcmFu
ZHMpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZHVtcCk6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0M6Ojo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgICogYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6ZHVtcEluQ29udGV4dCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6ZHVtcCk6CisgICAgICAgIChTdHJ1Y3R1cmVT
ZXQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdFZhbHVlOjpkdW1wKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvcGVyYXRv
ciEpOgorICAgICAgICAoQWJzdHJhY3RWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAg
ICAgICAgKiBkZmcvREZHQ29tbW9uLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZVBvaW50ZXJUcmFpdHM6OmlzRW1wdHlGb3JEdW1wKToKKyAg
ICAgICAgKiBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEaXNh
c3NlbWJsZXI6OmNyZWF0ZUR1bXBMaXN0KToKKyAgICAgICAgKiBkZmcvREZHRGlzYXNzZW1ibGVy
Lmg6CisgICAgICAgIChEaXNhc3NlbWJsZXIpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaEZvcm1h
dC5oOgorICAgICAgICAoV1RGOjppbkNvbnRleHQpOgorICAgICAgICAoV1RGKToKKyAgICAgICAg
KiBkZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBDb2RlT3JpZ2luKToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpMYXp5SlNWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6
TGF6eUpTVmFsdWU6OmR1bXApOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHTGF6
eUpTVmFsdWUuaDoKKyAgICAgICAgKExhenlKU1ZhbHVlKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Om5vZGVNYXBEdW1wKToKKyAgICAgICAgKFdURjo6aW5D
b250ZXh0KToKKyAgICAgICAgKFdURik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxl
cjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAgIChTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
KToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpF
eGl0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6
ZHVtcCk6CisgICAgICAgIChGVEwpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuaDoKKyAg
ICAgICAgKEV4aXRWYWx1ZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoK
KyAgICAgICAgKiBmdGwvRlRMVmFsdWVTb3VyY2UuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlZh
bHVlU291cmNlOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEZUTCk6CisgICAgICAgICogZnRs
L0ZUTFZhbHVlU291cmNlLmg6CisgICAgICAgIChWYWx1ZVNvdXJjZSk6CisgICAgICAgICogcnVu
dGltZS9EdW1wQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpT
Qzo6RHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KToKKyAgICAgICAgKEpTQzo6RHVtcENvbnRleHQ6
On5EdW1wQ29udGV4dCk6CisgICAgICAgIChKU0M6OkR1bXBDb250ZXh0Ojppc0VtcHR5KToKKyAg
ICAgICAgKEpTQzo6RHVtcENvbnRleHQ6OmR1bXApOgorICAgICAgICAqIHJ1bnRpbWUvRHVtcENv
bnRleHQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoRHVtcENvbnRleHQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6
OmR1bXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZHVtcEluQ29u
dGV4dCk6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpkdW1wQnJpZWYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmR1bXBDb250ZXh0SGVhZGVyKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKFN0cnVjdHVyZSk6CisKIDIwMTMtMDctMjIgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3VydGhUaWVyOiBERkcgc2hv
dWxkIGRvIGEgaGlnaC1sZXZlbCBMSUNNIGJlZm9yZSBnb2luZyB0byBGVEwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTMwOTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzg0LDYgKzM4NCw5IEBACiAJCTBGRTUwNUEyMTc5QjYwRUQwMEIzNUY4QyAv
KiBGVExGYWlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTUwNUEwMTc5QjYwRUQwMEIzNUY4QyAvKiBGVExGYWlsLmNwcCAqLzsgfTsKIAkJMEZF
NTA1QTMxNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUExMTc5QjYwRUQwMEIzNUY4QyAvKiBGVExG
YWlsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZFNTA1QTUxNzlDRTNFQzAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QTQxNzlDRTNFQzAwQjM1
RjhDIC8qIERGR0Nsb2JiZXJpemUuY3BwICovOyB9OworCQkwRkU1MDVCMjE3OUU0MjE5MDBCMzVG
OEMgLyogRHVtcENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1QjAxNzlFNDIxOTAwQjM1RjhDIC8qIER1bXBDb250ZXh0LmNwcCAq
LzsgfTsKKwkJMEZFNTA1QjMxNzlFNDIxOTAwQjM1RjhDIC8qIER1bXBDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVCMTE3OUU0MjE5
MDBCMzVGOEMgLyogRHVtcENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDVCNTE3OUYzOUVFMDBCMzVGOEMgLyogT3BlcmFuZHNJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkU1MDVCNDE3OUYzOUVFMDBCMzVGOEMgLyogT3BlcmFuZHNJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFNTA1QUIxNzlDRUMwODAw
QjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QTYxNzlDRUMwODAwQjM1RjhDIC8qIERG
R0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwICovOyB9OwogCQkwRkU1MDVBQzE3OUNFQzA4MDBCMzVG
OEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QTcxNzlDRUMwODAwQjM1RjhDIC8qIERGR0F0VGFp
bEFic3RyYWN0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkU1MDVBRDE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QTgx
NzlDRUMwODAwQjM1RjhDIC8qIERGR0VkZ2VEb21pbmF0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ1MSw2ICsxNDU0LDkgQEAKIAkJMEZF
NTA1QTAxNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRlRMRmFpbC5jcHA7IHBhdGggPSBmdGwvRlRMRmFpbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTUwNUExMTc5QjYwRUQwMEIzNUY4QyAvKiBG
VExGYWlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEZhaWwuaDsgcGF0
aCA9IGZ0bC9GVExGYWlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTUwNUE0
MTc5Q0UzRUMwMEIzNUY4QyAvKiBERkdDbG9iYmVyaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Nsb2JiZXJpemUuY3BwOyBwYXRoID0gZGZnL0RGR0Nsb2Ji
ZXJpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDVCMDE3OUU0MjE5
MDBCMzVGOEMgLyogRHVtcENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRHVtcENvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDVCMTE3OUU0MjE5MDBCMzVGOEMgLyogRHVtcENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRHVtcENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFNTA1QjQxNzlGMzlFRTAwQjM1RjhDIC8qIE9wZXJhbmRzSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGVyYW5kc0lubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1QTYxNzlDRUMwODAwQjM1RjhDIC8qIERGR0F0VGFp
bEFic3RyYWN0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHA7IHBhdGggPSBkZmcvREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTUwNUE3MTc5Q0VDMDgw
MEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTUwNUE4
MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdFZGdlRG9taW5hdGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0VkZ2VEb21pbmF0ZXMuaDsgcGF0aCA9IGRmZy9ERkdFZGdlRG9t
aW5hdGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzMzLDYgKzI3MzksOCBA
QAogCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZFNTA1QjAxNzlFNDIxOTAwQjM1RjhD
IC8qIER1bXBDb250ZXh0LmNwcCAqLywKKwkJCQkwRkU1MDVCMTE3OUU0MjE5MDBCMzVGOEMgLyog
RHVtcENvbnRleHQuaCAqLywKIAkJCQk2NTE5OTc2QzE3NDQzNTQ4MDA3MzkzQ0UgLyogQ29tbW9u
U2xvd1BhdGhzLmNwcCAqLywKIAkJCQlCQ0Y2MDUxMTBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlz
dC5jcHAgKi8sCiAJCQkJQkNGNjA1MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLywK
QEAgLTMzNTEsNiArMzM1OSw3IEBACiAJCQkJOTY5QTA3OTQwRUQxRDNBRTAwRjFGNjgxIC8qIE9w
Y29kZS5jcHAgKi8sCiAJCQkJOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oICov
LAogCQkJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovLAorCQkJCTBG
RTUwNUI0MTc5RjM5RUUwMEIzNUY4QyAvKiBPcGVyYW5kc0lubGluZXMuaCAqLywKIAkJCQkwRjM0
QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmgg
Ki8sCiAJCQkJMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExp
c3QuY3BwICovLAogCQkJCTBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmggKi8sCkBAIC0zODM0LDYgKzM4NDMsNyBAQAogCQkJCTBGRTUwNTdCMTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJEQjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDVCMzE3OUU0MjE5MDBCMzVGOEMgLyog
RHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFF
MCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1
QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY2MEFDMjE2NzQw
RjgzMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODk4
LDYgKzM5MDgsNyBAQAogCQkJCTBGRjQyNzQyMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfZXh0
ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0NDE1OEVCRTkxMDA0Q0I5RkYgLyogdWRp
czg2X2lucHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0ODE1OEVCRTkxMDA0Q0I5RkYg
LyogdWRpczg2X3N5bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1QjUxNzlGMzlFRTAwQjM1
RjhDIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDkxNThF
QkU5MTAwNENCOUZGIC8qIHVkaXM4Nl90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5
RDMxM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtNDYxOCw2ICs0NjI5LDcgQEAKIAkJCQkwRjBDRDRDNDE1RjZC
NkJCMDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjU1NDFCMTE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNUIyMTc5RTQyMTkwMEIzNUY4QyAvKiBEdW1wQ29u
dGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzMwQjYxMzEyNTAwNjhGMDA5RDI1QjEgLyog
U3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUIxMDdF
QzdFNzAwNjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDY5REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmNwcAkocmV2aXNpb24gMTUzMDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FycmF5UHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiB2b2lkIGR1bXBBcnJheU1vZGVzKFByaW50U3RyZWFtJiBvdXQsIEFycmF5
TW9kZXMgYXJyYXlNb2RlcykKIHsKICAgICBpZiAoIWFycmF5TW9kZXMpIHsKLSAgICAgICAgb3V0
LnByaW50KCIwOjxlbXB0eT4iKTsKKyAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC00NCwzNCArNDQsMzMgQEAgdm9pZCBkdW1wQXJy
YXlNb2RlcyhQcmludFN0cmVhbSYgb3V0LCBBcgogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIG91dC5wcmludChhcnJheU1vZGVzLCAiOiIpOwotICAgIAorICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheSkpCi0g
ICAgICAgIG91dC5wcmludCgiTm9uQXJyYXkiKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
Tm9uQXJyYXkiKTsKICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhJbnQzMikpCi0gICAgICAgIG91dC5wcmludCgiTm9uQXJyYXlXaXRoSW50MzIiKTsKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiTm9uQXJyYXlXaXRoSW50MzIiKTsKICAgICBpZiAoYXJyYXlN
b2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhEb3VibGUpKQotICAgICAgICBvdXQucHJp
bnQoIk5vbkFycmF5V2l0aERvdWJsZSIpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJOb25B
cnJheVdpdGhEb3VibGUiKTsKICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhDb250aWd1b3VzKSkKLSAgICAgICAgb3V0LnByaW50KCJOb25BcnJheVdpdGhDb250
aWd1b3VzIik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIk5vbkFycmF5V2l0aENvbnRpZ3Vv
dXMiKTsKICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2UpKQotICAgICAgICBvdXQucHJpbnQoIk5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSIp
OworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UiKTsK
ICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlKSkKLSAgICAgICAgb3V0LnByaW50KCJOb25BcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlIik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIk5vbkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UiKTsKICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhBcnJheUNs
YXNzKSkKLSAgICAgICAgb3V0LnByaW50KCJBcnJheUNsYXNzIik7CisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkFycmF5Q2xhc3MiKTsKICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhVbmRlY2lkZWQpKQotICAgICAgICBvdXQucHJpbnQoIkFycmF5V2l0aFVuZGVj
aWRlZCIpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJBcnJheVdpdGhVbmRlY2lkZWQiKTsK
ICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhJbnQzMikpCi0gICAg
ICAgIG91dC5wcmludCgiQXJyYXlXaXRoSW50MzIiKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiQXJyYXlXaXRoSW50MzIiKTsKICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhEb3VibGUpKQotICAgICAgICBvdXQucHJpbnQoIkFycmF5V2l0aERvdWJsZSIpOwor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJBcnJheVdpdGhEb3VibGUiKTsKICAgICBpZiAoYXJy
YXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSkKLSAgICAgICAgb3V0
LnByaW50KCJBcnJheVdpdGhDb250aWd1b3VzIik7CisgICAgICAgIG91dC5wcmludChjb21tYSwg
IkFycmF5V2l0aENvbnRpZ3VvdXMiKTsKICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpKQotICAgICAgICBvdXQucHJpbnQoIkFycmF5V2l0aEFy
cmF5U3RvcmFnZSIpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJBcnJheVdpdGhBcnJheVN0
b3JhZ2UiKTsKICAgICBpZiAoYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlKSkKLSAgICAgICAgb3V0LnByaW50KCJBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlIik7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UiKTsKIH0KIAogdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSGFzaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0hh
c2guY3BwCShyZXZpc2lvbiAxNTMwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrSGFzaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDMwICsyOCwxMyBAQAogCiAj
aW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8
d3RmL1NpeENoYXJhY3Rlckhhc2guaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNkZWZpbmUgVEFC
TEUgKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6
MDEyMzQ1Njc4OSIpCi0KIENvZGVCbG9ja0hhc2g6OkNvZGVCbG9ja0hhc2goY29uc3QgY2hhciog
c3RyaW5nKQotICAgIDogbV9oYXNoKDApCisgICAgOiBtX2hhc2goc2l4Q2hhcmFjdGVySGFzaFN0
cmluZ1RvSW50ZWdlcihzdHJpbmcpKQogewotICAgIFJFTEVBU0VfQVNTRVJUKHN0cmxlbihzdHJp
bmcpID09IDYpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA2OyArK2kpIHsK
LSAgICAgICAgbV9oYXNoICo9IDYyOwotICAgICAgICB1bnNpZ25lZCBjID0gc3RyaW5nW2ldOwot
ICAgICAgICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHsKLSAgICAgICAgICAgIG1faGFzaCAr
PSBjIC0gJ0EnOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB7Ci0gICAgICAgICAgICBtX2hhc2ggKz0gYyAtICdhJyAr
IDI2OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGMg
Pj0gJzAnICYmIGMgPD0gJzknKTsKLSAgICAgICAgbV9oYXNoICs9IGMgLSAnMCcgKyAyNiAqIDI7
Ci0gICAgfQogfQogCiBDb2RlQmxvY2tIYXNoOjpDb2RlQmxvY2tIYXNoKGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZUNvZGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTcxLDIyICs1
NCwxNCBAQCBDb2RlQmxvY2tIYXNoOjpDb2RlQmxvY2tIYXNoKGNvbnN0IFNvdXJjCiAKIHZvaWQg
Q29kZUJsb2NrSGFzaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIEFTU0VS
VChzdHJsZW4oVEFCTEUpID09IDYyKTsKLSAgICAKLSAgICBjaGFyIGJ1ZmZlcls3XTsKLSAgICB1
bnNpZ25lZCBhY2N1bXVsYXRvciA9IG1faGFzaDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSA2OyBp
LS07KSB7Ci0gICAgICAgIGJ1ZmZlcltpXSA9IFRBQkxFW2FjY3VtdWxhdG9yICUgNjJdOwotICAg
ICAgICBhY2N1bXVsYXRvciAvPSA2MjsKLSAgICB9Ci0gICAgYnVmZmVyWzZdID0gMDsKKyAgICBG
aXhlZEFycmF5PGNoYXIsIDc+IGJ1ZmZlciA9IGludGVnZXJUb1NpeENoYXJhY3Rlckhhc2hTdHJp
bmcobV9oYXNoKTsKICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgQ29kZUJsb2NrSGFz
aCByZWNvbXB1dGUoYnVmZmVyKTsKKyAgICBDb2RlQmxvY2tIYXNoIHJlY29tcHV0ZShidWZmZXIu
ZGF0YSgpKTsKICAgICBBU1NFUlQocmVjb21wdXRlID09ICp0aGlzKTsKICNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECiAgICAgCi0gICAgb3V0LnByaW50KGJ1ZmZlcik7CisgICAgb3V0LnByaW50
KGJ1ZmZlci5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE1MzA5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTEgQEAgdm9pZCBDb2RlT3JpZ2luOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIAogICAgIH0KIH0KIAordm9pZCBDb2RlT3JpZ2luOjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KikgY29uc3QKK3sKKyAgICBkdW1wKG91dCk7
Cit9CisKIEpTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2FsbGVlRm9yQ2FsbEZyYW1lKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBpZiAoIWlzQ2xvc3VyZUNhbGwoKSkKQEAgLTEw
MywxMSArMTA4LDExIEBAIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wQnJpZWZGdW5jdGlvbkkK
ICAgICBvdXQucHJpbnQoaW5mZXJyZWROYW1lKCksICIjIiwgaGFzaCgpKTsKIH0KIAotdm9pZCBJ
bmxpbmVDYWxsRnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgSW5saW5l
Q2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAogewogICAgIG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24o
KSwgIjo8IiwgUmF3UG9pbnRlcihleGVjdXRhYmxlLmdldCgpKSwgIiwgYmMjIiwgY2FsbGVyLmJ5
dGVjb2RlSW5kZXgsICIsICIsIHNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICBpZiAoY2FsbGVl
KQotICAgICAgICBvdXQucHJpbnQoIiwga25vd24gY2FsbGVlOiAiLCBKU1ZhbHVlKGNhbGxlZS5n
ZXQoKSkpOworICAgICAgICBvdXQucHJpbnQoIiwga25vd24gY2FsbGVlOiAiLCBpbkNvbnRleHQo
SlNWYWx1ZShjYWxsZWUuZ2V0KCkpLCBjb250ZXh0KSk7CiAgICAgZWxzZQogICAgICAgICBvdXQu
cHJpbnQoIiwgY2xvc3VyZSBjYWxsIik7CiAgICAgb3V0LnByaW50KCIsIG51bUFyZ3MrdGhpcyA9
ICIsIGFyZ3VtZW50cy5zaXplKCkpOwpAQCAtMTE1LDUgKzEyMCwxMCBAQCB2b2lkIElubGluZUNh
bGxGcmFtZTo6ZHVtcChQcmludFN0cmVhbSYgCiAgICAgb3V0LnByaW50KCI+Iik7CiB9CiAKK3Zv
aWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
ZHVtcEluQ29udGV4dChvdXQsIDApOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiAx
NTMwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICBW
ZWN0b3I8Q29kZU9yaWdpbj4gaW5saW5lU3RhY2soKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogfTsKIAogc3RydWN0IElubGluZUNhbGxGcmFtZSB7
CkBAIC0xMTMsNiArMTE0LDcgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgCiAgICAg
dm9pZCBkdW1wQnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKFByaW50U3RyZWFtJikgY29uc3Q7CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAogICAgIE1BS0VfUFJJTlRfTUVU
SE9EKElubGluZUNhbGxGcmFtZSwgZHVtcEJyaWVmRnVuY3Rpb25JbmZvcm1hdGlvbiwgYnJpZWZG
dW5jdGlvbkluZm9ybWF0aW9uKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTUzMDkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcg
KzQzLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZQogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIHN0cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHMgewogICAgIHN0YXRpYyBU
IGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIFQoKTsgfQotICAgIHN0YXRpYyB2b2lkIGR1bXAoY29u
c3QgVCYgdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpIHsgb3V0LnByaW50KHZhbHVlKTsgfQorICAg
IHN0YXRpYyBib29sIGlzRW1wdHlGb3JEdW1wKGNvbnN0IFQmIHZhbHVlKSB7IHJldHVybiAhdmFs
dWU7IH0KIH07CiAKIGVudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQsIExvY2FsT3Bl
cmFuZCB9OwpAQCAtMjMwLDM3ICsyMzAsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9h
cmd1bWVudHMgPT0gb3RoZXIubV9hcmd1bWVudHMgJiYgbV9sb2NhbHMgPT0gb3RoZXIubV9sb2Nh
bHM7CiAgICAgfQogICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0OworICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIDApOworICAgIH0KICAgICAKIHBy
aXZhdGU6CiAgICAgVmVjdG9yPFQsIDg+IG1fYXJndW1lbnRzOwogICAgIFZlY3RvcjxULCAxNj4g
bV9sb2NhbHM7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+Ci12
b2lkIGR1bXBPcGVyYW5kcyhjb25zdCBPcGVyYW5kczxULCBUcmFpdHM+JiBvcGVyYW5kcywgUHJp
bnRTdHJlYW0mIG91dCkKLXsKLSAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IG9wZXJhbmRzLm51
bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7Ci0gICAgICAgIGlmIChhcmd1bWVudCAh
PSBvcGVyYW5kcy5udW1iZXJPZkFyZ3VtZW50cygpIC0gMSkKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIiAiKTsKLSAgICAgICAgb3V0LnByaW50KCJhcmciLCBhcmd1bWVudCwgIjoiKTsKLSAgICAg
ICAgVHJhaXRzOjpkdW1wKG9wZXJhbmRzLmFyZ3VtZW50KGFyZ3VtZW50KSwgb3V0KTsKLSAgICB9
Ci0gICAgb3V0LnByaW50ZigiIDogIik7Ci0gICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2Nh
bCA8IG9wZXJhbmRzLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKLSAgICAgICAgaWYgKGxv
Y2FsKQotICAgICAgICAgICAgb3V0LnByaW50ZigiICIpOwotICAgICAgICBvdXQucHJpbnQoInIi
LCBsb2NhbCwgIjoiKTsKLSAgICAgICAgVHJhaXRzOjpkdW1wKG9wZXJhbmRzLmxvY2FsKGxvY2Fs
KSwgb3V0KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0
cz4KLWlubGluZSB2b2lkIE9wZXJhbmRzPFQsIFRyYWl0cz46OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKLXsKLSAgICBkdW1wT3BlcmFuZHMoKnRoaXMsIG91dCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3BlcmFuZHNfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgT3BlcmFuZHNJbmxpbmVzX2gKKyNkZWZpbmUgT3BlcmFu
ZHNJbmxpbmVzX2gKKworI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVHJhaXRzPgordm9pZCBPcGVyYW5kczxULCBUcmFpdHM+OjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIENvbW1h
UHJpbnRlciBjb21tYSgiICIpOworICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1i
ZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudEluZGV4LS07KSB7CisgICAgICAgIGlmIChUcmFpdHM6
OmlzRW1wdHlGb3JEdW1wKGFyZ3VtZW50KGFyZ3VtZW50SW5kZXgpKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJhcmciLCBhcmd1bWVudEluZGV4LCAi
OiIsIGluQ29udGV4dChhcmd1bWVudChhcmd1bWVudEluZGV4KSwgY29udGV4dCkpOworICAgIH0K
KyAgICBmb3IgKHNpemVfdCBsb2NhbEluZGV4ID0gMDsgbG9jYWxJbmRleCA8IG51bWJlck9mTG9j
YWxzKCk7ICsrbG9jYWxJbmRleCkgeworICAgICAgICBpZiAoVHJhaXRzOjppc0VtcHR5Rm9yRHVt
cChsb2NhbChsb2NhbEluZGV4KSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiciIsIGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2FsKGxvY2Fs
SW5kZXgpLCBjb250ZXh0KSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIE9wZXJhbmRzSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDE1MzA5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNwZWN1
bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiRHVtcENvbnRl
eHQuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0xNjIsMTUgKzE2MywyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAgICAgewogICAgICAgICBDb21tYVByaW50ZXIg
Y29tbWE7CiAgICAgICAgIG91dC5wcmludCgiWyIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG91dC5wcmludChj
b21tYSwgKm1fc3RydWN0dXJlc1tpXSk7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGlu
Q29udGV4dCgqbV9zdHJ1Y3R1cmVzW2ldLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgi
XSIpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKKyAgICB9CisgICAgCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5j
cHAJKHJldmlzaW9uIDE1MzA5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MiwxMSArMjUyLDIwIEBAIHZvaWQg
QWJzdHJhY3RWYWx1ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpIGMKIAogdm9pZCBBYnN0cmFjdFZhbHVl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KAotICAgICAg
ICAiKCIsIFNwZWN1bGF0aW9uRHVtcChtX3R5cGUpLCAiLCAiLCBBcnJheU1vZGVzRHVtcChtX2Fy
cmF5TW9kZXMpLCAiLCAiLAotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSwgIiwgIiwg
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSk7CisgICAgZHVtcEluQ29udGV4dChvdXQsIDApOwor
fQorCit2b2lkIEFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIoIiwgU3BlY3Vs
YXRpb25EdW1wKG1fdHlwZSkpOworICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgeworICAgICAg
ICBvdXQucHJpbnQoCisgICAgICAgICAgICAiLCAiLCBBcnJheU1vZGVzRHVtcChtX2FycmF5TW9k
ZXMpLCAiLCAiLAorICAgICAgICAgICAgaW5Db250ZXh0KG1fY3VycmVudEtub3duU3RydWN0dXJl
LCBjb250ZXh0KSwgIiwgIiwKKyAgICAgICAgICAgIGluQ29udGV4dChtX2Z1dHVyZVBvc3NpYmxl
U3RydWN0dXJlLCBjb250ZXh0KSk7CisgICAgfQogICAgIGlmICghIW1fdmFsdWUpCi0gICAgICAg
IG91dC5wcmludCgiLCAiLCBtX3ZhbHVlKTsKKyAgICAgICAgb3V0LnByaW50KCIsICIsIGluQ29u
dGV4dChtX3ZhbHVlLCBjb250ZXh0KSk7CiAgICAgb3V0LnByaW50KCIpIik7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lv
biAxNTMwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR1N0cnVjdHVy
ZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJTcGVjdWxh
dGVkVHlwZS5oIgorI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
U2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTU5LDYgKzYwLDcg
QEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIH0KICAgICAKICAgICBib29sIGlzQ2xlYXIo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gU3BlY05vbmU7IH0KKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuIGlzQ2xlYXIoKTsgfQogICAgIAogICAgIHZvaWQgbWFrZVRvcCgp
CiAgICAgewpAQCAtMjUxLDYgKzI1Myw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAK
ICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKICAgICAKKyAgICB2b2lkIGR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogICAgIC8vIEEgZ3JlYXQgd2F5IHRvIHRoaW5r
IGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5k
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNp
b24gMTUzMDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHU2FmZVRv
RXhlY3V0ZS5oIgorI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtOTEsMTEgKzky
LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fdmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFM
b2coIiAgIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICBtX3N0YXRlLmJlZ2luQmFz
aWNCbG9jayhibG9jayk7Ci0gICAgICAgIGlmIChtX3ZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICBoZWFkIHZhcnM6ICIpOwotICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJs
b2NrLT52YWx1ZXNBdEhlYWQsIFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICBkYXRhTG9n
RigiXG4iKTsKLSAgICAgICAgfQorICAgICAgICBpZiAobV92ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZygiICAgICAgaGVhZCB2YXJzOiAiLCBibG9jay0+dmFsdWVzQXRIZWFkLCAiXG4iKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQoaSk7CkBAIC0xMjMsMTEgKzEyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICAgICAgbV9jaGFuZ2VkIHw9IG1fc3RhdGUuZW5kQmFzaWNCbG9jayhNZXJnZVRvU3VjY2Vz
c29ycyk7CiAgICAgICAgIAotICAgICAgICBpZiAobV92ZXJib3NlKSB7Ci0gICAgICAgICAgICBk
YXRhTG9nRigiICAgICAgdGFpbCB2YXJzOiAiKTsKLSAgICAgICAgICAgIGR1bXBPcGVyYW5kcyhi
bG9jay0+dmFsdWVzQXRUYWlsLCBXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgZGF0YUxv
Z0YoIlxuIik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1fdmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2coIiAgICAgIHRhaWwgdmFyczogIiwgYmxvY2stPnZhbHVlc0F0VGFpbCwgIlxuIik7
CiAgICAgfQogICAgIAogICAgIHZvaWQgcGVyZm9ybUZvcndhcmRDRkEoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTUzMDkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxNSArMzAsNiBAQAogCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogCi1uYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7Ci0KLXZvaWQgTm9kZVBvaW50ZXJUcmFpdHM6OmR1bXAoTm9kZSogdmFs
dWUsIFByaW50U3RyZWFtJiBvdXQpCi17Ci0gICAgb3V0LnByaW50KHZhbHVlKTsKLX0KLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCiBuYW1lc3BhY2UgV1RGIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEpTQzo6REZHOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShy
ZXZpc2lvbiAxNTMwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBjb25zdCBCbG9ja0luZGV4
IE5vQmxvY2sgPSBVSU5UX00KIAogc3RydWN0IE5vZGVQb2ludGVyVHJhaXRzIHsKICAgICBzdGF0
aWMgTm9kZSogZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gMDsgfQotICAgIHN0YXRpYyB2b2lkIGR1
bXAoTm9kZSogdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpOworICAgIHN0YXRpYyBib29sIGlzRW1w
dHlGb3JEdW1wKE5vZGUqIHZhbHVlKSB7IHJldHVybiAhdmFsdWU7IH0KIH07CiAKIC8vIFVzZSBS
ZWZDaGlsZHJlbiBpZiB0aGUgY2hpbGQgcmVmIGNvdW50cyBoYXZlbid0IGFscmVhZHkgYmVlbiBh
ZGp1c3RlZCB1c2luZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3Nl
bWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlz
YXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTUzMDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcg
QEAgVmVjdG9yPERpc2Fzc2VtYmxlcjo6RHVtcGVkT3A+IERpc2Fzc2VtYgogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIGR1bXBEaXNhc3NlbWJseShvdXQsIGRpc2Fzc2VtYmx5UHJlZml4
LCBsaW5rQnVmZmVyLCBwcmV2aW91c0xhYmVsLCBtX2xhYmVsRm9yQmxvY2tJbmRleFtibG9ja0lu
ZGV4XSwgbGFzdE5vZGUpOwogICAgICAgICBhcHBlbmQocmVzdWx0LCBvdXQsIHByZXZpb3VzT3Jp
Z2luKTsKLSAgICAgICAgbV9ncmFwaC5kdW1wQmxvY2tIZWFkZXIob3V0LCBwcmVmaXgsIGJsb2Nr
LCBHcmFwaDo6RHVtcExpdmVQaGlzT25seSk7CisgICAgICAgIG1fZ3JhcGguZHVtcEJsb2NrSGVh
ZGVyKG91dCwgcHJlZml4LCBibG9jaywgR3JhcGg6OkR1bXBMaXZlUGhpc09ubHksICZtX2R1bXBD
b250ZXh0KTsKICAgICAgICAgYXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7CiAg
ICAgICAgIE5vZGUqIGxhc3ROb2RlRm9yRGlzYXNzZW1ibHkgPSBibG9jay0+YXQoMCk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CkBAIC0xMjUs
MTEgKzEyNSwxMSBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1wZWRPcD4gRGlzYXNzZW1iCiAg
ICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1
ZmZlciwgcHJldmlvdXNMYWJlbCwgY3VycmVudExhYmVsLCBsYXN0Tm9kZUZvckRpc2Fzc2VtYmx5
KTsKICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIG91dCwgcHJldmlvdXNPcmlnaW4pOwogICAg
ICAgICAgICAgcHJldmlvdXNPcmlnaW4gPSBibG9jay0+YXQoaSktPmNvZGVPcmlnaW47Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaC5kdW1wQ29kZU9yaWdpbihvdXQsIHByZWZpeCwgbGFzdE5vZGUs
IGJsb2NrLT5hdChpKSkpIHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmR1bXBDb2RlT3JpZ2lu
KG91dCwgcHJlZml4LCBsYXN0Tm9kZSwgYmxvY2stPmF0KGkpLCAmbV9kdW1wQ29udGV4dCkpIHsK
ICAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBvdXQsIHByZXZpb3VzT3JpZ2luKTsKICAg
ICAgICAgICAgICAgICBwcmV2aW91c09yaWdpbiA9IGJsb2NrLT5hdChpKS0+Y29kZU9yaWdpbjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZ3JhcGguZHVtcChvdXQsIHByZWZpeCwgYmxv
Y2stPmF0KGkpKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcChvdXQsIHByZWZpeCwgYmxvY2st
PmF0KGkpLCAmbV9kdW1wQ29udGV4dCk7CiAgICAgICAgICAgICBsYXN0Tm9kZSA9IGJsb2NrLT5h
dChpKTsKICAgICAgICAgICAgIGxhc3ROb2RlRm9yRGlzYXNzZW1ibHkgPSBibG9jay0+YXQoaSk7
CiAgICAgICAgIH0KQEAgLTE0MCw2ICsxNDAsOCBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1w
ZWRPcD4gRGlzYXNzZW1iCiAgICAgYXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7
CiAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIs
IHByZXZpb3VzTGFiZWwsIG1fZW5kT2ZDb2RlLCAwKTsKICAgICBhcHBlbmQocmVzdWx0LCBvdXQs
IHByZXZpb3VzT3JpZ2luKTsKKyAgICBtX2R1bXBDb250ZXh0LmR1bXAob3V0LCBwcmVmaXgpOwor
ICAgIGFwcGVuZChyZXN1bHQsIG91dCwgcHJldmlvdXNPcmlnaW4pOwogICAgIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDE1MzA5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkR1bXBD
b250ZXh0LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTg4LDYgKzg5LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGR1bXBEaXNhc3NlbWJseShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHBy
ZWZpeCwgTGlua0J1ZmZlciYsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCYgcHJldmlvdXNMYWJlbCwg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGN1cnJlbnRMYWJlbCwgTm9kZSogY29udGV4dCk7CiAgICAg
CiAgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgRHVtcENvbnRleHQgbV9kdW1wQ29udGV4dDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydE9mQ29kZTsKICAgICBWZWN0b3I8TWFjcm9B
c3NlbWJsZXI6OkxhYmVsPiBtX2xhYmVsRm9yQmxvY2tJbmRleDsKICAgICBIYXNoTWFwPE5vZGUq
LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+IG1fbGFiZWxGb3JOb2RlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkocmV2aXNpb24gMTUzMDkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRl
ICJERkdVc2VLaW5kLmgiCisjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtODgs
NiArODksMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6REZHOjpGbHVzaEZvcm1hdCk7CiAKK2lubGluZSBKU0M6OkRGRzo6Rmx1c2hG
b3JtYXQgaW5Db250ZXh0KEpTQzo6REZHOjpGbHVzaEZvcm1hdCBmb3JtYXQsIEpTQzo6RHVtcENv
bnRleHQqKQoreworICAgIHJldHVybiBmb3JtYXQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgog
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAko
cmV2aXNpb24gMTUzMDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2lu
Y2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTUzMDkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAi
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgpAQCAtNzcsNyArNzgsNyBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UoUHJp
bnRTdHJlYW0mCiAgICAgICAgIG91dC5wcmludCgiICIpOwogfQogCi1ib29sIEdyYXBoOjpkdW1w
Q29kZU9yaWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHBy
ZXZpb3VzTm9kZSwgTm9kZSogY3VycmVudE5vZGUpCitib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdp
bihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9k
ZSwgTm9kZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0KiBjb250ZXh0KQogewogICAgIGlmICgh
cHJldmlvdXNOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDIsNyArMTAzLDcgQEAg
Ym9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IHByZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpOyBpLS0gPiBpbmRleE9mRGl2ZXJnZW5j
ZTspIHsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCk7CiAgICAgICAgIHByaW50V2hpdGVTcGFj
ZShvdXQsIGkgKiAyKTsKLSAgICAgICAgb3V0LnByaW50KCI8LS0gIiwgKnByZXZpb3VzSW5saW5l
U3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KCI8LS0g
IiwgaW5Db250ZXh0KCpwcmV2aW91c0lubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSwgY29u
dGV4dCksICJcbiIpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgCkBA
IC0xMTAsNyArMTExLDcgQEAgYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0m
IAogICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4T2ZEaXZlcmdlbmNlOyBpIDwgY3VycmVudElu
bGluZVN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgpOwogICAg
ICAgICBwcmludFdoaXRlU3BhY2Uob3V0LCBpICogMik7Ci0gICAgICAgIG91dC5wcmludCgiLS0+
ICIsICpjdXJyZW50SW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLCAiXG4iKTsKKyAgICAg
ICAgb3V0LnByaW50KCItLT4gIiwgaW5Db250ZXh0KCpjdXJyZW50SW5saW5lU3RhY2tbaV0uaW5s
aW5lQ2FsbEZyYW1lLCBjb250ZXh0KSwgIlxuIik7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwogICAgIH0KICAgICAKQEAgLTEyNyw3ICsxMjgsNyBAQCB2b2lkIEdyYXBoOjpwcmludE5vZGVX
aGl0ZVNwYWNlKFByaW50U3RyCiAgICAgcHJpbnRXaGl0ZVNwYWNlKG91dCwgYW1vdW50T2ZOb2Rl
V2hpdGVTcGFjZShub2RlKSk7CiB9CiAKLXZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBub2RlKQordm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIG5vZGUsIER1bXBDb250ZXh0
KiBjb250ZXh0KQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKIApAQCAtMTkwLDEx
ICsxOTEsMTEgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAg
IGlmIChub2RlLT5oYXNJZGVudGlmaWVyKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgImlk
Iiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCAieyIsIGlkZW50aWZpZXJzKClbbm9kZS0+aWRl
bnRpZmllck51bWJlcigpXSwgIn0iKTsKICAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlU2V0KCkp
Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+c3RydWN0dXJlU2V0KCkpOworICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChub2RlLT5zdHJ1Y3R1cmVTZXQoKSwgY29udGV4
dCkpOwogICAgIGlmIChub2RlLT5oYXNTdHJ1Y3R1cmUoKSkKLSAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAqbm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29u
dGV4dCgqbm9kZS0+c3RydWN0dXJlKCksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzU3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSwgIiAtPiAiLCAqbm9k
ZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIGluQ29udGV4dCgqbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5w
cmV2aW91c1N0cnVjdHVyZSwgY29udGV4dCksICIgLT4gIiwgaW5Db250ZXh0KCpub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgY29udGV4dCkpOwogICAgIGlmIChu
b2RlLT5oYXNGdW5jdGlvbigpKSB7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImZ1bmN0aW9u
KCIsIFJhd1BvaW50ZXIobm9kZS0+ZnVuY3Rpb24oKSksICIsICIpOwogICAgICAgICBpZiAobm9k
ZS0+ZnVuY3Rpb24oKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpIHsKQEAgLTIzMiw3
ICsyMzMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAg
ICAgIG91dC5wcmludChub2RlLT5zdGFydENvbnN0YW50KCksICI6WyIpOwogICAgICAgICBDb21t
YVByaW50ZXIgYW5vdGhlckNvbW1hOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bm9kZS0+bnVtQ29uc3RhbnRzKCk7ICsraSkKLSAgICAgICAgICAgIG91dC5wcmludChhbm90aGVy
Q29tbWEsIG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLT5zdGFydENvbnN0YW50KCkp
W2ldKTsKKyAgICAgICAgICAgIG91dC5wcmludChhbm90aGVyQ29tbWEsIGluQ29udGV4dChtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRCdWZmZXIobm9kZS0+c3RhcnRDb25zdGFudCgpKVtpXSwgY29udGV4
dCkpOwogICAgICAgICBvdXQucHJpbnQoIl0iKTsKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc0lu
ZGV4aW5nVHlwZSgpKQpAQCAtMjQ0LDEwICsyNDUsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChvcCA9PSBKU0NvbnN0YW50KSB7CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgIiQiLCBub2RlLT5jb25zdGFudE51bWJlcigpKTsKICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwotICAgICAgICBvdXQucHJp
bnQoIiA9ICIsIHZhbHVlKTsKKyAgICAgICAgb3V0LnByaW50KCIgPSAiLCBpbkNvbnRleHQodmFs
dWUsIGNvbnRleHQpKTsKICAgICB9CiAgICAgaWYgKG9wID09IFdlYWtKU0NvbnN0YW50KQotICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+d2Vha0NvbnN0YW50KCkpLCAi
IChzdHJ1Y3R1cmU6ICIsICpub2RlLT53ZWFrQ29uc3RhbnQoKS0+c3RydWN0dXJlKCksICIpIik7
CisgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT53ZWFrQ29uc3RhbnQo
KSksICIgKCIsIGluQ29udGV4dCgqbm9kZS0+d2Vha0NvbnN0YW50KCktPnN0cnVjdHVyZSgpLCBj
b250ZXh0KSwgIikiKTsKICAgICBpZiAobm9kZS0+aXNCcmFuY2goKSB8fCBub2RlLT5pc0p1bXAo
KSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDoiLCAqbm9kZS0+dGFrZW5CbG9jaygpKTsK
ICAgICBpZiAobm9kZS0+aXNCcmFuY2goKSkKQEAgLTI1Niw3ICsyNTcsNyBAQCB2b2lkIEdyYXBo
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEg
PSBub2RlLT5zd2l0Y2hEYXRhKCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+a2lu
ZCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+Y2FzZXNbaV0udmFsdWUs
ICI6IiwgKmRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CisgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsIGluQ29udGV4dChkYXRhLT5jYXNlc1tpXS52YWx1ZSwgY29udGV4dCksICI6IiwgKmRhdGEt
PmNhc2VzW2ldLnRhcmdldCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImRlZmF1bHQ6Iiwg
KmRhdGEtPmZhbGxUaHJvdWdoKTsKICAgICB9CiAgICAgQ2xvYmJlclNldCByZWFkczsKQEAgLTI4
MCw5ICsyODEsOSBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAg
ICAgb3V0LnByaW50KCJcbiIpOwogfQogCi12b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBCYXNpY0Jsb2NrKiBibG9jaywgUGhp
Tm9kZUR1bXBNb2RlIHBoaU5vZGVEdW1wTW9kZSkKK3ZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRl
cihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJhc2ljQmxvY2sqIGJsb2Nr
LCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlLCBEdW1wQ29udGV4dCogY29udGV4dCkK
IHsKLSAgICBvdXQucHJpbnQocHJlZml4LCAiQmxvY2sgIiwgKmJsb2NrLCAiICgiLCBibG9jay0+
YXQoMCktPmNvZGVPcmlnaW4sICIpOiAiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tp
cHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7
CisgICAgb3V0LnByaW50KHByZWZpeCwgIkJsb2NrICIsICpibG9jaywgIiAoIiwgaW5Db250ZXh0
KGJsb2NrLT5hdCgwKS0+Y29kZU9yaWdpbiwgY29udGV4dCksICIpOiAiLCBibG9jay0+aXNSZWFj
aGFibGUgPyAiIiA6ICIoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFy
Z2V0KSIgOiAiIiwgIlxuIik7CiAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUHJlZGVjZXNzb3Jz
OiIpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXpl
KCk7ICsraSkKICAgICAgICAgb3V0LnByaW50KCIgIiwgKmJsb2NrLT5wcmVkZWNlc3NvcnNbaV0p
OwpAQCAtMzQ1LDI5ICszNDYsMzMgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50
U3RyZWFtJgogICAgIH0KIH0KIAotdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQor
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkK
IHsKKyAgICBEdW1wQ29udGV4dCBteUNvbnRleHQ7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICBjb250ZXh0ID0gJm15Q29udGV4dDsKKyAgICAKKyAgICBkYXRhTG9nKCJcbiIpOwogICAgIGRh
dGFMb2coIkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVENv
ZGU6OkRGR0pJVCksICI6XG4iKTsKICAgICBkYXRhTG9nKCIgIEZpeHBvaW50IHN0YXRlOiAiLCBt
X2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIsIG1fZm9ybSwgIjsgVW5pZmljYXRpb24gc3RhdGU6
ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIjsgUmVmIGNvdW50IHN0YXRlOiAiLCBtX3JlZkNvdW50
U3RhdGUsICJcbiIpOworICAgIGRhdGFMb2coIlxuIik7CiAgICAgCiAgICAgTm9kZSogbGFzdE5v
ZGUgPSAwOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Ip
IHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKICAgICAg
ICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkdW1wQmxvY2tI
ZWFkZXIob3V0LCAiIiwgYmxvY2ssIER1bXBBbGxQaGlzKTsKKyAgICAgICAgZHVtcEJsb2NrSGVh
ZGVyKG91dCwgIiIsIGJsb2NrLCBEdW1wQWxsUGhpcywgY29udGV4dCk7CiAgICAgICAgIHN3aXRj
aCAobV9mb3JtKSB7CiAgICAgICAgIGNhc2UgTG9hZFN0b3JlOgogICAgICAgICBjYXNlIFRocmVh
ZGVkQ1BTOiB7CiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgdmFycyBiZWZvcmU6ICIpOwogICAg
ICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAgICAgICAgIG91dC5w
cmludChibG9jay0+dmFsdWVzQXRIZWFkKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5D
b250ZXh0KGJsb2NrLT52YWx1ZXNBdEhlYWQsIGNvbnRleHQpKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKICAgICAgICAgICAgIG91dC5w
cmludCgiXG4iKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiICB2YXIgbGlua3M6ICIpOwotICAg
ICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIG91dCk7Ci0gICAg
ICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgdmFyIGxp
bmtzOiAiLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCAiXG4iKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTM3NiwxMiArMzgxLDEyIEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgICAgIG91dC5wcmludCgiICBGbHVz
aCBmb3JtYXQ6ICIsIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkLCAiXG4iKTsKICAgICAg
ICAgICAgIG91dC5wcmludCgiICBBdmFpbGFiaWxpdHk6ICIsIGJsb2NrLT5zc2EtPmF2YWlsYWJp
bGl0eUF0SGVhZCwgIlxuIik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgTGl2ZTogIiwgbm9k
ZUxpc3REdW1wKGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpLCAiXG4iKTsKLSAgICAgICAgICAgIG91
dC5wcmludCgiICBWYWx1ZXM6ICIsIG5vZGVNYXBEdW1wKGJsb2NrLT5zc2EtPnZhbHVlc0F0SGVh
ZCksICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIFZhbHVlczogIiwgbm9kZU1hcER1
bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLCBjb250ZXh0KSwgIlxuIik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfSB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBkdW1wQ29kZU9yaWdpbihvdXQsICIiLCBs
YXN0Tm9kZSwgYmxvY2stPmF0KGkpKTsKLSAgICAgICAgICAgIGR1bXAob3V0LCAiIiwgYmxvY2st
PmF0KGkpKTsKKyAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3ROb2RlLCBi
bG9jay0+YXQoaSksIGNvbnRleHQpOworICAgICAgICAgICAgZHVtcChvdXQsICIiLCBibG9jay0+
YXQoaSksIGNvbnRleHQpOwogICAgICAgICAgICAgbGFzdE5vZGUgPSBibG9jay0+YXQoaSk7CiAg
ICAgICAgIH0KICAgICAgICAgc3dpdGNoIChtX2Zvcm0pIHsKQEAgLTM4OSwxMyArMzk0LDExIEBA
IHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgY2FzZSBUaHJlYWRl
ZENQUzogewogICAgICAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYWZ0ZXI6ICIpOwogICAgICAg
ICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAgICAgICAgIG91dC5wcmlu
dChibG9jay0+dmFsdWVzQXRUYWlsKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5Db250
ZXh0KGJsb2NrLT52YWx1ZXNBdFRhaWwsIGNvbnRleHQpKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKICAgICAgICAgICAgIG91dC5wcmlu
dCgiXG4iKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiICB2YXIgbGlua3M6ICIpOwotICAgICAg
ICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG91dCk7Ci0gICAgICAg
ICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgdmFyIGxpbmtz
OiAiLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLCAiXG4iKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQwNCw5ICs0MDcsMTUgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICAgICAgb3V0LnByaW50KCIgIEZsdXNoIGZv
cm1hdDogIiwgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdFRhaWwsICJcbiIpOwogICAgICAgICAg
ICAgb3V0LnByaW50KCIgIEF2YWlsYWJpbGl0eTogIiwgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRUYWlsLCAiXG4iKTsKICAgICAgICAgICAgIG91dC5wcmludCgiICBMaXZlOiAiLCBub2RlTGlz
dER1bXAoYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCksICJcbiIpOwotICAgICAgICAgICAgb3V0LnBy
aW50KCIgIFZhbHVlczogIiwgbm9kZU1hcER1bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsKSwg
IlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgVmFsdWVzOiAiLCBub2RlTWFwRHVtcChi
bG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGNvbnRleHQpLCAiXG4iKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9IH0KKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFteUNvbnRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgIG15Q29udGV4dC5kdW1wKFdU
Rjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTMwOTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1
NywxNyArMTU3LDE3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBDb2RlQmxvY2sgaXMgb3B0
aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBkdW1wZWQg
KGUuZy4gSWRlbnRpZmllciBuYW1lcykuCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiA9IFdU
Rjo6ZGF0YUZpbGUoKSk7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZp
bGUoKSwgRHVtcENvbnRleHQqID0gMCk7CiAgICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBEdW1w
TGl2ZVBoaXNPbmx5LCBEdW1wQWxsUGhpcyB9OwotICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVyKFBy
aW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBCYXNpY0Jsb2NrKiwgUGhpTm9kZUR1bXBN
b2RlKTsKKyAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIq
IHByZWZpeCwgQmFzaWNCbG9jayosIFBoaU5vZGVEdW1wTW9kZSwgRHVtcENvbnRleHQqIGNvbnRl
eHQpOwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIEVkZ2UpOwotICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSopOworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSosIER1bXBDb250ZXh0KiA9IDAp
OwogICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVTcGFjZShOb2RlKik7CiAgICAgc3Rh
dGljIHZvaWQgcHJpbnROb2RlV2hpdGVTcGFjZShQcmludFN0cmVhbSYsIE5vZGUqKTsKIAogICAg
IC8vIER1bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBmcm9t
IHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJucyB0
cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJp
bnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9kZSog
Y3VycmVudE5vZGUpOworICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25z
dCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9kZSogY3VycmVudE5vZGUsIER1
bXBDb250ZXh0KiBjb250ZXh0KTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRT
cGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAxNTMwOTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDExICsxMTEsMTEgQEAgVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKGNvbnN0
IAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgTGF6eUpTVmFs
dWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgTGF6eUpTVmFsdWU6OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKICAgICBjYXNlIEtub3duVmFsdWU6Ci0gICAgICAgIHZh
bHVlKCkuZHVtcChvdXQpOworICAgICAgICB2YWx1ZSgpLmR1bXBJbkNvbnRleHQob3V0LCBjb250
ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgog
ICAgICAgICBvdXQucHJpbnQoIkxhenk6U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCIpOwpAQCAtMTI5
LDYgKzEyOSwxMSBAQCB2b2lkIExhenlKU1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBMYXp5SlNWYWx1ZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCAw
KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5o
CShyZXZpc2lvbiAxNTMwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlK
U1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgCiBwcml2
YXRlOgogICAgIHVuaW9uIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxNTMwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQyOCw5ICsxNDI4LDE5IEBAIENTdHJpbmcgbm9kZUxpc3REdW1w
KGNvbnN0IFQmIG5vZGVMaXN0KQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotQ1N0cmluZyBu
b2RlTWFwRHVtcChjb25zdCBUJiBub2RlTWFwKQorQ1N0cmluZyBub2RlTWFwRHVtcChjb25zdCBU
JiBub2RlTWFwLCBEdW1wQ29udGV4dCogY29udGV4dCA9IDApCiB7Ci0gICAgcmV0dXJuIHNvcnRl
ZE1hcER1bXAobm9kZU1hcCwgbm9kZUNvbXBhcmF0b3IpOworICAgIFZlY3Rvcjx0eXBlbmFtZSBU
OjpLZXlUeXBlPiBrZXlzOworICAgIGZvciAoCisgICAgICAgIHR5cGVuYW1lIFQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBub2RlTWFwLmJlZ2luKCk7CisgICAgICAgIGl0ZXIgIT0gbm9kZU1hcC5l
bmQoKTsgKytpdGVyKQorICAgICAgICBrZXlzLmFwcGVuZChpdGVyLT5rZXkpOworICAgIHN0ZDo6
c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCksIG5vZGVDb21wYXJhdG9yKTsKKyAgICBTdHJp
bmdQcmludFN0cmVhbSBvdXQ7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvcih1bnNp
Z25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG91dC5wcmludChjb21t
YSwga2V5c1tpXSwgIj0+IiwgaW5Db250ZXh0KG5vZGVNYXAuZ2V0KGtleXNbaV0pLCBjb250ZXh0
KSk7CisgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpAQCAtMTQ0MCw3ICsxNDUwLDExIEBAIG5hbWVzcGFjZSBXVEYgewogdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlN3aXRjaEtpbmQpOwogdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6Ok5vZGUqKTsKIAoraW5saW5lIEpTQzo6
REZHOjpOb2RlKiBpbkNvbnRleHQoSlNDOjpERkc6Ok5vZGUqIG5vZGUsIEpTQzo6RHVtcENvbnRl
eHQqKSB7IHJldHVybiBub2RlOyB9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCit1c2luZyBXVEY6
OmluQ29udGV4dDsKKwogI2VuZGlmCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAx
NTMwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCB2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgIGRhdGFMb2dGKCIgLT4gJXAgIiwgY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwogICAgIH0KICAgICBk
YXRhTG9nRigiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIG1faml0LmRlYnVnT2Zmc2V0KCkpOwot
ICAgIGR1bXBPcGVyYW5kcyhvcGVyYW5kcywgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICBkYXRhTG9n
KG9wZXJhbmRzKTsKICNlbmRpZgogICAgIAogICAgIGlmIChPcHRpb25zOjpwcmludEVhY2hPU1JF
eGl0KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAxNTMwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
ICAgIGRhdGFMb2dGKCIgLT4gJXAgIiwgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1
dGFibGUuZ2V0KCkpOwogICAgIH0KICAgICBkYXRhTG9nRigiKSAgIik7Ci0gICAgZHVtcE9wZXJh
bmRzKG9wZXJhbmRzLCBXVEY6OmRhdGFGaWxlKCkpOworICAgIGRhdGFMb2cob3BlcmFuZHMpOwog
I2VuZGlmCiAKICAgICBpZiAoT3B0aW9uczo6cHJpbnRFYWNoT1NSRXhpdCgpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaAkocmV2aXNpb24gMTUzMDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKIAogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCisj
aW5jbHVkZSAiRHVtcENvbnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMzA3LDcgKzMwOCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaXNUb3AoKSkgewogICAgICAgICAgICAgb3V0LnByaW50KCJU
T1AiKTsKQEAgLTMxNiwxMCArMzE3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG91
dC5wcmludCgiWyIpOwogICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICBvdXQu
cHJpbnQoKm1fc3RydWN0dXJlKTsKKyAgICAgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoKm1f
c3RydWN0dXJlLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgiXSIpOwogICAgIH0KIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZHVt
cEluQ29udGV4dChvdXQsIDApOworICAgIH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgU3RydWN0
dXJlKiB0b3BWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4oMSk7
IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5j
cHAJKHJldmlzaW9uIDE1MzA5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhp
dFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLXZvaWQgRXhpdFZhbHVlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit2b2lkIEV4aXRWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGtpbmQoKSkg
ewogICAgIGNhc2UgSW52YWxpZEV4aXRWYWx1ZToKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBFeGl0
VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgICAgICBvdXQucHJpbnQoIkFyZ3Vt
ZW50KCIsIGV4aXRBcmd1bWVudCgpLCAiKSIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBF
eGl0VmFsdWVDb25zdGFudDoKLSAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCgiLCBjb25zdGFu
dCgpLCAiKSIpOworICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50KCIsIGluQ29udGV4dChjb25z
dGFudCgpLCBjb250ZXh0KSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRXhpdFZh
bHVlSW5KU1N0YWNrOgogICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFjayIpOwpAQCAtNjEsNiAr
NjEsMTEgQEAgdm9pZCBFeGl0VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgRXhpdFZhbHVlOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIDApOworfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkocmV2aXNpb24g
MTUzMDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgRXhp
dFZhbHVlS2luZCBtX2tpbmQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTUzMDkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJGVExWYWx1ZVNv
dXJjZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGlu
ZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5o
PgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNw
cAkocmV2aXNpb24gMTUzMDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1
ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDExIEBAIHZvaWQgVmFsdWVT
b3VyY2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCit2b2lkIFZhbHVlU291cmNlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KikgY29uc3QKK3sKKyAgICBkdW1wKG91dCk7Cit9CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTUz
MDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB1aW50cHRyX3Qg
bV92YWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EdW1wQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
dW1wQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworRHVtcENvbnRleHQ6OkR1bXBDb250ZXh0KCkgeyB9CitEdW1wQ29udGV4dDo6
fkR1bXBDb250ZXh0KCkgeyB9CisKK2Jvb2wgRHVtcENvbnRleHQ6OmlzRW1wdHkoKSBjb25zdAor
eworICAgIHJldHVybiBzdHJ1Y3R1cmVzLmlzRW1wdHkoKTsKK30KKwordm9pZCBEdW1wQ29udGV4
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgpIGNvbnN0Cit7Cisg
ICAgc3RydWN0dXJlcy5kdW1wKG91dCwgcHJlZml4KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRHVtcENvbnRleHQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0R1bXBDb250ZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRHVt
cENvbnRleHRfaAorI2RlZmluZSBEdW1wQ29udGV4dF9oCisKKyNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nSGFz
aER1bXBDb250ZXh0Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgRHVtcENvbnRleHQg
eworICAgIER1bXBDb250ZXh0KCk7CisgICAgfkR1bXBDb250ZXh0KCk7CisgICAgCisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29u
c3QgY2hhciogcHJlZml4ID0gIiIpIGNvbnN0OworICAgIAorICAgIFN0cmluZ0hhc2hEdW1wQ29u
dGV4dDxTdHJ1Y3R1cmU+IHN0cnVjdHVyZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIER1bXBDb250ZXh0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxNTMwOTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYg
KzE4NywxMSBAQCB2b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjCiAKIHZv
aWQgSlNWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogeworICAgIGR1bXBJbkNv
bnRleHQob3V0LCAwKTsKK30KKwordm9pZCBKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorewogICAgIGlmICghKnRoaXMp
CiAgICAgICAgIG91dC5wcmludCgiPEpTVmFsdWUoKT4iKTsKICAgICBlbHNlIGlmIChpc0ludDMy
KCkpCkBAIC0yMTgsMTIgKzIyMywxMCBAQCB2b2lkIEpTVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKHVucmVzb2x2ZWQpIik7CiAg
ICAgICAgICAgICBvdXQucHJpbnQoIjogIiwgaW1wbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoYXND
ZWxsKCktPmluaGVyaXRzKCZTdHJ1Y3R1cmU6OnNfaW5mbykpCi0gICAgICAgICAgICBvdXQucHJp
bnQoIlN0cnVjdHVyZTogIiwgKmpzQ2FzdDxTdHJ1Y3R1cmUqPihhc0NlbGwoKSkpOworICAgICAg
ICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmU6ICIsIGluQ29udGV4dCgqanNDYXN0PFN0cnVjdHVy
ZSo+KGFzQ2VsbCgpKSwgY29udGV4dCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG91
dC5wcmludCgiQ2VsbDogIiwgUmF3UG9pbnRlcihhc0NlbGwoKSkpOwotICAgICAgICAgICAgaWYg
KGlzT2JqZWN0KCkgJiYgYXNPYmplY3QoKnRoaXMpLT5idXR0ZXJmbHkoKSkKLSAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoIi0+IiwgUmF3UG9pbnRlcihhc09iamVjdCgqdGhpcyktPmJ1dHRlcmZs
eSgpKSk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgKmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KSwgIikiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICgiLCBpbkNvbnRleHQoKmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKSwgY29udGV4dCksICIpIik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYg
KGlzVHJ1ZSgpKQogICAgICAgICBvdXQucHJpbnQoIlRydWUiKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9uIDE1MzA5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsNyBAQCBjbGFzcyBDTG9vcDsKICNlbmRpZgogCiBzdHJ1Y3QgQ2xhc3NJbmZv
Oworc3RydWN0IER1bXBDb250ZXh0Owogc3RydWN0IEluc3RydWN0aW9uOwogc3RydWN0IE1ldGhv
ZFRhYmxlOwogCkBAIC0yNjMsNiArMjY0LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgc3RydWN0
dXJlT3JVbmRlZmluZWQoKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVj
dCogc3ludGhlc2l6ZVByb3RvdHlwZShFeGVjU3RhdGUqKSBjb25zdDsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxNTMwOTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDM0LDYgKzEwMzQsMjQgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgYwogICAgIG91dC5wcmludCgiXSIpOwogfQogCit2b2lkIFN0cnVjdHVyZTo6
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29u
c3QKK3sKKyAgICBpZiAoY29udGV4dCkKKyAgICAgICAgY29udGV4dC0+c3RydWN0dXJlcy5kdW1w
QnJpZWYodGhpcywgb3V0KTsKKyAgICBlbHNlCisgICAgICAgIGR1bXAob3V0KTsKK30KKwordm9p
ZCBTdHJ1Y3R1cmU6OmR1bXBCcmllZihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBDU3RyaW5nJiBz
dHJpbmcpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIlIiwgc3RyaW5nLCAiOiIsIGNsYXNzSW5m
bygpLT5jbGFzc05hbWUpOworfQorCit2b2lkIFN0cnVjdHVyZTo6ZHVtcENvbnRleHRIZWFkZXIo
UHJpbnRTdHJlYW0mIG91dCkKK3sKKyAgICBvdXQucHJpbnQoIlN0cnVjdHVyZXM6Iik7Cit9CisK
ICNpZiBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sKIAogdm9pZCBQcm9wZXJ0eVRhYmxl
OjpjaGVja0NvbnNpc3RlbmN5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNTMwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBjbGFz
cyBQcm9wZXJ0eVRhYmxlOwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFzcyBTbG90VmlzaXRv
cjsKIGNsYXNzIEpTU3RyaW5nOworc3RydWN0IER1bXBDb250ZXh0OwogCiAvLyBUaGUgb3V0LW9m
LWxpbmUgcHJvcGVydHkgc3RvcmFnZSBjYXBhY2l0eSB0byB1c2Ugd2hlbiBmaXJzdCBhbGxvY2F0
aW5nIG91dC1vZi1saW5lCiAvLyBzdG9yYWdlLiBOb3RlIHRoYXQgYWxsIG9iamVjdHMgc3RhcnQg
b3V0IHdpdGhvdXQgaGF2aW5nIGFueSBvdXQtb2YtbGluZSBzdG9yYWdlOwpAQCAtMzQ5LDYgKzM1
MCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0
KikgY29uc3Q7CisgICAgdm9pZCBkdW1wQnJpZWYoUHJpbnRTdHJlYW0mLCBjb25zdCBDU3RyaW5n
JikgY29uc3Q7CisgICAgCisgICAgc3RhdGljIHZvaWQgZHVtcENvbnRleHRIZWFkZXIoUHJpbnRT
dHJlYW0mKTsKICAgICAKICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzMDkyKQorKysgU291cmNlL1dURi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1OCBAQAorMjAxMy0wNy0yNCAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRpZXI6IERGRyBJUiBkdW1w
cyBzaG91bGQgYmUgZWFzaWVyIHRvIHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExOTA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgZHVtcGluZyB2YWx1
ZXMgd2l0aGluIGEgY29udGV4dC4gQnkgZGVmYXVsdCwgaWYgeW91IHNheQorICAgICAgICBwcmlu
dChpbkNvbnRleHQodmFsdWUsIGNvbnRleHQpKSBpdCBjYWxscyB2YWx1ZS5kdW1wSW5Db250ZXh0
KG91dCwgY29udGV4dCkKKyAgICAgICAgaW5zdGVhZCBvZiB2YWx1ZS5kdW1wKG91dCkuCisgICAg
ICAgIAorICAgICAgICBIb2lzdGVkIHRoZSBzdXBwb3J0IGZvciBzaXgtY2hhcmFjdGVyIGhhc2hl
cyBvdXQgb2YgSlNDOjpDb2RlQmxvY2tIYXNoIGludG8KKyAgICAgICAgV1RGLCBpbiB0aGUgZm9y
bSBvZiBTaXhDaGFyYWN0ZXJIYXNoLmguCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIGhlbHBl
ciBmb3IgY3JlYXRpbmcgZHVtcCBjb250ZXh0cyB3aGVyZSB0aGUgaW5Db250ZXh0KCkgZHVtcCB3
aWxsCisgICAgICAgIGp1c3QgdXNlIGEgc2hvcnQgc3RyaW5nIGhhc2ggdG8gIm5hbWUiIHRoZSBv
YmplY3QgYmVpbmcgZHVtcGVkLCBhbmQgdGhlbgorICAgICAgICB3aWxsIHByaW50IG91dCB0aGUg
ZnVsbCBkdW1wcyBpbiBhbiBlbmRub3RlIHRvIHlvdXIgZHVtcC4KKyAgICAgICAgCisgICAgICAg
IEFkZGVkIHN1cHBvcnQgZm9yIHVzaW5nIENTdHJpbmcgYXMgYSBoYXNodGFibGUga2V5LgorCisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1By
aW50U3RyZWFtLmg6CisgICAgICAgIChXVEYpOgorICAgICAgICAoVmFsdWVJbkNvbnRleHQpOgor
ICAgICAgICAoV1RGOjpWYWx1ZUluQ29udGV4dDo6VmFsdWVJbkNvbnRleHQpOgorICAgICAgICAo
V1RGOjpWYWx1ZUluQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChXVEY6OmluQ29udGV4dCk6Cisg
ICAgICAgICogd3RmL1NpeENoYXJhY3Rlckhhc2guY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURik6
CisgICAgICAgIChXVEY6OnNpeENoYXJhY3Rlckhhc2hTdHJpbmdUb0ludGVnZXIpOgorICAgICAg
ICAoV1RGOjppbnRlZ2VyVG9TaXhDaGFyYWN0ZXJIYXNoU3RyaW5nKToKKyAgICAgICAgKiB3dGYv
U2l4Q2hhcmFjdGVySGFzaC5oOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAgICogd3Rm
L1N0cmluZ0hhc2hEdW1wQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAg
IChTdHJpbmdIYXNoRHVtcENvbnRleHQpOgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoRHVtcENv
bnRleHQ6OlN0cmluZ0hhc2hEdW1wQ29udGV4dCk6CisgICAgICAgIChXVEY6OlN0cmluZ0hhc2hE
dW1wQ29udGV4dDo6Z2V0SUQpOgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoRHVtcENvbnRleHQ6
OmR1bXBCcmllZik6CisgICAgICAgIChXVEY6OlN0cmluZ0hhc2hEdW1wQ29udGV4dDo6YnJpZWYp
OgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoRHVtcENvbnRleHQ6OmlzRW1wdHkpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdIYXNoRHVtcENvbnRleHQ6OmR1bXApOgorICAgICAgICAqIHd0Zi90ZXh0
L0NTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpDU3RyaW5nOjpoYXNoKToKKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6OkNTdHJpbmdIYXNo
OjplcXVhbCk6CisgICAgICAgICogd3RmL3RleHQvQ1N0cmluZy5oOgorICAgICAgICAoV1RGOjpD
U3RyaW5nOjpDU3RyaW5nKToKKyAgICAgICAgKENTdHJpbmcpOgorICAgICAgICAoV1RGOjpDU3Ry
aW5nOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEYpOgorICAgICAgICAo
V1RGOjpDU3RyaW5nSGFzaDo6aGFzaCk6CisgICAgICAgIChDU3RyaW5nSGFzaCk6CisKIDIwMTMt
MDctMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3VydGhU
aWVyOiBERkcgTm9kZXMgc2hvdWxkIGJlIGFibGUgdG8gYWJzdHJhY3RseSB0ZWxsIHlvdSB3aGF0
IHRoZXkgcmVhZCBhbmQgd2hhdCB0aGV5IHdyaXRlCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1MzA5MikKKysrIFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkg
QEAKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZE
RkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsgfTsKIAkJMEZFNTA1NTcxNzg3
QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5o
ICovOyB9OwogCQkwRkU1MDU3RjE3OTA4OUZFMDBCMzVGOEMgLyogTGlzdER1bXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTdFMTc5MDg5Rjkw
MEIzNUY4QyAvKiBMaXN0RHVtcC5oICovOyB9OworCQkwRkU1MDVCODE3OUY0MUJEMDBCMzVGOEMg
LyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDVCNjE3OUY0MUI5MDBCMzVGOEMgLyogU2l4Q2hhcmFjdGVySGFz
aC5jcHAgKi87IH07CisJCTBGRTUwNUI5MTc5RjQxQzMwMEIzNUY4QyAvKiBTaXhDaGFyYWN0ZXJI
YXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1
MDVCNzE3OUY0MUI5MDBCMzVGOEMgLyogU2l4Q2hhcmFjdGVySGFzaC5oICovOyB9OworCQkwRkU1
MDVCQjE3OUY2N0Y0MDBCMzVGOEMgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVCQTE3OUY2N0Y0MDBC
MzVGOEMgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYw
RjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAq
LzsgfTsKIAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsK
IAkJMTQ2OTQxOTIxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2OTQxOTAxNkVBQUY2RDAwMjRF
MTQ2IC8qIFJ1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zNTYsNiArMzU5LDkgQEAKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1
RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
ZXJ0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTUwNTdFMTc5MDg5Rjkw
MEIzNUY4QyAvKiBMaXN0RHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXN0RHVtcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDVCNjE3OUY0MUI5MDBCMzVGOEMgLyogU2l4Q2hh
cmFjdGVySGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXhDaGFyYWN0ZXJIYXNoLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1QjcxNzlGNDFCOTAwQjM1RjhDIC8q
IFNpeENoYXJhY3Rlckhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2l4Q2hhcmFjdGVySGFzaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDVCQTE3OUY2N0Y0MDBCMzVGOEMgLyog
U3RyaW5nSGFzaER1bXBDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVDM0VFNDE3MUI4MzQ3MDBGREFDOEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJ5dGVTcGluTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNGNjExRDE1
NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSQU1TaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQz
RjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUkFNU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODg0
LDYgKzg5MCw4IEBACiAJCQkJQThBNDczMDkxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCAqLywK
IAkJCQlBOEE0NzMwQTE1MUE4MjVCMDA0MTIzRkYgLyogU2ltcGxlU3RhdHMuaCAqLywKIAkJCQlB
OEE0NzMwQjE1MUE4MjVCMDA0MTIzRkYgLyogU2luZ2x5TGlua2VkTGlzdC5oICovLAorCQkJCTBG
RTUwNUI2MTc5RjQxQjkwMEIzNUY4QyAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAqLywKKwkJCQkw
RkU1MDVCNzE3OUY0MUI5MDBCMzVGOEMgLyogU2l4Q2hhcmFjdGVySGFzaC5oICovLAogCQkJCUE4
QTQ3MzBDMTUxQTgyNUIwMDQxMjNGRiAvKiBTaXplTGltaXRzLmNwcCAqLywKIAkJCQlBOEE0NzMw
RDE1MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMwRTE1MUE4MjVC
MDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwICovLApAQCAtODk0LDYgKzkwMiw3IEBACiAJCQkJ
QThBNDczMTExNTFBODI1QjAwNDEyM0ZGIC8qIFN0ZExpYkV4dHJhcy5oICovLAogCQkJCTFBNkJC
NzY4MTYyRjMwMDUwMEREMTZEQiAvKiBTdHJlYW1CdWZmZXIuaCAqLywKIAkJCQlBOEE0NzMxMzE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nRXh0cmFzLmggKi8sCisJCQkJMEZFNTA1QkExNzlGNjdG
NDAwQjM1RjhDIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oICovLAogCQkJCUE4QTQ3MzE0MTUx
QTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdIYXNoZXIuaCAqLywKIAkJCQkwRkREQkZBNTE2NjZERkEz
MDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovLAogCQkJCTBGRERCRkE2MTY2NkRG
QTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovLApAQCAtMTEzNiw2ICsxMTQ1LDcg
QEAKIAkJCQlBOEE0NzM5QjE1MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNBMTUxQTgyNUIwMDQxMjNGRiAv
KiBDU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5RDE1MUE4MjVCMDA0MTIzRkYg
LyogQ3VycmVudFRpbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNUI5MTc5RjQxQzMwMEIz
NUY4QyAvKiBTaXhDaGFyYWN0ZXJIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5RjE1
MUE4MjVCMDA0MTIzRkYgLyogRGF0YUxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTEx
NTFBODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNB
MzE1MUE4MjVCMDA0MTIzRkYgLyogRGVjaW1hbE51bWJlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MjY0LDYgKzEyNzQsNyBAQAogCQkJCUE4QTQ3NDNGMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdI
YXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyRDE1MUE4MjVCMDA0MTIzRkYgLyogU3Ry
aW5nSGFzaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0MTE1MUE4MjVCMDA0MTIzRkYg
LyogU3RyaW5nSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1QkIxNzlGNjdGNDAwQjM1
RjhDIC8qIFN0cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NDIxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ09wZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzNCODE1MUE4MjVCMDA0MTIzRkYgLyogc3RydG9kLmggaW4gSGVh
ZGVycyAqLywKQEAgLTE0NzMsNiArMTQ4NCw3IEBACiAJCQkJQThBNDc0N0IxNTFBODI1QjAwNDEy
M0ZGIC8qIFVSTFNlZ21lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzMzBGMzhGMTU3NDVC
MDUwMEFBRkE4RiAvKiBVUkxTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjZFNkMyMEMx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1
QjgxNzlGNDFCRDAwQjM1RjhDIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0NjkxNTFBODI1QjAwNDEyM0ZGIC8qIFVURjguY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0NDUxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQ4NjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkocmV2aXNpb24gMTUzMDkyKQor
KysgU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDEx
ICszMzUsMzcgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBQb2ludGVyRHVtcDxU
PiBwb2ludGVyRHVtcChjb25zdCBUKiBwdHIpIHsgcmV0dXJuIFBvaW50ZXJEdW1wPFQ+KHB0cik7
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2NsYXNzIFZhbHVlSW5Db250
ZXh0IHsKK3B1YmxpYzoKKyAgICBWYWx1ZUluQ29udGV4dChjb25zdCBUJiB2YWx1ZSwgVSogY29u
dGV4dCkKKyAgICAgICAgOiBtX3ZhbHVlKCZ2YWx1ZSkKKyAgICAgICAgLCBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorICAgIHsKKyAgICAgICAgbV92YWx1ZS0+ZHVtcEluQ29udGV4dChvdXQsIG1fY29u
dGV4dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFQqIG1fdmFsdWU7CisgICAgVSog
bV9jb250ZXh0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK1ZhbHVl
SW5Db250ZXh0PFQsIFU+IGluQ29udGV4dChjb25zdCBUJiB2YWx1ZSwgVSogY29udGV4dCkKK3sK
KyAgICByZXR1cm4gVmFsdWVJbkNvbnRleHQ8VCwgVT4odmFsdWUsIGNvbnRleHQpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpDaGFyYWN0ZXJEdW1wOwogdXNpbmcgV1RG
OjpQb2ludGVyRHVtcDsKIHVzaW5nIFdURjo6UHJpbnRTdHJlYW07Cit1c2luZyBXVEY6OmluQ29u
dGV4dDsKIHVzaW5nIFdURjo6cG9pbnRlckR1bXA7CiAKICNlbmRpZiAvLyBQcmludFN0cmVhbV9o
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaXhDaGFyYWN0ZXJIYXNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9TaXhDaGFyYWN0ZXJIYXNoLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XVEYvd3RmL1NpeENoYXJhY3Rlckhhc2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpeENoYXJhY3Rlckhhc2guaCIKKworI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworI2RlZmluZSBUQUJMRSAoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla
YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IikKKwordW5zaWduZWQgc2l4Q2hh
cmFjdGVySGFzaFN0cmluZ1RvSW50ZWdlcihjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAgdW5z
aWduZWQgaGFzaCA9IDA7CisKKyAgICBSRUxFQVNFX0FTU0VSVChzdHJsZW4oc3RyaW5nKSA9PSA2
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNjsgKytpKSB7CisgICAgICAg
IGhhc2ggKj0gNjI7CisgICAgICAgIHVuc2lnbmVkIGMgPSBzdHJpbmdbaV07CisgICAgICAgIGlm
IChjID49ICdBJyAmJiBjIDw9ICdaJykgeworICAgICAgICAgICAgaGFzaCArPSBjIC0gJ0EnOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMgPj0gJ2EnICYm
IGMgPD0gJ3onKSB7CisgICAgICAgICAgICBoYXNoICs9IGMgLSAnYScgKyAyNjsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChjID49ICcwJyAmJiBjIDw9
ICc5Jyk7CisgICAgICAgIGhhc2ggKz0gYyAtICcwJyArIDI2ICogMjsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIGhhc2g7Cit9CisKK0ZpeGVkQXJyYXk8Y2hhciwgNz4gaW50ZWdlclRvU2l4Q2hh
cmFjdGVySGFzaFN0cmluZyh1bnNpZ25lZCBoYXNoKQoreworICAgIEFTU0VSVChzdHJsZW4oVEFC
TEUpID09IDYyKTsKKyAgICAKKyAgICBGaXhlZEFycmF5PGNoYXIsIDc+IGJ1ZmZlcjsKKyAgICB1
bnNpZ25lZCBhY2N1bXVsYXRvciA9IGhhc2g7CisgICAgZm9yICh1bnNpZ25lZCBpID0gNjsgaS0t
OykgeworICAgICAgICBidWZmZXJbaV0gPSBUQUJMRVthY2N1bXVsYXRvciAlIDYyXTsKKyAgICAg
ICAgYWNjdW11bGF0b3IgLz0gNjI7CisgICAgfQorICAgIGJ1ZmZlcls2XSA9IDA7CisgICAgcmV0
dXJuIGJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1NpeENoYXJhY3Rlckhhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TaXhD
aGFyYWN0ZXJIYXNoLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9TaXhDaGFyYWN0
ZXJIYXNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNpeENoYXJhY3Rlckhhc2hf
aAorI2RlZmluZSBTaXhDaGFyYWN0ZXJIYXNoX2gKKworI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUYWtlcyBhIHNpeC1jaGFyYWN0ZXIgc3RyaW5n
IHRoYXQgZW5jb2RlcyBhIDMyLWJpdCBpbnRlZ2VyLCBhbmQgcmV0dXJucyB0aGF0CisvLyBpbnRl
Z2VyLiBSRUxFQVNFX0FTU0VSVCdzIHRoYXQgdGhlIHN0cmluZyByZXByZXNlbnRzIGEgdmFsaWQg
c2l4LWNoYXJhY3RlcgorLy8gaGFzaC4KK3Vuc2lnbmVkIHNpeENoYXJhY3Rlckhhc2hTdHJpbmdU
b0ludGVnZXIoY29uc3QgY2hhciopOworCisvLyBUYWtlcyBhIDMyLWJpdCBpbnRlZ2VyIGFuZCBj
b25zdHJ1Y3RzIGEgc2l4LWNoYXJhY3RlciBzdHJpbmcgdGhhdCBjb250YWlucworLy8gdGhlIGNo
YXJhY3RlciBoYXNoLgorRml4ZWRBcnJheTxjaGFyLCA3PiBpbnRlZ2VyVG9TaXhDaGFyYWN0ZXJI
YXNoU3RyaW5nKHVuc2lnbmVkKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
c2l4Q2hhcmFjdGVySGFzaFN0cmluZ1RvSW50ZWdlcjsKK3VzaW5nIFdURjo6aW50ZWdlclRvU2l4
Q2hhcmFjdGVySGFzaFN0cmluZzsKKworI2VuZGlmIC8vIFNpeENoYXJhY3Rlckhhc2hfaAorCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdIYXNoRHVtcENvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdIYXNoRHVtcENvbnRleHQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XVEYvd3RmL1N0cmluZ0hhc2hEdW1wQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgU3RyaW5nSGFzaER1bXBDb250ZXh0X2gKKyNkZWZpbmUgU3RyaW5nSGFz
aER1bXBDb250ZXh0X2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1NpeENoYXJhY3Rlckhhc2guaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5j
bHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFN0
cmluZ0hhc2hEdW1wQ29udGV4dCB7CitwdWJsaWM6CisgICAgU3RyaW5nSGFzaER1bXBDb250ZXh0
KCkgeyB9CisgICAgCisgICAgQ1N0cmluZyBnZXRJRChjb25zdCBUKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHR5cGVuYW1lIEhhc2hNYXA8Y29uc3QgVCosIENTdHJpbmc+OjppdGVyYXRvciBpdGVy
ID0gbV9mb3J3YXJkTWFwLmZpbmQodmFsdWUpOworICAgICAgICBpZiAoaXRlciAhPSBtX2Zvcndh
cmRNYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisgICAgICAgIAor
ICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgIG91dC5wcmludCgqdmFsdWUp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG91dC50b0NTdHJpbmcoKS5oYXNo
KCk7IDsgaGFzaFZhbHVlKyspIHsKKyAgICAgICAgICAgIENTdHJpbmcgZnVsbEhhc2ggPSBpbnRl
Z2VyVG9TaXhDaGFyYWN0ZXJIYXNoU3RyaW5nKGhhc2hWYWx1ZSkuZGF0YSgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxlbmd0aCA9IDI7IGxlbmd0aCA8IDY7ICsr
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgQ1N0cmluZyBzaG9ydEhhc2ggPSBDU3RyaW5nKGZ1
bGxIYXNoLmRhdGEoKSwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fYmFja3dhcmRN
YXAuY29udGFpbnMoc2hvcnRIYXNoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ZvcndhcmRN
YXAuYWRkKHZhbHVlLCBzaG9ydEhhc2gpOworICAgICAgICAgICAgICAgICAgICBtX2JhY2t3YXJk
TWFwLmFkZChzaG9ydEhhc2gsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNo
b3J0SGFzaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBkdW1wQnJpZWYoY29uc3QgVCogdmFsdWUsIFByaW50U3RyZWFt
JiBvdXQpCisgICAgeworICAgICAgICB2YWx1ZS0+ZHVtcEJyaWVmKG91dCwgZ2V0SUQodmFsdWUp
KTsKKyAgICB9CisgICAgCisgICAgQ1N0cmluZyBicmllZihjb25zdCBUKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgZHVtcEJyaWVmKHZhbHVl
LCBvdXQpOworICAgICAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2ZvcndhcmRNYXAuaXNFbXB0eSgpOyB9
CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZp
eCA9ICIiKSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCk7CisgICAgICAg
IFQ6OmR1bXBDb250ZXh0SGVhZGVyKG91dCk7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAg
ICAgICAgCisgICAgICAgIFZlY3RvcjxDU3RyaW5nPiBrZXlzOworICAgICAgICB1bnNpZ25lZCBt
YXhLZXlTaXplID0gMDsKKyAgICAgICAgZm9yICgKKyAgICAgICAgICAgIHR5cGVuYW1lIEhhc2hN
YXA8Q1N0cmluZywgY29uc3QgVCo+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9iYWNrd2FyZE1h
cC5iZWdpbigpOworICAgICAgICAgICAgaXRlciAhPSBtX2JhY2t3YXJkTWFwLmVuZCgpOworICAg
ICAgICAgICAgKytpdGVyKSB7CisgICAgICAgICAgICBrZXlzLmFwcGVuZChpdGVyLT5rZXkpOwor
ICAgICAgICAgICAgbWF4S2V5U2l6ZSA9IHN0ZDo6bWF4KG1heEtleVNpemUsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihicmllZihpdGVyLT52YWx1ZSwgaXRlci0+a2V5KS5sZW5ndGgoKSkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVu
ZCgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBUKiB2YWx1ZSA9IG1fYmFja3dhcmRNYXAu
Z2V0KGtleXNbaV0pOworICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgICAiKTsKKyAg
ICAgICAgICAgIENTdHJpbmcgYnJpZWZTdHJpbmcgPSBicmllZih2YWx1ZSwga2V5c1tpXSk7Cisg
ICAgICAgICAgICBvdXQucHJpbnQoYnJpZWZTdHJpbmcpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBuID0gYnJpZWZTdHJpbmcubGVuZ3RoKCk7IG4gPCBtYXhLZXlTaXplOyArK24pCisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCIgIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiA9ICIs
ICp2YWx1ZSwgIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCitwdWJsaWM6CisgICAgc3Rh
dGljIENTdHJpbmcgYnJpZWYoY29uc3QgVCogdmFsdWUsIGNvbnN0IENTdHJpbmcmIHN0cmluZykK
KyAgICB7CisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgdmFsdWUtPmR1
bXBCcmllZihvdXQsIHN0cmluZyk7CisgICAgICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7Cisg
ICAgfQorICAgIAorICAgIEhhc2hNYXA8Y29uc3QgVCosIENTdHJpbmc+IG1fZm9yd2FyZE1hcDsK
KyAgICBIYXNoTWFwPENTdHJpbmcsIGNvbnN0IFQqPiBtX2JhY2t3YXJkTWFwOworICAgIGNvbnN0
IGNoYXIqIG1faGVhZGluZzsKKyAgICBjb25zdCBjaGFyKiBtX3ByZWZpeDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0cmluZ0hhc2hEdW1wQ29udGV4dDsKKworI2Vu
ZGlmIC8vIFN0cmluZ0hhc2hEdW1wQ29udGV4dF9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3Rl
eHQvQ1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmNwcAkocmV2aXNpb24gMTUzMDkyKQorKysgU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNTdHJpbmcuaCIKIAorI2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoZXIuaD4KKwog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdURiB7CkBAIC0xMjIsNCArMTI0LDMy
IEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU3RyaW5nJiBhLCBjb25zdCAKICAgICByZXR1cm4g
IXN0cmNtcChhLmRhdGEoKSwgYik7CiB9CiAKK3Vuc2lnbmVkIENTdHJpbmc6Omhhc2goKSBjb25z
dAoreworICAgIGlmIChpc051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgU3RyaW5nSGFz
aGVyIGhhc2hlcjsKKyAgICBmb3IgKGNvbnN0IGNoYXIqIHB0ciA9IGRhdGEoKTsgKnB0cjsgKytw
dHIpCisgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXIoKnB0cik7CisgICAgcmV0dXJuIGhhc2hl
ci5oYXNoKCk7Cit9CisKK2Jvb2wgb3BlcmF0b3I8KGNvbnN0IENTdHJpbmcmIGEsIGNvbnN0IENT
dHJpbmcmIGIpCit7CisgICAgaWYgKGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAhYi5pc051
bGwoKTsKKyAgICBpZiAoYi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBzdHJjbXAoYS5kYXRhKCksIGIuZGF0YSgpKSA8IDA7Cit9CisKK2Jvb2wgQ1N0cmluZ0hh
c2g6OmVxdWFsKGNvbnN0IENTdHJpbmcmIGEsIGNvbnN0IENTdHJpbmcmIGIpCit7CisgICAgaWYg
KGEuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGIuaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKTsKKyAgICBpZiAoYi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGEgPT0gYjsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaAkocmV2aXNpb24gMTUzMDkyKQorKysg
U291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDggQEAKICNpZm5kZWYgQ1N0cmluZ19oCiAjZGVmaW5lIENTdHJpbmdfaAogCisjaW5jbHVkZSA8
d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC02MCw2ICs2Miw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgQ1N0cmluZyhjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCk7CiAgICAgQ1N0
cmluZyhDU3RyaW5nQnVmZmVyKiBidWZmZXIpIDogbV9idWZmZXIoYnVmZmVyKSB7IH0KICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIENTdHJpbmcgbmV3VW5pbml0aWFsaXplZChzaXplX3Qg
bGVuZ3RoLCBjaGFyKiYgY2hhcmFjdGVyQnVmZmVyKTsKKyAgICBDU3RyaW5nKEhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpIDogbV9idWZmZXIoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KIAog
ICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdAogICAgIHsKQEAgLTc1LDYgKzc4LDEwIEBAIHB1
YmxpYzoKICAgICBib29sIGlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0OwogCiAg
ICAgQ1N0cmluZ0J1ZmZlciogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZ2V0KCk7
IH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXIuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQorICAgIAorICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIGNvcHlCdWZmZXJJZk5lZWRl
ZCgpOwpAQCAtODYsNiArOTMsMjEgQEAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3BlcmF0b3I9
PShjb25zdAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDU3RyaW5nJiBhLCBjb25zdCBD
U3RyaW5nJiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KIFdURl9FWFBPUlRfUFJJVkFURSBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ1N0cmluZyYgYSwgY29uc3QgY2hhciogYik7CiBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IENTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuICEo
YSA9PSBiKTsgfQorYm9vbCBvcGVyYXRvcjwoY29uc3QgQ1N0cmluZyYgYSwgY29uc3QgQ1N0cmlu
ZyYgYik7CisKK3N0cnVjdCBDU3RyaW5nSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgQ1N0cmluZyYgc3RyaW5nKSB7IHJldHVybiBzdHJpbmcuaGFzaCgpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ1N0cmluZyYgYSwgY29uc3QgQ1N0cmluZyYgYik7CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8Q1N0cmluZz4geworICAgIHR5cGVkZWYgQ1N0cmluZ0hhc2gg
SGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVt
cGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxDU3RyaW5nPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0
czxDU3RyaW5nPiB7IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>
<flag name="review"
          id="229193"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>