<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5089218759750162037</id><updated>2026-10-01T02:35:15.754+05:30</updated><category term="VHDL"/><category term="Verilog"/><category term="VHDL Design Units"/><category term="Verilog Design Units"/><category term="Digital Design"/><category term="VHDL Test Bench"/><category term="Verilog Tutorial"/><category term="CDC"/><category term="VHDL Tutorial"/><category term="Verilog Test Bench"/><category term="Verification"/><title type='text'>VLSICoding</title><subtitle type='html'>Be Expert in VLSI Design.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vlsicoding.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default?max-results=5&amp;redirect=false'/><link rel='alternate' type='text/html' href='http://vlsicoding.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default?start-index=6&amp;max-results=5&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>107</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>5</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5089218759750162037.post-8462440706939502655</id><published>2026-10-01T02:35:15.753+05:30</published><updated>2026-10-01T02:35:15.754+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="CDC"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Design"/><category scheme="http://www.blogger.com/atom/ns#" term="Verilog"/><category scheme="http://www.blogger.com/atom/ns#" term="VHDL"/><title type='text'>Mastering Asynchronous Resets in ASICs/FPGAs</title><content type='html'>&lt;p&gt;We’ve seen in the last few posts mastering Clock Domain Crossing (CDC)—learning how to safely move single bits, multi-bit buses, and fleeting pulses across different clock domains without triggering metastability.&lt;/p&gt;&lt;p data-path-to-node=&quot;5&quot;&gt;Today, we are looking at a signal that goes to almost &lt;i data-index-in-node=&quot;54&quot; data-path-to-node=&quot;5&quot;&gt;every single flip-flop&lt;/i&gt; in your entire design: &lt;b data-index-in-node=&quot;100&quot; data-path-to-node=&quot;5&quot;&gt;The Reset Signal&lt;/b&gt;.&lt;/p&gt;&lt;p data-path-to-node=&quot;6&quot;&gt;In academia, the reset is just a theoretical switch that initializes your system. In the real world, releasing a reset at the wrong time will send your entire chip or FPGA into a catastrophic, unrecoverable metastable state. Let’s explore why this happens and how industry experts fix it.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Synchronous vs. Asynchronous Resets&lt;/h4&gt;&lt;p data-path-to-node=&quot;9&quot;&gt;When designing RTL, you generally have two choices for how to implement your resets:&lt;/p&gt;&lt;ol data-path-to-node=&quot;10&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;10,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,0,0&quot;&gt;Synchronous Resets:&lt;/b&gt; The flip-flop only clears its value on the active edge of the clock.&lt;/p&gt;&lt;ul data-path-to-node=&quot;10,0,1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;10,0,1,0,0&quot;&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,0,1,0,0&quot;&gt;Pros:&lt;/i&gt; Completely immune to metastability from the reset signal itself.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;10,0,1,1,0&quot;&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,0,1,1,0&quot;&gt;Cons:&lt;/i&gt; If your clock is turned off (e.g., to save power), you cannot reset the chip!&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;10,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,1,0&quot;&gt;Asynchronous Resets:&lt;/b&gt; The flip-flop clears its value the instant the reset signal is asserted, regardless of what the clock is doing.&lt;/p&gt;&lt;ul data-path-to-node=&quot;10,1,1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;10,1,1,0,0&quot;&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,1,1,0,0&quot;&gt;Pros:&lt;/i&gt; Works perfectly even if the clocks are stopped or haven&#39;t stabilized yet.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;10,1,1,1,0&quot;&gt;&lt;i data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,1,1,1,0&quot;&gt;Cons:&lt;/i&gt; Extremely dangerous when you &lt;i data-index-in-node=&quot;35&quot; data-path-to-node=&quot;10,1,1,1,0&quot;&gt;release&lt;/i&gt; the reset.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p data-path-to-node=&quot;11&quot;&gt;Because modern System-on-Chips (SoCs) use aggressive clock-gating to save power, &lt;b data-index-in-node=&quot;81&quot; data-path-to-node=&quot;11&quot;&gt;Asynchronous Resets are the industry standard.&lt;/b&gt; But they come with a massive hidden trap.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;The Trap: Recovery and Removal Time Violations&lt;/h4&gt;&lt;p data-path-to-node=&quot;13&quot;&gt;We know from our previous CDC posts that data signals have Setup and Hold times. If data changes too close to a clock edge, the flip-flop goes metastable.&lt;/p&gt;&lt;p data-path-to-node=&quot;14&quot;&gt;Asynchronous resets have the exact same physical limitations, but they go by different names: &lt;b data-index-in-node=&quot;94&quot; data-path-to-node=&quot;14&quot;&gt;Recovery Time&lt;/b&gt; and &lt;b data-index-in-node=&quot;112&quot; data-path-to-node=&quot;14&quot;&gt;Removal Time&lt;/b&gt;.&lt;/p&gt;&lt;p data-path-to-node=&quot;15&quot;&gt;Asserting an asynchronous reset is perfectly safe. It forces the flip-flop to &lt;code data-index-in-node=&quot;78&quot; data-path-to-node=&quot;15&quot;&gt;0&lt;/code&gt; immediately. The danger happens when you &lt;b data-index-in-node=&quot;121&quot; data-path-to-node=&quot;15&quot;&gt;de-assert&lt;/b&gt; (release) the reset.
If you release the reset button at the exact moment the clock edge is ticking, the flip-flop’s internal transistors get confused. Should they stay at &lt;code data-index-in-node=&quot;302&quot; data-path-to-node=&quot;15&quot;&gt;0&lt;/code&gt; (because of the reset) or should they capture the new incoming &lt;code data-index-in-node=&quot;367&quot; data-path-to-node=&quot;15&quot;&gt;D&lt;/code&gt; data (because of the clock)?&lt;/p&gt;&lt;p data-path-to-node=&quot;16&quot;&gt;Just like a setup/hold violation, the flip-flop goes metastable. But unlike a data path where a single bad bit might corrupt a packet, a metastable reset signal means your state machines boot into illegal states. Your chip is effectively dead on arrival.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;The Industry Solution: &quot;Async Assertion, Sync De-assertion&quot;&lt;/h4&gt;&lt;p data-path-to-node=&quot;18&quot;&gt;To get the best of both worlds—the ability to reset without a clock, but the safety of a synchronous release—engineers use a specific circuit topology called a &lt;b data-index-in-node=&quot;165&quot; data-path-to-node=&quot;18&quot;&gt;Reset Synchronizer&lt;/b&gt;.&lt;/p&gt;&lt;p data-path-to-node=&quot;19&quot;&gt;The rule of thumb for this architecture is: &lt;b data-index-in-node=&quot;44&quot; data-path-to-node=&quot;19&quot;&gt;Asynchronous Assertion, Synchronous De-assertion.&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;20&quot;&gt;Here is how the circuit works:&lt;/p&gt;&lt;ol data-path-to-node=&quot;21&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;21,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,0,0&quot;&gt;The Assertion (Asynchronous):&lt;/b&gt; When the external reset button is pressed, the signal bypasses the synchronizer&#39;s clock entirely and routes directly to the asynchronous clear pins of the reset synchronizer&#39;s flip-flops. The reset propagates instantly across the whole chip.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;21,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,1,0&quot;&gt;The Wait:&lt;/b&gt; The input data pin (&lt;code data-index-in-node=&quot;30&quot; data-path-to-node=&quot;21,1,0&quot;&gt;D&lt;/code&gt;) of the first synchronizer flip-flop is permanently tied to &lt;code data-index-in-node=&quot;92&quot; data-path-to-node=&quot;21,1,0&quot;&gt;1&lt;/code&gt; (or &lt;code data-index-in-node=&quot;98&quot; data-path-to-node=&quot;21,1,0&quot;&gt;VDD&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;21,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,2,0&quot;&gt;The De-assertion (Synchronous):&lt;/b&gt; When the external reset is released, the chip doesn&#39;t wake up immediately. Instead, on the next clock edge, the first flip-flop captures that permanently tied &lt;code data-index-in-node=&quot;191&quot; data-path-to-node=&quot;21,2,0&quot;&gt;1&lt;/code&gt;. On the following clock edge, the second flip-flop captures it.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;21,3,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,3,0&quot;&gt;Safe Wakeup:&lt;/b&gt; The clean, synchronized &lt;code data-index-in-node=&quot;37&quot; data-path-to-node=&quot;21,3,0&quot;&gt;1&lt;/code&gt; finally reaches the rest of your design, releasing the whole clock domain from reset perfectly aligned with the clock edge.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Why You Need a Tree&lt;/h4&gt;&lt;p data-path-to-node=&quot;23&quot;&gt;You cannot just use one reset synchronizer for your entire SoC. If you have 10 different clock domains (e.g., 1GHz, 400MHz, 50MHz), you must instantiate a dedicated Reset Synchronizer for &lt;i data-index-in-node=&quot;188&quot; data-path-to-node=&quot;23&quot;&gt;each&lt;/i&gt; clock domain.&lt;/p&gt;&lt;p data-path-to-node=&quot;24&quot;&gt;The raw external reset goes to all of them, but each domain wakes up perfectly aligned to its own specific clock frequency. This distributed architecture is known as a &lt;b data-index-in-node=&quot;168&quot; data-path-to-node=&quot;24&quot;&gt;Reset Tree&lt;/b&gt;.&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;Takeaway&lt;/h4&gt;&lt;p data-path-to-node=&quot;26&quot;&gt;Treating a reset signal like a simple wire is a classic beginner mistake. In reality, a reset is a massive, high-fanout network that requires just as much architectural planning as your clock tree.&lt;/p&gt;&lt;p data-path-to-node=&quot;27&quot;&gt;Whenever you are writing Verilog or SystemVerilog for a new module:&lt;/p&gt;&lt;ul data-path-to-node=&quot;28&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;28,0,0&quot;&gt;Use asynchronous resets for your registers.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;28,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;28,1,0&quot;&gt;Never&lt;/b&gt; feed an external reset directly into your main logic.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;28,2,0&quot;&gt;Always pass your raw reset through a Reset Synchronizer clocked by that module&#39;s specific domain before letting it touch your functional flip-flops.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://vlsicoding.blogspot.com/feeds/8462440706939502655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vlsicoding.blogspot.com/2026/10/Mastering-Asynchronous-Resets-in-ASICs-FPGAs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default/8462440706939502655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default/8462440706939502655'/><link rel='alternate' type='text/html' href='http://vlsicoding.blogspot.com/2026/10/Mastering-Asynchronous-Resets-in-ASICs-FPGAs.html' title='Mastering Asynchronous Resets in ASICs/FPGAs'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089218759750162037.post-2697050451836553608</id><published>2026-09-08T05:34:00.000+05:30</published><updated>2026-09-10T07:35:31.798+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="CDC"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Design"/><title type='text'>Reconvergent Logic and the +/- 1 Cycle Uncertainty during Clock Domain Crossing</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;If you have been following our CDC (Clock Domain Crossing) series, you know the golden rule of single-bit transfers: &lt;b data-index-in-node=&quot;117&quot; data-path-to-node=&quot;5&quot;&gt;Always use a 2-Flop Synchronizer.&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;6&quot; style=&quot;text-align: justify;&quot;&gt;So, you design your RTL. You have two independent control bits—let&#39;s call them &lt;code data-index-in-node=&quot;79&quot; data-path-to-node=&quot;6&quot;&gt;enable&lt;/code&gt; and &lt;code data-index-in-node=&quot;90&quot; data-path-to-node=&quot;6&quot;&gt;mode&lt;/code&gt;—crossing from a 100MHz domain to a 500MHz domain. Like a good design engineer, you place a 2-flop synchronizer on each signal. The metastability resolves, the linting tools pass, and you tape out.&lt;/p&gt;&lt;p data-path-to-node=&quot;7&quot; style=&quot;text-align: justify;&quot;&gt;But when the silicon comes back, your destination state machine occasionally jumps into an illegal state and freezes. What went wrong?&lt;/p&gt;&lt;p data-path-to-node=&quot;8&quot; style=&quot;text-align: justify;&quot;&gt;Welcome to the hidden trap of CDC: &lt;b data-index-in-node=&quot;35&quot; data-path-to-node=&quot;8&quot;&gt;Reconvergent Logic.&lt;/b&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;The +/- 1 Clock Cycle Uncertainty&lt;/h4&gt;&lt;p data-path-to-node=&quot;11&quot; style=&quot;text-align: justify;&quot;&gt;To understand why your design crashed, we have to look at how synchronizers actually behave in the physical world.&lt;/p&gt;&lt;p data-path-to-node=&quot;12&quot; style=&quot;text-align: justify;&quot;&gt;When a signal goes metastable in the first stage of a 2-flop synchronizer, it will eventually settle to a &lt;code data-index-in-node=&quot;106&quot; data-path-to-node=&quot;12&quot;&gt;1&lt;/code&gt; or a &lt;code data-index-in-node=&quot;113&quot; data-path-to-node=&quot;12&quot;&gt;0&lt;/code&gt;. But &lt;i data-index-in-node=&quot;120&quot; data-path-to-node=&quot;12&quot;&gt;which&lt;/i&gt; one it settles to during that specific clock cycle is entirely random.&lt;/p&gt;&lt;ul data-path-to-node=&quot;13&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;13,0,0&quot; style=&quot;text-align: justify;&quot;&gt;If it settles to the new value, the destination domain sees the signal change &lt;b data-index-in-node=&quot;78&quot; data-path-to-node=&quot;13,0,0&quot;&gt;this cycle&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;13,1,0&quot; style=&quot;text-align: justify;&quot;&gt;If it settles to the old value, the destination domain won&#39;t see the signal change until the &lt;b data-index-in-node=&quot;93&quot; data-path-to-node=&quot;13,1,0&quot;&gt;next cycle&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;14&quot; style=&quot;text-align: justify;&quot;&gt;This introduces a fundamental hardware rule: &lt;b data-index-in-node=&quot;45&quot; data-path-to-node=&quot;14&quot;&gt;Every synchronizer has a built-in temporal uncertainty of +/- 1 clock cycle.&lt;/b&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;The Reconvergence Disaster&lt;/h4&gt;&lt;p data-path-to-node=&quot;16&quot; style=&quot;text-align: justify;&quot;&gt;Now, let&#39;s look back at your &lt;code data-index-in-node=&quot;29&quot; data-path-to-node=&quot;16&quot;&gt;enable&lt;/code&gt; and &lt;code data-index-in-node=&quot;40&quot; data-path-to-node=&quot;16&quot;&gt;mode&lt;/code&gt; signals. Let&#39;s assume the source domain asserts both of them at the exact same time.&lt;/p&gt;&lt;p data-path-to-node=&quot;17&quot; style=&quot;text-align: justify;&quot;&gt;Because of microscopic routing delays and the +/- 1 cycle uncertainty of synchronizers, these two signals might not exit their respective 2-flop synchronizers in the destination domain simultaneously.&lt;/p&gt;&lt;ul data-path-to-node=&quot;18&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;18,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18,0,0&quot;&gt;Cycle 1:&lt;/b&gt; &lt;code data-index-in-node=&quot;9&quot; data-path-to-node=&quot;18,0,0&quot;&gt;enable&lt;/code&gt; synchronizer resolves to &lt;code data-index-in-node=&quot;41&quot; data-path-to-node=&quot;18,0,0&quot;&gt;1&lt;/code&gt;. &lt;code data-index-in-node=&quot;44&quot; data-path-to-node=&quot;18,0,0&quot;&gt;mode&lt;/code&gt; synchronizer resolves to &lt;code data-index-in-node=&quot;74&quot; data-path-to-node=&quot;18,0,0&quot;&gt;0&lt;/code&gt; (it needs one more cycle).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;18,1,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18,1,0&quot;&gt;Cycle 2:&lt;/b&gt; &lt;code data-index-in-node=&quot;9&quot; data-path-to-node=&quot;18,1,0&quot;&gt;enable&lt;/code&gt; is still &lt;code data-index-in-node=&quot;25&quot; data-path-to-node=&quot;18,1,0&quot;&gt;1&lt;/code&gt;. &lt;code data-index-in-node=&quot;28&quot; data-path-to-node=&quot;18,1,0&quot;&gt;mode&lt;/code&gt; synchronizer finally resolves to &lt;code data-index-in-node=&quot;66&quot; data-path-to-node=&quot;18,1,0&quot;&gt;1&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;19&quot; style=&quot;text-align: justify;&quot;&gt;For exactly one clock cycle, your destination domain saw &lt;code data-index-in-node=&quot;57&quot; data-path-to-node=&quot;19&quot;&gt;enable = 1&lt;/code&gt; and &lt;code data-index-in-node=&quot;72&quot; data-path-to-node=&quot;19&quot;&gt;mode = 0&lt;/code&gt;. If your downstream logic combines these two signals (i.e., the logic &lt;i data-index-in-node=&quot;151&quot; data-path-to-node=&quot;19&quot;&gt;reconverges&lt;/i&gt;), that temporary mismatch can trigger a fatal false state in your state machine.&lt;/p&gt;&lt;blockquote data-path-to-node=&quot;20&quot;&gt;&lt;p data-path-to-node=&quot;20,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;20,0&quot;&gt;Key Takeaway:&lt;/b&gt; You successfully prevented metastability, but you destroyed the logical relationship between your signals.&lt;/p&gt;&lt;/blockquote&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;How to Fix Reconvergent CDC Paths&lt;/h4&gt;&lt;p data-path-to-node=&quot;22&quot; style=&quot;text-align: justify;&quot;&gt;The rule for fixing this is simple: &lt;b data-index-in-node=&quot;36&quot; data-path-to-node=&quot;22&quot;&gt;Never synchronize related control signals separately if they will be evaluated together in the destination domain.&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;23&quot; style=&quot;text-align: justify;&quot;&gt;Here is how experienced design engineers handle this:&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;1. Consolidate Before Crossing&lt;/h4&gt;&lt;p data-path-to-node=&quot;25&quot; style=&quot;text-align: justify;&quot;&gt;Instead of sending &lt;code data-index-in-node=&quot;19&quot; data-path-to-node=&quot;25&quot;&gt;enable&lt;/code&gt; and &lt;code data-index-in-node=&quot;30&quot; data-path-to-node=&quot;25&quot;&gt;mode&lt;/code&gt; as separate signals, combine them into a single validation signal in the &lt;i data-index-in-node=&quot;108&quot; data-path-to-node=&quot;25&quot;&gt;source&lt;/i&gt; domain.
For example, create a new signal: &lt;code data-index-in-node=&quot;157&quot; data-path-to-node=&quot;25&quot;&gt;valid_operation = enable &amp;amp; mode;&lt;/code&gt; in the source clock domain. Then, pass only that single &lt;code data-index-in-node=&quot;246&quot; data-path-to-node=&quot;25&quot;&gt;valid_operation&lt;/code&gt; bit through a 2-flop synchronizer.&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;2. Use a Multi-Bit CDC Technique&lt;/h4&gt;&lt;p data-path-to-node=&quot;27&quot; style=&quot;text-align: justify;&quot;&gt;If you truly need both distinct bits in the destination domain, you can no longer treat them as independent control signals. You must treat them as a multi-bit bus.
As we covered in a previous post, this means you must use a &lt;b data-index-in-node=&quot;225&quot; data-path-to-node=&quot;27&quot;&gt;Gray Code&lt;/b&gt; encoding scheme or a &lt;b data-index-in-node=&quot;256&quot; data-path-to-node=&quot;27&quot;&gt;Request/Acknowledge Handshake&lt;/b&gt; to ensure both bits are stable before the destination domain is allowed to read them.&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;Wrapping Up&lt;/h4&gt;&lt;p data-path-to-node=&quot;29&quot; style=&quot;text-align: justify;&quot;&gt;CDC bugs are notoriously difficult to catch because they rarely show up in standard RTL simulations. A standard simulator doesn&#39;t model the microscopic silicon delays that cause the +/- 1 cycle uncertainty.&lt;/p&gt;&lt;p data-path-to-node=&quot;30&quot; style=&quot;text-align: justify;&quot;&gt;When designing your architecture, always trace your synchronized signals. If two signals cross domains separately and then meet at an &lt;code data-index-in-node=&quot;134&quot; data-path-to-node=&quot;30&quot;&gt;AND&lt;/code&gt; gate, a MUX, or a State Machine evaluation down the line, you have a reconvergence bug waiting to happen.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://vlsicoding.blogspot.com/feeds/2697050451836553608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vlsicoding.blogspot.com/2026/09/reconvergent-logic-and--one-cycle-uncertainty-cdc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default/2697050451836553608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default/2697050451836553608'/><link rel='alternate' type='text/html' href='http://vlsicoding.blogspot.com/2026/09/reconvergent-logic-and--one-cycle-uncertainty-cdc.html' title='Reconvergent Logic and the +/- 1 Cycle Uncertainty during Clock Domain Crossing'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089218759750162037.post-753685227369946078</id><published>2026-08-15T13:00:00.000+05:30</published><updated>2026-09-10T07:34:10.674+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="CDC"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Design"/><title type='text'>Pulse Transfers and Fast-to-Slow Clock Domain Crossing</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;From the last &lt;a href=&quot;https://vlsicoding.blogspot.com/2026/08/handshakes-asyncfifos-multibit-cdc.html&quot; target=&quot;_blank&quot;&gt;post&lt;/a&gt;, you know how to use a &lt;b data-index-in-node=&quot;121&quot; data-path-to-node=&quot;3&quot;&gt;2-Flop Synchronizer&lt;/b&gt; for single control bits, and you know how to use &lt;b data-index-in-node=&quot;190&quot; data-path-to-node=&quot;3&quot;&gt;Handshakes&lt;/b&gt; and &lt;b data-index-in-node=&quot;205&quot; data-path-to-node=&quot;3&quot;&gt;Asynchronous FIFOs&lt;/b&gt; for multi-bit data buses.&lt;/p&gt;&lt;p data-path-to-node=&quot;4&quot; style=&quot;text-align: justify;&quot;&gt;But there is one specific, highly common scenario that will silently break a standard 2-Flop Synchronizer: &lt;b data-index-in-node=&quot;107&quot; data-path-to-node=&quot;4&quot;&gt;passing a single-cycle pulse from a very fast clock domain to a very slow clock domain.&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;5&quot; style=&quot;text-align: justify;&quot;&gt;Let&#39;s dive into the &quot;Disappearing Pulse&quot; problem and the clever hardware tricks VLSI engineers use to solve it.&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;The Disappearing Pulse Problem&lt;/h4&gt;&lt;p data-path-to-node=&quot;8&quot; style=&quot;text-align: justify;&quot;&gt;Imagine you have a high-speed networking chip. A packet arrives, and the 1GHz receiver logic generates a single-cycle &lt;code data-index-in-node=&quot;118&quot; data-path-to-node=&quot;8&quot;&gt;packet_received&lt;/code&gt; pulse. You need to send this pulse to a 100MHz microcontroller on the same chip so it can log the event.&lt;/p&gt;&lt;p data-path-to-node=&quot;9&quot; style=&quot;text-align: justify;&quot;&gt;You route the 1GHz pulse directly into a standard 2-Flop Synchronizer running at 100MHz. You run the simulation, and... nothing happens. The microcontroller never sees the pulse. What went wrong?&lt;/p&gt;&lt;p data-path-to-node=&quot;10&quot; style=&quot;text-align: justify;&quot;&gt;It comes down to simple math and timing:&lt;/p&gt;&lt;ul data-path-to-node=&quot;11&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;11,0,0&quot; style=&quot;text-align: justify;&quot;&gt;A single clock cycle at 1GHz is exactly &lt;b data-index-in-node=&quot;40&quot; data-path-to-node=&quot;11,0,0&quot;&gt;1 nanosecond&lt;/b&gt; long. Your pulse exists for exactly 1ns.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;11,1,0&quot; style=&quot;text-align: justify;&quot;&gt;A 100MHz clock only ticks once every &lt;b data-index-in-node=&quot;37&quot; data-path-to-node=&quot;11,1,0&quot;&gt;10 nanoseconds&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;12&quot; style=&quot;text-align: justify;&quot;&gt;If the 1ns pulse fires and disappears &lt;i data-index-in-node=&quot;38&quot; data-path-to-node=&quot;12&quot;&gt;between&lt;/i&gt; the 10ns ticks of the slow clock, the slow clock&#39;s flip-flops will never see it. The data violates the fundamental rule of sampling: the signal must be stable long enough for the destination clock to actually sample it.&lt;/p&gt;&lt;h2 data-path-to-node=&quot;13&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h4&gt;The Solution: Pulse-to-Toggle Synchronization&lt;/h4&gt;&lt;p data-path-to-node=&quot;14&quot; style=&quot;text-align: justify;&quot;&gt;To fix this, we cannot just send the raw pulse. We need to &quot;stretch&quot; the event so the slow clock has time to notice it. The most elegant, open-loop way to do this is using a &lt;b data-index-in-node=&quot;174&quot; data-path-to-node=&quot;14&quot;&gt;Pulse-to-Toggle Synchronizer&lt;/b&gt;.&lt;/p&gt;&lt;p data-path-to-node=&quot;15&quot; style=&quot;text-align: justify;&quot;&gt;Instead of trying to catch a fleeting pulse, we convert the pulse into a permanent state change (a toggle). The slow domain then looks for that state change and converts it back into a pulse.&lt;/p&gt;&lt;p data-path-to-node=&quot;16&quot; style=&quot;text-align: justify;&quot;&gt;Here is the step-by-step architecture:&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;Step 1: The Toggle Flip-Flop (Fast Domain)&lt;/h4&gt;&lt;p data-path-to-node=&quot;18&quot; style=&quot;text-align: justify;&quot;&gt;In the fast domain (1GHz), we route the incoming pulse into the enable pin of a Toggle Flip-Flop (T-Flop) or a simple XOR gate.&lt;/p&gt;&lt;ul data-path-to-node=&quot;19&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;19,0,0&quot; style=&quot;text-align: justify;&quot;&gt;Every time a &lt;code data-index-in-node=&quot;13&quot; data-path-to-node=&quot;19,0,0&quot;&gt;packet_received&lt;/code&gt; pulse arrives, the output of this register flips its state (from &lt;code data-index-in-node=&quot;94&quot; data-path-to-node=&quot;19,0,0&quot;&gt;0&lt;/code&gt; to &lt;code data-index-in-node=&quot;99&quot; data-path-to-node=&quot;19,0,0&quot;&gt;1&lt;/code&gt;, or from &lt;code data-index-in-node=&quot;110&quot; data-path-to-node=&quot;19,0,0&quot;&gt;1&lt;/code&gt; to &lt;code data-index-in-node=&quot;115&quot; data-path-to-node=&quot;19,0,0&quot;&gt;0&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;19,1,0&quot; style=&quot;text-align: justify;&quot;&gt;Because the state stays flipped forever (until the next pulse), we have effectively stretched a 1ns event into a permanent level change.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;Step 2: The 2-Flop Synchronizer&lt;/h4&gt;&lt;p data-path-to-node=&quot;21&quot; style=&quot;text-align: justify;&quot;&gt;Now that we have a stable, long-lasting level change, we can safely pass it through a standard 2-Flop Synchronizer into the slow domain (100MHz). Because the signal is now a continuous level, the slow clock is guaranteed to capture it, completely avoiding the disappearing pulse problem.&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;Step 3: The Edge Detector (Slow Domain)&lt;/h4&gt;&lt;p data-path-to-node=&quot;23&quot; style=&quot;text-align: justify;&quot;&gt;Once the synchronized toggled signal is safely inside the slow domain, we need to turn it back into a single-cycle pulse.&lt;/p&gt;&lt;p data-path-to-node=&quot;24&quot; style=&quot;text-align: justify;&quot;&gt;Remember the &lt;b data-index-in-node=&quot;13&quot; data-path-to-node=&quot;24&quot;&gt;&lt;a href=&quot;https://vlsicoding.blogspot.com/2022/11/rising-and-falling-edge-detector-using-verilog.html&quot; target=&quot;_blank&quot;&gt;Rising and Falling Edge Detector&lt;/a&gt;&lt;/b&gt; code I shared on this blog back in November? This is exactly where you use it!&lt;/p&gt;&lt;ul data-path-to-node=&quot;25&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;25,0,0&quot; style=&quot;text-align: justify;&quot;&gt;We run the synchronized signal through an edge detector in the 100MHz domain.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;25,1,0&quot; style=&quot;text-align: justify;&quot;&gt;Whenever the edge detector sees the signal change (either rising or falling), it generates a clean, single-cycle pulse in the 100MHz domain.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;26&quot; style=&quot;text-align: justify;&quot;&gt;The event has successfully crossed the chasm!&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;Alternative: Closed-Loop Pulse Stretching (The Handshake)&lt;/h4&gt;&lt;p data-path-to-node=&quot;29&quot; style=&quot;text-align: justify;&quot;&gt;If you absolutely cannot afford to miss a pulse, and you need confirmation that the slow domain received it, you can use a closed-loop handshake.&lt;/p&gt;&lt;ol data-path-to-node=&quot;30&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;30,0,0&quot; style=&quot;text-align: justify;&quot;&gt;The fast domain receives the pulse and sets a &lt;code data-index-in-node=&quot;46&quot; data-path-to-node=&quot;30,0,0&quot;&gt;req&lt;/code&gt; (request) signal to &lt;code data-index-in-node=&quot;70&quot; data-path-to-node=&quot;30,0,0&quot;&gt;1&lt;/code&gt;. It holds this signal high indefinitely.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;30,1,0&quot; style=&quot;text-align: justify;&quot;&gt;The slow domain captures the &lt;code data-index-in-node=&quot;29&quot; data-path-to-node=&quot;30,1,0&quot;&gt;req&lt;/code&gt; signal through a 2-Flop Synchronizer and generates a pulse.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;30,2,0&quot; style=&quot;text-align: justify;&quot;&gt;The slow domain then sends an &lt;code data-index-in-node=&quot;30&quot; data-path-to-node=&quot;30,2,0&quot;&gt;ack&lt;/code&gt; (acknowledge) signal back to the fast domain through &lt;i data-index-in-node=&quot;87&quot; data-path-to-node=&quot;30,2,0&quot;&gt;another&lt;/i&gt; 2-Flop Synchronizer.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;30,3,0&quot; style=&quot;text-align: justify;&quot;&gt;Once the fast domain sees the &lt;code data-index-in-node=&quot;30&quot; data-path-to-node=&quot;30,3,0&quot;&gt;ack&lt;/code&gt;, it finally drops the &lt;code data-index-in-node=&quot;56&quot; data-path-to-node=&quot;30,3,0&quot;&gt;req&lt;/code&gt; signal to &lt;code data-index-in-node=&quot;70&quot; data-path-to-node=&quot;30,3,0&quot;&gt;0&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p data-path-to-node=&quot;31&quot; style=&quot;text-align: justify;&quot;&gt;While this is incredibly safe, it requires the fast domain to wait several slow-clock cycles before it can send a second pulse. If your fast domain is generating rapid-fire pulses (e.g., multiple packets arriving back-to-back), the handshake mechanism will bottleneck your system. In those cases, a fast-to-slow Asynchronous FIFO is required.&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;The Practical Takeaway&lt;/h4&gt;&lt;p data-path-to-node=&quot;33&quot; style=&quot;text-align: justify;&quot;&gt;When designing RTL, you must always look at the frequencies of your clock domains.&lt;/p&gt;&lt;ul data-path-to-node=&quot;34&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;34,0,0&quot; style=&quot;text-align: justify;&quot;&gt;Going from &lt;b data-index-in-node=&quot;11&quot; data-path-to-node=&quot;34,0,0&quot;&gt;Slow to Fast&lt;/b&gt;: A 2-Flop synchronizer usually works fine, because a slow pulse is naturally wide enough for a fast clock to sample it multiple times (though you will need an edge detector to prevent a single slow pulse from turning into multiple fast pulses!).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;34,1,0&quot; style=&quot;text-align: justify;&quot;&gt;Going from &lt;b data-index-in-node=&quot;11&quot; data-path-to-node=&quot;34,1,0&quot;&gt;Fast to Slow&lt;/b&gt;: Never send a raw pulse. You must use a Pulse-to-Toggle circuit, a Handshake, or an Async FIFO to stretch the data so the slow clock can actually see it.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;35&quot; style=&quot;text-align: justify;&quot;&gt;Mastering these topologies ensures your chips won&#39;t just work in perfectly timed academic simulations, but in the chaotic, multi-frequency reality of physical silicon.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://vlsicoding.blogspot.com/feeds/753685227369946078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vlsicoding.blogspot.com/2026/08/pulse-transfers-and-fast-to-slow-clock-cdc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default/753685227369946078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default/753685227369946078'/><link rel='alternate' type='text/html' href='http://vlsicoding.blogspot.com/2026/08/pulse-transfers-and-fast-to-slow-clock-cdc.html' title='Pulse Transfers and Fast-to-Slow Clock Domain Crossing'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089218759750162037.post-6763788993473924524</id><published>2026-08-11T05:33:00.155+05:30</published><updated>2026-08-21T05:24:22.052+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="CDC"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Design"/><title type='text'>Handshakes, FIFOs, and the Magic of Gray Code in Multi-Bit CDC</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-family: inherit; text-align: justify;&quot;&gt;In our last&lt;/span&gt;&lt;span style=&quot;font-family: inherit; text-align: justify;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;https://vlsicoding.blogspot.com/2026/08/httpsvlsicoding.blogspot.com202608metastability-and-cdc.html&quot; style=&quot;font-family: inherit; text-align: justify;&quot; target=&quot;_blank&quot;&gt;post&lt;/a&gt;&lt;span style=&quot;font-family: inherit; text-align: justify;&quot;&gt;, we tackled the silent silicon killer known as Metastability and explored how the trusty 2-Flop Synchronizer safely passes a single control bit across different clock domains.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;But what happens when you need to send an entire 32-bit data bus from a 1GHz processor to a 400MHz memory controller?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Spoiler alert: You cannot just slap thirty-two 2-Flop Synchronizers in parallel and call it a day. Today, we are diving into the practical magic of Asynchronous FIFOs and why a mathematical curiosity from the 1940s called Gray Code is the only thing keeping modern microchips from collapsing into chaos.&lt;/span&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;The Multi-Bit Disaster: Why 2-Flop Synchronizers Fail on Buses&lt;/span&gt;&lt;/h4&gt;&lt;p data-path-to-node=&quot;8&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Imagine trying to pass a binary counter value of &lt;code data-index-in-node=&quot;49&quot; data-path-to-node=&quot;8&quot;&gt;3&lt;/code&gt; (&lt;code data-index-in-node=&quot;52&quot; data-path-to-node=&quot;8&quot;&gt;011&lt;/code&gt; in binary) changing to &lt;code data-index-in-node=&quot;79&quot; data-path-to-node=&quot;8&quot;&gt;4&lt;/code&gt; (&lt;code data-index-in-node=&quot;82&quot; data-path-to-node=&quot;8&quot;&gt;100&lt;/code&gt; in binary) across a clock domain using parallel synchronizers. Notice that &lt;i data-index-in-node=&quot;161&quot; data-path-to-node=&quot;8&quot;&gt;three separate bits&lt;/i&gt; are changing simultaneously to make that jump.&lt;/span&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;9&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;In the physical world of silicon, perfectly simultaneous events do not exist. Microscopic variations in wire routing, parasitic capacitance, and temperature mean those three bits will arrive at the destination flip-flops at slightly different picoseconds. This is called &lt;b data-index-in-node=&quot;271&quot; data-path-to-node=&quot;9&quot;&gt;Bus Skew&lt;/b&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;10&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;If the destination clock ticks exactly while those bits are transitioning, some flip-flops will capture the old value, some will capture the new value, and some will go metastable. Your destination domain might stitch those bits together and read &lt;code data-index-in-node=&quot;247&quot; data-path-to-node=&quot;10&quot;&gt;7&lt;/code&gt; (&lt;code data-index-in-node=&quot;250&quot; data-path-to-node=&quot;10&quot;&gt;111&lt;/code&gt;) or &lt;code data-index-in-node=&quot;258&quot; data-path-to-node=&quot;10&quot;&gt;0&lt;/code&gt; (&lt;code data-index-in-node=&quot;261&quot; data-path-to-node=&quot;10&quot;&gt;000&lt;/code&gt;). This generates a garbage memory address that will instantly crash your system.&lt;/span&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;10&quot; style=&quot;text-align: justify;&quot;&gt;To fix this, we have two primary weapons in RTL design: &lt;b data-index-in-node=&quot;56&quot; data-path-to-node=&quot;11&quot;&gt;Handshaking&lt;/b&gt; and &lt;b data-index-in-node=&quot;72&quot; data-path-to-node=&quot;11&quot;&gt;Asynchronous FIFOs&lt;/b&gt;.&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;Solution 1: The Handshake Protocol (Slow but Safe)&lt;/h4&gt;&lt;p data-path-to-node=&quot;13&quot; style=&quot;text-align: justify;&quot;&gt;If you only need to send multi-bit data occasionally—like writing to a configuration register—the &lt;b data-index-in-node=&quot;98&quot; data-path-to-node=&quot;13&quot;&gt;Request/Acknowledge (Req/Ack) Handshake&lt;/b&gt; is your best friend.&lt;/p&gt;&lt;p data-path-to-node=&quot;14&quot; style=&quot;text-align: justify;&quot;&gt;Instead of synchronizing the multi-bit data directly, we freeze the data and synchronize a single control bit to act as a messenger.&lt;/p&gt;&lt;p data-path-to-node=&quot;15&quot; style=&quot;text-align: justify;&quot;&gt;Here is the step-by-step dance of a standard handshake:&lt;/p&gt;&lt;ol data-path-to-node=&quot;16&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;16,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,0,0&quot;&gt;Source Domain:&lt;/b&gt; Places the 32-bit data onto the bus and holds it steady.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;16,1,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,1,0&quot;&gt;The Request:&lt;/b&gt; The source asserts a 1-bit &lt;code data-index-in-node=&quot;40&quot; data-path-to-node=&quot;16,1,0&quot;&gt;Request&lt;/code&gt; signal. Because it is a single bit, we can safely pass it through a standard 2-Flop Synchronizer into the destination domain.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;16,2,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,2,0&quot;&gt;Destination Domain:&lt;/b&gt; Once it receives the synchronized &lt;code data-index-in-node=&quot;54&quot; data-path-to-node=&quot;16,2,0&quot;&gt;Request&lt;/code&gt;, it knows the 32-bit data bus has been stable for several clock cycles. It safely reads the data bus.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;16,3,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,3,0&quot;&gt;The Acknowledge:&lt;/b&gt; The destination asserts a 1-bit &lt;code data-index-in-node=&quot;49&quot; data-path-to-node=&quot;16,3,0&quot;&gt;Acknowledge&lt;/code&gt; signal back to the source (again, passed through a 2-Flop Synchronizer).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;16,4,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16,4,0&quot;&gt;Completion:&lt;/b&gt; The source receives the &lt;code data-index-in-node=&quot;36&quot; data-path-to-node=&quot;16,4,0&quot;&gt;Acknowledge&lt;/code&gt;, drops the &lt;code data-index-in-node=&quot;59&quot; data-path-to-node=&quot;16,4,0&quot;&gt;Request&lt;/code&gt;, and knows it is finally safe to put new data on the bus.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p data-path-to-node=&quot;17&quot; style=&quot;text-align: justify;&quot;&gt;While incredibly safe, handshaking is very slow. A single transfer can take 4 to 6 clock cycles due to the round-trip delay of the synchronizers. For high-speed, continuous data streaming, we need something much faster.&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;Solution 2: Asynchronous FIFOs and the Gray Code Savior (Fast and Continuous)&lt;/h4&gt;&lt;p data-path-to-node=&quot;12&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;To safely pass multi-bit data without corrupting it, VLSI engineers use an &lt;b data-index-in-node=&quot;75&quot; data-path-to-node=&quot;12&quot;&gt;Asynchronous FIFO&lt;/b&gt; (First-In, First-Out memory buffer).&lt;/span&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;13&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Think of an Async FIFO like a dual-door waiting room:&lt;/span&gt;&lt;/p&gt;&lt;ul data-path-to-node=&quot;14&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;14,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,0,0&quot;&gt;The Write Interface:&lt;/b&gt; Operates entirely on the source clock (Clock A). It blindly pushes data into the room until it is full.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;14,1,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,1,0&quot;&gt;The Read Interface:&lt;/b&gt; Operates entirely on the destination clock (Clock B). It blindly pulls data out of the room until it is empty.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;15&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;The actual data payload never crosses a clock domain; it just sits statically in the memory buffer. However, the &lt;i data-index-in-node=&quot;113&quot; data-path-to-node=&quot;15&quot;&gt;control logic&lt;/i&gt; must cross domains. The Write domain needs to know if the room is full (so it stops writing), and the Read domain needs to know if the room is empty (so it stops reading).&lt;/span&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;16&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;They do this by sharing &lt;b data-index-in-node=&quot;24&quot; data-path-to-node=&quot;16&quot;&gt;Pointers&lt;/b&gt;—counters that track the current read and write addresses.&lt;/span&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;The Pointer Problem and the Gray Code Savior&lt;/span&gt;&lt;/h4&gt;&lt;p data-path-to-node=&quot;19&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;We are immediately back to square one: sharing pointers means we have to pass multi-bit counters across clock domains. If we use standard binary counters, we hit the exact same bus skew disaster described above.&lt;/span&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;20&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;This is where &lt;b data-index-in-node=&quot;14&quot; data-path-to-node=&quot;20&quot;&gt;Gray Code&lt;/b&gt; saves the day.&lt;/span&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;21&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Invented by Frank Gray at Bell Labs, Gray Code is an alternate way of counting where &lt;b data-index-in-node=&quot;85&quot; data-path-to-node=&quot;21&quot;&gt;only one single bit changes at a time&lt;/b&gt; between any two consecutive numbers.&lt;/span&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;22&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Take a look at how Standard Binary counts versus Gray Code:&lt;/span&gt;&lt;/p&gt;&lt;table data-path-to-node=&quot;23&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 32px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 32px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; text-align: justify; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;thead style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;tr style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;strong style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Decimal Value&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;strong style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Standard Binary&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;strong style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Gray Code&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;strong style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Bits Changed (from previous)&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;tr style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,1,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,1,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,1,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;000&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,1,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,1,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;000&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,1,3,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;-&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,2,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,2,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,2,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;001&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,2,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,2,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;001&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,2,3,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,3,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,3,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,3,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;010&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,3,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,3,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;011&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,3,3,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,4,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,4,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,4,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;011&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,4,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,4,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;010&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,4,3,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,5,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,5,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,5,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;100&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,5,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,5,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;110&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,5,3,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,6,0,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,6,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,6,1,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;101&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,6,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: white; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box white; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23,6,2,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgba(0, 0, 0, 0.55); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgba(0, 0, 0, 0.55) none 3px; overlay: none; padding: 4px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgba(0, 0, 0, 0.55); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;111&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 1px solid rgb(196, 199, 197); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: 0px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span data-path-to-node=&quot;23,6,3,0&quot; style=&quot;animation: auto ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px rgb(31, 31, 31); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex-direction: row; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(31, 31, 31) none 3px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rule: 3px rgb(31, 31, 31); rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Why Does This Fix CDC?&lt;/span&gt;&lt;/h4&gt;&lt;p data-path-to-node=&quot;25&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Because only &lt;i data-index-in-node=&quot;13&quot; data-path-to-node=&quot;25&quot;&gt;one bit&lt;/i&gt; changes at a time in Gray Code, we completely eliminate the bus skew problem!&lt;/span&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;26&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;If a Gray Code pointer transitions from &lt;code data-index-in-node=&quot;40&quot; data-path-to-node=&quot;26&quot;&gt;3&lt;/code&gt; (&lt;code data-index-in-node=&quot;43&quot; data-path-to-node=&quot;26&quot;&gt;010&lt;/code&gt;) to &lt;code data-index-in-node=&quot;51&quot; data-path-to-node=&quot;26&quot;&gt;4&lt;/code&gt; (&lt;code data-index-in-node=&quot;54&quot; data-path-to-node=&quot;26&quot;&gt;110&lt;/code&gt;), only the first bit is transitioning. If the destination clock samples the bus right in the middle of that transition, the metastable bit will eventually resolve to either a &lt;code data-index-in-node=&quot;233&quot; data-path-to-node=&quot;26&quot;&gt;0&lt;/code&gt; or a &lt;code data-index-in-node=&quot;240&quot; data-path-to-node=&quot;26&quot;&gt;1&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;&lt;ul data-path-to-node=&quot;27&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;27,0,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;If it resolves to &lt;code data-index-in-node=&quot;18&quot; data-path-to-node=&quot;27,0,0&quot;&gt;0&lt;/code&gt;, the destination reads &lt;code data-index-in-node=&quot;43&quot; data-path-to-node=&quot;27,0,0&quot;&gt;010&lt;/code&gt; (the old value, &lt;code data-index-in-node=&quot;63&quot; data-path-to-node=&quot;27,0,0&quot;&gt;3&lt;/code&gt;).&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;27,1,0&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;If it resolves to &lt;code data-index-in-node=&quot;18&quot; data-path-to-node=&quot;27,1,0&quot;&gt;1&lt;/code&gt;, the destination reads &lt;code data-index-in-node=&quot;43&quot; data-path-to-node=&quot;27,1,0&quot;&gt;110&lt;/code&gt; (the new value, &lt;code data-index-in-node=&quot;63&quot; data-path-to-node=&quot;27,1,0&quot;&gt;4&lt;/code&gt;).&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;28&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;There is no catastrophic &lt;code data-index-in-node=&quot;25&quot; data-path-to-node=&quot;28&quot;&gt;000&lt;/code&gt; or &lt;code data-index-in-node=&quot;32&quot; data-path-to-node=&quot;28&quot;&gt;111&lt;/code&gt; garbage state! The destination domain might be one clock cycle late in realizing the pointer updated, but the system remains perfectly safe and mathematically sound.&lt;/span&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;The Practical Takeaway&lt;/h4&gt;&lt;p data-path-to-node=&quot;35&quot; style=&quot;text-align: justify;&quot;&gt;When crossing multi-bit buses in RTL design, you must choose the right tool for the job.&lt;/p&gt;&lt;ul data-path-to-node=&quot;36&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;36,0,0&quot; style=&quot;text-align: justify;&quot;&gt;Use &lt;b data-index-in-node=&quot;4&quot; data-path-to-node=&quot;36,0,0&quot;&gt;Handshaking protocols&lt;/b&gt; for slow, infrequent transfers like control signals or register configurations. It is cheaper on silicon area but costs you in latency.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;36,1,0&quot; style=&quot;text-align: justify;&quot;&gt;Use &lt;b data-index-in-node=&quot;4&quot; data-path-to-node=&quot;36,1,0&quot;&gt;Asynchronous FIFOs with Gray Code pointers&lt;/b&gt; for high-bandwidth, continuous data streams like video processing or network packets. It takes up more silicon area but allows systems with radically different clock speeds to communicate at maximum efficiency.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;37&quot; style=&quot;text-align: justify;&quot;&gt;Understanding these hardware realities bridges the gap between academic theory—where data magically arrives on time—and physical silicon, where every nanosecond of bus skew is out to destroy your design.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://vlsicoding.blogspot.com/feeds/6763788993473924524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vlsicoding.blogspot.com/2026/08/handshakes-asyncfifos-multibit-cdc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default/6763788993473924524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default/6763788993473924524'/><link rel='alternate' type='text/html' href='http://vlsicoding.blogspot.com/2026/08/handshakes-asyncfifos-multibit-cdc.html' title='Handshakes, FIFOs, and the Magic of Gray Code in Multi-Bit CDC'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5089218759750162037.post-2289554378488513815</id><published>2026-08-03T08:34:34.482+05:30</published><updated>2026-08-21T05:24:36.008+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="CDC"/><category scheme="http://www.blogger.com/atom/ns#" term="Digital Design"/><title type='text'>Understanding Metastability and Clock Domain Crossing (CDC)</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;If you’ve taken a digital logic class, you know the golden rule: everything happens on the clock edge. Your flip-flops read the input, store the state, and pass it to the next logic gate in perfect synchronization.&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;But what happens when your design has more than one clock?&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;In modern ASICs and FPGAs, a single chip might have a 1GHz processor, a 400MHz memory controller, and a 50MHz UART interface. When data needs to move between these independent clock domains—a process known as Clock Domain Crossing (CDC)—the perfect synchronization of the classroom goes out the window, and you enter the dangerous territory of Metastability.&amp;nbsp;&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot;&gt;The Setup and Hold Violation&amp;nbsp;&lt;/h4&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;To understand metastability, we have to look at the physical physics of a flip-flop. For a flip-flop to reliably capture a 1 or a 0, the data signal must be stable for a specific amount of time before the clock edge (Setup Time) and remain stable for a specific amount of time after the clock edge (Hold Time).&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;When data crosses from Domain A (e.g., 100MHz) to Domain B (e.g., 33MHz), Domain B&#39;s clock has no idea when Domain A&#39;s data is changing. It is almost guaranteed that eventually, Domain B&#39;s clock will tick exactly at the moment Domain A&#39;s data is transitioning between a 0 and a 1.&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;This violates setup and hold times, causing the flip-flop to go metastable.&amp;nbsp;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;What is Metastability?&amp;nbsp;&lt;/h4&gt;&lt;p&gt;When a flip-flop goes metastable, it doesn&#39;t output a clean 1 or 0. Instead, the voltage gets &quot;stuck&quot; somewhere in the middle, hovering at an undefined voltage level.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Worse, it can oscillate between high and low before finally settling down.&amp;nbsp;&lt;/p&gt;&lt;p&gt;If this undefined, fluctuating signal propagates into your downstream logic, your chip will experience catastrophic failure. A state machine might jump to an illegal state, or a memory address might become corrupted. Because it depends on the precise, drifting alignment of two independent clocks, metastability bugs are incredibly difficult to reproduce in simulation—they only show up in actual silicon, completely freezing your hardware at random intervals.&amp;nbsp;&lt;/p&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;The Practical Solution: The 2-Flop Synchronizer&lt;/h4&gt;&lt;p&gt;While we cannot mathematically eliminate the probability of a flip-flop going metastable, we can increase the MTBF (Mean Time Between Failures) from a few seconds to billions of years.&amp;nbsp;&lt;/p&gt;&lt;p&gt;The standard industry practice for crossing a single-bit control signal is the 2-Flop Synchronizer.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h8OG50Q-ux-OcXIyFKt2Ret6LxVu101K2YYtBNkpOdPMbqVL_BL0K_ErC4qFG4Sxcp3a42NHFbQ2GturkJ79vjoyAQJGFqBdwh21myHddBpoQMhSWS36t3Jb1mzsImpyZ1CsddroOSJuKLqAJy6r7gCHJl2PfTmWU3Xa0Kj1ebSnhbMtA68ztOCKuBUp/s2816/2-flop-cdc.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1536&quot; data-original-width=&quot;2816&quot; height=&quot;219&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h8OG50Q-ux-OcXIyFKt2Ret6LxVu101K2YYtBNkpOdPMbqVL_BL0K_ErC4qFG4Sxcp3a42NHFbQ2GturkJ79vjoyAQJGFqBdwh21myHddBpoQMhSWS36t3Jb1mzsImpyZ1CsddroOSJuKLqAJy6r7gCHJl2PfTmWU3Xa0Kj1ebSnhbMtA68ztOCKuBUp/w400-h219/2-flop-cdc.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Here is how it works:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;The First Flop: The incoming asynchronous signal is fed into the first flip-flop in the destination domain. When a setup/hold violation occurs, this flop will go metastable.&amp;nbsp;&lt;/li&gt;&lt;li&gt;The Waiting Game: The signal is given an entire clock cycle to resolve. Physics dictates that metastable states naturally want to collapse to a stable 1 or 0 eventually.&amp;nbsp;&lt;/li&gt;&lt;li&gt;The Second Flop: By the time the next clock edge arrives, the first flop has almost certainly resolved to a stable state. The second flip-flop then safely captures this stable value and passes it into the rest of the destination clock domain.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;When 2-Flop Synchronizers Fail&amp;nbsp;&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;While great for single bits (like an enable or reset signal), 2-flop synchronizers cannot be used for multi-bit data buses.&amp;nbsp;&lt;/p&gt;&lt;p&gt;If you try to pass a 32-bit memory address through 32 parallel 2-flop synchronizers, the bits will resolve at slightly different speeds due to microscopic variations in the silicon. The destination domain might read a corrupted mix of the old address and the new address.&amp;nbsp;&lt;/p&gt;&lt;p&gt;For multi-bit data, VLSI engineers use different CDC techniques:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Asynchronous FIFOs: Using memory buffers with Gray code pointers to safely pass data words between domains.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Handshaking Protocols: Using single-bit req (request) and ack (acknowledge) synchronized signals to tell the destination domain when a multi-bit data bus is stable and safe to read.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://vlsicoding.blogspot.com/feeds/2289554378488513815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vlsicoding.blogspot.com/2026/08/httpsvlsicoding.blogspot.com202608metastability-and-cdc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default/2289554378488513815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5089218759750162037/posts/default/2289554378488513815'/><link rel='alternate' type='text/html' href='http://vlsicoding.blogspot.com/2026/08/httpsvlsicoding.blogspot.com202608metastability-and-cdc.html' title='Understanding Metastability and Clock Domain Crossing (CDC)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h8OG50Q-ux-OcXIyFKt2Ret6LxVu101K2YYtBNkpOdPMbqVL_BL0K_ErC4qFG4Sxcp3a42NHFbQ2GturkJ79vjoyAQJGFqBdwh21myHddBpoQMhSWS36t3Jb1mzsImpyZ1CsddroOSJuKLqAJy6r7gCHJl2PfTmWU3Xa0Kj1ebSnhbMtA68ztOCKuBUp/s72-w400-h219-c/2-flop-cdc.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>