diff --git a/.gitignore b/.gitignore
index c300c925e6..79e892f73a 100755
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,6 @@ Gemfile.lock
 .jekyll-metadata
 *ads.txt.bkp*
 .sass-cache
+
+# Files generated by `npm install`
+node_modules/
diff --git a/.sass-cache/a8ae1fbf8fe3cf0ae44282e4f927a25624204c54/main.scssc b/.sass-cache/a8ae1fbf8fe3cf0ae44282e4f927a25624204c54/main.scssc
new file mode 100644
index 0000000000..6db4f74c3a
Binary files /dev/null and b/.sass-cache/a8ae1fbf8fe3cf0ae44282e4f927a25624204c54/main.scssc differ
diff --git a/Gemfile b/Gemfile
index a0483f2507..cdaf1cdfe5 100755
--- a/Gemfile
+++ b/Gemfile
@@ -1,2 +1,2 @@
 source 'https://rubygems.org'
-gem 'github-pages', '>= 30'
\ No newline at end of file
+gem 'github-pages', '>= 30'
diff --git a/README.md b/README.md
index 8bf538b48f..b63ccaf775 100755
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ The site uses [Jekyll](https://jekyllrb.com/), which is written in the [Ruby](ht
 For CSS, the site uses Laravel Mix to build CSS from Sass (scss-flavored) source files. Under the hood Laravel Mix uses Webpack.
 
 1. follow the instructions at https://nodejs.dev to install Node.js for your OS
-1. `npm install` to install packages for building assets
+1. `npm ci` to install packages for building assets
 1. build assets as described below
 
 <a name="running-jekyll-locally" />
diff --git a/_data/sidebar.yml b/_data/sidebar.yml
index 1e5e598541..27cea0a38e 100644
--- a/_data/sidebar.yml
+++ b/_data/sidebar.yml
@@ -234,6 +234,15 @@
   isSectionHeader: 0
   sectionTitle:
   subgroup: 1
+  
+- sbSecId: 1
+  title: Meta Bid Filtering
+  link: /dev-docs/examples/meta-bid-filtering.html
+  Item: 1
+  isHeader: 0
+  isSectionHeader: 0
+  sectionTitle:
+  subgroup: 1
 
 - sbSecId: 1
   title: Troubleshooting
@@ -1713,6 +1722,14 @@
   sectionTitle:
   subgroup: 3
 
+- sbSecId: 5
+  title: Programmatic Guaranteed
+  link: /prebid-server/features/pg/pbs-pg-idx.html
+  isHeader: 0
+  isSectionHeader: 0
+  sectionTitle:
+  subgroup: 3
+
 - sbSecId: 5
   title: Developers
   link:
@@ -2022,3 +2039,41 @@
   isSectionHeader: 0
   sectionTitle:
   subgroup: 0
+
+#-------------- Prebid Identity --------------|
+
+- sbSecId: 9
+  title:
+  link:
+  isHeader: 0
+  isSectionHeader: 1
+  sectionTitle: Prebid Identity
+  sectionId: prebid-identity
+  subgroup: 1000
+  sbCollapseId: prebid-identity
+
+- sbSecId: 9
+  title: invis
+  link:
+  isHeader: 1
+  headerId: invis
+  isSectionHeader: 0
+  sectionTitle:
+  subgroup: 0
+
+- sbSecId: 9
+  title: Identity Overview
+  link: /identity/prebid-identity.html
+  isHeader: 0
+  isSectionHeader: 0
+  sectionTitle:
+  subgroup: 0
+
+- sbSecId: 9
+  title: SharedID
+  link: /identity/sharedid.html
+  isHeader: 0
+  isSectionHeader: 0
+  sectionTitle:
+  subgroup: 0
+
diff --git a/_includes/adops/adops-gam-video-setup.html b/_includes/adops/adops-gam-video-setup.html
index b8091311fc..1825186ccd 100644
--- a/_includes/adops/adops-gam-video-setup.html
+++ b/_includes/adops/adops-gam-video-setup.html
@@ -39,16 +39,11 @@ <h2 id="line-item-setup">Line Item Setup</h2>
 <h2 id="creative-setup">Creative Setup</h2>
 
 When setting up video creatives, it's important to understand where the VAST XML is stored for each of your bidders. The most common place to store VAST XML is AppNexus' cache, but some bidders (such as RubiconProject and SpotX) use their own cache services. To support such
-bidders, you will need to choose one of the following approaches:
-<ul>
-<li>Create a separate line item for each bidder.</li>
-<li>Include a creative for each cache service utilized by your implementation.</li>
-<li>Use the <a href="/dev-docs/publisher-api-reference/setConfig.html#setConfig-vast-cache">ignoreBidderCacheKey</a> option on setConfig({cache}).</li>
-</ul>
+bidders, see the <a href="#multiple_cache_locations">Multiple Cache Locations</a> instructions below.
 
 <h3 id="creative-single-cache">Single Cache Location</h3>
 
-If you only use bidders that provide full VAST responses, no special setup is needed. Otherwise, do the following:
+If you only use bidders that provide full VAST responses, do the following:
 
 <p>1. For each line item you create, click on the <b>Creatives</b> tab, click the <b>ADD CREATIVE</b> button, and choose the size you're entering.</p>
 
@@ -75,12 +70,15 @@ <h3 id="creative-single-cache">Single Cache Location</h3>
    URL failed. This is expected, since the creative URL above points
    to a server-side asset cache hosted by Prebid Server.</p>
 
-<p>4. Set the <b>Duration</b> to <b>1</b>.</p>
+<p>4. Set the <b>Duration</b> to the max length of video ads you serve. If you don't know what the max length is, set it to <b>30</b>.</p>
+
+<p class="alert alert-warning">In the past Prebid used to recommend setting duration to 0 or 1, but GAM now requires that this field reflect the actual video ad length. Since ads flowing through header bidding are going to differ in length, choose a value that matches a common ad length like 15 or 30.</p>
 
 <p>The resulting creative should look something like the following:</p>
 
 <p><img src="/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png" alt="Google Ad Manager Video Creative Setup"/></p>
 
+<a name="multiple_cache_locations">
 <h3 id="creative-multiple-cache">Multiple Cache Locations</h3>
 
 If you're utilizing any bidders that cache their own VAST, you have two options:
diff --git a/_includes/video/pb-cp-fp.html b/_includes/video/pb-cp-fp.html
index 0444eaa4b5..f4b5cfe875 100644
--- a/_includes/video/pb-cp-fp.html
+++ b/_includes/video/pb-cp-fp.html
@@ -32,18 +32,19 @@
 	      sizes: [640,480],
 	      mediaTypes: {
 	        video: {
-	          context: "instream"
+                  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
 	        }
 	      },
 	      bids: [
 	        {
 	          bidder: 'appnexus',
 	          params: {
-	            placementId: '13232361', // Add your own placement id here
-	            video: {
-	              skipppable: true,
-	              playback_method: ['auto_play_sound_off']
-	            }
+	            placementId: '13232361' // Add your own placement id here
 	          }
 	        }
 	      ]
diff --git a/_includes/video/pb-cp-jw.html b/_includes/video/pb-cp-jw.html
index 5022a065ce..566fefd3e3 100644
--- a/_includes/video/pb-cp-jw.html
+++ b/_includes/video/pb-cp-jw.html
@@ -14,18 +14,19 @@
 		    sizes: [640,480],
 		    mediaTypes: {
 		      video: {
-		        context: "instream"
+			context: 'instream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
 		      }
 		    },
 		    bids: [
 		      {
 		        bidder: 'appnexus',
 		        params: {
-		          placementId: '13232361', // Add your own placement id here
-		          video: {
-		            skipppable: true,
-		            playback_method: ['auto_play_sound_off']
-		          }
+		          placementId: '13232361'  // Add your own placement id here
 		        }
 		      }
 		    ]
diff --git a/_includes/video/pb-cp-kl.html b/_includes/video/pb-cp-kl.html
index 550acf1c26..424012f23b 100644
--- a/_includes/video/pb-cp-kl.html
+++ b/_includes/video/pb-cp-kl.html
@@ -15,18 +15,19 @@
 		    sizes: [640,480],
 		    mediaTypes: {
 		      video: {
-		        context: "instream"
+                        context: 'instream',
+                        playerSize: [640, 480],
+                        mimes: ['video/mp4'],
+                        protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                        playbackmethod: [2],
+                        skip: 1
 		      }
 		    },
 		    bids: [
 		      {
 		        bidder: 'appnexus',
 		        params: {
-		          placementId: '13232361', // Add your own placement id here
-		          video: {
-		            skipppable: true,
-		            playback_method: ['auto_play_sound_off']
-		          }
+		          placementId: '13232361' // Add your own placement id here
 		        }
 		      }
 		    ]
diff --git a/_includes/video/pb-cp-vjs.html b/_includes/video/pb-cp-vjs.html
index ace1da2c41..3e7689ac10 100644
--- a/_includes/video/pb-cp-vjs.html
+++ b/_includes/video/pb-cp-vjs.html
@@ -21,18 +21,19 @@
 	      sizes: [640,480],
 	      mediaTypes: {
 	        video: {
-	          context: "instream"
+                  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
 	        }
 	      },
 	      bids: [
 	        {
 	          bidder: 'appnexus',
 	          params: {
-	            placementId: '13232361', // Add your own placement id here
-	            video: {
-	              skipppable: true,
-	              playback_method: ['auto_play_sound_off']
-	            }
+	            placementId: '13232361'  // Add your own placement id here
 	          }
 	        }
 	      ]
diff --git a/_includes/video/pb-is-amp.html b/_includes/video/pb-is-amp.html
index cd06ed2dac..b3cc436870 100644
--- a/_includes/video/pb-is-amp.html
+++ b/_includes/video/pb-is-amp.html
@@ -21,18 +21,18 @@
 	        code: 'video1',
 	        mediaTypes: {
 	            video: {
-	                playerSize: [640, 480],
-	                context: 'instream'
+			context: 'instream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
 	            }
 	        },
 	        bids: [{
 	            bidder: 'appnexus',
 	            params: {
-	                placementId: 13232361, // Add your own placement id here
-	                video: {
-	                    skipppable: true,
-	                    playback_method: ['auto_play_sound_off']
-	                }
+	                placementId: 13232361 // Add your own placement id here
 	            }
 	        }]
 	    };
diff --git a/_includes/video/pb-is-app.html b/_includes/video/pb-is-app.html
index ee2fbadfe8..710fedf75f 100644
--- a/_includes/video/pb-is-app.html
+++ b/_includes/video/pb-is-app.html
@@ -22,18 +22,18 @@
     	    code: 'video1',
     	    mediaTypes: {
     	        video: {
-    	            playerSize: [640, 480],
-    	            context: 'instream'
+                  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
     	        }
     	    },
     	    bids: [{
     	        bidder: 'appnexus',
     	        params: {
-    	            placementId: 13232361, // Add your own placement id here<br>
-    	            video: {
-    	                skipppable: true,
-    	                playback_method: ['auto_play_sound_off']
-    	            }
+    	            placementId: 13232361 // Add your own placement id here<br>
     	        }
     	    }]
     	};
diff --git a/_includes/video/pb-is-bc.html b/_includes/video/pb-is-bc.html
index 936a0714fe..0c53878f4a 100644
--- a/_includes/video/pb-is-bc.html
+++ b/_includes/video/pb-is-bc.html
@@ -36,18 +36,18 @@
 			code: 'video1',
 			mediaTypes: {
 				video: {
-					playerSize: [640, 480],
-					context: 'instream'
+				  context: 'instream',
+				  playerSize: [640, 480],
+				  mimes: ['video/mp4'],
+				  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+				  playbackmethod: [2],
+				  skip: 1
 				}
 			},
 			bids: [{
 				bidder: 'appnexus',
 				params: {
-					placementId: iosDevice ? 13239390 : 13232361, // Add your own placement id here. Note, skippable video is not supported on iOS 
-					video: {
-						skipppable: true,
-						playback_method: ['auto_play_sound_off']
-					}
+					placementId: iosDevice ? 13239390 : 13232361 // Add your own placement id here.
 				}
 			}]
 		};
diff --git a/_includes/video/pb-is-br.html b/_includes/video/pb-is-br.html
index 01f73abc68..57f9c2ca54 100644
--- a/_includes/video/pb-is-br.html
+++ b/_includes/video/pb-is-br.html
@@ -29,18 +29,19 @@
 		  sizes: [640,480],
 		  mediaTypes: {
 		    video: {
-		      context: "instream"
+			context: 'instream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
 		    }
 		  },
 		  bids: [
 		    {
 		      bidder: 'appnexusAst',
 		      params: {
-		        placementId: '13232361', // Add your own placement id here
-		        video: {
-		          skipppable: true,
-		          playback_method: ['auto_play_sound_off']
-		        }
+		        placementId: '13232361' // Add your own placement id here
 		      }
 		    }
 		  ]
diff --git a/_includes/video/pb-is-fp.html b/_includes/video/pb-is-fp.html
index c8a8174ffe..8f79f4f4f8 100644
--- a/_includes/video/pb-is-fp.html
+++ b/_includes/video/pb-is-fp.html
@@ -55,18 +55,19 @@
         sizes: [640,480],
         mediaTypes: {
           video: {
-            context: "instream"
+                context: 'instream',
+                playerSize: [640, 480],
+                mimes: ['video/mp4'],
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
           }
         },
         bids: [
           {
             bidder: 'appnexus',
             params: {
-              placementId: '13232361', // Add your own placement id here
-              video: {
-                skipppable: true,
-                playback_method: ['auto_play_sound_off']
-              }
+              placementId: '13232361' // Add your own placement id here
             }
           }
         ]
diff --git a/_includes/video/pb-is-jw01.html b/_includes/video/pb-is-jw01.html
index 8d7f8a1e1b..ce30dd1c7e 100644
--- a/_includes/video/pb-is-jw01.html
+++ b/_includes/video/pb-is-jw01.html
@@ -24,18 +24,18 @@
 	        code: 'video1',
 	        mediaTypes: {
 	            video: {
-	                playerSize: [640, 480],
-	                context: 'instream'
+			context: 'instream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
 	            }
 	        },
 	        bids: [{
 	            bidder: 'appnexus',
 	            params: {
-	                placementId: 13232361, // Add your own placement id here
-	                video: {
-	                    skipppable: true,
-	                    playback_method: ['auto_play_sound_off']
-	                }
+	                placementId: 13232361  // Add your own placement id here
 	            }
 	        }]
 	    };
diff --git a/_includes/video/pb-is-jw02.html b/_includes/video/pb-is-jw02.html
index 3f4edb0865..09c498ba4a 100644
--- a/_includes/video/pb-is-jw02.html
+++ b/_includes/video/pb-is-jw02.html
@@ -28,18 +28,18 @@
 	        code: 'video1',
 	        mediaTypes: {
 	            video: {
-	                playerSize: [640, 480],
-	                context: 'instream'
+			context: 'instream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
 	            }
 	        },
 	        bids: [{
 	            bidder: 'appnexus',
 	            params: {
-	                placementId: 13232361, // Add your own placement id here
-	                video: {
-	                    skipppable: true,
-	                    playback_method: ['auto_play_sound_off']
-	                }
+	                placementId: 13232361  // Add your own placement id here
 	            }
 	        }]
 	    };
diff --git a/_includes/video/pb-is-kl.html b/_includes/video/pb-is-kl.html
index 0a5c440ec9..3aa790f73c 100644
--- a/_includes/video/pb-is-kl.html
+++ b/_includes/video/pb-is-kl.html
@@ -42,18 +42,18 @@
 	        code: 'video1',
 	        mediaTypes: {
 	            video: {
-	                playerSize: [640, 480],
-	                context: 'instream'
+			context: 'instream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
 	            }
 	        },
 	        bids: [{
 	            bidder: 'appnexus',
 	            params: {
-	                placementId: 13232361, // Add your own placement ID here
-	                video: {
-	                    skippable: true,
-	                    playback_method: ['auto_play_sound_off']
-	                }
+	                placementId: 13232361  // Add your own placement ID here
 	            }
 	        }]
 	    };
diff --git a/_includes/video/pb-is-ol.html b/_includes/video/pb-is-ol.html
index 8a275bb4a9..8508fc3d19 100644
--- a/_includes/video/pb-is-ol.html
+++ b/_includes/video/pb-is-ol.html
@@ -66,18 +66,18 @@
             code: 'video1',
             mediaTypes: {
                 video: {
-                    playerSize: [640, 480],
-                    context: 'instream'
+                  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
                 }
             },
             bids: [{
                 bidder: 'appnexus',
                 params: {
-                    placementId: iosDevice ? 13239390 : 13232361, 
-                    video: {
-                        skippable: true,
-                        playback_method: ['auto_play_sound_off']
-                    }
+                    placementId: iosDevice ? 13239390 : 13232361
                 }
             }]
         };
diff --git a/_includes/video/pb-is-vjs.html b/_includes/video/pb-is-vjs.html
index 483bcad30f..1d928f4bc4 100644
--- a/_includes/video/pb-is-vjs.html
+++ b/_includes/video/pb-is-vjs.html
@@ -26,18 +26,18 @@
                 code: 'video1',
                 mediaTypes: {
                     video: {
-                        playerSize: [640, 480],
-                        context: 'instream'
+			context: 'instream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
                     }
                 },
                 bids: [{
                     bidder: 'appnexus',
                     params: {
-                        placementId: 13232361,
-                        video: {
-                            skippable: true,
-                            playback_method: ['auto_play_sound_off']
-                        }
+                        placementId: 13232361
                     }
                 }]
             };
diff --git a/_includes/video/pb-os-dfp.html b/_includes/video/pb-os-dfp.html
index ff5aa40f0c..39dd69f517 100644
--- a/_includes/video/pb-os-dfp.html
+++ b/_includes/video/pb-os-dfp.html
@@ -23,19 +23,19 @@
                 code: 'video1',
                 mediaTypes: {
                     video: {
-                        playerSize: [640, 480],
                         context: 'outstream'
+                	playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
                     }
                 },
                 bids: [
                     {
                         bidder: 'appnexus',
                         params: {
-                            placementId: 13232385,
-                            video: {
-                                skippable: true,
-                                playback_method: ['auto_play_sound_off']
-                            }
+                            placementId: 13232385
                         }
                     }
                 ]
diff --git a/_includes/video/pb-os-nas.html b/_includes/video/pb-os-nas.html
index ea94495c0c..51bebd75aa 100644
--- a/_includes/video/pb-os-nas.html
+++ b/_includes/video/pb-os-nas.html
@@ -17,18 +17,18 @@
 	        code: 'video1',
 	        mediaTypes: {
 	            video: {
-	                playerSize: [640, 480],
-	                context: 'outstream'
+	                context: 'outstream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
 	            }
 	        },
 	        bids: [{
 	            bidder: 'appnexus',
 	            params: {
-	                placementId: 13232385,
-	                video: {
-	                    skippable: true,
-	                    playback_method: ['auto_play_sound_off']
-	                }
+	                placementId: 13232385
 	            }
 	        }]
         }];
diff --git a/_includes/video/pbs-br.html b/_includes/video/pbs-br.html
index 845e7aa6b2..f1f2294f55 100644
--- a/_includes/video/pbs-br.html
+++ b/_includes/video/pbs-br.html
@@ -39,21 +39,18 @@
             code: 'video1',
             mediaTypes: {
                 video: {
-                    playerSize: [640, 480],
-                    context: 'instream',
-                    mimes: ['video/mp4'],
-                    protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                    playbackmethod: [2]
+                  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
                 }
             },
             bids: [{
                 bidder: 'appnexus',
                 params: {
-                    placementId: 13232361, // Add your own placement id here
-                    video: {
-                        skippable: true,
-                        playback_method: ['auto_play_sound_off']
-                    }
+                    placementId: 13232361 // Add your own placement id here
                 }
             }]
         };
@@ -66,7 +63,6 @@
                 cache: {
                     url: 'https://prebid.adnxs.com/pbc/v1/cache'
                 },
-                debug: true,
                 enableSendAllBids: true,
                 s2sConfig: {
                     endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction',
diff --git a/_includes/video/pbs-jw01.html b/_includes/video/pbs-jw01.html
index 1b49546f54..bd40af8000 100644
--- a/_includes/video/pbs-jw01.html
+++ b/_includes/video/pbs-jw01.html
@@ -33,21 +33,18 @@
                 code: 'video1',
                 mediaTypes: {
                     video: {
-                        playerSize: [640, 480],
-                        context: 'instream',
-                        mimes: ['video/mp4'],
-                        protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                        playbackmethod: [2]
+			context: 'instream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
                     }
                 },
                 bids: [{
                     bidder: 'appnexus',
                     params: {
-                        placementId: 13232361, // Add your own placement id here.
-                        video: {
-                            skippable: true,
-                            playback_method: ['auto_play_sound_off']
-                        }
+                        placementId: 13232361  // Add your own placement id here.
                     }
                 }]
             };
@@ -60,7 +57,6 @@
                     cache: {
                         url: 'https://prebid.adnxs.com/pbc/v1/cache'
                     },
-                    debug: true,
                     s2sConfig: {
                         endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction',
                         enabled: true,
diff --git a/_includes/video/pbs-jw02.html b/_includes/video/pbs-jw02.html
index f23c1111e8..da4a45d0f5 100644
--- a/_includes/video/pbs-jw02.html
+++ b/_includes/video/pbs-jw02.html
@@ -43,21 +43,18 @@
                 code: 'video1',
                 mediaTypes: {
                     video: {
-                        playerSize: [640, 480],
-                        context: 'instream',
-                        mimes: ['video/mp4'],
-                        protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                        playbackmethod: [2]
+			context: 'instream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
                     }
                 },
                 bids: [{
                     bidder: 'appnexus',
                     params: {
-                        placementId: 13232361, // Add your own placement id here
-                        video: {
-                            skippable: true,
-                            playback_method: ['auto_play_sound_off']
-                        }
+                        placementId: 13232361  // Add your own placement id here
                     }
                 }]
             };
@@ -70,7 +67,6 @@
                     cache: {
                         url: 'https://prebid.adnxs.com/pbc/v1/cache'
                     },
-                    debug: true,
                     enableSendAllBids: true,
                     s2sConfig: {
                         endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction',
diff --git a/_includes/video/pbs-kl.html b/_includes/video/pbs-kl.html
index bd1488402f..19d842bc59 100644
--- a/_includes/video/pbs-kl.html
+++ b/_includes/video/pbs-kl.html
@@ -38,21 +38,18 @@
             code: 'video1',
             mediaTypes: {
                 video: {
-                    playerSize: [640, 480],
-                    context: 'instream',
-                    mimes: ['video/mp4'],
-                    protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                    playbackmethod: [2]
+                  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
                 }
             },
             bids: [{
                 bidder: 'appnexus',
                 params: {
-                    placementId: 13232361, // Add your own placement id here.
-                    video: {
-                        skippable: true,
-                        playback_method: ['auto_play_sound_off']
-                    }
+                    placementId: 13232361  // Add your own placement id here.
                 }
             }]
         };
@@ -65,7 +62,6 @@
                 cache: {
                     url: 'https://prebid.adnxs.com/pbc/v1/cache'
                 },
-                debug: true,
                 s2sConfig: {
                     endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction',
                     enabled: true,
diff --git a/_includes/video/pbs-oy.html b/_includes/video/pbs-oy.html
index fdb8cd6629..73a73206aa 100644
--- a/_includes/video/pbs-oy.html
+++ b/_includes/video/pbs-oy.html
@@ -72,17 +72,14 @@
                     context: 'instream',
                     mimes: ['video/mp4'],
                     protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                    playbackmethod: [2]
+                    playbackmethod: [2],
+                    skip: 1
                 }
             },
             bids: [{
                 bidder: 'appnexus',
                 params: {
-                    placementId: 13232361, // Add your own placement id here.
-                    video: {
-                        skippable: true,
-                        playback_method: ['auto_play_sound_off']
-                    }
+                    placementId: 13232361 // Add your own placement id here.
                 }
             }]
         };
@@ -95,7 +92,6 @@
                 cache: {
                     url: 'https://prebid.adnxs.com/pbc/v1/cache'
                 },
-                debug: true,
                 s2sConfig: {
                     endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction',
                     enabled: true,
diff --git a/_includes/video/pbs-vjs.html b/_includes/video/pbs-vjs.html
index 515ff8e426..4619df3be2 100644
--- a/_includes/video/pbs-vjs.html
+++ b/_includes/video/pbs-vjs.html
@@ -48,21 +48,18 @@
             code: 'video1',
             mediaTypes: {
                 video: {
-                    playerSize: [640, 480],
-                    context: 'instream',
-                    mimes: ['video/mp4'],
-                    protocols: [1, 2, 3, 4, 5, 6],
-                    playbackmethod: [2]
+                  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
                 }
             },
             bids: [{
                 bidder: 'appnexus',
                 params: {
-                    placementId: 13232361, // Add your own placement id here.
-                    video: {
-                        skippable: true,
-                        playback_method: ['auto_play_sound_off']
-                    }
+                    placementId: 13232361  // Add your own placement id here.
                 }
             }]
         };
@@ -75,7 +72,6 @@
                 cache: {
                     url: 'https://prebid.adnxs.com/pbc/v1/cache'
                 },
-                debug: true,
                 s2sConfig: {
                     endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction',
                     enabled: true,
diff --git a/_layouts/example.html b/_layouts/example.html
index dc97cef97a..c917458838 100644
--- a/_layouts/example.html
+++ b/_layouts/example.html
@@ -43,19 +43,11 @@ <h4>This page contains:</h4>
           </ul>
         </p>
 
-        <p>
-          On the JSFiddle example below, click <strong>Result</strong> to see the result.
-        </p>
-
-        <p>
-          Click <strong>Edit in JSFiddle</strong> to open the example in a new tab.
-        </p>
-
         <p>
           For tips and troubleshooting info, see:
           <ul>
             <li>
-              <a href="{{site.github.url}}/dev-docs/troubleshooting-tips.html">Tips for Troubleshooting</a>
+              <a href="/troubleshooting/troubleshooting-guide.html">Troubleshooting Guide</a>
             </li>
             <li>
               <a href="{{site.github.url}}/dev-docs/common-issues.html">Common Issues</a>
@@ -71,6 +63,14 @@ <h4>This page contains:</h4>
           </div>
         </div>
 
+	<p></p>
+        <p>
+          On the JSFiddle example below:
+	    <ul><li>click 'Result' to see the output of the page.</li>
+            <li>Click 'Edit in JSFiddle' to open the example in a new tab.</li></ul>
+        </p>
+
+
         <div class="row">
           <!-- JSFiddle -->
           <div id="jsfiddle" class="col-md-12">
diff --git a/_layouts/home.html b/_layouts/home.html
index 070823ba92..71f7092e2f 100644
--- a/_layouts/home.html
+++ b/_layouts/home.html
@@ -42,6 +42,14 @@ <h1>Prebid Documentation</h1>
           <p class="mt-4"><a href="/prebid-mobile/download.html">Download Mobile SDK</a></p>
         </div>
       </div>
+      <div class="card text-center">
+        <div class="card-body">
+          <div class="card-media"><img src="/assets/images/user-identity.png" width=100 alt="Prebid User Identity Icon"></div>
+          <div class="card-title"><h3>Prebid User Identity</h3></div>
+          <p class="mb-4">Supporting the open web while respecting user privacy.</p>
+          <a href="/identity/prebid-identity.html" class="btn btn-outline-brand">View Docs</a>
+        </div>
+      </div>
     </div>
 
     <div class="row text-center mt-7">
diff --git a/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png b/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png
index 851fbabf76..bb7b93c607 100644
Binary files a/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png and b/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png differ
diff --git a/assets/images/logos/criteo-logo.png b/assets/images/logos/criteo-logo.png
index 154a84a52c..b0f345438f 100644
Binary files a/assets/images/logos/criteo-logo.png and b/assets/images/logos/criteo-logo.png differ
diff --git a/assets/images/blog/analytics/bidrate-by-date.png b/assets/images/overview/analytics/bidrate-by-date.png
similarity index 100%
rename from assets/images/blog/analytics/bidrate-by-date.png
rename to assets/images/overview/analytics/bidrate-by-date.png
diff --git a/assets/images/blog/analytics/cpm-histogram.png b/assets/images/overview/analytics/cpm-histogram.png
similarity index 100%
rename from assets/images/blog/analytics/cpm-histogram.png
rename to assets/images/overview/analytics/cpm-histogram.png
diff --git a/assets/images/blog/analytics/loadtime-histogram.png b/assets/images/overview/analytics/loadtime-histogram.png
similarity index 100%
rename from assets/images/blog/analytics/loadtime-histogram.png
rename to assets/images/overview/analytics/loadtime-histogram.png
diff --git a/assets/images/blog/analytics/revenue-by-date.png b/assets/images/overview/analytics/revenue-by-date.png
similarity index 100%
rename from assets/images/blog/analytics/revenue-by-date.png
rename to assets/images/overview/analytics/revenue-by-date.png
diff --git a/assets/images/blog/analytics/timeout-by-date.png b/assets/images/overview/analytics/timeout-by-date.png
similarity index 100%
rename from assets/images/blog/analytics/timeout-by-date.png
rename to assets/images/overview/analytics/timeout-by-date.png
diff --git a/assets/images/blog/experiments/ad-load-time.png b/assets/images/overview/experiments/ad-load-time.png
similarity index 100%
rename from assets/images/blog/experiments/ad-load-time.png
rename to assets/images/overview/experiments/ad-load-time.png
diff --git a/assets/images/blog/experiments/page-load-time.png b/assets/images/overview/experiments/page-load-time.png
similarity index 100%
rename from assets/images/blog/experiments/page-load-time.png
rename to assets/images/overview/experiments/page-load-time.png
diff --git a/assets/images/blog/experiments/revenue.png b/assets/images/overview/experiments/revenue.png
similarity index 100%
rename from assets/images/blog/experiments/revenue.png
rename to assets/images/overview/experiments/revenue.png
diff --git a/assets/images/blog/line-item-creative.png b/assets/images/overview/line-item-creative.png
similarity index 100%
rename from assets/images/blog/line-item-creative.png
rename to assets/images/overview/line-item-creative.png
diff --git a/assets/images/blog/postbid-diagram.png b/assets/images/overview/postbid-diagram.png
similarity index 100%
rename from assets/images/blog/postbid-diagram.png
rename to assets/images/overview/postbid-diagram.png
diff --git a/assets/images/partners/tech/criteo.png b/assets/images/partners/tech/criteo.png
index 8d4f5e2322..b0f345438f 100644
Binary files a/assets/images/partners/tech/criteo.png and b/assets/images/partners/tech/criteo.png differ
diff --git a/assets/images/prebid-server/pg/pg-arch-1.png b/assets/images/prebid-server/pg/pg-arch-1.png
new file mode 100644
index 0000000000..9dd267d668
Binary files /dev/null and b/assets/images/prebid-server/pg/pg-arch-1.png differ
diff --git a/assets/images/prebid-server/pg/pg-arch-2.png b/assets/images/prebid-server/pg/pg-arch-2.png
new file mode 100644
index 0000000000..777c7d8ea8
Binary files /dev/null and b/assets/images/prebid-server/pg/pg-arch-2.png differ
diff --git a/assets/images/prebid-server/pg/pg-bad-delivery.png b/assets/images/prebid-server/pg/pg-bad-delivery.png
new file mode 100644
index 0000000000..d65208e82d
Binary files /dev/null and b/assets/images/prebid-server/pg/pg-bad-delivery.png differ
diff --git a/assets/images/prebid-server/pg/pg-good-delivery.png b/assets/images/prebid-server/pg/pg-good-delivery.png
new file mode 100644
index 0000000000..f5f6568700
Binary files /dev/null and b/assets/images/prebid-server/pg/pg-good-delivery.png differ
diff --git a/assets/images/prebid-server/pg/pg-metrics.png b/assets/images/prebid-server/pg/pg-metrics.png
new file mode 100644
index 0000000000..6ba0ef05eb
Binary files /dev/null and b/assets/images/prebid-server/pg/pg-metrics.png differ
diff --git a/assets/images/prebid-server/stored-requests-amp.png b/assets/images/prebid-server/stored-requests-amp.png
new file mode 100644
index 0000000000..426a5bce4f
Binary files /dev/null and b/assets/images/prebid-server/stored-requests-amp.png differ
diff --git a/assets/images/prebid-server/stored-requests-app.png b/assets/images/prebid-server/stored-requests-app.png
new file mode 100644
index 0000000000..9b0868d37a
Binary files /dev/null and b/assets/images/prebid-server/stored-requests-app.png differ
diff --git a/assets/images/sharedid5.png b/assets/images/sharedid5.png
new file mode 100644
index 0000000000..ee38138acb
Binary files /dev/null and b/assets/images/sharedid5.png differ
diff --git a/assets/images/user-identity.png b/assets/images/user-identity.png
new file mode 100644
index 0000000000..d737d17693
Binary files /dev/null and b/assets/images/user-identity.png differ
diff --git a/debugging/debugging.md b/debugging/debugging.md
index 47c4ba2a5c..5c88a7050b 100644
--- a/debugging/debugging.md
+++ b/debugging/debugging.md
@@ -21,4 +21,3 @@ benefit from implementation improvements.
 Further Reading
 
 + [Prebid.js Troubleshooting Guide]({{site.github.url}}/dev-docs/prebid-troubleshooting-guide.html)
-+ [Prebid.js Troubleshooting Tips]({{site.github.url}}/dev-docs/troubleshooting-tips.html)
diff --git a/dev-docs/add-rtd-submodule.md b/dev-docs/add-rtd-submodule.md
index 34865611de..f025d6f5ad 100644
--- a/dev-docs/add-rtd-submodule.md
+++ b/dev-docs/add-rtd-submodule.md
@@ -92,7 +92,7 @@ In order to let RTD-core know where to find the functions in your sub-module, cr
 | name  | string  | required | must match the name provided by the publisher in the on-page config | n/a |
 |  init | function | required | defines the function that does any auction-level initialization required | config, userConsent |
 |  getTargetingData  | function | optional | defines a function that provides ad server targeting data to RTD-core | adUnitArray, config, userConsent |
-|  getBidRequestData  | function | optional | defines a function that provides ad server targeting data to RTD-core | reqBidsConfigObj, callback, config, userConsent  |
+|  getBidRequestData  | function | optional | defines a function that provides bid request data to RTD-core | reqBidsConfigObj, callback, config, userConsent  |
 |  onAuctionInitEvent | function | optional | listens to the AUCTION_INIT event and calls a sub-module function that lets it inspect and/or update the auction | auctionDetails, config, userConsent |
 |  onAuctionEndEvent | function |optional | listens to the AUCTION_END event and calls a sub-module function that lets it know when auction is done | auctionDetails, config, userConsent |
 |  onBidResponseEvent | function |optional | listens to the BID_RESPONSE event and calls a sub-module function that lets it know when a bid response has been collected | bidResponse, config, userConsent |
diff --git a/dev-docs/adunit-reference.md b/dev-docs/adunit-reference.md
index 70078ee052..f8be5d59ad 100644
--- a/dev-docs/adunit-reference.md
+++ b/dev-docs/adunit-reference.md
@@ -74,6 +74,7 @@ See the table below for the list of properties in the `mediaTypes` object of the
 | Name    | Scope    | Type                                  | Description                                                                             |
 |---------+----------+---------------------------------------+-----------------------------------------------------------------------------------------|
 | `sizes` | Required | Array[Number] or Array[Array[Number]] | All sizes this ad unit can accept.  Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. |
+| `pos`  | Optional | Integer                                | OpenRTB page position value: 0=unknown, 1=above-the-fold, 3=below-the-fold, 4=header, 5=footer, 6=sidebar, 7=full-screen   |
 | `name`  | Optional | String                                | Name for this banner ad unit.  Can be used for testing and debugging.                   |
 
 <a name="adUnit.mediaTypes.native" />
@@ -184,7 +185,9 @@ The `native` object contains the following properties that correspond to the ass
 {: .table .table-bordered .table-striped }
 | Name             | Scope       | Type                   | Description                                                                                                                                                         |
 |------------------+-------------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `context`        | Optional    | String                 | The video context, either `'instream'`, `'outstream'`, or `'adpod'` (for long-form videos).  Example: `context: 'outstream'`                                                                                           |
+| `pos`  | Optional | Integer                                | OpenRTB page position value: 0=unknown, 1=above-the-fold, 3=below-the-fold, 4=header, 5=footer, 6=sidebar, 7=full-screen   |
+| `context`        | Recommended    | String                 | The video context, either `'instream'`, `'outstream'`, or `'adpod'` (for long-form videos).  Example: `context: 'outstream'`. Defaults to 'instream'. |
+| `placement`        | Recommended    | Integer                 | 1=in-stream, 2=in-banner, 3=in-article, 4=in-feed, 5=interstitial/floating. **Highly recommended** because some bidders require more than context=outstream. |
 | `playerSize`     | Optional    | Array[Integer,Integer] | The size (width, height) of the video player on the page, in pixels.  Example: `playerSize: [640, 480]`                                                                                                  |
 | `api`            | Recommended | Array[Integer]         | List of supported API frameworks for this impression.  If an API is not explicitly listed, it is assumed not to be supported.  For list, see [OpenRTB spec][openRTB].                                                  |
 | `mimes`          | Recommended | Array[String]          | Content MIME types supported, e.g., `"video/x-ms-wmv"`, `"video/mp4"`. **Required by OpenRTB when using [Prebid Server][pbServer]**.                                                                                   |
@@ -210,10 +213,6 @@ enabled; only applicable if the ad is skippable., see [OpenRTB spec][openRTB].
 | `pos`      | Optional    | Integer         | Ad position on screen, see [OpenRTB spec][openRTB].           |
 | `playbackend`      | Optional    | Integer         | The event that causes playback to end, see [OpenRTB spec][openRTB].           |
 
-
-
-
-
 If `'video.context'` is set to `'adpod'` then the following parameters are also available.  
 
 {: .table .table-bordered .table-striped }
@@ -286,10 +285,10 @@ pbjs.addAdUnits({
         video: {
             context: 'instream',
             playerSize: [640, 480],
-	    w: 640,
-	    h: 480,
-	    skip: 1,
-	    playbackmethod: [2]
+            mimes: ['video/mp4'],
+            protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+            playbackmethod: [2],
+            skip: 1
         },
     },
     bids: [{
diff --git a/dev-docs/analytics/appnexus.md b/dev-docs/analytics/appnexus.md
deleted file mode 100644
index b02a5bb76a..0000000000
--- a/dev-docs/analytics/appnexus.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-layout: analytics
-title: Appnexus
-description: Appnexus Analytics Adapter
-modulecode: appnexus
-prebid_member: true
-enable_download: false
----
-
-#### Registration
-
-Please visit []() for more information.
-
diff --git a/dev-docs/analytics/bydata.md b/dev-docs/analytics/bydata.md
new file mode 100644
index 0000000000..9c6438e975
--- /dev/null
+++ b/dev-docs/analytics/bydata.md
@@ -0,0 +1,32 @@
+---
+layout: analytics
+title: byData
+description: byData Analytics Adapter
+modulecode: bydata 
+prebid_member: false
+--- 
+
+#### Registration
+
+The byData Analytics adapter requires setup and approval from the
+byData team. Please visit [https://bydata.com/](https://bydata.com/) for more information.
+
+#### Analytics Options
+
+{: .table .table-bordered .table-striped }
+| Parameter | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| clientId | Required  | String | The byData Client ID  | `asc10001` | 
+| logFrequency | Optional  | Int | Sample rate  | 100 |   
+  
+### Example Configuration 
+
+```js 
+    pbjs.enableAnalytics({
+        provider: "bydata",  
+        options: {
+            clientId:'asc10001',   // please contact byData team to get a clientId for yourself 
+            logFrequency : 100,    // Default - 1%       
+        }
+    });
+``` 
diff --git a/dev-docs/analytics/id5.md b/dev-docs/analytics/id5.md
new file mode 100644
index 0000000000..220fb175ad
--- /dev/null
+++ b/dev-docs/analytics/id5.md
@@ -0,0 +1,38 @@
+---
+layout: analytics
+title: ID5
+description: ID5 Analytics Adapter
+modulecode: id5Analytics
+gdpr_supported: true
+usp_supported: true
+prebid_member: true
+gvl_id: 131
+enable_download: false
+---
+
+#### Registration
+
+The ID5 Analytics Adapter is free to use during our Beta period, but requires a simple registration with ID5. Please visit [id5.io/solutions](https://id5.io/solutions#publishers) to sign up and request your ID5 Partner Number to get started. If you're already using the ID5 Universal ID, you may use your existing Partner Number with the analytics adapter.
+
+The ID5 privacy policy is at [https://id5.io/platform-privacy-policy](https://id5.io/platform-privacy-policy).
+
+#### Analytics Options
+
+{: .table .table-bordered .table-striped }
+| Parameter | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| provider | Required | String | The name of this module: `id5Analytics` | `id5Analytics` |
+| options.partnerId | Required | Number | This is the ID5 Partner Number obtained from registering with ID5. | `1234` |
+| options.eventsToTrack | Optional | Array of strings | Overrides the set of tracked events | `['auctionEnd','bidWon']` |
+
+
+### Example Configuration
+
+```javascript
+pbjs.enableAnalytics({
+    provider: 'id5Analytics',
+    options: {
+        partnerId: 173    // change to the Partner Number you received from ID5
+    }
+});
+```
diff --git a/dev-docs/analytics/malltv.md b/dev-docs/analytics/malltv.md
new file mode 100644
index 0000000000..afd6256816
--- /dev/null
+++ b/dev-docs/analytics/malltv.md
@@ -0,0 +1,33 @@
+---
+layout: analytics
+title: MallTv
+description: MallTv Analytics Adapter
+modulecode: malltvAnalytics
+enable_download: true
+---
+
+#### Registration
+
+This is currently a private adapter
+
+#### Analytics Options
+
+{: .table .table-bordered .table-striped }
+| Parameter | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| provider | Required | String | The name of this module: `malltvAnalytics` | `malltvAnalytics` |
+| options.propertyId | Required | String | This is the property id of the website where this adapter is being used. | `123456` |
+| options.server | Optional | String | Overrides the server used for sending analytics | `https://central.mall.tv/analytics` |
+
+
+### Example Configuration
+
+```javascript
+pbjs.enableAnalytics({
+    provider: 'malltvAnalytics',
+    options: {
+        propertyId: '123456',
+        server: 'https://central.mall.tv/analytics'
+    }
+});
+```
diff --git a/dev-docs/bidder-adaptor.md b/dev-docs/bidder-adaptor.md
index 738f0b5a77..6550c9f546 100644
--- a/dev-docs/bidder-adaptor.md
+++ b/dev-docs/bidder-adaptor.md
@@ -376,6 +376,7 @@ The `interpretResponse` function will be called when the browser has received th
             brandId: BRAND_ID,
             brandName: BRAND_NAME,
             dchain: DEMAND_CHAIN_OBJECT,
+	    demandSource: DEMAND_SOURCE
             mediaType: MEDIA_TYPE,
             networkId: NETWORK_ID,
             networkName: NETWORK_NAME,
@@ -421,11 +422,23 @@ The parameters of the `bidResponse` object are:
 | `meta.advertiserDomains`     | Optional                                    | Array of Advertiser Domains for the landing page(s). This is an array to align with the OpenRTB 'adomain' field.    | `["advertisera.com"]`     |
 | `meta.brandId`     | Optional                                    | Bidder-specific Brand ID (some advertisers may have many brands)                                                                                                   | 4444                    |
 | `meta.brandName`     | Optional                                    | Brand Name                                   | `"BrandB"`                          |
+| `meta.demandSource`     | Optional                                    | Demand Source (Some adapters may functionally serve multiple SSPs or exchanges, and this would specify which)                                  | `"SourceB"`                          
 | `meta.dchain`     | Optional                                    | Demand Chain Object                                   | `{ 'ver': '1.0', 'complete': 0, 'nodes': [ { 'asi': 'magnite.com', 'bsid': '123456789', } ] }`                          |
 | `meta.primaryCatId`     | Optional                                    | Primary [IAB category ID](https://www.iab.com/guidelines/iab-quality-assurance-guidelines-qag-taxonomy/)               |  `"IAB-111"`                         |
 | `meta.secondaryCatIds`     | Optional                                    | Array of secondary IAB category IDs      | `["IAB-222","IAB-333"]`       |
 | `meta.mediaType`     | Optional                                  | "banner", "native", or "video" - this should be set in scenarios where a bidder responds to a "banner" mediaType with a creative that's actually a video (e.g. outstream) or native. | `"native"`  |
 
+#### Resolve OpenRTB Macros in the Creatives
+
+If your endpoint can return creatives with OpenRTB macros, your adapter
+should resolve them.
+
+Prebid will resolve the AUCTION_PRICE macro, but it will be after currency conversion and any bid adjustments. This differs from how OpenRTB defines this value as being the clearing price in the 
+bid currency. Header Bidding is a first-price auction, the best candidate for
+"clearing price" is the original bid itself.
+
+Prebid won't resolve any other macros in the creative (e.g. AUCTION_ID, AUCTION_CURRENCY).
+
 <a name="bidder-adaptor-Registering-User-Syncs" />
 
 ### Registering User Syncs
@@ -631,7 +644,14 @@ Video ad units have a publisher-defined video context, which can be either `'ins
 ...
 mediaTypes: {
     video: {
-        context: 'outstream'
+        context: 'outstream',
+	playerSize: [640, 480],
+	mimes: ['video/mp4'],
+	protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+	playbackmethod: [2],
+	skip: 1
+        // video params must be read from here in place of
+        // or instead of bidder-specific parameters
     },
 },
 ...
diff --git a/dev-docs/bidders/1ad4good.md b/dev-docs/bidders/1ad4good.md
index fdfc47a99b..eb05910d97 100644
--- a/dev-docs/bidders/1ad4good.md
+++ b/dev-docs/bidders/1ad4good.md
@@ -4,6 +4,7 @@ title: 1ad4good
 description: Prebid One Ad for Good(1ad4good.org) Bidder Adaptor
 pbjs: true
 biddercode: 1ad4good
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/7xbid.md b/dev-docs/bidders/7xbid.md
index b2ad7fa519..64e6abf1f4 100644
--- a/dev-docs/bidders/7xbid.md
+++ b/dev-docs/bidders/7xbid.md
@@ -5,6 +5,7 @@ description: Prebid 7xbid Bidder Adaptor
 pbjs: true
 biddercode: 7xbid
 media_types: banner, native
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/aardvark.md b/dev-docs/bidders/aardvark.md
index dd9c8429db..685014b350 100644
--- a/dev-docs/bidders/aardvark.md
+++ b/dev-docs/bidders/aardvark.md
@@ -9,6 +9,7 @@ usp_supported: true
 schain_supported: true
 userIds: unifiedId
 gvl_id: 52
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/aceex.md b/dev-docs/bidders/aceex.md
new file mode 100644
index 0000000000..23da889ad2
--- /dev/null
+++ b/dev-docs/bidders/aceex.md
@@ -0,0 +1,27 @@
+---
+layout: bidder
+title: Aceex
+description: Prebid Aceex Bidder Adaptor
+biddercode: aceex
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+userId: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+media_types: banner, video, native
+safeframes_ok: true
+bidder_supports_deals: true
+pbjs: false
+pbs: true
+---
+
+### Note:
+
+The Example Bidding adapter requires setup before beginning. Please contact us at tech@aceex.com
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `accountid`      | required | Endpoint id | `'hash'`    | `string` |
diff --git a/dev-docs/bidders/adagio.md b/dev-docs/bidders/adagio.md
index 4476a3bf4e..529051555c 100644
--- a/dev-docs/bidders/adagio.md
+++ b/dev-docs/bidders/adagio.md
@@ -6,12 +6,14 @@ pbjs: true
 biddercode: adagio
 media_types: banner, native, video
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, pubProvidedId, sharedId, unifiedId
+getFloor: true
 gdpr_supported: true
 usp_supported: true
 coppa_supported: true
 schain_supported: true
 gvl_id: 617
-prebid_member: true,
+prebid_member: true
+pbs: true
 ---
 
 ### Note
diff --git a/dev-docs/bidders/adblender.md b/dev-docs/bidders/adblender.md
index 94830f05fe..6f3edddf6a 100644
--- a/dev-docs/bidders/adblender.md
+++ b/dev-docs/bidders/adblender.md
@@ -13,6 +13,7 @@ usp_supported: true
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name   | Scope    | Description | Example | Type     |
-|--------|----------|-------------|---------|----------|
-| `zone` | required |             |         | `string` |
+| Name          | Scope    | Description                                                                                                      | Example                                | Type     |
+|---------------|----------|------------------------------------------------------------------------------------------------------------------|----------------------------------------|----------|
+| `zone`        | required | The unique identifier of the ad placement. Could be obtained from the AdBlender UI or from your account manager. | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` |
+| `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option.                       | {key1: value2, key2: value2}           | `object` |
diff --git a/dev-docs/bidders/adbookpsp.md b/dev-docs/bidders/adbookpsp.md
new file mode 100644
index 0000000000..333c258630
--- /dev/null
+++ b/dev-docs/bidders/adbookpsp.md
@@ -0,0 +1,200 @@
+---
+layout: bidder
+title: AdBookPSP
+description: Prebid AdBookPSP Bidder Adapter
+biddercode: adbookpsp
+media_types: banner, video
+gdpr_supported: true
+prebid_member: false
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+pbjs: true
+pbs: false
+---
+
+*NOTE*: The AdBookPSP Bidder Adapter requires setup and approval before use. The adapter uses custom targeting keys that require a dedicated Google Ad Manager setup to work. Please reach out to your AdbookPSP representative for more details. 
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+|Name|Scope|Description|Example|Type|
+|----|-----|-----------|-------|----|
+|`orgId`|optional|Org ID listed in the Deal File|`abc123`|`string`|
+|`placementId`|optional|Placement ID listed in the Deal File|`abc123`|`string`|
+
+Each adUnit with `adbookpsp` adapter has to have either `placementId` or `orgId` set.
+
+```js
+var adUnits = [
+  {
+    bids: [
+      {
+        bidder: 'adbookpsp',
+        params: {
+          placementId: 'example-placement-id',
+          orgId: 'example-org-id',
+        },
+      },
+    ],
+  },
+];
+```
+
+Alternatively, `orgId` can be set globally while configuring prebid.js:
+
+```js
+pbjs.setConfig({
+  adbookpsp: {
+    orgId: 'example-org-id',
+  },
+});
+```
+
+*NOTE*: adUnit orgId will take precedence over the globally set orgId.
+
+#### Banner parameters
+
+Required:
+
+- sizes
+
+Example configuration:
+
+```js
+var adUnits = [
+  {
+    code: 'div-1',
+    mediaTypes: {
+      banner: {
+        sizes: [[300, 250]],
+      },
+    }
+  },
+];
+```
+
+#### Video parameters
+
+Required:
+
+- context
+- mimes
+- playerSize
+
+Additionaly, all `Video` object parameters described in chapter `3.2.7` of the [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) can be passed as bidder params.
+
+Example configuration:
+
+```js
+var adUnits = [
+  {
+    code: 'div-1',
+    mediaTypes: {
+      video: {
+        context: 'outstream',
+        mimes: ['video/mp4', 'video/x-flv'],
+        playerSize: [400, 300],
+        protocols: [2, 3],
+      },
+    },
+    bids: [
+      {
+        bidder: 'adbookpsp',
+        params: {
+          placementId: 'example-placement-id',
+          video: {
+            placement: 2,
+          },
+        },
+      },
+    ],
+  },
+];
+```
+
+*NOTE*: Supporting outstream video requires the publisher to set up a renderer as described [in the Prebid docs](https://docs.prebid.org/dev-docs/show-outstream-video-ads.html).
+
+#### Testing params
+
+To test the adapter, either `placementId: 'example-placement-id'` or `orgId: 'example-org-id'` can be used. 
+
+*NOTE*: If any adUnit uses the testing params, all adUnits will receive testing responses.
+
+Example adUnit configuration:
+
+```js
+var adUnits = [
+  {
+    code: 'div-1',
+    mediaTypes: {
+      banner: {
+        sizes: [[300, 250]],
+      },
+    },
+    bids: [
+      {
+        bidder: 'adbookpsp',
+        params: {
+          placementId: 'example-placement-id',
+        },
+      },
+    ],
+  },
+];
+```
+
+Example google publisher tag configuration:
+
+```js
+googletag
+  .defineSlot('/22094606581/example-adbookPSP', sizes, 'div-1')
+  .addService(googletag.pubads());
+```
+
+### Configuration
+
+Setting of the `orgId` can be done in the `pbjs.setConfig()` call. If this is the case, both `orgId` and `placementId` become optional. Remember to only call `pbjs.setConfig()` once as each call overwrites anything set in previous calls.
+
+Enabling iframe based user syncs is also encouraged.
+
+```javascript
+pbjs.setConfig({
+  adbookpsp: {
+    orgId: 'example-org-id',
+    winTrackingEnabled: true,
+  },
+  userSync: {
+    filterSettings: {
+      iframe: {
+        bidders: '*',
+        filter: 'include',
+      },
+    },
+  },
+});
+```
+
+### Privacy
+
+GDPR and US Privacy are both supported by default.
+
+#### Event tracking
+
+This adapter tracks win events for it’s bids. This functionality can be disabled by adding `winTrackingEnabled: false` to the adapter configuration:
+
+```js
+pbjs.setConfig({
+  adbookpsp: {
+    winTrackingEnabled: false,
+  },
+});
+```
+
+#### COPPA support
+
+COPPA support can be enabled for all the visitors by changing the config value:
+
+```js
+config.setConfig({ coppa: true });
+```
diff --git a/dev-docs/bidders/adbutler.md b/dev-docs/bidders/adbutler.md
index 950a1258c6..2eab4bbadd 100644
--- a/dev-docs/bidders/adbutler.md
+++ b/dev-docs/bidders/adbutler.md
@@ -4,6 +4,7 @@ title: AdButler
 description: Prebid AdButler Bidder Adaptor
 pbjs: true
 biddercode: adbutler
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/adf.md b/dev-docs/bidders/adf.md
index c0d2d9ef72..674a46caa9 100644
--- a/dev-docs/bidders/adf.md
+++ b/dev-docs/bidders/adf.md
@@ -1,7 +1,7 @@
 ---
 layout: bidder
 title: AdformOpenRTB
-description: Prebid Adf Bidder Adaptor
+description: Prebid Adform Bidder Adaptor
 biddercode: adf
 media_types: banner, native, video
 gdpr_supported: true
@@ -9,6 +9,7 @@ usp_supported: true
 prebid_member: true
 pbjs: true
 pbs: true
+schain_supported: true
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, sharedId, unifiedId
 gvl_id: 50
 prevBiddercode: adformOpenRTB
@@ -38,3 +39,7 @@ pbjs.setConfig({
   }
 });
 ```
+
+### Multi-format ads
+
+Adform bid adapter does not support multi-format ad unit setup. Please use [twin ad unit codes]({{site.baseurl}}/dev-docs/adunit-reference.html#twin-adunit-codes) to enable multi-format auctions.
diff --git a/dev-docs/bidders/adfinity.md b/dev-docs/bidders/adfinity.md
index 733b0a7c76..4d80018fb9 100644
--- a/dev-docs/bidders/adfinity.md
+++ b/dev-docs/bidders/adfinity.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: adfinity
 media_types: banner, video, native
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/adform.md b/dev-docs/bidders/adform.md
index 51bc8f5ac0..1f796f0876 100644
--- a/dev-docs/bidders/adform.md
+++ b/dev-docs/bidders/adform.md
@@ -11,8 +11,10 @@ pbjs: true
 pbs: true
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, sharedId, unifiedId
 gvl_id: 50
+pbjs_version_notes: not in 5.x
 ---
 
+**Adform bid adapter is deprecated since Prebid 5.0. Please refer to [AdformOpenRTB adapter](#adf) documentation to fetch bids from Adform demand sources.**
 
 ### Bid Params
 
diff --git a/dev-docs/bidders/adgeneration.md b/dev-docs/bidders/adgeneration.md
index 8ff03a0902..812cfbecd7 100644
--- a/dev-docs/bidders/adgeneration.md
+++ b/dev-docs/bidders/adgeneration.md
@@ -6,6 +6,7 @@ pbjs: true
 pbs: true
 biddercode: adgeneration
 media_types: native
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/adglare.md b/dev-docs/bidders/adglare.md
index 0824b74adb..b938a28ca3 100644
--- a/dev-docs/bidders/adglare.md
+++ b/dev-docs/bidders/adglare.md
@@ -5,6 +5,7 @@ description: Prebid Adapter for AdGlare Ad Server
 pbjs: true
 biddercode: adglare
 media_types: banner
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/adhash.md b/dev-docs/bidders/adhash.md
index 8d76c088b1..93b4dd61bc 100644
--- a/dev-docs/bidders/adhash.md
+++ b/dev-docs/bidders/adhash.md
@@ -5,6 +5,7 @@ description: Prebid AdHash Bidder Adapter
 pbjs: true
 biddercode: adhash
 safeframes_ok: false
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note
@@ -26,4 +27,4 @@ Please note that a number of AdHash functionalities are not supported in the Pre
 | Name          | Scope    | Description  | Example                                        | Type     |
 |---------------|----------|--------------|------------------------------------------------|----------|
 | `publisherId` | required | Publisher ID | `'0x1234567890123456789012345678901234567890'` | `string` |
-| `platformURL` | required | Platform URL | `'https://adhash.org/p/struma/'`               | `string` |
+| `platformURL` | required | Platform URL | `'https://adhash.org/p/example/'`              | `string` |
diff --git a/dev-docs/bidders/adkernel.md b/dev-docs/bidders/adkernel.md
index e820bd1587..83dc8256c2 100644
--- a/dev-docs/bidders/adkernel.md
+++ b/dev-docs/bidders/adkernel.md
@@ -12,6 +12,7 @@ coppa_supported: true
 pbs_app_supported: true
 gvl_id: 14
 schain_supported: true
+userIds: all
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/adlive.md b/dev-docs/bidders/adlive.md
index a9c20c6834..d67f6791b0 100644
--- a/dev-docs/bidders/adlive.md
+++ b/dev-docs/bidders/adlive.md
@@ -4,6 +4,7 @@ title: Adlive
 description: adlive bid adapter
 pbjs: true
 biddercode: adlive
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/adman.md b/dev-docs/bidders/adman.md
index f89a9ee3fd..04077daf73 100644
--- a/dev-docs/bidders/adman.md
+++ b/dev-docs/bidders/adman.md
@@ -7,7 +7,8 @@ pbs: true
 biddercode: adman
 gdpr_supported: true
 usp_supported: true
-media_types: banner, video
+media_types: banner, video, native
+userIds: uid2
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/admedia.md b/dev-docs/bidders/admedia.md
index 6a43c8b45d..2253e4eed2 100644
--- a/dev-docs/bidders/admedia.md
+++ b/dev-docs/bidders/admedia.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: admedia
 media_types: banner
 gdpr_supported: false
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/admixer.md b/dev-docs/bidders/admixer.md
index d2fa0061e5..564b39711d 100644
--- a/dev-docs/bidders/admixer.md
+++ b/dev-docs/bidders/admixer.md
@@ -15,6 +15,7 @@ gvl_id: 511
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name   | Scope    | Description | Example | Type     |
-|--------|----------|-------------|---------|----------|
-| `zone` | required |             |         | `string` |
+| Name          | Scope    | Description                                                                                                    | Example                                | Type     |
+|---------------|----------|----------------------------------------------------------------------------------------------------------------|----------------------------------------|----------|
+| `zone`        | required | The unique identifier of the ad placement. Could be obtained from the Admixer UI or from your account manager. | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` |
+| `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option.                     | {key1: value2, key2: value2}           | `object` |
diff --git a/dev-docs/bidders/adnuntius.md b/dev-docs/bidders/adnuntius.md
index 20278812e0..cdb2766ccd 100644
--- a/dev-docs/bidders/adnuntius.md
+++ b/dev-docs/bidders/adnuntius.md
@@ -5,29 +5,26 @@ description: Prebid Adnuntius Bidder Adaptor
 pbjs: true
 biddercode: adnuntius
 media_types: banner
-gdpr_supported: false
+gdpr_supported: true
 ---
 
-
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name        | Scope    | Description                                                          | Example  | Type     |
+| Name | Scope | Description | Example | Type |
 |-------------|----------|----------------------------------------------------------------------|----------|----------|
-| `auId`      | required | The ad unit ID `'0000000000072345'` leading zeros can be omitted.    | `string` |          |
-| `network`   | optional | Used if you want to make requests to multiple networks in adnuntius. | `string` |          |
-| `targeting` | optional | Targeting to be sent through to adnuntius with the request.          | `string` |          |
-
-
+| `auId` | required | The ad unit ID `'0000000000072345'` leading zeros can be omitted. | `'0000000000072345'` | `string` |
+| `network` | optional | Used if you want to make requests to multiple networks in adnuntius. | `'adnuntius'` | `string`|
+| `targeting` | optional | Targeting to be sent through to adnuntius with the request. | `{ c: ['prebids'] }` | `string`|
 
 #### Targeting
 
 The [Adnuntius Documentation](https://docs.adnuntius.com/adnuntius-advertising/requesting-ads/intro) provides detailed information on sending targeting data to the Adnuntius adserver.
 
-
 #### Example
 
 Here's an example of sending targeting information about categories to adnuntius via the bid request:
+
 ```
 {
     code: "0000000000072345",
@@ -50,3 +47,29 @@ Here's an example of sending targeting information about categories to adnuntius
     ]
 }
 ```
+
+### Sending segments to the ad server
+
+There's an option to send segment id in the bidder config that will be picked up and sent to the ad server. Below is an example on how to do this:
+
+```
+
+			pbjs.setBidderConfig({
+				bidders: ['adnuntius', 'bidderB'],
+				config: {
+					ortb2: {
+						user: {
+							data: [{
+								name: "adnuntius",
+								segment: [
+									{ id: "1" },
+									{ id: "2" }
+								]
+							}]
+						}
+					}
+				}
+			});
+
+´´´
+```
diff --git a/dev-docs/bidders/adpartner.md b/dev-docs/bidders/adpartner.md
index 76e28e3fb1..097e67e26a 100644
--- a/dev-docs/bidders/adpartner.md
+++ b/dev-docs/bidders/adpartner.md
@@ -5,7 +5,6 @@ description: Prebid AdPartner Bidder Adaptor
 pbjs: true
 biddercode: adpartner
 media_types: banner
-
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/adprime.md b/dev-docs/bidders/adprime.md
index 0b4025bee7..4452ddfc97 100644
--- a/dev-docs/bidders/adprime.md
+++ b/dev-docs/bidders/adprime.md
@@ -5,7 +5,8 @@ description: Prebid Adprime Bidder Adapter
 biddercode: adprime
 gdpr_supported: true
 usp_supported: true
-media_types: banner, video
+media_types: banner, video, native
+tcf2_supported: true
 pbjs: true
 pbs: true
 pbs_app_supported: true
@@ -22,4 +23,5 @@ The Adprime Bidding adapter requires setup before beginning. Please contact us a
 |---------------|----------|-----------------------|-----------|-----------|
 | `placementId`      | required | Adprime placement id         | `'1234asdf'`    | `string` |
 | `keywords`    | optional | page context keywords | ['car','sport'] | `array` |
+| `audiences`    | optional | publisher audiences | ['aud1','aud2'] | `array` |
 
diff --git a/dev-docs/bidders/adrelevantis.md b/dev-docs/bidders/adrelevantis.md
index d291678721..97ceab7c8a 100644
--- a/dev-docs/bidders/adrelevantis.md
+++ b/dev-docs/bidders/adrelevantis.md
@@ -25,12 +25,10 @@ Page content is analyzed at DOMContentLoaded event. The results (keywords and ca
 pbjs.setBidderConfig({
 	bidders: ['adrelevantis'],
 	config: {
-		fpd: {
+		ortb2: {
 			context: {
 				keywords: keywords,
-				data: {
-					category: categories
-				}
+				category: categories
 			}
 		}
 	}
diff --git a/dev-docs/bidders/adriver.md b/dev-docs/bidders/adriver.md
index 42193b57b4..3461aceb2c 100644
--- a/dev-docs/bidders/adriver.md
+++ b/dev-docs/bidders/adriver.md
@@ -5,6 +5,8 @@ description: Adriver adapter
 biddercode: adriver
 pbjs: true
 bidder_supports_deals: true
+userIds: sharedId, id5Id, uid2Id
+getFloor: true
 ---
 
 
diff --git a/dev-docs/bidders/adspend.md b/dev-docs/bidders/adspend.md
index f12eb9cf21..b238b57606 100644
--- a/dev-docs/bidders/adspend.md
+++ b/dev-docs/bidders/adspend.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: adspend
 media_types: banner
 gdpr_supported: false
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/adsyield.md b/dev-docs/bidders/adsyield.md
new file mode 100644
index 0000000000..f8e7b1b758
--- /dev/null
+++ b/dev-docs/bidders/adsyield.md
@@ -0,0 +1,18 @@
+---
+layout: bidder
+title: AdsYield
+description: Prebid AdsYield Bidder Adaptor
+pbjs: true
+biddercode: adsyield
+aliasCode: admixer
+media_types: video
+gdpr_supported: true
+usp_supported: true
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description                                                                                                      | Example                                | Type     |
+|---------------|----------|------------------------------------------------------------------------------------------------------------------|----------------------------------------|----------|
+| `zone`        | required | The unique identifier of the ad placement. Could be obtained from the AdsYield UI or from your account manager. | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` |
diff --git a/dev-docs/bidders/aduptech.md b/dev-docs/bidders/aduptech.md
index 00cc4aa5a3..2e1a092b21 100644
--- a/dev-docs/bidders/aduptech.md
+++ b/dev-docs/bidders/aduptech.md
@@ -2,23 +2,24 @@
 layout: bidder
 title: AdUp Technology
 description: Prebid Bidder Adapter for AdUp Technology
-pbjs: true
 biddercode: aduptech
-media_types: banner
 gdpr_supported: true
+gvl_id: 647
+media_types: banner, native
+pbjs: true
 ---
 
-### Note:
+### Registration
+
+To use, our bidding adapter requires proper setup, including an existing publisher account, as well as approval from AdUp Technology.<br/>For more information visit [www.adup-tech.com](https://www.adup-tech.com/en) or contact [info@adup-tech.com](mailto:info@adup-tech.com).
 
-The AdUp Technology bidding adapter requires setup and approval before beginning.
-For more information visit [www.adup-tech.com](https://www.adup-tech.com/) or contact [info@adup-tech.com](mailto:info@adup-tech.com).
 
 ### Bid params
 
 {: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example |
-| :--- | :---- | :---------- | :------ |
-| `publisher` | required | Unique publisher id | `'1234'` |
-| `placement` | required | Unique placement id per publisher | `'5678'` |
-| `query` | optional | Semicolon separated list of keywords | `'urlaub;ibiza;mallorca'` |
-| `adtest` | optional | Impressions and clicks will not be tracked if enabled | `true` |
+| Name | Scope | Description | Example | Type |
+| :--- | :---- | :---------- | :------ | :------ |
+| `publisher` | required | Unique publisher identifier. | `'prebid'` | `string` |
+| `placement` | required | Unique placement identifier per publisher. | `'1234'` | `string` |
+| `query` | optional | Semicolon separated list of keywords. | `'urlaub;ibiza;mallorca'` | `string` |
+| `adtest` | optional | Deactivates tracking of impressions and clicks.<br/>**Should only be used for testing purposes!** | `true` | `boolean` |
diff --git a/dev-docs/bidders/advenue.md b/dev-docs/bidders/advenue.md
index bb804ab89a..f2760d45b9 100644
--- a/dev-docs/bidders/advenue.md
+++ b/dev-docs/bidders/advenue.md
@@ -4,6 +4,7 @@ title: Advenue
 description: Prebid Advenue Bidder Adaptor
 pbjs: true
 biddercode: advenue
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/advertly.md b/dev-docs/bidders/advertly.md
index 02b989c7d8..2b3fc7d339 100644
--- a/dev-docs/bidders/advertly.md
+++ b/dev-docs/bidders/advertly.md
@@ -4,6 +4,7 @@ title: advertly
 description: Prebid ADVERTLY Bidder Adapter
 pbjs: true
 biddercode: advertly
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/aja.md b/dev-docs/bidders/aja.md
index 1fb854532f..11233433ec 100644
--- a/dev-docs/bidders/aja.md
+++ b/dev-docs/bidders/aja.md
@@ -2,22 +2,23 @@
 layout: bidder
 title: AJA
 description: Prebid AJA Bidder Adaptor
+userIds: criteo, unifiedId, imuid
 pbjs: true
 pbs: true
 biddercode: aja
 media_types: video, native
 ---
 
-### Note:
+### Note
 
 The AJA Bidding adaptor requires setup and approval before beginning. Please reach out to <ssp_support@aja-kk.co.jp> for more details
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name  | Scope    | Description         | Example    | Type     |
+| Name | Scope | Description | Example | Type |
 |-------|----------|---------------------|------------|----------|
-| `asi` | required | ad spot hash code   | `'123abc'` | `string` |
+| `asi` | required | ad spot hash code | `'123abc'` | `string` |
 
 ### Configuration
 
@@ -30,11 +31,11 @@ pbjs.setConfig({
   userSync: {
     filterSettings: {
       iframe: {
-        bidders: '*',      // '*' represents all bidders
-        filter: 'include'
-      }
-    }
-  }
+        bidders: "*", // '*' represents all bidders
+        filter: "include",
+      },
+    },
+  },
 });
 ```
 
@@ -44,8 +45,7 @@ For Prebid.js v1.14.0 and before:
 pbjs.setConfig({
   userSync: {
     iframeEnabled: true,
-    enabledBidders: ['aja']
-  }
+    enabledBidders: ["aja"],
+  },
 });
 ```
-
diff --git a/dev-docs/bidders/algorix.md b/dev-docs/bidders/algorix.md
new file mode 100644
index 0000000000..c9ebaa0fea
--- /dev/null
+++ b/dev-docs/bidders/algorix.md
@@ -0,0 +1,30 @@
+---
+layout: bidder
+title: AlgoriX
+description: Prebid AlgoriX Bidder Adapter
+biddercode: algorix
+gdpr_supported: false
+gvl_id:
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+media_types: banner, video, native
+pbjs: false
+pbs: true
+pbs_app_supported: true
+prebid_member: true
+---
+
+### Note:
+
+Algorix adapter requires setup and approval from the Algorix team, even for existing in-app developers and publishers. Please reach out to your account team or email to prebid@algorix.co for more information.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description   | Example                              | Type     |
+|---------------|----------|---------------|--------------------------------------|----------|
+| `sid`         | required | Sid           | `'30014'`                            | `string` |
+| `token`       | required | Token         | `'028bca2d3b5c4f0ba155fa34864b0c4d'` | `string` |
+
+Note: Prebid Server adapter only checks for and uses first imp bid params. All other imp bid params are ignored.
diff --git a/dev-docs/bidders/amx.md b/dev-docs/bidders/amx.md
index 15343ea274..bddf72a938 100644
--- a/dev-docs/bidders/amx.md
+++ b/dev-docs/bidders/amx.md
@@ -7,7 +7,7 @@ schain_supported: true
 gdpr_supported: true
 usp_supported: true
 coppa_supported: true
-userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId, amxId
 biddercode: amx
 safeframes_ok: true
 media_types: banner, video
diff --git a/dev-docs/bidders/aniview.md b/dev-docs/bidders/aniview.md
index 4ae7c6ce14..a51cc6f840 100644
--- a/dev-docs/bidders/aniview.md
+++ b/dev-docs/bidders/aniview.md
@@ -1,16 +1,19 @@
 ---
 layout: bidder
 title: ANIVIEW
-description: Prebid ANIVIEW Bidder Adaptor
+description: Prebid ANIVIEW Bidder Adapter
 pbjs: true
 biddercode: aniview
-media_types: video
+media_types: banner, video
 gdpr_supported: true
 usp_supported: true
+schain_supported: true
+safeframes_ok: true
+gvl_id: 780
 ---
 
 ### Note:
-For more information about [Aniview Ad Server](http://www.aniview.com/), please contact info@aniview.com.
+For more information about [Aniview Ad Server](https://www.aniview.com/), please contact info@aniview.com.
 
 ### Bid Params
 
@@ -19,3 +22,24 @@ For more information about [Aniview Ad Server](http://www.aniview.com/), please
 |------------------|----------|------------------|------------------------------|----------|
 | `AV_PUBLISHERID` | required | Publisher/Netid  | `'55b88d4a181f465b3e8b4567'` | `string` |
 | `AV_CHANNELID`   | required | Channel id       | `'5a5f17a728a06102d14c2718'` | `string` |
+
+### Test Parameters
+```
+videoAdUnit = [
+{
+  code: 'video1',
+  mediaTypes: {
+    video: {
+      playerSize: [[640, 480]],
+      context: 'outstream'
+    },
+  },
+  bids: [{
+    bidder: 'aniview',
+    params: {
+      AV_PUBLISHERID: '55b78633181f4603178b4568',
+      AV_CHANNELID: '5d19dfca4b6236688c0a2fc4'
+    }
+  }]
+}];
+```
diff --git a/dev-docs/bidders/apacdex.md b/dev-docs/bidders/apacdex.md
index 82abae394b..73af7e1fab 100644
--- a/dev-docs/bidders/apacdex.md
+++ b/dev-docs/bidders/apacdex.md
@@ -8,12 +8,167 @@ media_types: banner, video
 gdpr_supported: true
 schain_supported: true
 usp_supported: true
+userIds: all
+getFloor: true
 ---
 
+### Table of Contents
+
+- [Bid Params](#apacdex-bid-params)
+- [Geo Object](#apacdex-geo-object)
+- [Video Ad Unit](#apacdex-video-ad-unit)
+- [Sample Banner Ad Unit](#apacdex-sample-banner-ad-unit)
+- [Sample Video Ad Unit: Instream](#apacdex-sample-instream-ad-unit)
+- [Sample Video Ad Unit: Outstream](#apacdex-sample-outstream-ad-unit)
+
+<a name="apacdex-bid-params" />
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name        | Scope    | Description                                                                                                                    | Example    | Type     |
-|-------------|----------|--------------------------------------------------------------------------------------------------------------------------------|------------|----------|
-| `siteId`    | required | Publisher site ID from Apacdex                                                                                         | `'apacdex1234'` | `string` |
+|  Name         | Scope    | Description                                                                         | Example                                           | Type     |
+|---------------|----------|-------------------------------------------------------------------------------------|---------------------------------------------------|----------|
+| `placementId`*| required | Placement ID provided by Apacdex                                                    | `'plc100000'`                                     | `string` |
+| `siteId`*     | required | Publisher site ID from Apacdex                                                      | `'apacdex1234'`                                   | `string` |
+| `floorPrice`  | optional | CPM bidfloor in USD                                                                 | `0.03`                                            | `float`  |
+| `geo`         | optional | GEO data of device. See [Geo Object](#apacdex-geo-object) for details.              | `{"lat":17.98928,"lon":99.7741712,"accuracy":20}` | `object` |
+(*) Please do not use `placementId` and `siteId` at the same time.
+
+<a name="apacdex-geo-object" />
+
+### Geo Object
+
+If the publisher has GEO data of the user's device. Make it available through the geo audience so we can improve ad targeting, which means improving bids. The list of fields can be referenced in Section 3.2.19 from the [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) document.
+
+{: .table .table-bordered .table-striped }
+|  Name        | Scope    | Description                                                                                                                                                                                                                                                                                | Example         | Type      |
+|--------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|-----------|
+| `lat`        | required | Latitude from -90.0 to +90.0, where negative is south.                                                                                                                                                                                                                                     | `17.98928`      | `float`   |
+| `lon`        | required | Longitude from -180.0 to +180.0, where negative is west.                                                                                                                                                                                                                                   | `99.7741712`    | `float`   |
+| `accuracy`   | required | Estimated location accuracy in meters; recommended when lat/lon are specified and derived from a device’s location services (i.e., type = 1). Note that this is the accuracy as reported from the device. Consult OS specific documentation (e.g., Android, iOS) for exact interpretation. | `20`            | `integer` |
+| `lastfix`    | optional | Number of seconds since this geolocation fix was established. Note that devices may cache location data across multiple fetches. Ideally, this value should be from the time the actual fix was taken.                                                                                     | `30`            | `integer` |
+| `utcoffset`  | optional | Local time as the number +/- of minutes from UTC.                                                                                                                                                                                                                                          | `-420`          | `integer` |
+
+<a name="apacdex-video-ad-unit" />
+
+### Video Ad Unit
+
+Publishers declare video inventory by passing the following parameters via mediaTypes.video
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope              | Description                                                                                                                                                                                              | Example | Type      |
+|----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------|
+| `context` | required | instream or outstream |`"outstream"` | `string` |
+| `playerSize`| required | width, height of the player in pixels | `[640,360]` - will be translated to w and h in bid request | `array<integers>` |
+| `mimes` | recommended | List of content MIME types supported by the player (see openRTB v2.5 for options) | `["video/mp4"]`| `array<string>`|
+| `protocols` | recommended | Supported video bid response protocol values <br />1: VAST 1.0 <br />2: VAST 2.0 <br />3: VAST 3.0 <br />4: VAST 1.0 Wrapper <br />5: VAST 2.0 Wrapper <br />6: VAST 3.0 Wrapper <br />7: VAST 4.0 <br />8: VAST 4.0 Wrapper | `[2,3,5,6]` | `array<integers>`|
+| `api` | recommended | Supported API framework values: <br />1: VPAID 1.0 <br />2: VPAID 2.0 <br />3: MRAID-1 <br />4: ORMMA <br />5: MRAID-2 | `[2]` |  `array<integers>` |
+| `maxduration` | recommended | Maximum video ad duration in seconds. | `30` | `integer` |
+| `minduration` | recommended | Minimum video ad duration in seconds | `6` | `integer` |
+| `playbackmethod` | recommended | Playback methods that may be in use. Only one method is typically used in practice. (see openRTB v2.5 section 5.10 for options)| `[2]`| `array<integers>` |
+| `skip` | optional | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes. | `1` | `integer` |
+| `skipafter`| optional | Number of seconds a video must play before skipping is enabled; only applicable if the ad is skippable. | `6` | `integer`|
+| `minbitrate` | optional | Minimum bit rate in Kbps. | `300` | `integer` |
+| `maxbitrate` | optional | Maximum bit rate in Kbps. | `9600` | `integer` |
+| `startdelay`* | recommended | Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements.<br /> >0: Mid-Roll (value indicates start delay in second)<br /> 0: Pre-Roll<br />-1: Generic Mid-Roll<br />-2: Generic Post-Roll | `0` | `integer` |
+| `placement`* | recommended | Placement type for the impression. (see openRTB v2.5 section 5.9 for options) | `1` | `integer` |
+
+Lists of values are in the [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) documentation as referenced above.
+
+<a name="apacdex-sample-banner-ad-unit" />
+
+### Sample Banner Ad Unit
+```
+var adUnits = [
+  {
+    code: 'test-div',
+    mediaTypes: {
+      banner: {
+        sizes: [[300, 250], [300,600]]
+      }
+    },
+    bids: [
+      {
+          bidder: 'apacdex',
+          params: {
+              siteId: 'apacdex1234', // siteId provided by Apacdex
+              floorPrice: 0.01, // default is 0.01 if not declared
+          }
+      }
+    ]
+  }
+];
+```
+
+<a name="apacdex-sample-instream-ad-unit" />
+
+### Sample Video Ad Unit: Instream
+```
+var instreamAdUnit = {
+  code: 'test-div',
+  sizes: [[640, 480]],
+  mediaTypes: {
+    video: {
+      playerSize: [[640, 480]],
+      context: "instream"
+      api: [2],
+      placement: 1,
+      skip: 1,
+      linearity: 1,
+      minduration: 1,
+      maxduration: 120,
+      mimes: ["video/mp4", "video/x-flv", "video/x-ms-wmv", "application/vnd.apple.mpegurl", "application/x-mpegurl", "video/3gpp", "video/mpeg", "video/ogg", "video/quicktime", "video/webm", "video/x-m4v", "video/ms-asf", video/x-msvideo"],
+      playbackmethod: [6],
+      startdelay: 0,
+      protocols: [1, 2, 3, 4, 5, 6]
+    },
+  },
+  bids: [
+    {
+      bidder: 'apacdex',
+      params: {
+        siteId: 'apacdex1234', // siteId provided by Apacdex
+        floorPrice: 0.01, // default is 0.01 if not declared
+      }
+    }
+  ]
+};
+```
+mediaTypes.video object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document
+You must review all video parameters to ensure validity for your player and DSPs
+
+<a name="apacdex-sample-outstream-ad-unit" />
+
+### Sample Video Ad Unit: Outstream
+```
+var outstreamAdUnit = {
+  code: 'test-div',
+  sizes: [[410, 231]],
+  mediaTypes: {
+    video: {
+      playerSize: [[410, 231]],
+      context: "outstream"
+      api: [2],
+      placement: 5,
+      linearity: 1,
+      minduration: 1,
+      maxduration: 120,
+      mimes: ["video/mp4", "video/x-flv", "video/x-ms-wmv", "application/vnd.apple.mpegurl", "application/x-mpegurl", "video/3gpp", "video/mpeg", "video/ogg", "video/quicktime", "video/webm", "video/x-m4v", "video/ms-asf", video/x-msvideo"],
+      playbackmethod: [6],
+      startdelay: 0,
+      protocols: [1, 2, 3, 4, 5, 6]
+    },
+  },
+  bids: [
+    {
+      bidder: 'apacdex',
+      params: {
+        siteId: 'apacdex1234', // siteId provided by Apacdex
+        floorPrice: 0.01, // default is 0.01 if not declared
+      }
+    }
+  ]
+};
+```
+mediaTypes.video object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document
+You must review all video parameters to ensure validity for your player and DSPs
\ No newline at end of file
diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md
index 974601a06e..6e848d7215 100644
--- a/dev-docs/bidders/appnexus.md
+++ b/dev-docs/bidders/appnexus.md
@@ -49,7 +49,7 @@ All AppNexus (Xandr) placements included in a single call to `requestBids` must
 | `keywords`          | optional | A set of key-value pairs applied to all ad slots on the page.  Mapped to [buy-side segment targeting](https://monetize.xandr.com/docs/segment-targeting) (login required). Values can be empty. See [Passing Keys Without Values](#appnexus-no-value) below for examples. Note that to use keyword with the Prebid Server adapter, that feature must be enabled for your account by an AppNexus account manager. | `keywords: { genre: ['rock', 'pop'] }`                | `object`         |
 | `video`             | optional | Object containing video targeting parameters.  See [Video Object](#appnexus-video-object) for details.                                                                        | `video: { playback_method: ['auto_play_sound_off'] }` | `object`         |
 | `app`               | optional | Object containing mobile app parameters.  See the [App Object](#appnexus-app-object) for details.                                                                      | `app : { id: 'app-id'}`                               | `object`         |
-| `reserve`           | optional | Sets a floor price for the bid that is returned. If floors have been configured in the AppNexus Console, those settings will override what is configured here.                | `0.90`                                                | `float`          |
+| `reserve`           | optional | Sets a floor price for the bid that is returned. If floors have been configured in the AppNexus Console, those settings will override what is configured here unless 'Reserve Price Override' is checked. See [Xandr docs](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-a-floor-rule.html)                | `0.90`                                                | `float`          |
 | `position`          | optional | Identify the placement as above or below the fold.  Allowed values: Unknown: `unknown`; Above the fold: `above`; Below the fold: `below`                                      | `'above'`                                               | `string`        |
 | `trafficSourceCode` | optional | Specifies the third-party source of this impression.                                                                                                                          | `'my_traffic_source'`                                 | `string`         |
 | `supplyType`        | optional | Indicates the type of supply for this placement. Possible values are `web`, `mobile_web`, `mobile_app`                                                                        | `'web'`                                               | `string`         |
@@ -57,6 +57,7 @@ All AppNexus (Xandr) placements included in a single call to `requestBids` must
 | `pubClick`          | optional | Specifies a publisher-supplied URL for third-party click tracking. This is just a placeholder into which the publisher can insert their own click tracker. This parameter should be used for an unencoded tracker. This parameter is expected to be the last parameter in the URL. Please note that the click tracker placed in this parameter will only fire if the creative winning the auction is using AppNexus click tracking properly.                                  | `'http://click.adserver.com/'`                        | `string`         |
 | `extInvCode`        | optional | Specifies predefined value passed on the query string that can be used in reporting. The value must be entered into the system before it is logged.                           | `'10039'`                                             | `string`         |
 | `externalImpId`     | optional | Specifies the unique identifier of an externally generated auction.                                                                                                           | `'bacbab02626452b097f6030b3c89ac05'`                  | `string`         |
+| `generate_ad_pod_id`| optional | Signal to AppNexus to split impressions by ad pod and add unique ad pod id to each request. Specific to long form video endpoint only. Supported by Prebid Server, not Prebid JS.  | `true`                                                | `boolean`        |
 
 <a name="appnexus-video-object" />
 
diff --git a/dev-docs/bidders/aso.md b/dev-docs/bidders/aso.md
new file mode 100644
index 0000000000..c1e59bccab
--- /dev/null
+++ b/dev-docs/bidders/aso.md
@@ -0,0 +1,58 @@
+---
+layout: bidder
+title: Adserver.Online
+description: Prebid Adserver.Online Bidder Adapter
+biddercode: aso
+gdpr_supported: true
+usp_supported: true
+media_types: video
+safeframes_ok: true
+bidder_supports_deals: false
+pbjs: true
+pbs: false
+getFloor: true
+---
+### Note:
+
+For more information about [Adserver.Online](https://adserver.online), please contact support@adsrv.org.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `zone`        | required | Zone ID               | `73815`   | `integer` |
+
+### Test Parameters
+
+```js
+ var adUnit = {
+    code: 'unit1',
+    mediaTypes: {
+        banner: {
+            sizes: [[300, 250]]
+        }
+    },
+    bids: [
+        {
+            bidder: 'aso',
+            params: {
+                zone: 73815,
+            }
+        }
+    ]
+}
+```
+
+#### Video Caching
+
+Note that the Adserver.Online adapter expects a client-side Prebid Cache to be enabled for video bidding.
+
+```js
+pbjs.setConfig({
+    usePrebidCache: true,
+    cache: {
+        url: 'https://prebid.adnxs.com/pbc/v1/cache'
+    }
+});
+```
\ No newline at end of file
diff --git a/dev-docs/bidders/atomx.md b/dev-docs/bidders/atomx.md
index 65f2d28c39..378c2b37b0 100644
--- a/dev-docs/bidders/atomx.md
+++ b/dev-docs/bidders/atomx.md
@@ -4,6 +4,7 @@ title: Atomx
 description: Prebid Atomx Bidder Adaptor
 pbjs: true
 biddercode: atomx
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/audiencerun.md b/dev-docs/bidders/audiencerun.md
index b7d4a9fbcd..d582380046 100644
--- a/dev-docs/bidders/audiencerun.md
+++ b/dev-docs/bidders/audiencerun.md
@@ -8,11 +8,6 @@ media_types: banner
 gdpr_supported: true
 ---
 
-### Disclosure
-
-This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness
-of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381).
-
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/avantisvideo.md b/dev-docs/bidders/avantisvideo.md
index 2f1d2e72ee..bdc5ae4dd9 100644
--- a/dev-docs/bidders/avantisvideo.md
+++ b/dev-docs/bidders/avantisvideo.md
@@ -5,13 +5,15 @@ description: Avantis Video Bidder Adapter
 pbjs: true
 biddercode: avantisvideo
 aliasCode: aniview
-media_types: video
+media_types: banner, video
 gdpr_supported: true
 usp_supported: true
+schain_supported: true
+safeframes_ok: true
 ---
 
 ### Note:
-For more information about [Avantis Video](https://www.avantisvideo.com/).
+For more information about [Avantis Video](https://www.avantisvideo.com/), please contact contact@avantisvideo.com.
 
 ### Bid Params
 
diff --git a/dev-docs/bidders/axonix.md b/dev-docs/bidders/axonix.md
index 005c900d20..84ffe5dcd6 100644
--- a/dev-docs/bidders/axonix.md
+++ b/dev-docs/bidders/axonix.md
@@ -5,10 +5,12 @@ description: Axonix Prebid Adaptor
 biddercode: axonix
 media_types: banner, video
 pbjs: true
+pbs: true
+gvl_id: 678
 ---
 
 ### Prebid Server Note:
-The Axonix Bidding adapter requires setup before beginning. Please contact us at support+prebid@axonix.com.
+The Axonix Bidding adapter requires setup before beginning. Please contact us at support.axonix@emodoinc.com.
 
 ### Bid Params
 
diff --git a/dev-docs/bidders/beachfront.md b/dev-docs/bidders/beachfront.md
index 0a12f356e0..439bd85d1e 100644
--- a/dev-docs/bidders/beachfront.md
+++ b/dev-docs/bidders/beachfront.md
@@ -7,7 +7,7 @@ media_types: video
 getFloor: true
 gdpr_supported: true
 usp_supported: true
-userIds: unifiedId, identityLink, uid2
+userIds: unifiedId, identityLink, uid2, haloId
 schain_supported: true
 prebid_member: true
 pbjs: true
diff --git a/dev-docs/bidders/beop.md b/dev-docs/bidders/beop.md
new file mode 100644
index 0000000000..f1728716d5
--- /dev/null
+++ b/dev-docs/bidders/beop.md
@@ -0,0 +1,15 @@
+---
+layout: bidder
+title: BeOp
+description: BeOp Bidder Adaptor
+pbjs: true
+biddercode: beop
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description | Example | Type     |
+|---------------|----------|-------------|---------|----------|
+| `accountId` or `networkId` | required |  Your BeOp account ID   | `'5a8af500c9e77c00017e4cad'`   | `string` |
+| `currency`      | optional |  Your currency        |  `'EUR'` (default) or `'USD'`   | `string` |
diff --git a/dev-docs/bidders/between.md b/dev-docs/bidders/between.md
index c777572831..59eac200bd 100644
--- a/dev-docs/bidders/between.md
+++ b/dev-docs/bidders/between.md
@@ -29,7 +29,4 @@ usp_supported: true
 |---------------|----------|-------------|---------|----------|
 | `host` | required |  Between SSP host url prefix. Defines data center where requests will be sent. Choose the closest one to the prebid-server you are using. Allowed values: `lbs-eu1.ads`, `lbs-ru1.ads`, `lbs-asia1.ads`, `lbs-us-east1.ads` | `'lbs-eu1.ads'` | `string` |
 | `publisher_id` | required |  Publisher ID from Between SSP control panel | `'123'` | `string` |
-| `bid_floor` | optional | Minimum price acceptable for a bid. `0.00001` by default  | `0.05` | `float` |
-| `bid_floor_cur` | optional |  Bid floor currency. Allowed values: `USD`, `EUR`, `RUB` | `'USD'` | `string` |
-
 
diff --git a/dev-docs/bidders/bidfluence.md b/dev-docs/bidders/bidfluence.md
index ae114a5864..5f4a4e1de7 100644
--- a/dev-docs/bidders/bidfluence.md
+++ b/dev-docs/bidders/bidfluence.md
@@ -5,6 +5,7 @@ description: Bidfluence Adaptor for Prebidjs
 pbjs: true
 biddercode: bidfluence
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/bidlab.md b/dev-docs/bidders/bidlab.md
index 7bb90cf1bf..3607f72f38 100644
--- a/dev-docs/bidders/bidlab.md
+++ b/dev-docs/bidders/bidlab.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: bidlab
 gdpr_supported: true
 media_types: banner, video
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/bidphysics.md b/dev-docs/bidders/bidphysics.md
index 08fcb5bab5..1e322a3afe 100644
--- a/dev-docs/bidders/bidphysics.md
+++ b/dev-docs/bidders/bidphysics.md
@@ -5,6 +5,7 @@ description: Prebid BidPhysics Bidder Adaptor
 pbjs: true
 biddercode: bidphysics
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/bidscube.md b/dev-docs/bidders/bidscube.md
new file mode 100644
index 0000000000..594f454522
--- /dev/null
+++ b/dev-docs/bidders/bidscube.md
@@ -0,0 +1,22 @@
+---
+layout: bidder
+title: BidsCube
+description: Prebid BidsCube Bidder Adaptor
+pbs: true
+pbjs: true
+biddercode: bidscube
+media_types: banner, video, native
+gdpr_supported: true
+pbs_app_supported: true
+---
+
+### Note:
+
+The BidsCube Bidding adapter requires setup before beginning. Please contact us at support@bidscube.com
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description  |  Example  | Type     |
+|---------------|----------|--------------|-----------|----------|
+| `placementId` | required | Placement ID | `'12345'` | `string` |
diff --git a/dev-docs/bidders/bmtm.md b/dev-docs/bidders/bmtm.md
index 7d91cf5383..df49410149 100644
--- a/dev-docs/bidders/bmtm.md
+++ b/dev-docs/bidders/bmtm.md
@@ -4,8 +4,11 @@ title: Bright Mountain Media
 description: Prebid Bright Mountain Media Bidder Adapter
 biddercode: bmtm
 media_types: banner, video
+getFloor: true
 schain_supported: true
 pbjs: true
+pbs: true
+userIds: id5Id, sharedId
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/boldwin.md b/dev-docs/bidders/boldwin.md
index 0e3132282e..084e923814 100644
--- a/dev-docs/bidders/boldwin.md
+++ b/dev-docs/bidders/boldwin.md
@@ -5,7 +5,7 @@ description: Prebid Boldwin Bidder Adapter
 pbjs: true
 biddercode: boldwin
 gdpr_supported: true
-media_types: banner, video
+media_types: banner, video, native
 ---
 
 ### Note:
@@ -17,4 +17,4 @@ The Boldwin Bidding adapter requires setup before beginning. Please contact us a
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description           | Example   | Type      |
 |---------------|----------|-----------------------|-----------|-----------|
-| `placementId`      | required | Adprime placement id         | `'1234asdf'`    | `'string'` |
+| `placementId`      | required | Boldwin placement id         | `'1234asdf'`    | `'string'` |
diff --git a/dev-docs/bidders/brave.md b/dev-docs/bidders/brave.md
new file mode 100644
index 0000000000..b9d9213a0b
--- /dev/null
+++ b/dev-docs/bidders/brave.md
@@ -0,0 +1,26 @@
+---
+layout: bidder
+title: Brave
+description: Prebid Brave Bidder Adapter
+biddercode: brave
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+media_types: banner, video, native
+safeframes_ok: true
+bidder_supports_deals: true
+pbjs: true
+pbs: false
+---
+
+### Note:
+
+The Brave Header Bidding adapter requires setup and approval from the Brave team. Please reach out to your account manager or support@thebrave.io for more information
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description                   | Example                             | Type      |
+|---------------|----------|-------------------------------|-------------------------------------|-----------|
+| `placementId` | required | Brave's platform placement id | `'to0QI2aPgkbBZq6vgf0oHitouZduz0qw'`  | `string`  |
diff --git a/dev-docs/bidders/bridgewell.md b/dev-docs/bidders/bridgewell.md
index 73800508ce..4ee73587de 100644
--- a/dev-docs/bidders/bridgewell.md
+++ b/dev-docs/bidders/bridgewell.md
@@ -5,6 +5,7 @@ description: Prebid Bridgewell Bidder Adaptor
 pbjs: true
 biddercode: bridgewell
 media_types: display, native
+userIds: all
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/buzzoola.md b/dev-docs/bidders/buzzoola.md
index b74b0735f7..fa1107c611 100644
--- a/dev-docs/bidders/buzzoola.md
+++ b/dev-docs/bidders/buzzoola.md
@@ -4,7 +4,7 @@ title: Buzzoola
 description: Prebid Buzzoola Bidder Adaptor
 pbjs: true
 biddercode: buzzoola
-media_types: banner, video
+media_types: banner, video, native
 gdpr_supported: false
 ---
 
diff --git a/dev-docs/bidders/byplay.md b/dev-docs/bidders/byplay.md
index 46feefa623..3247ebd3b8 100644
--- a/dev-docs/bidders/byplay.md
+++ b/dev-docs/bidders/byplay.md
@@ -5,6 +5,7 @@ description: Prebid ByPlay Bidder Adaptor
 pbjs: true
 biddercode: byplay
 media_types: video
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/c1x.md b/dev-docs/bidders/c1x.md
index 31912dd16b..c24b70318b 100644
--- a/dev-docs/bidders/c1x.md
+++ b/dev-docs/bidders/c1x.md
@@ -5,6 +5,7 @@ description: Prebid C1X Bidder Adaptor
 pbjs: true
 biddercode: c1x
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/cedato.md b/dev-docs/bidders/cedato.md
index 51c96b26a4..fe25e346a0 100644
--- a/dev-docs/bidders/cedato.md
+++ b/dev-docs/bidders/cedato.md
@@ -9,6 +9,7 @@ usp_supported: true
 nav_section: reference
 pbjs: true
 biddercode: cedato
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid params
diff --git a/dev-docs/bidders/clicktripz.md b/dev-docs/bidders/clicktripz.md
index e710721b3b..dabc6ef6d0 100644
--- a/dev-docs/bidders/clicktripz.md
+++ b/dev-docs/bidders/clicktripz.md
@@ -5,6 +5,7 @@ description: Prebid Clicktripz Bidder Adaptor
 pbjs: true
 biddercode: clicktripz
 media_types: banner
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/collectcent.md b/dev-docs/bidders/collectcent.md
index 66c810f185..d48aefb665 100644
--- a/dev-docs/bidders/collectcent.md
+++ b/dev-docs/bidders/collectcent.md
@@ -4,6 +4,7 @@ title: Collectcent
 description: Prebid Collectcent Bidder Adaptor
 pbjs: true
 biddercode: collectcent
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/colombia.md b/dev-docs/bidders/colombia.md
index 2af270b8ce..8500c375ee 100644
--- a/dev-docs/bidders/colombia.md
+++ b/dev-docs/bidders/colombia.md
@@ -4,6 +4,7 @@ title: COLOMBIA
 description: Prebid COLOMBIA Bidder Adaptor
 pbjs: true
 biddercode: colombia
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/contentexchange.md b/dev-docs/bidders/contentexchange.md
new file mode 100644
index 0000000000..10ea1669c4
--- /dev/null
+++ b/dev-docs/bidders/contentexchange.md
@@ -0,0 +1,21 @@
+---
+layout: bidder
+title: ContentExchange
+description: Prebid Contentexchange Bidder Adapter
+biddercode: contentexchange
+usp_supported: true
+schain_supported: true
+media_types: banner, video, native
+gdpr_supported: true
+pbjs: true
+pbs: false
+pbs_app_supported: false
+---
+
+### Prebid.JS Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                              | Example    | Type      |
+|----------------|----------|----------------------------------------------------------|------------|-----------|
+| `placementId` | required | Placement Id will be generated on ContentExchange Platform. | `'1234'`        | `string` |
+| `adFormat` | required | `[banner, video, native]` | `'banner'`        | `string` |
\ No newline at end of file
diff --git a/dev-docs/bidders/converge.md b/dev-docs/bidders/converge.md
index f7288f4ebd..fe7843d9b1 100644
--- a/dev-docs/bidders/converge.md
+++ b/dev-docs/bidders/converge.md
@@ -1,20 +1,28 @@
 ---
 layout: bidder
-title: Converge
-description: Prebid Converge Bidder Adaptor
+title: Converge-Digital
+description: Converge-Digital Bidder Adaptor
 pbjs: true
+pbs: true
 biddercode: converge
-media_types: banner, video
+aliasCode : adkernel
+media_types: banner, native, video
 gdpr_supported: true
 usp_supported: true
+coppa_supported: true
+pbs_app_supported: true
+gvl_id: 248
+schain_supported: true
 ---
 
+### Note:
+
+The Converge-Digital Bidding adapter requires setup and approval before implementation. Please reach out to <info@converge-digital.com> for more details.
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name        | Scope    | Description                                                                                                                                                                                                             | Example                                   | Type      |
-|-------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------|-----------|
-| `uid`       | required | Represents the Converge bidder system Ad Slot ID associated with the respective div id from the site page.                                                                                                              | `59`                                      | `integer` |
-| `priceType` | optional | Can take the values `gross` or `net`, default value is `net`. Net represents the header bid price with the Converge header bidder margin already extracted. Gross price does contain the Converge bidder margin within. | `'gross'`                                 | `string`  |
-| `keywords`  | optional | A set of key-value pairs applied to all ad slots on the page. Values can be empty.                                                                                                                                      | `keywords: { topic: ['stress', 'fear'] }` | `object`  |
+| Name     | Scope    | Description           | Example                   | Type     |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host`   | required | ConvergeDigital RTB host | `'cpm.convergeselect.net'` | `string` |
+| `zoneId` | required | Zone Id           | `30164`                 | `integer` |
diff --git a/dev-docs/bidders/conversant.md b/dev-docs/bidders/conversant.md
index 21b7c071ce..d8c76b9d2b 100644
--- a/dev-docs/bidders/conversant.md
+++ b/dev-docs/bidders/conversant.md
@@ -7,7 +7,7 @@ pbs: true
 biddercode: conversant
 media_types: video
 gdpr_supported: true
-userIds: criteo, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId
+userIds: criteo, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId, publinkId
 prebid_member: true
 gvl_id: 24
 ---
@@ -24,15 +24,24 @@ gvl_id: 24
 | `secure`      | required (for secure pages) | If impression requires secure HTTPS URL creative assets and markup. 0 for non-secure, 1 for secure. Default is non-secure | `1`               | `integer`        |
 | `bidfloor`    | optional                    | Bid floor                                                                                                                 | `0.50`            | `float`          |
 | `tag_id`      | optional                    | Identifies specific ad placement.                                                                                         | `'cnvr-test-tag'` | `string`         |
-| `position`    | optional                    | Ad position on screen. See details below.                                                                                 | `1`               | `integer`        |
+| `white_label_url`| optional                  | Override the destination URL the request is sent to.                                                                       | `'https://mydomain.com/hbendpoint'`  | `string` |
+| `pubcid_name` | optional                    | Name of the pub common id. Conversant adapter can read the id directly if the UserID module is absent. Default is _pubcid.| `'_pubcid'`         | `string`         |
+
+### Video Params
+
+{: .table .table-bordered .table-striped }
+
+| Name          | Scope                       | Description                                                                                                               | Example           | Type             |
+|---------------|-----------------------------|---------------------------------------------------------------------------------------------------------------------------|-------------------|------------------|
+| `position`    | optional                    | Ad position on screen. See details below.  Only supported in bids.params.                                                 | `1`               | `integer`        |
 | `mimes`       | optional                    | Array of content MIME types supported. Required for video                                                                 | `['video/mp4']`   | `Array<string>`  |
 | `maxduration` | optional                    | Maximum duration in seconds for this video as an integer.                                                                 | `30`              | `integer`        |
 | `api`         | optional                    | Array of supported API frameworks. See details below.                                                                     | `[2]`             | `Array<integer>` |
 | `protocols`   | optional                    | Array of supported video protocols. See details below.                                                                    | `[2]`             | `Array<integer>` |
-| `white_label_url`| optional                  | Override the destination URL the request is sent to.                                                                       | `'https://mydomain.com/hbendpoint'`  | `string` |
-| `pubcid_name` | optional                    | Name of the pub common id. Conversant adapter can read the id directly if the UserID module is absent. Default is _pubcid.| `_pubcid`         | `string`         |
 
 
+Video parameters can be included in either `mediaTypes.video` or `bids.params` except where noted.
+
 The following values are defined in the [ORTB 2.5 spec](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf).
 
 ### position
diff --git a/dev-docs/bidders/cosmos.md b/dev-docs/bidders/cosmos.md
index addbee7046..d8d35a9b42 100644
--- a/dev-docs/bidders/cosmos.md
+++ b/dev-docs/bidders/cosmos.md
@@ -4,6 +4,7 @@ title: COSMOS
 description: Prebid COSMOS Bidder Adapter
 pbjs: true
 biddercode: cosmos
+pbjs_version_notes: not in 5.x
 ---
 
 ### Integration Note:
diff --git a/dev-docs/bidders/criteo.md b/dev-docs/bidders/criteo.md
index 963c06659f..fe5d109427 100644
--- a/dev-docs/bidders/criteo.md
+++ b/dev-docs/bidders/criteo.md
@@ -76,18 +76,16 @@ var adUnits = [
             maxduration: 30,
             api: [1, 2],
             playerSize: [640,480],
-            protocols: [2, 3]
+            protocols: [2, 3],
+	    skip: 0,
+	    playbackmethod: 1,
+            placement: 1
         }
     },
     bids: [{
         bidder: 'criteo',
         params: {
-            zoneId: 1455580,
-            video: {
-                skip: 0,
-                playbackmethod: 1,
-                placement: 1,
-            }
+            zoneId: 1455580
         }
     }]
 }];
diff --git a/dev-docs/bidders/dailyhunt.md b/dev-docs/bidders/dailyhunt.md
index a63c647350..cbb7440034 100644
--- a/dev-docs/bidders/dailyhunt.md
+++ b/dev-docs/bidders/dailyhunt.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: dailyhunt
 media_types: display, native, video
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/decenterads.md b/dev-docs/bidders/decenterads.md
index e8c9733479..1e496566f2 100644
--- a/dev-docs/bidders/decenterads.md
+++ b/dev-docs/bidders/decenterads.md
@@ -8,6 +8,7 @@ biddercode: decenterads
 media_types: banner, video, native
 gdpr_supported: true
 pbs_app_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/denakop.md b/dev-docs/bidders/denakop.md
new file mode 100644
index 0000000000..0b390e05e4
--- /dev/null
+++ b/dev-docs/bidders/denakop.md
@@ -0,0 +1,27 @@
+---
+layout: bidder
+title: Denakop
+description: Denakop Bidder Adaptor
+pbjs: true
+pbs: true
+biddercode: denakop
+media_types: banner, native, video
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: true
+schain_supported: true
+aliasCode : adkernel
+---
+
+### Note:
+
+The Denakop bidding adapter requires setup and approval before implementation. Please reach out to <opec@denakop.com> for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name     | Scope    | Description           | Example                   | Type     |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host`   | required | Host Name | `'cpm.denakop.com'` | `string` |
+| `zoneId` | required | Zone Id           | 30164                 | `integer` |
diff --git a/dev-docs/bidders/dgads.md b/dev-docs/bidders/dgads.md
index 924537c381..73bd6f02ca 100644
--- a/dev-docs/bidders/dgads.md
+++ b/dev-docs/bidders/dgads.md
@@ -5,6 +5,7 @@ description: Prebid dgads Bidder Adapter
 pbjs: true
 biddercode: dgads
 media_types: native
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/djax.md b/dev-docs/bidders/djax.md
index b3d0a1f7da..6c9c8200ed 100644
--- a/dev-docs/bidders/djax.md
+++ b/dev-docs/bidders/djax.md
@@ -4,6 +4,7 @@ title: DJAX
 description: Prebid djax Bidder Adapter
 pbjs: true
 biddercode: djax
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/dmx.md b/dev-docs/bidders/dmx.md
index d7647a7c5e..7c34908359 100644
--- a/dev-docs/bidders/dmx.md
+++ b/dev-docs/bidders/dmx.md
@@ -13,8 +13,11 @@ gdpr_supported: true
 {: .table .table-bordered .table-striped }
 | Name       | Scope    | Description            | Example | Type     |
 |------------|----------|------------------------|---------|----------|
-| memberid | required | Represent boost MemberId from DistrictM UI | 'member1' | string |
-| tagid | optional | Represent the placement ID | '123abc' | string |
+| seller_id | required | The DMX Partner ID provided upon onboarding, this is for specific setup BURL, NURL or ADM support | 'seller_id' | string |
+| publisher_id | required | Boost MemberId from DistrictM UI | 'member1' | string |
+| tagid | required | Represent the placement ID from DistrictM or your own  | '123abc' | string |
 | bidfloor | optional | The minimum price acceptable for a bid | '1.0' | string |
+| memberid | optional | MemberId from DistrictM UI (legacy: replaced by publisher_id) | 'member1' | string |
+| dmxid | optional | Placement ID from DistrictM (legacy: replaced by tagid) | '123abc' | string |
 
 (See [districtmDMX](/dev-docs/bidders.html#districtmDMX) for Prebid.js)
diff --git a/dev-docs/bidders/dspx.md b/dev-docs/bidders/dspx.md
index c0147c487d..9b9133e49d 100644
--- a/dev-docs/bidders/dspx.md
+++ b/dev-docs/bidders/dspx.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: dspx
 media_types: banner, video 
 gdpr_supported: true
+userIds: uid2, netId
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/duration.md b/dev-docs/bidders/duration.md
new file mode 100644
index 0000000000..2c2e61cb9a
--- /dev/null
+++ b/dev-docs/bidders/duration.md
@@ -0,0 +1,86 @@
+---
+layout: bidder
+title: Duration Media
+description: Prebid Duration Media Bidder Adapter
+biddercode: duration
+aliasCode: nobid
+pbjs: true
+pbs: true
+media_types: banner, video
+gdpr_supported: true
+gvl_id: 816
+usp_supported: true
+schain_supported: true
+coppa_supported: true
+userId: criteo, unifiedId, id5Id
+safeframes_ok: true
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description | Example | Type     |
+|---------------|----------|-------------|---------|----------|
+| `siteId` | required | siteId is provided by your Duration Media account manager(s) |         | `integer` |
+| `placementId` | optional | placementId is provided by your Duration Media account manager(s). This parameter allows to report on a specific ad unit |         | `integer` |
+| `video`| optional | Object containing video targeting parameters. Note that this parameter is not used in Prebid Server.  See [Video Object](#duration-video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object`|
+
+
+### Note
+If you are using Google Ad Manager (GAM), it is highly recommended to make sure the “Serve in Safeframe” box in creative settings is unchecked. 
+If you absolutely want to run Duration Media in a Saferame creative, please contact your Duration Media repsentative to coordinate this setup.
+
+
+# Test Parameters
+```
+    var adUnits = [
+        {
+            code: 'test-div1',
+            mediaTypes: {
+                banner: {
+                    sizes: [[300, 250]],  // a display size
+                }
+            },
+            bids: [
+                {
+                    bidder: "duration",
+                    params: {
+                        siteId: 2,
+                        placementId: 3
+                    }
+                }
+            ]
+        },{
+            code: 'test-div2',
+            mediaTypes: {
+                banner: {
+                    sizes: [[320, 50]],   // a mobile size
+                }
+            },
+            bids: [
+                {
+                    bidder: "duration",
+                    params: {
+                        siteId: 2
+                    }
+                }
+            ]
+        }
+    ];
+```
+
+<a name="duration-video-object" />
+
+#### Video Object
+
+{: .table .table-bordered .table-striped }
+| Name              | Description                                                                                                                                                                                                                                          | Type             |
+|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|
+| `skippable`       | Boolean which, if `true`, means the user can click a button to skip the video ad. Defaults to `false`.                                                                                                                                               | `boolean`        |
+| `playback_method` | Array of strings listing playback methods supported by the publisher. Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouseover"`; `"auto_play_sound_unknown"`; `"viewport_sound_on"`, `"viewport_sound_off"`. | `Array<string>`  |
+| `position`        | Array of strings listing video player position supported by the publisher. Allowed values: `"na"`, `"atf"`, `"btf"`, `"head"`, `"foot"`, `"sidebar"`, `"full"`.                                                                                      | `Array<string>`  |
+| `mimes`           | Array of strings listing the content MIME types supported, e.g., `["video/x-flv", "video/x-ms-wmv"]`.                                                                                                                                                | `Array<string>`  |
+| `minduration`     | Integer that defines the minimum video ad duration in seconds.                                                                                                                                                                                       | `integer`        |
+| `maxduration`     | Integer that defines the maximum video ad duration in seconds.                                                                                                                                                                                       | `integer`        |
+| `frameworks`      | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; ORMMA: `4`; MRAID 2.0: `5`.                                                                          | `Array<integer>` |
+
diff --git a/dev-docs/bidders/e_volution.md b/dev-docs/bidders/e_volution.md
index 21a46dc926..867093350f 100644
--- a/dev-docs/bidders/e_volution.md
+++ b/dev-docs/bidders/e_volution.md
@@ -5,16 +5,29 @@ description: Prebid E-volution tech Bidder Adapter
 pbjs: true
 biddercode: e_volution
 gdpr_supported: true
-media_types: banner, video
+media_types: banner, video, native
+gvl_id: 957
+pbs: true
+pbs_app_supported: true
+usp_supported: true
+schain_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
 
 The E-volution Bidding adapter requires setup before beginning. Please contact us at admin@e-volution.ai
 
-### Bid Params
+### Prebid.JS Bid Params
 
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description           | Example   | Type      |
 |---------------|----------|-----------------------|-----------|-----------|
 | `placementId`      | required | E-volution tech placement id         | `'1234asdf'`    | `'string'` |
+
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `key`      | required | E-volution integration key         | `'cf64c93f277afdd928d8260653d7413d'`    | `'string'` |
diff --git a/dev-docs/bidders/ebdr.md b/dev-docs/bidders/ebdr.md
index 56036ed355..2218f1ca60 100644
--- a/dev-docs/bidders/ebdr.md
+++ b/dev-docs/bidders/ebdr.md
@@ -5,6 +5,7 @@ description: Prebid EngageBDR Bidder Adaptor
 biddercode: ebdr
 pbjs: true
 media_types: video
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid params
diff --git a/dev-docs/bidders/edgequeryx.md b/dev-docs/bidders/edgequeryx.md
index 0acccc9643..5731ce33d1 100644
--- a/dev-docs/bidders/edgequeryx.md
+++ b/dev-docs/bidders/edgequeryx.md
@@ -8,6 +8,7 @@ media_types: display
 gdpr_supported: true
 schain_supported: true
 usp_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/emoteev.md b/dev-docs/bidders/emoteev.md
index c75302826a..553a9b236c 100644
--- a/dev-docs/bidders/emoteev.md
+++ b/dev-docs/bidders/emoteev.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: emoteev
 gdpr_supported: true
 userIds: pubCommonId
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/emx_digital.md b/dev-docs/bidders/emx_digital.md
index f87facc38e..00acc8c306 100644
--- a/dev-docs/bidders/emx_digital.md
+++ b/dev-docs/bidders/emx_digital.md
@@ -10,6 +10,7 @@ gdpr_supported: true
 gvl_id: 183
 usp_supported: true
 schain_supported: true
+userIds: identityLink, uid2
 ---
 
 ### Registration
diff --git a/dev-docs/bidders/engageya.md b/dev-docs/bidders/engageya.md
index a085c9bd45..1e8066d8c4 100644
--- a/dev-docs/bidders/engageya.md
+++ b/dev-docs/bidders/engageya.md
@@ -6,6 +6,7 @@ media_type: banner, native
 biddercode: engageya
 pbjs: true
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid params
diff --git a/dev-docs/bidders/envivo.md b/dev-docs/bidders/envivo.md
index eda08b79d3..b5e2771e3f 100644
--- a/dev-docs/bidders/envivo.md
+++ b/dev-docs/bidders/envivo.md
@@ -4,6 +4,7 @@ title: envivo
 description: Prebid envivo Bidder Adapter
 pbjs: true
 biddercode: envivo
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/eplanning.md b/dev-docs/bidders/eplanning.md
index ff47235e17..b6b0466f71 100644
--- a/dev-docs/bidders/eplanning.md
+++ b/dev-docs/bidders/eplanning.md
@@ -7,6 +7,8 @@ pbs: true
 biddercode: eplanning
 usp_supported: true
 gdpr_supported: true
+pbs_app_supported: true
+gvl_id: 90
 ---
 
 
diff --git a/dev-docs/bidders/fidelity.md b/dev-docs/bidders/fidelity.md
index 5aad9203a4..2ccca5fb16 100644
--- a/dev-docs/bidders/fidelity.md
+++ b/dev-docs/bidders/fidelity.md
@@ -9,6 +9,7 @@ media_types: banner
 gdpr_supported: true
 usp_supported: true
 gvl_id: 408
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/fluct.md b/dev-docs/bidders/fluct.md
index 5403970b0d..9360ed72d2 100644
--- a/dev-docs/bidders/fluct.md
+++ b/dev-docs/bidders/fluct.md
@@ -9,6 +9,7 @@ coppa_supported: false
 usp_supported: false
 schain_supported: true
 pbjs: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/getintent.md b/dev-docs/bidders/getintent.md
index a91d9b2780..30fffcabfd 100644
--- a/dev-docs/bidders/getintent.md
+++ b/dev-docs/bidders/getintent.md
@@ -4,7 +4,8 @@ title: GetIntent
 description: Prebid GetIntent Bidder Adaptor
 pbjs: true
 biddercode: getintent
-media_types: video
+media_types: video, banner
+getFloor: true
 ---
 
 
@@ -23,6 +24,22 @@ media_types: video
 
 #### video
 
+Adapter supports the following mediaTypes.video parameters:
+
+{: .table .table-bordered .table-striped }
+| Name         | Scope    | Description                                                                                                                                                                                                                                                          | Example                      | Type             |
+|--------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|------------------|
+| `protocols`  | optional | The list of the restricted VAST protocol versions. Possible values: `1` – VAST 1.0, `2` – VAST 2.0, `3` – VAST 3.0, `4` – VAST 1.0 Wrapper, `5` – VAST 2.0 Wrapper, `6` – VAST 3.0 Wrapper.                                                                          | `[4,5,6]`                    | `Array<integer>` |
+| `mimes`      | optional | Array of Mime Type strings.                                                                                                                                                                                                                                          | `['application/javascript']` | `Array<string>`  |
+| `minduration`| optional | Minimal video duration.                                                                                                                                                                                                                                              | `30`                         | `integer`        |
+| `maxduration`| optional | Maximal video duration.                                                                                                                                                                                                                                              | `30`                         | `integer`        |
+| `minbitrate` | optional | Minimal Video bitrate.                                                                                                                                                                                                                                               | `256`                        | `integer`        |
+| `maxbitrate` | optional | Maximal Video bitrate.                                                                                                                                                                                                                                               | `512`                        | `integer`        |
+| `api`        | optional | API of the inventory. Possible values: `1` - VPAID 1.0, `2` - VPAID 2.0, `3` - MRAID-1, `4` - ORMMA, `5` - MRAID-2.                                                                                                                                                  | `[3,4]`                      | `Array<integer>` |
+| `skip`       | optional | Skippability of the inventory. Possible values (case insensitive): `1` - skippable inventory is allowed, `0` - skippable inventory is not allowed.                                                                                                                   | `0`                          | `integer`        |
+
+List of custom parameters available at bidder params level
+
 {: .table .table-bordered .table-striped }
 | Name        | Scope    | Description                                                                                                                                                                                                                                                          | Example                      | Type             |
 |-------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|------------------|
diff --git a/dev-docs/bidders/gnet.md b/dev-docs/bidders/gnet.md
index 436fceaa77..3365cc1602 100644
--- a/dev-docs/bidders/gnet.md
+++ b/dev-docs/bidders/gnet.md
@@ -1,6 +1,6 @@
 ---
 layout: bidder
-title: gnet
+title: Gnet
 description: Prebid Gnet Bidder Adaptor
 pbjs: true
 biddercode: gnet
@@ -12,5 +12,4 @@ biddercode: gnet
 | Name          | Scope    | Description                                | Example                             | Type     |
 |---------------|----------|--------------------------------------------|-------------------------------------|----------|
 | `websiteId`      | required | The Gnet website ID                            | `'4'`                                    | `string` |
-| `externalId`      | required | The Gnet external ID                          | `'4d52cccf30309282256012cf30309282'`     | `string` |
 
diff --git a/dev-docs/bidders/go2net.md b/dev-docs/bidders/go2net.md
index 7210f822de..f1ce1099d6 100644
--- a/dev-docs/bidders/go2net.md
+++ b/dev-docs/bidders/go2net.md
@@ -11,6 +11,7 @@ media_types: video
 ### bid params
 
 {: .table .table-bordered .table-striped }
-| Name   | Scope    | Description | Example | Type     |
-|--------|----------|-------------|---------|----------|
-| `zone` | required |             |         | `string` |
+| Name          | Scope    | Description                                                                                                    | Example                                | Type     |
+|---------------|----------|----------------------------------------------------------------------------------------------------------------|----------------------------------------|----------|
+| `zone`        | required | The unique identifier of the ad placement. Could be obtained from the Go2Net UI or from your account manager.  | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` |
+| `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option.                     | {key1: value2, key2: value2}           | `object` |
diff --git a/dev-docs/bidders/gridNM.md b/dev-docs/bidders/gridNM.md
index a7145c9c2b..3524b8df87 100644
--- a/dev-docs/bidders/gridNM.md
+++ b/dev-docs/bidders/gridNM.md
@@ -20,11 +20,11 @@ usp_supported: true
 | `source`               | required | source of traffic, in JW Player case should be 'jwp'                                                                   | `'jw_player'`                     | `string`        |
 | `pubdata`              | optional | publisher data, will be used by JW Player to pass their info                                                           | `{"jwpseg" : ["1111", "2222"]})`  | `object`        |
 | `floorcpm`             | optional | floor cpm                                                                                                              | `0.56`                            | `float`         |
-| `video`                | required | video parameters which should be passed for no-mapping approach                                                        |                                   | `object`        |
-| `video.mimes`	         | required | Content MIME types supported	                                                                                         | `['video/mp4', 'video/x-ms-wmv']` | `string array`  |
+| `video`                | optional | video parameters which should be passed for no-mapping approach                                                        |                                   | `object`        |
+| `video.mimes`	         | optional | Content MIME types supported	                                                                                         | `['video/mp4', 'video/x-ms-wmv']` | `string array`  |
 | `video.mind` 	         | optional | Minimum video ad duration in seconds.                                                                                  | `1`                               | `integer`       |
 | `video.maxd`           | optional | Maximum video ad duration in seconds                                                                                   | `60`                              | `int`           |
-| `video.protocols`      | required | Array of supported video protocols                                                                                     | `[1,2,3,4,5,6]`                   | `integer array` |
+| `video.protocols`      | optional | Array of supported video protocols                                                                                     | `[1,2,3,4,5,6]`                   | `integer array` |
 | `video.size`           | optional | player size wxh                                                                                                        | `'300x250'`                       | `string`        |
 | `video.linearity`      | optional | Indicates if the impression must be linear, nonlinear, etc.                                                            | `1`                               | `int`           |
 | `video.skip`           | optional | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes.                                     | `0`                               | `int`           |
diff --git a/dev-docs/bidders/growads.md b/dev-docs/bidders/growads.md
new file mode 100644
index 0000000000..8f7c295ad4
--- /dev/null
+++ b/dev-docs/bidders/growads.md
@@ -0,0 +1,18 @@
+---
+layout: bidder
+title: GrowAdvertising
+description: Prebid GrowAdvertising Bidder Adapter
+pbjs: true
+biddercode: growads
+media_types: banner, native
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description  |  Example  | Type     |
+|----------|----------|-----------|--------------------|----------|
+| `zoneId` | required | ZoneId ID | `'unique-zone-id'` | `string` |
+| `domain` | optional | Domain | `'example.org'` | `string` |
+| `minCPM` | optional | Minimum CPM | `1.5` | `float` |
+| `maxCPM` | optional | Maximum CPM | `10.8` | `float` |
diff --git a/dev-docs/bidders/gumgum.md b/dev-docs/bidders/gumgum.md
index 34ed13433e..b3427cf8b4 100644
--- a/dev-docs/bidders/gumgum.md
+++ b/dev-docs/bidders/gumgum.md
@@ -9,7 +9,7 @@ biddercode: gumgum
 media_types: banner, video
 schain_supported: true
 getFloor: true
-userIds: unifiedId
+userIds: unifiedId, identityLink
 gdpr_supported: true
 usp_supported: true
 ---
@@ -33,6 +33,7 @@ Client side and server side parameters differ slightly. For Server side (Prebid
 | `zone`         | required for all bid requests tracking a single domain or site   | Tracking ID           | `'ggumtest'`           | `string`  |
 | `pubId`        | required for all bid requests tracking multiple domains or sites | Publisher ID          | `123`                  | `integer` |
 | `irisid`       | optional                                                         | Iris.tv ID            | `'iris_6f9285823a4'`   | `string`  |
+| `slot`         | optional                                                         | Placement ID          | `40`                   | `number`  |
 
 ### Client Side Bid Params
 
diff --git a/dev-docs/bidders/haxmedia.md b/dev-docs/bidders/haxmedia.md
index 39cb056b81..6931acb025 100644
--- a/dev-docs/bidders/haxmedia.md
+++ b/dev-docs/bidders/haxmedia.md
@@ -9,6 +9,7 @@ media_types: banner, video, native
 gdpr: true
 pbjs: true
 pbs: false
+pbjs_version_notes: not in 5.x
 ---
 
 ### Prebid.JS Bid Params
diff --git a/dev-docs/bidders/hpmdnetwork.md b/dev-docs/bidders/hpmdnetwork.md
index 62c5fe86d3..026647b478 100644
--- a/dev-docs/bidders/hpmdnetwork.md
+++ b/dev-docs/bidders/hpmdnetwork.md
@@ -5,6 +5,7 @@ description: Prebid HPMD Network Bidder Adaptor
 pbjs: true
 biddercode: hpmdnetwork
 media_types: banner
+pbjs_version_notes: not in 5.x
 ---
 
 Note:
diff --git a/dev-docs/bidders/huaweiads.md b/dev-docs/bidders/huaweiads.md
new file mode 100644
index 0000000000..913f164f37
--- /dev/null
+++ b/dev-docs/bidders/huaweiads.md
@@ -0,0 +1,34 @@
+---
+layout: bidder
+title: HuaweiAds
+description: Prebid HuaweiAds Bidder Adapter
+biddercode: huaweiads
+gvl_id: 856
+media_types: banner, video, native
+safeframes_ok: false
+bidder_supports_deals: true
+pbjs: false
+pbs: true
+pbs_app_supported: true
+prebid_member: false
+---
+
+### Note:
+
+The Example Bidding adapter requires setup before beginning. Please contact us at hwads@huawei.com.
+1. The following parameters need to be registered on the HuaweiAds platform, and at the same time, the permission to access the server interface needs to be opened on the HuaweiAds platform.
+2. You can find ( publisherid, signkey, keyid ) on the platform after registration.
+3. You need to create your advertising creative on the platform and get the corresponding ( slotid, adtype ).
+4. We need OAID, GAID, IMEI (One must not be empty, you can collect OAID first, or use GAID) in our request, so when using prebidmobile, please add something like "TargetingParams.addUserData("oaid", "oaid-test") TargetingParams.addUserData("gaid", "gaid-test") TargetingParams.addUserData("imei", "imei-test")".
+5. You can also send the clientTime to the HuaweiAds Adx server, like "TargetingParams.addUserData("clientTime", "2018-11-02 16:34:07.981+0800")". if not, it will use the prebid server time and zone.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description  | Example   | Type     |
+|---------------|----------|--------------|-----------|----------|
+| `publisherid` | required | Publisher Id | `'2001000399'` | `string` |
+| `signkey` | required | Sign Key | `'5d********82c38594f8b2bdfd9f********a398dca734932898e3********8d'` | `string` |
+| `keyid` | required | Key Id | `'2'` | `string` |
+| `slotid` | required | Slot Id | `'u42ohmaufh'` | `string` |
+| `adtype` | required | Ad Type | `'native'` | `string` |
diff --git a/dev-docs/bidders/ias.md b/dev-docs/bidders/ias.md
index cdbe4c3fa3..c9e88f4860 100644
--- a/dev-docs/bidders/ias.md
+++ b/dev-docs/bidders/ias.md
@@ -4,6 +4,7 @@ title: Integral Ad Science (IAS)
 description: Prebid Integral Ad Science Bidder Adaptor
 pbjs: true
 biddercode: ias
+pbjs_version_notes: for 5.x, use the module
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/imonomy.md b/dev-docs/bidders/imonomy.md
index 18d76122a5..134cc2b5c2 100644
--- a/dev-docs/bidders/imonomy.md
+++ b/dev-docs/bidders/imonomy.md
@@ -4,6 +4,7 @@ title: Imonomy
 description: Prebid Imonomy Bidder Adaptor
 pbjs: true
 biddercode: imonomy
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/improvedigital.md b/dev-docs/bidders/improvedigital.md
index c2257fcf6b..89a765d3a4 100644
--- a/dev-docs/bidders/improvedigital.md
+++ b/dev-docs/bidders/improvedigital.md
@@ -6,7 +6,7 @@ biddercode: improvedigital
 pbjs: true
 pbs: true
 gdpr_supported: true
-userIds: criteo, id5Id
+userIds: all
 usp_supported: true
 media_types: banner, native, video
 schain_supported: true
diff --git a/dev-docs/bidders/inmobi.md b/dev-docs/bidders/inmobi.md
index aa87c6cb33..bafea45f6d 100644
--- a/dev-docs/bidders/inmobi.md
+++ b/dev-docs/bidders/inmobi.md
@@ -7,7 +7,8 @@ gdpr_supported: true
 usp_supported: false
 gvl_id: 333
 coppa_supported: true
-media_types: banner, video
+schain_supported: true
+media_types: banner, video, native
 pbs: true
 pbs_app_supported: true
 ---
@@ -17,6 +18,12 @@ pbs_app_supported: true
 The InMobi Prebid adapter requires a setup to create placement IDs. Please contact your InMobi partner manager for setup assistance. 
 For queries, write to us at prebid-support@inmobi.com
 
+### User Sync Disclosure:
+
+InMobi has partnered with a third party, ID5, to use their ID as our primary user identifier for mobile web supply. We will also rely on ID5 IDs to handle compliance flows related to Data Subject Right requests in our systems. Hence, we require the publisher to use ID5’s sync URL for user syncing and passing the corresponding ID5 ID to InMobi in the bid request. For this purpose, we provide ID5’s sync URL in our Prebid adapter for User ID sync. Note that, InMobi has a direct contract with ID5 for consuming ID5 ID and the user sync via Prebid does not require the publisher to get into a contractual relationship with ID5.
+
+To opt out of InMobi ads on mobile web inventory or for any other requests, the user needs to visit the Opt-out page on InMobi website (https://www.inmobi.com/page/opt-out/). For opting out of ID5 ID entirely, the user needs to visit ID5’s opt out page: https://id5.io/platform-privacy-policy/.
+
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/insticator.md b/dev-docs/bidders/insticator.md
new file mode 100644
index 0000000000..794279bd07
--- /dev/null
+++ b/dev-docs/bidders/insticator.md
@@ -0,0 +1,17 @@
+---
+layout: bidder
+title: Insticator
+description: Prebid Insticator Bidder Adapter
+biddercode: insticator
+gdpr_supported: true
+media_types: banner
+pbjs: true
+gvl_id: 910
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name    | Scope    | Description     | Example              | Type      |
+|---------|----------|-----------------|----------------------|-----------|
+| `adUnitId`  | Required | The ad unit ID provided by Insticator | `'test'` | `string`  |
diff --git a/dev-docs/bidders/integr8.md b/dev-docs/bidders/integr8.md
new file mode 100644
index 0000000000..6f1e4a71ab
--- /dev/null
+++ b/dev-docs/bidders/integr8.md
@@ -0,0 +1,17 @@
+---
+layout: bidder
+title: Integr8
+description: Prebid Integr8 Bidder Adapter
+pbjs: true
+biddercode: integr8
+media_types: banner, video
+---
+
+
+### Bid Params
+
+| Name          | Scope    |Description                                                             | Example            | Type      |
+|---------------|----------|------------------------------------------------------------------------|--------------------|-----------|
+| `propertyId`  | required |Property id                                                             | `"12345"`          | `string`  |
+| `placementId` | required |Placement id                                                            | `"54321"`          | `string`  |
+| `data`        | optional |Catalog data (contents) and/or inventory data (custom key/value pairs)  | `{catalogs: [{ catalogId: "699229", items: ["193", "4", "1"] }], inventory: { category: ["tech"], query: ["iphone 12"] }}` | `object` |
\ No newline at end of file
diff --git a/dev-docs/bidders/interactiveOffers.md b/dev-docs/bidders/interactiveOffers.md
index f95591a67f..daadab5e9d 100644
--- a/dev-docs/bidders/interactiveOffers.md
+++ b/dev-docs/bidders/interactiveOffers.md
@@ -10,14 +10,14 @@ media_types: banner
 ---
 
 ### Note:
-Module that connects to interactiveOffers demand sources. Param pubid is required.
+Module that connects to interactiveOffers demand sources. Param partnerId is required.
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description | Example | Type     |
 |---------------|----------|-------------|---------|----------|
-| `pubid` | required |  Publisher id          | 35   | `integer` |
+| `partnerId` | required |  Partner id          | 'abc123'   | `string` |
 
 Example:
 
@@ -25,7 +25,7 @@ Example:
 {
     bidder: "interactiveOffers",
     params: {
-        pubid: 35
+        partnerId: "abc123"
     }
 }
 ```
diff --git a/dev-docs/bidders/invamia.md b/dev-docs/bidders/invamia.md
new file mode 100644
index 0000000000..ec5dc91a79
--- /dev/null
+++ b/dev-docs/bidders/invamia.md
@@ -0,0 +1,23 @@
+---
+layout: bidder
+title: Invamia
+description: Prebid Invamia Bidder Adapter
+pbjs: true
+biddercode: invamia
+safeframes_ok: false
+---
+
+### Note
+
+Here is what you need for Prebid integration with Invamia:
+1. Register with Invamia.
+2. Once registered and approved, you will receive a Zone ID.
+3. Use the Zone ID as parameters in params.
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description  | Example                                        | Type     |
+|---------------|----------|--------------|------------------------------------------------|----------|
+| `zoneId` | required | Zone ID | `379783` | `number` |
diff --git a/dev-docs/bidders/iprom.md b/dev-docs/bidders/iprom.md
index 14730c6833..5c123a13db 100644
--- a/dev-docs/bidders/iprom.md
+++ b/dev-docs/bidders/iprom.md
@@ -5,6 +5,7 @@ description: iPROM Prebid Adaptor
 biddercode: iprom
 media_types: banner
 pbjs: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Prebid Server Note:
diff --git a/dev-docs/bidders/iqm.md b/dev-docs/bidders/iqm.md
index a9c01669a9..f4159f0ec0 100644
--- a/dev-docs/bidders/iqm.md
+++ b/dev-docs/bidders/iqm.md
@@ -6,14 +6,78 @@ pbjs: true
 biddercode: iqm
 ---
 
-
-### Bid Params
+# Parameters
 
 {: .table .table-bordered .table-striped }
+| Name          | Scope    | Description               | Example              |
+| :------------ | :------- | :------------------------ | :------------------- |
+| `publisherId` | required | The Publisher ID from iQM | "df5fd732-c5f3-11e7-abc4-cec278b6b50a" |
+| `geo.country` | required | The publisher country| "USA" |
+| `placementId` | required | The Placement ID from iQM | 23451                |
+| `bidfloor`    | optional | Bid Floor                 | 0.50                 |
+
+# Description
+
+Module that connects to iQM demand sources
+
+# Test Parameters
+```
+var adUnits = [{
+        code: 'div-gpt-ad-1460505748561-0',
+        mediaTypes: {
+          banner: {
+            sizes: [[300,250]]
+          }
+        },
+
+        bids: [{
+          bidder: 'iqm',
+          params: {
+            geo:{
+              country:'USA'
+            },
+
+            publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a',
+            placementId: 23451,
+            bidfloor: 0.50
+          }
+        }]
+
+      }]
+
+```
+
+# adUnit Video
+
+```
+ var videoAdUnit = {
+      code: 'video1',
+      mediaTypes: {
+        video: {
+          playerSize: [640, 480],
+          context: 'instream'
+        }
+      },
+      bids: [{
+        bidder: 'iqm',
+        params: {
+          // placementId: iosDevice ? 13239390 : 13232361, // Add your own placement id here. Note, skippable video is not supported on iOS
+          publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a',
+          placementId: 23451,
+          geo:{
+            country:'USA'
+          },
+
+          bidfloor: 0.05,
+          video: {
+            placement :2,
+            mimes: ['video/mp4'],
+            protocols: [2,5],
+            skipppable: true,
+            playback_method: ['auto_play_sound_off']
+          }
+        }
+      }]
+      };
 
-| Name          | Scope    | Description                | Example                                  | Type      |
-|---------------|----------|----------------------------|------------------------------------------|-----------|
-| `publisherId` | required | The Publisher ID from iQM. | `'df5fd732-c5f3-11e7-abc4-cec278b6b50a'` | `string`  |
-| `tagId`       | required | The Tag ID from iQM.       | `'1c5c9ec2-c5f4-11e7-abc4-cec278b6b50a'` | `string`  |
-| `placementId` | required | The Placement ID from iQM. | `'50cc36fe-c5f4-11e7-abc4-cec278b6b50a'` | `string`  |
-| `bidfloor`    | required | Bid floor                  | `0.50`                                   | `integer` |
+```
\ No newline at end of file
diff --git a/dev-docs/bidders/iqzone.md b/dev-docs/bidders/iqzone.md
new file mode 100644
index 0000000000..d91e74b1f0
--- /dev/null
+++ b/dev-docs/bidders/iqzone.md
@@ -0,0 +1,20 @@
+---
+layout: bidder
+title: IQZone
+description: Prebid IQZone Bidder Adapter
+biddercode: iqzone
+usp_supported: true
+gdpr_supported: true
+schain_supported: true
+media_types: banner, video, native
+pbjs: true
+pbs: true
+pbs_app_supported: true
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                              | Example    | Type      |
+|----------------|----------|----------------------------------------------------------|------------|-----------|
+| `placementId` | required | Placement Id | `'0'`        | `string` |
diff --git a/dev-docs/bidders/ironsource.md b/dev-docs/bidders/ironsource.md
index 3c2add5d2f..f8d1ee0ebc 100644
--- a/dev-docs/bidders/ironsource.md
+++ b/dev-docs/bidders/ironsource.md
@@ -8,6 +8,7 @@ media_types: no-display, video
 schain_supported: true
 gdpr_supported: true
 usp_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note
diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md
index e48380ca00..006fac2fc4 100644
--- a/dev-docs/bidders/ix.md
+++ b/dev-docs/bidders/ix.md
@@ -8,6 +8,7 @@ pbs: true
 userIds: identityLink, netId, fabrickId, zeotapIdPlus, uid2
 pbs_app_supported: true
 schain_supported: true
+coppa_supported: true
 gdpr_supported: true
 getFloor: true
 usp_supported: true
@@ -26,37 +27,16 @@ Maintainer: prebid.support@indexexchange.com
 
 ## Description
 
-Publishers may access Index Exchange's (IX) network of demand
-sources through our Prebid.js and Prebid Server adapters. Both of these modules are GDPR and CCPA compliant.
+Publishers may access Index Exchange's (IX) network of demand sources through our Prebid.js and Prebid Server adapters. Both of these modules are GDPR and CCPA compliant.
 
 ### IX Prebid.js Adapter
 
-Our Prebid.js adapter is compatible with both the older ad unit format where the `sizes` and
-`mediaType` properties are placed at the top-level of the ad unit, and the newer
-format where this information is encapsulated within the `mediaTypes` object. We
-recommend that you use the newer format when possible as it will be better able
-to accommodate new feature additions.
+This module connects publishers to Index Exchange's (IX) network of demand sources through Prebid.js. This module is GDPR and CCPA compliant.
 
-If a mix of properties from both formats is present within an ad unit, the
-newer format's properties will take precedence.
+It is compatible with the new Prebid.js 5.0 ad unit format where banner and video properties, including the size parameter, are stored in the `adUnits[].mediaTypes` object. IX still supports both size as an optional parameter and the Missing Sizes feature, but we recommend upgrading to the Prebid.js 5.0 format.
 
-Here are examples of both formats.
+For more information about how the `adUnits[].mediaTypes` object is formatted in Prebid.js 5.0, refer to the following example.
 
-##### Older Format
-```javascript
-var adUnits = [{
-    // ...
-
-    sizes: [
-        [300, 250],
-        [300, 600]
-    ]
-
-    // ...
-}];
-```
-
-##### Newer Format
 ```javascript
 var adUnits = [{
     // ...
@@ -69,60 +49,63 @@ var adUnits = [{
         },
         video: {
             context: 'instream',
-            playerSize: [
-                [1280, 720]
-            ]
+            playerSize: [300, 250]
         }
     },
     // ...
 }];
 ```
-
 ### Supported Media Types (Prebid.js)
 
 {: .table .table-bordered .table-striped }
-| Type   | Support |
-| ------ | ------- |
-| `Banner` | Fully supported for all IX approved sizes |
-| `Video`  | Fully supported for all IX approved sizes |
-| `Native` | Not supported |
+| Type | Support |
+|---|---|
+| `banner` | Fully supported for all IX approved sizes |
+| `video`  | Fully supported for all IX approved sizes |
+| `native` | Not supported |
 
 ### Supported Media Types (Prebid Server)
 
 {: .table .table-bordered .table-striped }
 | Type   | Support |
-| ------ | ------- |
-| `Banner` | Fully supported |
-| `Video`  | Fully supported, including ad pods for OTT |
-| `Native` | Not supported |
+|------|-------|
+| `banner` | Fully supported |
+| `video`  | Fully supported, including ad pods for OTT |
+| `native` | Not supported |
+
+# Ad Unit or Bidder Parameters
+
+These params can be specified in the ad unit level, which will be the preferred way going forward with PBJS 5.0
+
+Each of the IX-specific parameters provided under the object are detailed here.
 
-## Bid Parameters
+The following parameters are specified in the ad unit `adUnits[].mediaTypes`. This includes each of the IX-specific parameters provided under `adUnits[].bids[].params`. 
 
-Each of the IX-specific parameters provided under the `adUnits[].bids[].params`
-object are detailed here.
+In Prebid.js versions 5.0 and above, mediaType and sizes are not required to be defined at the ad unit level.
 
 ### Banner
 
 {: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-| ---- | ----- | ----------- | ------- | ---- |
-| `siteId` | Required | An IX-specific identifier that is associated with a specific size on this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. | `'3723'` | `string` | 
-| `size` | Required for client-side serving | The single size associated with the site ID. It should be one of the sizes listed in the ad unit under `adUnits[].sizes` or `adUnits[].mediaTypes.banner.sizes`. Note that the 'ix' Prebid Server bid adapter ignores this parameter. | `[300, 250]` | `Array<integer>` | 
-| `id` | Optional | An alphanumerical value used to identify the `slot_id` in reporting | `id: 'billboardHomepage'`, `id: 'billboardArticle'` | `string` |
+| Key | Scope | Type | Description |
+|---|---|---|---|
+| `siteId` | Required | String | An IX-specific identifier that is associated with this ad unit. It will be associated to the single size, if the size provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'3723'`, `'6482'`, `'3639'`|
+| `sizes` | Optional | Number[Number[]] | The size/sizes associated with the site ID, as listed in the ad unit under `adUnits[].mediaTypes.banner.sizes`. For example, `[300, 250], [300, 600], [728, 90]`|
 
 ### Video
 
 {: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-| ---- | ----- | ----------- | ------- | ---- |
-| `siteId` | Required | An IX-specific identifier that is associated with a specific size on this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. | `'3723'` | `string` |
-| `size` | Required | The single size associated with the site ID. It should be one of the sizes listed in the ad unit under `adUnits[].sizes` or `adUnits[].mediaTypes.video.playerSize`. | `[300, 600]` | `Array<integer>` |
-| `video` | Required | The video object will serve as the properties of the video ad. You can create any field under the video object that is mentioned in the `OpenRTB Spec v2.5`. Some fields like `mimes`, `protocols`, `minduration`, `maxduration` are required. Properties not defined at this level, will be pulled from the Adunit level. | `video: { startdelay: 0 }` | `object` |
-| `video.mimes` | Required | Array list of content MIME types supported. | `['video/mp4', 'video/x-flv']` | `Array<string>` |
-| `video.minduration` | Required | Minimum video ad duration in seconds. | `0` | `integer` |
-| `video.maxduration` | Required | Maximum video ad duration in seconds. | `300` | `integer` |
-| `video.protocol` / `video.protocols` | Required | Either a single protocol provided as an integer, or protocols provided as a list of integers. `2` - VAST 2.0, `3` - VAST 3.0, `5` - VAST 2.0 Wrapper, `6` - VAST 3.0 Wrapper | `[2,3,5,6]` | `integer` / `Array<integer>` |
-| `id` | Optional | An alphanumerical value used to identify the `slot_id` in reporting | `id: 'inStreamCTP'`, `id: 'inStreamAutoPlay'` | `string` |
+| Key | Scope | Type | Description |
+|---|---|---|---|
+| `siteId` | Required | String | An IX-specific identifier that is associated with this ad unit. It will be associated to the single size, if the size is provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'3723'`, `'6482'`, `'3639'`|
+| `size` | Optional | Number[] | The single size that is associated with the site ID, as listed in the ad unit under `adUnits[].sizes` or `adUnits[].mediaTypes.video.playerSize`. For example, [300, 250], [300, 600]. <BR><BR>This parameter is optional in Prebid.js versions 5.0 and above. Versions prior to 5.0 will still require a size parameter.|
+| `video` | Optional | Hash | The video object will serve as the properties of the video ad. You can create any field under the video object that is mentioned in the `OpenRTB Spec v2.5`. Some fields like `mimes, protocols, minduration, maxduration` are required. Properties not defined at this level, will be pulled from the Adunit level.|
+| `video.w` | Required | Integer | The video player size width in pixels that will be passed to demand partners.|
+| `video.h` | Required | Integer | The video player size height in pixels that will be passed to demand partners.|
+| `video.playerSize` | Optional* | Integer | The video player size that will be passed to demand partners. * In the absence of `video.w` and `video.h`, this field is required.|
+| `video.mimes` | Required | String[] | Array list of content MIME types supported. Popular MIME types include, but are not limited to, `"video/x-ms- wmv"` for Windows Media and `"video/x-flv"` for Flash Video.|
+| `video.minduration` | Required | Integer | Minimum video ad duration in seconds.|
+| `video.maxduration` | Required | Integer | Maximum video ad duration in seconds.|
+| `video.protocol` / `video.protocols` | Required | Integer / Integer[] | Either a single protocol provided as an integer, or protocols provided as a list of integers. `2` - VAST 2.0, `3` - VAST 3.0, `5` - VAST 2.0 Wrapper, `6` - VAST 3.0 Wrapper|
 
 ## Setup Guide
 
@@ -151,9 +134,7 @@ var adUnits = [{
     mediaTypes: {
         video: {
             context: 'instream',
-            playerSize: [
-                [1280, 720]
-            ]
+            playerSize: [1280, 720]
         }
     },
     bids: []
@@ -169,13 +150,12 @@ bid objects under `adUnits[].bids`:
 {
     bidder: 'ix',
     params: {
-        siteId: '123456',
-        size: [300, 250]
+        siteId: '123456'
     }
 }
 ```
 
-Set `params.siteId` and `params.size` in each bid object to the values provided
+Set `params.siteId` in the bid object to the values provided
 by your IX representative.
 
 **Examples**
@@ -195,14 +175,12 @@ var adUnits = [{
     bids: [{
         bidder: 'ix',
         params: {
-            siteId: '123456',
-            size: [300, 250]
+            siteId: '123456'
         }
     }, {
         bidder: 'ix',
         params: {
-            siteId: '123456',
-            size: [300, 600]
+            siteId: '123456'
         }
     }]
 }];
@@ -210,28 +188,33 @@ var adUnits = [{
 **Video (Instream):**
 ```javascript
 var adUnits = [{
-    code: 'video-request-a',
+    code: 'video-div-a',
     mediaTypes: {
         video: {
+            // Preferred location for openrtb v2.5 compatible video obj
             context: 'instream',
-            playerSize: [
-                [1280, 720]
-            ]
+            playerSize: [300, 250],
+            mimes: [
+                    'video/mp4',
+                    'video/webm'
+                ],
+            minduration: 0,
+            maxduration: 60,
+            protocols: [6]
         }
     },
     bids: [{
         bidder: 'ix',
         params: {
-            siteId: '123456',
-            size: [1280, 720],
+            siteId: '12345'
+        }
+    }, {
+        bidder: 'ix',
+        params: {
+            siteId: '12345',
             video: {
-                mimes: [
-                    'video/mp4',
-                    'video/webm'
-                ],
-                minduration: 0,
-                maxduration: 60,
-                protocols: [6]
+                // openrtb v2.5 compatible video obj
+                // If required, use this to override mediaTypes.video.XX properties
             }
         }
     }]
@@ -249,7 +232,14 @@ var adUnits = [{
     mediaTypes: {
         video: {
             context: 'outstream',
-            playerSize: [[640, 360]]
+            playerSize: [300, 250],
+            mimes: [
+                    'video/mp4',
+                    'video/webm'
+                ],
+            minduration: 0,
+            maxduration: 60,
+            protocols: [6]
         }
     },
     renderer: {
@@ -261,16 +251,9 @@ var adUnits = [{
     bids: [{
         bidder: 'ix',
         params: {
-            siteId: '123456',
-            size: [640, 360],
+            siteId: '12345',
             video: {
-                mimes: [
-                    'video/mp4',
-                    'video/webm'
-                ],
-                minduration: 0,
-                maxduration: 60,
-                protocols: [6]
+                // If required, use this to override mediaTypes.video.XX properties   
             }
         }
     }]
@@ -311,21 +294,21 @@ pbjs.setConfig({
 By default, the IX bidding adapter bids on all banner sizes available in the ad unit when configured to at least one banner size. If you want the IX bidding adapter to only bid on the banner size it’s configured to, switch off this feature using `detectMissingSizes`.
 ```
 pbjs.setConfig({
-                ix: {
-                    detectMissingSizes: false
-                }
-            });
+    ix: {
+        detectMissingSizes: false
+    }
+});
 ```
 OR
 ```
 pbjs.setBidderConfig({
-                bidders: ["ix"],
-                config: {
-                    ix: {
-                        detectMissingSizes: false
-                    }
-                }
-            });
+    bidders: ["ix"],
+    config: {
+        ix: {
+            detectMissingSizes: false
+        }
+    }
+});
 ```
 
 ### 2. Include `ixBidAdapter` in your build process
@@ -356,6 +339,35 @@ gulp build --modules=bidderModules.json
 
 ## Setting First Party Data (FPD)
 
+As a part of 4.30, IX will start to pick up FPD in the global FPD module, as well as continue to pick up IX bidder-specific FPD. Previous versions of IX Bid Adapter will only support the IX bidder-specific FPD.
+
+### Global FPD
+
+As of Prebid.js 4.30, use the more generic `ortb2` interface, which can be used for more than just First Party Data.
+
+The First Party Data feature allows publishers to specify key/value data in one place where each compatible bid adapter can read it.
+
+To supply global data, use the [`setConfig()`](/dev-docs/publisher-api-reference/setConfig.html) function as illustrated below:
+
+```
+pbjs.setConfig({
+   ortb2: {
+       site: {
+            ...
+       },
+       user: {
+            ...
+       }
+    }
+});
+```
+
+Use the [`setBidderConfig()`](/dev-docs/publisher-api-reference/setBidderConfig.html) function to supply bidder-specific data.
+
+For more information about the standard or more detailed examples, refer to [First Party Data Feature](/features/firstPartyData.html).
+
+### IX bidder-specific FPD
+
 FPD allows you to specify key-value pairs that are passed as part of the
 query string to IX for use in Private Marketplace Deals which rely on query
 string targeting for activation. For example, if a user is viewing a
@@ -383,6 +395,9 @@ pbjs.setConfig({
 The values can be updated at any time by calling `pbjs.setConfig` again. The
 changes will be reflected in any proceeding bid requests.
 
+{: .alert.alert-warning :}
+Continue to use IX bidder-specific First Party Data for IX deals. Global First Party Data is not yet supported in IX deals. Consult your IX representative with any questions.
+
 ## Setting a Server Side Timeout
 
 Setting a server-side timeout allows you to control the max length of time taken to connect to the server. The default value when unspecified is 50ms.
@@ -453,18 +468,11 @@ towards total impressions on IX's side.
 
 ## FAQs
 
-### Why do I have to input size in `adUnits[].bids[].params` for IX when the size is already in the ad unit?
-
-There are two important reasons why we require it:
-
-1. An IX site ID maps to a single size, whereas an ad unit can have multiple
-sizes. To ensure that the right site ID is mapped to the correct size in the ad
-unit we require the size to be explicitly stated.
+#### Why do I have to input size in `adUnits[].bids[].params` for IX when the size is already in the ad unit?
 
-2. An ad unit may have sizes that IX does not support. By explicitly stating the
-size, you can choose not to have IX bid on certain sizes that are invalid.
+If you are using Prebid.js version 5.0 and above, the `size` parameter is not a required field. Only the `siteID` is required, and it is stored with the sizes in the ad unit.
 
-### How can I view the bid request sent to IX by Prebid.js?
+#### How can I view the bid request sent to IX by Prebid.js?
 
 In your browser of choice, create a new tab and open the developer tools. In
 developer tools, select the network tab. Then, navigate to a page where IX is
diff --git a/dev-docs/bidders/jcm.md b/dev-docs/bidders/jcm.md
index a19ec3ce21..266c16c3b4 100644
--- a/dev-docs/bidders/jcm.md
+++ b/dev-docs/bidders/jcm.md
@@ -4,6 +4,7 @@ title: J Carter Marketing
 description: Prebid J Carter Marketing Bidder Adaptor
 pbjs: true
 biddercode: jcm
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/komoona.md b/dev-docs/bidders/komoona.md
index 00508dfdf7..14a371176e 100644
--- a/dev-docs/bidders/komoona.md
+++ b/dev-docs/bidders/komoona.md
@@ -4,6 +4,7 @@ title: Komoona
 description: Prebid Komoona Bidder Adaptor
 pbjs: true
 biddercode: komoona
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/kubient.md b/dev-docs/bidders/kubient.md
index 5e255461e1..f8f124fa63 100644
--- a/dev-docs/bidders/kubient.md
+++ b/dev-docs/bidders/kubient.md
@@ -6,9 +6,12 @@ pbjs: true
 pbs: true
 schain_supported: true
 biddercode: kubient
-media_types: banner
+media_types: banner, video
 gdpr_supported: true
 usp_supported: true
+tcf2_supported: true
+pbjs: true
+pbs: true
 gvl_id: 794
 ---
 
@@ -16,6 +19,57 @@ gvl_id: 794
 
 The Kubient Bidder Adapter requires setup and approval before beginning. Please reach out to <prebid@kubient.com> for more details.
 
+Banner Settings:
+
+var adUnits = [
+    {
+        code: 'banner-ad-unit',
+        mediaTypes: {
+            banner: {
+                sizes: [[300, 100]]
+            }
+        },
+        bids: [{
+            bidder: 'kubient',
+            params: {
+                zoneid: "5fbb948f1e22b",
+            }
+        }]
+    }
+];
+
+Video Settings:
+
+var adUnits = [
+    {
+        code: 'video-ad-unit',
+        mediaTypes: {
+            video: {
+                playerSize: [300, 250],               // required
+                context: 'instream',                  // required
+                mimes: ['video/mp4','video/x-flv'],   // required
+                protocols: [ 2, 3 ],                  // required, set at least 1 value in array
+                placement: 1,                         // optional, defaults to 2 when context = outstream
+                api: [ 1, 2 ],                        // optional
+                skip: 0,                              // optional
+                minduration: 5,                       // optional
+                maxduration: 30,                      // optional
+                playbackmethod: [1,3],                // optional
+                battr: [ 13, 14 ],                    // optional
+                linearity: 1,                         // optional
+                minbitrate: 10,                       // optional
+                maxbitrate: 10                        // optional
+            }
+        },
+        bids: [{
+            bidder: 'kubient',
+            params: {
+                zoneid: "60ad1c0b35864",
+            }
+        }]
+    }
+];
+
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/lemma.md b/dev-docs/bidders/lemma.md
index b4b3e71b99..68c76068a7 100644
--- a/dev-docs/bidders/lemma.md
+++ b/dev-docs/bidders/lemma.md
@@ -4,6 +4,7 @@ title: LEMMA
 description: Prebid Lemma Bidder Adapter
 pbjs: true
 biddercode: lemma
+pbjs_version_notes: not in 5.x
 ---
 
 ### Integration Note:
diff --git a/dev-docs/bidders/lifestreet.md b/dev-docs/bidders/lifestreet.md
index f742988612..049e1acad3 100644
--- a/dev-docs/bidders/lifestreet.md
+++ b/dev-docs/bidders/lifestreet.md
@@ -9,6 +9,7 @@ media_types: video
 gdpr_supported: true
 usp_supported: true
 gvl_id: 67
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/limelightDigital.md b/dev-docs/bidders/limelightDigital.md
new file mode 100644
index 0000000000..6acf929fb6
--- /dev/null
+++ b/dev-docs/bidders/limelightDigital.md
@@ -0,0 +1,17 @@
+---
+layout: bidder
+title: Limelight Digital
+description: Prebid Limelight Digital Bidder Adaptor
+pbjs: true
+biddercode: limelightDigital
+media_types: video
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope      | Description                                                    | Example            |type|
+| :-----------   | :--------- | :------------                                                  | :----------------- |:---|
+| `host` | required | Ad network's RTB host | `'exchange.ortb.net'` | `string` |
+| `adUnitId` | required   | Ad Unit Id will be generated on Limelight Digital Platform. | 0                        |integer|
+| `adUnitType`      | required   | Type of Ad Unit (`'video'`, `'banner'`)                                             | `'banner'`                 |string|
diff --git a/dev-docs/bidders/lkqd.md b/dev-docs/bidders/lkqd.md
index 0dc9b9f3b3..e2a48b1fb0 100644
--- a/dev-docs/bidders/lkqd.md
+++ b/dev-docs/bidders/lkqd.md
@@ -4,6 +4,7 @@ title: LKQD
 description: Prebid LKQD Bidder Adaptor
 pbjs: true
 biddercode: lkqd
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/loopme.md b/dev-docs/bidders/loopme.md
index f640ad40e1..cd2bc82b47 100644
--- a/dev-docs/bidders/loopme.md
+++ b/dev-docs/bidders/loopme.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: loopme
 gdpr_supported: true
 media_types: banner, video
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid params
diff --git a/dev-docs/bidders/lunamedia.md b/dev-docs/bidders/lunamedia.md
index f8bbc1cfb4..80d72de5f8 100644
--- a/dev-docs/bidders/lunamedia.md
+++ b/dev-docs/bidders/lunamedia.md
@@ -5,6 +5,7 @@ description: Prebid Luna Media Bidder Adapter
 pbjs: true
 pbs: true
 biddercode: lunamedia
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/luponmedia.md b/dev-docs/bidders/luponmedia.md
index 3d13033110..7c7b46b1b5 100644
--- a/dev-docs/bidders/luponmedia.md
+++ b/dev-docs/bidders/luponmedia.md
@@ -9,6 +9,7 @@ usp_supported: true
 coppa_supported: true
 schain_supported: true
 userIds: digitrust, identityLink, liveIntentId, pubCommonId
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/madvertise.md b/dev-docs/bidders/madvertise.md
index 202ea417ba..3f58b6578b 100644
--- a/dev-docs/bidders/madvertise.md
+++ b/dev-docs/bidders/madvertise.md
@@ -17,7 +17,8 @@ pbs_app_supported: true
 {: .table .table-bordered .table-striped }
 | Name         | Scope    | Description                                                                                             | Example                                 | Type      |
 |--------------|----------|---------------------------------------------------------------------------------------------------------|-----------------------------------------|-----------|
-| `s`          | required | Zone code. This parameter should be the unique Publisher ID of your mobile application or website.      | `'/4543756/prebidadaptor/madvertiseHB'` | `string`  |
+| `zoneId`     | required Prebid version 5.x+| Zone code. This parameter should be the unique Publisher ID of your mobile application or website.      | `/1111111/banner`                       | `string`  |
+| `s`          | required in-scope only for 4.x | Zone code. This parameter should be the unique Publisher ID of your mobile application or website. Replace by zoneId starting 5.x      | `/1111111/banner`                       | `string`  |
 | `lat`        | optional | Latitude                                                                                                | `48.866667`                             | `float`   |
 | `long`       | optional | Longitude                                                                                               | `2.333333`                              | `float`   |
 | `age`        | optional | Age                                                                                                     | `19`                                    | `integer` |
@@ -31,7 +32,7 @@ pbs_app_supported: true
 {
     bidder: 'madvertise',
     params: { 
-            s: "/4543756/prebidadaptor/madvertiseHB",
+            zoneId: "/4543756/prebidadaptor/madvertiseHB",
             tgt:'aa=a;bb=b'
     }
 }
@@ -77,4 +78,5 @@ pbs_app_supported: true
     ],
     "tmax": 1000
 }
-```
\ No newline at end of file
+```
+
diff --git a/dev-docs/bidders/mathildeads.md b/dev-docs/bidders/mathildeads.md
new file mode 100644
index 0000000000..f4e21f84af
--- /dev/null
+++ b/dev-docs/bidders/mathildeads.md
@@ -0,0 +1,20 @@
+---
+layout: bidder
+title: MathildeAds
+description: Prebid MathildeAds Bidder Adapter
+biddercode: mathildeads
+usp_supported: true
+schain_supported: true
+media_types: banner, video, native
+gdpr_supported: true
+pbjs: true
+pbs: false
+pbs_app_supported: false
+---
+
+### Prebid.JS Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                              | Example    | Type      |
+|----------------|----------|----------------------------------------------------------|------------|-----------|
+| `placementId` | required | Placement Id will be generated on MathildeAds Platform. | `'1234'`        | `string` |
\ No newline at end of file
diff --git a/dev-docs/bidders/meazy.md b/dev-docs/bidders/meazy.md
index ed3cc5f0bb..5a22b93b07 100644
--- a/dev-docs/bidders/meazy.md
+++ b/dev-docs/bidders/meazy.md
@@ -4,6 +4,7 @@ title: Meazy
 description: Prebid Meazy Bidder Adaptor
 pbjs: true
 biddercode: meazy
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid params
diff --git a/dev-docs/bidders/mediago.md b/dev-docs/bidders/mediago.md
index f1fd1f7408..42d5b3a484 100644
--- a/dev-docs/bidders/mediago.md
+++ b/dev-docs/bidders/mediago.md
@@ -5,6 +5,7 @@ description: MediaGo Prebid Bidder Adapter
 biddercode: mediago
 media_types: banner
 pbjs: true
+pbjs_version_notes: not in 5.x
 ---
 ### Note:
 
diff --git a/dev-docs/bidders/mediakeys.md b/dev-docs/bidders/mediakeys.md
new file mode 100644
index 0000000000..931809f02a
--- /dev/null
+++ b/dev-docs/bidders/mediakeys.md
@@ -0,0 +1,24 @@
+---
+layout: bidder
+title: Mediakeys
+description: Mediakeys Prebid Bidder Adapter
+biddercode: mediakeys
+media_types: banner
+gvl_id: 498
+pbjs: true
+getFloor: true
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+safeframes_ok: true
+userIds: all
+
+---
+### Note:
+
+The Mediakeys Bidding adapter requires setup before beginning and will repsond with bids for whitelisted domains only. Please contact us at prebidjs@mediakeys.com.
+
+### Bid Params
+
+No bid params are required. See Note section.
diff --git a/dev-docs/bidders/medianet.md b/dev-docs/bidders/medianet.md
index a95f522f62..73de20eb45 100644
--- a/dev-docs/bidders/medianet.md
+++ b/dev-docs/bidders/medianet.md
@@ -54,7 +54,9 @@ var videoAdUnit = {
   mediaTypes: {
     video: {
       context: "instream",
-      playerSize: [640, 480]
+      playerSize: [640, 480],
+      mimes: ['video/mp4'],
+      placement: 1
     }
   },
   bids: [{
@@ -62,10 +64,6 @@ var videoAdUnit = {
     params: {
       cid: '8CUX0H51C',
       crid: '776755783',  
-      video: {
-        mimes: ['video/mp4'],
-        placement: 1
-      },
       // Site member is to be used only for testing
       site: {
         page: 'http://smoketesting.net/prebidtest/',
diff --git a/dev-docs/bidders/missena.md b/dev-docs/bidders/missena.md
index fdff453fb1..4b2c853b0c 100644
--- a/dev-docs/bidders/missena.md
+++ b/dev-docs/bidders/missena.md
@@ -6,6 +6,7 @@ biddercode: missena
 gvl_id: 867
 pbjs: true
 safeframes_ok: false
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note
diff --git a/dev-docs/bidders/mobfox.md b/dev-docs/bidders/mobfox.md
index fd6e5b86a0..9bcd5f61d1 100644
--- a/dev-docs/bidders/mobfox.md
+++ b/dev-docs/bidders/mobfox.md
@@ -5,6 +5,7 @@ description: Prebid MobFox Bidder Adaptor
 pbjs: true
 biddercode: mobfox
 media_types: video
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/mobfoxpb.md b/dev-docs/bidders/mobfoxpb.md
index 1805342abf..eec2b0d860 100644
--- a/dev-docs/bidders/mobfoxpb.md
+++ b/dev-docs/bidders/mobfoxpb.md
@@ -11,6 +11,7 @@ pbjs: true
 pbs: true
 pbs_app_supported: true
 gvl_id: 311
+pbjs_version_notes: not in 5.x
 ---
 
 ### Prebid.JS Bid Params
diff --git a/dev-docs/bidders/mobsmart.md b/dev-docs/bidders/mobsmart.md
index 6bff488360..59a5b165ab 100644
--- a/dev-docs/bidders/mobsmart.md
+++ b/dev-docs/bidders/mobsmart.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: mobsmart
 media_types: banner
 userIds: pubCommonId
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/mytarget.md b/dev-docs/bidders/mytarget.md
index d53cbca13a..cf96c21dff 100644
--- a/dev-docs/bidders/mytarget.md
+++ b/dev-docs/bidders/mytarget.md
@@ -4,6 +4,7 @@ title: myTarget
 description: Prebid myTarget Bidder Adapter
 pbjs: true
 biddercode: mytarget
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/nafdigital.md b/dev-docs/bidders/nafdigital.md
index da0b164cff..a21d4173c6 100644
--- a/dev-docs/bidders/nafdigital.md
+++ b/dev-docs/bidders/nafdigital.md
@@ -6,6 +6,7 @@ top_nav_section: dev_docs
 nav_section: reference
 pbjs: true
 biddercode: nafdigital
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/nanointeractive.md b/dev-docs/bidders/nanointeractive.md
index 28bde8cd92..43fed8d69f 100644
--- a/dev-docs/bidders/nanointeractive.md
+++ b/dev-docs/bidders/nanointeractive.md
@@ -8,6 +8,7 @@ biddercode: nanointeractive
 media_types: banner
 gdpr_supported: true
 gvl_id: 72
+pbjs_version_notes: not in 5.x
 ---
 
 ### Requirements:
diff --git a/dev-docs/bidders/nasmediaAdmixer.md b/dev-docs/bidders/nasmediaAdmixer.md
index 476424c150..a8a676e2c6 100644
--- a/dev-docs/bidders/nasmediaAdmixer.md
+++ b/dev-docs/bidders/nasmediaAdmixer.md
@@ -4,6 +4,7 @@ title: Nasmedia Admixer
 description: Prebid Nasmedia Admixer Bidder Adapter
 pbjs: true
 biddercode: nasmediaAdmixer
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/newborntownWeb.md b/dev-docs/bidders/newborntownWeb.md
index cade9d7137..6dee12c74d 100644
--- a/dev-docs/bidders/newborntownWeb.md
+++ b/dev-docs/bidders/newborntownWeb.md
@@ -4,6 +4,7 @@ title: newborntownWeb
 description: Prebid newborntownWeb Bidder Adaptor
 pbjs: true
 biddercode: newborntownWeb
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/nextMillennium.md b/dev-docs/bidders/nextMillennium.md
index b85074255f..4d781616af 100644
--- a/dev-docs/bidders/nextMillennium.md
+++ b/dev-docs/bidders/nextMillennium.md
@@ -4,11 +4,12 @@ title: NextMillennium
 description: NextMillennium bid adapter
 pbjs: true
 biddercode: nextMillennium
+media_types: banner
 ---
 
 ### bid params
 
 {: .table .table-bordered .table-striped }
-| Name           | Scope    | Description                             | Example | Type    |
-|----------------+----------+-----------------------------------------+---------|---------|
-| `placement_id` | required | Placement ID, provided by nextMillennium | 12345   | Integer |
+| Name           | Scope    | Description                              | Example   | Type    |
+|----------------+----------+------------------------------------------+-----------|---------|
+| `placement_id` | required | Placement ID, provided by nextMillennium | `'12345'` | String  |
diff --git a/dev-docs/bidders/nextroll.md b/dev-docs/bidders/nextroll.md
index 583ee6e712..accca4ab35 100644
--- a/dev-docs/bidders/nextroll.md
+++ b/dev-docs/bidders/nextroll.md
@@ -8,6 +8,7 @@ media_types: display, native
 gdpr_supported: false
 usp_supported: true
 prebid_member: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/ogury.md b/dev-docs/bidders/ogury.md
index 213001ce90..8b9865d7ab 100644
--- a/dev-docs/bidders/ogury.md
+++ b/dev-docs/bidders/ogury.md
@@ -8,6 +8,7 @@ gvl_id: 31
 usp_supported: false
 coppa_supported: false
 schain_supported: false
+getFloor: true
 dchain_supported: false
 media_types: banner
 safeframes_ok: false
diff --git a/dev-docs/bidders/open8.md b/dev-docs/bidders/open8.md
index 6f11a8ef46..0f930563dc 100644
--- a/dev-docs/bidders/open8.md
+++ b/dev-docs/bidders/open8.md
@@ -5,6 +5,7 @@ description: Prebid OPEN8 Bidder Adaptor
 pbjs: true
 biddercode: open8
 media_types: video, banner
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/openweb.md b/dev-docs/bidders/openweb.md
new file mode 100644
index 0000000000..162df57a03
--- /dev/null
+++ b/dev-docs/bidders/openweb.md
@@ -0,0 +1,64 @@
+---
+layout: bidder
+title: OpenWeb
+description: Prebid OpenWeb Bidder Adapter
+biddercode: openweb
+media_types: banner
+gdpr_supported: true
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+safeframes_ok: true
+prebid_member: true
+pbjs: true
+pbs: true
+gvl_id: 280
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name  | Scope    | Description                     | Example  | Type      |
+|-------|----------|---------------------------------|----------|-----------|
+| `aid` | required | The source ID from OpenWeb. | `650342` | `integer` |
+
+### Description
+OpenWeb.com official prebid adapter. Available in both client and server side versions.
+OpenWeb header bidding adapter provides solution for accessing banner demand.
+
+### Test Parameters
+```
+var adUnits = [
+    // Banner adUnit
+    {
+        mediaTypes: {
+          banner: {
+            sizes: [[300, 250]]
+          }
+        },
+        code: 'div-test-div',
+        bids: [{
+         bidder: 'openweb',
+         params: {
+           aid: 650342
+         }
+        }]
+    },
+    // Prebid server 
+    {
+        mediaTypes: {
+          banner: {
+            sizes: [[300, 250]]
+          }
+        },
+        code: 'div-test-div',
+        bids: [{
+         bidder: 'openweb',
+         params: {
+           aid: 650346
+         }
+        }]
+    }
+];
+```
diff --git a/dev-docs/bidders/openwebvideo.md b/dev-docs/bidders/openwebvideo.md
new file mode 100644
index 0000000000..bc6a663c50
--- /dev/null
+++ b/dev-docs/bidders/openwebvideo.md
@@ -0,0 +1,45 @@
+---
+layout: bidder
+title: OpenWeb Video
+description: Prebid OpenWeb Video Bidder Adapter
+pbjs: true
+biddercode: openwebvideo
+aliasCode: aniview
+media_types: banner, video
+gdpr_supported: true
+usp_supported: true
+schain_supported: true
+safeframes_ok: true
+---
+
+### Note:
+For more information about [OpenWeb](https://www.openweb.com/).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name             | Scope    | Description      | Example                      | Type     |
+|------------------|----------|------------------|------------------------------|----------|
+| `AV_PUBLISHERID` | required | Publisher/Netid  | `'55b88d4a181f465b3e8b4567'` | `string` |
+| `AV_CHANNELID`   | required | Channel id       | `'5a5f17a728a06102d14c2718'` | `string` |
+
+### Test Parameters
+```
+videoAdUnit = [
+{
+  code: 'video1',
+  mediaTypes: {
+    video: {
+      playerSize: [[640, 480]],
+      context: 'outstream'
+    },
+  },
+  bids: [{
+    bidder: 'openwebvideo',
+    params: {
+      AV_PUBLISHERID: '55b78633181f4603178b4568',
+      AV_CHANNELID: '5d19dfca4b6236688c0a2fc4'
+    }
+  }]
+}];
+```
diff --git a/dev-docs/bidders/openx.md b/dev-docs/bidders/openx.md
index 7f6e24b4bb..318a44406b 100644
--- a/dev-docs/bidders/openx.md
+++ b/dev-docs/bidders/openx.md
@@ -11,7 +11,7 @@ gdpr_supported: true
 usp_supported: true
 coppa_supported: true
 getFloor: true
-userIds: britepoolId, criteo, fabrickId, haloId, id5Id, identityLink, idxId, intentIqId, liveIntentId, lotamePanoramaId, merkleId, netId, parrableId, pubCommonId, quantcastId, sharedId, tapadId, unifiedId, verizonMediaId, zeotapIdPlus
+userIds: admixerId, amxId, britepoolId, criteo, dapId, deepintentId, dmdId, fabrickId, flocId, haloId, id5Id, identityLink, idxId, intentIqId, liveIntentId, lotamePanoramaId, merkleId, mwOpenLinkId, netId, nextrollId, novatiq, parrableId, pubCommonId, quantcastId, sharedId, tapadId, uid2, unifiedId, verizonMediaId, zeotapIdPlus
 prebid_member: true
 gvl_id: 69
 ---
@@ -79,17 +79,15 @@ var adUnits = [
     mediaTypes: {
       video: {
         playerSize: [640, 480],
-        context: 'instream'
+        context: 'instream',
+        mimes: ['video/x-ms-wmv, video/mp4']
       }
     },
     bids: [{
       bidder: 'openx',
       params: {
         unit: '1611023124',
-        delDomain: 'PUBLISHER-d.openx.net',
-        video: {
-          mimes: ['video/x-ms-wmv, video/mp4']
-        }
+        delDomain: 'PUBLISHER-d.openx.net'
       }
     }]
   }
diff --git a/dev-docs/bidders/operaads.md b/dev-docs/bidders/operaads.md
new file mode 100644
index 0000000000..b10965607c
--- /dev/null
+++ b/dev-docs/bidders/operaads.md
@@ -0,0 +1,31 @@
+---
+layout: bidder
+title: OperaAds
+description: Prebid OperaAds Bidder Adapter
+biddercode: operaads
+gdpr_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: true
+schain_supported: true
+dchain_supported: false
+media_types: banner, video, native
+safeframes_ok: false
+bidder_supports_deals: false
+pbjs: true
+pbs: true
+prebid_member: false
+---
+
+### Registration
+
+If you have any questions regarding set up, please reach out to your account manager or adtech-prebid-group@opera.com.
+
+### Bid Parameters
+
+{: .table .table-bordered .table-striped }
+| Name        | Scope    | Description            | Example          | Type     |
+|-------------|----------|------------------------|------------------|----------|
+| `placementId`| required | Placement Id          | `s12345678`      | `string` |
+| `endpointId`| required | Endpoint ID            | `ep1234566`      | `string` |
+| `publisherId`| required | Publisher ID          | `pub123456`      | `string` |
\ No newline at end of file
diff --git a/dev-docs/bidders/optimera.md b/dev-docs/bidders/optimera.md
index a71b751b1f..2aaf77483a 100644
--- a/dev-docs/bidders/optimera.md
+++ b/dev-docs/bidders/optimera.md
@@ -4,6 +4,7 @@ title: Optimera
 description: Optimera Bidder Adaptor
 pbjs: true
 biddercode: optimera
+pbjs_version_notes: for 5.x, use the module
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/optout.md b/dev-docs/bidders/optout.md
new file mode 100644
index 0000000000..dc558f411a
--- /dev/null
+++ b/dev-docs/bidders/optout.md
@@ -0,0 +1,18 @@
+---
+layout: bidder
+title: Opt Out Advertising
+description: Prebid Opt Out Advertising Bidder Adaptor
+pbjs: true
+pbs: true
+biddercode: optout
+gdpr_supported: true
+gvl_id: 227
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name        | Scope    | Description          | Example        | Type      |
+|-------------|----------|----------------------|----------------|-----------|
+| `publisher` | required | Opt Out publisher ID | `8`            | `string`  |
+| `adslot`    | required | Opt Out Adslot       | `prebid_demo`  | `string`  |
diff --git a/dev-docs/bidders/otm.md b/dev-docs/bidders/otm.md
index 97b6bd0d5a..eb664b5f80 100644
--- a/dev-docs/bidders/otm.md
+++ b/dev-docs/bidders/otm.md
@@ -4,6 +4,7 @@ title: OTM
 description: OTM Bidder Adapter
 pbjs: true
 biddercode: otm
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/outbrain.md b/dev-docs/bidders/outbrain.md
index 1e71f6a77f..f555fb4685 100644
--- a/dev-docs/bidders/outbrain.md
+++ b/dev-docs/bidders/outbrain.md
@@ -13,7 +13,7 @@ pbjs: true
 pbs: true
 pbs_app_supported: true
 prebid_member: true
-pbjs_version_notes: for versions 4.35+
+pbjs_version_notes: v4.35 and later
 ---
 
 ### Registration
@@ -60,7 +60,7 @@ adapters:
 | `publisher.domain` | optional | The publisher domain                                           | `'publisher.com'`  | `string`       |
 | `tagid`            | optional | Identifier for specific ad placement or ad tag                 | `'tag-id'`         | `string`       |
 | `bcat`             | optional | Blocked advertiser categories using the IAB content categories | `['IAB1-1']`       | `string array` |
-| `badv`             | optional | Block list of advertisers by their domains                     | `['example.com]'`  | `string array` |
+| `badv`             | optional | Block list of advertisers by their domains                     | `['example.com']`  | `string array` |
 
 #### Native example
 
diff --git a/dev-docs/bidders/outbrain_old.md b/dev-docs/bidders/outbrain_old.md
index 5bf0794eb3..e0529b8eee 100644
--- a/dev-docs/bidders/outbrain_old.md
+++ b/dev-docs/bidders/outbrain_old.md
@@ -61,7 +61,7 @@ adapters:
 | `publisher.domain` | optional | The publisher domain                                           | `'publisher.com'`  | `string`       |
 | `tagid`            | optional | Identifier for specific ad placement or ad tag                 | `'tag-id'`         | `string`       |
 | `bcat`             | optional | Blocked advertiser categories using the IAB content categories | `['IAB1-1']`       | `string array` |
-| `badv`             | optional | Block list of advertisers by their domains                     | `['example.com]'`  | `string array` |
+| `badv`             | optional | Block list of advertisers by their domains                     | `['example.com']`  | `string array` |
 
 #### Native example
 
diff --git a/dev-docs/bidders/outcon.md b/dev-docs/bidders/outcon.md
index bfb1b2d71e..243c7cb12d 100644
--- a/dev-docs/bidders/outcon.md
+++ b/dev-docs/bidders/outcon.md
@@ -4,6 +4,7 @@ title: Outcon
 description: Prebid Outcon Bidder Adaptor
 pbjs: true
 biddercode: outcon
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/performax.md b/dev-docs/bidders/performax.md
index 630db169ff..0fc5bea4f5 100644
--- a/dev-docs/bidders/performax.md
+++ b/dev-docs/bidders/performax.md
@@ -5,6 +5,7 @@ description: Prebid Performax Bidder Adaptor
 pbjs: true
 biddercode: performax
 media_types: banner
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/pixfuture.md b/dev-docs/bidders/pixfuture.md
new file mode 100644
index 0000000000..c718b385dc
--- /dev/null
+++ b/dev-docs/bidders/pixfuture.md
@@ -0,0 +1,19 @@
+---
+layout: bidder
+title: PixFuture
+description: Prebid PixFuture Bidder Adapter
+biddercode: pixfuture
+media_types: banner
+gdpr_supported: true
+prebid_member: false
+coppa_supported: true
+usp_supported: true
+userIds: flocId, criteoId, unifiedId, id5Id, sharedId, identityLink, liveIntentId, fabrickId
+pbs: false
+pbjs: true
+---
+#### Bid Params
+
+| Name                | Scope    | Description                                                                                                                                                                   | Example                                               | Type             |
+|---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------|
+| `pix_id`       | required | The pix_id is an ID from PixFuture.  The `pix_id` parameter should be a `string`                                                  | `"Abc123"`                                            | `string`         |
diff --git a/dev-docs/bidders/piximedia.md b/dev-docs/bidders/piximedia.md
index 3c69172629..6c72ed7d85 100644
--- a/dev-docs/bidders/piximedia.md
+++ b/dev-docs/bidders/piximedia.md
@@ -5,6 +5,7 @@ description: Piximedia Bidder Adaptor
 pbjs: true
 biddercode: piximedia
 media_types: banner
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/platformio.md b/dev-docs/bidders/platformio.md
index f2fd6cbf25..f8953d0039 100644
--- a/dev-docs/bidders/platformio.md
+++ b/dev-docs/bidders/platformio.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: platformio
 media_types: native, video
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Disclosure
diff --git a/dev-docs/bidders/prebidServer.md b/dev-docs/bidders/prebidServer.md
index f8528473b5..f599598761 100644
--- a/dev-docs/bidders/prebidServer.md
+++ b/dev-docs/bidders/prebidServer.md
@@ -91,18 +91,17 @@ var adUnits = [{
         video: {
             playerSize: [640, 480],
             context: 'outstream',
-            mimes: ['video/mp4']
+            mimes: ['video/mp4'],
+            protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+            playbackmethod: [2],
+            skip: 1
         }
     },
     bids: [
         {
             bidder: 'appnexus',
             params: {
-                placementId: 13232392,
-                video: {
-                    skippable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: 13232392
             },
 
         }
diff --git a/dev-docs/bidders/project-limelight.md b/dev-docs/bidders/projectLimelight.md
similarity index 53%
rename from dev-docs/bidders/project-limelight.md
rename to dev-docs/bidders/projectLimelight.md
index 16b56e3aed..39a7a867e2 100644
--- a/dev-docs/bidders/project-limelight.md
+++ b/dev-docs/bidders/projectLimelight.md
@@ -5,6 +5,8 @@ description: Prebid Project Limelight Bidder Adaptor
 pbjs: true
 biddercode: project-limelight
 aliasCode: projectLimeLight
+media_types: video
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
@@ -12,6 +14,6 @@ aliasCode: projectLimeLight
 {: .table .table-bordered .table-striped }
 | Name           | Scope      | Description                                                    | Example            |type|
 | :-----------   | :--------- | :------------                                                  | :----------------- |:---|
-| `host` | required | Ad network's RTB host | `'ads.project-limelight.com'` | `string` |
-| `adUnitId` | required   | Ad Unit Id will be generated on Project Limelight Platform. | 0                        |integer|
-| `adUnitType`      | required   | Type of Ad Unit ('video', 'banner')                                             | 'banner'                 |string|
+| `host` | required | Ad network's RTB host | `'exchange.ortb.net'` | `string` |
+| `adUnitId` | required   | Ad Unit Id will be generated on Limelight Digital Platform. | 0                        |integer|
+| `adUnitType`      | required   | Type of Ad Unit (`'video'`, `'banner'`)                                             | `'banner'`                 |string|
diff --git a/dev-docs/bidders/pubmatic.md b/dev-docs/bidders/pubmatic.md
index 17850cb022..0265738a9f 100644
--- a/dev-docs/bidders/pubmatic.md
+++ b/dev-docs/bidders/pubmatic.md
@@ -131,29 +131,27 @@ var videoAdUnits = [
     mediaTypes: {
         video: {
             playerSize: [640, 480],           // required
-            context: 'instream'
+            context: 'instream',
+            mimes: ['video/mp4','video/x-flv'],   // required
+            skip: 1,                              // optional
+            minduration: 5,                       // optional
+            maxduration: 30,                      // optional
+            startdelay: 5,                        // optional
+            playbackmethod: [1,3],                // optional
+            api: [ 1, 2 ],                        // optional
+            protocols: [ 2, 3 ],                  // optional
+            battr: [ 13, 14 ],                    // optional
+            linearity: 1,                         // optional
+            placement: 2,                         // optional
+            minbitrate: 10,                       // optional
+            maxbitrate: 10                        // optional
         }
     },
     bids: [{
       bidder: 'pubmatic',
       params: {
         publisherId: '32572',                     // required
-        adSlot: '38519891@300x250',              // required
-        video: {
-          mimes: ['video/mp4','video/x-flv'],   // required
-          skippable: true,                      // optional
-          minduration: 5,                       // optional
-          maxduration: 30,                      // optional
-          startdelay: 5,                        // optional
-          playbackmethod: [1,3],                // optional
-          api: [ 1, 2 ],                        // optional
-          protocols: [ 2, 3 ],                  // optional
-          battr: [ 13, 14 ],                    // optional
-          linearity: 1,                         // optional
-          placement: 2,                         // optional
-          minbitrate: 10,                       // optional
-          maxbitrate: 10                        // optional
-        }
+        adSlot: '38519891@300x250'                // required
       }
     }]
 }]
diff --git a/dev-docs/bidders/pulsepoint.md b/dev-docs/bidders/pulsepoint.md
index d4abcbee16..c394d717f7 100644
--- a/dev-docs/bidders/pulsepoint.md
+++ b/dev-docs/bidders/pulsepoint.md
@@ -34,6 +34,7 @@ of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381)
 
 ### Video parameters
 Parameters on the Video object in Bid params for PulsePoint. [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) Video object specification is used. Below are some sample parameters from the OpenRTB Video specs.
+Please use `mediaTypes.video` to specify video params in place of this parameter for PBJS 5.0 and later.
 
 
 {: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/quantumdex.md b/dev-docs/bidders/quantumdex.md
index 4c441cb970..1119a035c4 100644
--- a/dev-docs/bidders/quantumdex.md
+++ b/dev-docs/bidders/quantumdex.md
@@ -9,12 +9,9 @@ media_types: banner, video
 gdpr_supported: true
 schain_supported: true
 usp_supported: true
+userIds: all
+getFloor: true
 ---
 
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name        | Scope    | Description                                                                                                                    | Example    | Type     |
-|-------------|----------|--------------------------------------------------------------------------------------------------------------------------------|------------|----------|
-| `siteId`    | required | Publisher site ID from Quantumdex                                                                                         | `'quantumdex-site-id'` | `string` |
+# Description
+Quantumdex is an aliased bidder of Apacdex bid adapter. Please refer to [Apacdex documentation](https://docs.prebid.org/dev-docs/bidders/apacdex) for bid parameters and implementation guide.
\ No newline at end of file
diff --git a/dev-docs/bidders/rads.md b/dev-docs/bidders/rads.md
index 0fd2dfe505..ba3baa6f51 100644
--- a/dev-docs/bidders/rads.md
+++ b/dev-docs/bidders/rads.md
@@ -7,6 +7,7 @@ biddercode: rads
 media_types: banner, video 
 gdpr_supported: true
 gvl_id: 602
+userIds: uid2, netId
 ---
 
 
diff --git a/dev-docs/bidders/reklamstore.md b/dev-docs/bidders/reklamstore.md
index f4e221d69c..8c9a025355 100644
--- a/dev-docs/bidders/reklamstore.md
+++ b/dev-docs/bidders/reklamstore.md
@@ -6,6 +6,7 @@ biddercode: reklamstore
 pbjs: true
 gdpr_supported: true
 media_types: banner
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/reload.md b/dev-docs/bidders/reload.md
index 54212e5af2..675b068536 100644
--- a/dev-docs/bidders/reload.md
+++ b/dev-docs/bidders/reload.md
@@ -4,6 +4,7 @@ title: Reload
 description: Reload Prebid Adaptor
 pbjs: true
 biddercode: reload
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/resetdigital.md b/dev-docs/bidders/resetdigital.md
new file mode 100644
index 0000000000..1b827e844a
--- /dev/null
+++ b/dev-docs/bidders/resetdigital.md
@@ -0,0 +1,20 @@
+---
+layout: bidder
+title: ResetDigital
+description: Reset Digital Bidder Module
+hide: true
+pbjs: true
+biddercode: resetdigital
+gdpr_supported: true
+media_types: banner, video
+---
+
+### bid params
+
+{: .table .table-bordered .table-striped }
+
+| Name     | Scope    | Description | Example                            | Type     |
+|----------|----------|-------------|------------------------------------|----------|
+| `pubId` | required |    Publisher account id         | `'123pubid'` | `string` |
+| `zoneId` | optional |   Ad zone specific id if provided          | `'456zoneId'` | `string` |
+| `forceBid` | optional | Returns test bid | true | `boolean` |
diff --git a/dev-docs/bidders/resultsmedia.md b/dev-docs/bidders/resultsmedia.md
index bca7d3244b..d1a68d29ec 100644
--- a/dev-docs/bidders/resultsmedia.md
+++ b/dev-docs/bidders/resultsmedia.md
@@ -7,6 +7,7 @@ biddercode: resultsmedia
 media_types: video, banner
 gdpr_supported: true
 schain_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/rise.md b/dev-docs/bidders/rise.md
index db95c5fce4..0d2af523a2 100644
--- a/dev-docs/bidders/rise.md
+++ b/dev-docs/bidders/rise.md
@@ -8,6 +8,8 @@ media_types: no-display, video
 schain_supported: true
 gdpr_supported: true
 usp_supported: true
+userIds: all
+gvl_id: 1043
 ---
 
 ### Note
@@ -66,3 +68,6 @@ pbjs.setConfig({
     }
   }
 });
+
+### Versions
+Prebid versions 5.0-5.3 are not supported
diff --git a/dev-docs/bidders/roundel.md b/dev-docs/bidders/roundel.md
index 6b6c508509..61fa4d03b5 100644
--- a/dev-docs/bidders/roundel.md
+++ b/dev-docs/bidders/roundel.md
@@ -9,6 +9,7 @@ pbs: true
 userIds: identityLink, netId, fabrickId, zeotapIdPlus
 pbs_app_supported: true
 schain_supported: true
+coppa_supported: true
 gdpr_supported: true
 usp_supported: true
 media_types: banner, video
diff --git a/dev-docs/bidders/converge_digital.md b/dev-docs/bidders/rtbanalytica.md
similarity index 60%
rename from dev-docs/bidders/converge_digital.md
rename to dev-docs/bidders/rtbanalytica.md
index fa17272a25..3718ed244b 100644
--- a/dev-docs/bidders/converge_digital.md
+++ b/dev-docs/bidders/rtbanalytica.md
@@ -1,28 +1,27 @@
 ---
 layout: bidder
-title: Converge-Digital
-description: Converge-Digital Bidder Adaptor
+title: RtbAnalytica
+description: RtbAnalytica Bidder Adaptor
 pbjs: true
 pbs: true
-biddercode: converge_digital
+biddercode: rtbanalytica
 aliasCode : adkernel
 media_types: banner, native, video
 gdpr_supported: true
 usp_supported: true
 coppa_supported: true
 pbs_app_supported: true
-gvl_id: 248
 schain_supported: true
 ---
 
 ### Note:
 
-The Converge-Digital Bidding adapter requires setup and approval before implementation. Please reach out to <info@converge-digital.com> for more details.
+The RtbAnalytica bidding adapter requires setup and approval before implementation. Please reach out to <vivek@rtbanalytica.com> for more details.
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
 | Name     | Scope    | Description           | Example                   | Type     |
 |----------|----------|-----------------------|---------------------------|----------|
-| `host`   | required | ConvergeDigital RTB host | `'cpm.convergeselect.net'` | `string` |
+| `host`   | required | RtbAnalytica RTB host | `'cpm.rtbanalytica.com'` | `string` |
 | `zoneId` | required | Zone Id           | `30164`                 | `integer` |
diff --git a/dev-docs/bidders/rtbdemand.md b/dev-docs/bidders/rtbdemand.md
index bf429d80c7..0407f9d60a 100644
--- a/dev-docs/bidders/rtbdemand.md
+++ b/dev-docs/bidders/rtbdemand.md
@@ -6,6 +6,7 @@ top_nav_section: dev_docs
 nav_section: reference
 pbjs: true
 biddercode: rtbdemand
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/rtbsolutions.md b/dev-docs/bidders/rtbsolutions.md
index 17fc1b5050..53fa8379f5 100644
--- a/dev-docs/bidders/rtbsolutions.md
+++ b/dev-docs/bidders/rtbsolutions.md
@@ -5,7 +5,7 @@ description: Prebid RTB Solutions Bidder Adaptor
 pbjs: true
 biddercode: rtbsolutions
 media_types: banner
-
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/rubicon.md b/dev-docs/bidders/rubicon.md
index 706627241f..bacf84b2f8 100644
--- a/dev-docs/bidders/rubicon.md
+++ b/dev-docs/bidders/rubicon.md
@@ -128,6 +128,7 @@ The following video parameters are supported here so publishers may fully declar
 | mimes | required | List of content MIME types supported by the player (see openRTB v2.5 for options) | ["video/mp4"]| array<string>|
 | protocols | required | Supported video bid response protocol values <br />1: VAST 1.0 <br />2: VAST 2.0 <br />3: VAST 3.0 <br />4: VAST 1.0 Wrapper <br />5: VAST 2.0 Wrapper <br />6: VAST 3.0 Wrapper <br />7: VAST 4.0 <br />8: VAST 4.0 Wrapper | [2,3,5,6] | array<integers>|
 | api | required | Supported API framework values: <br />1: VPAID 1.0 <br />2: VPAID 2.0 <br />3: MRAID-1 <br />4: ORMMA <br />5: MRAID-2 | [2] |  array<integers> |
+| linearity | required | OpenRTB2 linearity. 1: linear (in-stream ad), 2: non-linear (overlay ad) | 1 | integer |
 | maxduration | recommended | Maximum video ad duration in seconds. | 30 | integer |
 | minduration | recommended | Minimum video ad duration in seconds | 6 | integer |
 | playbackmethod | recommended | Playback methods that may be in use. Only one method is typically used in practice. (see openRTB v2.5 section 5.10 for options)| [2]| array<integers> |
diff --git a/dev-docs/bidders/sa_lunamedia.md b/dev-docs/bidders/sa_lunamedia.md
new file mode 100644
index 0000000000..82c699af92
--- /dev/null
+++ b/dev-docs/bidders/sa_lunamedia.md
@@ -0,0 +1,22 @@
+---
+layout: bidder
+title: SA Lunamedia
+description: SA Lunamedia Bidder Adapter
+biddercode: sa_lunamedia
+usp_supported: true
+schain_supported: true
+media_types: banner, video, native
+gdpr_supported: true
+pbjs: false
+pbs: true
+pbs_app_supported: true
+gvl_id: 998
+pbjs_version_notes: not in 5.x
+---
+
+### Prebid Server Bid Params
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                              | Example    | Type      |
+|----------------|----------|----------------------------------------------------------|------------|-----------|
+| `key` | required | Placement integration key | `'1234'`        | `string` |
+| `type` | optional | Supported values are `publisher` and `network`.  | `'publisher'`        | `string` |
diff --git a/dev-docs/bidders/saambaa.md b/dev-docs/bidders/saambaa.md
index ca38b82722..1d2415374b 100644
--- a/dev-docs/bidders/saambaa.md
+++ b/dev-docs/bidders/saambaa.md
@@ -4,6 +4,7 @@ title: Saambaa
 description: Prebid Saambaa Bidder Adapter
 pbjs: true
 biddercode: saambaa
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/seedingAlliance.md b/dev-docs/bidders/seedingAlliance.md
index 0683e3a3d8..bba20fe71b 100644
--- a/dev-docs/bidders/seedingAlliance.md
+++ b/dev-docs/bidders/seedingAlliance.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: seedingAlliance
 media_types: native
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid params
diff --git a/dev-docs/bidders/segmento.md b/dev-docs/bidders/segmento.md
index 0ca7a2ed9d..3358f04be9 100644
--- a/dev-docs/bidders/segmento.md
+++ b/dev-docs/bidders/segmento.md
@@ -5,6 +5,7 @@ description: Prebid Segmento Bidder Adaptor
 pbjs: true
 biddercode: segmento
 media_types: banner
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/sekindoUM.md b/dev-docs/bidders/sekindoUM.md
index db591bb625..cf55667388 100644
--- a/dev-docs/bidders/sekindoUM.md
+++ b/dev-docs/bidders/sekindoUM.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: sekindoUM
 media_types: video
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/selectmediavideo.md b/dev-docs/bidders/selectmediavideo.md
index 5018b660b5..b83990023e 100644
--- a/dev-docs/bidders/selectmediavideo.md
+++ b/dev-docs/bidders/selectmediavideo.md
@@ -1,17 +1,19 @@
 ---
 layout: bidder
 title: SelectMedia Video
-description: SelectMedia Video Bidder Adapter
+description: Prebid SelectMedia Video Bidder Adapter
 pbjs: true
 biddercode: selectmediavideo
 aliasCode: aniview
-media_types: video
+media_types: banner, video
 gdpr_supported: true
 usp_supported: true
+schain_supported: true
+safeframes_ok: true
 ---
 
 ### Note:
-For more information about [SelectMedia](http://www.selectmedia.asia/).
+For more information about [SelectMedia](https://www.selectmedia.asia/), please contact info@selectmedia.asia.
 
 ### Bid Params
 
diff --git a/dev-docs/bidders/shinez.md b/dev-docs/bidders/shinez.md
index ea06b4e4ac..b9bd8c8235 100644
--- a/dev-docs/bidders/shinez.md
+++ b/dev-docs/bidders/shinez.md
@@ -5,6 +5,7 @@ description: Prebid Shinez Bidder Adapter
 biddercode: shinez
 media_types: banner
 pbjs: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Registration
diff --git a/dev-docs/bidders/slimcut.md b/dev-docs/bidders/slimcut.md
index acc25494f0..c308a7322a 100644
--- a/dev-docs/bidders/slimcut.md
+++ b/dev-docs/bidders/slimcut.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: slimcut
 media_types: video, banner
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Overview
diff --git a/dev-docs/bidders/smaato.md b/dev-docs/bidders/smaato.md
index 9db736519e..1959707e16 100644
--- a/dev-docs/bidders/smaato.md
+++ b/dev-docs/bidders/smaato.md
@@ -4,26 +4,40 @@ title: Smaato
 description: Prebid Smaato Bidder Adaptor
 biddercode: smaato
 gdpr_supported: true
+gvl_id: 82
 usp_supported: true
 coppa_supported: true
 media_types: banner, video
-userIds: criteo, pubCommonId, unifiedId
+userId: criteo, pubCommonId, unifiedId
 pbjs: true
 pbs: true
 pbs_app_supported: true
 prebid_member: true
+getFloor: true
 ---
 
 ### Table of Contents
 
+- [Registration](#smaato-registration)
+- [Note](#smaato-note)
 - [Bid Params](#smaato-bid-params)
 - [App Object](#smaato-app-object)
+- [Example Ad Units](#smaato-example-ad-units)
 - [First Party Data](#smaato-first-party)
+- [Test Parameters](#smaato-test-parameters)
+
+<a name="smaato-registration" />
 
 ### Registration
 
 The Smaato adapter requires setup and approval from the Smaato team, even for existing Smaato publishers. Please reach out to your account team or prebid@smaato.com for more information.
 
+<a name="smaato-note" />
+
+### Note
+
+The Smaato adapter will convert bidfloors to 'USD' currency as needed.
+
 <a name="smaato-bid-params" />
 
 ### Bid Params
@@ -32,7 +46,8 @@ The Smaato adapter requires setup and approval from the Smaato team, even for ex
 | Name       | Scope    | Description          | Example    | Type     |
 |------------|----------|----------------------|------------|----------|
 | `publisherId` | required | Your Smaato publisher id  | `'1100012345'` | `string` |
-| `adspaceId` | required | Your Smaato adspace id | `'11002234'`   | `string` |
+| `adspaceId` | required | Your Smaato adspace id. Required for non adpod requests | `'11002234'`   | `string` |
+| `adbreakId` | required | Your Smaato adbreak id. Required for adpod (long-form video) requests | `'41002234'`   | `string` |
 | `app` | optional | Object containing mobile app parameters.  See the [App Object](#smaato-app-object) for details.| `app : { ifa: '56700000-9cf0-22bd-b23e-46b96e40003a'}` | `object` |
 
 <a name="smaato-app-object" />
@@ -47,12 +62,15 @@ Smaato supports using prebid within a mobile app's webview.
 | `ifa`             | String that contains the advertising identifier of the user (e.g. idfa or aaid).                                                | `'56700000-9cf0-22bd-b23e-46b96e40003a'`                                 | `string`         |
 | `geo`             | Object that contains the latitude (`lat`) and longitude (`lon`) of the user.                                                    | `{ lat: 33.3, lon: -88.8 }`                                              | `object`         |
 
+<a name="smaato-example-ad-units" />
 
-### Example Banner Ad Unit
+### Example Ad Units
+
+#### Example Banner Ad Unit
 
 ```javascript
 var adUnit = {
-    "code": "header-bid-tag-1",
+    "code": "banner unit",
     "mediaTypes": {
         "banner": {
             "sizes": [320, 50]
@@ -68,7 +86,7 @@ var adUnit = {
 }
 ```
 
-### Example Video Ad Unit
+#### Example Video Ad Unit
 
 ```javascript
 var adUnit = {
@@ -98,6 +116,37 @@ var adUnit = {
     }]
 };
 ```
+#### Example AdPod (long-form) Video Ad Unit
+
+```javascript
+var adUnit = {
+    "code": "adpod unit",
+    "mediaTypes": {
+        "video": {
+            "context": "adpod",
+            "playerSize": [640, 480],
+            "adPodDurationSec": 300,
+            "durationRangeSec": [15, 30],
+            "requireExactDuration": false,
+            "mimes": ["video/mp4"],
+            "startdelay": 0,
+            "linearity": 1,
+            "protocols": [7],
+            "skip": 1,
+            "skipmin": 5,
+            "api": [7],
+        }
+    },
+    "bids": [{
+        "bidder": "smaato",
+        "params": {
+            "publisherId": "1100042525",
+            "adbreakId": "400000000"
+        }
+    }]
+};
+```
+
 <a name="smaato-first-party" />
 
 ### First Party Data
@@ -115,9 +164,12 @@ pbjs.setConfig({
             gender: "M",
             yob: 1984
         }
+    }
 });
 ```
 
+<a name="smaato-test-parameters" />
+
 ### Test Parameters
 
 Following example includes sample `imp` object with publisherId and adSlot which can be used to test Smaato Adapter
diff --git a/dev-docs/bidders/smartadserver.md b/dev-docs/bidders/smartadserver.md
index 0c5d7a3b13..94b852f4f0 100644
--- a/dev-docs/bidders/smartadserver.md
+++ b/dev-docs/bidders/smartadserver.md
@@ -10,6 +10,7 @@ usp_supported: true
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
 pbjs: true
 pbs: true
+getFloor: true
 ---
 
 ### Registration
diff --git a/dev-docs/bidders/smarthub.md b/dev-docs/bidders/smarthub.md
new file mode 100644
index 0000000000..9bee0fd5ce
--- /dev/null
+++ b/dev-docs/bidders/smarthub.md
@@ -0,0 +1,22 @@
+---
+layout: bidder
+title: SmartHub
+description: SmartHub Bidder Adapter
+biddercode: smarthub
+usp_supported: true
+schain_supported: true
+media_types: banner, video, native
+gdpr_supported: true
+pbjs: false
+pbs: true
+pbs_app_supported: true
+---
+
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description         | Example                              | Type     |
+|---------------|----------|---------------------|--------------------------------------|----------|
+| `partnerName` | required | Unique partner name | `'partnertest'`                      | `string` |
+| `seat`        | required | Seat value          | `'9Q20EdGxzgWdfPYShScl'`             | `string` |
+| `token`       | required | Token               | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` |
diff --git a/dev-docs/bidders/smartico.md b/dev-docs/bidders/smartico.md
index bd28a9b5d2..f05859f3b3 100644
--- a/dev-docs/bidders/smartico.md
+++ b/dev-docs/bidders/smartico.md
@@ -53,4 +53,4 @@ var adUnits = [
             ]
         }
     ]
-``` 
\ No newline at end of file
+``` 
diff --git a/dev-docs/bidders/smartrtb.md b/dev-docs/bidders/smartrtb.md
index df674f69d8..f81e8172ad 100644
--- a/dev-docs/bidders/smartrtb.md
+++ b/dev-docs/bidders/smartrtb.md
@@ -9,6 +9,7 @@ userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrable
 pbjs: true
 pbs: true
 pbs_app_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Registration
diff --git a/dev-docs/bidders/smartx.md b/dev-docs/bidders/smartx.md
index afb5d1dbf5..ecfbcf42be 100644
--- a/dev-docs/bidders/smartx.md
+++ b/dev-docs/bidders/smartx.md
@@ -11,6 +11,7 @@ schain_supported: false
 usp_supported: true
 safeframes_ok: false
 pbjs: true
+pbjs_version_notes: avoid 4.31-4.39
 ---
 
 ### Registration
@@ -27,7 +28,6 @@ Please reach out to your smartclip business contact for any questions and assist
 | `bidfloor`           | required | Value of Bidfloor.                                                                                      | `0.3`                   | `float`     |
 | `bidfloorcur`        | required | Used Currency. (e.g. EUR, USD etc.)                                                                     | `'EUR'`                 | `string`    |
 | `context`            | optional | Token that describes which context to play: 'instream' or 'outstream'                                   | `'outstream'`           | `string`    |
-| `outstream_function` | optional | Custom function to be used as a renderer.                                                               | `function(bid){console.log(bid);}` | `function` |
 | `outstream_options`  | required | Object to set options on the smartx renderer. (Only required when setting mediaType.video.context = 'outstream') | `{}`           | `object`    |
 | `secure`             | optional | Boolean identifying whether the requests should be https or not (used to override the protocol if the page isn't secure). | `true`| `boolean`   |
 | `mimes`              | optional | List of MIME types to allow in ad.                                                                      | `['application/javascript', 'video/mp4', 'video/webm']` | `array` |
@@ -47,6 +47,6 @@ Please reach out to your smartclip business contact for any questions and assist
 | `maxAdWidth`    | optional | Maximum size of the player.                                                                  | `900`            | `integer`   |
 | `title`         | optional | Makes a defined advertising text appear in the below right corner. `[remainingTime]` can be used to display the remaining time of the advertisement. | `'Advertisement [remainingTime]s'` | `string`    |
 | `skipOffset`    | optional | Define whenever the advertisement can be skipped. 0 = never                                  | `0`              | `integer`   |
-| `startOpen`     | optional | Define whether the player should be initialized open or open when it is within view.         | `false`          | `bool`      |
-| `endingScreen`  | optional | Define whether the player should stay open after advertising or not.                         | `true`           | `bool`      |
+| `startOpen`     | optional | Define whether the player should be initialized open or open when it is within view.         | `'false'`        | `string`    |
+| `endingScreen`  | optional | Define whether the player should stay open after advertising or not.                         | `'true'`         | `string`    |
 | `desiredBitrate`| optional | Define the desired bitrate of the mediafile.                                                 | `800`            | `integer`   |
diff --git a/dev-docs/bidders/smilewanted.md b/dev-docs/bidders/smilewanted.md
index b38af9159c..aae2f17d16 100644
--- a/dev-docs/bidders/smilewanted.md
+++ b/dev-docs/bidders/smilewanted.md
@@ -4,6 +4,7 @@ title: Smile Wanted
 description: SmileWanted Bidder Adapter
 media_types: banner, video
 pbjs: true
+pbs: true
 biddercode: smilewanted
 gdpr_supported: true
 usp_supported: true
@@ -19,16 +20,16 @@ To use us as a bidder you must have an account and an active "zoneId" on our Smi
 {: .table .table-bordered .table-striped }
 | Name     | Scope    | Description           | Example  | Type      |
 |----------|----------|-----------------------|----------|-----------|
-| `zoneId` | required | The placement zone ID | `test.com_header_bidding_display_atf` | `string` |
+| `zoneId` | required | The placement zone ID | `'test.com_header_bidding_display_atf'` | `string` |
 
 ### Testing
 
-You can add `#sw_test_campaign` at the end of any url, this will have the effect of responding with a Smile Wanted creative, with a high CPM which allows to win every auctions and see if the ad displays correctly.
-(Please note that impressions and revenues of this test ad this will not be recorded and not be paid)
+You can add `#sw_test_campaign` to the end of any URL. This will have the effect of responding with a Smile Wanted creative with a high CPM, which means you'll win every auction so you can see if the ad displays correctly.
+(Please note that impressions and revenues of this test ad will *not* be recorded and *not* be paid.)
 
 ### User Sync
 
-Add the following code to enable user sync. Smile Wanted strongly recommends enabling user syncing through iFrames. This functionality improves partners user match rates and increases the Smile Wanted bid rate and bid price. Be sure to call `pbjs.setConfig()` only once.
+Add the following code to enable user sync. Smile Wanted strongly recommends enabling user syncing through iFrames. This functionality improves partners' user match rates and increases the Smile Wanted bid rate and bid price. Be sure to call `pbjs.setConfig()` only once.
 
 ```
 pbjs.setConfig({
diff --git a/dev-docs/bidders/smms.md b/dev-docs/bidders/smms.md
index e4fb330d8c..f52ac751fb 100644
--- a/dev-docs/bidders/smms.md
+++ b/dev-docs/bidders/smms.md
@@ -5,6 +5,7 @@ description: Prebid SMMS Bidder Adaptor
 pbjs: true
 biddercode: smms
 media_types: banner, native
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/somo.md b/dev-docs/bidders/somo.md
index 28adb07f8d..44724eb0a0 100644
--- a/dev-docs/bidders/somo.md
+++ b/dev-docs/bidders/somo.md
@@ -5,6 +5,7 @@ description: Somo Audience Bidder Adapter
 pbjs: true
 biddercode: somo
 prevBiddercode: somoAudience
+pbjs_version_notes: not in 5.x
 ---
 
 ### Disclosure
diff --git a/dev-docs/bidders/somoaudience.md b/dev-docs/bidders/somoaudience.md
index 57946aea26..2b56243146 100644
--- a/dev-docs/bidders/somoaudience.md
+++ b/dev-docs/bidders/somoaudience.md
@@ -5,6 +5,7 @@ description: Somo Audience Bidder Adapter
 biddercode: somoaudience
 media_types: banner, native, video
 pbs: true
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/sortable.md b/dev-docs/bidders/sortable.md
index 6085124979..95621f2f67 100644
--- a/dev-docs/bidders/sortable.md
+++ b/dev-docs/bidders/sortable.md
@@ -10,6 +10,8 @@ usp_supported: true
 schain_supported: true
 prebid_member: true
 gvl_id: 145
+getFloor: true
+userIds: all
 ---
 
 **Table of Contents**
diff --git a/dev-docs/bidders/sspBC.md b/dev-docs/bidders/sspBC.md
index d14651a825..41a319747a 100644
--- a/dev-docs/bidders/sspBC.md
+++ b/dev-docs/bidders/sspBC.md
@@ -5,6 +5,7 @@ description: Prebid sspBC Bidder Adaptor
 pbjs: true
 biddercode: sspBC
 media_types: banner
+getFloor: true
 gdpr_supported: true
 gvl_id: 676
 ---
diff --git a/dev-docs/bidders/stv.md b/dev-docs/bidders/stv.md
index 765c03e670..d55a9f68a2 100644
--- a/dev-docs/bidders/stv.md
+++ b/dev-docs/bidders/stv.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: stv
 media_types: banner,video
 gdpr_supported: false
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/synacormedia.md b/dev-docs/bidders/synacormedia.md
index 477f711ae9..a33aec42f1 100644
--- a/dev-docs/bidders/synacormedia.md
+++ b/dev-docs/bidders/synacormedia.md
@@ -6,6 +6,7 @@ pbjs: true
 pbs: true
 biddercode: synacormedia
 media_types: banner, video
+userIds: identityLink, verizonMediaId, pubCommonId, nextrollId
 gdpr_supported: false
 schain_supported: true
 usp_supported: true
@@ -60,7 +61,11 @@ var adUnits = [{
     "mediaTypes": {
         "video": {
             "playerSize": [300, 250],
-            "context": "instream"
+            "context": "instream",
+            "minduration": 15,
+            "maxduration": 30,
+            "startdelay": 1,
+            "linearity": 1
         }
     },
     "bids": [{
@@ -69,13 +74,7 @@ var adUnits = [{
             "seatId": "prebid",
             "tagId": "demo1",
             "bidfloor": 0.20,
-            "pos": 1,
-            "video": {
-                "minduration": 15,
-                "maxduration": 30,
-                "startdelay": 1,
-                "linearity": 1
-            }
+            "pos": 1
         }
     }]
 }]
diff --git a/dev-docs/bidders/taphype.md b/dev-docs/bidders/taphype.md
index 33dd775c29..df27868761 100644
--- a/dev-docs/bidders/taphype.md
+++ b/dev-docs/bidders/taphype.md
@@ -4,6 +4,7 @@ title: TapHype
 description: Prebid TapHype Bidder Adaptor
 pbjs: true
 biddercode: taphype
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/tappx.md b/dev-docs/bidders/tappx.md
index a0878b4f58..46673da937 100644
--- a/dev-docs/bidders/tappx.md
+++ b/dev-docs/bidders/tappx.md
@@ -1,6 +1,6 @@
 ---
 layout: bidder
-title: Tappx
+title: tappx
 pbs: true
 pbjs: true
 media_types: banner, video
@@ -11,15 +11,13 @@ coppa_supported: true
 schain_supported: true
 pbs_app_supported: true
 gvl_id: 628
-userId: all
+userIds: all
 ---
 
 ### Registration
 
 Please contact tappx@tappx.com to get set up.
 
-**Note:** The Tappx prebid bidder only supports in app traffic at the moment
-
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
@@ -29,6 +27,9 @@ Please contact tappx@tappx.com to get set up.
 | tappxkey | required | An ID which identifies the adunit | 'key1' | string |
 | endpoint | required | Endpoint provided to publisher | 'endpoint1' | string |
 | bidfloor | optional | Minimum bid for this impression expressed in CPM (USD) | 1.2 | number |
+| mktag | optional | An ID which identifies a group of adunits | 'key1' | string |
+| bcid | optional | Block list of CID | ["1234"] | array of strings |
+| bcrid | optional | Block list of CRID | ["1234"] | array of strings |
 
 ### Test Parameters
 
diff --git a/dev-docs/bidders/teads.md b/dev-docs/bidders/teads.md
index 4ca58d6654..ffa3ca3629 100644
--- a/dev-docs/bidders/teads.md
+++ b/dev-docs/bidders/teads.md
@@ -7,6 +7,7 @@ biddercode: teads
 gdpr_supported: true
 usp_supported: true
 schain_supported: true
+userIds: flocId, uid2Id
 media_types: banner, video
 gvl_id: 132
 bidder_supports_deals: true
diff --git a/dev-docs/bidders/telaria.md b/dev-docs/bidders/telaria.md
index d62ab0f983..46ae17f350 100644
--- a/dev-docs/bidders/telaria.md
+++ b/dev-docs/bidders/telaria.md
@@ -66,24 +66,7 @@ var adUnit = {
         "params": {
             "supplyCode": "ssp-demo-rm6rh",
             "adCode": "ssp-!demo!-lufip",
-            "videoId": "MyCoolVideo",
-// Other params go here,
-            "schain" : {
-                "ver":"1.0",
-                "complete":1,
-                "nodes":[
-                    {
-                        "asi":"exchange1.com",
-                        "sid":"1234",
-                        "hp":1
-                    },
-                    {
-                        "asi":"exchange2.com",
-                        "sid":"abcd",
-                        "hp":1
-                    }
-                ]
-            }
+            "videoId": "MyCoolVideo"
         }
     }]
 }
diff --git a/dev-docs/bidders/tim.md b/dev-docs/bidders/tim.md
index 017485beff..085c2aef4d 100644
--- a/dev-docs/bidders/tim.md
+++ b/dev-docs/bidders/tim.md
@@ -4,6 +4,7 @@ title: Tim Media
 description: Prebid Tim Bidder Adaptor
 pbjs: true
 biddercode: tim
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/topRTB.md b/dev-docs/bidders/topRTB.md
index 0d5907b54c..7e7aab5641 100644
--- a/dev-docs/bidders/topRTB.md
+++ b/dev-docs/bidders/topRTB.md
@@ -4,6 +4,7 @@ title: TOPRTB
 description: Prebid topRTB Bidder Adapter
 pbjs: true
 biddercode: topRTB
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/trendqube.md b/dev-docs/bidders/trendqube.md
index 4afba603d9..2b7fefe195 100644
--- a/dev-docs/bidders/trendqube.md
+++ b/dev-docs/bidders/trendqube.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: trendqube
 gdpr_supported: true
 media_types: banner, video
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/triplelift.md b/dev-docs/bidders/triplelift.md
index 9b33e855f2..9406329245 100644
--- a/dev-docs/bidders/triplelift.md
+++ b/dev-docs/bidders/triplelift.md
@@ -9,7 +9,7 @@ coppa_supported: true
 schain_supported: true
 getFloor: true
 media_types: banner, video
-userIds: criteo, identityLink, unifiedId
+userIds: criteo, identityLink, unifiedId, pubCommonId
 prebid_member: true
 safeframes_ok: true
 bidder_supports_deals: true
diff --git a/dev-docs/bidders/turktelekom.md b/dev-docs/bidders/turktelekom.md
index 3c575a6be2..a6b2395bca 100644
--- a/dev-docs/bidders/turktelekom.md
+++ b/dev-docs/bidders/turktelekom.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: turktelekom
 media_types: banner, video
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/unibots.md b/dev-docs/bidders/unibots.md
new file mode 100644
index 0000000000..d8b859e629
--- /dev/null
+++ b/dev-docs/bidders/unibots.md
@@ -0,0 +1,27 @@
+---
+layout: bidder
+title: Unibots
+description: Unibots Bidder Adaptor
+pbjs: true
+pbs: true
+biddercode: unibots
+aliasCode : adkernel
+media_types: banner, native, video
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: true
+schain_supported: true
+---
+
+### Note:
+
+The Unibots bidding adapter requires setup and approval before implementation. Please reach out to <saurabh@unibots.in> for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name     | Scope    | Description           | Example                   | Type     |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host`   | required | RTB host | `'cpm.unibots.in'` | `string` |
+| `zoneId` | required | Zone Id           | 30164                 | `integer` |
diff --git a/dev-docs/bidders/unicorn.md b/dev-docs/bidders/unicorn.md
index 4a81b59d3b..21a645f404 100644
--- a/dev-docs/bidders/unicorn.md
+++ b/dev-docs/bidders/unicorn.md
@@ -16,7 +16,6 @@ biddercode: unicorn
 |---------------|----------|-------------------------------------------|------------|-----------|
 | `placementId` | optional | Your placement ID | `'rectangle-ad-1'` | `string`  |
 | `accountId` | required | Account ID for charge request (provided by UNICORN) | `12345`    | `integer` |
-| `bidfloorCpm` | optional for Prebid.js | Floor CPM (JPY); defaults to 0.  | `0.2`    | `float` |
 | `publisherId` | optional | Account specific publisher id. | `67890` | `integer` |
 | `mediaId` | required for Prebid Server, optional for Prebid.js | Publisher specific media id. | `'example'` | `string` |
 | `bcat` | optional for Prebid.js  | Blocked IAB categories | `['IAB-1', 'IAB-2']` | `[string]` |
diff --git a/dev-docs/bidders/unruly.md b/dev-docs/bidders/unruly.md
index 539093e5b1..855719bd4c 100644
--- a/dev-docs/bidders/unruly.md
+++ b/dev-docs/bidders/unruly.md
@@ -3,17 +3,26 @@ layout: bidder
 title: Unruly
 description: Prebid Unruly Bidder Adaptor
 biddercode: unruly
-media_types: native, video
 gdpr_supported: true
+usp_supported: true
+coppa_supported: false
+schain_supported: true
+getFloor: true
+media_types: banner, video
+userIds: all
+prebid_member: false
+safeframes_ok: check with bidder
+bidder_supports_deals: check with bidder
 pbjs: true
 pbs: true
-gvl_id: 162
+pbs_app_supported: true
+gvl_id: 36
 ---
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name            | Scope    | Description                                                                                 | Example                                  | Type      |
-|-----------------|----------|---------------------------------------------------------------------------------------------|------------------------------------------|-----------|
-| `siteId`        | required | The site ID from Unruly. This will be provided to you by your Unruly account manager        | `123456`                                 | `integer` |
-| `targetingUUID` | required | The targeting UUID from Unruly. This will be provided to you by your Unruly account manager | `'766220b5-3d02-46c5-aa8b-2bc60c6f7418'` | `string`  |
+| Name               | Scope          | Description                                                                                                                  | Example                                          | Type      |
+|--------------------|----------------|------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|-----------|
+| `siteId`           | required       | The site ID from Unruly. This will be provided to you by your Unruly account manager.                                        | `123456`                                         | `integer` |
+| `featureOverrides` | optional       | This param is a generic object for configuring Unruly outstream demand. To run UNmissable, set ‘canRunUnmissable’ to true.   | `"featureOverrides": {"canRunUnmissable": true}` | `object`  |
diff --git a/dev-docs/bidders/uol.md b/dev-docs/bidders/uol.md
index befa00f86f..5caa90beb2 100644
--- a/dev-docs/bidders/uol.md
+++ b/dev-docs/bidders/uol.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: uol
 gdpr_supported: false
 media_types: banner
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/valueimpression.md b/dev-docs/bidders/valueimpression.md
index 23f8edeaba..75e9352402 100644
--- a/dev-docs/bidders/valueimpression.md
+++ b/dev-docs/bidders/valueimpression.md
@@ -9,13 +9,10 @@ media_types: banner, video
 gdpr_supported: true
 schain_supported: true
 usp_supported: true
+userIds: all
+getFloor: true
 pbs: true
 ---
 
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name        | Scope    | Description                                                                                                                    | Example    | Type     |
-|-------------|----------|--------------------------------------------------------------------------------------------------------------------------------|------------|----------|
-| `siteId`    | required | Publisher site ID from Valueimpression                                                                                         | `'vi-site-id'` | `string` |
+# Description
+Valueimpression is an aliased bidder of Apacdex bid adapter. Please refer to [Apacdex documentation](https://docs.prebid.org/dev-docs/bidders/apacdex) for bid parameters and implementation guide.
\ No newline at end of file
diff --git a/dev-docs/bidders/vi.md b/dev-docs/bidders/vi.md
index 1c344a7ea9..20f6ff345c 100644
--- a/dev-docs/bidders/vi.md
+++ b/dev-docs/bidders/vi.md
@@ -4,6 +4,7 @@ title: vi
 description: vi bid adapter
 pbjs: true
 biddercode: vi
+pbjs_version_notes: not in 5.x
 ---
 
 ### bid params
diff --git a/dev-docs/bidders/vidazoo.md b/dev-docs/bidders/vidazoo.md
index 441f121170..5baf2a5a15 100644
--- a/dev-docs/bidders/vidazoo.md
+++ b/dev-docs/bidders/vidazoo.md
@@ -14,7 +14,7 @@ pbjs: true
 {: .table .table-bordered .table-striped }
 | Name       | Scope    | Description                                                                              | Example                      | Type     |
 |------------|----------|------------------------------------------------------------------------------------------|------------------------------|----------|
-| `cId`      | required | The connection ID from Vidazoo.                                                          | `'5a3a543645ea6b0004869360'` | `string` |
+| `cId`      | required | The connection ID from Vidazoo.                                                          | `'562524b21b1c1f08117fc7f9'` | `string` |
 | `pId`      | required | The publisher ID from Vidazoo.                                                           | `'59ac17c192832d0011283fe3'` | `string` |
 | `bidFloor` | required | The minimum bid value desired. Vidazoo will not respond with bids lower than this value. | `0.90`                       | `float`  |
 | `subDomain`| optional | Sets the server subdomain, default: 'prebid'.                                            | `'prebid'`                     | `string` |
diff --git a/dev-docs/bidders/vidcrunch.md b/dev-docs/bidders/vidcrunch.md
new file mode 100644
index 0000000000..41a592a164
--- /dev/null
+++ b/dev-docs/bidders/vidcrunch.md
@@ -0,0 +1,45 @@
+---
+layout: bidder
+title: VidCrunch
+description: Prebid VidCrunch Bidder Adapter
+pbjs: true
+biddercode: vidcrunch
+aliasCode: aniview
+media_types: banner, video
+gdpr_supported: true
+usp_supported: true
+schain_supported: true
+safeframes_ok: true
+---
+
+### Note:
+For more information about [VidCrunch](https://vidcrunch.com/), please contact info@vidcrunch.com.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name             | Scope    | Description      | Example                      | Type     |
+|------------------|----------|------------------|------------------------------|----------|
+| `AV_PUBLISHERID` | required | Publisher/Netid  | `'55b88d4a181f465b3e8b4567'` | `string` |
+| `AV_CHANNELID`   | required | Channel id       | `'5a5f17a728a06102d14c2718'` | `string` |
+
+### Test Parameters
+```
+videoAdUnit = [
+{
+  code: 'video1',
+  mediaTypes: {
+    video: {
+      playerSize: [[640, 480]],
+      context: 'outstream'
+    },
+  },
+  bids: [{
+    bidder: 'vidcrunch',
+    params: {
+      AV_PUBLISHERID: '55b78633181f4603178b4568',
+      AV_CHANNELID: '5d19dfca4b6236688c0a2fc4'
+    }
+  }]
+}];
+```
diff --git a/dev-docs/bidders/videobyte.md b/dev-docs/bidders/videobyte.md
new file mode 100644
index 0000000000..6a9b7e4359
--- /dev/null
+++ b/dev-docs/bidders/videobyte.md
@@ -0,0 +1,23 @@
+---
+layout: bidder
+title: VideoByte
+description: Prebid VideoByte Bidder Adaptor
+pbjs: true
+biddercode: videobyte
+media_types: video
+gdpr_supported: true
+usp_supported: true
+schain_supported: true
+
+---
+
+### Note:
+
+VideoByte adapter only supports video ads.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name    | Scope    | Description  | Example  | Type     |
+|---------|----------|--------------|----------|----------|
+| `pubId` | required | Publisher ID | `'vb12345'` | `string` |
diff --git a/dev-docs/bidders/videofy.md b/dev-docs/bidders/videofy.md
index 79fc9bc0d6..b3f604c325 100644
--- a/dev-docs/bidders/videofy.md
+++ b/dev-docs/bidders/videofy.md
@@ -7,6 +7,7 @@ biddercode: videofy
 media_types: video
 gdpr_supported: true
 usp_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/videonow.md b/dev-docs/bidders/videonow.md
index 11eab677fd..7a0b19a480 100644
--- a/dev-docs/bidders/videonow.md
+++ b/dev-docs/bidders/videonow.md
@@ -5,6 +5,7 @@ description: Prebid Videonow Bidder Adaptor
 biddercode: videonow
 pbjs: true
 media_types: banner
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/vidoomy.md b/dev-docs/bidders/vidoomy.md
new file mode 100644
index 0000000000..5757ad9b74
--- /dev/null
+++ b/dev-docs/bidders/vidoomy.md
@@ -0,0 +1,23 @@
+---
+layout: bidder
+title: Vidoomy
+description: Prebid Vidoomy Bidder Adaptor
+pbjs: true
+biddercode: vidoomy
+media_types: banner, video
+gdpr_supported: true
+gvl_id: 380
+usp_supported: true
+coppa_supported: true
+---
+
+### Note:
+[Vidoomy](https://vidoomy.com/), for more info please contact support@vidoomy.com
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name             | Scope    | Description      | Example                      | Type     |
+|------------------|----------|------------------|------------------------------|----------|
+| `id` | required | id  | `123123` | `string` |
+| `pid`   | required | pid | `'123123'` | `string` |
diff --git a/dev-docs/bidders/viewdeosDX.md b/dev-docs/bidders/viewdeosDX.md
index 6aab7f7107..2756611309 100644
--- a/dev-docs/bidders/viewdeosDX.md
+++ b/dev-docs/bidders/viewdeosDX.md
@@ -10,6 +10,8 @@ gdpr_supported: true
 gvl_id: 924
 ---
 
+Note that for Prebid Server, viewdeosDX is an alias of the Adtelligent server-side bid adapter. It has its own Prebid.js adapter.
+
 ### Bid params
 
 {: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/vlyby.md b/dev-docs/bidders/vlyby.md
new file mode 100644
index 0000000000..bf0d5184a7
--- /dev/null
+++ b/dev-docs/bidders/vlyby.md
@@ -0,0 +1,24 @@
+---
+layout: bidder
+title: VLYBY
+description: Prebid VLYBY Bidder Adapter
+biddercode: vlyby
+media_types: banner, video
+schain_supported: false
+prebid_member: false
+pbjs: true
+---
+
+### Note:
+
+The VLYBY Header Bidder Adapter needs a Contract with VLYBY Digital GmbH, Munich. Please contact prebid@vlyby.com for additional information.
+
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                                                           | Example                                     | Type     |
+|----------------|----------|---------------------------------------------------------------------------------------|---------------------------------------------|----------|
+| `publisherId`| required | VLYBY PublisherId                                                                 | `'12345'`                                   | `string` |
+| `placement`   | optional | Placement Id                                                                    | `'12345'`                                   | `string` |
diff --git a/dev-docs/bidders/vmg.md b/dev-docs/bidders/vmg.md
index c83169cafd..959ff01ab0 100644
--- a/dev-docs/bidders/vmg.md
+++ b/dev-docs/bidders/vmg.md
@@ -4,6 +4,7 @@ title: VMG
 description: Connects Google Ad Manager to the VMG Predict engine.
 pbjs: true
 biddercode: vmg
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/vrtcal.md b/dev-docs/bidders/vrtcal.md
index 16b40e6050..cdb1948a8e 100644
--- a/dev-docs/bidders/vrtcal.md
+++ b/dev-docs/bidders/vrtcal.md
@@ -4,7 +4,7 @@ title: VRTCAL Markets, Inc.
 description: VRTCAL Markets, Inc. Bid Adapter
 pbjs: true
 pbs: true
-media_ytpes: banner
+media_types: banner, video
 gdpr_supported: false
 biddercode: vrtcal
 gvl_id: 706
diff --git a/dev-docs/bidders/vuble.md b/dev-docs/bidders/vuble.md
index 0242c496a3..6c2308a5e8 100644
--- a/dev-docs/bidders/vuble.md
+++ b/dev-docs/bidders/vuble.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: vuble
 media_types: video
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/weborama.md b/dev-docs/bidders/weborama.md
deleted file mode 100644
index 0fa88f3951..0000000000
--- a/dev-docs/bidders/weborama.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-layout: bidder
-title: Weborama
-description: Prebid Weborama Bidder Adaptor
-pbjs: true
-biddercode: weborama
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name           | Scope      | Description                                                    | Example            |
-| :-----------   | :--------- | :------------                                                  | :----------------- |
-| `placementId` | required   | Placement Id will be generated on Weborama Platform. | 0                        |
-| `traffic`      | optional   | Type traffic                                             | 'banner'                 |
diff --git a/dev-docs/bidders/welect.md b/dev-docs/bidders/welect.md
index 08d6d15b62..3a099c2dc3 100644
--- a/dev-docs/bidders/welect.md
+++ b/dev-docs/bidders/welect.md
@@ -6,6 +6,7 @@ biddercode: welect
 media_types: no-display, video
 gvlid: 282
 pbjs: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/windtalker.md b/dev-docs/bidders/windtalker.md
index 023c3d0df2..4fae0d89e8 100644
--- a/dev-docs/bidders/windtalker.md
+++ b/dev-docs/bidders/windtalker.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: windtalker
 media_types: native, video
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Disclosure
diff --git a/dev-docs/bidders/winr.md b/dev-docs/bidders/winr.md
new file mode 100644
index 0000000000..ba15ca619d
--- /dev/null
+++ b/dev-docs/bidders/winr.md
@@ -0,0 +1,29 @@
+---
+layout: bidder
+title: WINR
+description: Prebid WINR Bidder Adaptor
+biddercode: winr
+media_types: banner
+prebid_member: false
+userIds: criteo, unifiedId, netId, identityLink, flocId, uid2
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+getFloor: true
+pbjs: true
+safeframes_ok: false
+---
+
+### Note:
+The WINR adapter requires setup and approval from the WINR team, even for partners that already work with us. Please reach out to our team at tech@winr.com.au
+
+*`domParent` and `child` position settings are usually determined and remotely controlled for each publisher site by the WINR team. If you would prefer to have control over these settings, please get in touch.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description                                                                                       | Example      | Type      |
+|---------------|----------|---------------------------------------------------------------------------------------------------|--------------|-----------|
+| `placementId` | required | Placement ID can be a `string` or `integer`, however `integer` is preferred.               | `21764100`    | `integer` |
+| `domParent`*   | optional | The DOM element where the ad unit will load into. The value is passed as a parameter to the JavaScript HTML DOM querySelector() method  | `.blog_post`  | `string`  |
+| `child`*       | optional | The number of child nodes of `domParent` preceding the ad unit. | `4`           | `integer` |
diff --git a/dev-docs/bidders/xhb.md b/dev-docs/bidders/xhb.md
index 8e4f39f345..ebd6e189e4 100644
--- a/dev-docs/bidders/xhb.md
+++ b/dev-docs/bidders/xhb.md
@@ -6,6 +6,7 @@ biddercode: xhb
 pbjs: true
 media_types: video, native
 gdpr_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/yieldmo.md b/dev-docs/bidders/yieldmo.md
index 29d5a71364..18a5a691bb 100644
--- a/dev-docs/bidders/yieldmo.md
+++ b/dev-docs/bidders/yieldmo.md
@@ -19,10 +19,11 @@ pbs: true
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name          | Scope    | Description          | Example                | Type     |
-|---------------|----------|----------------------|------------------------|----------|
-| `placementId` | required | Yieldmo placement id | `'825209316101005155'` | `string` |
-| `bidFloor`    | optional |      Bid Floor       |         `0.1`          |  `float` |
+| Name          | Scope    | Description            | Example                | Type     |
+|---------------|----------|------------------------|------------------------|----------|
+| `placementId` | required |  Yieldmo placement id  | `'825209316101005155'` | `string` |
+| `bidFloor`    | optional |       Bid Floor        |         `0.1`          | `float`  |
+| `lr_env`      | optional | Live Ramp ATS envelope |  `e3b0c44298fc1c149a`  | `string` |
 
 ### video parameters
 The Yieldmo adapter supports in-stream video as of Prebid v4.18. Out-stream will be supported as of Prebid v4.35.0. 
@@ -40,6 +41,9 @@ The Yieldmo adapter supports in-stream video as of Prebid v4.18. Out-stream will
 | `playbackmethod`  | required | Playback methods that may be in use; see [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.10 for more details. Out-stream is only always `2` | `[2,6]`  | `Array<integer>` |
 | `skippable`       | optional | If 'true', user can skip ad                            | `true`          | `boolean` |
 | `skipafter`       | optional | Number of seconds a video must play before skipping is enabled; only applicable if the ad is `skippable` | `5`  | `integer` |
+| `mimes`           | required | List of the content MIME types supported by the player | `["video/mp4"]` | `Array<string>`  |
+
+Following video parameters might be also defined in `mediaTypes.video` in order to simplify bidders configuration. If the same parameters was also defined in `params.video` it will be overriten by `params.video`. More details - https://docs.prebid.org/dev-docs/adunit-reference.html
 
 In addition, Yieldmo adapter relies on parameters specified in the `mediaTypes.video` definition of the video ad-units, namely:
 
@@ -48,7 +52,6 @@ In addition, Yieldmo adapter relies on parameters specified in the `mediaTypes.v
 |-------------------|----------|--------------------------------------------------------|-----------------|------------------|
 | `playerSize`      | required | Width and height of the player                         | `[640, 480]`    | `Array<integer>` |
 | `context`         | required | `instream` or `outstream ` are only supported                           | `instream`      | `string`         |
-| `mimes`           | required | List of the content MIME types supported by the player | `["video/mp4"]` | `Array<string>`  |
 
 ### Example of in-stream Video Ad-unit
 ```javascript
@@ -56,27 +59,25 @@ var videoAdUnits = [{
   code: 'div-video-ad-1234567890',
   mediaTypes: {
     video: {
-      playerSize: [640, 480],             // required
+      playerSize: [640, 480],           // required
       context: 'instream',
-      mimes: ['video/mp4']                // required, array of strings
+      mimes: ['video/mp4'],             // required, array of strings
+      placement: 1,                     // required, integer
+      maxduration: 30,                  // required, integer
+      minduration: 15,                  // optional, integer
+      pos: 1,                           // optional, integer
+      startdelay: 10,                   // required if placement == 1
+      protocols: [2, 3],                // required, array of integers
+      api: [2, 3],                      // required, array of integers
+      playbackmethod: [2,6],            // required, array of integers
+      skip: 1,                          // optional, boolean
+      skipafter: 10                     // optional, integer
     }
   },
   bids: [{
     bidder: 'yieldmo',
     params: {
-      placementId: '1524592390382976659', // required
-      video: {
-        placement: 1,                     // required, integer
-        maxduration: 30,                  // required, integer
-        minduration: 15,                  // optional, integer
-        pos: 1,                           // optional, integer
-        startdelay: 10,                   // required if placement == 1
-        protocols: [2, 3],                // required, array of integers
-        api: [2, 3],                      // required, array of integers
-        playbackmethod: [2,6],            // required, array of integers
-        skippable: true,                  // optional, boolean
-        skipafter: 10                     // optional, integer
-      }
+      placementId: '1524592390382976659' // required
     }
   }]
 }];
@@ -89,23 +90,21 @@ var videoAdUnit = [{
       video: {
           playerSize: [640, 480],   // required
           context: 'outstream',
-          mimes: ['video/mp4']      // required, array of strings
+          mimes: ['video/mp4'],      // required, array of strings
+          placement: 3,                      // required, integer ( 3,4,5 )
+          maxduration: 30,                   // required, integer
+          protocols: [2, 3],                 // required, array of integers
+          api: [2, 3],                       // required, array of integers
+          playbackmethod: [1,2]              // required, array of integers
       }
   },
   bids: [{
     bidder: 'yieldmo',
     params: {
-      placementId: '1524592390382976659',  // required
-      video: {
-        placement: 3,                      // required, integer ( 3,4,5 )
-        maxduration: 30,                   // required, integer
-        protocols: [2, 3],                 // required, array of integers
-        api: [2, 3],                       // required, array of integers
-        playbackmethod: [1,2]              // required, array of integers
-      }
+      placementId: '1524592390382976659'  // required
     }
   }]
 }];
 ```
 
-> Prebid out-stream demo - https://prebid-outstream-qa.yieldmo.com/prebid-outstream.html
\ No newline at end of file
+> Prebid out-stream demo - https://prebid-outstream-qa.yieldmo.com/prebid-outstream.html
diff --git a/dev-docs/bidders/yieldone.md b/dev-docs/bidders/yieldone.md
index 43991a3439..4bbde1c7a6 100644
--- a/dev-docs/bidders/yieldone.md
+++ b/dev-docs/bidders/yieldone.md
@@ -5,6 +5,7 @@ description: Prebid YIELDONE Bidder Adaptor
 pbjs: true
 pbs: true
 biddercode: yieldone
+userIds: identityLink
 media_types: banner, video
 ---
 
diff --git a/dev-docs/bidders/yssp.md b/dev-docs/bidders/yssp.md
new file mode 100644
index 0000000000..58be3bee3c
--- /dev/null
+++ b/dev-docs/bidders/yssp.md
@@ -0,0 +1,18 @@
+---
+layout: bidder
+title: YSSP
+pbs: true
+media_types: banner
+biddercode: yssp
+prebid_member: true
+gdpr_supported: true
+gvl_id: 25
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name       | Scope    | Description            | Example | Type     |
+|------------|----------|------------------------|---------|----------|
+| dcn | required | Site ID provided by One Mobile | 'site1' | string |
+| pos | required | Placement ID | 'placement1' | string |
diff --git a/dev-docs/bidders/zedo.md b/dev-docs/bidders/zedo.md
index 9024188e8d..7fb66abe20 100644
--- a/dev-docs/bidders/zedo.md
+++ b/dev-docs/bidders/zedo.md
@@ -4,6 +4,7 @@ title: ZEDO
 description: Prebid ZEDO Bidder Adapter
 pbjs: true
 biddercode: zedo
+pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/zeta_global.md b/dev-docs/bidders/zeta_global.md
index bdd2f17079..1167b31a9c 100644
--- a/dev-docs/bidders/zeta_global.md
+++ b/dev-docs/bidders/zeta_global.md
@@ -7,6 +7,7 @@ biddercode: zeta_global
 bidder_supports_deals: false
 media_types: banner
 gdpr_supported: true
+tcf2_supported: true
 gvl_id: 469
 ---
 
@@ -19,15 +20,23 @@ To use this bidder you will need a valid definerId.  For further information, pl
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name                 | Scope    | Description                                                                                                         | Example      | Type      |
-|----------------------|----------|---------------------------------------------------------------------------------------------------------------------|--------------|-----------|
-| `user`               | required | The object containing user data (See OpenRTB spec)                                                                  | `user: {}`   | `object`  |
-| `user.buyeruid`      | required | Zeta's user id                                                                                                      | `"12345"`    | `string`  |
-| `device`             | required | The object containing device data (See OpenRTB spec)                                                                | `device: {}` | `object`  |
-| `device.ip`          | required | The client IP                                                                                                       | `"0.0.0.0"`  | `string`  |
-| `device.geo`         | required | The object containing geo data (See OpenRTB spec)                                                                   | `geo: {}`    | `object`  |
-| `device.geo.country` | required | The country code pertinent to the request data                                                                      | `"USA"`      | `string`  |
-| `definerId`          | required | The Definer ID from Zeta Global                                                                                     | `"12345"`    | `string`  |
-| `site`               | optional | The object containing site data (See OpenRTB spec)                                                                  | `site: {}`   | `object`  |
-| `app`                | optional | The object containing app data (See OpenRTB spec)                                                                   | `app: {}`    | `object`  |
-| `test`               | optional | Flag which will induce a sample bid response when true; only set to true for testing purposes (1 = true, 0 = false) | `1`          | `integer` |
+| Name                 | Scope    | Description                                                                                                                | Example                 | Type           |
+|----------------------|----------|----------------------------------------------------------------------------------------------------------------------------|-------------------------|----------------|
+| `definerId`          | required | The Definer ID provided by Zeta Global                                                                                     | `"12345"`               | `string`       |
+| `user`               | required | The object containing user data (See OpenRTB spec)                                                                         | `user: {}`              | `object`       |
+| `user.buyeruid`      | required | Zeta's user id                                                                                                             | `"12345"`               | `string`       |
+| `device`             | required | The object containing device data (See OpenRTB spec)                                                                       | `device: {}`            | `object`       |
+| `site`               | optional | The object containing site data (See OpenRTB spec)                                                                         | `site: {}`              | `object`       |
+| `app`                | optional | The object containing app data (See OpenRTB spec)                                                                          | `app: {}`               | `object`       |
+| `test`               | optional | Flag which will induce a sample bid response when true; only set to true for testing purposes (1 = true, 0 = false)        | `1`                     | `integer`      |
+| `at`                 | optional | Auction type, where 1 = First Price, 2 = Second Price Plus                                                                 | `1`                     | `integer`      |
+| `tmax`               | optional | Maximum time in milliseconds the exchange allows for bids to be received including Internet latency to avoid timeout       | `200`                   | `integer`      |
+| `wseat`              | optional | White list of buyer seats (e.g., advertisers, agencies) allowed to bid on this impression                                  | `wseat: ["123"]`        | `string array` |
+| `bseat`              | optional | Block list of buyer seats (e.g., advertisers, agencies) restricted from bidding on this impression                         | `bseat: ["123"]`        | `string array` |
+| `allimps`            | optional | Flag to indicate that the impressions offered represent all the impressions available in context (1 = true, 0 = false)     | `1`                     | `integer`      |
+| `wlang`              | optional | White list of languages for creatives                                                                                      | `wlang: ["ENG"]`        | `string array` |
+| `bcat`               | optional | Blocked advertiser categories using the IAB content categories                                                             | `bcat: ["123"]`         | `string array` |
+| `badv`               | optional | Block list of advertisers by their domains                                                                                 | `badv: ["blocked.com"]` | `string array` |
+| `bapp`               | optional | Block list of applications by their platform-specific exchange independent application identifiers                         | `badv: ["com.blocked"]` | `string array` |
+| `source`             | optional | A Source object that provides data about the inventory source and which entity makes the final decision (See OpenRTB spec) | `source: {}`            | `object`       |
+| `ext`                | optional | An extension object that allows for custom fields and objects to be sent  (See OpenRTB spec)                               | `ext: {}`               | `object`       |
diff --git a/dev-docs/bidders/zeta_global_ssp.md b/dev-docs/bidders/zeta_global_ssp.md
index 67b4d358fd..74c092c0fb 100644
--- a/dev-docs/bidders/zeta_global_ssp.md
+++ b/dev-docs/bidders/zeta_global_ssp.md
@@ -7,6 +7,10 @@ biddercode: zeta_global_ssp
 bidder_supports_deals: false
 media_types: banner
 gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+userIds: all
+prebid_member: true
 gvl_id: 833
 ---
 
@@ -20,9 +24,10 @@ All references to the OpenRTB spec refer to OpenRtb v2.5 (https://www.iab.com/wp
 {: .table .table-bordered .table-striped }
 | Name                 | Scope    | Description                                                                                                         | Example      | Type      |
 |----------------------|----------|---------------------------------------------------------------------------------------------------------------------|--------------|-----------|
-| `user`               | required | The object containing user data (See OpenRTB spec)                                                                  | `user: {}`   | `object`  |
-| `user.buyeruid`      | required | Zeta's user id                                                                                                      | `"12345"`    | `string`  |
+| `user`               | optional | The object containing user data (See OpenRTB spec)                                                                  | `user: {}`   | `object`  |
+| `user.buyeruid`      | optional | Zeta's user id                                                                                                      | `"12345"`    | `string`  |
 | `tags`               | optional | The object containing set of  Zeta's custom tags witch publisher have to supply                                     | `tags: {}`   | `object`  |
 | `site`               | optional | The object containing site data (See OpenRTB spec)                                                                  | `site: {}`   | `object`  |
 | `app`                | optional | The object containing app data (See OpenRTB spec)                                                                   | `app: {}`    | `object`  |
+| `sid`                | optional | Seller ID. The identifier associated with the seller or reseller account within the advertising system              | `"1q2w3e"`   | `string`  |
 | `test`               | optional | Flag which will induce a sample bid response when true; only set to true for testing purposes (1 = true, 0 = false) | `1`          | `integer` |
diff --git a/dev-docs/common-issues.md b/dev-docs/common-issues.md
index 66eb3693ab..ac9cd05993 100644
--- a/dev-docs/common-issues.md
+++ b/dev-docs/common-issues.md
@@ -38,6 +38,6 @@ Check the bid prices. If they are low and are getting reduced to $0 due to price
 {:toc}
 
 + [Prebid.js FAQ](/dev-docs/faq.html)
-+ [Prebid Tips for Troubleshooting]({{site.github.url}}/dev-docs/troubleshooting-tips.html)
++ [Prebid Tips for Troubleshooting](/troubleshooting/troubleshooting-guide.html)
 
 
diff --git a/dev-docs/examples/adunit-refresh.md b/dev-docs/examples/adunit-refresh.md
index e5cc0252a2..07362a534c 100644
--- a/dev-docs/examples/adunit-refresh.md
+++ b/dev-docs/examples/adunit-refresh.md
@@ -7,6 +7,7 @@ sidebarType: 1
 
 about:
 - Ability to <strong>refresh individual ad units</strong> - useful for infinite scrolling ad slots
+- When auto-refreshing is done incorrectly, it could cause the same bids to be rendered repeatedly. For instance, when googletag.pubads.refresh() is called directly without removing the PBJS targeting, the same hb_ variables get re-sent to GAM, re-chosen, and re-rendered. Over and over without ever asking PBJS for updated targeting variables.  Please see <a href="/dev-docs/publisher-api-reference/setConfig.html#setConfig-auctionOptions">Auction Options</a> for more info.
 
 jsfiddle_link: jsfiddle.net/Prebid_Examples/cu7tpexf/2/embedded/html,result
 
diff --git a/dev-docs/examples/meta-bid-filtering.md b/dev-docs/examples/meta-bid-filtering.md
new file mode 100644
index 0000000000..6fe914df06
--- /dev/null
+++ b/dev-docs/examples/meta-bid-filtering.md
@@ -0,0 +1,15 @@
+---
+layout: example
+title: Meta Bid Filtering
+left_nav_override: Examples
+description: Bid filtering on meta object example
+sidebarType: 1
+
+about:
+- Bidders can supply metadata about the bid such as advertiser domain. See the "meta" fields in the <a href="/dev-docs/bidder-adaptor.html#interpreting-the-response">bid response</a> for the full list.
+- This is an example that filters bid responses based on the metadata object.
+
+jsfiddle_link: jsfiddle.net/Prebid_Examples/0s4eug1d/18/embedded/html,result
+
+code_height: 2300
+---
diff --git a/dev-docs/faq.md b/dev-docs/faq.md
index 6fb525a246..805f7a1256 100644
--- a/dev-docs/faq.md
+++ b/dev-docs/faq.md
@@ -160,8 +160,21 @@ It's technically possible, but we don't recommend doing this:
 
 If all this wasn't enough to warn you away from trying, it should work if you name the PBJS global differently for each instance (https://github.com/prebid/Prebid.js/blob/master/package.json#L20)
 
+## Can I filter bid responses that don't meet my criteria?
+
+Yes. Many bidders provide metadata about the bid that can be used in troubleshooting
+and filtering. See the [list of bid response metadata](/dev-docs/bidder-adaptor.html#interpreting-the-response) and the [filtering example](/dev-docs/examples/meta-bid-filtering.html).
+
+## Does Prebid.js resolve the AUCTION_PRICE macro?
+
+Yes, but in a way that could cause discrepancies in reporting. It's recommended
+that [bid adapters resolve OpenRTB macros](/dev-docs/bidder-adaptor.html#resolve-openrtb-macros-in-the-creatives) themselves before giving them to Prebid.js.
+
+For historic reasons, Prebid will resolve the AUCTION_PRICE macro, but it will be after currency conversion and any bid adjustments.
+This differs from how OpenRTB defines this value as being the clearing price in the bid currency. Header Bidding is a first-price auction, the best candidate for “clearing price” is the original bid itself.
+
 ## Related Reading
 
-+ [Prebid.js Dev Tips]({{site.baseurl}}/dev-docs/troubleshooting-tips.html)
-+ [Prebid.js Common Issues]({{site.baseurl}}/dev-docs/common-issues.html)
++ [Prebid.js Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html)
++ [Prebid.js Common Issues](/dev-docs/common-issues.html)
 + [Prebid.js issues tagged 'question'](https://github.com/prebid/Prebid.js/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20)
diff --git a/dev-docs/modules/adpod.md b/dev-docs/modules/adpod.md
index 519b1a1a87..0519cd9db6 100644
--- a/dev-docs/modules/adpod.md
+++ b/dev-docs/modules/adpod.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Adpod
-description: Adds functions to validate, cache, and modify long-form video bids.
+description: Enables developers to add support for a new adserver that handles ad pod (long-form) videos.
 module_code : adpod
 display_name : Adpod
 enable_download : true
diff --git a/dev-docs/modules/bidViewable.md b/dev-docs/modules/bidViewable.md
index b76fb8bf98..a9da963a12 100644
--- a/dev-docs/modules/bidViewable.md
+++ b/dev-docs/modules/bidViewable.md
@@ -1,15 +1,16 @@
 ---
 layout: page_v2
 page_type: module
-title: Module - Bid Viewable Event
-description: Triggers BID_VIEWABLE event when a rendered PBJS-Bid is viewable according to [Active View criteria](https://support.google.com/admanager/answer/4524488)
+title: Module - Bid Viewability - GAM
+description: Triggers a BID_VIEWABLE event when a rendered bid is viewable according to Active View criteria
 module_code : bidViewability
-display_name : Bid Viewable Event
+display_name : Bid Viewability - GAM
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
-# Bid Viewable Event
+# Bid Viewability - GAM
 {:.no_toc}
 
 * TOC
@@ -19,33 +20,37 @@ sidebarType : 1
 
 This optional module will trigger a BID_VIEWABLE event which can be consumed by Analytics adapters. In addition, the winning bidder can implement an `onBidViewable` method to capture this event.
 
-
 Notes:
-- The module does not work with adservers other than GAM and only with GPT integration.
-- The GPT API is used to find when a bid is viewable, See https://developers.google.com/publisher-tag/reference#googletag.events.impressionviewableevent .
+- The module does not work with adservers other than GAM and only with GPT integration. See the [other Bid Viewable Event](/dev-docs/modules/bidViewableIO.html) module for an ad server independent version.
+- The GPT API is used to find when a bid is viewable. See [GPT documentation](https://developers.google.com/publisher-tag/reference#googletag.events.impressionviewableevent) for more details.
 - This event is fired when an impression becomes viewable, according to [Active View criteria](https://support.google.com/admanager/answer/4524488).
-- Logic used to find a matching Prebid.js bid for a GPT slot is ` (slot.getAdUnitPath() === bid.adUnitCode || slot.getSlotElementId() === bid.adUnitCode) ` this logic can be changed by using param ` customMatchFunction `
 - When a rendered PBJS bid is viewable the module will trigger BID_VIEWABLE event, which can be consumed by the winning bidder and analytics adapters
 - The module works with Banner, Outsteam and Native creatives
 
-Instead of listening for events, bidders may supply a ` bid.vurls ` array and this module may fire those pixels when the viewability signal is received. Publishers can control this with module config ` firePixels: true `. Please note that GDPR and USP related parameters will be added to the given URLs.
+Instead of listening for events, bidders may supply a `bid.vurls` array and this module may fire those pixels when the viewability signal is received. Publishers can control this with module config ` firePixels: true `. Please note that GDPR and USP related parameters will be added to the given URLs.
 
 {: .alert.alert-warning :}
-This feature doesn't seem to work with [Instream Video](/dev-docs/examples/instream-banner-mix.html), as GPT's impressionViewable event is not triggered for instream-video-creative
+This feature doesn't work with [Instream Video](/dev-docs/examples/instream-banner-mix.html), as GPT's impressionViewable event is not triggered for instream-video-creative
+
+The default logic used to find a matching Prebid.js bid for a GPT slot is
+```
+(bid, slot) => (slot.getAdUnitPath() === bid.adUnitCode ||
+		slot.getSlotElementId() === bid.adUnitCode)
+```
 
 ## Configuration
 
 {: .table .table-bordered .table-striped }
-| Field    | Scope   | Type   | Description                                                                           |
-|----------+---------+--------+---------------------------------------------------------------------------------------|
-| `bidViewability` | Required | Object | Configuration object for instream tracking |
+| Field    | Scope   | Type   | Description                            |
+|----------+---------+--------+-----------------------------------------|
+| `bidViewability` | Required | Object | Configuration object |
 | `bidViewability.enabled` | Required | Boolean | when set to true, the module will emit BID_VIEWABLE when applicable. Default: `false` |
 | `bidViewability.firePixels` | Optional | Boolean | when set to true, will fire the urls mentioned in `bid.vurls` which should be array of URLs. Default: `false` |
-| `bidViewability.customMatchFunction` | Optional | function(bid, slot) | when passed this function will be used to `find` the matching winning bid for the GPT slot. Default value is ` (bid, slot) => (slot.getAdUnitPath() === bid.adUnitCode || slot.getSlotElementId() === bid.adUnitCode) ` |
+| `bidViewability.customMatchFunction` | Optional | function(bid, slot) | this function will be used to find the matching winning bid for the GPT slot. See above for the default. |
 
 ## Example of setting module config
 {% highlight js %}
-	pbjs.setConfig({
+    pbjs.setConfig({
         bidViewability: {
             enabled: true,
             firePixels: true,
diff --git a/dev-docs/modules/bidViewableIO.md b/dev-docs/modules/bidViewableIO.md
new file mode 100644
index 0000000000..b483bc5b80
--- /dev/null
+++ b/dev-docs/modules/bidViewableIO.md
@@ -0,0 +1,66 @@
+---
+layout: page_v2
+page_type: module
+title: Module - Bid Viewability - Ad Server Independent
+description: Triggers a BID_VIEWABLE event when a rendered bid is viewable according to an approximation of IAB viewability criteria
+module_code : bidViewabilityIO
+display_name : Bid Viewability - Ad Server Independent
+enable_download : true
+sidebarType : 1
+---
+
+# Bid Viewability - Ad Server Independent
+{:.no_toc}
+
+* TOC
+{:toc}
+
+## Overview
+
+This optional module will trigger a BID_VIEWABLE event which can be consumed by Analytics adapters. In addition, the winning bidder can implement an `onBidViewable` method to capture this event.
+
+Notes:
+- The module works with any adserver, or with no ad server at all.
+- Publishers using GAM/GPT might consider using the [Bid Viewable Event - GAM](/dev-docs/modules/bidViewable.html) module
+- Requires the site to polyfill the [IntersectionObserver API](https://github.com/w3c/IntersectionObserver/tree/main/polyfill) (v1) to find when a bid is viewable. This implementation assumes that the publisher and the bidder are acting in good faith, and does not attempt to detect any bad behavior from either party. We assume that the ad is rendered into the element it has been told to render into, and is not hidden or obfuscated at any time.
+- This event is fired when an impression becomes viewable, according to IAB's viewability guidelines
+- When a rendered PBJS bid is determined to be viewable this module will trigger a BID_VIEWABLE event, which can be consumed by the winning bidder and analytics adapters
+- The module works with Banner creatives, with additional support to come.
+
+## Known Issues
+
+{: .alert.alert-warning :}
+This feature is not intended to be a perfect measure of viewability. It is however intended to be a reasonable approximation of a bids viewability for creative types that are supported.
+
+1. Only supports Banner creatives
+2. Only works on browsers that support or on sites that have [polyfilled the IntersectionObserver API](https://github.com/w3c/IntersectionObserver/tree/main/polyfill)
+3. Results can only be trusted if both the publisher and winning bidder are assumed to be acting in good faith.
+
+## Configuration
+
+{: .table .table-bordered .table-striped }
+| Field    | Scope   | Type   | Description                                                                           |
+|----------+---------+--------+---------------------------------------------------------------------------------------|
+| `bidViewabilityIO` | Required | Object | Configuration object for viewability tracking for supported media types (IO stands for IntersectionObserver) |
+| `bidViewabilityIO.enabled` | Required | Boolean | when set to true, the module will emit BID_VIEWABLE when applicable. Default: `false` |
+
+## Example of setting module config
+{% highlight js %}
+	pbjs.setConfig({
+        bidViewabilityIO: {
+            enabled: true,
+        }
+    });
+{% endhighlight %}
+
+## Example of consuming BID_VIEWABLE event
+{% highlight js %}
+	pbjs.onEvent('bidViewable', function(bid){
+		console.log('got bid details in bidViewable event', bid);
+	});
+{% endhighlight %}
+
+## Related Reading
+
+- [Building a PBJS analytics adapter](/dev-docs/integrate-with-the-prebid-analytics-api.html)
+- [Building a PBJS bidder adapter](/dev-docs/bidder-adaptor.html)
diff --git a/dev-docs/modules/browsiRtdProvider.md b/dev-docs/modules/browsiRtdProvider.md
index 6d269adf3a..062f47f45f 100644
--- a/dev-docs/modules/browsiRtdProvider.md
+++ b/dev-docs/modules/browsiRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : browsiRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/categoryTranslation.md b/dev-docs/modules/categoryTranslation.md
index 6ba65349f7..cb1bd0f987 100644
--- a/dev-docs/modules/categoryTranslation.md
+++ b/dev-docs/modules/categoryTranslation.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Category Translation
-description: Converts IAB sub category to ad server group.
+description: Converts IAB category to ad server category for long-form videos.
 module_code : categoryTranslation
 display_name : CategoryTranslation
 enable_download : true
@@ -24,7 +24,7 @@ The module provides the following:
 ## How to use the module:
 
 1. A Prebid.js package is built that contains this module and the Ad server module. Prebid supports [FreeWheel](/dev-docs/modules/freewheel.html) and Google Ad Manager ad servers.
-2. The inclusion of this module and long-form ad server module causes Prebid to download a mapping file to local storage. The user also has the option to provide their own mapping file.
+2. The inclusion of this module and long-form ad server module causes Prebid to download a mapping file to local storage. The user also has the option to provide their own mapping file. The default ad server is Freewheel. To hook to the DFP video ad server module you must configure it in the mapping url. 
 3. At runtime, brand category translation happens as needed.
 
 
diff --git a/dev-docs/modules/consentManagement.md b/dev-docs/modules/consentManagement.md
index a1dc9b9794..f3ea32002f 100644
--- a/dev-docs/modules/consentManagement.md
+++ b/dev-docs/modules/consentManagement.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Consent Management - GDPR
-description: Module to consume and distribute GDPR consent information to bidder adapters
+description: If you have users in Europe, this module works with your Consent Management Platform to pass consent info to bidders and help align with EU regulations. See also the GDPR Enforcement module.
 module_code : consentManagement
 display_name : Consent Management - GDPR
 enable_download : true
+recommended: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/consentManagementUsp.md b/dev-docs/modules/consentManagementUsp.md
index c365dd0ce5..ddfa9be3fc 100644
--- a/dev-docs/modules/consentManagementUsp.md
+++ b/dev-docs/modules/consentManagementUsp.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Consent Management - US Privacy
-description: Module to consume and distribute US Privacy information to bidder adapters
+description: If you have users in California, this module works with your Consent Management Platform to pass CCPA/US-Privacy data to bidders.
 module_code : consentManagementUsp
 display_name : Consent Management - US Privacy
 enable_download : true
+recommended: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/currency.md b/dev-docs/modules/currency.md
index 5f51829cf8..bc8dd3562d 100644
--- a/dev-docs/modules/currency.md
+++ b/dev-docs/modules/currency.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Currency
-description: Converts bids to the ad server currency
+description: Converts bid currency into ad server currency based on data in a supplied exchange rate file.
 module_code : currency
 display_name : Currency
 enable_download : true
diff --git a/dev-docs/modules/dfp_express.md b/dev-docs/modules/dfp_express.md
index 598fb1c126..fef264c9db 100644
--- a/dev-docs/modules/dfp_express.md
+++ b/dev-docs/modules/dfp_express.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Module - Google Ad Manager Express
-description: Simplified installation mechanism for publishers that have Google Ad Manager in their pages
+description: A simplified installation mechanism for publishers that have Google Publisher Tag (GPT) ad calls in their pages.
 module_code : express
 display_name : Google Ad Manager Express
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/dfp_video.md b/dev-docs/modules/dfp_video.md
index 57a3ff9bc2..e9219ac3b6 100644
--- a/dev-docs/modules/dfp_video.md
+++ b/dev-docs/modules/dfp_video.md
@@ -2,26 +2,27 @@
 layout: page_v2
 page_type: module
 title: Module - Google Ad Manager Video
-description: Addition of DFP Video to the Prebid package
+description: Required for serving instream video through Google Ad Manager.
 module_code : dfpAdServerVideo
-display_name : DFP Video
+display_name : Google Ad Manager Video Support
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
 
 
-# DFP Video
+# Google Ad Manager Video
 {:.no_toc}
 
-This module is required to use the Prebid Instream video examples with DFP Adserver. For instructions showing how to add this module to Prebid.js, see below.
+This module is required to use the Prebid Instream video examples with Google Ad Manager. For instructions showing how to add this module to Prebid.js, see below.
 
 ### Step 1:  Prepare the base Prebid file as usual
 
 The standard options:
 
 - Build from a locally-cloned git repo
-- Receive the email package from the Prebid [Download]({{site.baseurl}}/download.html) page
+- Receive the email package from the Prebid [Download](/download.html) page
 
 ### Step 2: Integrate into your prebid.js configuration
 
@@ -29,4 +30,4 @@ The method exposes the [`pbjs.adServers.dfp.buildVideoUrl`]({{site.baseurl}}/dev
 
 ## Further Reading
 
-+ [Show Video Ads with DFP]({{site.baseurl}}/dev-docs/show-video-with-a-dfp-video-tag.html)
++ [Show Video Ads with GAM](/dev-docs/show-video-with-a-dfp-video-tag.html)
diff --git a/dev-docs/modules/dgkeywordRtdProvider.md b/dev-docs/modules/dgkeywordRtdProvider.md
new file mode 100644
index 0000000000..217971cc31
--- /dev/null
+++ b/dev-docs/modules/dgkeywordRtdProvider.md
@@ -0,0 +1,59 @@
+---
+layout: page_v2
+title: Digital Garage Keyword Module
+display_name: Digital Garage Keyword
+description: Digital Garage Keyword
+page_type: module
+module_type: rtd
+module_code : dgkeywordRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# Digital Garage Keyword Module
+{:.no_toc}
+
+* TOC
+{:toc}
+
+## Integration
+
+1) Compile the Digital Garage Keyword Module and Appnexus Bid Adapter into your Prebid build:  
+
+```
+gulp build --modules="dgkeywordRtdProvider,appnexusBidAdapter,..."  
+```
+
+2) Use `setConfig` to instruct Prebid.js to initilize the dgkeyword module, as specified below. 
+
+## Configuration
+
+This module is configured as part of the `realTimeData.dataProviders`  
+
+```javascript
+var DGKEYWORD_TIMEOUT = 1000;
+pbjs.setConfig({
+    realTimeData: {
+        auctionDelay: DGKEYWORD_TIMEOUT,
+        dataProviders: [{
+            name: 'dgkeyword',
+            waitForIt: true,
+            params: {
+                timeout: DGKEYWORD_TIMEOUT
+            }
+        }]
+    }
+});
+```
+
+Syntax details:
+
+{: .table .table-bordered .table-striped }
+| Name  |Type | Description   | Notes  |
+| :------------ | :------------ | :------------ |:------------ |
+| name  | String | Real time data module name | Always 'dgkeyword' |
+| waitForIt | Boolean | Should be `true` if there's an `auctionDelay` defined (optional) | `false` |
+| params  | Object |   |   |
+| params.timeout  | Integer |timeout (ms)| 1000 |
+
diff --git a/dev-docs/modules/enrichmentFpdModule.md b/dev-docs/modules/enrichmentFpdModule.md
index 833b8c88e7..857c4f2129 100644
--- a/dev-docs/modules/enrichmentFpdModule.md
+++ b/dev-docs/modules/enrichmentFpdModule.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Module - First Party Data Enrichment
-description: Enriches First Party Data
+description: Injects additional data into the auction stream, including&#58; domain, keywords, and page url.
 module_code : enrichmentFpdModule
 display_name : First Party Data Enrichment
 enable_download : true
+recommended: true
 sidebarType : 1
 ---
 
@@ -46,7 +47,8 @@ pbjs.refreshFpd();
 |---+---+---|
 | page URL | site.page | Uses pbjs getRefererInfo().canonicalUrl |
 | referer URL | site.ref | Uses pbjs getRefererInfo().referer |
-| domain | site.domain | Pulled from the getRefererInfo().canonicalUrl, the host domain is used, with www dropped. |
+| host domain | site.domain | Pulled from the getRefererInfo().canonicalUrl the host domain is used with the www component dropped. |
+| aggregated domain | site.publisher.domain | The highest level domain in which cookies can be set. |
 | viewport width | device.w | Hunts for window.innerWidth, window.document.documentElement.clientWidth, window.document.body.clientWidth |
 | viewport height | device.w | Hunts for window.innerHeight, window.document.documentElement.clientHeight, window.document.body.clientHeight |
 | meta keywords | site.keywords | Looks for a meta tag. e.g. <meta name="keywords" content="cars, boats"> |
diff --git a/dev-docs/modules/floors.md b/dev-docs/modules/floors.md
index 0ea4747689..212b6fa9ad 100644
--- a/dev-docs/modules/floors.md
+++ b/dev-docs/modules/floors.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Price Floors
-description: Determine and enforce auction price floors
+description: Configure and enforce minimum bids.
 module_code : priceFloors
 display_name : Price Floors
 enable_download : true
@@ -106,6 +106,9 @@ Below are some basic principles of ad unit floor definitions:
      ];
 {% endhighlight %}
 
+{: .alert.alert-info :}
+When defining floors at the adUnit level, the Floors Module requires the floors object to be defined in setConfig, even if the definition is an empty object as shown below: {% highlight js %}pbjs.setConfig({ floors: {} });{% endhighlight %}
+
 Floor definitions are set in the “values” object containing one or more rules, where the rule is the criteria that needs to be met for that given ad unit, with an associated CPM floor. In the above example, the floors are enforced when the bid from a bidder matches the “mediaType” and “size” combination. Since many bid adapters are not able to ingest floors per size, a simpler setup can be:
 
 {% highlight js %}
@@ -1001,6 +1004,11 @@ getFloor takes in a single object with the following params:
 
 {% endhighlight %}
 
+
+{: .alert.alert-warning :}
+Consider how floors will behave in multi-currency scenarios. A common pitfall is requesting floors without specifying currency, or specifying the wrong currency back to the bid adapter's platform. This may lead to bidders requesting one currency and bidding in an alternate currency.
+
+
 {: .table .table-bordered .table-striped }
 | Param | Type | Description | Default |
 |---+---+---+---|
@@ -1257,6 +1265,7 @@ If the currency function is unable to derive the correct cpm in any of the scena
 
 {: .table  }
 | Partner | Contact | About |
-| <img src="/assets/images/partners/leader/Magnite_logo.png" style="height:50px;"> | Contact Magnite (Formerly Rubicon Project) support at [globalsupport@mangite.com](mailto:globalsupport@magnite.com) to use Magnite as a floor provider. | |
-| pubx.ai | Reach out to PubX at [hello@pubx.ai](mailto:hello@pubx.ai) to learn more about our AI-powered dynamic floor optimization. | |
-| Assertive Yield | [assertiveyield.com] | Holistic flooring covering Prebid, Amazon, GAM UPR, RTB and more |
+| <img src="/assets/images/partners/leader/Magnite_logo.png" style="height:50px;"> | [globalsupport@magnite.com](mailto:globalsupport@magnite.com) | Magnite data-science applied to dynamic floors 
+| pubx.ai | [hello@pubx.ai](mailto:hello@pubx.ai) | AI-powered dynamic floor optimization |
+| Assertive Yield | [assertiveyield.com](https://assertiveyield.com) | Holistic flooring covering Prebid, Amazon, GAM UPR, RTB and more |
+| OpenX | Reach out to OpenX at [apollo@openx.com] | Dynamic floor optimization and more |
diff --git a/dev-docs/modules/freewheel.md b/dev-docs/modules/freewheel.md
index 24cba9286f..2aa357c750 100644
--- a/dev-docs/modules/freewheel.md
+++ b/dev-docs/modules/freewheel.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Module - Freewheel
-description: Returns targeting key/value pairs for adpod mediaType adUnits.
+description: Passes key value targeting to Freewheel SDK for adpod mediaType adUnits.
 module_code : freeWheelAdserverVideo
-display_name : Freewheel
+display_name : Freewheel Video Support
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/gdprEnforcement.md b/dev-docs/modules/gdprEnforcement.md
index 03acfeb352..2afd260ac9 100644
--- a/dev-docs/modules/gdprEnforcement.md
+++ b/dev-docs/modules/gdprEnforcement.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: GDPR Enforcement Module
-description: Module to enforce GDPR consent
+description: If you have users in Europe, you'll want this module that enforces GDPR consent
 module_code : gdprEnforcement
 display_name : GDPR Enforcement
 enable_download : true
+recommended: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/geoedgeRtdProvider.md b/dev-docs/modules/geoedgeRtdProvider.md
index a9c4367cef..42113e0086 100644
--- a/dev-docs/modules/geoedgeRtdProvider.md
+++ b/dev-docs/modules/geoedgeRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : geoedgeRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/gpt-pre-auction.md b/dev-docs/modules/gpt-pre-auction.md
index a701cc8796..6beebdd1ca 100644
--- a/dev-docs/modules/gpt-pre-auction.md
+++ b/dev-docs/modules/gpt-pre-auction.md
@@ -2,10 +2,12 @@
 layout: page_v2
 page_type: module
 title: Module - GPT Pre-Auction
-description: Adds PB Ad Slot and matching GAM ad unit name to each ad unit's first-party data before bid requests are sent to the adapters
+description: If you run GAM, this module generates the 'global placement id' that's becoming required for successful auctions.
 module_code : gptPreAuction
 display_name : GPT Pre-Auction
 enable_download : true
+recommended: true
+vendor_specific: true
 sidebarType : 1
 ---
 
@@ -38,10 +40,14 @@ into the Prebid.js package.
 
 Optional initialization parameters:
 
-- enabled (on by default)
-- customGptSlotMatching function
-- customPbAdSlot function
+{: .table .table-bordered .table-striped }
+| Param | Required? | Type | Description | Example |
+| enabled | no | boolean | allows turning off of module. Default value is true | true |
+| customGptSlotMatching | no | function | GPT slot matching function should match the customSlotMatching function sent to [setTargetingForGptAsync](/publisher-api-reference/setTargetingForGPTAsync.html) | |
+| customPbAdSlot | no | function | Custom PB AdSlot function | |
+| mcmEnabled | no | boolean | Removes extra network IDs when Multiple Customer Management is active. Default is false. | true |
 
+For example:
 ```
 pbjs.setConfig({
     gptPreAuction: {
@@ -53,7 +59,8 @@ pbjs.setConfig({
 	customGptSlotMatching: function(gptSlotObj) {
 		...
 		return true; // or false
-	}
+	},
+	mcmEnabled: true
     }
 });
 ```
diff --git a/dev-docs/modules/haloRtdProvider.md b/dev-docs/modules/haloRtdProvider.md
index 3f36b19946..6e9be1b0d5 100644
--- a/dev-docs/modules/haloRtdProvider.md
+++ b/dev-docs/modules/haloRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : haloRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
@@ -16,21 +17,24 @@ sidebarType : 1
 * TOC
 {:toc}
 
-Audigent is a next-generation data management platform and a first-of-a-kind
-"data agency" containing some of the most exclusive content-consuming audiences
-across desktop, mobile and social platforms.
-
-This real-time data module provides an integrated post-cookie Halo identity and
-real-time user segmentation solution that seamlessly integrates into your bid
-request cycle. Users are identified and bid request objects are augmented
-with first-party data derived segments prior to being sent to exchange/ssp
-services in order to optimize targeting and increase publisher revenue.
-
-Audigent maintains a large database of first-party Tradedesk Unified ID,
-Audigent Halo ID and other id provider mappings to various third-party segment
-types that are utilizable across different backends. With the Halo RTD module,
-these segments and other data can be retrieved and utilized by supporting
-exchange and SSP backends in real-time during your bid request cycle.
+Audigent is a next-generation, first-party data management platform and the
+world’s first "data agency", powering the programmatic landscape and DTC
+eCommerce with actionable first-party audience and contextual data from
+retailers, lifestyle publishers, content creators, athletes and artists.
+
+The Halo real-time data module in Prebid has been built so publishers
+can maximize the power of their first-party audiences and contextual data.
+This module provides both an integrated cookieless Halo identity, contextual 
+targeting and audience segmentation solution that seamlessly and easily
+integrates into your existing Prebid deployment.
+
+Users, devices, content, cohorts and other features are identified and utilized
+to augment every bid request with targeted, first-party data-derived segments
+before being submitted to supply-side platforms. Enriching the bid request with
+robust first-party audience and contextual data, Audigent's Halo RTD module
+helps optimize targeting and header-bidding performance.  For more information, 
+please visit https://audigent.com or contact our Prebid integration team at
+prebid@audigent.com.
 
 
 ## Publisher Usage
diff --git a/dev-docs/modules/iabCatagoryTranslation.md b/dev-docs/modules/iabCatagoryTranslation.md
deleted file mode 100644
index 7831fbd198..0000000000
--- a/dev-docs/modules/iabCatagoryTranslation.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-layout: page_v2
-page_type: module
-title: Module - IAB Category Translation
-description: Converts between ad agency brand categories and IAB brand categories.
-module_code : CategoryTranslation
-display_name : CategoryTranslation
-enable_download : true
-sidebarType : 1
----
-
-# IAB Category Translation
-
-{:.no_toc}
-
-This module converts the IAB sub category to FreeWheel industry group identifiers. The FreeWheel identifiers ensure competitve separation of industries and products. 
-
-Each bid request must return one [IAB subcategory](https://support.aerserv.com/hc/en-us/articles/207148516-List-of-IAB-Categories).
-
-The module provides the following: 
-
-- Converts IAB subcategories to a FreewWheel industry group identifier.
-
-## How to use the module:
-
-1. A Prebid.js package is built that contains this module and the [FreeWheel](/dev-docs/modules/freewheel.html) module.  
-2. The inclusion of this module causes Prebid to download a mapping file to local storage. The user also has the option to provide their own mapping file. 
-3. At runtime, brand category translation happens as needed. 
-
-
-## Using A Custom Map File
-The IAB Category Translation module uses a default mapping file to convert adserver categories to IAB sub categories. If a publisher prefers to use their own mapping file they will need to set the URL location of that file. They can do so by adding the following to their Prebid.js configuration: 
-
-```
-pbjs.setConfig({
-    "brandCategoryTranslation": {
-       "translationFile": "<url_to_file>"
-    }
-});
-```
-
-This file will be stored locally to expedite the conversion process. If a publisher opts to not provide a conversion mapping file Prebid will use its default conversion mapping file. 
-
-Publishers should ensure that the JSON returned from their custom file is valid for Prebid by adhering to the following structure: 
-
-```JSON
-{
-    “mapping”: {
-        “<your-iab-sub-category>“: {
-            “id”: “<industry/group/category id>“,
-            “name”: “<industry/group/category name>”
-        },
-   ....
-   }
-}
-```
-
-Refer to Prebid Github repository for a [custom file reference](https://github.com/prebid/category-mapping-file).
-
-
-## Further Reading
-
-[Prebid.js](/dev-docs/getting-started.html)   
-[Prebid Video](/prebid-video/video-overview.html)  
-[FreeWheel Module](/dev-docs/modules/freewheel.html)  
-[Adapter Integration](/dev-docs/bidder-adaptor.html)
-
-
-
-
-
-
-
diff --git a/dev-docs/modules/iasRtdProvider.md b/dev-docs/modules/iasRtdProvider.md
new file mode 100644
index 0000000000..99dae5c16a
--- /dev/null
+++ b/dev-docs/modules/iasRtdProvider.md
@@ -0,0 +1,56 @@
+---
+layout: page_v2
+title: Integral Ad Science(IAS) Real Time Data Module
+display_name: Integral Ad Science(IAS) RTD
+description: RTD provider for Integral Ad Science(IAS)
+page_type: module
+module_type: rtd
+module_code : iasRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# Integral Ad Science(IAS) Real Time Data Module
+
+# Overview
+
+Integral Ad Science(IAS) Real Time Data Module. Please contact [Integral Ad Science(IAS)](https://integralads.com/) for information.
+
+## Integration
+
+1) Compile Integral Ad Science(IAS) RTD Provider into your Prebid build:
+
+```
+`gulp build --modules=iasBidAdapter,iasRtdProvider`...
+```
+
+2) Use `setConfig` to instruct Prebid.js to initialize the IAS module, as specified below.
+
+## Configuration
+
+This module is configured as part of the `realTimeData.dataProviders` object.
+
+Configuration example for using RTD module with the `ias` provider:
+
+```javascript
+  pbjs.setConfig({
+    realTimeData: {
+      dataProviders: [
+        {
+          name: 'ias',
+          waitForIt: true,
+          params: {
+            pubId: '1234',
+          }
+        }
+      ]
+    }
+``` 
+
+Parameters details:
+
+{: .table .table-bordered .table-striped }
+| Name | Type  | Scope | Description |
+| :------------ | :------------ | :------- | :------- |
+| pubId  | string  | required | IAS publisher ID |
diff --git a/dev-docs/modules/idLibrary.md b/dev-docs/modules/idLibrary.md
index 306b877158..5874353f8e 100644
--- a/dev-docs/modules/idLibrary.md
+++ b/dev-docs/modules/idLibrary.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: ID Import Library
-description: ID Graphing Adapter
+description: Retrieve user ids deployed on your site, and return them to a configurable endpoint for ID Graphing.
 module_code : currency
 display_name : ID Import Library
 enable_download : true
diff --git a/dev-docs/modules/index.md b/dev-docs/modules/index.md
index ced73b9b95..35f1311756 100644
--- a/dev-docs/modules/index.md
+++ b/dev-docs/modules/index.md
@@ -8,101 +8,89 @@ sidebarType: 1
 # Prebid.js Module Overview
 {:.no_toc}
 
-The core of Prebid.js contains only the foundational code needed for header bidding. Any functionality that could be considered an add-on or that covers a special case is being moved out into modules.  Examples of this kind of code include:
+The core of Prebid.js contains only the foundational code needed for header bidding. Any functionality that could be considered an add-on is part of a module. These are the major categories:
 
-- Bidder adapters
-- Special auction logic
-- Ad server API integrations
-- Any other extensible functionality
-
-This section of the site contains user-submitted module documentation.  We're hoping that it will grow over time.
-
-To see all of the modules that are available, see the [`modules` folder in the repo](https://github.com/prebid/Prebid.js/tree/master/modules).
-
-If you are looking for bidder adapter parameters, see [Bidders' Params]({{site.baseurl}}/dev-docs/bidders.html).
+- [Bidder adapters](/dev-docs/bidders.html)
+- [Analytics adapters](/overview/analytics.html)
+- Any other extensible functionality - documented on this page
 
 * TOC
 {:toc}
 
-## General Modules
-
-{: .table .table-bordered .table-striped }
-| Module              | Description  |
-|---------------------+--------------|
-| [**Currency**](/dev-docs/modules/currency.html) | Converts bid currency into ad server currency based on data in a supplied exchange rate file. |
-| **ConsentManagement** | Collecting and passing consent information in support of privacy regulations:{::nomarkdown}<ul><li><a href="/dev-docs/modules/consentManagement.html">EU GDPR</a> with optional <a href="/dev-docs/modules/gdprEnforcement.html">GDPR Enforcement</a> module</li><li><a href="/dev-docs/modules/consentManagementUsp.html">US Privacy</a> (CCPA)</li></ul>{:/} See [CMP Best Practices.](/dev-docs/cmp-best-practices.html) |
-| [**Google Ad Manager Express**](/dev-docs/modules/dfp_express.html) | A simplified installation mechanism for publishers that have Google Publisher Tag (GPT) ad calls in their pages. |
-| [**Supply Chain Object**](/dev-docs/modules/schain.html) | Validates and makes the Supply Object available to bidders |
-| [**User ID**](/dev-docs/modules/userId.html) | Sub-modules are available to support a range of identification approaches. |
-| [**ID Import Library**](/dev-docs/modules/idLibrary.html) | Retrieve user ids deployed on your site, and return them to a configurable endpoint for ID Graphing |  
-| [**Advanced Size Mapping**](/dev-docs/modules/sizeMappingV2.html) | Display Responsive AdUnits in demanding page environments. |
-| [**Price Floors Module**](/dev-docs/modules/floors.html) | Configure and enforce minimum bids. |
-| [**GPT Pre-Auction Module**](/dev-docs/modules/gpt-pre-auction.html) | Adds a PB Ad Slot and matching GAM ad unit name to each ad unit's first-party data before bid requests are sent to the adapters. |
-| [**ID Import Library**](/dev-docs/modules/idLibrary.html) | Retrieve user ids deployed on your site, and return them to a configurable endpoint for ID Graphing |  
-| [**First Party Data Enrichment**](/dev-docs/modules/enrichmentFpdModule.html) | Pulls well-known FPD from the environment to form a base of data available to all adapters. |
-| [**MASS**](/dev-docs/modules/mass.html) | Enables the MASS protocol for Prebid and custom renderers by DealID |  
-| [**MultiBid Module**](/dev-docs/modules/multibid.html) | Allows bidders to send multiple bids to the ad server. |
-| [**Bid Viewability**](/dev-docs/modules/bidViewable.html) | Triggers an event which can be consumed by analytics and bid adapters. |
+{% assign module_pages = site.pages | where: "page_type", "module" %}
 
-## Real-Time Data Providers
+## Recommended Modules
 
-All of the modules that fall under the Real-Time Data (RTD) category conform to
-a consistent set of publisher controls. The pub can choose to run multiple
-RTD modules, define an overall amount of time they're willing to wait for
-results, and even flag some of the modules as being more "important"
-than others.
+Prebid.org highly recommends that publishers utilize the following modules:
+<br/>
+<table class="table table-bordered table-striped">
+  <thead>
+    <tr>
+      <th>Module</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+{% for page in module_pages %}{% if page.recommended == true %}
+    <tr>
+      <td><a href="/dev-docs/modules/{{page.module_code}}.html"><strong>{{page.display_name}}</strong></a></td>
+      <td>{{page.description}}</td>
+    </tr>
+{% endif %}{% endfor %}
+</tbody>
+</table>
 
-See [the realTimeData setConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-realTimeData) reference for more details.
+## General Modules
 
-{% assign module_pages = site.pages | where: "page_type", "module" | where: "module_type", "rtd" %}
+Modules in the Real-Time Data (RTD) category conform to
+a consistent set of publisher controls. The publisher can choose to run multiple
+RTD modules, define an overall amount of time they're willing to wait for
+results, and even flag some of the modules as being higher priority
+than others. See [the realTimeData setConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-realTimeData) reference for more details.
 
 <table class="table table-bordered table-striped">
   <thead>
     <tr>
       <th>Module</th>
       <th>Description</th>
+      <th>RTD?</th>
     </tr>
   </thead>
   <tbody>
-{% for page in module_pages %}
-  {% if page.enable_download == false %}{% continue %}{% endif %}
+{% for page in module_pages %}{% if page.recommended == true or page.vendor_specific == true %}{% continue %}{% endif %}
     <tr>
-      <td><a href="/dev-docs/modules/{{page.module_code}}.html"><strong>{{page.title}}</strong></a></td>
+      <td><a href="/dev-docs/modules/{{page.module_code}}.html"><strong>{{page.display_name}}</strong></a></td>
       <td>{{page.description}}</td>
+      {% if page.module_type == "rtd" %}<td>yes</td>{% else %}<td>no</td>{% endif %}
     </tr>
 {% endfor %}
 </tbody>
 </table>
 
-## Video Modules
-
-{: .table .table-bordered .table-striped }
-| Module              | Description  |
-|---------------------+--------------|
-| [**Ad Pod**](/dev-docs/modules/adpod.html) | Enables developers to add support for a new adserver that handles ad pod (long-form) videos |
-| [**Freewheel**](/dev-docs/modules/freewheel.html) | Passes key value targeting to Freewheel SDK |
-| [**Google Ad Manager Video**](/dev-docs/modules/dfp_video.html) | Required for serving instream video through Google Ad Manager. |
-| [**IAB Category Translation**](/dev-docs/modules/categoryTranslation.html) | Converts IAB sub category to Ad server category for long-form videos. |
-| [**Instream Video Ads Tracking**](/dev-docs/modules/instreamTracking.html) | Allow Analytics Adapters and Bid Adapters to track `BID_WON` events for Instream video bids. |
-| [**Konduit Accelerate**](/dev-docs/modules/konduit.html) | Provides Real Time Start Rate Performance per Bidder. |
-
-## Testing and Debug Modules
-
-{: .table .table-bordered .table-striped }
-| Module              | Description  |
-|---------------------+--------------|
-| [**Server-to-Server Testing**](/dev-docs/modules/s2sTesting.html) | Adds A/B test support to ease into server-side header bidding. |
-| [**First Party Data Validation**](/dev-docs/modules/validationFpdModule.html) | Verify First Party Data ortb2 fields and data types. |
-
-## Deprecated Modules
-
-{: .table .table-bordered .table-striped }
-| Module              | Description  |
-|---------------------+--------------|
-| [**Publisher Common ID**](/dev-docs/modules/pubCommonId.html) | (Deprecated - please use User ID module) Adds a persisted user ID in the publisher's domain. |
+## Vendor-Specific Modules
+These modules may require accounts with a service provider.
+<table class="table table-bordered table-striped">
+  <thead>
+    <tr>
+      <th>Module</th>
+      <th>Description</th>
+      <th>RTD?</th>
+    </tr>
+  </thead>
+  <tbody>
+{% for page in module_pages %}{% if page.recommended == true %}{% continue %}{% endif %}{% if page.vendor_specific == true %}
+    <tr>
+      <td><a href="/dev-docs/modules/{{page.module_code}}.html"><strong>{{page.display_name}}</strong></a></td>
+      <td>{{page.description}}</td>
+      {% if page.module_type == "rtd" %}<td>yes</td>{% else %}<td>no</td>{% endif %}
+    </tr>
+{% endif %}{% endfor %}
+</tbody>
+</table>
 
 ## Further Reading
 
 + [Source code of all modules](https://github.com/prebid/Prebid.js/tree/master/modules)
-+ [Bidders' Params](/dev-docs/bidders.html)
++ [How to add a Bid Adapter](/dev-docs/bidder-adaptor.html)
++ [How to add an Analytics Adapter](/dev-docs/integrate-with-the-prebid-analytics-api.html)
 + [How to add a Real Time Data Submodule](/dev-docs/add-rtd-submodule.html)
diff --git a/dev-docs/modules/instreamTracking.md b/dev-docs/modules/instreamTracking.md
index 4e3d18255e..1e2c16f128 100644
--- a/dev-docs/modules/instreamTracking.md
+++ b/dev-docs/modules/instreamTracking.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Instream Video Ads Tracking
-description: Allows to track `BID WON` events for instream ad units
+description: Allow Analytics Adapters and Bid Adapters to track `BID_WON` events for instream video bids.
 module_code : instreamTracking
 display_name : Instream Tracking
 enable_download : true
diff --git a/dev-docs/modules/jwplayerRtdProvider.md b/dev-docs/modules/jwplayerRtdProvider.md
index 66b4fc3024..2950e4fceb 100644
--- a/dev-docs/modules/jwplayerRtdProvider.md
+++ b/dev-docs/modules/jwplayerRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : jwplayerRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/konduit.md b/dev-docs/modules/konduit.md
index 7623ae7aa2..f9bb831eea 100644
--- a/dev-docs/modules/konduit.md
+++ b/dev-docs/modules/konduit.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Module - Konduit Accelerate
-description: Applies Konduit video ad acceleration optimization to a provided bid.
+description: Applies Konduit video ad acceleration optimization to wining video bid.
 module_code : konduitWrapper
 display_name : Konduit Accelerate
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/mass.md b/dev-docs/modules/mass.md
index d447773ca3..019e5c58b6 100644
--- a/dev-docs/modules/mass.md
+++ b/dev-docs/modules/mass.md
@@ -2,9 +2,9 @@
 layout: page_v2
 page_type: module
 title: Module - MASS
-description: Enable MASS protocol for Prebid
+description: General deal rendering functionality.
 module_code : mass
-display_name : MASS
+display_name : Deal Rendering (aka MASS)
 enable_download : true
 sidebarType : 1
 ---
@@ -139,16 +139,46 @@ pbjs.que.push(function() {
 
 ## Integration Example
 
+There are two options to view the integration example:
+
+### Option 1 - Your own development environment
 To view the integration example:
  
-1) in your cli run:
+1) Build Prebid using the following required options
+
+```
+gulp build --modules=ixBidAdapter,mass
+```
+
+2) Use a http server with a valid hostname to access its content. It is not advised to run the bid simulation using localhost or 127.0.0.1
 
 ```
-gulp serve --modules=ixBidAdapter,mass
+http://hostname/integrationExamples/mass/index.html
 ```
 
-2) in your browser, navigate to:
+### Option 2 - Hosted online
+Mass Platform Limited hosts an official integration and demo page that can be accessed using the following link: http://demo.massplatform.com/ix/prebid/
+
+## Testing MASS
+Testing requires valid bids to be returned to Prebid. To assist with this process, we recommend you use the MASS Bid Simulation tool found at https://github.com/massplatform/bidsim. Your Exchange partner might be able to assist you with other specialist tools and browser plugins to achieve similar resuls.
 
+The instructions below assume that you have followed the installation instructions for the MASS Bidsim tool found at https://github.com/massplatform/bidsim/blob/master/README.md.
+
+### Testing using MASS compliant tags
+The bidsim tool ships with working DSP example tags that can be found under the bidsim/tags folder.
+
+A quick way to test the Integration test page in combination with the official bootloader is to use the following command:
+```
+node bidsim --inject --bid 2000 --width 300 --height 250 --dealid 'MASS' --tag "tags/inskin-housead-desktop.js" -o https://demo.massplatform.net/ix/prebid
 ```
-http://localhost:9999/integrationExamples/mass/index.html
+### For third-party technology companies
+Third-parties that wish to integrate with the official MASS bootloader can get started by running the following command:
 ```
+node bidsim --inject --bid 2000 --width 300 --height 250 --dealid 'MASS' --tag "tags/test.js" -o https://demo.massplatform.net/ix/prebid
+```
+
+Explanation: The tags/test.js tag calls a reference endpoint for developers that can be accessed here: https://demo.massplatform.net/reference/endpoint.js.
+When running the above command to invoke this reference endpoint, you will see all the params that MASS collected and passed onto your endpoint. This includes inputs, parsed inputs, tag parameters and MASS/Provider specific configurations.
+
+### Testing on live sites
+Any sites that have been MASS configured will work with the Bidsim tool. This is a convenient way to test whether your publisher ad server and slot is correctly configured.
diff --git a/dev-docs/modules/medianetRtdProvider.md b/dev-docs/modules/medianetRtdProvider.md
new file mode 100644
index 0000000000..fac7f1cf1c
--- /dev/null
+++ b/dev-docs/modules/medianetRtdProvider.md
@@ -0,0 +1,116 @@
+---
+layout: page_v2
+title: Media.net Realtime Module
+display_name: Media.net Realtime Module
+description: Delivers added functionality based on configurations, i.e. refresh, viewability, etc.
+page_type: module
+module_type: rtd
+module_code : medianetRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# Media.net Realtime Module
+{:.no_toc}
+
+* TOC 
+{:toc}
+
+## Overview
+
+The module currently provisions Media.net's Intelligent Refresh configured by the publisher.
+
+### Intelligent Refresh
+
+Intelligent Refresh (IR) module lets publisher refresh their ad inventory without affecting page experience of visitors through configured criteria. The module optionally provides tracking of refresh inventory and appropriate targeting in GAM. Publisher configured criteria is fetched via an external JS payload.
+
+{: .alert.alert-warning :}
+Disclosure: This module loads external code that is not open source and has not been reviewed by Prebid.org.
+
+## Configuration
+
+This module is configured as part of the `realTimeData.dataProviders` object.
+
+{: .table .table-bordered .table-striped }
+| Name       | Scope    | Description                            | Example       | Type     |
+|------------|----------|----------------------------------------|---------------|----------|
+| `name `     | required | Real time data module name | `'medianet'`   | `string` |
+| `params`      | required |  | | `Object` |
+| `params.cid`      | required | The customer id is provided by Media.net. | `'8CUX0H51C'` | `string` |
+
+#### Basic Example
+
+```javascript
+pbjs.setConfig({
+    realTimeData: {
+        dataProviders: [{
+            name: 'medianet',
+            params: {
+                cid: '8CUX0H51C'
+            }
+        }]
+    }
+});
+```
+
+## Prebid Adapters module usage
+
+Prebid bidder and analytics adapters can read `adunit.ortb2Imp.ext.refresh` to know the information passed by Intelligent Refresh Real Time Module. Example AdUnit:
+
+```javascript
+var adUnit = {
+  "code": "div-gpt-ad-1460505748561-1",
+  // ...
+  "ortb2Imp": {
+    "ext": {
+      "refresh": {   // added by Intelligent Refresh RTD
+        "mnrf": "1", // mnrf=1 means its a refresh impression
+        "mnrfc": 2   // mrfc=2 means its the 2nd refresh-ed impression
+      },
+      "data": { "pbadslot": "div-gpt-ad-1460505748561-1" },
+    }
+  }
+};
+```
+
+## Targeting sent to GAM
+
+For each prebid adUnit we pass following key values to GAM by default
+
+```javascript
+var targeting = {
+  "slotA":{
+      "mnadc": "slotA",   // used to map GPT slot => Prebid AdUnit
+      "mnrf": "1",        // Refresh Impression Flag
+      "mnrfc": 2          // Refreshed count per slot
+  }
+};
+```
+
+## Integration
+To install the module, follow these instructions:
+
+#### Step 1: Prepare the base Prebid file
+
+- Option 1: Use Prebid [Download](/download.html) page to build the prebid package. Ensure that you do check *Media.net Realtime Module* module
+
+- Option 2: From the command line, run `gulp build --modules=medianetRtdProvider,...`
+
+#### Step 2: Set configuration
+
+Enable Media.net Real Time Module using `pbjs.setConfig`
+
+```javascript
+pbjs.setConfig({
+    realTimeData: {
+        dataProviders: [{
+            name: 'medianet',
+            params: {
+                cid: '8CUX0H51C'
+            }
+        }]
+    }
+});
+```
+
diff --git a/dev-docs/modules/multibid.md b/dev-docs/modules/multibid.md
index 49f04d8786..e9ae46f0cc 100644
--- a/dev-docs/modules/multibid.md
+++ b/dev-docs/modules/multibid.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - MultiBid
-description: Allows bidders to return more than one bid response
+description: Allows bidders to send multiple bids to the ad server.
 module_code : multibid
 display_name : MultiBid
 enable_download : true
diff --git a/dev-docs/modules/optimeraRtdProvider.md b/dev-docs/modules/optimeraRtdProvider.md
new file mode 100644
index 0000000000..351febd353
--- /dev/null
+++ b/dev-docs/modules/optimeraRtdProvider.md
@@ -0,0 +1,89 @@
+---
+layout: page_v2
+title: Optimera Real Time Data Module
+display_name: Optimera RTD
+description: Optimera Optimization Targeting
+page_type: module
+module_type: rtd
+module_code : optimeraRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# Optimera Real Time Date Module
+
+# Overview
+
+Optimera Real Time Data Module. Provides targeting for ad requests from data collected by the Optimera Measurement script on your site. Please contact [Optimera](http://optimera.nyc/) for information. This is a port of the Optimera Bidder Adapter.
+
+## Integration
+
+1) Compile the Optimera RTD Provider into your Prebid build:
+
+```
+`gulp build --modules=rtdModule,optimeraRtdProvider`...
+```
+
+Note: You must include rtdModule in the build list.
+
+2) Use `setConfig` to instruct Prebid.js to initialize the optimera module, as specified below.
+
+## Configuration
+
+This module is configured as part of the `realTimeData.dataProviders` object.
+
+Configuration example for using RTD module with the `optimeraRTD` provider:
+
+```javascript
+  pbjs.setConfig({
+    realTimeData: {
+      dataProviders: [
+        {
+          name: 'optimeraRTD',
+          waitForIt: true,
+          params: {
+            clientID: '9999',
+            optimeraKeyName: 'optimera',
+            device: 'de'
+          }
+        }
+      ]
+    }
+``` 
+
+## Migration From the Optimera Bidder Adapter
+
+The Optimera Bidder Adapter is no longer active with Prebid 5.0. Therefore, the bidder settings used for the Optimera Bidder Adapter for < Prebid 5.0 can be removed and replaced with this new Optimera RTD module configuration.
+
+For the optimeraKeyName setting, the Optimera Bidder Adapter used 'hb_deal_optimera' as the key name, as this is the key that name used in GAM. There is no need to change this key name in GAM, as you can still use this key name with the Optimera RTD Module as indicated above.
+
+Parameters details:
+
+Contact Optimera to get assistance with the params.
+
+{: .table .table-bordered .table-striped }
+
+|  param name | type  |Scope | Description |
+| :------------ | :------------ | :------- | :------- |
+| clientID  | string  | required | Optimera Client ID |
+| optimeraKeyName  | string  | optional |  GAM key name for Optimera. If migrating from the Optimera bidder adapter this will default to hb_deal_optimera and can be ommitted from the configuration. |
+| device  | string  | optional | Device type code for mobile, tablet, or desktop. Either mo, tb, de |
+
+## Example
+
+To view an integration example:
+ 
+1) in your cli run:
+
+```
+gulp serve --modules=appnexusBidAdapter,optimeraRtdProvider`
+```
+
+2) in your browser, navigate to:
+
+```
+http://localhost:9999/integrationExamples/gpt/optimeraRtdProvider_example.html
+```
+
+You will be able to see targeting set for each ad request with the 'optimera' key name.
diff --git a/dev-docs/modules/permutiveRtdProvider.md b/dev-docs/modules/permutiveRtdProvider.md
new file mode 100644
index 0000000000..0983fe4d8a
--- /dev/null
+++ b/dev-docs/modules/permutiveRtdProvider.md
@@ -0,0 +1,76 @@
+---
+layout: page_v2
+title: Permutive Real Time Data Provider
+display_name: Permutive Real Time Data Module
+description: Permutive Real Time Data Module
+page_type: module
+module_type: rtd
+module_code : permutiveRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# Permutive RTD Provider
+{:.no_toc}
+
+* TOC
+{:toc}
+
+## Overview
+This module reads cohorts from Permutive and attaches them as targeting keys to bid requests.
+
+## Usage
+Compile the Permutive RTD module into your Prebid build:
+```
+gulp build --modules=rtdModule,permutiveRtdProvider
+```
+
+> Note that the global RTD module, `rtdModule`, is a prerequisite of the Permutive RTD module.
+
+You then need to enable the Permutive RTD in your Prebid configuration, using the below format:
+
+```javascript
+pbjs.setConfig({
+  ...,
+  realTimeData: {
+    auctionDelay: 50, // optional auction delay
+    dataProviders: [{
+      name: 'permutive',
+      waitForIt: true, // should be true if there's an `auctionDelay`
+      params: {
+        acBidders: ['appnexus']
+      }
+    }]
+  },
+  ...
+})
+```
+
+## Supported Bidders
+The Permutive RTD module sets Audience Connector cohorts as bidder-specific `ortb2.user.data` first-party data, following the Prebid `ortb2` convention, for any bidder included in `acBidders`. The module also supports bidder-specific data locations per ad unit (custom parameters) for the below bidders:
+
+{: .table .table-bordered .table-striped }
+| Bidder      | ID         | Custom Cohorts       | Audience Connector |
+| ----------- | ---------- | -------------------- | ------------------ |
+| Xandr       | `appnexus` | Yes                  | Yes                |
+| Magnite     | `rubicon`  | Yes                  | No                 |
+| Ozone       | `ozone`    | No                   | Yes                |
+
+Key-values details for custom parameters:
+* **Custom Cohorts:** The module configuration will automatically reflect the SSP integrations (_Activations_) you have enabled in your Permutive dashboard. Any additional bidders you want to pass data to will need to be configured. Permutive cohorts will be sent in the permutive key-value.
+
+* **Audience Connector:** You'll need to define which bidders should receive Audience Connector cohorts. You need to include the `ID` of any bidder in the `acBidders` array. Audience Connector cohorts will be sent in the `p_standard` key-value.
+
+
+## Parameters
+
+{: .table .table-bordered .table-striped }
+| Name              | Type                 | Description        | Default        |
+| ----------------- | -------------------- | ------------------ | ------------------ |
+| name              | String               | This should always be `permutive` | - |
+| waitForIt         | Boolean              | Should be `true` if there's an `auctionDelay` defined (optional) | `false` |
+| params            | Object               |                 | - |
+| params.acBidders  | String[]             | An array of bidders which should receive Audience Connector cohorts. | `[]` |
+| params.maxSegs    | Integer              | Maximum number of cohorts to be included in either the `permutive` or `p_standard` key-value. | `500` |
+
diff --git a/dev-docs/modules/pubCommonId.md b/dev-docs/modules/pubCommonId.md
index 7e42c44ade..455e89bb38 100644
--- a/dev-docs/modules/pubCommonId.md
+++ b/dev-docs/modules/pubCommonId.md
@@ -4,7 +4,7 @@ page_type: module
 title: Module - Publisher Common ID
 description: User ID persisted in first party domain
 module_code : pubCommonId
-display_name : Publisher Common ID
+display_name : Publisher Common ID (deprecated)
 enable_download : true
 sidebarType : 1
 ---
diff --git a/dev-docs/modules/reconciliationRtdProvider.md b/dev-docs/modules/reconciliationRtdProvider.md
index da9da39642..47ff52d92e 100644
--- a/dev-docs/modules/reconciliationRtdProvider.md
+++ b/dev-docs/modules/reconciliationRtdProvider.md
@@ -5,8 +5,9 @@ description: Reconciliation Real Time Data Module
 page_type: module
 module_type: rtd
 module_code: reconciliationRtdProvider
-display_name: Reconciliation
+display_name: Reconciliation Supply Chain Validation
 enable_download: true
+vendor_specific: true
 sidebarType: 1
 ---
 
diff --git a/dev-docs/modules/schain.md b/dev-docs/modules/schain.md
index 77934e227c..4534f4840b 100644
--- a/dev-docs/modules/schain.md
+++ b/dev-docs/modules/schain.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Supply Chain Object
-description: Validates Supply Chain object and makes it available to bidder
+description: Validates the Supply Chain object and makes it available to bidders.
 module_code : schain
 display_name : Supply Chain Object
 enable_download : true
diff --git a/dev-docs/modules/sirdataRtdProvider.md b/dev-docs/modules/sirdataRtdProvider.md
index 419c8f0876..68a07237f2 100644
--- a/dev-docs/modules/sirdataRtdProvider.md
+++ b/dev-docs/modules/sirdataRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : sirdataRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
@@ -195,4 +196,4 @@ To view an example of available segments returned by Sirdata's backends:
 
 and then point your browser at:
 
-`http://localhost:9999/integrationExamples/gpt/sirdataRtdProvider_example.html`
\ No newline at end of file
+`http://localhost:9999/integrationExamples/gpt/sirdataRtdProvider_example.html`
diff --git a/dev-docs/modules/sizeMappingV2.md b/dev-docs/modules/sizeMappingV2.md
index e5f491e392..7583b4bb5d 100644
--- a/dev-docs/modules/sizeMappingV2.md
+++ b/dev-docs/modules/sizeMappingV2.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Size Mapping
-description: Display Conditional and Responsive Ad Units
+description: Display Responsive AdUnits in demanding page environments.
 module_code: sizeMappingV2
 display_name: Advanced Size Mapping
 enable_download: true
@@ -191,6 +191,7 @@ II. A request originating in the UK, viewport size: `[1700px, 900px]`
         },
         video: {
             context: 'instream',
+	    ... other video params ...
             sizeConfig: [
                 { minViewPort: [0, 0], playerSize: [] },
                 { minViewPort: [1200, 0], playerSize: [640, 400]}
diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md
index feee591a07..ac7d756f47 100644
--- a/dev-docs/modules/userId.md
+++ b/dev-docs/modules/userId.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - User ID
-description: Supports multiple cross-vendor user IDs
+description: Vendor-specific user ID sub-modules are available to support a range of identification approaches.
 module_code : userId
 display_name : User ID
 enable_download : false
@@ -51,7 +51,7 @@ When paired with the [Consent Management](/dev-docs/modules/consentManagement.ht
 In addition, individual users may opt-out of receiving cookies and HTML5 local storage by setting these values:
 
 * `_pbjs_id_optout` cookie or HTML5 local storage. The value can be anything -- if it exists, the user is considered opted out and no userId modules will fire.
-* `_pubcid_optout` cookie or HTML5 local storage. This is for backwards compatibility with the original PubCommonID module. Likewise, the value can be anything.
+* `_pubcid_optout` cookie or HTML5 local storage. This is for backwards compatibility with the original PubCommonID module, as of 5.0 known as the SharedId module. Likewise, the value can be anything.
 
 ### Publisher First Party Opt-Out
 
@@ -72,7 +72,7 @@ of sub-objects. The table below has the options that are common across ID system
 {: .table .table-bordered .table-striped }
 | Param under userSync.userIds[] | Scope | Type | Description | Example |
 | --- | --- | --- | --- | --- |
-| name | Required | String | May be: `"admixerId"`, `"britepoolId"`, `"criteo"`, `"fabrickId"`, `"haloId"`, `"id5id"`, `identityLink`, `"idx"`, `"intentIqId"`, `"liveIntentId"`, `"lotamePanoramaId"`, `"merkleId"`, `"netId"`, `"novatiqId"`, `"parrableId"`, `"quantcastId"`, `"pubCommonId"`, `"pubProvidedId"`, `"sharedId"`, `"tapadId"`, `"unifiedId"`,`"uid2"`, `"verizonMediaId"`, `"zeotapIdPlus"`, `"mwOpenLinkId"` | `"unifiedId"`
+| name | Required | String | May be: `"admixerId"`, `"adtelligentId"`, `"akamaiDAPId"`, `"amxId"`, `"britepoolId"`, `"criteo"`, `"fabrickId"`, `"flocId"`, `"haloId"`, `"id5id"`, `identityLink`, `"idx"`, `"intentIqId"`, `"liveIntentId"`, `"lotamePanoramaId"`, `"merkleId"`, `"naveggId"`, `"mwOpenLinkId"`, `"netId"`, `"novatiqId"`, `"parrableId"`, `"quantcastId"`, `"pubProvidedId"`, `"sharedId"`, `"tapadId"`, `"unifiedId"`,`"uid2"`, `"verizonMediaId"`, `"zeotapIdPlus"` | `"unifiedId"`
 | params | Based on User ID sub-module | Object | | |
 | bidders | Optional | Array of Strings | An array of bidder codes to which this user ID may be sent. | `['bidderA', 'bidderB']` |
 | storage | Optional | Object | The publisher can specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. This is not needed when `value` is specified or the ID system is managing its own storage | |
@@ -139,6 +139,48 @@ The Rubicon bid adapter would then receive
 
 ## User ID Sub-Modules
 
+### AkamaiDAPId
+
+The Akamai Data Activation Platform (DAP) is a privacy-first system that protects end-user privacy by only allowing them to be targeted as part of a larger cohort.  DAP views hiding individuals in large cohorts as the best mechanism to prevent unauthorized tracking.
+
+The integration of DAP into Prebid.JS consists of creating a UserID plugin that interacts with the DAP API.  The UserID module tokenizes the end-user identity into an ephemeral, secure pseudonymization called a dapId.  The dapId is then supplied to the bid-stream where the SSP partner looks up cohort membership for that token, and supplies the cohorts to the rest of the bid-stream.
+
+In this system, no end-user identifier is supplied to the bid-stream, only cohorts.  This is a foundational privacy principal DAP is built upon.
+
+#### AkamaiDAPId Configuration
+
+First, make sure to add the DAP submodule to your Prebid.js package with:
+
+```
+gulp build --modules=akamaiDAPIdSystem,userId
+```
+
+The following configuration parameters are available:
+
+```javascript
+pbjs.setConfig({
+  userSync: {
+    userIds: [{
+      name: 'akamaiDAPId',
+      params: {
+        apiHostname: '<see your Akamai account rep>',
+        domain: 'your-domain.com',
+        type: 'email' | 'mobile' | ... | 'dap-signature:1.0.0',
+        identity: ‘your@email.com’ | ‘6175551234' | ...,
+        apiVersion: 'v1' | 'x1',
+        attributes: '{ "cohorts": [ "3:14400", "5:14400", "7:0" ],"first_name": "...","last_name": "..." }'
+      },
+    }],
+    auctionDelay: 50             // 50ms maximum auction delay, applies to all userId modules
+  }
+});
+```
+In order to make use of v1 APIs, "apiVersion" needs to explicitly mention 'v1'. The "apiVersion" defaults to x1 if not specified.
+"attributes" can be configured in x1 API only and not v1 APIs. Please ensure that the "attributes" value is in same format as shown above.
+
+Contact Prebid@akamai.com(Akamai account rep) for apiHostname.
+
+
 ### AdmixerID
 
 Admixer ID, provided by [Admixer] (https://admixer.com/), is a universal ID solution that doesn't rely on 3rd party cookies and helps publishers and advertisers to recognize users across various browsers and environments.  Our sub adapter takes deterministic signals like email and phone as input and returns an anonymous id that unlocks access to a wide range of Admixer's demand sources, amplifying audience segmentation, targeting and measurement.
@@ -181,11 +223,91 @@ gulp build --modules=admixerIdSystem
                    p: "05de6c07eb3ea4bce45adca4e0182e771d80fbb99e12401416ca84ddf94c3eb9" //example hashed phone (sha256)
                }
            }],
-           syncDelay: 3000 // 3 seconds after the first auction
+           auctionDelay: 50             // 50ms maximum auction delay, applies to all userId modules
        }
    });
 {% endhighlight %}
 
+### Adtelligent
+
+The [Adtelligent](https://adtelligent.com) ID system is a unique per-session user identifier for providing high quality DMP data for advertisers
+
+Add it to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=userId,adtelligentIdSystem
+
+#### Adtelligent Configuration
+
+adtelligentIdSystem adapter doesn't require any configuration or storage params. The adapter performs asynchronously and to achieve better performance it is recommended to set the `storage` object `refreshInSeconds` to a short period, such as ten minutes. At the end of the set storage refresh the adapter will refresh its configuration.
+
+#### Adtelligent Example
+ 
+{% highlight javascript %}
+ pbjs.setConfig({
+     userSync: {
+         userIds: [{
+             name: 'adtelligent'
+         }]
+     }
+ });
+{% endhighlight %}
+
+Example with a short storage for ~10 minutes and refresh in 5 minutes: 
+
+{% highlight javascript %}
+    pbjs.setConfig({
+        userSync: {
+            userIds: [{
+                name: 'adtelligent',
+                storage: {
+                    type: "html5",
+                    name: "adt_id",
+                    expires:0.003,
+                    refreshInSeconds: 60 * 5
+                }
+            }]
+        }
+    });
+{% endhighlight %}
+ 
+### AMX RTB ID
+
+The AMX RTB ID is a first-party identifier designed for publishers using the AMX RTB adapter. For more information please contact [prebid@amxrtb.com](prebid@amxrtb.com)
+
+#### AMX RTB ID Configuration
+
+First, add the AMX RTB ID module to your Prebid.js build:
+
+```shell
+gulp build --modules=userId,amxIdSystem
+```
+
+Then configure the amxId in your `userSync` configuration:
+
+```javascript
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: 'amxId',
+            storage: {
+                name: 'amxId',
+                type: 'html5',
+                expires: 14,
+            }
+        }]
+    }
+});
+```
+
+This will add a `userId.amxId` property to all bidRequests. This will be read by the AMX RTB bid adapter, and any other adapters that support EIDs:
+
+```javascript
+{
+  amxId: '3ca11058-ecbc-419f-bda7-b52fe7baf02a'
+}
+```
+
 ### BritePool
 
 The [BritePool](https://britepool.com) ID is a persistent identifier that enables identity resolution for people-based marketing in the cookieless world. Every BritePool ID is associated with a real identity. As a result, publishers, SSPs and DSPs that integrate with BritePool, or automated
@@ -441,6 +563,54 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
+### FLoC ID
+
+The [Federated Learning of Cohorts (FLoC)](https://web.dev/floc/) system provides a privacy-preserving mechanism for interest-based ad selection. As a user moves around the web, their browser uses the FLoC algorithm to work out an "interest cohort", which will be the same for thousands of browsers with a similar recent browsing history. The user's browser is associated with one interest cohort at a time and recalculates its cohort periodically (currently once every seven days during this initial origin trial) on the user's device, without sharing individual browsing data with the browser vendor or anyone else. 
+
+There are two important things to note when using the FLoC Userid Sub adapter. 
+
+1. Unlike other user id subadapters FLoC ids cannot be stored in a cookie or Local Storage. FLoC ids change periodically and should always be fetched from the FLoC API
+
+2. The function `(getGlobal()).getUserIds` returns `userId.flocId.id=value` into the bid request **NOT** `userid.userIdAsEids`.
+
+To include the FLoC user id module use:
+
+`$ gulp build --modules=flocIdSystem`
+
+{: .alert.alert-info :}
+Note: FLoC is still in a trial period. [How to take part in the FLoC origin trial](https://developer.chrome.com/blog/floc/). During the trial, a token is
+required. Publishers may get their own token or use sharedid's token if they choose. Use this without the line breaks:
+A3dHTSoNUMjjERBLlrvJSelNnwWUCwVQhZ5tNQ+sll7y+LkPPVZXtB77u2y7CweRIxiYaGw
+GXNlW1/dFp8VMEgIAAAB+eyJvcmlnaW4iOiJodHRwczovL3NoYXJlZGlkLm9yZzo0NDMiLC
+JmZWF0dXJlIjoiSW50ZXJlc3RDb2hvcnRBUEkiLCJleHBpcnkiOjE2MjYyMjA3OTksImlzU
+3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9
+
+
+#### FLoC ID Configuration
+
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | The name of this module. | `"flocId"` |
+| params | Required | Object | Container of all module params. | |
+| params.token | Required | String | This is your apiKey as provided by Chrome. This value is required during the origin trial phase but will be optional once the origin trial ends. Publishers may use sharedid's registered token if they choose. | `A3dHTSo...`|
+
+#### FLoC Example
+
+{% highlight javascript %}
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: "flocId",
+            params: {
+              "token": "Registered token" // see above for sharedId's FLoC token
+            }
+        }],
+        syncDelay: 3000              // 3 seconds after the first auction
+    }
+});
+{% endhighlight %}
+
 ### Halo ID from Audigent
 
 Audigent is a next-generation data management platform and a first-of-a-kind "data agency" containing some of the most exclusive content-consuming audiences across desktop, mobile and social platforms. Our HaloId module allows for user id resolution and Audigent user data segmentation to be retrieved for users across the web.  For assistance setting up your module please contact us at [prebid@audigent.com](mailto:prebid@audigent.com).
@@ -467,13 +637,21 @@ pbjs.setConfig({
 });
 ```
 
-The `request.userId.haloId` will contain the Audigent HaloId and associated segments:
+The `request.userId.haloId` will contain the Audigent HaloId:
 ```
 {
-  "haloId": "user-halo-id",
-  "auSeg": ["segment1", "segment2"]
+  "haloId": "0201chpvai07jv2yg08xizqr0bwpa1w0evvmq014d2ykn0b5oe"
 }
 ```
+The following configuration parameters are available:
+
+{: .table .table-bordered .table-striped }
+| Param under usersync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | ID value for the HaloID module - `"haloId"` | `"haloId"` |
+| params | Optional | Object | Used to store params for the HaloId system |
+| params.url | Optional | String | Set an alternate GET url for HaloId with this parameter |
+| params.urlArg | Optional | Object | Optional url parameter for params.url |
 
 ### ID+
 
@@ -509,7 +687,7 @@ pbjs.setConfig({
 
 ### ID5 Universal ID
 
-The ID5 Universal ID is a shared, neutral identifier that publishers and ad tech platforms can use to recognise users even in environments where 3rd party cookies are not available. The ID5 Universal ID is designed to respect users' privacy choices and publishers’ preferences throughout the advertising value chain. For more information about the ID5 Universal ID and detailed integration docs, please visit [our documentation](https://wiki.id5.io/x/BIAZ). We also recommend that you sign up for our [release notes](https://id5.io/universal-id/release-notes) to stay up-to-date with any changes to the implementation of the ID5 Universal ID in Prebid.
+The ID5 Universal ID is a shared, neutral identifier that publishers and ad tech platforms can use to recognise users even in environments where 3rd party cookies are not available. The ID5 Universal ID is designed to respect users' privacy choices and publishers’ preferences throughout the advertising value chain. For more information about the ID5 Universal ID and detailed integration docs, please visit [our documentation](https://support.id5.io/portal/en/kb/articles/prebid-js-user-id-module). We also recommend that you sign up for our [release notes](https://id5.io/universal-id/release-notes) to stay up-to-date with any changes to the implementation of the ID5 Universal ID in Prebid.
 
 #### ID5 Universal ID Registration
 
@@ -532,13 +710,13 @@ The following configuration parameters are available:
 | name | Required | String | The name of this module: `"id5Id"` | `"id5Id"` |
 | params | Required | Object | Details for the ID5 Universal ID. | |
 | params.partner | Required | Number | This is the ID5 Partner Number obtained from registering with ID5. | `173` |
-| params.pd | Optional | String | Publisher-supplied data used for linking ID5 IDs across domains. See [our documentation](https://wiki.id5.io/x/BIAZ) for details on generating the string. Omit the parameter or leave as an empty string if no data to supply | `"MT1iNTBjY..."` |
+| params.pd | Optional | String | Partner-supplied data used for linking ID5 IDs across domains. See [our documentation](https://support.id5.io/portal/en/kb/articles/passing-partner-data-to-id5) for details on generating the string. Omit the parameter or leave as an empty string if no data to supply | `"MT1iNTBjY..."` |
 | params.abTesting | Optional | Object | Allows publishers to easily run an A/B Test. If enabled and the user is in the Control Group, the ID5 ID will NOT be exposed to bid adapters for that request | Disabled by default |
 | params.abTesting.enabled | Optional | Boolean | Set this to `true` to turn on this feature | `true` or `false` |
 | params.abTesting.controlGroupPct | Optional | Number | Must be a number between `0.0` and `1.0` (inclusive) and is used to determine the percentage of requests that fall into the control group (and thus not exposing the ID5 ID). For example, a value of `0.20` will result in 20% of requests without an ID5 ID and 80% with an ID. | `0.1` |
 
 {: .alert.alert-info :}
-**NOTE:** The ID5 Universal ID that is delivered to Prebid will be encrypted by ID5 with a rotating key to avoid unauthorized usage and to enforce privacy requirements. Therefore, we strongly recommend setting `storage.refreshInSeconds` to `8` hours (`8*3600` seconds) to ensure all demand partners receive an ID that has been encrypted with the latest key, has up-to-date privacy signals, and allows them to transact against it.
+**NOTE:** The ID5 Universal ID that is delivered to Prebid is encrypted by ID5 with a rotating key to enforce privacy requirements and avoid unauthorized usage. Therefore, we strongly recommend setting `storage.refreshInSeconds` to `8` hours (`8*3600` seconds) to ensure all demand partners receive an ID that has been encrypted with the latest key, has up-to-date privacy signals, and allows them to transact against it.
 
 ##### A Note on A/B Testing
 
@@ -560,7 +738,7 @@ pbjs.setConfig({
       name: 'id5Id',
       params: {
         partner: 173,            // change to the Partner Number you received from ID5
-        pd: 'MT1iNTBjY...',      // optional, see table below for a link to how to generate this
+        pd: 'MT1iNTBjY...',      // optional, see table above for a link to how to generate this
         abTesting: {             // optional
           enabled: true,         // false by default
           controlGroupPct: 0.1   // valid values are 0.0 - 1.0 (inclusive)
@@ -578,109 +756,77 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
-### IdentityLink
+### IDx
 
-IdentityLink, provided by [LiveRamp](https://liveramp.com) is a single person-based identifier which allows marketers, platforms and publishers to perform personalized segmentation, targeting and measurement use cases that require a consistent, cross-channel view of the user in anonymous spaces.
+IDx, a universal ID solution provided by [Retargetly](https://retargetly.com), is the evolution of digital identifiers for the Latin American region. Through a proprietary identity graph, it allows publishers, advertisers, and ad tech platforms to recognize users across domains and devices even where third party cookies aren't available.
+
+The IDx platform is designed with privacy at its core and allows for nearly every conceivable digital use case including but not limited to audience targeting, retargeting, frequency management, personalization, and total reach reporting.
 
 Add it to your Prebid.js package with:
 
 {: .alert.alert-info :}
-gulp build --modules=identityLinkIdSystem
+gulp build --modules=idxIdSystem
 
-#### IdentityLink Registration
+#### IDx Registration
 
-Please reach out to [prebid@liveramp.com](mailto:prebid@liveramp.com) and request your `placementId`.
+If you are a publisher or an advertiser, then IDx is free to use but requires a simple registration process. To do this, please send an email to [idx-partners@retargetly.com](mailto:idx-partners@retargetly.com) to request your IDx Partner ID.
 
-The IdentityLink privacy policy is at [https://liveramp.com/privacy/service-privacy-policy/](https://liveramp.com/privacy/service-privacy-policy/).
+We may ask for some basic information from you before approving your request. For more information on IDx, please visit [retargetly.com/idx](http://retargetly.com/idx).
 
-#### IdentityLink Configuration
+#### IDx Configuration
 
 {: .table .table-bordered .table-striped }
 | Param under userSync.userIds[] | Scope | Type | Description | Example |
 | --- | --- | --- | --- | --- |
-| name | Required | String | `"identityLink"` | `"identityLink"` |
-| params | Required for Id Link | Object | Details for identityLink initialization. | |
-| params.pid | This parameter is required for IdentityLink | String | This is the placementId, value needed for obtaining user’s IdentityLink envelope
-| params.notUse3P | This parameter is not required for IdentityLink | Boolean | Property for choosing should 3P Liveramp envelope endpoint be fired or not, in order to get IdentityLink envelope
-
-#### IdentityLink Examples
-
-1) Publisher passes a placement ID and elects to store the IdentityLink envelope in a cookie.
-
-
-{% highlight javascript %}
-pbjs.setConfig({
-    userSync: {
-        userIds: [{
-            name: "identityLink",
-            params: {
-                pid: '999',             // Set your real identityLink placement ID here
-                // notUse3P: true/false    // If you do not want to use 3P endpoint to retrieve the envelope. If you do not set this property to true, 3P endpoint will be fired. By default this property is undefined and 3P request will be fired.
-            },
-            storage: {
-                type: "cookie",
-                name: "idl_env",       // create a cookie with this name
-                expires: 30            // cookie can last for 30 days
-            }
-        }],
-        syncDelay: 3000              // 3 seconds after the first auction
-    }
-});
-{% endhighlight %}
+| name | Required | String | `"idx"` | `"idx"` |
 
-2) Publisher passes a placement ID and elects to store the IdentityLink envelope in HTML5 localStorage.
+#### IDx Example
 
 {% highlight javascript %}
 pbjs.setConfig({
     userSync: {
         userIds: [{
-            name: "identityLink",
-            params: {
-                pid: '999',          // Set your real identityLink placement ID here
-                // notUse3P: true/false    // If you do not want to use 3P endpoint to retrieve the envelope. If you do not set this property to true, 3P endpoint will be fired. By default this property is undefined and 3P request will be fired.
-            },
-            storage: {
-                type: "html5",
-                name: "idl_env",    // set localstorage with this name
-                expires: 30
-            }
-        }],
-        syncDelay: 3000
+            name: "idx"
+        }]
     }
 });
 {% endhighlight %}
 
-### IDx
+### IM-UID by Intimate Merger
 
-IDx, a universal ID solution provided by [Retargetly](https://retargetly.com), is the evolution of digital identifiers for the Latin American region. Through a proprietary identity graph, it allows publishers, advertisers, and ad tech platforms to recognize users across domains and devices even where third party cookies aren't available.
-
-The IDx platform is designed with privacy at its core and allows for nearly every conceivable digital use case including but not limited to audience targeting, retargeting, frequency management, personalization, and total reach reporting.
+IM-UID, provided by [Intimate Merger](https://corp.intimatemerger.com/), is a universal identifier that designed for publishers, platforms and advertisers to perform segmentation and targeting even in environments where 3rd party cookies are not available. IM-UID is currently only available in Japan.
 
 Add it to your Prebid.js package with:
 
 {: .alert.alert-info :}
-gulp build --modules=idxIdSystem
+gulp build --modules=imuIdSystem
 
-#### IDx Registration
+#### IM-UID Registration
 
-If you are a publisher or an advertiser, then IDx is free to use but requires a simple registration process. To do this, please send an email to [idx-partners@retargetly.com](mailto:idx-partners@retargetly.com) to request your IDx Partner ID.
+Please visit [https://lp.intimatemerger.com/im-uid](https://lp.intimatemerger.com/im-uid) and request your Customer ID to get started.
 
-We may ask for some basic information from you before approving your request. For more information on IDx, please visit [retargetly.com/idx](http://retargetly.com/idx).
+The Intimate Merger privacy policy is at https://corp.intimatemerger.com/privacypolicy/
 
-#### IDx Configuration
+#### IM-UID Configuration
 
 {: .table .table-bordered .table-striped }
 | Param under userSync.userIds[] | Scope | Type | Description | Example |
 | --- | --- | --- | --- | --- |
-| name | Required | String | `"idx"` | `"idx"` |
+| name | Required | String | The name of this module. | `"imuid"` |
+| params | Required | Object | Details of module params. | |
+| params.cid | Required | Number | This is the Customer ID value obtained via Intimate Merger. | `5126` |
+| params.url | Optional | String | Use this to change the default endpoint URL. | `"https://example.com/some/api"` |
 
-#### IDx Example
+#### IM-UID Example
 
 {% highlight javascript %}
 pbjs.setConfig({
     userSync: {
         userIds: [{
-            name: "idx"
+            name: "imuid",
+            params: {
+                cid: 5126 // Set your Intimate Merger Customer ID here for production
+            }
         }]
     }
 });
@@ -799,6 +945,41 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
+### Kinesso ID
+
+Kinesso ID solution is a new approach to persistent cross domain authentication.
+
+#### How it works
+
+The Kinesso identity solution creates a persistent cross domain authenticated user id that is then used to link users with their interest signals (commonly known as segments).  The Kinesso user ID (knsso) is never broadcast into the bid stream. Instead it is sent to a server side data store, merged with accompanying data from the Prebid Id Library and shipped to Kinesso. All data is encrypted at rest and in transit so your identifiers are never stored or transmitted in an insecure manner. 
+
+The Kinesso ID sub adapter sets two cookies, one as a third party cookie and the other as a first party cookie in the publisher's domain. These cookies are merged with the user's hashed email address (when present) server side and sent to Kinesso. The combined output looks like this: 
+
+{: .table .table-bordered .table-striped }
+| kpuid | knsso | hid | account_id | created on |
+| --- | --- | --- | --- | --- |
+| `<my_1pc>` | `<my_3pc>` | `<my_hashed_email>` | `<my_ssp_accountid>` | `<my_birthday>` |
+
+Kinesso will then attach these users to deals ids that they will target in the ORTB bid stream by brands and agencies represented by IPG.
+   
+Add it to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=kinessoIdSystem
+
+#### Kinesso ID Registration
+
+You can set up Kinesso ID sub adapter by contacting Kinesso at prebid@kinesso.com
+
+The Kinesso ID privacy policy is covered under the [Kinesso Privacy Notice](https://kinesso.com/privacy-policy/). Please note, at present the Kinesso ID module is not meant for use inside the EEA.
+
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | The name of this module. | `'kinessoId'` |
+| params | Required | Object | Details for KinessoId initialization | |
+| params.accountid | Required | Int | Your SSP Account Id | 123 |
+
 ### LiveIntent nonID
 
 LiveIntent offers audience resolution by leveraging our next-generation identity solutions. The LiveIntent identity graph is built around a people-based set of data that is authenticated daily through active engagements with email newsletters and media across the web. The LiveIntent nonID is a user identifier tied to an active, encrypted email in our graph and functions in cookie-challenged environments and browsers.
@@ -971,6 +1152,49 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
+### MediaWallah OpenLinkID
+
+MediaWallah's openLink is an anonymous person based ID that enables buyers and sellers of media to connect a person and their devices across the web and mobile apps. openLink facilities the buying of media between DSPs, SSPs and publishers.
+
+Add support for MediaWallah OpenLinkID to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=userId,mwOpenLinkIdSystem
+
+#### MediaWallah OpenLinkID Registration
+
+MediaWallah requires the creation of an accountId a partnerId in order to take advantage of openLink. Please contact your partner resource to get these Ids provisioned.
+
+#### MediaWallah OpenLinkID Configuration
+
+<div class="table-responsive" markdown="1">
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | The name of this module. | `'mwOpenLinkId'` |
+| params | Required | Object | Details for mwOLID syncing. ||
+| params.accountId | Required | String | The MediaWallah assigned Account Id  | `1000` |
+| params.partnerId | Required | String | The MediaWallah assign partner Id |`'1001'`|
+| params.uid | Optional | String | Your unique Id for the user or browser. Used for matching. | `'u-123xyz'` |
+{: .table .table-bordered .table-striped }
+</div>
+
+#### MediaWallah OpenLinkID Examples
+
+```
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: 'mwOpenLinkId',
+            params: {
+                accountId: '1000',
+                partnerId: '1001',
+                uid: 'u-123xyz'
+            }
+        }]
+    }
+})
+```
+
 ### Merkle ID
 
 [Merkury by Merkle](https://merkury.merkleinc.com/contact) enables marketers, media owners, and publishers to own, build, and control a cookie-less Private Identity Graph. Merkury uses an organization’s first-party CRM data and valuable interactions such as logins, outbound email campaigns and media reach to create and grow a universe of person-based IDs for cross-channel targeting, personalization, measurement and more.
@@ -1000,6 +1224,24 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
+### Navegg ID
+
+[Navegg](https://www.navegg.com) enables publishers, advertisers and agencies to use their own first party data together to activate media in a cookie-less way across several Ad Tech platforms. Navegg has one of the largest data networks in Latin America which also allows the enhancement of data with unique categories.
+
+#### Navegg ID Examples
+
+Publisher stores NaveggId in local storage and/or 1st party cookies
+
+{% highlight javascript %}
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+        name: 'naveggId'
+      }]
+    }
+});
+{% endhighlight %}
+
 ### netID
 
 The [European netID Foundation (EnID)](https://developerzone.netid.de/index.html) aims to establish with the netID an independent European alternative in the digital market for Demand and Supply side. With the netID Single-Sign-On, the EnID established an open standard for consumer logins for services of Buyers and Brands, that also includes user-centric consent management capabilities that results in a standardized, EU-GDPR compliant, IAB TCF aware, cross-device enabled Advertising Identifier, which can be leveraged by publishers and advertisers (and vendors supporting them) to efficiently deliver targeted advertising through programmatic systems to already more than 38 million Europeans on mobile and desktop devices.
@@ -1162,36 +1404,153 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
-### PubCommon ID
+### Publisher Link
+Publisher Link, provided by [Epsilon](https://www.epsilon.com/us),  is a cross-device identity solution that activates publisher first-party, authenticated 
+data to improve audience identification and increase bid opportunities, specifically designed for sites with authenticated 
+traffic.  Publisher first-party authenticated data and a user's unique encrypted ID is linked to an existing people-based 
+Epsilon CORE ID.  By utilizing Publisher Link, publishers are able to reap the benefits of Epsilon's CORE ID.
+
+#### Publisher Link  Registration
+There is no registration needed.
+
+The Epsilon privacy is covered in the [Epsilon Privacy Policy](https://www.epsilon.com/us/privacy-policy).
 
-This module stores an unique user id in the first party domain and makes it accessible to all adapters. Similar to IDFA and AAID, this is a simple UUID that can be utilized to improve user matching, especially for iOS and MacOS browsers, and is compatible with ITP (Intelligent Tracking Prevention). It’s lightweight and self contained. Adapters that support Publisher Common ID will be able to pick up the user ID and return it for additional server-side cross device tracking.
+The Publisher Link opt-out is include [here](https://www.epsilon.com/privacy/dms/opt-out/email)
 
-There is no special registration or configuration for PubCommon ID. Each publisher's privacy policy should take
-PubCommon ID into account.
+#### Publisher Link Configuration
+
+In addition to the parameters documented above in the Basic Configuration section the following Publisher Link specific configuration is available:
+
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | The name of this module. | `'publinkId'` |
+| params | Required | Object | Customized parameters | |
+| params.e | Required | String | Hashed email address of the user | `e80b5017098950fc58aad83c8c14978e` |
+
+#### Publisher Link Examples
+```javascript
+    pbjs.setConfig({
+       userSync: {
+           userIds: [{
+               name: "publinkId",
+               storage: {
+                   name: "pbjs_publink",
+                   type: "cookie",
+                   expires: 30
+               },
+               params: {
+                   e: "e80b5017098950fc58aad83c8c14978e", // example hashed email (md5)
+               }
+           }]
+       }
+   });
+```
+
+### RampID
+
+RampID, formerly known as IdentityLink, provided by [LiveRamp](https://liveramp.com) is a single person-based identifier which allows marketers, platforms and publishers to perform personalized segmentation, targeting and measurement use cases that require a consistent, cross-channel view of the user in anonymous spaces.
+
+Add it to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=identityLinkIdSystem
+
+#### RampID Registration
+
+Please sign up through our [Console](https://launch.liveramp.com) platform and request a `placementId`.
+
+The RampID privacy policy is at [https://liveramp.com/privacy/service-privacy-policy/](https://liveramp.com/privacy/service-privacy-policy/).
+
+#### RampID Configuration
+
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | `"identityLink"` | `"identityLink"` |
+| params | Required for Id Link | Object | Details for RampID initialization. | |
+| params.pid | This parameter is required for RampID | String | This is the placementId, value needed for obtaining user’s RampID envelope
+| params.notUse3P | This parameter is not required for RampID | Boolean | Property for choosing should 3P Liveramp envelope endpoint be fired or not, in order to get RampID envelope
+
+#### RampID Examples
+
+1) Publisher passes a placement ID and elects to store the RampID envelope in a cookie.
+
+
+{% highlight javascript %}
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: "identityLink",
+            params: {
+                pid: '999',             // Set your real RampID placement ID here
+                // notUse3P: true/false    // If you do not want to use 3P endpoint to retrieve the envelope. If you do not set this property to true, 3P endpoint will be fired. By default this property is undefined and 3P request will be fired.
+            },
+            storage: {
+                type: "cookie",
+                name: "idl_env",       // create a cookie with this name
+                expires: 30            // cookie can last for 30 days
+            }
+        }],
+        syncDelay: 3000              // 3 seconds after the first auction
+    }
+});
+{% endhighlight %}
+
+2) Publisher passes a placement ID and elects to store the RampID envelope in HTML5 localStorage.
+
+{% highlight javascript %}
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: "identityLink",
+            params: {
+                pid: '999',          // Set your real RampID placement ID here
+                // notUse3P: true/false    // If you do not want to use 3P endpoint to retrieve the envelope. If you do not set this property to true, 3P endpoint will be fired. By default this property is undefined and 3P request will be fired.
+            },
+            storage: {
+                type: "html5",
+                name: "idl_env",    // set localstorage with this name
+                expires: 30
+            }
+        }],
+        syncDelay: 3000
+    }
+});
+{% endhighlight %}
+
+### SharedID
+
+This module stores an unique user id in the first party domain and makes it accessible to all adapters. Similar to IDFA and AAID, this is a simple UUID that can be utilized to improve user matching, especially for iOS and MacOS browsers, and is compatible with ITP (Intelligent Tracking Prevention). It’s lightweight and self contained. Adapters that support SharedId will be able to pick up the user ID and return it for additional server-side cross device tracking.
+
+There is no special registration or configuration for SharedID. Each publisher's privacy policy should take
+SharedID into account.  Prebid  recommends implementing a method where users can easily opt-out of targeted advertising. Please refer to the User Opt-Out section located at the bottom of this page. For more information check out Prebid's dedicated [identity page](/identity/sharedid.html) 
 
 Add it to your Prebid.js package with:
 
 {: .alert.alert-info :}
 gulp build --modules=pubCommonIdSystem
 
-#### PubCommon ID Configuration
+#### SharedID ID Configuration
 
-In addition to the parameters documented above in the Basic Configuration section the following PubCommon specific configuration is available:
+In addition to the parameters documented above in the Basic Configuration section the following SharedID specific configuration is available:
 
 {: .table .table-bordered .table-striped }
 | Param under userSync.userIds[] | Scope | Type | Description | Example |
 | --- | --- | --- | --- | --- |
 | name | Required | String | The name of this module. | `'pubCommonId'` |
 | params | Optional | Object | Customized parameters | |
-| params.create | Optional | Boolean | For publisher server support only.  If true, the publisher's server will create the PubCommon ID cookie.  Default is true. | `true` |
-| params.pixelUrl | Optional | String | For publisher server support only.  This is a URL of a pixel for updating cookies' expiration times.  Fired after a new ID has been created or an existing ID is being extended.  No default. | `'https://example.com/ping'`
+| params.create | Optional | Boolean | For publisher server support only.  If true, the publisher's server will create the (pubcid) cookie.  Default is true. | `true` |
+| params.pixelUrl | Optional | String | For publisher server support only. Where to call out to for a server cookie -- see [Prebid Identity](/identity/sharedid.html) for more information. | `/wp-json/pubcid/v1/extend/`
 | params.extend | Optional | Boolean | If true, the expiration time of the stored IDs will be refreshed during each page load.  Default is false. | `false` |
-| params.enableSharedId | Optional | Boolean | Invokes [SharedID](/dev-docs/modules/userId.html#shared-id-user-id-submodule) as well as setting PubCommon ID. Defaults to `false` | `true` |
-
+| storage | Required | Object | The publisher must specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. |
+| storage.expires | Integer | Required | How long the user ID information will be stored. | `365` |
+| storage.name | String | Required | The name of the cookie or html5 local storage where the user ID will be stored. | `_pubcid`
+| storage.type | String | Required | This is where the results of the user ID will be stored. Must be either: Must be either: "cookie" or "html5". For server side implementations, which have the best identifier life and revenue impact, this must be a cookie. | `cookie`
 
-#### PubCommon ID Examples
+#### SharedID Examples
 
-1) Publisher supports PubCommonID and first party domain cookie storage
+1) Publisher supports SharedID and first party domain cookie storage
 
 {% highlight javascript %}
 pbjs.setConfig({
@@ -1200,7 +1559,7 @@ pbjs.setConfig({
             name: "pubCommonId",
             storage: {
                 type: "cookie",
-                name: "_pubcid",         // create a cookie with this name
+                name: `"_pubcid"`,         // create a cookie with this name
                 expires: 365             // expires in 1 years
             }
         }]
@@ -1208,7 +1567,7 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
-2) Publisher supports both UnifiedID and PubCommonID and first party domain cookie storage
+2) Publisher supports both UnifiedID and SharedID and first party domain cookie storage
 
 {% highlight javascript %}
 pbjs.setConfig({
@@ -1226,11 +1585,11 @@ pbjs.setConfig({
         },{
             name: "pubCommonId",
             params: {
-                enableSharedId: true  // optionally enable Prebid sharedID
+                pixelUrl: "/wp-json/pubcid/v1/extend/"
             },
             storage: {
                 type: "cookie",
-                name: "_pubcid",      // create a cookie with this name
+                name: `"_pubcid"`,      // create a cookie with this name
                 expires: 180
             }
         }],
@@ -1239,9 +1598,25 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
-{: .alert.alert-info :}
-When enableSharedId is true, the browser will make an additional call to id.sharedid.org/usync.  Calling to Shareid.org sets a user id in a 3rd party cookie under the sharedid.org domain. Anyone setting this additional identity should reference Sharedid.orgs optout policy at https://sharedid.org/. Prebid.js 5.0 will enable the enableSharedId option by default.
+3) Publisher supports SharedID and first party domain cookie storage initiated by a first party server
 
+{% highlight javascript %}
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: "pubCommonId",
+            params: {
+                pixelUrl: "/wp-json/pubcid/v1/extend/" //pixelUrl should be specified when the server plugin is used
+            },
+            storage: {
+                type: "cookie",
+                name: `"_pubcid"`,         // create a cookie with this name
+                expires: 365             // expires in 1 years
+            }
+        }]
+    }
+});
+{% endhighlight %}
 
 ### PubProvided ID
 
@@ -1267,27 +1642,27 @@ Or, the eids values can be passed directly into the `setConfig` call:
 pbjs.setConfig({
     userSync: {
         userIds: [{
-            name: "example.com",
+            name: "pubProvidedId",
             params: {
                 eids: [{
                     source: "domain.com",
-                    uids:[{
-                      id: "value read from cookie or local storage",
-                      atype: 1,
-                      ext: {
-                          stype: "ppuid"
-                      }
-
-                  }]
-                },{
+                    uids: [{
+                        id: "value read from cookie or local storage",
+                        atype: 1,
+                        ext: {
+                            stype: "ppuid"
+                        }
+
+                    }]
+                }, {
                     source: "3rdpartyprovided.com",
-                    uids:[{
-                      id: "value read from cookie or local storage",
-                      atype: 3,
-                      ext: {
-                          stype: "dmp"
-                      }
-                  }]
+                    uids: [{
+                        id: "value read from cookie or local storage",
+                        atype: 3,
+                        ext: {
+                            stype: "dmp"
+                        }
+                    }]
                 }]
             }
         }]
@@ -1328,25 +1703,32 @@ gulp build --modules=pubProvidedId
 
 ### Quantcast ID
 
-Quantcast ID enables publishers that use Quantcast Measure tag to uniquely identify
-their clients within Quantcast's extensive publisher network without relying on third party
-cookies. The Quantcast User ID submodule makes the existing Quantcast first party
-cookie available in the bid request. The first party cookie allows Quantcast to correlate
-the bid request with Quantcast's Measure dataset.
-
-Currently, Quantcast ID only works with the presence of Quantcast Measure tag. More information
-about Measure can be found in https://www.quantcast.com/measure.
-
-The Quantcast privacy policy is at https://www.quantcast.com/privacy/.
+The Prebid Quantcast ID module stores a Quantcast ID in a first party cookie. The ID is then made available in the bid request. The ID from the cookie added in the bidstream allows Quantcast to more accurately bid on publisher inventories without third party cookies, which can result in better monetization across publisher sites from Quantcast. And, it’s free to use! For easier integration, you can work with one of our SSP partners, like PubMatic, who can facilitate the legal process as well as the software integration for you.
 
 Add it to your Prebid.js package with:
 
 {: .alert.alert-info :}
 gulp build --modules=userId,quantcastIdSystem
 
+Quantcast’s privacy policies for the services rendered can be found at
+ 		https://www.quantcast.com/privacy/
+      
+Publishers deploying the module are responsible for ensuring legally required notices and choices for users. 
+
+The Quantcast ID module will only perform any action and return an ID in situations where:
+1. the publisher has not set a ‘coppa'  flag on the prebid configuration on their site (see [pbjs.setConfig.coppa](https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html#setConfig-coppa)) 
+2. there is not a IAB us-privacy string indicating the digital property has provided user notice and the user has made a choice to opt out of sale
+3. if GDPR applies, an IAB TCF v2 string exists indicating that Quantcast does not have consent for purpose 1 (cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you), or an established legal basis (by default legitimate interest) for purpose 10 (your data can be used to improve existing systems and software, and to develop new products).
+
 #### Quantcast ID Configuration
 
-Quantcast ID module does not require any configuration parameters at this time.
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | `"quantcastId"` | `"quantcastId"` |
+| params | Optional | Object | Details for Quantcast initialization. | |
+| params.ClientID | Optional | String | Optional parameter for Quantcast prebid managed service partners. The parameter is not required for websites with Quantcast Measure tag. Reach out to Quantcast for ClientID if you are not an existing Quantcast prebid managed service partner: quantcast-idsupport@quantcast.com  | |
+
 
 #### Quantcast ID Example
 
@@ -1354,13 +1736,14 @@ Quantcast ID module does not require any configuration parameters at this time.
 pbjs.setConfig({
     userSync: {
         userIds: [{
-            name: "quantcastId",
+            name: "quantcastId"
         }]
     }
 });
 {% endhighlight %}
 
 
+
 ### Tapad ID
 
 Tapad's ID module provides access to a universal identifier that publishers, ad tech platforms and advertisers can use for data collection and collation without reliance on third-party cookies.
@@ -1406,52 +1789,6 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
-
-
-### SharedID User ID Submodule
-
-The SharedID User Module generates a UUID that can be utilized to improve user matching. This module enables timely synchronization and handles opt-out via sharedid.org. This module does not require any registration.
-
-#### Building Prebid with SharedID Support
-Add it to your Prebid.js package with:
-
-{: .alert.alert-info :}
-ex: $ gulp build --modules=sharedIdSystem
-
-#### Prebid Params
-
-Individual params may be set for the SharedID User ID Submodule.
-```
-pbjs.setConfig({
-    userSync: {
-        userIds: [{
-            name: 'sharedId',
-            params: {
-                      syncTime: 60 // in seconds, default is 24 hours
-             },
-            storage: {
-                name: 'sharedid',
-                type: 'cookie',
-                expires: 28
-            },
-        }]
-    }
-});
-```
-
-#### SharedID Configuration
-
-{: .table .table-bordered .table-striped }
-| Params under usersync.userIds[]| Scope | Type | Description | Example |
-| --- | --- | --- | --- | --- |
-| name | Required | String | ID value for the SharedID module - `"sharedId"` | `"sharedId"` |
-| params | Optional | Object | Details for sharedId syncing. | |
-| params.syncTime | Optional | Object | Configuration to define the frequency(in seconds) of id synchronization. By default id is synchronized every 24 hours | 60 |
-| storage | Required | Object | The publisher must specify the local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. | |
-| storage.type | Required | String | This is where the results of the user ID will be stored. The recommended method is `localStorage` by specifying `html5`. | `"html5"` |
-| storage.name | Required | String | The name of the cookie or html5 local storage where the user ID will be stored. | `"sharedid"` |
-| storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. | `28` |
-
 ### Unified ID
 
 The Unified ID solution is provided by adsrvr.org and the Trade Desk.
@@ -1637,49 +1974,6 @@ pbjs.setConfig({
 })
 ```
 
-### MediaWallah OpenLinkID
-
-MediaWallah's openLink is an anonymous person based ID that enables buyers and sellers of media to connect a person and their devices across the web and mobile apps. openLink facilities the buying of media between DSPs, SSPs and publishers.
-
-Add support for MediaWallah OpenLinkID to your Prebid.js package with:
-
-{: .alert.alert-info :}
-gulp build --modules=userId,mwOpenLinkIdSystem
-
-#### MediaWallah OpenLinkID Registration
-
-MediaWallah requires the creation of an accountId a partnerId in order to take advantage of openLink. Please contact your partner resource to get these Ids provisioned.
-
-#### MediaWallah OpenLinkID Configuration
-
-<div class="table-responsive" markdown="1">
-| Param under userSync.userIds[] | Scope | Type | Description | Example |
-| --- | --- | --- | --- | --- |
-| name | Required | String | The name of this module. | `'mwOpenLinkId'` |
-| params | Required | Object | Details for mwOLID syncing. ||
-| params.accountId | Required | String | The MediaWallah assigned Account Id  | `1000` |
-| params.partnerId | Required | String | The MediaWallah assign partner Id |`'1001'`|
-| params.uid | Optional | String | Your unique Id for the user or browser. Used for matching. | `'u-123xyz'` |
-{: .table .table-bordered .table-striped }
-</div>
-
-#### MediaWallah OpenLinkID Examples
-
-```
-pbjs.setConfig({
-    userSync: {
-        userIds: [{
-            name: 'mwOpenLinkId',
-            params: {
-                accountId: '1000',
-                partnerId: '1001',
-                uid: 'u-123xyz'
-            }
-        }]
-    }
-})
-```
-
 ## Adapters Supporting the User ID Sub-Modules
 
 {% assign bidder_pages = site.pages | where: "layout", "bidder" %}
@@ -1699,163 +1993,55 @@ pbjs.setConfig({
 
 Bidders that want to support the User ID module in Prebid.js, need to update their bidder adapter to read the indicated bidRequest attributes and pass them to their endpoint.
 
-<div class="table-responsive" markdown="1">
-| ID System Name | ID System Host | Prebid.js Attr | Example Value |
-| --- | --- | --- | --- | --- | --- |
-| Admixer ID | Admixer | bidRequest.userId.admixerId | `"1111"` |
-| BritePool ID | BritePool | bidRequest.userId.britepoolid | `"1111"` |
-| DMD ID | DMD | bidRequest.userId.dmdId | `"1111"` |
-| CriteoID | Criteo | bidRequest.userId.criteoId | `"1111"` |
-| Halo ID | Audigent | bidRequest.userId.haloId | `{"haloId":"user-halo-id", "auSeg":["segment1","segment2"]}` |
-| ID+ | Zeotap | bidRequest.userId.IDP | `"1111"` |
-| ID5 ID | ID5 | bidRequest.userId.id5id | `{ uid: "1111", ext: { linkType: 2, abTestingControlGroup: false } }` |
-| IdentityLink | Trade Desk | bidRequest.userId.idl_env | `"1111"` |
-| Intent IQ ID | Intent IQ | bidRequest.userId.intentiqid | `"1111"` |
-| LiveIntent ID | Live Intent | bidRequest.userId.lipb.lipbid | `"1111"` |
-| Lotame Panorama ID | Lotame | bidRequest.userId.lotamePanoramaId | `"e4b96a3d9a8e8761cef5656fb05f16d53938069f1684df4b2257e276e8b89a0e"` |
-| merkleID | Merkle | bidRequest.userId.merkleId | `"1111"` |
-| netID | netID | bidRequest.userId.netId | `"fH5A3n2O8_CZZyPoJVD-eabc6ECb7jhxCicsds7qSg"` |
-| NextRoll ID | NextRoll | bidRequest.userId.nextrollId | `"bf3KawPMRifn1iXLtufo4AhoZHaBEYQpYOe1ZTJsY7IzuZ0LW/SjP/zpVGr09voA"` |
-| Parrable ID | Parrable | bidRequest.userId.parrableId | `{"eid":"01.1594654046.cd0972d861e98ff3723a368a6efa69287a0df3f1cac9142afc2e7aed1caa8dd1b7fc0590b3baf67525f53e1228024c2805b6041206c7a23e34bb823b0659547d7d1d0dac2a11938e867f"}` |
-| PubCommon ID | n/a | bidRequest.userId.pubcid | `"1111"` |
-| PubProvided ID | n/a | bidRequest.userId.pubProvidedId | `"1111"` |
-| Quantcast ID | n/a | bidRequest.userId.quantcastId | `"1111"` |
-| Tapad ID | Tapad | bidRequest.userId.tapadId | `"1111"` |
-| SharedID | Prebid | bidRequest.userId.sharedid | `{"id":"01EAJWWNEPN3CYMM5N8M5VXY22","third":"01EAJWWNEPN3CYMM5N8M5VXY22"}` |
-| Unified ID | Trade Desk | bidRequest.userId.tdid | `"1111"` |
-| Verizon Media ConnectID | Verizon Media | bidRequest.userId.connectid | `"72d04af6e07c2eb93e9c584a131f48b6a9b963bcb2736d624e987ff8cf36d472"` |
-| MediaWallah OpenLink ID | MediaWallah | bidRequest.userId.mwOpenLinkId | `"1111"` |
 {: .table .table-bordered .table-striped }
-</div>
+| ID System Name | ID System Host | Prebid.js Attr: bidRequest.userId. | EID Source | Example Value |
+| --- | --- | --- | --- | --- | --- | --- |
+| Admixer ID | Admixer | admixerId | admixer.net | "1111" |
+| Adtelligent ID | Adtelligent | bidRequest.userId.adtelligentId | `"1111"` |
+| Akamai DAP ID | Akamai DAP | dapId | akamai.com | "eyJhbGciOiJka....YIsj7"|
+| AMX RTB ID | AMX RTB | amxId | amxrtb.com | "3ca11058-..." |
+| BritePool ID | BritePool | britepoolid | britepool.com | "1111" |
+| DeepIntent ID | Deep Intent | deepintentId | deepintent.com | "1111" |
+| DMD ID | DMD | dmdId | hcn.health | "1111" |
+| CriteoID | Criteo | criteoId | criteo.com | "1111" |
+| Fabrick ID | Neustar | fabrickId | neustar.biz | "1111" |
+| FLoC ID | n/a | flocId | | |
+| Halo ID | Audigent | haloId | audigent.com | {"haloId":"user-halo-id", "auSeg":["segment1", "segment2"]} |
+| ID+ | Zeotap | IDP | zeotap.com | "1111" |
+| ID5 ID | ID5 | id5id | id5-sync.com | {uid: "1111", ext: { linkType: 2, abTestingControlGroup: false } } |
+| IdentityLink | LiveRamp | idl_env | liveramp.com | "1111" |
+| Intent IQ ID | Intent IQ | intentiqid | intentiq.com | "1111" |
+| Kinesso ID | Kinesso | kpuid | kpuid.com | "1111" |
+| LiveIntent ID | Live Intent | lipb.lipbid | liveintent.com | "1111" |
+| Lotame Panorama ID | Lotame | lotamePanoramaId | crwdcntrl.net | "e4b9..." |
+| MediaWallah OpenLink ID | MediaWallah | mwOpenLinkId | mediawallahscript.com | "1111" |
+| merkleID | Merkle | merkleId | merkleinc.com | "1111" |
+| naveggId | Navegg | naveggId | navegg.com | "1111" |
+| netID | netID | netId | netid.de | "fH5A..." |
+| NextRoll ID | NextRoll | nextrollId | nextroll.com | "bf3Ka.../SjP/zpVGr09voA" |
+| Novatiq ID | Novatiq | novatiqId | novatiq.com | "1111" |
+| Parrable ID | Parrable | parrableId | parrable.com | {"eid":"01.15946..."} |
+| PubProvided ID | n/a | pubProvidedId | publisher domain | "1111" |
+| Quantcast ID | n/a | quantcastId | quantcast.com | "1111" |
+| Tapad ID | Tapad | tapadId | tapad.com | "1111" |
+| SharedID (PBJS 5.x) | n/a | pubcid | pubcid.org | "1111" |
+| SharedID (PBJS 4.x)| Prebid | sharedid | sharedid.org | {"id":"01EAJWWN...", "third":"01EAJ..."} |
+| Unified ID | Trade Desk | tdid | adserver.org | "1111" |
+| Verizon Media ConnectID | Verizon Media | connectid | verizonmedia.com | "72d04af6..." |
 
 For example, the adapter code might do something like:
 
 {% highlight javascript %}
-   if (bidRequest.userId && bidRequest.userId.pubcid) {
-    url+="&pubcid="+bidRequest.userId.pubcid;
+   if (bidRequest.userId && bidRequest.userId.sharedid) {
+    url+="&pubcid="+bidRequest.userId.sharedid;
    }
 {% endhighlight %}
 
 ### Prebid Server Adapters
 
-Bidders that want to support the User ID module in Prebid Server, need to update their server-side bid adapter to read the desired OpenRTB attributes noted in the example below and send them to their endpoint.
+Bidders that want to support the User ID module in Prebid Server, need to update their server-side bid adapter to read the desired OpenRTB 'user.ext.eids.source' object and forward the relevant values to their endpoint.
 
-{% highlight bash %}
-{
-    "user": {
-        "ext": {
-            "eids": [{
-                "source": "adserver.org",  // Unified ID
-                "uids": [{
-                    "id": "111111111111",
-                    "ext": {
-                        "rtiPartner": "TDID"
-                    }
-                }]
-            },{
-                "source": "pubcid.org",
-                "uids": [{
-                    "id":"11111111"
-                }]
-            },
-            {
-                "source": "id5-sync.com",
-                "uids": [{
-                    "id": "ID5-12345",
-                    "ext": {
-                      "linkType": 2,
-                      "abTestingControlGroup": false
-                    }
-                }]
-            },
-            {
-                source: "parrable.com",
-                uids: [{
-                    id: "01.1594654046.cd0972d861e98ff3723a368a6efa69287a0df3f1cac9142afc2e7aed1caa8dd1b7fc0590b3baf67525f53e1228024c2805b6041206c7a23e34bb823b0659547d7d1d0dac2a11938e867f"
-                }]
-            },{
-                "source": "audigent.com",
-                "atype": 1,
-                "uids": [{
-                    "id": "11111111"
-                }]
-            },{
-                "source": "identityLink",
-                "uids": [{
-                    "id": "11111111"
-                }]
-            },{
-                "source": "criteo.com",
-                "uids": [{
-                    "id": "11111111"
-                }]
-            },{
-            },{
-                "source": "hcn.health",
-                atype: 3,
-                "uids": [{
-                    "id": "11111111"
-                }]
-            },{
-                "source": "britepool.com",
-                "uids": [{
-                    "id": "11111111"
-                }]
-            },{
-                "source": "liveintent.com",
-                "uids": [{
-                    "id": "11111111"
-                }]
-            },{
-                "source": "crwdcntrl.net", // Lotame Panorama ID
-                "uids": [{
-                    "id": "e4b96a3d9a8e8761cef5656fb05f16d53938069f1684df4b2257e276e8b89a0e"
-                }]
-            },{
-                "source": "netid.de",
-                "uids": [{
-                    "id": "11111111"
-                }]
-            },{
-               "source": "novatiq.com",
-               "uids": [{
-                   "id": "81b001ec-8914-488c-a96e-8c220d4ee08895ef",
-                   "atype":1
-               }]
-             },{
-               "source": "sharedid.org",  // SharedID
-                "uids": [{
-                    "id": "01EAJWWNEPN3CYMM5N8M5VXY22",
-                    "ext": {
-                        "third": "01EAJWWNEPN3CYMM5N8M5VXY22"
-                    }
-                }]
-            },{
-               "source": "pub.com",  // Publisher must configure their domain here
-                "uids": [{
-                    "id": "01EAJWWNEPN3CYMM5N8M5VXY22",
-                    "atype":1 //ADCOM - Type of user agent the match is from
-                    "ext": {
-                        "stype": "dmp" //currently supported values (dmp,ppuid,other)
-                    }
-                }]
-            },{
-               "source": "verizonmedia.com",
-               "uids": [{
-                   "id": "61cef5656fb05f16d53938069f1684df4b2257e27"
-               }]
-            },{
-              "source": "mediawallahscript.com",
-              "uids": [{
-                "id": "01EAJWWNEPN3CYMM5N8M5VXY22",
-                "atype": 1
-              }]
-            }
-          ]
-        }
-    }
-}
-{% endhighlight %}
+See the [Prebid.js EIDs javascript source](https://github.com/prebid/Prebid.js/blob/master/modules/userId/eids.js) for the definitive list of user EID sources. 
 
 ### Exporting User IDs
 
@@ -1910,7 +2096,7 @@ If you're an ID provider that wants to get on this page:
 - Add your *IdSystem name into the modules/.submodules.json file
 - Follow all the guidelines in the [contribution page](https://github.com/prebid/Prebid.js/blob/master/CONTRIBUTING.md).
 - Submit a Pull Request against the [Prebid.js repository](https://github.com/prebid/Prebid.js).
-- Fork the prebid.org [documentation repository](https://github.com/prebid/prebid.github.io), modify the /dev-docs/modules/userId.md, and submit a documentation Pull Request as well.
+- Fork the prebid.org [documentation repository](https://github.com/prebid/prebid.github.io), modify /dev-docs/modules/userId.md, /download.md, and submit a documentation Pull Request.
 
 <a name="getUserIds"></a>
 
diff --git a/dev-docs/modules/validationFpdModule.md b/dev-docs/modules/validationFpdModule.md
index 00c3cae15a..571eb26f7f 100644
--- a/dev-docs/modules/validationFpdModule.md
+++ b/dev-docs/modules/validationFpdModule.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - First Party Data Validation
-description: Validates First Party Data
+description: Verify First Party Data fields and data types. Not recommended for production use.
 module_code : validationFpdModule
 display_name : First Party Data Validation
 enable_download : true
diff --git a/dev-docs/plugins/bc/bc-prebid-plugin-api.md b/dev-docs/plugins/bc/bc-prebid-plugin-api.md
index e263a90657..143fd7add2 100644
--- a/dev-docs/plugins/bc/bc-prebid-plugin-api.md
+++ b/dev-docs/plugins/bc/bc-prebid-plugin-api.md
@@ -113,10 +113,10 @@ If the results of the prebid process is being determined outside of the plugin,
     {"prebidPath": "//files.prebid.org/prebid-org.js",
     "biddersSpec": {
         ”code": "my-video-tag",
-        "sizes": [640,480],
         "mediaTypes": {
             "video": {
                 "context": "instream",
+		"playerSize": [640, 480],
                 "mimes": ["video/mp4","application/javascript"],
                 "protocols": [1,2,3,4,5,6,7,8],
                 "playbackmethod": [1,2],
@@ -126,10 +126,7 @@ If the results of the prebid process is being determined outside of the plugin,
         "bids": [{
             "bidder": "appnexus",
             "params": {
-                "placementId": 8845778,
-                "video": {"skippable": true,
-                  "playback_method": ["auto_play_sound_off"]
-                }
+                "placementId": 8845778
             }
         }]
     },
diff --git a/dev-docs/plugins/bc/bc-prebid-plugin-integration-studio.md b/dev-docs/plugins/bc/bc-prebid-plugin-integration-studio.md
index 7dbfd86d8c..1b211504c4 100644
--- a/dev-docs/plugins/bc/bc-prebid-plugin-integration-studio.md
+++ b/dev-docs/plugins/bc/bc-prebid-plugin-integration-studio.md
@@ -131,10 +131,10 @@ Example:
     {"prebidPath": "//files.prebid.org/prebid-org.js",  // not for production use
         "biddersSpec": {
             ”code": "my-video-tag",
-            "sizes": [640,480],
             "mediaTypes": {
                 "video": {
                     "context": "instream",
+		    "playerSize": [640,480],
                     "mimes": ["video/mp4","application/javascript"],
                     "protocols": [1,2,3,4,5,6,7,8],
                     "playbackmethod": [1,2],
@@ -144,11 +144,7 @@ Example:
             "bids": [{
                 "bidder": "appnexus",
                 "params": {
-                    "placementId": 8845778,
-                    "video": {"skippable": true,
-                    "playback_method":
-                        ["auto_play_sound_off"]
-                    }
+                    "placementId": 8845778
                 }
             }]
         },
@@ -259,10 +255,10 @@ None
     ],
     "biddersSpec": {
         "code": "my-video-tag",
-        "sizes": [640,480],
         "mediaTypes": {
             "video": {
                 "context": "instream",
+		"playerSize": [640,480],
                 "mimes": ["video/mp4","application/javascript"],
                 "protocols": [1,2,3,4,5,6,7,8],
                 "playbackmethod": [1,2],
diff --git a/dev-docs/plugins/bc/bc-prebid-plugin-multiad-options.md b/dev-docs/plugins/bc/bc-prebid-plugin-multiad-options.md
index 83bcfa5d85..72260d6d0f 100644
--- a/dev-docs/plugins/bc/bc-prebid-plugin-multiad-options.md
+++ b/dev-docs/plugins/bc/bc-prebid-plugin-multiad-options.md
@@ -46,25 +46,21 @@ The following is a sample JSON definition of the plugin configuration defining c
     "scriptLoadTimeout": 3000,
 	"biddersSpec" : {
         "code" : "my-video-tag",
-        "sizes" : [640, 480],
         "mediaTypes": {
         	"video": {
-                "context": "instream",
-                "mimes": ["video/mp4", "application/javascript"],
-                "protocols" : [1,2,3,4,5,6,7,8],
-                "playbackmethod" : [1, 2],
-                "api":[1,2]
+                  "context": "instream",
+		  "playerSize": [640,480],
+                  "mimes": ["video/mp4", "application/javascript"],
+                  "protocols" : [1,2,3,4,5,6,7,8],
+                  "playbackmethod" : [1, 2],
+                  "api":[1,2]
             }
         },
         "bids": [
             {
                 "bidder": "appnexus",
                 "params": {
-                    "placementId": 12527596,
-                    "video": {
-                        "skippable": true,
-                        "playback_method": ["auto_play_sound_off"]
-                    }
+                    "placementId": 12527596
                 }
             }
 		]
@@ -145,25 +141,21 @@ The following is a sample JSON definition of the plugin configuration defining c
 	"prebidPath" : "//files.prebid.org/prebid-org.js",  // not for production use
 	"biddersSpec" : {
         "code" : "my-video-tag",
-        "sizes" : [640, 480],
         "mediaTypes": {
         	"video": {
-                "context": "instream",
-                "mimes": ["video/mp4", "application/javascript"],
-                "protocols" : [1,2,3,4,5,6,7,8],
-                "playbackmethod" : [1, 2],
-                "api":[1,2]
+                  "context": "instream",
+		  "playerSize": [640,480],
+                  "mimes": ["video/mp4", "application/javascript"],
+                  "protocols" : [1,2,3,4,5,6,7,8],
+                  "playbackmethod" : [1, 2],
+                  "api":[1,2]
             }
         },
         "bids": [
             {
                 "bidder": "appnexus",
                 "params": {
-                    "placementId": 12531984,
-                    "video": {
-                        "skippable": true,
-                        "playback_method": ["auto_play_sound_off"]
-                    }
+                    "placementId": 12531984
                 }
             }
 		]
@@ -254,25 +246,22 @@ The following is a sample JSON definition of the plugin configuration defining c
     "scriptLoadTimeout": 3000,
 	"biddersSpec" : {
         "code" : "my-video-tag",
-        "sizes" : [640, 480],
         "mediaTypes": {
         	"video": {
-                "context": "instream",
-                "mimes": ["video/mp4", "application/javascript"],
-                "protocols" : [1,2,3,4,5,6,7,8],
-                "playbackmethod" : [1, 2],
-                "api":[1,2]
+                  "context": "instream",
+		  "playerSize": [640,480],
+                  "mimes": ["video/mp4", "application/javascript"],
+                  "protocols" : [1,2,3,4,5,6,7,8],
+                  "playbackmethod" : [1, 2],
+                  "api":[1,2],
+		  "skip": 1
             }
         },
         "bids": [
             {
                 "bidder": "appnexus",
                 "params": {
-                    "placementId": 12527596,
-                    "video": {
-                        "skippable": true,
-                        "playback_method": ["auto_play_sound_off"]
-                    }
+                    "placementId": 12527596
                 }
             }
 		]
@@ -353,25 +342,22 @@ The following is a sample JSON definition of the plugin configuration defining c
 	"prebidPath" : "//files.prebid.org/prebid-org.js",  // not for production use
 	"biddersSpec" : {
         "code" : "my-video-tag",
-        "sizes" : [640, 480],
         "mediaTypes": {
         	"video": {
-                "context": "instream",
-                "mimes": ["video/mp4", "application/javascript"],
-                "protocols" : [1,2,3,4,5,6,7,8],
-                "playbackmethod" : [1, 2],
-                "api":[1,2]
+                  "context": "instream",
+		  "playerSize": [640,480],
+                  "mimes": ["video/mp4", "application/javascript"],
+                  "protocols" : [1,2,3,4,5,6,7,8],
+                  "playbackmethod" : [1, 2],
+                  "api":[1,2],
+		  "skip": 1
             }
         },
         "bids": [
             {
                 "bidder": "appnexus",
                 "params": {
-                    "placementId": 12531984,
-                    "video": {
-                        "skippable": true,
-                        "playback_method": ["auto_play_sound_off"]
-                    }
+                    "placementId": 12531984
                 }
             }
 		]
@@ -452,25 +438,22 @@ The following is a sample JSON definition of the plugin configuration defining c
 	"prebidPath" : "//files.prebid.org/prebid-org.js",  // not for production use
 	"biddersSpec" : {
         "code" : "my-video-tag",
-        "sizes" : [640, 480],
         "mediaTypes": {
         	"video": {
-                "context": "instream",
-                "mimes": ["video/mp4", "application/javascript"],
-                "protocols" : [1,2,3,4,5,6,7,8],
-                "playbackmethod" : [1, 2],
-                "api":[1,2]
+                  "context": "instream",
+		  "playerSize": [640,480],
+                  "mimes": ["video/mp4", "application/javascript"],
+                  "protocols" : [1,2,3,4,5,6,7,8],
+                  "playbackmethod" : [1, 2],
+                  "api":[1,2],
+		  "skip": 1
             }
         },
         "bids": [
             {
                 "bidder": "appnexus",
                 "params": {
-                    "placementId": 12531977,
-                    "video": {
-                        "skippable": true,
-                        "playback_method": ["auto_play_sound_off"]
-                    }
+                    "placementId": 12531977
                 }
             }
 		]
diff --git a/dev-docs/plugins/bc/bc-prebid-plugin-sample-prebid-header.md b/dev-docs/plugins/bc/bc-prebid-plugin-sample-prebid-header.md
index 7f75fe1abb..0ab409f6cd 100644
--- a/dev-docs/plugins/bc/bc-prebid-plugin-sample-prebid-header.md
+++ b/dev-docs/plugins/bc/bc-prebid-plugin-sample-prebid-header.md
@@ -51,17 +51,20 @@ The following is a sample Brightcove Player Prebid Plugin integration that invok
         // the set of bidders here shows how to specify the AppNexus video bidder:  appnexus
         var params = {
             code : 'my-video-tag',
-            sizes : [640, 480],
-            mediaType: 'video',
+            mediaTypes: {
+		video: {
+		  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
+		}
             bids: [
                 {
                     bidder: 'appnexus',
                     params: {
-                        placementId: 12334567,
-                        video: {
-                            skippable: true,
-                            playback_method: ['auto_play_sound_off']
-                        }
+                        placementId: 12334567
                     }
                 }
             ]
diff --git a/dev-docs/plugins/bc/bc-prebid-plugin-sample-studio-integration-general-method.md b/dev-docs/plugins/bc/bc-prebid-plugin-sample-studio-integration-general-method.md
index b684bc04fe..3f8ee393f8 100644
--- a/dev-docs/plugins/bc/bc-prebid-plugin-sample-studio-integration-general-method.md
+++ b/dev-docs/plugins/bc/bc-prebid-plugin-sample-studio-integration-general-method.md
@@ -54,23 +54,20 @@ This page presents a sample publisher page using the General Integration Method
         "prebidPath": "//files.prebid.org/prebid-org.js",  // not for production use
         "biddersSpec": {
             ”code": "my-video-tag",
-            "sizes": [640,480],
             "mediaTypes": {
                 "video": {
                     "context": "instream",
-                 "mimes": ["video/mp4","application/javascript"],
-                 "protocols": [1,2,3,4,5,6,7,8],
-                 "playbackmethod": [1,2],
+		    "playerSize": [640,480],
+                    "mimes": ["video/mp4","application/javascript"],
+                    "protocols": [1,2,3,4,5,6,7,8],
+                    "playbackmethod": [1,2],
                     "api": [1,2 ]
                 }
             },
             "bids": [{
                 "bidder": "appnexus",
                 "params": {
-                    "placementId": 8845778,
-                 "video": {"skippable": true,
-                    "playback_method": ["auto_play_sound_off"]
-                    }
+                    "placementId": 8845778
                 }
             }]
         },
diff --git a/dev-docs/plugins/cross-player-prebid-component/cross-player-config.md b/dev-docs/plugins/cross-player-prebid-component/cross-player-config.md
index 555f092124..7a62c85734 100644
--- a/dev-docs/plugins/cross-player-prebid-component/cross-player-config.md
+++ b/dev-docs/plugins/cross-player-prebid-component/cross-player-config.md
@@ -300,10 +300,10 @@ Here is a sample Prebid configuration JSON object returned via URL:
     "prebidPath" : "//acdn.adnxs.com/prebid/not-for-prod/prebid.js",
     "biddersSpec" : {
         "code" : "my-video-tag",
-        "sizes" : [640, 480],
         "mediaTypes": {
             "video": {
                 "context": "instream",
+		"playerSize": [640, 480],
                 "mimes": ["video/mp4", "application/javascript"],
                 "protocols" : [1,2,3,4,5,6,7,8],
                 "playbackmethod" : [1, 2],
@@ -314,11 +314,7 @@ Here is a sample Prebid configuration JSON object returned via URL:
             {
                 "bidder": "appnexus",
                 "params": {
-                    "placementId": 9999,
-                    "video": {
-                        "skippable": true,
-                        "playback_method": ["auto_play_sound_off"]
-                    }
+                    "placementId": 9999
                 }
             }
         ]
diff --git a/dev-docs/prebid-troubleshooting-guide.md b/dev-docs/prebid-troubleshooting-guide.md
index a842461c37..70f4d1f22b 100644
--- a/dev-docs/prebid-troubleshooting-guide.md
+++ b/dev-docs/prebid-troubleshooting-guide.md
@@ -2,10 +2,6 @@
 layout: page_v2
 title: Prebid.js Troubleshooting Guide
 head_title: Prebid.js Troubleshooting Guide
-description: How to troubleshoot Prebid.js from the perspective of an ad call from start to finish.
-pid: 10
-top_nav_section: dev_docs
-nav_section: troubleshooting
 sidebarType: 1
 ---
 
@@ -14,109 +10,4 @@ sidebarType: 1
 # Prebid.js Troubleshooting Guide
 {:.no_toc}
 
-{: .alert.alert-danger :}
-Prebid.org does not support any version of Prebid.js prior to version 1.0.
-
-Use this guide to troubleshoot your Prebid.js integration. You can follow this guide sequentially to determine whether Prebid.js is working as intended on your website. It takes you through the ad call from start to finish.
-
-* TOC
-{:toc}
-
-## Check Your Prebid Version
-
-The open source code in Prebid.js can change frequently. To see what version of Prebid.js you are using, open your browser console and type `pbjs.version;`.
-
-You can reference this against the changes listed in the [Prebid.js Release Notes](https://github.com/prebid/Prebid.js/releases).
-
-## Delay the Ad Server Call so Key-Values can be Set
-
-Make sure that you delay any calls to the ad server. This allows all of the key-values to be set before the auction in the ad server occurs.
-
-Within Google Ad Manager, this is achieved by adding the following code to your page.  It should be called before any of the ad server code to make sure it runs first.
-
-{% highlight js %}
-var googletag = googletag || {};
-googletag.cmd = googletag.cmd || [];
-googletag.cmd.push(function() {
-     googletag.pubads().disableInitialLoad();
-});
-{% endhighlight %}
-
-## Check the Ad Units on the Page
-
-Make sure the ad units configured for Prebid.js match up with the ad units that have been set up in your ad server.
-
-You can review what ad units have been configured for Prebid by opening your browser console and typing `pbjs.getBidResponses();`. This will show a list of what div IDs are present:
-
-![pbjs.getBidResponses() showing ad units in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/ad-units.png "pbjs.getBidResponses() showing ad units in browser console"){: .pb-lg-img :}
-
-## List your Bids and Bidders
-
-Open your browser console and type `pbjs.getBidResponses();` to see a list of the ad units that have been configured.  This also shows what bids have been returned from each of the bidder partners in chronological order as shown in the screenshot below.
-
-To see all of the winning bids, open your browser console and type [`pbjs.getAllWinningBids();`]({{site.baseurl}}/dev-docs/publisher-api-reference/getAllWinningBids.html).
-
-{: .alert.alert-danger :}
-Keep in mind that any bid responses that come back after [the timeout you configured during setup]({{site.github.url}}/dev-docs/getting-started.html#set-the-ad-server-timeout) will not be sent to the ad server.
-
-{: .alert.alert-success :}
-You can also [print this data to the console in table format]({{site.baseurl}}/dev-docs/troubleshooting-tips.html#see-all-bids-in-the-console) for easier reading.
-
-![pbjs.getBidResponses() in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/bids.png "pbjs.getBidResponses()"){: .pb-lg-img :}
-
-## Verify your Ad Server Targeting
-
-After the auction on page has occurred, Prebid.js will set key-value targeting for the ad server for those bids that have been returned before the [timeout you configured during setup]({{site.github.url}}/dev-docs/getting-started.html#set-the-ad-server-timeout).
-
-To see what values Prebid.js intends to send to the ad server, open your browser console and type `pbjs.getAdserverTargeting();` as shown below:
-
-![pbjs.getAdserverTargeting() in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/ad-server-target.png "pbjs.getAdserverTargeting()"){: .pb-lg-img :}
-
-{: .alert.alert-danger :}
-Note that if no bids are returned, no key-values will be set. You may need to increase your timeout setting or reach out to your bidder partners to determine why no bid responses are being sent.
-
-## Check the Ad Server's Auction
-
-After the Prebid auction has occurred and key-values have been set for the ad server, the ad server will use the line items targeting those key-values within its auction.
-
-If you're using Google Ad Manager, you can verify this by using the [Google Publisher Console](https://support.google.com/dfp_sb/answer/2462712?hl=en), which can be accessed as follows:
-
-+ Open your browser's console and type `googletag.openConsole();`
-
-+ Append `googfc` as a query parameter to the URL.  Then, click the *Delivery Diagnostics* option to reveal most of the information described below.
-
-To make sure your ad server is set up correctly, answer the following questions:
-
-+ **How many ads have been fetched for an ad unit?** Ideally, only 1 ad will be requested on page load. If not, check for unnecessary extra calls to the ad server in your page's source code.  
-
-  ![Google Publisher Console Ad fetch count]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/ad-server-1.png "Google Publisher Console Ad fetch count"){: .pb-sm-img :}
-
-+ **Are the key-values being set in the ad server?** If not, review your page's source code to ensure that the Prebid auction completes **before** sending the key-value targeting to the ad server.  
-
-  ![Google Ad Manager Delivery Troubleshooting]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/ad-server-2.png "Google Ad Manager Delivery Troubleshooting"){: .pb-lg-img :}
-
-+ **Has the ad server order been activated?** If not, you'll have to activate the order to see Prebid-delivered ads.
-
-+ **Are there other higher priority campaigns running within your ad server?** Higher priority campaigns will prevent Prebid ads with a higher CPM bid from winning in the ad server's auction. For testing purposes, you may want to pause these campaigns or have them excluded when the prebid key values are present.
-
-+ **Is there other remnant inventory in the ad server with a higher CPM that is winning?** To test for this, you may want to use a test creative set up within a bidder partner that has a high CPM or create artificial demand with a [bidCPMadjustment]({{site.github.url}}/dev-docs/publisher-api-reference/bidderSettings.html).
-
-+ **Have you set up all of the line items in the ad server to match the [setPriceGranularity setting]({{site.github.url}}/dev-docs/examples/custom-price-buckets.html) within Prebid.js?**  All of the line items that correspond to your price granularity settings must be set up in your ad server.  When there are gaps in the price granularity of your line item setup, bids will be reduced according to the size of the gap.  For example, with [dense granularity]({{site.github.url}}/dev-docs/publisher-api-reference.html#dense-granularity), a $3.32 bid will be sent to the ad server as $3.30.
-
-## Look for the Winning Bid
-
-When a prebid line item wins the ad server's auction, a `renderAd` event will be logged in the browser console. To see this event, you need to do either of the following before the auction:
-
-+ Have typed `pbjs.logging=true` into your your browser console
-
-+ Appended `pbjs_debug=true` as a query parameter to the URL
-
-When this event is logged, it shows that Prebid.js has requested to render the ad from the winning bidder partner, and that this partner's bid has won both the Prebid and ad server auctions.
-
-![renderAd event in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/render-ad.png "renderAd event in browser console"){: .pb-lg-img :}
-
-## Related Topics
-
-+ [Developer Troubleshooting Tips]({{site.github.url}}/dev-docs/troubleshooting-tips.html)
-
-+ [Common Setup Issues]({{site.github.url}}/dev-docs/common-issues.html)
+Moved to a new [Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html)
diff --git a/dev-docs/publisher-api-reference/addAdUnits.md b/dev-docs/publisher-api-reference/addAdUnits.md
index c955e885ce..60df9ebc50 100644
--- a/dev-docs/publisher-api-reference/addAdUnits.md
+++ b/dev-docs/publisher-api-reference/addAdUnits.md
@@ -123,17 +123,17 @@ pbjs.addAdUnits({
     mediaTypes: {
         video: {
             context: 'instream',
-            playerSize: [640, 480]
+            playerSize: [640, 480],
+            mimes: ['video/mp4'],
+            protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+            playbackmethod: [2],
+            skip: 1
         },
     },
     bids: [{
         bidder: 'appnexus',
         params: {
-            placementId: 13232361,
-            video: {
-                skippable: true,
-                playback_methods: ['auto_play_sound_off']
-            }
+            placementId: 13232361
         }
     }]
 });
@@ -147,7 +147,11 @@ pbjs.addAdUnit({
     mediaTypes: {
         video: {
             context: 'outstream',
-            playerSize: [640, 480]
+            playerSize: [640, 480],
+            mimes: ['video/mp4'],
+            protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+            playbackmethod: [2],
+            skip: 1
         }
     },
     renderer: {
@@ -209,7 +213,11 @@ pbjs.addAdUnits({
     },
     video: {
         context: 'outstream',
-        playerSize: [400, 600],
+        playerSize: [640, 480],
+	mimes: ['video/mp4'],
+	protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+	playbackmethod: [2],
+	skip: 1
     },
   },
   bids: [
diff --git a/dev-docs/publisher-api-reference/bidderSettings.md b/dev-docs/publisher-api-reference/bidderSettings.md
index 224ef27548..c2ddb80c18 100644
--- a/dev-docs/publisher-api-reference/bidderSettings.md
+++ b/dev-docs/publisher-api-reference/bidderSettings.md
@@ -58,8 +58,8 @@ you'll need to fully manage the targeting -- the default `hb_` targeting variabl
 **Keyword targeting for all bidders**
 
 The below code snippet is the *default* setting for ad server targeting. For each bidder's bid,
-Prebid.js will set 6 keys (`hb_bidder`, `hb_adid`, `hb_pb`, `hb_size`, `hb_source`, `hb_format`) with their corresponding values.
-In addition, video will receive additional keys: `hb_cache_id`, `hb_uuid`, and `hb_cache_host`.
+Prebid.js will set 6 keys (`hb_bidder`, `hb_adid`, `hb_pb`, `hb_size`, `hb_format`) with their corresponding values.
+In addition, video will receive additional keys: `hb_cache_id` and `hb_cache_host`.
 The key value pair targeting is applied to the bid's corresponding ad unit. Your ad ops team will have the ad server's line items and creatives to utilize these keys.
 
 If you'd like to customize the key value pairs, you can overwrite the settings as the below example shows. *Note* that once you updated the settings, let your ad ops team know about the change, so they can update the line item targeting accordingly. See the [Ad Ops](/adops/before-you-start.html) documentation for more information.
@@ -110,7 +110,7 @@ pbjs.bidderSettings = {
 {% endhighlight %}
 
 {: .alert.alert-warning :}
-Note that the existence of `bidderSettings.adserverTargeting.standard` will prevent the system from adding the standard display targeting values: hb_bidder, hb_adid, hb_pb, hb_size, hb_source, and hb_format. However, if the mediaType is video and `bidderSettings.adserverTargeting.standard` does not specify hb_uuid, hb_cache_id, or hb_cache_host, they will be added unless `bidderSettings.sendStandardTargeting` is set to false.
+Note that the existence of `bidderSettings.adserverTargeting.standard` will prevent the system from adding the standard display targeting values: hb_bidder, hb_adid, hb_pb, hb_size, and hb_format. However, if the mediaType is video and `bidderSettings.adserverTargeting.standard` does not specify hb_uuid, hb_cache_id, or hb_cache_host, they will be added unless `bidderSettings.sendStandardTargeting` is set to false.
 
 <a name="key-targeting-specific-bidder"></a>
 **Keyword targeting for a specific bidder**
diff --git a/dev-docs/publisher-api-reference/getConfig.md b/dev-docs/publisher-api-reference/getConfig.md
index 9ff5f12ff9..99ac02fd88 100644
--- a/dev-docs/publisher-api-reference/getConfig.md
+++ b/dev-docs/publisher-api-reference/getConfig.md
@@ -4,8 +4,9 @@ title: pbjs.getConfig([string])
 description: 
 ---
 
+## Overview
 
-The `getConfig` function is for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned.
+The `getConfig` function is used for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned. Be careful with use of this function, as it returns a reference to the configuration instead of a clone. The readConfig function has been introduced for safer use. 
 
 {% highlight js %}
 /* Get config object */
@@ -15,7 +16,10 @@ config.getConfig()
 config.getConfig('debug')
 {% endhighlight %}
 
-The `getConfig` function also contains a 'subscribe' ability that adds a callback function to a set of listeners that are invoked whenever `setConfig` is called. The subscribed function will be passed the options object that was used in the `setConfig` call. Individual topics can be subscribed to by passing a string as the first parameter and a callback function as the second.  For example:
+
+### Subscribe
+
+The `getConfig` function contains a `subscribe` feature that adds a callback function to a set of listeners that are invoked whenever `setConfig` is called. The `subscribed` function will be passed the `options` object that was used in the `setConfig` call. Individual topics can be subscribed to by passing a string as the first parameter and a callback function as the second.  For example:
 
 {% highlight js %}
 
@@ -31,4 +35,4 @@ unsubscribe(); // no longer listening
 
 {% endhighlight %}
 
-<hr class="full-rule" />
\ No newline at end of file
+<hr class="full-rule" />
diff --git a/dev-docs/publisher-api-reference/getEvents.md b/dev-docs/publisher-api-reference/getEvents.md
index 70fd24a5a7..fb1168f5fd 100644
--- a/dev-docs/publisher-api-reference/getEvents.md
+++ b/dev-docs/publisher-api-reference/getEvents.md
@@ -4,23 +4,19 @@ title: pbjs.getEvents()
 description: 
 ---
 
+The `getEvents` method returns a copy of all emitted events since the page loaded.
 
-The methods `onEvent` and `offEvent` are provided for you to register
-a callback to handle a Prebid.js event.
+**Kind**: static method of `pbjs`
 
-The `getEvents` method returns a copy of all emitted events.
+**Args**: none
 
-The optional `id` parameter provides more finely-grained event
-callback registration.  This makes it possible to register callback
-events for a specific item in the event context.
+**Returns**: `array of objects`
 
-For example, `bidWon` events will accept an `id` for ad unit code.
-`bidWon` callbacks registered with an ad unit code id will be called
-when a bid for that ad unit code wins the auction. Without an `id`
-this method registers the callback for every `bidWon` event.
-
-{: .alert.alert-info :}
-Currently, `bidWon` is the only event that accepts the `id` parameter.
+**Returned Object Params**:
+- eventType (see table below)
+- args (varies for each event type)
+- id (only for bidWon, set to adUnit.code)
+- elapsedTime
 
 The available events are:
 
@@ -30,6 +26,7 @@ The available events are:
 | auctionInit   | The auction has started                 | Object containing auction details |
 | auctionEnd    | The auction has ended                   | Object containing auction details |
 | beforeRequestBids | Bids are about to be requested from adapters (added in 3.x) | Array of adunits in the auction |
+| beforeBidderHttp | bidder network request is about be triggered | Array of Bid request objects |
 | bidRequested  | A bid was requested from a specific bidder | Bid request object |
 | bidResponse   | A bid response has arrived              | Bid response object |
 | bidAdjustment | A bid was adjusted                      | Bid response object |
@@ -39,75 +36,20 @@ The available events are:
 | requestBids   | Bids have been requested from adapters (i.e. pbjs.requestBids() was called) | None |
 | addAdUnits    | Ad units have been added to the auction | None |
 | adRenderFailed| Ad rendering failed | Object containing 'reason' and 'message' |
+| adRenderSucceeded | Ad rendering succeeded| Object containing the document containing the ad, the bid, and the adId |
 | auctionDebug  | An error was logged to the console | Object containing 'type' and 'arguments' |
 | bidderDone    | A bidder has signaled they are done responding | Bid request object |
 | tcf2Enforcement | There was a TCF2 enforcement action taken | `{ storageBlocked: ['moduleA', 'moduleB'], biddersBlocked: ['moduleB'], analyticsBlocked: ['moduleC'] }` |
 
-The examples below show how these events can be used.
-
-Events example 1
-{% highlight js %}
-
-        /* Log when ad units are added to Prebid */
-        pbjs.onEvent('addAdUnits', function() {
-          console.log('Ad units were added to Prebid.')
-          console.log(pbjs.adUnits);
-        });
-
-        /* Log when Prebid wins the ad server auction */
-        pbjs.onEvent('bidWon', function(data) {
-          console.log(data.bidderCode+ ' won the ad server auction for ad unit ' +data.adUnitCode+ ' at ' +data.cpm+ ' CPM');
-        });
-
-{% endhighlight %}
-
-Events example 2: Use the optional 3rd parameter for the `bidWon` event
-{% highlight js %}
-        /* This handler will be called only for rightAdUnit */
-        /* Uses the `pbjs.offEvent` method to remove the handler once it has been called */
-        var bidWonHandler = function bidWonHandler() {
-            console.log('bidWonHandler: ', arguments);
-            pbjs.offEvent('bidWon', bidWonHandler, rightAdUnit);
-        };
-
-        var rightAdUnit="/111111/right";
-        pbjs.que.push(function () {
-            var adUnits = [{
-                code: rightAdUnit,
-		...
-	    },{
-		...
-	    }];
-
-	    pbjs.addAdUnits(adUnits);
-            pbjs.requestBids({
-		...
-            });
-
-            /* Register a callback for just the rightSlot `bidWon` event */
-            /* Note that defining an event that uses the 3rd parameter must come after initiating the auction */
-            pbjs.onEvent('bidWon', bidWonHandler, rightAdUnit);
+The example below shows how these events can be used.
 
-            ...
-{% endhighlight %}
-
-Events example 3: Dynamically modify the auction
 {% highlight js %}
-	var bidderFilter = function bidderFilter(adunits) {
-	    // pub-specific logic to optimize bidders
-            // e.g. "remove any that haven't bid in the last 4 refreshes"
-	};
-	pbjs.onEvent('beforeRequestBids', bidderFilter);
+      pbjs.getEvents().forEach(event => {
+        console.log("event: "+event.eventType)
+      });
 {% endhighlight %}
 
-Events example 4: Log errors and render fails to your own endpoint
-{% highlight js %}
-        pbjs.onEvent('adRenderFailed', function () {
-              // pub-specific logic to call their own endpoint
-            });
-	pbjs.onEvent('auctionDebug', function () {
-              // pub-specific logic to call their own endpoint
-            });
-{% endhighlight %}
 
-<hr class="full-rule" />
\ No newline at end of file
+## See Also
+- [onEvent](/dev-docs/publisher-api-reference/onEvent.html)
+- [offEvent](/dev-docs/publisher-api-reference/offEvent.html)
diff --git a/dev-docs/publisher-api-reference/getNoBids.md b/dev-docs/publisher-api-reference/getNoBids.md
index 8730a42852..aa2ebd491f 100644
--- a/dev-docs/publisher-api-reference/getNoBids.md
+++ b/dev-docs/publisher-api-reference/getNoBids.md
@@ -5,6 +5,6 @@ description:
 ---
 
 
-Use this method to get all of the bid requests that resulted in a NO_BID.  These are bid requests that were sent to a bidder but, for whatever reason, the bidder decided not to bid on.  Used by debugging snippet in [Tips for Troubleshooting](/dev-docs/troubleshooting-tips.html).
+Use this method to get all of the bid requests that resulted in a NO_BID.  These are bid requests that were sent to a bidder but, for whatever reason, the bidder decided not to bid on.  Used by debugging snippet in the [Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html).
 
-+ `pbjs.getNoBids()`: returns an array of bid request objects that were deliberately not bid on by a bidder.
\ No newline at end of file
++ `pbjs.getNoBids()`: returns an array of bid request objects that were deliberately not bid on by a bidder.
diff --git a/dev-docs/publisher-api-reference/offEvent.md b/dev-docs/publisher-api-reference/offEvent.md
index 1a365aafc2..31dc71af82 100644
--- a/dev-docs/publisher-api-reference/offEvent.md
+++ b/dev-docs/publisher-api-reference/offEvent.md
@@ -1,6 +1,56 @@
 ---
 layout: api_prebidjs
-title: pbjs.offEvent(event, handler, id)
+title: pbjs.offEvent(eventType, handler, id)
 description: 
 ---
 
+Turns off an event callback defined with [onEvent](/dev-docs/publisher-api-reference/onEvent.html)
+
+**Kind**: static method of `pbjs`
+
+**Args**: eventType, callbackFunction, id
+
+**Returns**: none
+
+See the [getEvents](/publisher-api-reference/getEvents.html) function for the full list of eventTypes supported.
+
+Causes PBJS to search through registered event callbacks and remove the
+supplied callbackFunction for the specifc eventType.
+
+The optional `id` parameter provides more finely-grained event
+callback de-registration.  This makes it possible to de-register callback
+events for a specific item in the event context.
+
+Example
+
+{% highlight js %}
+        /* This handler will be called only for rightAdUnit */
+        /* Uses the `pbjs.offEvent` method to remove the handler once it has been called */
+        var bidWonHandler = function bidWonHandler() {
+            console.log('bidWonHandler: ', arguments);
+            pbjs.offEvent('bidWon', bidWonHandler, rightAdUnit);
+        };
+
+        var rightAdUnit="/111111/right";
+        pbjs.que.push(function () {
+            var adUnits = [{
+                code: rightAdUnit,
+                ...
+            },{
+                ...
+            }];
+            pbjs.addAdUnits(adUnits);
+            pbjs.requestBids({
+                ...
+            });
+
+            /* Register a callback for just the rightSlot `bidWon` event */
+            /* Note that defining an event that uses the 3rd parameter must come after initiating the auction */
+            pbjs.onEvent('bidWon', bidWonHandler, rightAdUnit);
+
+            ...
+{% endhighlight %}
+
+## See Also
+- [getEvents](/dev-docs/publisher-api-reference/getEvents.html)
+- [onEvent](/dev-docs/publisher-api-reference/onEvent.html)
diff --git a/dev-docs/publisher-api-reference/onEvent.md b/dev-docs/publisher-api-reference/onEvent.md
index 716048f519..e322367352 100644
--- a/dev-docs/publisher-api-reference/onEvent.md
+++ b/dev-docs/publisher-api-reference/onEvent.md
@@ -1,6 +1,65 @@
 ---
 layout: api_prebidjs
-title: pbjs.onEvent(event, handler, id)
+title: pbjs.onEvent(eventType, handler, id)
 description: 
 ---
 
+This routine allows the page (or module) to create a callback function that's invoked when heading bidding events are fired.
+
+**Kind**: static method of `pbjs`
+
+**Args**: eventType, callbackFunction, id
+
+**Returns**: none
+
+See the [getEvents](/publisher-api-reference/getEvents.html) function for the full list of eventTypes supported.
+
+The optional `id` parameter provides more finely-grained event
+callback registration.  This makes it possible to register callback
+events for a specific item in the event context.
+
+For example, `bidWon` events will accept an `id` for ad unit code.
+`bidWon` callbacks registered with an ad unit code id will be called
+when a bid for that ad unit code wins the auction. Without an `id`
+this method registers the callback for every `bidWon` event.
+
+{: .alert.alert-info :}
+Currently, `bidWon` is the only event that accepts the `id` parameter.
+
+Example 1: Basic event logging
+```
+        /* Log when ad units are added to Prebid */
+        pbjs.onEvent('addAdUnits', function() {
+          console.log('Ad units were added to Prebid.')
+          console.log(pbjs.adUnits);
+        });
+
+        /* Log when Prebid wins the ad server auction */
+        pbjs.onEvent('bidWon', function(data) {
+          console.log(data.bidderCode+ ' won the ad server auction for ad unit ' +data.adUnitCode+ ' at ' +data.cpm+ ' CPM');
+        });
+
+```
+
+Example 2: Dynamically modify the auction
+```
+        var bidderFilter = function bidderFilter(adunits) {
+            // pub-specific logic to optimize bidders
+            // e.g. "remove any that haven't bid in the last 4 refreshes"
+        };
+        pbjs.onEvent('beforeRequestBids', bidderFilter);
+```
+
+Example 3: Log errors and render fails to your own endpoint
+```
+        pbjs.onEvent('adRenderFailed', function () {
+              // pub-specific logic to call their own endpoint
+            });
+        pbjs.onEvent('auctionDebug', function () {
+              // pub-specific logic to call their own endpoint
+            });
+```
+
+## See Also
+- [getEvents](/dev-docs/publisher-api-reference/getEvents.html)
+- [offEvent](/dev-docs/publisher-api-reference/offEvent.html)
diff --git a/dev-docs/publisher-api-reference/readConfig.md b/dev-docs/publisher-api-reference/readConfig.md
new file mode 100644
index 0000000000..734647e762
--- /dev/null
+++ b/dev-docs/publisher-api-reference/readConfig.md
@@ -0,0 +1,18 @@
+---
+layout: api_prebidjs
+title: pbjs.readConfig([string])
+description: 
+---
+
+
+The `readConfig` function is used for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned.  The readConfig function has been introduced for safer use of the getConfig functionality, as it returns a clone. 
+
+{% highlight js %}
+/* Get config object */
+config.readConfig()
+
+/* Get debug config */
+config.readConfig('debug')
+{% endhighlight %}
+
+<hr class="full-rule" />
diff --git a/dev-docs/publisher-api-reference/setConfig.md b/dev-docs/publisher-api-reference/setConfig.md
index e3e02a8832..e9c0a4ee33 100644
--- a/dev-docs/publisher-api-reference/setConfig.md
+++ b/dev-docs/publisher-api-reference/setConfig.md
@@ -52,7 +52,7 @@ Debug mode can be enabled permanently in a page if desired. In debug mode,
 Prebid.js will post additional messages to the browser console and cause Prebid Server to
 return additional information in its response. If not specified, debug is off.
 Note that debugging can be specified for a specific page view by adding
-`pbjs_debug=true` to the URL's query string. e.g. <code>/pbjs_demo.html?pbjs_debug=true</code> See [Prebid.js troubleshooting tips](/dev-docs/troubleshooting-tips.html) for more information.
+`pbjs_debug=true` to the URL's query string. e.g. <code>/pbjs_demo.html?pbjs_debug=true</code> See [Prebid.js troubleshooting guide](/troubleshooting/troubleshooting-guide.html) for more information.
 
 Turn on debugging permanently in the page:
 {% highlight js %}
@@ -268,6 +268,9 @@ pbjs.setConfig({ pageUrl: "https://example.com/index.html" })
 
 #### Publisher Domain
 
+{: .alert.alert-warning :}
+This API is deprecated. Please use 'pageUrl' instead.
+
 Set the publisher's domain where Prebid is running, for cross-domain iframe communication:
 
 {% highlight js %}
@@ -371,34 +374,44 @@ This implies that ranges should have max values that are really the min value of
 
 #### Media Type Price Granularity
 
-The default [Prebid price granularities](#setConfig-Price-Granularity) cap out at $20, which isn't always convenient for video ads, which can command more than $20. One solution is to just set up a
-custom price
-granularity as described above. Another approach is
-`mediaTypePriceGranularity` config that may be set to define granularities for each of five media types:
-banner, video, video-instream, video-outstream, and native. e.g.
+The standard [Prebid price granularities](#setConfig-Price-Granularity) cap out at 20, which isn't always convenient for video ads, which can command more than that. One solution is to set up a custom price
+granularity as described above. Another approach is to use
+`mediaTypePriceGranularity` config that may be set to define different price bucket
+structures for different types of media:
+- for each of five media types: banner, video, video-instream, video-outstream, and native.
+- it is recommended that defined granularities be custom. It's possible to define "standard" granularities (e.g. "medium"), but it's not possible to mix both custom and standard granularities.
 
 {% highlight js %}
-const customPriceGranularity = {
+const customPriceGranularityVideo = {
             'buckets': [
-              { 'precision': 2, 'max':x 5, 'increment': 0.25 },
+              { 'precision': 2, 'max': 5, 'increment': 0.25 },
               { 'precision': 2, 'max': 20, 'increment': 0.5 },
               { 'precision': 2, 'max': 100, 'increment': 1 }
             ]
 };
+const customPriceGranularityBanner = {
+            'buckets': [
+              { 'precision': 2, 'max': 5, 'increment': 0.5 },
+              { 'precision': 2, 'max': 20, 'increment': 1 }
+            ]
+};
 
 pbjs.setConfig({'mediaTypePriceGranularity': {
           'video': customPriceGranularity,   // used as default for instream video
-	  'video-outstream': customPriceGranularityOutstream,
-          'banner': 'medium',
-          'native': 'medium',
+	  'video-outstream': customPriceGranularityBanner,
+          'banner': 'customPriceGranularityBanner'
         }
 });
 {% endhighlight %}
 
 Any `mediaTypePriceGranularity` setting takes precedence over `priceGranularity`.
 
+{: .alert.alert-warning :}
+mediaTypePriceGranularity works in two modes: either auctions contain adunits with a single media type, or all defined price granularities are custom.
+i.e. You cannot run an auction containing a mix of mediatypes across an adunit AND having a mix of "custom" and "standard" price granularities across mediatypes.
+
 {: .alert.alert-info :}
-Note: mediaTypePriceGranularity is the only place that 'video-outstream' or 'video-instream'
+Note that mediaTypePriceGranularity is the only place that 'video-outstream' or 'video-instream'
 are recognized. This was driven by the recognition that outstream often shares line items with banner.
 If the mediatype is video, the price bucketing code further looks at the context (e.g. outstream) to see if there's
 a price granularity override. If it doesn't find 'video-outstream' defined, it will then look for just 'video'.
@@ -456,8 +469,8 @@ The `s2sConfig` properties:
 | `enabled` | Optional | Boolean | Enables this s2sConfig block - defaults to `false` |
 | `timeout` | Required | Integer | Number of milliseconds allowed for the server-side auctions. This should be approximately 200ms-300ms less than your Prebid.js timeout to allow for all bids to be returned in a timely manner. See the Additional Notes below for more information. |
 | `adapter` | Required | String | Adapter to use to connect to Prebid Server. Defaults to 'prebidServer' |
-| `endpoint` | Required | URL | Defines the auction endpoint for the Prebid Server cluster |
-| `syncEndpoint` | Required | URL | Defines the cookie_sync endpoint for the Prebid Server cluster |
+| `endpoint` | Required | URL or Object | Defines the auction endpoint for the Prebid Server cluster.  See table below for object config properties. |
+| `syncEndpoint` | Required | URL or Object | Defines the cookie_sync endpoint for the Prebid Server cluster. See table below for object config properties. |
 | `userSyncLimit` | Optional | Integer | Max number of userSync URLs that can be executed by Prebid Server cookie_sync per request.  If not defined, PBS will execute all userSync URLs included in the request. |
 | `coopSync` | Optional | Boolean | Whether or not PBS is allowed to perform "cooperative syncing" for bidders not on this page. Publishers help each other improve match rates by allowing this. Default is true. Supported in PBS-Java only. |
 | `defaultTtl` | Optional | Integer | Configures the default TTL in the Prebid Server adapter to use when Prebid Server does not return a bid TTL - 60 if not set |
@@ -465,11 +478,20 @@ The `s2sConfig` properties:
 | `extPrebid` | Optional | Object | Arguments will be added to resulting OpenRTB payload to Prebid Server in request.ext.prebid. See the examples below. |
 | `syncUrlModifier` | Optional | Object | Function to modify a bidder's sync url before the actual call to the sync endpoint. Bidder must be enabled for s2sConfig. |
 
+If `endpoint` and `syncEndpoint` are objects, these are the supported properties:
+
+{: .table .table-bordered .table-striped }
+| Attribute | Scope | Type | Description |
+|------------+---------+---------+---------------------------------------------------------------|
+| p1Consent | Required | String | Defines the auction endpoint or the cookie_sync endpoint for the Prebid Server cluster for non-consent requests or users who grant consent. |
+| noP1Consent | Required | String | Defines the auction endpoint or the cookie_sync endpoint for the Prebid Server cluster for users who do not grant consent. (This is useful for a server configured to not accept any cookies to ensure compliance regulations.) |
+
 **Notes on s2sConfig properties**
 
-- Currently supported vendors are: appnexus & rubicon
+- Currently supported vendors are: appnexus, openx, and rubicon
 - When using `defaultVendor` option, `accountId` and `bidders` properties still need to be defined.
 - If the `s2sConfig` timeout is greater than the Prebid.js timeout, the `s2sConfig` timeout will be automatically adjusted to 75% of the Prebid.js timeout in order to fit within the auction process.
+- When using the `endpoint` or `syncEndpoint` object configs, you should define both properties.  If either property is not defined, Prebid Server requests for that type of user will not be made.  If you do not need to distinguish endpoints for consent reasons, you can simply define the same URL value in both fields or use the String version of the field (which is configured to use defined URL for all users).
 
 {: .alert.alert-warning :}
 **Errors in bidder parameters will cause Prebid Server to reject the
@@ -503,6 +525,38 @@ pbjs.setConfig({
 
 Additional options for `s2sConfig` may be enabled by including the [Server-to-Server testing module]({{site.baseurl}}/dev-docs/modules/s2sTesting.html).
 
+s2sConfig example with the endpoint attributes defined as strings:
+{% highlight js %}
+pbjs.setConfig({
+    s2sConfig: [{
+        accountId: '1001',
+        bidders: ['bidderA', 'bidderB'],
+        endpoint: 'https://mypbs.example.com/path',
+	syncEndpoint: 'https://mypbs.example.com/path',
+        timeout: 300
+    }]
+})
+{% endhighlight %}
+
+s2sConfig example with the endpoint attributes defined as objects:
+{% highlight js %}
+pbjs.setConfig({
+    s2sConfig: [{
+        accountId: '1001',
+        bidders: ['bidderA', 'bidderB'],
+        endpoint: {
+	   p1Consent: 'https://mypbs.example.com/path',
+	   noP1Consent: 'https://mypbs2.example.com/path'
+	},
+        syncEndpoint: {
+	   p1Consent: 'https://mypbs.example.com/path',
+	   noP1Consent: 'https://mypbs2.example.com/path'
+	}
+        timeout: 300
+    }]
+})
+{% endhighlight %}
+
 **Server-Side Aliases**
 
 You may want to run a particular bidder on the client for banner, but that same bidder on the
@@ -713,6 +767,7 @@ The `targetingControls` object passed to `pbjs.setConfig` provides some options
 | auctionKeyMaxChars | integer | Specifies the maximum number of characters the system can add to ad server targeting. |
 | alwaysIncludeDeals | boolean | If [enableSendAllBids](#setConfig-Send-All-Bids) is false, set this value to `true` to ensure that deals are sent along with the winning bid |
 | allowTargetingKeys | Array of Strings | Selects supported default targeting keys. |
+| allowSendAllBidsTargetingKeys | Array of Strings | Selects supported default targeting keys. |
 
 {: .alert.alert-info :}
 Note that this feature overlaps and can be used in conjunction with [sendBidsControl.bidLimit](#setConfig-Send-Bids-Control).
@@ -780,9 +835,9 @@ The targeting key names and the associated prefix value filtered by `allowTarget
 | PRICE_BUCKET | `hb_pb` | yes | The results of the [price granularity](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity) calculation. |
 | SIZE | `hb_size` | yes | '300x250' |
 | DEAL | `hb_deal` | yes | |
-| SOURCE | `hb_source` | yes | 'client' or 's2s' |
+| SOURCE | `hb_source` | no | 'client' or 's2s' |
 | FORMAT | `hb_format` | yes | 'banner', 'video', or 'native' |
-| UUID | `hb_uuid` | yes | Network cache ID for video |
+| UUID | `hb_uuid` | no | Network cache ID for video |
 | CACHE_ID | `hb_cache_id` | yes | Network cache ID for AMP or Mobile |
 | CACHE_HOST | `hb_cache_host` | yes | |
 | ADOMAIN | `hb_adomain` | no | Set to bid.meta.advertiserDomains[0]. Use cases: report on VAST errors, set floors on certain buyers, monitor volume from a buyer, track down bad creatives. |
@@ -824,6 +879,20 @@ config.setConfig({
 });
 ```
 
+##### Details on the allowSendAllBidsTargetingKeys setting
+
+The `allowSendAllBidsTargetingKeys` is similar to `allowTargetingKeys` except it limits any default bidder specific keys sent to the adserver when sendAllBids is enabled. Any default bidder specific keys that do not match the mask will not be sent to the adserver. This setting can be helpful if you find that your default Prebid.js implementation is sending key values that your adserver isn't configured to process; extraneous key values may lead to the ad server request being truncated, which can cause potential issues with the delivery or rendering ads. An example of an extraneous key value many publishers may find redundant and want to remove is `hb_bidder_biddercode = biddercode`.
+
+Below is an example config of `allowSendAllBidsTargetingKeys` excluding all default send all bids targeting keys except `hb_adid_biddercode`, `hb_pb_biddercode`:
+
+```javascript
+config.setConfig({
+  targetingControls: {
+    allowSendAllBidsTargetingKeys: ['AD_ID', 'PRICE_BUCKET'],
+  },
+});
+```
+
 
 <a name="setConfig-Configure-Responsive-Ads" />
 
@@ -1184,15 +1253,16 @@ pbjs.setConfig({
 
 #### Auction Options
 
-The `auctionOptions` object passed to `pbjs.setConfig` provides a method to specify bidders that the Prebid auction will no longer wait for before determing the auction has completed. This may be helpful if you find there are a number of low performing and/or high timeout bidders in your page's rotation.
+The `auctionOptions` object controls aspects related to auctions.
 
 {: .table .table-bordered .table-striped }
 | Field    | Scope   | Type   | Description                                                                           |
 |----------+---------+--------+---------------------------------------------------------------------------------------|
-| `secondaryBidders` | Required | Array of Strings | The bidders that will be removed from determining when an Auction has completed. |
-
-Example config:
+| `secondaryBidders` | Optional | Array of Strings | Specifies bidders that the Prebid auction will no longer wait for before determining the auction has completed. This may be helpful if you find there are a number of low performing and/or high timeout bidders in your page's rotation. |
+| `suppressStaleRender` | Optional | Boolean | When true, prevents `banner` bids from being rendered more than once. It should only be enabled after auto-refreshing is implemented correctly.  Default is false.
 
+##### Examples
+Exclude status of bidder _doNotWaitForMe_ when checking auction completion.
 {% highlight js %}
 pbjs.setConfig({
     'auctionOptions': {
@@ -1201,6 +1271,25 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
+Render winning bids only once.
+{% highlight js %}
+pbjs.setConfig({
+    'auctionOptions': {
+        'suppressStaleRender': true
+    }
+});
+{% endhighlight %}
+
+##### More on Stale Rendering
+When auto-refreshing is done incorrectly, it could cause the same bids to be rendered repeatedly. For instance, when googletag.pubads.refresh() is called directly without removing the PBJS targeting, the same hb_ variables get re-sent to GAM, re-chosen, and re-rendered. Over and over without ever asking PBJS for updated targeting variables.
+
+PBJS performs following actions when stale rendering is detected.
+* Log a warning in the browser console if pbjs_debug=true.
+* Emit a `STALE_RENDER` event before `BID_WON` event.
+
+Stale winning bids will continue to be rendered unless `suppressStaleRender` is set to true.  Events including `STALE_RENDER` and `BID_WON` are unaffected by this option.
+
+
 <a name="setConfig-maxNestedIframes" />
 
 #### maxNestedIframes
diff --git a/dev-docs/requirements/tcf2/PrebidSupportforEnforcingTCF2.html b/dev-docs/requirements/tcf2/PrebidSupportforEnforcingTCF2.html
index 26e8d898a9..bd7edfa7a2 100644
--- a/dev-docs/requirements/tcf2/PrebidSupportforEnforcingTCF2.html
+++ b/dev-docs/requirements/tcf2/PrebidSupportforEnforcingTCF2.html
@@ -1 +1 @@
-<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><style type="text/css">@import url('https://themes.googleusercontent.com/fonts/css?kit=lhDjYqiy3mZ0x6ROQEUoUw');ol.lst-kix_7fhxg8i5msmt-8.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-8 0}.lst-kix_pkkwt0mfnd4r-1>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-1}ol.lst-kix_pkkwt0mfnd4r-8.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-8 0}.lst-kix_xygzk5z3cyvz-2>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-2}ol.lst-kix_xygzk5z3cyvz-5.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-5 0}.lst-kix_jwv9q4tqofnu-8>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-8}.lst-kix_u56eprq9ell0-1>li:before{content:"\0025cb  "}.lst-kix_u56eprq9ell0-2>li:before{content:"\0025a0  "}.lst-kix_u56eprq9ell0-0>li:before{content:"\0025cf  "}.lst-kix_5zdork13zaj5-2>li{counter-increment:lst-ctn-kix_5zdork13zaj5-2}ol.lst-kix_8irgp2z20781-7.start{counter-reset:lst-ctn-kix_8irgp2z20781-7 0}ol.lst-kix_5zdork13zaj5-6.start{counter-reset:lst-ctn-kix_5zdork13zaj5-6 0}.lst-kix_7fhxg8i5msmt-0>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-0}.lst-kix_3vftmdlxcpj0-7>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-7}.lst-kix_w5k728jy05vp-6>li{counter-increment:lst-ctn-kix_w5k728jy05vp-6}ol.lst-kix_pzmtiq5h0915-5.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-5 0}.lst-kix_ozkivkncyqrh-7>li:before{content:"\0025cb  "}.lst-kix_ozkivkncyqrh-6>li:before{content:"\0025cf  "}.lst-kix_ozkivkncyqrh-8>li:before{content:"\0025a0  "}.lst-kix_ozkivkncyqrh-5>li:before{content:"\0025a0  "}.lst-kix_svmmnj1snhr2-5>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-5}.lst-kix_6jgx19e9u9pe-5>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-5}.lst-kix_u56eprq9ell0-8>li:before{content:"\0025a0  "}.lst-kix_u56eprq9ell0-5>li:before{content:"\0025a0  "}.lst-kix_ozkivkncyqrh-0>li:before{content:"\0025cf  "}.lst-kix_u56eprq9ell0-7>li:before{content:"\0025cb  "}.lst-kix_ozkivkncyqrh-1>li:before{content:"\0025cb  "}.lst-kix_u56eprq9ell0-3>li:before{content:"\0025cf  "}ol.lst-kix_68qsl6zcqxrq-6.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-6 0}.lst-kix_u56eprq9ell0-6>li:before{content:"\0025cf  "}.lst-kix_ozkivkncyqrh-3>li:before{content:"\0025cf  "}.lst-kix_ozkivkncyqrh-2>li:before{content:"\0025a0  "}.lst-kix_ozkivkncyqrh-4>li:before{content:"\0025cb  "}.lst-kix_36fxx9lqc91n-1>li:before{content:"\0025cb  "}.lst-kix_u56eprq9ell0-4>li:before{content:"\0025cb  "}ol.lst-kix_6jgx19e9u9pe-8.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-8 0}.lst-kix_36fxx9lqc91n-0>li:before{content:"\0025cf  "}.lst-kix_7fhxg8i5msmt-6>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-6,decimal) ". "}ol.lst-kix_7fhxg8i5msmt-3.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-3 0}.lst-kix_7fhxg8i5msmt-5>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-5,lower-roman) ". "}ol.lst-kix_pkkwt0mfnd4r-3.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-3 0}.lst-kix_7fhxg8i5msmt-4>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-4,lower-latin) ". "}.lst-kix_68qsl6zcqxrq-1>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-1}ul.lst-kix_hii6fafh6hm-0{list-style-type:none}ul.lst-kix_hii6fafh6hm-1{list-style-type:none}.lst-kix_7fhxg8i5msmt-2>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-2,lower-roman) ". "}ul.lst-kix_hii6fafh6hm-2{list-style-type:none}ul.lst-kix_hii6fafh6hm-3{list-style-type:none}.lst-kix_7fhxg8i5msmt-1>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-1,lower-latin) ". "}.lst-kix_7fhxg8i5msmt-3>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-3,decimal) ". "}ul.lst-kix_hii6fafh6hm-4{list-style-type:none}ul.lst-kix_hii6fafh6hm-5{list-style-type:none}.lst-kix_w5k728jy05vp-2>li{counter-increment:lst-ctn-kix_w5k728jy05vp-2}ul.lst-kix_hii6fafh6hm-6{list-style-type:none}ul.lst-kix_hii6fafh6hm-7{list-style-type:none}ul.lst-kix_hii6fafh6hm-8{list-style-type:none}.lst-kix_jwv9q4tqofnu-4>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-4}.lst-kix_svmmnj1snhr2-1>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-1}.lst-kix_w6yj8blbe06x-6>li:before{content:"\0025cf  "}.lst-kix_w6yj8blbe06x-8>li:before{content:"\0025a0  "}.lst-kix_7fhxg8i5msmt-0>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-0,decimal) ". "}.lst-kix_7fhxg8i5msmt-7>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-7}.lst-kix_w6yj8blbe06x-7>li:before{content:"\0025cb  "}.lst-kix_3vftmdlxcpj0-0>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-0}ul.lst-kix_wchaiekwhio-7{list-style-type:none}ul.lst-kix_wchaiekwhio-6{list-style-type:none}ul.lst-kix_wchaiekwhio-5{list-style-type:none}ol.lst-kix_svmmnj1snhr2-7.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-7 0}.lst-kix_w6yj8blbe06x-0>li:before{content:"\0025cf  "}ul.lst-kix_wchaiekwhio-4{list-style-type:none}ul.lst-kix_wchaiekwhio-3{list-style-type:none}ul.lst-kix_wchaiekwhio-2{list-style-type:none}ul.lst-kix_wchaiekwhio-1{list-style-type:none}.lst-kix_w6yj8blbe06x-3>li:before{content:"\0025cf  "}ul.lst-kix_wchaiekwhio-0{list-style-type:none}ol.lst-kix_svmmnj1snhr2-0.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-0 0}.lst-kix_w6yj8blbe06x-4>li:before{content:"\0025cb  "}ol.lst-kix_68qsl6zcqxrq-1.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-1 0}ol.lst-kix_6fc6u2jowkph-4.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-4 0}.lst-kix_5zdork13zaj5-6>li{counter-increment:lst-ctn-kix_5zdork13zaj5-6}.lst-kix_w6yj8blbe06x-5>li:before{content:"\0025a0  "}.lst-kix_w6yj8blbe06x-2>li:before{content:"\0025a0  "}.lst-kix_w6yj8blbe06x-1>li:before{content:"\0025cb  "}ul.lst-kix_wchaiekwhio-8{list-style-type:none}ul.lst-kix_hxgng6in8mo4-7{list-style-type:none}ol.lst-kix_6fc6u2jowkph-8{list-style-type:none}.lst-kix_tb82mrxazni-7>li:before{content:"\0025cb  "}ul.lst-kix_hxgng6in8mo4-6{list-style-type:none}.lst-kix_6jgx19e9u9pe-1>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-1}ol.lst-kix_6fc6u2jowkph-7{list-style-type:none}ul.lst-kix_hxgng6in8mo4-5{list-style-type:none}ol.lst-kix_6fc6u2jowkph-6{list-style-type:none}.lst-kix_hxgng6in8mo4-1>li:before{content:"\0025cb  "}.lst-kix_hxgng6in8mo4-3>li:before{content:"\0025cf  "}ul.lst-kix_hxgng6in8mo4-4{list-style-type:none}.lst-kix_tb82mrxazni-5>li:before{content:"\0025a0  "}.lst-kix_68qsl6zcqxrq-4>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-4}.lst-kix_wz4xrdza29b-2>li:before{content:"\0025a0  "}.lst-kix_wz4xrdza29b-6>li:before{content:"\0025cf  "}ul.lst-kix_hxgng6in8mo4-8{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-8.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-8 0}.lst-kix_tb82mrxazni-3>li:before{content:"\0025cf  "}ol.lst-kix_pkkwt0mfnd4r-1.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-1 0}ol.lst-kix_w5k728jy05vp-2.start{counter-reset:lst-ctn-kix_w5k728jy05vp-2 0}ul.lst-kix_hxgng6in8mo4-3{list-style-type:none}ul.lst-kix_hxgng6in8mo4-2{list-style-type:none}.lst-kix_wz4xrdza29b-4>li:before{content:"\0025cb  "}ul.lst-kix_hxgng6in8mo4-1{list-style-type:none}ul.lst-kix_hxgng6in8mo4-0{list-style-type:none}.lst-kix_7fhxg8i5msmt-4>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-4}ol.lst-kix_5zdork13zaj5-1{list-style-type:none}ol.lst-kix_5zdork13zaj5-0{list-style-type:none}ol.lst-kix_pzmtiq5h0915-3.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-3 0}ol.lst-kix_6fc6u2jowkph-1{list-style-type:none}ol.lst-kix_5zdork13zaj5-7{list-style-type:none}ol.lst-kix_6fc6u2jowkph-0{list-style-type:none}ol.lst-kix_5zdork13zaj5-6{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-1.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-1 0}ol.lst-kix_5zdork13zaj5-8{list-style-type:none}ol.lst-kix_6fc6u2jowkph-5{list-style-type:none}ol.lst-kix_5zdork13zaj5-3{list-style-type:none}ol.lst-kix_6fc6u2jowkph-4{list-style-type:none}ol.lst-kix_5zdork13zaj5-2{list-style-type:none}ol.lst-kix_6fc6u2jowkph-3{list-style-type:none}ol.lst-kix_5zdork13zaj5-5{list-style-type:none}.lst-kix_wz4xrdza29b-8>li:before{content:"\0025a0  "}ol.lst-kix_6fc6u2jowkph-2{list-style-type:none}ol.lst-kix_5zdork13zaj5-4{list-style-type:none}.lst-kix_ewcld7rry2cw-1>li:before{content:"\0025cb  "}ol.lst-kix_xygzk5z3cyvz-6{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-7{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-8{list-style-type:none}.lst-kix_ewcld7rry2cw-5>li:before{content:"\0025a0  "}.lst-kix_6jgx19e9u9pe-2>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-2}.lst-kix_ewcld7rry2cw-7>li:before{content:"\0025cb  "}.lst-kix_6v7qjvftgbe8-2>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-2}.lst-kix_6fc6u2jowkph-5>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-5}ol.lst-kix_6jgx19e9u9pe-1.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-1 0}ul.lst-kix_u56eprq9ell0-0{list-style-type:none}ul.lst-kix_u56eprq9ell0-2{list-style-type:none}.lst-kix_tb82mrxazni-1>li:before{content:"\0025cb  "}ol.lst-kix_5zdork13zaj5-4.start{counter-reset:lst-ctn-kix_5zdork13zaj5-4 0}ul.lst-kix_u56eprq9ell0-1{list-style-type:none}.lst-kix_xygzk5z3cyvz-6>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-6}ul.lst-kix_u56eprq9ell0-4{list-style-type:none}ul.lst-kix_u56eprq9ell0-3{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-2{list-style-type:none}ul.lst-kix_u56eprq9ell0-6{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-3{list-style-type:none}ul.lst-kix_u56eprq9ell0-5{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-4{list-style-type:none}ul.lst-kix_u56eprq9ell0-8{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-5{list-style-type:none}ul.lst-kix_u56eprq9ell0-7{list-style-type:none}.lst-kix_hxgng6in8mo4-5>li:before{content:"\0025a0  "}.lst-kix_hxgng6in8mo4-7>li:before{content:"\0025cb  "}.lst-kix_ewcld7rry2cw-3>li:before{content:"\0025cf  "}ol.lst-kix_6v7qjvftgbe8-5.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-5 0}ol.lst-kix_xygzk5z3cyvz-0{list-style-type:none}.lst-kix_8irgp2z20781-6>li{counter-increment:lst-ctn-kix_8irgp2z20781-6}.lst-kix_wz4xrdza29b-0>li:before{content:"\0025cf  "}ol.lst-kix_xygzk5z3cyvz-1{list-style-type:none}.lst-kix_pzmtiq5h0915-5>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-5}ol.lst-kix_5zdork13zaj5-1.start{counter-reset:lst-ctn-kix_5zdork13zaj5-1 0}.lst-kix_7fhxg8i5msmt-8>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-8,lower-roman) ". "}.lst-kix_8irgp2z20781-4>li:before{content:"(" counter(lst-ctn-kix_8irgp2z20781-4,lower-latin) ") "}.lst-kix_8irgp2z20781-8>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-8,lower-roman) ". "}.lst-kix_36fxx9lqc91n-3>li:before{content:"\0025cf  "}.lst-kix_8irgp2z20781-6>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-6,decimal) ". "}.lst-kix_36fxx9lqc91n-5>li:before{content:"\0025a0  "}.lst-kix_36fxx9lqc91n-7>li:before{content:"\0025cb  "}.lst-kix_6v7qjvftgbe8-1>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-1}.lst-kix_pzmtiq5h0915-6>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-6}.lst-kix_8irgp2z20781-0>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-0,decimal) ") "}ol.lst-kix_6v7qjvftgbe8-8{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-7{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-6{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-5{list-style-type:none}.lst-kix_8irgp2z20781-2>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-2,lower-roman) ") "}ol.lst-kix_6v7qjvftgbe8-4{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-7.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-7 0}ol.lst-kix_6v7qjvftgbe8-3{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-2{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-1{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-0{list-style-type:none}.lst-kix_68qsl6zcqxrq-5>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-5}.lst-kix_7fhxg8i5msmt-3>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-3}.lst-kix_pkkwt0mfnd4r-5>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-5}ol.lst-kix_6fc6u2jowkph-7.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-7 0}.lst-kix_d8lzxbbe1553-0>li:before{content:"\0025cf  "}.lst-kix_3vftmdlxcpj0-7>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-7,lower-latin) ". "}.lst-kix_8irgp2z20781-5>li{counter-increment:lst-ctn-kix_8irgp2z20781-5}ol.lst-kix_pzmtiq5h0915-0.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-0 0}.lst-kix_d8lzxbbe1553-2>li:before{content:"\0025a0  "}.lst-kix_d8lzxbbe1553-4>li:before{content:"\0025cb  "}ol.lst-kix_xygzk5z3cyvz-0.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-0 0}.lst-kix_3vftmdlxcpj0-3>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-3,decimal) ". "}.lst-kix_3vftmdlxcpj0-5>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-5,lower-roman) ". "}ol.lst-kix_w5k728jy05vp-0.start{counter-reset:lst-ctn-kix_w5k728jy05vp-0 0}ol.lst-kix_6jgx19e9u9pe-3.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-3 0}.lst-kix_3vftmdlxcpj0-1>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-1,lower-latin) ". "}.lst-kix_d8lzxbbe1553-6>li:before{content:"\0025cf  "}.lst-kix_pzmtiq5h0915-8>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-8}.lst-kix_w5k728jy05vp-5>li{counter-increment:lst-ctn-kix_w5k728jy05vp-5}.lst-kix_jwv9q4tqofnu-5>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-5,lower-roman) ". "}.lst-kix_3vftmdlxcpj0-8>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-8}ol.lst-kix_pkkwt0mfnd4r-0{list-style-type:none}.lst-kix_6fc6u2jowkph-0>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-0,decimal) ". "}.lst-kix_5zdork13zaj5-1>li{counter-increment:lst-ctn-kix_5zdork13zaj5-1}.lst-kix_d8lzxbbe1553-8>li:before{content:"\0025a0  "}ol.lst-kix_pkkwt0mfnd4r-2{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-1{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-4{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-3{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-6{list-style-type:none}.lst-kix_jwv9q4tqofnu-6>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-6,decimal) ". "}ol.lst-kix_8irgp2z20781-8{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-5{list-style-type:none}ol.lst-kix_8irgp2z20781-7{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-8{list-style-type:none}.lst-kix_svmmnj1snhr2-4>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-4}ol.lst-kix_pkkwt0mfnd4r-7{list-style-type:none}.lst-kix_jwv9q4tqofnu-7>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-7}.lst-kix_6fc6u2jowkph-4>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-4,lower-latin) ". "}.lst-kix_xygzk5z3cyvz-0>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-0,decimal) ". "}.lst-kix_6fc6u2jowkph-3>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-3,decimal) ". "}.lst-kix_6fc6u2jowkph-7>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-7,lower-latin) ". "}ol.lst-kix_3vftmdlxcpj0-8.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-8 0}ol.lst-kix_5zdork13zaj5-3.start{counter-reset:lst-ctn-kix_5zdork13zaj5-3 0}.lst-kix_6v7qjvftgbe8-8>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-8}ol.lst-kix_8irgp2z20781-4.start{counter-reset:lst-ctn-kix_8irgp2z20781-4 0}.lst-kix_hii6fafh6hm-6>li:before{content:"\0025cf  "}.lst-kix_wchaiekwhio-2>li:before{content:"\0025a0  "}.lst-kix_xygzk5z3cyvz-3>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-3,decimal) ". "}.lst-kix_xygzk5z3cyvz-7>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-7,lower-latin) ". "}.lst-kix_xygzk5z3cyvz-4>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-4,lower-latin) ". "}.lst-kix_xygzk5z3cyvz-8>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-8,lower-roman) ". "}.lst-kix_6jgx19e9u9pe-8>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-8}ol.lst-kix_jwv9q4tqofnu-7.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-7 0}.lst-kix_6fc6u2jowkph-8>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-8,lower-roman) ". "}.lst-kix_wchaiekwhio-6>li:before{content:"\0025cf  "}ol.lst-kix_pkkwt0mfnd4r-0.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-0 0}ul.lst-kix_36fxx9lqc91n-1{list-style-type:none}.lst-kix_6fc6u2jowkph-8>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-8}ul.lst-kix_36fxx9lqc91n-2{list-style-type:none}.lst-kix_3vftmdlxcpj0-6>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-6}ul.lst-kix_36fxx9lqc91n-0{list-style-type:none}.lst-kix_wchaiekwhio-7>li:before{content:"\0025cb  "}ul.lst-kix_36fxx9lqc91n-5{list-style-type:none}ol.lst-kix_pzmtiq5h0915-2.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-2 0}ul.lst-kix_36fxx9lqc91n-6{list-style-type:none}ul.lst-kix_36fxx9lqc91n-3{list-style-type:none}ul.lst-kix_36fxx9lqc91n-4{list-style-type:none}.lst-kix_xygzk5z3cyvz-3>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-3}ol.lst-kix_3vftmdlxcpj0-2.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-2 0}ol.lst-kix_6jgx19e9u9pe-5.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-5 0}.lst-kix_68qsl6zcqxrq-0>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-0}ul.lst-kix_36fxx9lqc91n-7{list-style-type:none}ul.lst-kix_36fxx9lqc91n-8{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-1.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-1 0}.lst-kix_svmmnj1snhr2-2>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-2}ol.lst-kix_68qsl6zcqxrq-3.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-3 0}.lst-kix_wchaiekwhio-3>li:before{content:"\0025cf  "}.lst-kix_6fc6u2jowkph-6>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-6}ol.lst-kix_6jgx19e9u9pe-6{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-5{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-8{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-7{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-0{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-2{list-style-type:none}.lst-kix_jwv9q4tqofnu-5>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-5}ol.lst-kix_6jgx19e9u9pe-1{list-style-type:none}.lst-kix_68qsl6zcqxrq-7>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-7}ol.lst-kix_6jgx19e9u9pe-4{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-3{list-style-type:none}ul.lst-kix_wz4xrdza29b-3{list-style-type:none}ul.lst-kix_wz4xrdza29b-2{list-style-type:none}ul.lst-kix_wz4xrdza29b-5{list-style-type:none}.lst-kix_pzmtiq5h0915-3>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-3,decimal) ". "}ul.lst-kix_wz4xrdza29b-4{list-style-type:none}ul.lst-kix_wz4xrdza29b-1{list-style-type:none}ul.lst-kix_wz4xrdza29b-0{list-style-type:none}.lst-kix_xygzk5z3cyvz-5>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-5}ul.lst-kix_wz4xrdza29b-7{list-style-type:none}ul.lst-kix_wz4xrdza29b-6{list-style-type:none}ol.lst-kix_w5k728jy05vp-4.start{counter-reset:lst-ctn-kix_w5k728jy05vp-4 0}.lst-kix_pzmtiq5h0915-0>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-0,decimal) ". "}ul.lst-kix_wz4xrdza29b-8{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-8.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-8 0}ol.lst-kix_jwv9q4tqofnu-0.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-0 0}ol.lst-kix_w5k728jy05vp-3.start{counter-reset:lst-ctn-kix_w5k728jy05vp-3 0}ol.lst-kix_8irgp2z20781-5.start{counter-reset:lst-ctn-kix_8irgp2z20781-5 0}ol.lst-kix_6jgx19e9u9pe-6.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-6 0}ol.lst-kix_3vftmdlxcpj0-1.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-1 0}.lst-kix_xcsisnkihklz-4>li:before{content:"\0025cb  "}.lst-kix_pzmtiq5h0915-4>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-4,lower-latin) ". "}ol.lst-kix_jwv9q4tqofnu-8{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-7{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-6{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-5{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-4{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-3{list-style-type:none}.lst-kix_xcsisnkihklz-1>li:before{content:"\0025cb  "}ol.lst-kix_jwv9q4tqofnu-2{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-1{list-style-type:none}.lst-kix_6v7qjvftgbe8-3>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-3}ol.lst-kix_jwv9q4tqofnu-0{list-style-type:none}.lst-kix_pzmtiq5h0915-1>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-1}.lst-kix_pzmtiq5h0915-7>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-7,lower-latin) ". "}.lst-kix_xcsisnkihklz-0>li:before{content:"\0025cf  "}ol.lst-kix_jwv9q4tqofnu-6.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-6 0}.lst-kix_pzmtiq5h0915-8>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-8,lower-roman) ". "}ol.lst-kix_3vftmdlxcpj0-7.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-7 0}ol.lst-kix_68qsl6zcqxrq-2.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-2 0}.lst-kix_6jgx19e9u9pe-1>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-1,lower-latin) ". "}.lst-kix_tb82mrxazni-8>li:before{content:"\0025a0  "}.lst-kix_hxgng6in8mo4-0>li:before{content:"\0025cf  "}.lst-kix_hxgng6in8mo4-4>li:before{content:"\0025cb  "}.lst-kix_tb82mrxazni-4>li:before{content:"\0025cb  "}.lst-kix_wz4xrdza29b-3>li:before{content:"\0025cf  "}ol.lst-kix_68qsl6zcqxrq-5.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-5 0}.lst-kix_w5k728jy05vp-0>li{counter-increment:lst-ctn-kix_w5k728jy05vp-0}.lst-kix_ewcld7rry2cw-8>li:before{content:"\0025a0  "}ol.lst-kix_jwv9q4tqofnu-5.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-5 0}.lst-kix_6jgx19e9u9pe-5>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-5,lower-roman) ". "}.lst-kix_wz4xrdza29b-7>li:before{content:"\0025cb  "}ol.lst-kix_pzmtiq5h0915-6.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-6 0}.lst-kix_xcsisnkihklz-8>li:before{content:"\0025a0  "}.lst-kix_ewcld7rry2cw-0>li:before{content:"\0025cf  "}.lst-kix_6v7qjvftgbe8-5>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-5}ol.lst-kix_3vftmdlxcpj0-6.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-6 0}ol.lst-kix_w5k728jy05vp-5.start{counter-reset:lst-ctn-kix_w5k728jy05vp-5 0}.lst-kix_3vftmdlxcpj0-1>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-1}.lst-kix_3vftmdlxcpj0-3>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-3}.lst-kix_pzmtiq5h0915-3>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-3}.lst-kix_tb82mrxazni-0>li:before{content:"\0025cf  "}.lst-kix_hxgng6in8mo4-8>li:before{content:"\0025a0  "}ol.lst-kix_w5k728jy05vp-8.start{counter-reset:lst-ctn-kix_w5k728jy05vp-8 0}ol.lst-kix_8irgp2z20781-3.start{counter-reset:lst-ctn-kix_8irgp2z20781-3 0}.lst-kix_7fhxg8i5msmt-5>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-5}.lst-kix_ewcld7rry2cw-4>li:before{content:"\0025cb  "}ol.lst-kix_8irgp2z20781-0.start{counter-reset:lst-ctn-kix_8irgp2z20781-0 0}ol.lst-kix_5zdork13zaj5-7.start{counter-reset:lst-ctn-kix_5zdork13zaj5-7 0}ol.lst-kix_5zdork13zaj5-8.start{counter-reset:lst-ctn-kix_5zdork13zaj5-8 0}.lst-kix_7fhxg8i5msmt-7>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-7,lower-latin) ". "}.lst-kix_8irgp2z20781-5>li:before{content:"(" counter(lst-ctn-kix_8irgp2z20781-5,lower-roman) ") "}.lst-kix_6v7qjvftgbe8-7>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-7,lower-latin) ". "}.lst-kix_6v7qjvftgbe8-3>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-3,decimal) ". "}.lst-kix_36fxx9lqc91n-2>li:before{content:"\0025a0  "}.lst-kix_5zdork13zaj5-4>li{counter-increment:lst-ctn-kix_5zdork13zaj5-4}ol.lst-kix_8irgp2z20781-2.start{counter-reset:lst-ctn-kix_8irgp2z20781-2 0}.lst-kix_pkkwt0mfnd4r-1>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-1,lower-latin) ". "}.lst-kix_36fxx9lqc91n-6>li:before{content:"\0025cf  "}ul.lst-kix_tb82mrxazni-8{list-style-type:none}ul.lst-kix_tb82mrxazni-7{list-style-type:none}.lst-kix_l0zuj3yh3ryb-3>li:before{content:"\0025cf  "}ol.lst-kix_pzmtiq5h0915-8.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-8 0}ul.lst-kix_tb82mrxazni-6{list-style-type:none}ul.lst-kix_tb82mrxazni-5{list-style-type:none}ol.lst-kix_w5k728jy05vp-0{list-style-type:none}ul.lst-kix_tb82mrxazni-4{list-style-type:none}ul.lst-kix_tb82mrxazni-3{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-4.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-4 0}ul.lst-kix_tb82mrxazni-2{list-style-type:none}ol.lst-kix_w5k728jy05vp-7.start{counter-reset:lst-ctn-kix_w5k728jy05vp-7 0}ul.lst-kix_tb82mrxazni-1{list-style-type:none}ol.lst-kix_w5k728jy05vp-4{list-style-type:none}ul.lst-kix_tb82mrxazni-0{list-style-type:none}ol.lst-kix_w5k728jy05vp-3{list-style-type:none}ol.lst-kix_w5k728jy05vp-2{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-2.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-2 0}.lst-kix_8irgp2z20781-1>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-1,lower-latin) ") "}.lst-kix_l0zuj3yh3ryb-7>li:before{content:"\0025cb  "}ol.lst-kix_3vftmdlxcpj0-3.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-3 0}ol.lst-kix_w5k728jy05vp-1{list-style-type:none}ol.lst-kix_w5k728jy05vp-8{list-style-type:none}.lst-kix_pkkwt0mfnd4r-5>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-5,lower-roman) ". "}ol.lst-kix_w5k728jy05vp-7{list-style-type:none}ol.lst-kix_w5k728jy05vp-6{list-style-type:none}ol.lst-kix_w5k728jy05vp-5{list-style-type:none}.lst-kix_w5k728jy05vp-8>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-8,lower-roman) ". "}.lst-kix_pkkwt0mfnd4r-8>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-8}.lst-kix_jwv9q4tqofnu-0>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-0}.lst-kix_68qsl6zcqxrq-2>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-2}.lst-kix_d8lzxbbe1553-1>li:before{content:"\0025cb  "}.lst-kix_w5k728jy05vp-7>li{counter-increment:lst-ctn-kix_w5k728jy05vp-7}ol.lst-kix_3vftmdlxcpj0-4.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-4 0}.lst-kix_hii6fafh6hm-2>li:before{content:"\0025a0  "}.lst-kix_3vftmdlxcpj0-6>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-6,decimal) ". "}.lst-kix_8irgp2z20781-2>li{counter-increment:lst-ctn-kix_8irgp2z20781-2}ol.lst-kix_8irgp2z20781-6{list-style-type:none}ol.lst-kix_8irgp2z20781-5{list-style-type:none}.lst-kix_d8lzxbbe1553-5>li:before{content:"\0025a0  "}ol.lst-kix_jwv9q4tqofnu-3.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-3 0}ol.lst-kix_8irgp2z20781-4{list-style-type:none}ol.lst-kix_8irgp2z20781-3{list-style-type:none}ol.lst-kix_8irgp2z20781-2{list-style-type:none}ol.lst-kix_8irgp2z20781-1{list-style-type:none}ol.lst-kix_8irgp2z20781-0{list-style-type:none}ol.lst-kix_pzmtiq5h0915-7.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-7 0}.lst-kix_3vftmdlxcpj0-2>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-2,lower-roman) ". "}.lst-kix_6fc6u2jowkph-1>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-1}.lst-kix_jwv9q4tqofnu-2>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-2,lower-roman) ". "}ul.lst-kix_w6yj8blbe06x-6{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-1.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-1 0}ul.lst-kix_w6yj8blbe06x-7{list-style-type:none}.lst-kix_68qsl6zcqxrq-4>li:before{content:"(" counter(lst-ctn-kix_68qsl6zcqxrq-4,lower-latin) ") "}.lst-kix_68qsl6zcqxrq-5>li:before{content:"(" counter(lst-ctn-kix_68qsl6zcqxrq-5,lower-roman) ") "}ol.lst-kix_3vftmdlxcpj0-5.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-5 0}.lst-kix_svmmnj1snhr2-8>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-8,lower-roman) ". "}ul.lst-kix_w6yj8blbe06x-4{list-style-type:none}ul.lst-kix_w6yj8blbe06x-5{list-style-type:none}.lst-kix_6jgx19e9u9pe-7>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-7}.lst-kix_68qsl6zcqxrq-6>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-6,decimal) ". "}ol.lst-kix_6jgx19e9u9pe-2.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-2 0}ul.lst-kix_w6yj8blbe06x-8{list-style-type:none}.lst-kix_68qsl6zcqxrq-2>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-2,lower-roman) ") "}.lst-kix_68qsl6zcqxrq-1>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-1,lower-latin) ") "}ol.lst-kix_6fc6u2jowkph-3.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-3 0}.lst-kix_68qsl6zcqxrq-8>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-8,lower-roman) ". "}.lst-kix_svmmnj1snhr2-4>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-4,lower-latin) ". "}ol.lst-kix_svmmnj1snhr2-6.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-6 0}ol.lst-kix_jwv9q4tqofnu-4.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-4 0}.lst-kix_68qsl6zcqxrq-7>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-7,lower-latin) ". "}.lst-kix_svmmnj1snhr2-2>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-2,lower-roman) ". "}.lst-kix_svmmnj1snhr2-3>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-3,decimal) ". "}.lst-kix_68qsl6zcqxrq-0>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-0,decimal) ") "}ol.lst-kix_w5k728jy05vp-6.start{counter-reset:lst-ctn-kix_w5k728jy05vp-6 0}.lst-kix_svmmnj1snhr2-3>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-3}ol.lst-kix_8irgp2z20781-1.start{counter-reset:lst-ctn-kix_8irgp2z20781-1 0}.lst-kix_svmmnj1snhr2-5>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-5,lower-roman) ". "}.lst-kix_68qsl6zcqxrq-3>li:before{content:"(" counter(lst-ctn-kix_68qsl6zcqxrq-3,decimal) ") "}.lst-kix_svmmnj1snhr2-6>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-6,decimal) ". "}.lst-kix_svmmnj1snhr2-7>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-7,lower-latin) ". "}.lst-kix_w5k728jy05vp-2>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-2,lower-roman) ". "}ol.lst-kix_5zdork13zaj5-0.start{counter-reset:lst-ctn-kix_5zdork13zaj5-0 0}.lst-kix_w5k728jy05vp-3>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-3,decimal) ". "}ol.lst-kix_w5k728jy05vp-1.start{counter-reset:lst-ctn-kix_w5k728jy05vp-1 0}ol.lst-kix_7fhxg8i5msmt-2.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-2 0}.lst-kix_w5k728jy05vp-4>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-4,lower-latin) ". "}.lst-kix_w5k728jy05vp-1>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-1,lower-latin) ". "}ul.lst-kix_w6yj8blbe06x-2{list-style-type:none}ul.lst-kix_w6yj8blbe06x-3{list-style-type:none}ul.lst-kix_w6yj8blbe06x-0{list-style-type:none}ul.lst-kix_w6yj8blbe06x-1{list-style-type:none}.lst-kix_xygzk5z3cyvz-0>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-0}.lst-kix_w5k728jy05vp-0>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-0,decimal) ". "}.lst-kix_w5k728jy05vp-8>li{counter-increment:lst-ctn-kix_w5k728jy05vp-8}ol.lst-kix_6jgx19e9u9pe-7.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-7 0}ol.lst-kix_8irgp2z20781-6.start{counter-reset:lst-ctn-kix_8irgp2z20781-6 0}.lst-kix_8irgp2z20781-0>li{counter-increment:lst-ctn-kix_8irgp2z20781-0}ol.lst-kix_68qsl6zcqxrq-0.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-0 0}.lst-kix_6fc6u2jowkph-0>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-0}ol.lst-kix_3vftmdlxcpj0-0.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-0 0}ol.lst-kix_pzmtiq5h0915-4.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-4 0}ol.lst-kix_svmmnj1snhr2-1.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-1 0}.lst-kix_8irgp2z20781-7>li{counter-increment:lst-ctn-kix_8irgp2z20781-7}ol.lst-kix_68qsl6zcqxrq-7.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-7 0}.lst-kix_pkkwt0mfnd4r-3>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-3}.lst-kix_svmmnj1snhr2-7>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-7}.lst-kix_5zdork13zaj5-0>li{counter-increment:lst-ctn-kix_5zdork13zaj5-0}.lst-kix_5zdork13zaj5-8>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-8,lower-roman) ". "}ol.lst-kix_5zdork13zaj5-5.start{counter-reset:lst-ctn-kix_5zdork13zaj5-5 0}.lst-kix_5zdork13zaj5-2>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-2,lower-roman) ". "}.lst-kix_svmmnj1snhr2-0>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-0,decimal) ". "}.lst-kix_svmmnj1snhr2-1>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-1,lower-latin) ". "}.lst-kix_5zdork13zaj5-3>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-3,decimal) ". "}.lst-kix_6jgx19e9u9pe-0>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-0}.lst-kix_6jgx19e9u9pe-3>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-3}.lst-kix_5zdork13zaj5-4>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-4,lower-latin) ". "}.lst-kix_6v7qjvftgbe8-0>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-0}.lst-kix_5zdork13zaj5-5>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-5,lower-roman) ". "}.lst-kix_5zdork13zaj5-7>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-7,lower-latin) ". "}.lst-kix_pzmtiq5h0915-7>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-7}.lst-kix_5zdork13zaj5-6>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-6,decimal) ". "}ol.lst-kix_pzmtiq5h0915-7{list-style-type:none}.lst-kix_6jgx19e9u9pe-2>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-2,lower-roman) ". "}.lst-kix_6fc6u2jowkph-3>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-3}ol.lst-kix_pzmtiq5h0915-6{list-style-type:none}ol.lst-kix_pzmtiq5h0915-8{list-style-type:none}.lst-kix_jwv9q4tqofnu-2>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-2}.lst-kix_5zdork13zaj5-7>li{counter-increment:lst-ctn-kix_5zdork13zaj5-7}.lst-kix_6jgx19e9u9pe-6>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-6,decimal) ". "}ol.lst-kix_pzmtiq5h0915-1{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-8.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-8 0}ol.lst-kix_pzmtiq5h0915-0{list-style-type:none}ol.lst-kix_pzmtiq5h0915-3{list-style-type:none}.lst-kix_6jgx19e9u9pe-0>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-0,decimal) ". "}ol.lst-kix_xygzk5z3cyvz-1.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-1 0}ol.lst-kix_pzmtiq5h0915-2{list-style-type:none}.lst-kix_6jgx19e9u9pe-8>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-8,lower-roman) ". "}ol.lst-kix_pzmtiq5h0915-5{list-style-type:none}ol.lst-kix_pzmtiq5h0915-4{list-style-type:none}ul.lst-kix_ewcld7rry2cw-7{list-style-type:none}.lst-kix_8irgp2z20781-4>li{counter-increment:lst-ctn-kix_8irgp2z20781-4}ul.lst-kix_ewcld7rry2cw-6{list-style-type:none}.lst-kix_5zdork13zaj5-8>li{counter-increment:lst-ctn-kix_5zdork13zaj5-8}ul.lst-kix_ewcld7rry2cw-8{list-style-type:none}.lst-kix_5zdork13zaj5-1>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-1,lower-latin) ". "}.lst-kix_pkkwt0mfnd4r-6>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-6}.lst-kix_xcsisnkihklz-5>li:before{content:"\0025a0  "}.lst-kix_xcsisnkihklz-7>li:before{content:"\0025cb  "}.lst-kix_6jgx19e9u9pe-4>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-4,lower-latin) ". "}.lst-kix_xygzk5z3cyvz-8>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-8}.lst-kix_pkkwt0mfnd4r-8>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-8,lower-roman) ". "}ul.lst-kix_ewcld7rry2cw-1{list-style-type:none}ul.lst-kix_ewcld7rry2cw-0{list-style-type:none}ul.lst-kix_ewcld7rry2cw-3{list-style-type:none}ul.lst-kix_ewcld7rry2cw-2{list-style-type:none}ul.lst-kix_ewcld7rry2cw-5{list-style-type:none}ul.lst-kix_ewcld7rry2cw-4{list-style-type:none}.lst-kix_68qsl6zcqxrq-6>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-6}.lst-kix_pzmtiq5h0915-0>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-0}.lst-kix_7fhxg8i5msmt-2>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-2}.lst-kix_3vftmdlxcpj0-5>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-5}ol.lst-kix_svmmnj1snhr2-2{list-style-type:none}.lst-kix_6v7qjvftgbe8-6>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-6,decimal) ". "}ol.lst-kix_svmmnj1snhr2-3{list-style-type:none}ol.lst-kix_svmmnj1snhr2-0{list-style-type:none}ol.lst-kix_svmmnj1snhr2-1{list-style-type:none}.lst-kix_6v7qjvftgbe8-4>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-4,lower-latin) ". "}ol.lst-kix_6v7qjvftgbe8-6.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-6 0}.lst-kix_l0zuj3yh3ryb-8>li:before{content:"\0025a0  "}.lst-kix_pkkwt0mfnd4r-0>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-0,decimal) ". "}.lst-kix_svmmnj1snhr2-0>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-0}ol.lst-kix_svmmnj1snhr2-8{list-style-type:none}ol.lst-kix_svmmnj1snhr2-6{list-style-type:none}.lst-kix_svmmnj1snhr2-6>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-6}ul.lst-kix_xcsisnkihklz-7{list-style-type:none}.lst-kix_pkkwt0mfnd4r-2>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-2,lower-roman) ". "}ol.lst-kix_svmmnj1snhr2-7{list-style-type:none}ul.lst-kix_xcsisnkihklz-6{list-style-type:none}ol.lst-kix_6fc6u2jowkph-8.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-8 0}ol.lst-kix_svmmnj1snhr2-4{list-style-type:none}ol.lst-kix_svmmnj1snhr2-5{list-style-type:none}ul.lst-kix_xcsisnkihklz-8{list-style-type:none}.lst-kix_6v7qjvftgbe8-7>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-7}.lst-kix_l0zuj3yh3ryb-4>li:before{content:"\0025cb  "}ul.lst-kix_xcsisnkihklz-3{list-style-type:none}.lst-kix_pkkwt0mfnd4r-4>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-4,lower-latin) ". "}ul.lst-kix_xcsisnkihklz-2{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-4.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-4 0}ul.lst-kix_xcsisnkihklz-5{list-style-type:none}.lst-kix_w5k728jy05vp-5>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-5,lower-roman) ". "}.lst-kix_w5k728jy05vp-7>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-7,lower-latin) ". "}ul.lst-kix_xcsisnkihklz-4{list-style-type:none}.lst-kix_6v7qjvftgbe8-0>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-0,decimal) ". "}ol.lst-kix_pzmtiq5h0915-1.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-1 0}ul.lst-kix_xcsisnkihklz-1{list-style-type:none}ul.lst-kix_xcsisnkihklz-0{list-style-type:none}.lst-kix_6v7qjvftgbe8-2>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-2,lower-roman) ". "}.lst-kix_pkkwt0mfnd4r-6>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-6,decimal) ". "}.lst-kix_l0zuj3yh3ryb-6>li:before{content:"\0025cf  "}.lst-kix_hii6fafh6hm-5>li:before{content:"\0025a0  "}ol.lst-kix_pkkwt0mfnd4r-2.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-2 0}ol.lst-kix_5zdork13zaj5-2.start{counter-reset:lst-ctn-kix_5zdork13zaj5-2 0}.lst-kix_hii6fafh6hm-3>li:before{content:"\0025cf  "}.lst-kix_xygzk5z3cyvz-7>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-7}.lst-kix_hii6fafh6hm-1>li:before{content:"\0025cb  "}.lst-kix_w5k728jy05vp-4>li{counter-increment:lst-ctn-kix_w5k728jy05vp-4}.lst-kix_jwv9q4tqofnu-3>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-3}.lst-kix_xygzk5z3cyvz-1>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-1}.lst-kix_l0zuj3yh3ryb-2>li:before{content:"\0025a0  "}.lst-kix_l0zuj3yh3ryb-0>li:before{content:"\0025cf  "}.lst-kix_6fc6u2jowkph-4>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-4}ol.lst-kix_8irgp2z20781-8.start{counter-reset:lst-ctn-kix_8irgp2z20781-8 0}ol.lst-kix_7fhxg8i5msmt-0.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-0 0}.lst-kix_jwv9q4tqofnu-3>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-3,decimal) ". "}ol.lst-kix_7fhxg8i5msmt-8{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-6{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-7{list-style-type:none}.lst-kix_jwv9q4tqofnu-1>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-1,lower-latin) ". "}.lst-kix_jwv9q4tqofnu-0>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-0,decimal) ". "}.lst-kix_jwv9q4tqofnu-4>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-4,lower-latin) ". "}ul.lst-kix_l0zuj3yh3ryb-0{list-style-type:none}ul.lst-kix_l0zuj3yh3ryb-1{list-style-type:none}.lst-kix_jwv9q4tqofnu-7>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-7,lower-latin) ". "}ol.lst-kix_7fhxg8i5msmt-0{list-style-type:none}.lst-kix_3vftmdlxcpj0-0>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-0,decimal) ". "}ol.lst-kix_7fhxg8i5msmt-1{list-style-type:none}.lst-kix_6fc6u2jowkph-2>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-2,lower-roman) ". "}ol.lst-kix_7fhxg8i5msmt-4{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-5{list-style-type:none}.lst-kix_6fc6u2jowkph-1>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-1,lower-latin) ". "}ol.lst-kix_7fhxg8i5msmt-2{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-3{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-4.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-4 0}.lst-kix_pkkwt0mfnd4r-0>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-0}ol.lst-kix_pkkwt0mfnd4r-5.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-5 0}.lst-kix_jwv9q4tqofnu-8>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-8,lower-roman) ". "}.lst-kix_xygzk5z3cyvz-1>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-1,lower-latin) ". "}ol.lst-kix_xygzk5z3cyvz-2.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-2 0}.lst-kix_6fc6u2jowkph-6>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-6,decimal) ". "}.lst-kix_xygzk5z3cyvz-2>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-2,lower-roman) ". "}.lst-kix_6fc6u2jowkph-5>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-5,lower-roman) ". "}ol.lst-kix_svmmnj1snhr2-3.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-3 0}.lst-kix_xygzk5z3cyvz-5>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-5,lower-roman) ". "}.lst-kix_wchaiekwhio-0>li:before{content:"\0025cf  "}.lst-kix_hii6fafh6hm-7>li:before{content:"\0025cb  "}.lst-kix_wchaiekwhio-1>li:before{content:"\0025cb  "}.lst-kix_wchaiekwhio-5>li:before{content:"\0025a0  "}ol.lst-kix_6fc6u2jowkph-0.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-0 0}.lst-kix_hii6fafh6hm-8>li:before{content:"\0025a0  "}.lst-kix_xygzk5z3cyvz-6>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-6,decimal) ". "}ol.lst-kix_6fc6u2jowkph-6.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-6 0}ul.lst-kix_l0zuj3yh3ryb-2{list-style-type:none}.lst-kix_7fhxg8i5msmt-8>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-8}ul.lst-kix_l0zuj3yh3ryb-3{list-style-type:none}.lst-kix_6v7qjvftgbe8-8>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-8,lower-roman) ". "}ul.lst-kix_l0zuj3yh3ryb-4{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-8.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-8 0}ul.lst-kix_l0zuj3yh3ryb-5{list-style-type:none}.lst-kix_wchaiekwhio-4>li:before{content:"\0025cb  "}ul.lst-kix_l0zuj3yh3ryb-6{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-5.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-5 0}ul.lst-kix_l0zuj3yh3ryb-7{list-style-type:none}ul.lst-kix_l0zuj3yh3ryb-8{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-8{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-6{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-7{list-style-type:none}ol.lst-kix_svmmnj1snhr2-8.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-8 0}ol.lst-kix_68qsl6zcqxrq-4{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-5{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-2{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-3{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-0.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-0 0}.lst-kix_pkkwt0mfnd4r-4>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-4}ol.lst-kix_68qsl6zcqxrq-0{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-1{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-3.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-3 0}.lst-kix_7fhxg8i5msmt-1>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-1}.lst-kix_w5k728jy05vp-3>li{counter-increment:lst-ctn-kix_w5k728jy05vp-3}.lst-kix_pzmtiq5h0915-1>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-1,lower-latin) ". "}.lst-kix_wchaiekwhio-8>li:before{content:"\0025a0  "}ol.lst-kix_6fc6u2jowkph-5.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-5 0}.lst-kix_3vftmdlxcpj0-4>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-4}.lst-kix_pzmtiq5h0915-2>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-2,lower-roman) ". "}.lst-kix_8irgp2z20781-1>li{counter-increment:lst-ctn-kix_8irgp2z20781-1}.lst-kix_5zdork13zaj5-3>li{counter-increment:lst-ctn-kix_5zdork13zaj5-3}.lst-kix_pzmtiq5h0915-6>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-6,decimal) ". "}ol.lst-kix_pkkwt0mfnd4r-4.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-4 0}.lst-kix_pzmtiq5h0915-5>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-5,lower-roman) ". "}ul.lst-kix_d8lzxbbe1553-4{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-1{list-style-type:none}ul.lst-kix_d8lzxbbe1553-5{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-0{list-style-type:none}.lst-kix_6jgx19e9u9pe-6>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-6}.lst-kix_xcsisnkihklz-2>li:before{content:"\0025a0  "}.lst-kix_xcsisnkihklz-3>li:before{content:"\0025cf  "}ul.lst-kix_d8lzxbbe1553-6{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-3{list-style-type:none}ul.lst-kix_d8lzxbbe1553-7{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-2{list-style-type:none}ul.lst-kix_d8lzxbbe1553-0{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-5{list-style-type:none}ul.lst-kix_d8lzxbbe1553-1{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-4{list-style-type:none}ul.lst-kix_d8lzxbbe1553-2{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-7{list-style-type:none}ul.lst-kix_d8lzxbbe1553-3{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-6{list-style-type:none}.lst-kix_pzmtiq5h0915-4>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-4}ol.lst-kix_3vftmdlxcpj0-8{list-style-type:none}.lst-kix_6v7qjvftgbe8-6>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-6}ul.lst-kix_d8lzxbbe1553-8{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-3.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-3 0}.lst-kix_wz4xrdza29b-5>li:before{content:"\0025a0  "}.lst-kix_pzmtiq5h0915-2>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-2}.lst-kix_tb82mrxazni-6>li:before{content:"\0025cf  "}.lst-kix_6jgx19e9u9pe-3>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-3,decimal) ". "}.lst-kix_pkkwt0mfnd4r-7>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-7}.lst-kix_tb82mrxazni-2>li:before{content:"\0025a0  "}.lst-kix_6jgx19e9u9pe-7>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-7,lower-latin) ". "}.lst-kix_hxgng6in8mo4-2>li:before{content:"\0025a0  "}.lst-kix_6v7qjvftgbe8-4>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-4}.lst-kix_jwv9q4tqofnu-1>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-1}.lst-kix_5zdork13zaj5-0>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-0,decimal) ". "}.lst-kix_xcsisnkihklz-6>li:before{content:"\0025cf  "}ol.lst-kix_7fhxg8i5msmt-4.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-4 0}.lst-kix_ewcld7rry2cw-2>li:before{content:"\0025a0  "}ol.lst-kix_6fc6u2jowkph-2.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-2 0}ol.lst-kix_svmmnj1snhr2-2.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-2 0}ol.lst-kix_6v7qjvftgbe8-2.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-2 0}ol.lst-kix_xygzk5z3cyvz-4.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-4 0}.lst-kix_svmmnj1snhr2-8>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-8}.lst-kix_6fc6u2jowkph-2>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-2}.lst-kix_ewcld7rry2cw-6>li:before{content:"\0025cf  "}ol.lst-kix_svmmnj1snhr2-5.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-5 0}.lst-kix_68qsl6zcqxrq-3>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-3}ol.lst-kix_pkkwt0mfnd4r-6.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-6 0}.lst-kix_wz4xrdza29b-1>li:before{content:"\0025cb  "}.lst-kix_8irgp2z20781-3>li{counter-increment:lst-ctn-kix_8irgp2z20781-3}.lst-kix_hxgng6in8mo4-6>li:before{content:"\0025cf  "}.lst-kix_6v7qjvftgbe8-5>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-5,lower-roman) ". "}ol.lst-kix_6fc6u2jowkph-1.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-1 0}.lst-kix_8irgp2z20781-3>li:before{content:"(" counter(lst-ctn-kix_8irgp2z20781-3,decimal) ") "}.lst-kix_6jgx19e9u9pe-4>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-4}.lst-kix_8irgp2z20781-7>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-7,lower-latin) ". "}.lst-kix_36fxx9lqc91n-4>li:before{content:"\0025cb  "}.lst-kix_pkkwt0mfnd4r-3>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-3,decimal) ". "}.lst-kix_5zdork13zaj5-5>li{counter-increment:lst-ctn-kix_5zdork13zaj5-5}ol.lst-kix_xygzk5z3cyvz-7.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-7 0}ol.lst-kix_7fhxg8i5msmt-6.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-6 0}.lst-kix_l0zuj3yh3ryb-5>li:before{content:"\0025a0  "}.lst-kix_w5k728jy05vp-6>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-6,decimal) ". "}.lst-kix_6v7qjvftgbe8-1>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-1,lower-latin) ". "}.lst-kix_pkkwt0mfnd4r-7>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-7,lower-latin) ". "}ol.lst-kix_pkkwt0mfnd4r-7.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-7 0}.lst-kix_36fxx9lqc91n-8>li:before{content:"\0025a0  "}.lst-kix_hii6fafh6hm-4>li:before{content:"\0025cb  "}.lst-kix_pkkwt0mfnd4r-2>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-2}.lst-kix_68qsl6zcqxrq-8>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-8}ol.lst-kix_6v7qjvftgbe8-0.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-0 0}.lst-kix_jwv9q4tqofnu-6>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-6}.lst-kix_8irgp2z20781-8>li{counter-increment:lst-ctn-kix_8irgp2z20781-8}.lst-kix_3vftmdlxcpj0-8>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-8,lower-roman) ". "}ol.lst-kix_7fhxg8i5msmt-7.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-7 0}.lst-kix_l0zuj3yh3ryb-1>li:before{content:"\0025cb  "}.lst-kix_hii6fafh6hm-0>li:before{content:"\0025cf  "}.lst-kix_7fhxg8i5msmt-6>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-6}.lst-kix_xygzk5z3cyvz-4>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-4}.lst-kix_3vftmdlxcpj0-4>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-4,lower-latin) ". "}ul.lst-kix_ozkivkncyqrh-0{list-style-type:none}ul.lst-kix_ozkivkncyqrh-1{list-style-type:none}ul.lst-kix_ozkivkncyqrh-2{list-style-type:none}ul.lst-kix_ozkivkncyqrh-3{list-style-type:none}ul.lst-kix_ozkivkncyqrh-4{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-6.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-6 0}.lst-kix_d8lzxbbe1553-3>li:before{content:"\0025cf  "}.lst-kix_d8lzxbbe1553-7>li:before{content:"\0025cb  "}ul.lst-kix_ozkivkncyqrh-5{list-style-type:none}.lst-kix_6fc6u2jowkph-7>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-7}ul.lst-kix_ozkivkncyqrh-6{list-style-type:none}ol.lst-kix_svmmnj1snhr2-4.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-4 0}ul.lst-kix_ozkivkncyqrh-7{list-style-type:none}ul.lst-kix_ozkivkncyqrh-8{list-style-type:none}.lst-kix_w5k728jy05vp-1>li{counter-increment:lst-ctn-kix_w5k728jy05vp-1}.lst-kix_3vftmdlxcpj0-2>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-2}ol{margin:0;padding:0}table td,table th{padding:0}.c11{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:93.6pt;border-top-color:#000000;border-bottom-style:solid}.c14{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:280.8pt;border-top-color:#000000;border-bottom-style:solid}.c5{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:57.8pt;border-top-color:#000000;border-bottom-style:solid}.c10{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:183.8pt;border-top-color:#000000;border-bottom-style:solid}.c17{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:93.6pt;border-top-color:#000000;border-bottom-style:solid}.c28{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:468pt;border-top-color:#000000;border-bottom-style:solid}.c19{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:109.5pt;border-top-color:#000000;border-bottom-style:solid}.c22{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:117pt;border-top-color:#000000;border-bottom-style:solid}.c7{-webkit-text-decoration-skip:none;color:#1155cc;font-weight:400;text-decoration:underline;vertical-align:baseline;text-decoration-skip-ink:none;font-size:11pt;font-family:"Arial";font-style:normal}.c9{margin-left:36pt;padding-top:0pt;padding-left:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c29{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:20pt;font-family:"Arial";font-style:normal}.c34{margin-left:18pt;padding-top:3pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c21{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c18{padding-top:20pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c1{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Courier New";font-style:normal}.c8{color:#333333;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:10pt;font-family:"Consolas";font-style:normal}.c32{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c0{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c38{color:#ff0000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:26pt;font-family:"Arial";font-style:normal}.c39{padding-top:0pt;padding-bottom:3pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:center}.c12{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c26{color:#000000;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c20{padding-top:0pt;padding-bottom:0pt;line-height:1.42857;orphans:2;widows:2;text-align:left}.c40{padding-top:4pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c30{padding-top:10pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c33{padding-top:10pt;padding-bottom:4pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c37{font-size:10pt;font-family:"Consolas";color:#333333;font-weight:400}.c24{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}.c6{padding-top:0pt;padding-bottom:0pt;line-height:1.0;text-align:left}.c36{border-spacing:0;border-collapse:collapse;margin-right:auto}.c27{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c2{padding:0;margin:0}.c25{color:inherit;text-decoration:inherit}.c16{margin-left:72pt;padding-left:0pt}.c31{font-style:italic}.c35{height:21pt}.c15{margin-left:36pt}.c23{padding-left:0pt}.c4{height:0pt}.c3{font-weight:700}.c13{height:11pt}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style></head><body class="c27"><p class="c39 title" id="h.hlpacpauqwkx"><span>Prebid</span><span>&nbsp;Support for Enforcing TCF 2.0</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c40"><span class="c7"><a class="c25" href="#h.x9c0lsi8ay8">Overview</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.tldmebv0bdgp">Definitions</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.8ycuibmrgs9x">Assumptions</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.1pnyovoljlrm">Summary of Prebid TCF 2.0 Enforcement</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.3kby792a2sqy">Basic-vs-Full Enforcement</a></span></p><p class="c34"><span class="c7"><a class="c25" href="#h.83ablyvhjp4o">Basic Enforcement</a></span></p><p class="c34"><span class="c7"><a class="c25" href="#h.8cgpj780kmcq">Full Enforcement (Prebid Server Only)</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.t62kkttx488d">Prebid.js Functional Requirements</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.wjk7zfwgo1a2">Prebid SDK Functional Requirements</a></span></p><p class="c33"><span class="c7"><a class="c25" href="#h.o5pjp8p4qy06">Prebid Server Functional Requirements</a></span></p><p class="c12 c13"><span class="c0"></span></p><h1 class="c18" id="h.x9c0lsi8ay8"><span class="c29">Overview</span></h1><p class="c12"><span class="c0">The IAB&#39;s Transparency and Consent Framework version 2.0 for enhanced support of GDPR is scheduled to take effect Apr 1 2020. It&#39;s a major update from TCF 1.1 which Prebid currently supports, and is not compatible with the previous release.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">The key changes are:</span></p><ul class="c2 lst-kix_wchaiekwhio-0 start"><li class="c9"><span class="c0">More &#39;purposes&#39; are defined.</span></li><li class="c9"><span class="c0">More flexibility for the legal bases used by vendors.</span></li><li class="c9"><span class="c0">Different in-page javascript API</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">References</span></p><ul class="c2 lst-kix_wz4xrdza29b-0 start"><li class="c9"><span class="c24"><a class="c25" href="https://www.google.com/url?q=https://iabeurope.eu/tcf-2-0/&amp;sa=D&amp;ust=1584107233971000">IAB Europe&#39;s TCF 2.0 Homepage</a></span></li><li class="c9"><span class="c24"><a class="c25" href="https://www.google.com/url?q=https://iabeurope.eu/tcfdocuments/documents/legal/tcfpolicyFINALv2.pdf&amp;sa=D&amp;ust=1584107233971000">TCF Policy</a></span></li><li class="c9"><span class="c24"><a class="c25" href="https://www.google.com/url?q=https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%2520Tech%2520Lab%2520-%2520Consent%2520string%2520and%2520vendor%2520list%2520formats%2520v2.md&amp;sa=D&amp;ust=1584107233971000">TCF 2.0 Consent String Format</a></span></li><li class="c9"><span class="c24"><a class="c25" href="https://www.google.com/url?q=https://github.com/rubicon-project/prebid-server-java/blob/master/docs/developers/PrebidServerJava_GDPR_Requirements.pdf&amp;sa=D&amp;ust=1584107233972000">GDPR Requirements for Prebid Server (TCF1.1)</a></span></li></ul><h1 class="c18" id="h.tldmebv0bdgp"><span class="c29">Definitions</span></h1><ul class="c2 lst-kix_xcsisnkihklz-0 start"><li class="c9"><span class="c0">GDPR - General Data Protection Regulation. The EU&#39;s privacy regulations.</span></li><li class="c9"><span class="c0">EEA - European Economic Area. The region where the GDPR is in effect.</span></li><li class="c9"><span class="c0">IAB - Interactive Advertising Bureau. The ad industry consortium that developed the TCF as a way to help the ad ecosystem adhere to GDPR rules.</span></li><li class="c9"><span class="c0">TCF - Transparency and Consent Framework. </span></li><li class="c9"><span class="c0">CMP - Consent Management Platform. The user interface part of the TCF.</span></li><li class="c9"><span class="c0">GVL - Global Vendors List. The place where each ad entity registers what they do with user data.</span></li><li class="c9"><span class="c0">PBS - Prebid Server</span></li><li class="c9"><span class="c0">PBJS - Prebid.js</span></li><li class="c9"><span class="c0">PBS Host Company - the organization running a cluster of Prebid Servers</span></li><li class="c9"><span class="c0">Purpose 1 - &nbsp;Under TCF, there are many defined uses of private data. &quot;Purpose 1&quot; is &quot;Store and/or access information on a device&quot;. This means that users must consent before an ad tech vendor reads or writes data from their computer or phone. Those of us dealing with these things a lot memorize the numbers. Forgive us.</span></li><li class="c9"><span>Purpose 2 - &quot;Basic Ad Selection&quot;. </span><span class="c0">This looks to be one of the bigger areas of concern because the TCF policy could be interpreted to be a form of ad blocking. Or maybe not. Talk to your lawyers.</span></li><li class="c9"><span class="c0">Purpose 4 - &quot;Personalized Ad Selection&quot;. Basically, if the user doesn&rsquo;t consent, they don&rsquo;t want ads based on any type of direct user profile.</span></li><li class="c9"><span class="c0">Purpose 7 - &quot;Measure ad performance&quot;. This is another area of concern, because the TCF policy doesn&rsquo;t clearly define what it means to measure the &ldquo;effectiveness&rdquo; of ads. Talk to your lawyers about what this means for your organization.</span></li><li class="c9"><span class="c0">Special Feature 1 - &quot;Use precise geolocation data&quot;. Special Features are quite different than Purposes. They only allow user &quot;opt-in&quot;, and don&#39;t have as many layers of nuance as Purposes.</span></li><li class="c9"><span class="c0">Legal Basis - how an ad tech vendor views the importance of each Purpose for their mission. If they define &quot;consent&quot; as their &quot;basis&quot; for a given Purpose, they&#39;re able to work without some or all aspects of the user&#39;s data. But if they define &quot;Legitimate Interest&quot; (LI), they&#39;re basically saying &quot;We can&#39;t do our job without this data&quot;.</span></li><li class="c9"><span class="c0">Basic enforcement - a high-level mode of consent confirmation where the looks for a good-faith indication that the user has provided consent or legal basis signals before engaging in a privacy-protected activity. Does not read the GVL.</span></li><li class="c9"><span class="c0">Full enforcement - a detailed confirmation mode that reads the GVL, interprets the consent string, and performs legal basis analysis.</span></li></ul><h1 class="c18" id="h.8ycuibmrgs9x"><span class="c29">Assumptions</span></h1><p class="c12 c13"><span class="c0"></span></p><a id="t.e67b00b9c01ec82c8517d66b7ccbe4a7c7e6445b"></a><a id="t.0"></a><table class="c36"><tbody><tr class="c4"><td class="c28" colspan="1" rowspan="1"><p class="c6"><span class="c3">Important Legal Note</span><span class="c0">: Prebid.org cannot provide legal advice about GDPR or any other governmental regulation. Our aim is to provide a toolkit of functionality that will let publishers configure header bidding as defined by their legal counsel. We will consider feature suggestions, and review any code offered by the community.</span></p><p class="c6 c13"><span class="c0"></span></p><p class="c6"><span class="c0">Enforcement of Purpose 2 (basic ad selection) looks to be one of the bigger areas of concern because the TCF policy could be interpreted to be a form of ad blocking. You will need to work with your legal counsel to determine how you intend to handle this scenario. Prebid.js and Prebid Server offer publishers the ability to enforce or not-enforce purposes individually. As an example of the kind of flexibility we aim to offer (*), here are some options you could discuss with your lawyers:</span></p><p class="c6 c13"><span class="c0"></span></p><ol class="c2 lst-kix_68qsl6zcqxrq-0 start" start="1"><li class="c6 c15 c23"><span class="c0">Treat Purpose 2 as an ad blocker.</span></li><li class="c6 c15 c23"><span class="c0">Ignore enforcement of selected Purposes at the Prebid level entirely, assuming that downstream vendors will handle the TCF strings appropriately. </span></li><li class="c6 c15 c23"><span class="c0">Ignore enforcement Purpose 2, assuming that users who object to &lsquo;Basic Ads&rsquo; will also object to &lsquo;Personalized Ads&rsquo;, causing any User IDs to be removed from ad requests.</span></li><li class="c6 c15 c23"><span class="c0">Ignore the Purpose-Consent portion of Purpose 2, but allow the user to block specific vendors.</span></li></ol><p class="c6 c13"><span class="c0"></span></p><p class="c6"><span class="c3">(*) - Note on phasing</span><span class="c0">: Please be aware that Prebid.js and Prebid Server will likely not deliver on the full TCF functionality by April 1st. Our initial goal for both products is to support Purpose 1 (Device Access) enforcement by that date. The ability to enforce the other purposes will be developed as soon as we can.</span></p><p class="c6 c13"><span class="c0"></span></p><p class="c6"><span class="c3">(**)</span><span class="c0">&nbsp;Did we mention that you cannot rely on this document to learn how to configure your header bidding for GDPR? Seriously, talk to your lawyers.</span></p></td></tr></tbody></table><p class="c12 c13"><span class="c0"></span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">General</span></p><p class="c12 c13"><span class="c0"></span></p><ol class="c2 lst-kix_svmmnj1snhr2-0 start" start="1"><li class="c9"><span class="c0">Prebid.org is neither a data controller nor data processor, but we supply software to both types of entities. Therefore, our software should provide a flexible set of controls necessary for both types of entities to run their businesses.</span></li><li class="c9"><span class="c0">Even if Prebid is configured to enforce activities by parsing consent data, publishers and downstream vendors are still responsible for ensuring their legal bases using the consent data they&#39;re provided. </span></li><li class="c9"><span class="c0">Prebid will ignore the TCF &quot;stack&quot; feature, assuming that the CMP will set the underlying Purposes appropriately.</span></li><li class="c9"><span class="c0">Data from the CMP will never be modified before passing to downstream entities.</span></li><li class="c9"><span class="c0">If TCF processing is turned on, and the user is determined to be in GDPR scope, and hasn&rsquo;t provided a consent string, the system should assume a consent string that has no consent offered.</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Prebid.js</span></p><p class="c12 c13"><span class="c0"></span></p><ol class="c2 lst-kix_6fc6u2jowkph-0 start" start="1"><li class="c9"><span class="c0">Prebid.js will only support parsing the TCF 2.0 consent string.</span></li><li class="c9"><span class="c0">TCF 2.0 features are available in Prebid.js only in a consent module, not as part of core. This allows publishers to build two versions of their wrappers: one for users in the EEA, one for users outside of the EEA.</span></li><li class="c9"><span class="c0">It&#39;s assumed that publishers run in two modes:</span></li></ol><ol class="c2 lst-kix_6fc6u2jowkph-1 start" start="1"><li class="c12 c16"><span class="c0">A CMP is loaded on every page so TCF functions and data are fully available.</span></li><li class="c12 c16"><span class="c0">Consent data is stored in first party storage and passed to Prebid directly. TCF functions are not available from the CMP.</span></li></ol><ol class="c2 lst-kix_6fc6u2jowkph-0" start="4"><li class="c9"><span class="c0">Prebid.js will not load the Global Vendors List (GVL) as this would significantly impact the success of header bidding implementations. However, Prebid.js will require a mapping of GVL vendor IDs to Prebid.js bidder codes. </span></li></ol><ol class="c2 lst-kix_6fc6u2jowkph-1 start" start="1"><li class="c12 c16"><span class="c0">Further, we assume that not all Prebid adapters will be in the GVL, so we&#39;ll need to support reference by GVL ID or bidder code.</span></li><li class="c12 c16"><span class="c0">Further, we assume that bidder aliases within one adapter may have different GVL IDs.</span></li></ol><ol class="c2 lst-kix_6fc6u2jowkph-0" start="5"><li class="c9"><span class="c0">As a result of not having access to GVL entries, Prebid.js will only support &lsquo;Basic Enforcement&rsquo;.</span></li><li class="c9"><span>TCF2 will be supported in Prebid.js 3.x, with &#39;no enforcement&#39; being the default option. Prebid.js 4.0 will enforce Purpose 1 by default when the module is included.</span></li><li class="c9"><span>PurposeOneTreatment is ignored</span><span class="c0">&nbsp;for Prebid.js. Publishers who don&rsquo;t want to enforce Purpose 1 (or any other purpose) need to set Prebid&rsquo;s configuration appropriately.</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Prebid Server</span></p><p class="c12 c13"><span class="c0"></span></p><ol class="c2 lst-kix_pkkwt0mfnd4r-0 start" start="1"><li class="c9"><span class="c0">Prebid Server will need concurrent support of TCF 1.1 and TCF 2.0.</span></li><li class="c9"><span class="c0">Prebid Server will need to support &ldquo;Full Enforcement&rdquo; checks.</span></li><li class="c9"><span class="c0">AMP TCF 2.0 will be passed on the same parameter as TCF 1.1. </span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Prebid SDK</span></p><p class="c12 c13"><span class="c0"></span></p><ol class="c2 lst-kix_xygzk5z3cyvz-0 start" start="1"><li class="c9"><span class="c0">Prebid SDK should parse the consent string in order to read the IDFA. Other than that, SDK just passes consent values to Prebid Server..</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12 c13"><span class="c0"></span></p><h1 class="c18" id="h.1pnyovoljlrm"><span class="c29">Summary of Prebid TCF 2.0 Enforcement</span></h1><p class="c12 c13"><span class="c0"></span></p><a id="t.de6c946673ec683bd257d6a726fa40f4a547f1ee"></a><a id="t.1"></a><table class="c36"><tbody><tr class="c4"><td class="c11" colspan="1" rowspan="1"><p class="c6"><span class="c3">TCF </span><span class="c26 c3">Field</span></p></td><td class="c11" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">In-scope Activities</span></p></td><td class="c11" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">System</span></p></td><td class="c11" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">Enforcement</span></p></td><td class="c11" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">Publisher/</span></p><p class="c6"><span class="c26 c3">Host Company Controls</span></p></td></tr><tr class="c4"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Purpose 1 - Store and/or access information on a device</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">usersync pixels, user ID modules, and device storage</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Prebid.js and Prebid Server and Prebid SDK</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">May result in preventing one or more uesrsync activities for one or more vendors.</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Do not enforce purpose 1</span></p><p class="c6"><span class="c0">Do not enforce purpose 1 for vendor V</span></p><p class="c6"><span class="c0">Enforce purpose 1 at the vendor level only.</span></p></td></tr><tr class="c4"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Purpose 2 - Select basic ads</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">call bid adapters</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Prebid.js and Prebid Server</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">May result in skipping one or more bid adapters.</span></p><p class="c6 c13"><span class="c0"></span></p><p class="c6"><span class="c0">All configured modules will be called as usual unless all bidders are eliminated.</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Do not enforce purpose 2</span></p><p class="c6"><span>Do not enforce purpose 2 for vendor V</span></p><p class="c6"><span class="c0">Enforce purpose 2 at the vendor level only.</span></p><p class="c6 c13"><span class="c0"></span></p></td></tr><tr class="c4"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Purpose 4 - Select Personalized Ads</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">call bid adapters with userIds</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Prebid.js and Prebid Server</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">May result in removing the userIds before calling one or more bid adapters.</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Do not enforce purpose 4</span></p><p class="c6"><span class="c0">Do not enforce purpose 4 for vendor V</span></p><p class="c6"><span class="c0">Enforce purpose 4 at the vendor level only.</span></p></td></tr><tr class="c4"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Purpose 7 - Measure ad performance</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">initiate analytics</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Prebid.js and Prebid Server</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">May result in skipping one or more analytics adapters.</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Do not enforce purpose 7</span></p><p class="c6"><span class="c0">Do not enforce purpose 7 for vendor V</span></p><p class="c6"><span class="c0">Enforce purpose 7 at the vendor level only.</span></p></td></tr><tr class="c4"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Special Feature 1 - Use precise geolocation data</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">passing lat/long to server-side bid adapters</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Prebid Server</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">May result in rounding lat/long values and IP address before sending to server-side adapters.</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Do not enforce Special Feature 1</span></p></td></tr><tr class="c35"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Special Purpose 2 - Technically deliver ads or content</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">n/a</span></p></td><td class="c14" colspan="3" rowspan="1"><p class="c6 c13"><span class="c0"></span></p><p class="c6"><span class="c0">Special Purposes do not require consent. If a publisher&rsquo;s legal team wants to consider SP2, Prebid software should not be called.</span></p></td></tr><tr class="c35"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">PurposeOneConsent</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">n/a</span></p></td><td class="c14" colspan="3" rowspan="1"><p class="c6"><span class="c0">Prebid does not provide specific support for enforcing this flag. Instead, publishers may use the provided controls for Purpose 1 and other Prebid configuration to control whether the user&rsquo;s device is accessed.</span></p></td></tr></tbody></table><h1 class="c18" id="h.3kby792a2sqy"><span class="c29">Basic-vs-Full Enforcement</span></h1><p class="c12"><span class="c0">Prebid offers publishers several controls for whether consent/legal basis confirmation is even performed. The following flowchart shows how the controls</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 634.15px; height: 335.15px;"><img alt="" src="images/image2.png" style="width: 634.15px; height: 335.15px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c12 c13"><span class="c0"></span></p><h2 class="c32" id="h.83ablyvhjp4o"><span class="c21">Basic Enforcement</span></h2><p class="c12"><span class="c0">The goal of &#39;basic enforcement&#39; is to confirm that there&#39;s enough evidence of consent to pass data on to vendors who have access to the GVL and can fully parse and enforce.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Before allowing a Purpose for a given Vendor, one of these scenarios must be true: :</span></p><ul class="c2 lst-kix_hxgng6in8mo4-0 start"><li class="c9"><span class="c0">User&rsquo;s purpose consent and user&rsquo;s vendor consent</span></li><li class="c9"><span class="c0">The Prebid-specific &lsquo;enforceVendor&rsquo; flag is set and user&rsquo;s vendor consent</span></li><li class="c9"><span class="c0">purpose LI established and vendor LI established</span></li><li class="c9"><span class="c0">The Prebid-specific &lsquo;enforceVendor&rsquo; flag is set and vendor LI established</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">In terms of the TCF 2.0 fields, Purpose P is ok for vendor V if either of these is true:</span></p><ol class="c2 lst-kix_jwv9q4tqofnu-0 start" start="1"><li class="c9"><span class="c0">PurposesConsent[P,V]==1 AND VendorConsentBitfield[V]==1</span></li><li class="c9"><span class="c0">pbEnforceVendor[P]==true AND VendorConsentBitfield[V]==1</span></li><li class="c9"><span class="c0">PurposesLITransparency[P]==1 AND VendorLegitimateInterestBitfield[V]==1</span></li><li class="c9"><span class="c0">pbEnforceVendor[P,V]==true AND VendorLegitimateInterestBitfield[V]==1</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Before allowing Special Feature 1, SpecialFeatureOptIns[1] must be true.</span></p><h2 class="c32" id="h.8cgpj780kmcq"><span class="c21">Full Enforcement (Prebid Server Only)</span></h2><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">The big difference between &#39;basic&#39; and &#39;full&#39; enforcement is that Prebid Server has the GVL available to examine vendor legal bases.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Before allowing an activity that falls under a specific Purpose for a given Vendor, one of these 6 basic scenarios needs to be true:</span></p><p class="c12 c13"><span class="c0"></span></p><ol class="c2 lst-kix_3vftmdlxcpj0-0 start" start="1"><li class="c9"><span class="c0">Vendor claims consent as their basis, publisher doesn&#39;t restrict the purpose, user consents to the purpose (if the enforcePurpose flag is on), and user consents to the vendor (if the enforceVendor flag is on).</span></li><li class="c9"><span class="c0">Vendor claims (inflexible) legitimate interest as their basis, publisher doesn&#39;t restrict the purpose, user was provided notice of the legitimate interest basis for this purpose (if the enforcePurpose flag is on), and user was provided notice for the LI basis for this vendor (if the enforceVendor flag is on)</span></li><li class="c9"><span>Vendor claims flexible legal basis with legitimate interest as the default, publisher restriction </span><span class="c3">doesn&#39;t</span><span>&nbsp;require consent, and ((user was provided notice of the legitimate interest basis for this purpose+vendor) </span><span>OR (user consents to purpose+vendor)) [Purpose checked only if the enforcePurpose flag is on, and vendor checked only if the enforceVendor flag is on]</span></li><li class="c9"><span>Vendor claims flexible legal basis with legitimate interest as the default, publisher </span><span class="c3">does</span><span class="c0">&nbsp;require consent, user consents to the purpose, and user consents to the vendor. [Purpose checked only if the enforcePurpose flag is on, and vendor checked only if the enforceVendor flag is on]</span></li><li class="c9"><span>Vendor claims flexible legal basis with consent as the default, publisher restriction </span><span class="c3">doesn&#39;t</span><span>&nbsp;require legitimate interest, ((user consents to the purpose+vendor) </span><span>OR (user was provided notice for the legitimate interest basis for this purpose+vendor)) </span><span>[Purpose checked only if the enforcePurpose flag is on, and vendor checked only if the enforceVendor flag is on]</span></li><li class="c9"><span>Vendor claims flexible legal basis with consent as the default, publisher restriction </span><span class="c3">does</span><span class="c0">&nbsp;require legitimate interest, and user was provided notice for the legitimate interest basis for this purpose+vendor. [Purpose checked only if the enforcePurpose flag is on, and vendor checked only if the enforceVendor flag is on] </span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span>Note that there are many more scenarios where the activity would </span><span class="c31">not</span><span class="c0">&nbsp;be allowed. </span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">The technical definition in terms of the TCF 2.0 fields follows. Purpose P is ok for vendor V if any of these is true:</span></p><ol class="c2 lst-kix_6v7qjvftgbe8-0 start" start="1"><li class="c9"><span class="c0">GVL[V].purposes contains P and GVL[V].flexiblePurposes doesn&#39;t contain P and publisherRestrictions[P]!=0 and (!enforcePurpose[P] or PurposesConsent[P]==1) AND (!enforceVendor[P,V] or VendorConsentBitfield[V]==1)</span></li><li class="c9"><span class="c0">GVL[V].legIntPurposes contains P and GVL[V].flexiblePurposes doesn&#39;t contain P and publisherRestrictions[P]!=0 and (!enforcePurpose[P] or PurposesLITransparency[P]==1) AND (!enforceVendor[P,V] or VendorLegitimateInterestBitfield[V]==1)</span></li><li class="c9"><span class="c0">GVL[V].legIntPurposes contains P and GVL[V].flexiblePurposes contains P and publisherRestrictions[P]==2 and (((!enforcePurpose[P] or PurposesConsent[P]==1) AND (!enforceVendor[P,V] or VendorConsentBitfield[V]==1)) OR ((!enforcePurpose[P] or PurposesLITransparency[P]==1) AND (!enforceVendor[P,V] or VendorLegitimateInterestBitfield[V]==1)))</span></li><li class="c9"><span class="c0">GVL[V].legIntPurposes contains P and GVL[V].flexiblePurposes contains P and publisherRestrictions[P]==1 and (!enforcePurpose[P] or PurposesConsent[P]==1) AND (!enforceVendor[P,V] or VendorConsentBitfield[V]==1)</span></li><li class="c9"><span class="c0">GVL[V].purposes contains P and GVL[V].flexiblePurposes contains P and publisherRestrictions[P]==1 and (((!enforcePurpose[P] or PurposesConsent[P]==1) AND (!enforceVendor[P,V] or VendorConsentBitfield[V]==1)) OR ((!enforcePurpose[P] or PurposesLITransparency[P]==1) AND (!enforceVendor[P,V] or VendorLegitimateInterestBitfield[V]==1)))</span></li><li class="c9"><span class="c0">GVL[V].purposes contains P and GVL[V].flexiblePurposes contains P and publisherRestrictions[P]==2 and (!enforcePurpose[P] or PurposesLITransparency[P]==1) AND (!enforceVendor[P,V] or VendorLegitimateInterestBitfield[V]==1)</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Before allowing Special Feature 1, SpecialFeatureOptIns[1] must be true.</span></p><h1 class="c18" id="h.t62kkttx488d"><span class="c29">Prebid.js Functional Requirements</span></h1><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">1) An optional module must be available for reading the IAB TCF 2.0 API data. Publishers will include this module in their Prebid.js package when they need to support EEA users.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">2) Prebid.js must support scenarios where the TCF string parsing functions are not available. &nbsp;If the codebase for parsing the TCF string is significant, it should be made an optional module separate from the enforcement functions. A key goal of Prebid.js is to include only the code that publishers need for their particular use case. The technical design should consider whether it makes sense to bundle all of these components together, or break them into 2 or 3 separate modules:</span></p><ul class="c2 lst-kix_ewcld7rry2cw-0 start"><li class="c9"><span class="c0">Reading the TCF string</span></li><li class="c9"><span class="c0">Enforcing the TCF string</span></li><li class="c9"><span class="c0">Parsing the TCF string (?)</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">3) Prebid.js must support the following publisher controls:</span></p><ul class="c2 lst-kix_d8lzxbbe1553-0 start"><li class="c9"><span class="c0">Don&#39;t even read the TCF string (accomplished by not configuring the module)</span></li><li class="c9"><span class="c0">Enforce/Do not enforce purpose P</span></li><li class="c9"><span class="c0">Enforce/Do not enforce purpose P for vendor V</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Here&#39;s a set of proposed configurations within the existing consentManagement config object:</span></p><p class="c12 c13"><span class="c0"></span></p><a id="t.d2f201df0390c3de46409e5bc5a638f6f58e1055"></a><a id="t.2"></a><table class="c36"><tbody><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">Param</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c3 c26">Type</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">Description</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">Details</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.allowAuctionWithoutConsent</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">boolean</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Available in 3.x only, defines behavior for backwards compatibility. </span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span>For 3.x: If true, consider all Purposes as </span><span class="c31">not</span><span class="c0">&nbsp;enforceable.</span></p><p class="c6"><span class="c0">If false, consider only Purpose 2 enforceable.</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.consentData</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">object</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Consent data provided statically.</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Used when cmpApi is &quot;static&quot;.</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.defaultGdprScope</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">boolean</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6 c13"><span class="c0"></span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6 c13"><span class="c0"></span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.rules</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">object</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Lets the publisher override the defaults set by the enforceMode</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6 c13"><span class="c0"></span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.rules[].purpose</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">string</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Possible values are &quot;storage&quot;, &quot;basicAds&quot;, &quot;personalizedAds&quot;, and &quot;measurement&quot; corresponding to Purposes 1,2,4, and 7 respectively.</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">For some reason, people tend to prefer using the string names rather than the numbers.</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.rules[].enforcePurpose</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">boolean</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Whether to enforce this purpose or not. Overrides the setting from enforceMode.</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">The default in PBJS 3.x will be to enforce no purposes, and in 4.0 to enforce Purpose 1 and no others.</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.rules[].enforceVendor</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">boolean</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Whether to enforce vendor consent/legal basis for this purpose or not..</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">The default in PBJS 3.x will be to enforce no purposes, and in 4.0 to enforce Purpose 1 and no others.</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.rules[].vendorExceptions</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">array of strings</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Which biddercodes or module names should be treated as the opposite of the enforceVendor flag.</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">If enforceVendor=false, then vendorExceptions are those that will be treated as true.</span></p><p class="c6"><span class="c0">If enforce=true, then vendorExceptions are those that will be treated as false.</span></p></td></tr></tbody></table><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Example configurations:</span></p><p class="c12 c13"><span class="c0"></span></p><a id="t.4cd6d00b2bd97ee52bb8fe7d3b16fd51a6657718"></a><a id="t.3"></a><table class="c36"><tbody><tr class="c4"><td class="c28" colspan="1" rowspan="1"><p class="c12"><span class="c1">pbjs.setConfig({</span></p><p class="c12"><span class="c1">&nbsp; consentManagement: {</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; gdpr: {</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; cmpApi: &#39;iab&#39;,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; defaultGdprScope: true/false (0/1?)</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; timeout: 3000,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; // allowAuctionWithoutConsent: false, &nbsp;// deprecated</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; rules: [{</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // don&rsquo;t enforce Purpose 1 except for bidderA.</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // this means that TCF approval is only considered</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // for this one bidder.</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; purpose: &quot;storage&quot;,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforcePurpose: false,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforceVendor: false,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; vendorExceptions: [&quot;bidderA&quot;]</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; },{</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // Allow the user to object to vendors for Purpose 2</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // but don&rsquo;t allow them to turn off header bidding</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // altogether.</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // The exception is bidderB, which the user will</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // not be allowed to reject</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; purpose: &quot;basicAds&quot;,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforcePurpose: false,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforceVendor: true,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; vendorExceptions: [&quot;bidderB&quot;]</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; },{</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // allow the user to have their userId removed from</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // header bidding except for bidders A and B</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; purpose: &quot;personalizedAds&quot;,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforcePurpose: true,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforceVendor: true</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; vendorExceptions: [&quot;bidderA&quot;,&quot;bidderB&quot;]</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; },{</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // analytics adapters are ok</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp;</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; purpose: &quot;measurement&quot;,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforcePurpose: false,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforcePurpose: false</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; }]</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; }</span></p><p class="c12"><span class="c1">&nbsp; }</span></p><p class="c12"><span class="c1">});</span></p></td></tr></tbody></table><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">You may notice that the examples above provide more flexibility than TCF requires. This allows publishers to establish custom legal bases in consultation with their legal counsel.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">4) If the &#39;gdprApplies&#39; flag is defined and is false, then Prebid.js may assume that GDPR is not in scope and therefore doesn&#39;t need to be enforced. All Purposes will be set to enforce=false.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">4) There should be a way for bidAdapters to supply a GVL ID for each alias they support.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">5) The aliasBidder() function should be extended to support specification of a GVL ID. e.g.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c20 c15"><span class="c37">pbjs.aliasBidder(&#39;appnexus&#39;, &#39;newAlias&#39;, 999);</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span>6) If a bidder code isn&#39;t associated with a GVL ID, enforcement should assume that the vendor is </span><span class="c31">not allowed</span><span class="c0">&nbsp;unless the publisher has specifically named their bidder code.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">7) Analytics adapters must be associated with a GVL ID and/or a &quot;name&quot; to allow the system to determine which analytics adapter(s) are permitted to operate in the current context.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">8) User ID modules and Real Time Data modules should be associated with a GVL ID and/or a &quot;name&quot; to allow the system to determine which modules are permitted to operate in the current context.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">9) The system must be able to verify vendor consent in two ways:</span></p><ul class="c2 lst-kix_tb82mrxazni-0 start"><li class="c9"><span class="c0">User consents to GVL ID 52, and Prebid.js knows that 52 corresponds to the Rubicon bid adapter (and the Rubicon analytics adapter)</span></li><li class="c9"><span class="c0">The publisher consents to the name &quot;pubcommonId&quot;, which would allow that ID module to fire even if Purpose 1 doesn&#39;t have consent.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">10) The internal interface to bid adapters should remain the same: bidrequest.gdprConsent</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">11) The OpenRTB interface to Prebid Server should remain the same:</span></p><ul class="c2 lst-kix_u56eprq9ell0-0 start"><li class="c9"><span class="c0">regs.ext.gdpr </span></li><li class="c9"><span class="c0">user.ext.consent</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">12) The system must support all the activity enforcement noted in the &#39;Summary of Prebid TCF 2.0 Enforcement&#39; section.</span></p><ol class="c2 lst-kix_7fhxg8i5msmt-0 start" start="1"><li class="c9"><span class="c0">If Purpose 1 is being enforced:</span></li></ol><ol class="c2 lst-kix_7fhxg8i5msmt-1 start" start="1"><li class="c12 c16"><span class="c0">Before invoking usersync pixels for each enforceable vendor, verify consent as described in &#39;Basic Enforcement&#39;.</span></li><li class="c12 c16"><span class="c0">Before reading or storing cookies or HTML 5 localstorage for each enforceable vendor, verify consent as described in &#39;Basic Enforcement&#39;. This will require enhancing the getCookie and setCookie utility functions to determine or accept the biddercode or module name.</span></li><li class="c12 c16"><span class="c0">Before invoking each enforceable userID sub-module, verify consent as described in &#39;Basic Enforcement&#39;.</span></li></ol><ol class="c2 lst-kix_7fhxg8i5msmt-0" start="2"><li class="c9"><span class="c0">If Purpose 2 is being enforced, verify consent for each vendor as described in &#39;Basic Enforcement&#39; before calling a bid adapter. If consent is not granted, log a console warning and skip it.</span></li><li class="c9"><span class="c0">If Purpose 4 is being enforced, verify consent for each vendor that passed the Purpose 2 test. If consent is not granted, log a console warning, remove the bidrequest.userId attribute and call the adapter.</span></li><li class="c9"><span class="c0">If Purpose 7 is being enforced, verify consent for each analytics module. If consent is not granted, log a console warning and skip it.</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">13) If consentManagement.gdpr is configured but no consent string is available, the system must assume that the user does not consent to either purpose or vendor. Activities may still take place if the publisher has configured the relevant Purposes as &#39;not enforced&#39;.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">13) Bid adapters must do one of the following for all device access activities (reading or setting cookies or local storage):</span></p><ul class="c2 lst-kix_l0zuj3yh3ryb-0 start"><li class="c9"><span class="c0">Use the PBJS core utility functions, which will handle Purpose 1 enforcement.</span></li><li class="c9"><span class="c0">Post a public disclosure in the code and on prebid.org explaining the legal basis for not adhering to GDPR.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">14) Prebid core must make the following information available to analytics adapters:</span></p><ul class="c2 lst-kix_w6yj8blbe06x-0 start"><li class="c9"><span class="c0">Enforcement status of Purposes 1,2,4 and 7.</span></li><li class="c9"><span class="c0">An array of bidders and modules skipped due to TCF enforcement.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">15) It should be possible for a pub to define a mapping between a module code and a GVL ID</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">&nbsp; &nbsp;pbjs.setConfig({</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">&nbsp; &nbsp; &nbsp;gvlMapping: {</span></p><p class="c12"><span class="c0">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &ldquo;id5&rdquo;: 9999</span></p><p class="c12"><span class="c0">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &ldquo;bidderX&rdquo;: 8888</span></p><p class="c12"><span class="c0">&nbsp; &nbsp; &nbsp;}</span></p><p class="c12 c13"><span class="c0"></span></p><h1 class="c18" id="h.wjk7zfwgo1a2"><span>Prebid SDK Functional Requirements</span></h1><p class="c12"><span class="c0">1) Prebid SDK must accept the following optional parameters to support TCF 2.0. It&rsquo;s assumed the app will pass these values directly or indirectly from a mobile CMP.</span></p><ul class="c2 lst-kix_ozkivkncyqrh-0 start"><li class="c9"><span class="c0">GDPR in-scope</span></li><li class="c9"><span class="c0">TCF Consent string</span></li><li class="c9"><span>&lsquo;deviceAccessConsent&rsquo; flag defining whether the SDK is allowed to read the IDFA or equivalent. It&rsquo;s assumed that the app will parse the consent string to confirm the user has consented to Purpose 1.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">2) When a request is defined to be GDPR in-scope, the SDK must confirm that the &lsquo;deviceAccessConsent&rsquo; flag is true. Here&rsquo;s the truth table for when the SDK is allowed to access the device ID:</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12 c13"><span class="c0"></span></p><a id="t.cf04e882f648981d69d9d186d69ef24c3991b712"></a><a id="t.4"></a><table class="c36"><tbody><tr class="c4"><td class="c22" colspan="1" rowspan="1"><p class="c6 c13"><span class="c0"></span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c12"><span class="c0">deviceAccessConsent=true</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c12"><span class="c0">deviceAccessConsent=false</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c12"><span class="c0">deviceAccessConsent undefined</span></p></td></tr><tr class="c4"><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">GDPR scope=false</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Yes, read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">No, don&rsquo;t read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Yes, read IDFA</span></p></td></tr><tr class="c4"><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">GDPR scope=true</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Yes, read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">No, don&rsquo;t read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">No, don&rsquo;t read IDFA</span></p></td></tr><tr class="c4"><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">GDPR scope undefined</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Yes, read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">No, don&rsquo;t read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Yes, read IDFA</span></p></td></tr></tbody></table><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">3) The SDK must pass the consent data to Prebid Server on the same OpenRTB attributes as defined in TCF 1.1:</span></p><ul class="c2 lst-kix_hii6fafh6hm-0 start"><li class="c9"><span class="c0">GDPR in-scope flag is regs.ext.gdpr</span></li><li class="c9"><span class="c0">Consent string is user.ext.consent</span></li></ul><p class="c12 c13"><span class="c0"></span></p><h1 class="c18" id="h.o5pjp8p4qy06"><span class="c29">Prebid Server Functional Requirements</span></h1><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">1) Optional configuration must be available for host companies to turn on and off enforcing GDPR with IAB TCF 2.0 API data. There should be global and publisher account level configuration. The default should be to enforce.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">2) If enforcement is turned on for this request, Prebid Server must be able to determine whether it&#39;s in-scope for GDPR processing. If any of the following conditions are true, the request is in-scope:</span></p><ol class="c2 lst-kix_6jgx19e9u9pe-0 start" start="1"><li class="c9"><span class="c0">the incoming request defines regs.ext.gdpr:true.</span></li><li class="c9"><span class="c0">regs.ext.gdpr is undefined, geo-lookup is turned on, and the user&#39;s IP address is in a configurable set of countries.</span></li><li class="c9"><span class="c0">regs.ext.gdpr is undefined and the host company&#39;s default scope is to enforce.</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">3) Prebid Server must support the following host company controls:</span></p><ul class="c2 lst-kix_d8lzxbbe1553-0"><li class="c9"><span class="c0">Enforce/Do not enforce purpose P (globally and per-account)</span></li><li class="c9"><span class="c0">Enforce/Do not enforce purpose P for vendor V (globally and per-account)</span></li><li class="c9"><span class="c0">Enforce/Do not enforce special purpose 1</span></li><li class="c9"><span class="c0">Enforce/Do not enforce special purpose 1 for vendor V</span></li><li class="c9"><span class="c0">ACCOUNT</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">4) Prebid Server must give host company config to say what to do with the purposeOneTreatment - both as a default and for each account:</span></p><ol class="c2 lst-kix_pzmtiq5h0915-0 start" start="1"><li class="c9"><span class="c0">ignore the flag entirely</span></li><li class="c9"><span class="c0">if purposeOneTreatment=1 and IsServiceSpecific=1 then Purpose 1 is overridden to no-access-allowed</span></li><li class="c9"><span>if</span><span>&nbsp;purposeOneTreatment=1 and IsServiceSpecific=1</span><span class="c0">&nbsp;then Purpose 1 is overridden to access-allowed</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">The implementation of this &ldquo;PurposeOneTreatmentInterpretation flag modifies the flowchart above: it may short-circuit the logic, jumping straight to Yes or No without a normal enforcement check.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 376.28px;"><img alt="" src="images/image1.png" style="width: 624.00px; height: 376.28px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">5) It must be possible for a Host Company to define its GVL ID to use for confirming user user consent for setting cookies.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Example configuration/DB entries:</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12 c15"><span class="c1">gdpr.host-vendor-id: 52<br>gdpr.enabled: true/false // default true</span></p><p class="c12 c15"><span class="c1">gdpr.purpose.P.enforcePurpose: no/basic/full // default full</span></p><p class="c12 c15"><span class="c1">gdpr.purpose.P.enforceVendors: true/false // default true</span></p><p class="c12 c15"><span class="c1">gdpr.purpose.P.vendorExceptions: list of biddercodes<br>gdpr.specialfeature.S.enforce: true/false // default true</span></p><p class="c12 c15"><span class="c1">gdpr.specialfeature.S.vendorExceptions: list of biddercodes</span></p><p class="c12 c15"><span class="c1">gdpr.purposeOneTreatmentInterpretation: ignore/no-access-allowed/access-allowed</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.enabled: true/false &nbsp;// default true</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.purpose.P.enforcePurpose</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.purpose.P.enforceVendors</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.purpose.P.vendorExceptions<br>account.A.gdpr.specialfeature.S.enforce</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.specialfeature.S.vendorExceptions</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.purposeOneTreatmentInterpretation</span></p><p class="c12 c15"><span class="c1">geolocation.VENDOR.server: url // location of geo lookup service</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">6) There should be a way for bidAdapters to supply a GVL ID for each alias they support.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">7) The external definition of aliases should be extended to support specification of a GVL ID. e.g.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c20 c15"><span class="c8">&quot;ext&quot;: {</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &quot;prebid&quot;: {</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; &quot;aliases&quot;: { &nbsp; &nbsp; &nbsp; &nbsp; // existing feature</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; &nbsp; &quot;districtm&quot;: &quot;appnexus&quot;</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; },</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; &quot;aliasgvlids&quot;: { &nbsp; &nbsp; // new feature</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; &nbsp; &quot;districtm&quot;: 144</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; }</span></p><p class="c15 c20"><span class="c8">&nbsp; &nbsp; }</span></p><p class="c20 c15"><span class="c8">&nbsp; }</span></p><p class="c20 c13"><span class="c8"></span></p><p class="c12"><span class="c0">8) Prebid Server&#39;s enforcement should be &quot;Full&quot; mode unless it doesn&#39;t have access to the proper GVL version.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">9) Prebid Server should be able to read the TCF2.0 GVL that&#39;s specified in the consent string. If it does not have immediate access to that version of the GVL, it may downgrade enforcement to &quot;Basic&quot;. The assumption is that subsequent requests for that version of the GVL will succeed. The system should log any usage of Basic Enforcement.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span>10) If a bidder code isn&#39;t associated with a GVL ID, enforcement should assume that the vendor is </span><span class="c31">not allowed</span><span class="c0">&nbsp;unless the publisher has specifically named the bidder code as a configured exception.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">11) Analytics adapters must be associated with a GVL ID and/or a &quot;name&quot; to allow the system to determine which analytics adapter(s) are permitted to operate in the current context.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">12) User ID modules and Real Time Data modules should be associated with a GVL ID and/or a &quot;name&quot; to allow the system to determine which modules are permitted to operate in the current context.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">13) The system must be able to verify vendor consent in two ways:</span></p><ul class="c2 lst-kix_tb82mrxazni-0"><li class="c9"><span class="c0">User consents to GVL ID 52, and Prebid Server knows that 52 corresponds to the Rubicon bid adapter (and the Rubicon analytics adapter)</span></li><li class="c9"><span class="c0">The Host Company consents to the name &quot;bidderB&quot;, which would allow that biddercode to bid even if the user&#39;s Purpose 1 doesn&#39;t have specific consent.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">14) The internal interface to bid adapters should remain the same.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">15) The OpenRTB interface to Prebid Server should remain the same:</span></p><ul class="c2 lst-kix_u56eprq9ell0-0"><li class="c9"><span class="c0">regs.ext.gdpr </span></li><li class="c9"><span class="c0">user.ext.consent</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">16) The system must support all the activity enforcement noted in the &#39;Summary of Prebid TCF 2.0 Enforcement&#39; section.</span></p><ol class="c2 lst-kix_w5k728jy05vp-0 start" start="1"><li class="c9"><span class="c0">If Purpose 1 is being enforced:</span></li></ol><ol class="c2 lst-kix_w5k728jy05vp-1 start" start="1"><li class="c12 c16"><span class="c0">Before invoking /cookie_sync pixels for each enforceable vendor, verify consent as appropriate for the enforcement method.</span></li><li class="c12 c16"><span class="c0">Before setting a cookie on /setuid, verify consent for the Host Company&#39;s GVL ID as appropriate for the enforcement method</span></li><li class="c12 c16"><span class="c0">Before passing ID values to each enforceable vendor, verify consent as appropriate for the enforcement method.</span></li></ol><ol class="c2 lst-kix_w5k728jy05vp-0" start="2"><li class="c9"><span class="c0">If Purpose 2 is being enforced, verify consent for each vendor as appropriate for the enforcement method before calling a bid adapter. If consent is not granted, log a metric and skip it.</span></li><li class="c9"><span class="c0">If Purpose 4 is being enforced, verify consent for each vendor that passed the Purpose 2 test. If consent is not granted, log a metric, remove the bidrequest.userId attribute and call the adapter.</span></li><li class="c9"><span class="c0">If Purpose 7 is being enforced, verify consent for each analytics module. If consent is not granted, log a metric and skip it.</span></li><li class="c9"><span class="c0">If Special Feature 1 is being enforced, verify user opt-in. If the user has opted out, round off the IP address and lat/long details and log a metric.</span></li></ol><ol class="c2 lst-kix_w5k728jy05vp-1 start" start="1"><li class="c12 c16"><span class="c0">IP masking: for IPv4, zero out the last byte. For IPv6, zero out the last 2 bytes.</span></li><li class="c12 c16"><span class="c0">Check the OpenRtb packet for $.device.geo.lat, $.device.geo.lon, $.user.geo.lat, $.user.geo.lon. Round off the values to the last two decimal points if they exist.</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span>17) If GDPR is being enforced but </span><span>no consent string is available</span><span class="c0">, the system must assume that the user does not consent to either purpose or vendor. Activities may still take place if the Host Company has configured the relevant Purposes as &#39;not enforced&#39;.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">18) Prebid Server core must make the following information available to analytics adapters:</span></p><ul class="c2 lst-kix_w6yj8blbe06x-0"><li class="c9"><span class="c0">Enforcement status of Purposes 1,2,4,7, and Special Purpose 1</span></li><li class="c9"><span class="c0">An array of bidders and modules skipped due to TCF enforcement.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12 c13"><span class="c0"></span></p></body></html>
\ No newline at end of file
+<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><style type="text/css">@import url('https://themes.googleusercontent.com/fonts/css?kit=lhDjYqiy3mZ0x6ROQEUoUw');ol.lst-kix_7fhxg8i5msmt-8.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-8 0}.lst-kix_pkkwt0mfnd4r-1>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-1}ol.lst-kix_pkkwt0mfnd4r-8.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-8 0}.lst-kix_xygzk5z3cyvz-2>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-2}ol.lst-kix_xygzk5z3cyvz-5.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-5 0}.lst-kix_jwv9q4tqofnu-8>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-8}.lst-kix_u56eprq9ell0-1>li:before{content:"\0025cb  "}.lst-kix_u56eprq9ell0-2>li:before{content:"\0025a0  "}.lst-kix_u56eprq9ell0-0>li:before{content:"\0025cf  "}.lst-kix_5zdork13zaj5-2>li{counter-increment:lst-ctn-kix_5zdork13zaj5-2}ol.lst-kix_8irgp2z20781-7.start{counter-reset:lst-ctn-kix_8irgp2z20781-7 0}ol.lst-kix_5zdork13zaj5-6.start{counter-reset:lst-ctn-kix_5zdork13zaj5-6 0}.lst-kix_7fhxg8i5msmt-0>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-0}.lst-kix_3vftmdlxcpj0-7>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-7}.lst-kix_w5k728jy05vp-6>li{counter-increment:lst-ctn-kix_w5k728jy05vp-6}ol.lst-kix_pzmtiq5h0915-5.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-5 0}.lst-kix_ozkivkncyqrh-7>li:before{content:"\0025cb  "}.lst-kix_ozkivkncyqrh-6>li:before{content:"\0025cf  "}.lst-kix_ozkivkncyqrh-8>li:before{content:"\0025a0  "}.lst-kix_ozkivkncyqrh-5>li:before{content:"\0025a0  "}.lst-kix_svmmnj1snhr2-5>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-5}.lst-kix_6jgx19e9u9pe-5>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-5}.lst-kix_u56eprq9ell0-8>li:before{content:"\0025a0  "}.lst-kix_u56eprq9ell0-5>li:before{content:"\0025a0  "}.lst-kix_ozkivkncyqrh-0>li:before{content:"\0025cf  "}.lst-kix_u56eprq9ell0-7>li:before{content:"\0025cb  "}.lst-kix_ozkivkncyqrh-1>li:before{content:"\0025cb  "}.lst-kix_u56eprq9ell0-3>li:before{content:"\0025cf  "}ol.lst-kix_68qsl6zcqxrq-6.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-6 0}.lst-kix_u56eprq9ell0-6>li:before{content:"\0025cf  "}.lst-kix_ozkivkncyqrh-3>li:before{content:"\0025cf  "}.lst-kix_ozkivkncyqrh-2>li:before{content:"\0025a0  "}.lst-kix_ozkivkncyqrh-4>li:before{content:"\0025cb  "}.lst-kix_36fxx9lqc91n-1>li:before{content:"\0025cb  "}.lst-kix_u56eprq9ell0-4>li:before{content:"\0025cb  "}ol.lst-kix_6jgx19e9u9pe-8.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-8 0}.lst-kix_36fxx9lqc91n-0>li:before{content:"\0025cf  "}.lst-kix_7fhxg8i5msmt-6>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-6,decimal) ". "}ol.lst-kix_7fhxg8i5msmt-3.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-3 0}.lst-kix_7fhxg8i5msmt-5>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-5,lower-roman) ". "}ol.lst-kix_pkkwt0mfnd4r-3.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-3 0}.lst-kix_7fhxg8i5msmt-4>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-4,lower-latin) ". "}.lst-kix_68qsl6zcqxrq-1>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-1}ul.lst-kix_hii6fafh6hm-0{list-style-type:none}ul.lst-kix_hii6fafh6hm-1{list-style-type:none}.lst-kix_7fhxg8i5msmt-2>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-2,lower-roman) ". "}ul.lst-kix_hii6fafh6hm-2{list-style-type:none}ul.lst-kix_hii6fafh6hm-3{list-style-type:none}.lst-kix_7fhxg8i5msmt-1>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-1,lower-latin) ". "}.lst-kix_7fhxg8i5msmt-3>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-3,decimal) ". "}ul.lst-kix_hii6fafh6hm-4{list-style-type:none}ul.lst-kix_hii6fafh6hm-5{list-style-type:none}.lst-kix_w5k728jy05vp-2>li{counter-increment:lst-ctn-kix_w5k728jy05vp-2}ul.lst-kix_hii6fafh6hm-6{list-style-type:none}ul.lst-kix_hii6fafh6hm-7{list-style-type:none}ul.lst-kix_hii6fafh6hm-8{list-style-type:none}.lst-kix_jwv9q4tqofnu-4>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-4}.lst-kix_svmmnj1snhr2-1>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-1}.lst-kix_w6yj8blbe06x-6>li:before{content:"\0025cf  "}.lst-kix_w6yj8blbe06x-8>li:before{content:"\0025a0  "}.lst-kix_7fhxg8i5msmt-0>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-0,decimal) ". "}.lst-kix_7fhxg8i5msmt-7>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-7}.lst-kix_w6yj8blbe06x-7>li:before{content:"\0025cb  "}.lst-kix_3vftmdlxcpj0-0>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-0}ul.lst-kix_wchaiekwhio-7{list-style-type:none}ul.lst-kix_wchaiekwhio-6{list-style-type:none}ul.lst-kix_wchaiekwhio-5{list-style-type:none}ol.lst-kix_svmmnj1snhr2-7.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-7 0}.lst-kix_w6yj8blbe06x-0>li:before{content:"\0025cf  "}ul.lst-kix_wchaiekwhio-4{list-style-type:none}ul.lst-kix_wchaiekwhio-3{list-style-type:none}ul.lst-kix_wchaiekwhio-2{list-style-type:none}ul.lst-kix_wchaiekwhio-1{list-style-type:none}.lst-kix_w6yj8blbe06x-3>li:before{content:"\0025cf  "}ul.lst-kix_wchaiekwhio-0{list-style-type:none}ol.lst-kix_svmmnj1snhr2-0.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-0 0}.lst-kix_w6yj8blbe06x-4>li:before{content:"\0025cb  "}ol.lst-kix_68qsl6zcqxrq-1.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-1 0}ol.lst-kix_6fc6u2jowkph-4.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-4 0}.lst-kix_5zdork13zaj5-6>li{counter-increment:lst-ctn-kix_5zdork13zaj5-6}.lst-kix_w6yj8blbe06x-5>li:before{content:"\0025a0  "}.lst-kix_w6yj8blbe06x-2>li:before{content:"\0025a0  "}.lst-kix_w6yj8blbe06x-1>li:before{content:"\0025cb  "}ul.lst-kix_wchaiekwhio-8{list-style-type:none}ul.lst-kix_hxgng6in8mo4-7{list-style-type:none}ol.lst-kix_6fc6u2jowkph-8{list-style-type:none}.lst-kix_tb82mrxazni-7>li:before{content:"\0025cb  "}ul.lst-kix_hxgng6in8mo4-6{list-style-type:none}.lst-kix_6jgx19e9u9pe-1>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-1}ol.lst-kix_6fc6u2jowkph-7{list-style-type:none}ul.lst-kix_hxgng6in8mo4-5{list-style-type:none}ol.lst-kix_6fc6u2jowkph-6{list-style-type:none}.lst-kix_hxgng6in8mo4-1>li:before{content:"\0025cb  "}.lst-kix_hxgng6in8mo4-3>li:before{content:"\0025cf  "}ul.lst-kix_hxgng6in8mo4-4{list-style-type:none}.lst-kix_tb82mrxazni-5>li:before{content:"\0025a0  "}.lst-kix_68qsl6zcqxrq-4>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-4}.lst-kix_wz4xrdza29b-2>li:before{content:"\0025a0  "}.lst-kix_wz4xrdza29b-6>li:before{content:"\0025cf  "}ul.lst-kix_hxgng6in8mo4-8{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-8.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-8 0}.lst-kix_tb82mrxazni-3>li:before{content:"\0025cf  "}ol.lst-kix_pkkwt0mfnd4r-1.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-1 0}ol.lst-kix_w5k728jy05vp-2.start{counter-reset:lst-ctn-kix_w5k728jy05vp-2 0}ul.lst-kix_hxgng6in8mo4-3{list-style-type:none}ul.lst-kix_hxgng6in8mo4-2{list-style-type:none}.lst-kix_wz4xrdza29b-4>li:before{content:"\0025cb  "}ul.lst-kix_hxgng6in8mo4-1{list-style-type:none}ul.lst-kix_hxgng6in8mo4-0{list-style-type:none}.lst-kix_7fhxg8i5msmt-4>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-4}ol.lst-kix_5zdork13zaj5-1{list-style-type:none}ol.lst-kix_5zdork13zaj5-0{list-style-type:none}ol.lst-kix_pzmtiq5h0915-3.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-3 0}ol.lst-kix_6fc6u2jowkph-1{list-style-type:none}ol.lst-kix_5zdork13zaj5-7{list-style-type:none}ol.lst-kix_6fc6u2jowkph-0{list-style-type:none}ol.lst-kix_5zdork13zaj5-6{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-1.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-1 0}ol.lst-kix_5zdork13zaj5-8{list-style-type:none}ol.lst-kix_6fc6u2jowkph-5{list-style-type:none}ol.lst-kix_5zdork13zaj5-3{list-style-type:none}ol.lst-kix_6fc6u2jowkph-4{list-style-type:none}ol.lst-kix_5zdork13zaj5-2{list-style-type:none}ol.lst-kix_6fc6u2jowkph-3{list-style-type:none}ol.lst-kix_5zdork13zaj5-5{list-style-type:none}.lst-kix_wz4xrdza29b-8>li:before{content:"\0025a0  "}ol.lst-kix_6fc6u2jowkph-2{list-style-type:none}ol.lst-kix_5zdork13zaj5-4{list-style-type:none}.lst-kix_ewcld7rry2cw-1>li:before{content:"\0025cb  "}ol.lst-kix_xygzk5z3cyvz-6{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-7{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-8{list-style-type:none}.lst-kix_ewcld7rry2cw-5>li:before{content:"\0025a0  "}.lst-kix_6jgx19e9u9pe-2>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-2}.lst-kix_ewcld7rry2cw-7>li:before{content:"\0025cb  "}.lst-kix_6v7qjvftgbe8-2>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-2}.lst-kix_6fc6u2jowkph-5>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-5}ol.lst-kix_6jgx19e9u9pe-1.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-1 0}ul.lst-kix_u56eprq9ell0-0{list-style-type:none}ul.lst-kix_u56eprq9ell0-2{list-style-type:none}.lst-kix_tb82mrxazni-1>li:before{content:"\0025cb  "}ol.lst-kix_5zdork13zaj5-4.start{counter-reset:lst-ctn-kix_5zdork13zaj5-4 0}ul.lst-kix_u56eprq9ell0-1{list-style-type:none}.lst-kix_xygzk5z3cyvz-6>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-6}ul.lst-kix_u56eprq9ell0-4{list-style-type:none}ul.lst-kix_u56eprq9ell0-3{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-2{list-style-type:none}ul.lst-kix_u56eprq9ell0-6{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-3{list-style-type:none}ul.lst-kix_u56eprq9ell0-5{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-4{list-style-type:none}ul.lst-kix_u56eprq9ell0-8{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-5{list-style-type:none}ul.lst-kix_u56eprq9ell0-7{list-style-type:none}.lst-kix_hxgng6in8mo4-5>li:before{content:"\0025a0  "}.lst-kix_hxgng6in8mo4-7>li:before{content:"\0025cb  "}.lst-kix_ewcld7rry2cw-3>li:before{content:"\0025cf  "}ol.lst-kix_6v7qjvftgbe8-5.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-5 0}ol.lst-kix_xygzk5z3cyvz-0{list-style-type:none}.lst-kix_8irgp2z20781-6>li{counter-increment:lst-ctn-kix_8irgp2z20781-6}.lst-kix_wz4xrdza29b-0>li:before{content:"\0025cf  "}ol.lst-kix_xygzk5z3cyvz-1{list-style-type:none}.lst-kix_pzmtiq5h0915-5>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-5}ol.lst-kix_5zdork13zaj5-1.start{counter-reset:lst-ctn-kix_5zdork13zaj5-1 0}.lst-kix_7fhxg8i5msmt-8>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-8,lower-roman) ". "}.lst-kix_8irgp2z20781-4>li:before{content:"(" counter(lst-ctn-kix_8irgp2z20781-4,lower-latin) ") "}.lst-kix_8irgp2z20781-8>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-8,lower-roman) ". "}.lst-kix_36fxx9lqc91n-3>li:before{content:"\0025cf  "}.lst-kix_8irgp2z20781-6>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-6,decimal) ". "}.lst-kix_36fxx9lqc91n-5>li:before{content:"\0025a0  "}.lst-kix_36fxx9lqc91n-7>li:before{content:"\0025cb  "}.lst-kix_6v7qjvftgbe8-1>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-1}.lst-kix_pzmtiq5h0915-6>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-6}.lst-kix_8irgp2z20781-0>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-0,decimal) ") "}ol.lst-kix_6v7qjvftgbe8-8{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-7{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-6{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-5{list-style-type:none}.lst-kix_8irgp2z20781-2>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-2,lower-roman) ") "}ol.lst-kix_6v7qjvftgbe8-4{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-7.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-7 0}ol.lst-kix_6v7qjvftgbe8-3{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-2{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-1{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-0{list-style-type:none}.lst-kix_68qsl6zcqxrq-5>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-5}.lst-kix_7fhxg8i5msmt-3>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-3}.lst-kix_pkkwt0mfnd4r-5>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-5}ol.lst-kix_6fc6u2jowkph-7.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-7 0}.lst-kix_d8lzxbbe1553-0>li:before{content:"\0025cf  "}.lst-kix_3vftmdlxcpj0-7>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-7,lower-latin) ". "}.lst-kix_8irgp2z20781-5>li{counter-increment:lst-ctn-kix_8irgp2z20781-5}ol.lst-kix_pzmtiq5h0915-0.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-0 0}.lst-kix_d8lzxbbe1553-2>li:before{content:"\0025a0  "}.lst-kix_d8lzxbbe1553-4>li:before{content:"\0025cb  "}ol.lst-kix_xygzk5z3cyvz-0.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-0 0}.lst-kix_3vftmdlxcpj0-3>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-3,decimal) ". "}.lst-kix_3vftmdlxcpj0-5>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-5,lower-roman) ". "}ol.lst-kix_w5k728jy05vp-0.start{counter-reset:lst-ctn-kix_w5k728jy05vp-0 0}ol.lst-kix_6jgx19e9u9pe-3.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-3 0}.lst-kix_3vftmdlxcpj0-1>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-1,lower-latin) ". "}.lst-kix_d8lzxbbe1553-6>li:before{content:"\0025cf  "}.lst-kix_pzmtiq5h0915-8>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-8}.lst-kix_w5k728jy05vp-5>li{counter-increment:lst-ctn-kix_w5k728jy05vp-5}.lst-kix_jwv9q4tqofnu-5>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-5,lower-roman) ". "}.lst-kix_3vftmdlxcpj0-8>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-8}ol.lst-kix_pkkwt0mfnd4r-0{list-style-type:none}.lst-kix_6fc6u2jowkph-0>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-0,decimal) ". "}.lst-kix_5zdork13zaj5-1>li{counter-increment:lst-ctn-kix_5zdork13zaj5-1}.lst-kix_d8lzxbbe1553-8>li:before{content:"\0025a0  "}ol.lst-kix_pkkwt0mfnd4r-2{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-1{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-4{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-3{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-6{list-style-type:none}.lst-kix_jwv9q4tqofnu-6>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-6,decimal) ". "}ol.lst-kix_8irgp2z20781-8{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-5{list-style-type:none}ol.lst-kix_8irgp2z20781-7{list-style-type:none}ol.lst-kix_pkkwt0mfnd4r-8{list-style-type:none}.lst-kix_svmmnj1snhr2-4>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-4}ol.lst-kix_pkkwt0mfnd4r-7{list-style-type:none}.lst-kix_jwv9q4tqofnu-7>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-7}.lst-kix_6fc6u2jowkph-4>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-4,lower-latin) ". "}.lst-kix_xygzk5z3cyvz-0>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-0,decimal) ". "}.lst-kix_6fc6u2jowkph-3>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-3,decimal) ". "}.lst-kix_6fc6u2jowkph-7>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-7,lower-latin) ". "}ol.lst-kix_3vftmdlxcpj0-8.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-8 0}ol.lst-kix_5zdork13zaj5-3.start{counter-reset:lst-ctn-kix_5zdork13zaj5-3 0}.lst-kix_6v7qjvftgbe8-8>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-8}ol.lst-kix_8irgp2z20781-4.start{counter-reset:lst-ctn-kix_8irgp2z20781-4 0}.lst-kix_hii6fafh6hm-6>li:before{content:"\0025cf  "}.lst-kix_wchaiekwhio-2>li:before{content:"\0025a0  "}.lst-kix_xygzk5z3cyvz-3>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-3,decimal) ". "}.lst-kix_xygzk5z3cyvz-7>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-7,lower-latin) ". "}.lst-kix_xygzk5z3cyvz-4>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-4,lower-latin) ". "}.lst-kix_xygzk5z3cyvz-8>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-8,lower-roman) ". "}.lst-kix_6jgx19e9u9pe-8>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-8}ol.lst-kix_jwv9q4tqofnu-7.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-7 0}.lst-kix_6fc6u2jowkph-8>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-8,lower-roman) ". "}.lst-kix_wchaiekwhio-6>li:before{content:"\0025cf  "}ol.lst-kix_pkkwt0mfnd4r-0.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-0 0}ul.lst-kix_36fxx9lqc91n-1{list-style-type:none}.lst-kix_6fc6u2jowkph-8>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-8}ul.lst-kix_36fxx9lqc91n-2{list-style-type:none}.lst-kix_3vftmdlxcpj0-6>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-6}ul.lst-kix_36fxx9lqc91n-0{list-style-type:none}.lst-kix_wchaiekwhio-7>li:before{content:"\0025cb  "}ul.lst-kix_36fxx9lqc91n-5{list-style-type:none}ol.lst-kix_pzmtiq5h0915-2.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-2 0}ul.lst-kix_36fxx9lqc91n-6{list-style-type:none}ul.lst-kix_36fxx9lqc91n-3{list-style-type:none}ul.lst-kix_36fxx9lqc91n-4{list-style-type:none}.lst-kix_xygzk5z3cyvz-3>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-3}ol.lst-kix_3vftmdlxcpj0-2.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-2 0}ol.lst-kix_6jgx19e9u9pe-5.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-5 0}.lst-kix_68qsl6zcqxrq-0>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-0}ul.lst-kix_36fxx9lqc91n-7{list-style-type:none}ul.lst-kix_36fxx9lqc91n-8{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-1.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-1 0}.lst-kix_svmmnj1snhr2-2>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-2}ol.lst-kix_68qsl6zcqxrq-3.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-3 0}.lst-kix_wchaiekwhio-3>li:before{content:"\0025cf  "}.lst-kix_6fc6u2jowkph-6>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-6}ol.lst-kix_6jgx19e9u9pe-6{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-5{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-8{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-7{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-0{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-2{list-style-type:none}.lst-kix_jwv9q4tqofnu-5>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-5}ol.lst-kix_6jgx19e9u9pe-1{list-style-type:none}.lst-kix_68qsl6zcqxrq-7>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-7}ol.lst-kix_6jgx19e9u9pe-4{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-3{list-style-type:none}ul.lst-kix_wz4xrdza29b-3{list-style-type:none}ul.lst-kix_wz4xrdza29b-2{list-style-type:none}ul.lst-kix_wz4xrdza29b-5{list-style-type:none}.lst-kix_pzmtiq5h0915-3>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-3,decimal) ". "}ul.lst-kix_wz4xrdza29b-4{list-style-type:none}ul.lst-kix_wz4xrdza29b-1{list-style-type:none}ul.lst-kix_wz4xrdza29b-0{list-style-type:none}.lst-kix_xygzk5z3cyvz-5>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-5}ul.lst-kix_wz4xrdza29b-7{list-style-type:none}ul.lst-kix_wz4xrdza29b-6{list-style-type:none}ol.lst-kix_w5k728jy05vp-4.start{counter-reset:lst-ctn-kix_w5k728jy05vp-4 0}.lst-kix_pzmtiq5h0915-0>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-0,decimal) ". "}ul.lst-kix_wz4xrdza29b-8{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-8.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-8 0}ol.lst-kix_jwv9q4tqofnu-0.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-0 0}ol.lst-kix_w5k728jy05vp-3.start{counter-reset:lst-ctn-kix_w5k728jy05vp-3 0}ol.lst-kix_8irgp2z20781-5.start{counter-reset:lst-ctn-kix_8irgp2z20781-5 0}ol.lst-kix_6jgx19e9u9pe-6.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-6 0}ol.lst-kix_3vftmdlxcpj0-1.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-1 0}.lst-kix_xcsisnkihklz-4>li:before{content:"\0025cb  "}.lst-kix_pzmtiq5h0915-4>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-4,lower-latin) ". "}ol.lst-kix_jwv9q4tqofnu-8{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-7{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-6{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-5{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-4{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-3{list-style-type:none}.lst-kix_xcsisnkihklz-1>li:before{content:"\0025cb  "}ol.lst-kix_jwv9q4tqofnu-2{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-1{list-style-type:none}.lst-kix_6v7qjvftgbe8-3>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-3}ol.lst-kix_jwv9q4tqofnu-0{list-style-type:none}.lst-kix_pzmtiq5h0915-1>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-1}.lst-kix_pzmtiq5h0915-7>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-7,lower-latin) ". "}.lst-kix_xcsisnkihklz-0>li:before{content:"\0025cf  "}ol.lst-kix_jwv9q4tqofnu-6.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-6 0}.lst-kix_pzmtiq5h0915-8>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-8,lower-roman) ". "}ol.lst-kix_3vftmdlxcpj0-7.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-7 0}ol.lst-kix_68qsl6zcqxrq-2.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-2 0}.lst-kix_6jgx19e9u9pe-1>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-1,lower-latin) ". "}.lst-kix_tb82mrxazni-8>li:before{content:"\0025a0  "}.lst-kix_hxgng6in8mo4-0>li:before{content:"\0025cf  "}.lst-kix_hxgng6in8mo4-4>li:before{content:"\0025cb  "}.lst-kix_tb82mrxazni-4>li:before{content:"\0025cb  "}.lst-kix_wz4xrdza29b-3>li:before{content:"\0025cf  "}ol.lst-kix_68qsl6zcqxrq-5.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-5 0}.lst-kix_w5k728jy05vp-0>li{counter-increment:lst-ctn-kix_w5k728jy05vp-0}.lst-kix_ewcld7rry2cw-8>li:before{content:"\0025a0  "}ol.lst-kix_jwv9q4tqofnu-5.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-5 0}.lst-kix_6jgx19e9u9pe-5>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-5,lower-roman) ". "}.lst-kix_wz4xrdza29b-7>li:before{content:"\0025cb  "}ol.lst-kix_pzmtiq5h0915-6.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-6 0}.lst-kix_xcsisnkihklz-8>li:before{content:"\0025a0  "}.lst-kix_ewcld7rry2cw-0>li:before{content:"\0025cf  "}.lst-kix_6v7qjvftgbe8-5>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-5}ol.lst-kix_3vftmdlxcpj0-6.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-6 0}ol.lst-kix_w5k728jy05vp-5.start{counter-reset:lst-ctn-kix_w5k728jy05vp-5 0}.lst-kix_3vftmdlxcpj0-1>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-1}.lst-kix_3vftmdlxcpj0-3>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-3}.lst-kix_pzmtiq5h0915-3>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-3}.lst-kix_tb82mrxazni-0>li:before{content:"\0025cf  "}.lst-kix_hxgng6in8mo4-8>li:before{content:"\0025a0  "}ol.lst-kix_w5k728jy05vp-8.start{counter-reset:lst-ctn-kix_w5k728jy05vp-8 0}ol.lst-kix_8irgp2z20781-3.start{counter-reset:lst-ctn-kix_8irgp2z20781-3 0}.lst-kix_7fhxg8i5msmt-5>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-5}.lst-kix_ewcld7rry2cw-4>li:before{content:"\0025cb  "}ol.lst-kix_8irgp2z20781-0.start{counter-reset:lst-ctn-kix_8irgp2z20781-0 0}ol.lst-kix_5zdork13zaj5-7.start{counter-reset:lst-ctn-kix_5zdork13zaj5-7 0}ol.lst-kix_5zdork13zaj5-8.start{counter-reset:lst-ctn-kix_5zdork13zaj5-8 0}.lst-kix_7fhxg8i5msmt-7>li:before{content:"" counter(lst-ctn-kix_7fhxg8i5msmt-7,lower-latin) ". "}.lst-kix_8irgp2z20781-5>li:before{content:"(" counter(lst-ctn-kix_8irgp2z20781-5,lower-roman) ") "}.lst-kix_6v7qjvftgbe8-7>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-7,lower-latin) ". "}.lst-kix_6v7qjvftgbe8-3>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-3,decimal) ". "}.lst-kix_36fxx9lqc91n-2>li:before{content:"\0025a0  "}.lst-kix_5zdork13zaj5-4>li{counter-increment:lst-ctn-kix_5zdork13zaj5-4}ol.lst-kix_8irgp2z20781-2.start{counter-reset:lst-ctn-kix_8irgp2z20781-2 0}.lst-kix_pkkwt0mfnd4r-1>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-1,lower-latin) ". "}.lst-kix_36fxx9lqc91n-6>li:before{content:"\0025cf  "}ul.lst-kix_tb82mrxazni-8{list-style-type:none}ul.lst-kix_tb82mrxazni-7{list-style-type:none}.lst-kix_l0zuj3yh3ryb-3>li:before{content:"\0025cf  "}ol.lst-kix_pzmtiq5h0915-8.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-8 0}ul.lst-kix_tb82mrxazni-6{list-style-type:none}ul.lst-kix_tb82mrxazni-5{list-style-type:none}ol.lst-kix_w5k728jy05vp-0{list-style-type:none}ul.lst-kix_tb82mrxazni-4{list-style-type:none}ul.lst-kix_tb82mrxazni-3{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-4.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-4 0}ul.lst-kix_tb82mrxazni-2{list-style-type:none}ol.lst-kix_w5k728jy05vp-7.start{counter-reset:lst-ctn-kix_w5k728jy05vp-7 0}ul.lst-kix_tb82mrxazni-1{list-style-type:none}ol.lst-kix_w5k728jy05vp-4{list-style-type:none}ul.lst-kix_tb82mrxazni-0{list-style-type:none}ol.lst-kix_w5k728jy05vp-3{list-style-type:none}ol.lst-kix_w5k728jy05vp-2{list-style-type:none}ol.lst-kix_jwv9q4tqofnu-2.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-2 0}.lst-kix_8irgp2z20781-1>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-1,lower-latin) ") "}.lst-kix_l0zuj3yh3ryb-7>li:before{content:"\0025cb  "}ol.lst-kix_3vftmdlxcpj0-3.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-3 0}ol.lst-kix_w5k728jy05vp-1{list-style-type:none}ol.lst-kix_w5k728jy05vp-8{list-style-type:none}.lst-kix_pkkwt0mfnd4r-5>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-5,lower-roman) ". "}ol.lst-kix_w5k728jy05vp-7{list-style-type:none}ol.lst-kix_w5k728jy05vp-6{list-style-type:none}ol.lst-kix_w5k728jy05vp-5{list-style-type:none}.lst-kix_w5k728jy05vp-8>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-8,lower-roman) ". "}.lst-kix_pkkwt0mfnd4r-8>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-8}.lst-kix_jwv9q4tqofnu-0>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-0}.lst-kix_68qsl6zcqxrq-2>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-2}.lst-kix_d8lzxbbe1553-1>li:before{content:"\0025cb  "}.lst-kix_w5k728jy05vp-7>li{counter-increment:lst-ctn-kix_w5k728jy05vp-7}ol.lst-kix_3vftmdlxcpj0-4.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-4 0}.lst-kix_hii6fafh6hm-2>li:before{content:"\0025a0  "}.lst-kix_3vftmdlxcpj0-6>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-6,decimal) ". "}.lst-kix_8irgp2z20781-2>li{counter-increment:lst-ctn-kix_8irgp2z20781-2}ol.lst-kix_8irgp2z20781-6{list-style-type:none}ol.lst-kix_8irgp2z20781-5{list-style-type:none}.lst-kix_d8lzxbbe1553-5>li:before{content:"\0025a0  "}ol.lst-kix_jwv9q4tqofnu-3.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-3 0}ol.lst-kix_8irgp2z20781-4{list-style-type:none}ol.lst-kix_8irgp2z20781-3{list-style-type:none}ol.lst-kix_8irgp2z20781-2{list-style-type:none}ol.lst-kix_8irgp2z20781-1{list-style-type:none}ol.lst-kix_8irgp2z20781-0{list-style-type:none}ol.lst-kix_pzmtiq5h0915-7.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-7 0}.lst-kix_3vftmdlxcpj0-2>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-2,lower-roman) ". "}.lst-kix_6fc6u2jowkph-1>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-1}.lst-kix_jwv9q4tqofnu-2>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-2,lower-roman) ". "}ul.lst-kix_w6yj8blbe06x-6{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-1.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-1 0}ul.lst-kix_w6yj8blbe06x-7{list-style-type:none}.lst-kix_68qsl6zcqxrq-4>li:before{content:"(" counter(lst-ctn-kix_68qsl6zcqxrq-4,lower-latin) ") "}.lst-kix_68qsl6zcqxrq-5>li:before{content:"(" counter(lst-ctn-kix_68qsl6zcqxrq-5,lower-roman) ") "}ol.lst-kix_3vftmdlxcpj0-5.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-5 0}.lst-kix_svmmnj1snhr2-8>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-8,lower-roman) ". "}ul.lst-kix_w6yj8blbe06x-4{list-style-type:none}ul.lst-kix_w6yj8blbe06x-5{list-style-type:none}.lst-kix_6jgx19e9u9pe-7>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-7}.lst-kix_68qsl6zcqxrq-6>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-6,decimal) ". "}ol.lst-kix_6jgx19e9u9pe-2.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-2 0}ul.lst-kix_w6yj8blbe06x-8{list-style-type:none}.lst-kix_68qsl6zcqxrq-2>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-2,lower-roman) ") "}.lst-kix_68qsl6zcqxrq-1>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-1,lower-latin) ") "}ol.lst-kix_6fc6u2jowkph-3.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-3 0}.lst-kix_68qsl6zcqxrq-8>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-8,lower-roman) ". "}.lst-kix_svmmnj1snhr2-4>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-4,lower-latin) ". "}ol.lst-kix_svmmnj1snhr2-6.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-6 0}ol.lst-kix_jwv9q4tqofnu-4.start{counter-reset:lst-ctn-kix_jwv9q4tqofnu-4 0}.lst-kix_68qsl6zcqxrq-7>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-7,lower-latin) ". "}.lst-kix_svmmnj1snhr2-2>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-2,lower-roman) ". "}.lst-kix_svmmnj1snhr2-3>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-3,decimal) ". "}.lst-kix_68qsl6zcqxrq-0>li:before{content:"" counter(lst-ctn-kix_68qsl6zcqxrq-0,decimal) ") "}ol.lst-kix_w5k728jy05vp-6.start{counter-reset:lst-ctn-kix_w5k728jy05vp-6 0}.lst-kix_svmmnj1snhr2-3>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-3}ol.lst-kix_8irgp2z20781-1.start{counter-reset:lst-ctn-kix_8irgp2z20781-1 0}.lst-kix_svmmnj1snhr2-5>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-5,lower-roman) ". "}.lst-kix_68qsl6zcqxrq-3>li:before{content:"(" counter(lst-ctn-kix_68qsl6zcqxrq-3,decimal) ") "}.lst-kix_svmmnj1snhr2-6>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-6,decimal) ". "}.lst-kix_svmmnj1snhr2-7>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-7,lower-latin) ". "}.lst-kix_w5k728jy05vp-2>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-2,lower-roman) ". "}ol.lst-kix_5zdork13zaj5-0.start{counter-reset:lst-ctn-kix_5zdork13zaj5-0 0}.lst-kix_w5k728jy05vp-3>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-3,decimal) ". "}ol.lst-kix_w5k728jy05vp-1.start{counter-reset:lst-ctn-kix_w5k728jy05vp-1 0}ol.lst-kix_7fhxg8i5msmt-2.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-2 0}.lst-kix_w5k728jy05vp-4>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-4,lower-latin) ". "}.lst-kix_w5k728jy05vp-1>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-1,lower-latin) ". "}ul.lst-kix_w6yj8blbe06x-2{list-style-type:none}ul.lst-kix_w6yj8blbe06x-3{list-style-type:none}ul.lst-kix_w6yj8blbe06x-0{list-style-type:none}ul.lst-kix_w6yj8blbe06x-1{list-style-type:none}.lst-kix_xygzk5z3cyvz-0>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-0}.lst-kix_w5k728jy05vp-0>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-0,decimal) ". "}.lst-kix_w5k728jy05vp-8>li{counter-increment:lst-ctn-kix_w5k728jy05vp-8}ol.lst-kix_6jgx19e9u9pe-7.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-7 0}ol.lst-kix_8irgp2z20781-6.start{counter-reset:lst-ctn-kix_8irgp2z20781-6 0}.lst-kix_8irgp2z20781-0>li{counter-increment:lst-ctn-kix_8irgp2z20781-0}ol.lst-kix_68qsl6zcqxrq-0.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-0 0}.lst-kix_6fc6u2jowkph-0>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-0}ol.lst-kix_3vftmdlxcpj0-0.start{counter-reset:lst-ctn-kix_3vftmdlxcpj0-0 0}ol.lst-kix_pzmtiq5h0915-4.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-4 0}ol.lst-kix_svmmnj1snhr2-1.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-1 0}.lst-kix_8irgp2z20781-7>li{counter-increment:lst-ctn-kix_8irgp2z20781-7}ol.lst-kix_68qsl6zcqxrq-7.start{counter-reset:lst-ctn-kix_68qsl6zcqxrq-7 0}.lst-kix_pkkwt0mfnd4r-3>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-3}.lst-kix_svmmnj1snhr2-7>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-7}.lst-kix_5zdork13zaj5-0>li{counter-increment:lst-ctn-kix_5zdork13zaj5-0}.lst-kix_5zdork13zaj5-8>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-8,lower-roman) ". "}ol.lst-kix_5zdork13zaj5-5.start{counter-reset:lst-ctn-kix_5zdork13zaj5-5 0}.lst-kix_5zdork13zaj5-2>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-2,lower-roman) ". "}.lst-kix_svmmnj1snhr2-0>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-0,decimal) ". "}.lst-kix_svmmnj1snhr2-1>li:before{content:"" counter(lst-ctn-kix_svmmnj1snhr2-1,lower-latin) ". "}.lst-kix_5zdork13zaj5-3>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-3,decimal) ". "}.lst-kix_6jgx19e9u9pe-0>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-0}.lst-kix_6jgx19e9u9pe-3>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-3}.lst-kix_5zdork13zaj5-4>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-4,lower-latin) ". "}.lst-kix_6v7qjvftgbe8-0>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-0}.lst-kix_5zdork13zaj5-5>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-5,lower-roman) ". "}.lst-kix_5zdork13zaj5-7>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-7,lower-latin) ". "}.lst-kix_pzmtiq5h0915-7>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-7}.lst-kix_5zdork13zaj5-6>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-6,decimal) ". "}ol.lst-kix_pzmtiq5h0915-7{list-style-type:none}.lst-kix_6jgx19e9u9pe-2>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-2,lower-roman) ". "}.lst-kix_6fc6u2jowkph-3>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-3}ol.lst-kix_pzmtiq5h0915-6{list-style-type:none}ol.lst-kix_pzmtiq5h0915-8{list-style-type:none}.lst-kix_jwv9q4tqofnu-2>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-2}.lst-kix_5zdork13zaj5-7>li{counter-increment:lst-ctn-kix_5zdork13zaj5-7}.lst-kix_6jgx19e9u9pe-6>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-6,decimal) ". "}ol.lst-kix_pzmtiq5h0915-1{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-8.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-8 0}ol.lst-kix_pzmtiq5h0915-0{list-style-type:none}ol.lst-kix_pzmtiq5h0915-3{list-style-type:none}.lst-kix_6jgx19e9u9pe-0>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-0,decimal) ". "}ol.lst-kix_xygzk5z3cyvz-1.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-1 0}ol.lst-kix_pzmtiq5h0915-2{list-style-type:none}.lst-kix_6jgx19e9u9pe-8>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-8,lower-roman) ". "}ol.lst-kix_pzmtiq5h0915-5{list-style-type:none}ol.lst-kix_pzmtiq5h0915-4{list-style-type:none}ul.lst-kix_ewcld7rry2cw-7{list-style-type:none}.lst-kix_8irgp2z20781-4>li{counter-increment:lst-ctn-kix_8irgp2z20781-4}ul.lst-kix_ewcld7rry2cw-6{list-style-type:none}.lst-kix_5zdork13zaj5-8>li{counter-increment:lst-ctn-kix_5zdork13zaj5-8}ul.lst-kix_ewcld7rry2cw-8{list-style-type:none}.lst-kix_5zdork13zaj5-1>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-1,lower-latin) ". "}.lst-kix_pkkwt0mfnd4r-6>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-6}.lst-kix_xcsisnkihklz-5>li:before{content:"\0025a0  "}.lst-kix_xcsisnkihklz-7>li:before{content:"\0025cb  "}.lst-kix_6jgx19e9u9pe-4>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-4,lower-latin) ". "}.lst-kix_xygzk5z3cyvz-8>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-8}.lst-kix_pkkwt0mfnd4r-8>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-8,lower-roman) ". "}ul.lst-kix_ewcld7rry2cw-1{list-style-type:none}ul.lst-kix_ewcld7rry2cw-0{list-style-type:none}ul.lst-kix_ewcld7rry2cw-3{list-style-type:none}ul.lst-kix_ewcld7rry2cw-2{list-style-type:none}ul.lst-kix_ewcld7rry2cw-5{list-style-type:none}ul.lst-kix_ewcld7rry2cw-4{list-style-type:none}.lst-kix_68qsl6zcqxrq-6>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-6}.lst-kix_pzmtiq5h0915-0>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-0}.lst-kix_7fhxg8i5msmt-2>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-2}.lst-kix_3vftmdlxcpj0-5>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-5}ol.lst-kix_svmmnj1snhr2-2{list-style-type:none}.lst-kix_6v7qjvftgbe8-6>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-6,decimal) ". "}ol.lst-kix_svmmnj1snhr2-3{list-style-type:none}ol.lst-kix_svmmnj1snhr2-0{list-style-type:none}ol.lst-kix_svmmnj1snhr2-1{list-style-type:none}.lst-kix_6v7qjvftgbe8-4>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-4,lower-latin) ". "}ol.lst-kix_6v7qjvftgbe8-6.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-6 0}.lst-kix_l0zuj3yh3ryb-8>li:before{content:"\0025a0  "}.lst-kix_pkkwt0mfnd4r-0>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-0,decimal) ". "}.lst-kix_svmmnj1snhr2-0>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-0}ol.lst-kix_svmmnj1snhr2-8{list-style-type:none}ol.lst-kix_svmmnj1snhr2-6{list-style-type:none}.lst-kix_svmmnj1snhr2-6>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-6}ul.lst-kix_xcsisnkihklz-7{list-style-type:none}.lst-kix_pkkwt0mfnd4r-2>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-2,lower-roman) ". "}ol.lst-kix_svmmnj1snhr2-7{list-style-type:none}ul.lst-kix_xcsisnkihklz-6{list-style-type:none}ol.lst-kix_6fc6u2jowkph-8.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-8 0}ol.lst-kix_svmmnj1snhr2-4{list-style-type:none}ol.lst-kix_svmmnj1snhr2-5{list-style-type:none}ul.lst-kix_xcsisnkihklz-8{list-style-type:none}.lst-kix_6v7qjvftgbe8-7>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-7}.lst-kix_l0zuj3yh3ryb-4>li:before{content:"\0025cb  "}ul.lst-kix_xcsisnkihklz-3{list-style-type:none}.lst-kix_pkkwt0mfnd4r-4>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-4,lower-latin) ". "}ul.lst-kix_xcsisnkihklz-2{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-4.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-4 0}ul.lst-kix_xcsisnkihklz-5{list-style-type:none}.lst-kix_w5k728jy05vp-5>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-5,lower-roman) ". "}.lst-kix_w5k728jy05vp-7>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-7,lower-latin) ". "}ul.lst-kix_xcsisnkihklz-4{list-style-type:none}.lst-kix_6v7qjvftgbe8-0>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-0,decimal) ". "}ol.lst-kix_pzmtiq5h0915-1.start{counter-reset:lst-ctn-kix_pzmtiq5h0915-1 0}ul.lst-kix_xcsisnkihklz-1{list-style-type:none}ul.lst-kix_xcsisnkihklz-0{list-style-type:none}.lst-kix_6v7qjvftgbe8-2>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-2,lower-roman) ". "}.lst-kix_pkkwt0mfnd4r-6>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-6,decimal) ". "}.lst-kix_l0zuj3yh3ryb-6>li:before{content:"\0025cf  "}.lst-kix_hii6fafh6hm-5>li:before{content:"\0025a0  "}ol.lst-kix_pkkwt0mfnd4r-2.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-2 0}ol.lst-kix_5zdork13zaj5-2.start{counter-reset:lst-ctn-kix_5zdork13zaj5-2 0}.lst-kix_hii6fafh6hm-3>li:before{content:"\0025cf  "}.lst-kix_xygzk5z3cyvz-7>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-7}.lst-kix_hii6fafh6hm-1>li:before{content:"\0025cb  "}.lst-kix_w5k728jy05vp-4>li{counter-increment:lst-ctn-kix_w5k728jy05vp-4}.lst-kix_jwv9q4tqofnu-3>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-3}.lst-kix_xygzk5z3cyvz-1>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-1}.lst-kix_l0zuj3yh3ryb-2>li:before{content:"\0025a0  "}.lst-kix_l0zuj3yh3ryb-0>li:before{content:"\0025cf  "}.lst-kix_6fc6u2jowkph-4>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-4}ol.lst-kix_8irgp2z20781-8.start{counter-reset:lst-ctn-kix_8irgp2z20781-8 0}ol.lst-kix_7fhxg8i5msmt-0.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-0 0}.lst-kix_jwv9q4tqofnu-3>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-3,decimal) ". "}ol.lst-kix_7fhxg8i5msmt-8{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-6{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-7{list-style-type:none}.lst-kix_jwv9q4tqofnu-1>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-1,lower-latin) ". "}.lst-kix_jwv9q4tqofnu-0>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-0,decimal) ". "}.lst-kix_jwv9q4tqofnu-4>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-4,lower-latin) ". "}ul.lst-kix_l0zuj3yh3ryb-0{list-style-type:none}ul.lst-kix_l0zuj3yh3ryb-1{list-style-type:none}.lst-kix_jwv9q4tqofnu-7>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-7,lower-latin) ". "}ol.lst-kix_7fhxg8i5msmt-0{list-style-type:none}.lst-kix_3vftmdlxcpj0-0>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-0,decimal) ". "}ol.lst-kix_7fhxg8i5msmt-1{list-style-type:none}.lst-kix_6fc6u2jowkph-2>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-2,lower-roman) ". "}ol.lst-kix_7fhxg8i5msmt-4{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-5{list-style-type:none}.lst-kix_6fc6u2jowkph-1>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-1,lower-latin) ". "}ol.lst-kix_7fhxg8i5msmt-2{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-3{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-4.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-4 0}.lst-kix_pkkwt0mfnd4r-0>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-0}ol.lst-kix_pkkwt0mfnd4r-5.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-5 0}.lst-kix_jwv9q4tqofnu-8>li:before{content:"" counter(lst-ctn-kix_jwv9q4tqofnu-8,lower-roman) ". "}.lst-kix_xygzk5z3cyvz-1>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-1,lower-latin) ". "}ol.lst-kix_xygzk5z3cyvz-2.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-2 0}.lst-kix_6fc6u2jowkph-6>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-6,decimal) ". "}.lst-kix_xygzk5z3cyvz-2>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-2,lower-roman) ". "}.lst-kix_6fc6u2jowkph-5>li:before{content:"" counter(lst-ctn-kix_6fc6u2jowkph-5,lower-roman) ". "}ol.lst-kix_svmmnj1snhr2-3.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-3 0}.lst-kix_xygzk5z3cyvz-5>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-5,lower-roman) ". "}.lst-kix_wchaiekwhio-0>li:before{content:"\0025cf  "}.lst-kix_hii6fafh6hm-7>li:before{content:"\0025cb  "}.lst-kix_wchaiekwhio-1>li:before{content:"\0025cb  "}.lst-kix_wchaiekwhio-5>li:before{content:"\0025a0  "}ol.lst-kix_6fc6u2jowkph-0.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-0 0}.lst-kix_hii6fafh6hm-8>li:before{content:"\0025a0  "}.lst-kix_xygzk5z3cyvz-6>li:before{content:"" counter(lst-ctn-kix_xygzk5z3cyvz-6,decimal) ". "}ol.lst-kix_6fc6u2jowkph-6.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-6 0}ul.lst-kix_l0zuj3yh3ryb-2{list-style-type:none}.lst-kix_7fhxg8i5msmt-8>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-8}ul.lst-kix_l0zuj3yh3ryb-3{list-style-type:none}.lst-kix_6v7qjvftgbe8-8>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-8,lower-roman) ". "}ul.lst-kix_l0zuj3yh3ryb-4{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-8.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-8 0}ul.lst-kix_l0zuj3yh3ryb-5{list-style-type:none}.lst-kix_wchaiekwhio-4>li:before{content:"\0025cb  "}ul.lst-kix_l0zuj3yh3ryb-6{list-style-type:none}ol.lst-kix_7fhxg8i5msmt-5.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-5 0}ul.lst-kix_l0zuj3yh3ryb-7{list-style-type:none}ul.lst-kix_l0zuj3yh3ryb-8{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-8{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-6{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-7{list-style-type:none}ol.lst-kix_svmmnj1snhr2-8.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-8 0}ol.lst-kix_68qsl6zcqxrq-4{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-5{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-2{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-3{list-style-type:none}ol.lst-kix_6jgx19e9u9pe-0.start{counter-reset:lst-ctn-kix_6jgx19e9u9pe-0 0}.lst-kix_pkkwt0mfnd4r-4>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-4}ol.lst-kix_68qsl6zcqxrq-0{list-style-type:none}ol.lst-kix_68qsl6zcqxrq-1{list-style-type:none}ol.lst-kix_6v7qjvftgbe8-3.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-3 0}.lst-kix_7fhxg8i5msmt-1>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-1}.lst-kix_w5k728jy05vp-3>li{counter-increment:lst-ctn-kix_w5k728jy05vp-3}.lst-kix_pzmtiq5h0915-1>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-1,lower-latin) ". "}.lst-kix_wchaiekwhio-8>li:before{content:"\0025a0  "}ol.lst-kix_6fc6u2jowkph-5.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-5 0}.lst-kix_3vftmdlxcpj0-4>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-4}.lst-kix_pzmtiq5h0915-2>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-2,lower-roman) ". "}.lst-kix_8irgp2z20781-1>li{counter-increment:lst-ctn-kix_8irgp2z20781-1}.lst-kix_5zdork13zaj5-3>li{counter-increment:lst-ctn-kix_5zdork13zaj5-3}.lst-kix_pzmtiq5h0915-6>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-6,decimal) ". "}ol.lst-kix_pkkwt0mfnd4r-4.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-4 0}.lst-kix_pzmtiq5h0915-5>li:before{content:"" counter(lst-ctn-kix_pzmtiq5h0915-5,lower-roman) ". "}ul.lst-kix_d8lzxbbe1553-4{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-1{list-style-type:none}ul.lst-kix_d8lzxbbe1553-5{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-0{list-style-type:none}.lst-kix_6jgx19e9u9pe-6>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-6}.lst-kix_xcsisnkihklz-2>li:before{content:"\0025a0  "}.lst-kix_xcsisnkihklz-3>li:before{content:"\0025cf  "}ul.lst-kix_d8lzxbbe1553-6{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-3{list-style-type:none}ul.lst-kix_d8lzxbbe1553-7{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-2{list-style-type:none}ul.lst-kix_d8lzxbbe1553-0{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-5{list-style-type:none}ul.lst-kix_d8lzxbbe1553-1{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-4{list-style-type:none}ul.lst-kix_d8lzxbbe1553-2{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-7{list-style-type:none}ul.lst-kix_d8lzxbbe1553-3{list-style-type:none}ol.lst-kix_3vftmdlxcpj0-6{list-style-type:none}.lst-kix_pzmtiq5h0915-4>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-4}ol.lst-kix_3vftmdlxcpj0-8{list-style-type:none}.lst-kix_6v7qjvftgbe8-6>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-6}ul.lst-kix_d8lzxbbe1553-8{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-3.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-3 0}.lst-kix_wz4xrdza29b-5>li:before{content:"\0025a0  "}.lst-kix_pzmtiq5h0915-2>li{counter-increment:lst-ctn-kix_pzmtiq5h0915-2}.lst-kix_tb82mrxazni-6>li:before{content:"\0025cf  "}.lst-kix_6jgx19e9u9pe-3>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-3,decimal) ". "}.lst-kix_pkkwt0mfnd4r-7>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-7}.lst-kix_tb82mrxazni-2>li:before{content:"\0025a0  "}.lst-kix_6jgx19e9u9pe-7>li:before{content:"" counter(lst-ctn-kix_6jgx19e9u9pe-7,lower-latin) ". "}.lst-kix_hxgng6in8mo4-2>li:before{content:"\0025a0  "}.lst-kix_6v7qjvftgbe8-4>li{counter-increment:lst-ctn-kix_6v7qjvftgbe8-4}.lst-kix_jwv9q4tqofnu-1>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-1}.lst-kix_5zdork13zaj5-0>li:before{content:"" counter(lst-ctn-kix_5zdork13zaj5-0,decimal) ". "}.lst-kix_xcsisnkihklz-6>li:before{content:"\0025cf  "}ol.lst-kix_7fhxg8i5msmt-4.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-4 0}.lst-kix_ewcld7rry2cw-2>li:before{content:"\0025a0  "}ol.lst-kix_6fc6u2jowkph-2.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-2 0}ol.lst-kix_svmmnj1snhr2-2.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-2 0}ol.lst-kix_6v7qjvftgbe8-2.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-2 0}ol.lst-kix_xygzk5z3cyvz-4.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-4 0}.lst-kix_svmmnj1snhr2-8>li{counter-increment:lst-ctn-kix_svmmnj1snhr2-8}.lst-kix_6fc6u2jowkph-2>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-2}.lst-kix_ewcld7rry2cw-6>li:before{content:"\0025cf  "}ol.lst-kix_svmmnj1snhr2-5.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-5 0}.lst-kix_68qsl6zcqxrq-3>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-3}ol.lst-kix_pkkwt0mfnd4r-6.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-6 0}.lst-kix_wz4xrdza29b-1>li:before{content:"\0025cb  "}.lst-kix_8irgp2z20781-3>li{counter-increment:lst-ctn-kix_8irgp2z20781-3}.lst-kix_hxgng6in8mo4-6>li:before{content:"\0025cf  "}.lst-kix_6v7qjvftgbe8-5>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-5,lower-roman) ". "}ol.lst-kix_6fc6u2jowkph-1.start{counter-reset:lst-ctn-kix_6fc6u2jowkph-1 0}.lst-kix_8irgp2z20781-3>li:before{content:"(" counter(lst-ctn-kix_8irgp2z20781-3,decimal) ") "}.lst-kix_6jgx19e9u9pe-4>li{counter-increment:lst-ctn-kix_6jgx19e9u9pe-4}.lst-kix_8irgp2z20781-7>li:before{content:"" counter(lst-ctn-kix_8irgp2z20781-7,lower-latin) ". "}.lst-kix_36fxx9lqc91n-4>li:before{content:"\0025cb  "}.lst-kix_pkkwt0mfnd4r-3>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-3,decimal) ". "}.lst-kix_5zdork13zaj5-5>li{counter-increment:lst-ctn-kix_5zdork13zaj5-5}ol.lst-kix_xygzk5z3cyvz-7.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-7 0}ol.lst-kix_7fhxg8i5msmt-6.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-6 0}.lst-kix_l0zuj3yh3ryb-5>li:before{content:"\0025a0  "}.lst-kix_w5k728jy05vp-6>li:before{content:"" counter(lst-ctn-kix_w5k728jy05vp-6,decimal) ". "}.lst-kix_6v7qjvftgbe8-1>li:before{content:"" counter(lst-ctn-kix_6v7qjvftgbe8-1,lower-latin) ". "}.lst-kix_pkkwt0mfnd4r-7>li:before{content:"" counter(lst-ctn-kix_pkkwt0mfnd4r-7,lower-latin) ". "}ol.lst-kix_pkkwt0mfnd4r-7.start{counter-reset:lst-ctn-kix_pkkwt0mfnd4r-7 0}.lst-kix_36fxx9lqc91n-8>li:before{content:"\0025a0  "}.lst-kix_hii6fafh6hm-4>li:before{content:"\0025cb  "}.lst-kix_pkkwt0mfnd4r-2>li{counter-increment:lst-ctn-kix_pkkwt0mfnd4r-2}.lst-kix_68qsl6zcqxrq-8>li{counter-increment:lst-ctn-kix_68qsl6zcqxrq-8}ol.lst-kix_6v7qjvftgbe8-0.start{counter-reset:lst-ctn-kix_6v7qjvftgbe8-0 0}.lst-kix_jwv9q4tqofnu-6>li{counter-increment:lst-ctn-kix_jwv9q4tqofnu-6}.lst-kix_8irgp2z20781-8>li{counter-increment:lst-ctn-kix_8irgp2z20781-8}.lst-kix_3vftmdlxcpj0-8>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-8,lower-roman) ". "}ol.lst-kix_7fhxg8i5msmt-7.start{counter-reset:lst-ctn-kix_7fhxg8i5msmt-7 0}.lst-kix_l0zuj3yh3ryb-1>li:before{content:"\0025cb  "}.lst-kix_hii6fafh6hm-0>li:before{content:"\0025cf  "}.lst-kix_7fhxg8i5msmt-6>li{counter-increment:lst-ctn-kix_7fhxg8i5msmt-6}.lst-kix_xygzk5z3cyvz-4>li{counter-increment:lst-ctn-kix_xygzk5z3cyvz-4}.lst-kix_3vftmdlxcpj0-4>li:before{content:"" counter(lst-ctn-kix_3vftmdlxcpj0-4,lower-latin) ". "}ul.lst-kix_ozkivkncyqrh-0{list-style-type:none}ul.lst-kix_ozkivkncyqrh-1{list-style-type:none}ul.lst-kix_ozkivkncyqrh-2{list-style-type:none}ul.lst-kix_ozkivkncyqrh-3{list-style-type:none}ul.lst-kix_ozkivkncyqrh-4{list-style-type:none}ol.lst-kix_xygzk5z3cyvz-6.start{counter-reset:lst-ctn-kix_xygzk5z3cyvz-6 0}.lst-kix_d8lzxbbe1553-3>li:before{content:"\0025cf  "}.lst-kix_d8lzxbbe1553-7>li:before{content:"\0025cb  "}ul.lst-kix_ozkivkncyqrh-5{list-style-type:none}.lst-kix_6fc6u2jowkph-7>li{counter-increment:lst-ctn-kix_6fc6u2jowkph-7}ul.lst-kix_ozkivkncyqrh-6{list-style-type:none}ol.lst-kix_svmmnj1snhr2-4.start{counter-reset:lst-ctn-kix_svmmnj1snhr2-4 0}ul.lst-kix_ozkivkncyqrh-7{list-style-type:none}ul.lst-kix_ozkivkncyqrh-8{list-style-type:none}.lst-kix_w5k728jy05vp-1>li{counter-increment:lst-ctn-kix_w5k728jy05vp-1}.lst-kix_3vftmdlxcpj0-2>li{counter-increment:lst-ctn-kix_3vftmdlxcpj0-2}ol{margin:0;padding:0}table td,table th{padding:0}.c11{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;background-color:#d9d9d9;border-left-style:solid;border-bottom-width:1pt;width:93.6pt;border-top-color:#000000;border-bottom-style:solid}.c14{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:280.8pt;border-top-color:#000000;border-bottom-style:solid}.c5{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:57.8pt;border-top-color:#000000;border-bottom-style:solid}.c10{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:183.8pt;border-top-color:#000000;border-bottom-style:solid}.c17{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:93.6pt;border-top-color:#000000;border-bottom-style:solid}.c28{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:468pt;border-top-color:#000000;border-bottom-style:solid}.c19{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:109.5pt;border-top-color:#000000;border-bottom-style:solid}.c22{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:1pt;border-right-width:1pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:1pt;border-top-style:solid;border-left-style:solid;border-bottom-width:1pt;width:117pt;border-top-color:#000000;border-bottom-style:solid}.c7{-webkit-text-decoration-skip:none;color:#1155cc;font-weight:400;text-decoration:underline;vertical-align:baseline;text-decoration-skip-ink:none;font-size:11pt;font-family:"Arial";font-style:normal}.c9{margin-left:36pt;padding-top:0pt;padding-left:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c29{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:20pt;font-family:"Arial";font-style:normal}.c34{margin-left:18pt;padding-top:3pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c21{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c18{padding-top:20pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c1{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Courier New";font-style:normal}.c8{color:#333333;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:10pt;font-family:"Consolas";font-style:normal}.c32{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c0{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c38{color:#ff0000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:26pt;font-family:"Arial";font-style:normal}.c39{padding-top:0pt;padding-bottom:3pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:center}.c12{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c26{color:#000000;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c20{padding-top:0pt;padding-bottom:0pt;line-height:1.42857;orphans:2;widows:2;text-align:left}.c40{padding-top:4pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c30{padding-top:10pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c33{padding-top:10pt;padding-bottom:4pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c37{font-size:10pt;font-family:"Consolas";color:#333333;font-weight:400}.c24{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}.c6{padding-top:0pt;padding-bottom:0pt;line-height:1.0;text-align:left}.c36{border-spacing:0;border-collapse:collapse;margin-right:auto}.c27{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c2{padding:0;margin:0}.c25{color:inherit;text-decoration:inherit}.c16{margin-left:72pt;padding-left:0pt}.c31{font-style:italic}.c35{height:21pt}.c15{margin-left:36pt}.c23{padding-left:0pt}.c4{height:0pt}.c3{font-weight:700}.c13{height:11pt}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style></head><body class="c27"><p class="c39 title" id="h.hlpacpauqwkx"><span>Prebid</span><span>&nbsp;Support for Enforcing TCF 2.0</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c40"><span class="c7"><a class="c25" href="#h.x9c0lsi8ay8">Overview</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.tldmebv0bdgp">Definitions</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.8ycuibmrgs9x">Assumptions</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.1pnyovoljlrm">Summary of Prebid TCF 2.0 Enforcement</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.3kby792a2sqy">Basic-vs-Full Enforcement</a></span></p><p class="c34"><span class="c7"><a class="c25" href="#h.83ablyvhjp4o">Basic Enforcement</a></span></p><p class="c34"><span class="c7"><a class="c25" href="#h.8cgpj780kmcq">Full Enforcement (Prebid Server Only)</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.t62kkttx488d">Prebid.js Functional Requirements</a></span></p><p class="c30"><span class="c7"><a class="c25" href="#h.wjk7zfwgo1a2">Prebid SDK Functional Requirements</a></span></p><p class="c33"><span class="c7"><a class="c25" href="#h.o5pjp8p4qy06">Prebid Server Functional Requirements</a></span></p><p class="c12 c13"><span class="c0"></span></p><h1 class="c18" id="h.x9c0lsi8ay8"><span class="c29">Overview</span></h1><p class="c12"><span class="c0">The IAB&#39;s Transparency and Consent Framework version 2.0 for enhanced support of GDPR is scheduled to take effect Apr 1 2020. It&#39;s a major update from TCF 1.1 which Prebid currently supports, and is not compatible with the previous release.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">The key changes are:</span></p><ul class="c2 lst-kix_wchaiekwhio-0 start"><li class="c9"><span class="c0">More &#39;purposes&#39; are defined.</span></li><li class="c9"><span class="c0">More flexibility for the legal bases used by vendors.</span></li><li class="c9"><span class="c0">Different in-page javascript API</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">References</span></p><ul class="c2 lst-kix_wz4xrdza29b-0 start"><li class="c9"><span class="c24"><a class="c25" href="https://www.google.com/url?q=https://iabeurope.eu/tcf-2-0/&amp;sa=D&amp;ust=1584107233971000">IAB Europe&#39;s TCF 2.0 Homepage</a></span></li><li class="c9"><span class="c24"><a class="c25" href="https://www.google.com/url?q=https://iabeurope.eu/tcfdocuments/documents/legal/tcfpolicyFINALv2.pdf&amp;sa=D&amp;ust=1584107233971000">TCF Policy</a></span></li><li class="c9"><span class="c24"><a class="c25" href="https://www.google.com/url?q=https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%2520Tech%2520Lab%2520-%2520Consent%2520string%2520and%2520vendor%2520list%2520formats%2520v2.md&amp;sa=D&amp;ust=1584107233971000">TCF 2.0 Consent String Format</a></span></li><li class="c9"><span class="c24"><a class="c25" href="https://www.google.com/url?q=https://github.com/rubicon-project/prebid-server-java/blob/master/docs/developers/PrebidServerJava_GDPR_Requirements.pdf&amp;sa=D&amp;ust=1584107233972000">GDPR Requirements for Prebid Server (TCF1.1)</a></span></li></ul><h1 class="c18" id="h.tldmebv0bdgp"><span class="c29">Definitions</span></h1><ul class="c2 lst-kix_xcsisnkihklz-0 start"><li class="c9"><span class="c0">GDPR - General Data Protection Regulation. The EU&#39;s privacy regulations.</span></li><li class="c9"><span class="c0">EEA - European Economic Area. The region where the GDPR is in effect.</span></li><li class="c9"><span class="c0">IAB - Interactive Advertising Bureau. The ad industry consortium that developed the TCF as a way to help the ad ecosystem adhere to GDPR rules.</span></li><li class="c9"><span class="c0">TCF - Transparency and Consent Framework. </span></li><li class="c9"><span class="c0">CMP - Consent Management Platform. The user interface part of the TCF.</span></li><li class="c9"><span class="c0">GVL - Global Vendors List. The place where each ad entity registers what they do with user data.</span></li><li class="c9"><span class="c0">PBS - Prebid Server</span></li><li class="c9"><span class="c0">PBJS - Prebid.js</span></li><li class="c9"><span class="c0">PBS Host Company - the organization running a cluster of Prebid Servers</span></li><li class="c9"><span class="c0">Purpose 1 - &nbsp;Under TCF, there are many defined uses of private data. &quot;Purpose 1&quot; is &quot;Store and/or access information on a device&quot;. This means that users must consent before an ad tech vendor reads or writes data from their computer or phone. Those of us dealing with these things a lot memorize the numbers. Forgive us.</span></li><li class="c9"><span>Purpose 2 - &quot;Basic Ad Selection&quot;. </span><span class="c0">This looks to be one of the bigger areas of concern because the TCF policy could be interpreted to be a form of ad blocking. Or maybe not. Talk to your lawyers.</span></li><li class="c9"><span class="c0">Purpose 4 - &quot;Personalized Ad Selection&quot;. Basically, if the user doesn&rsquo;t consent, they don&rsquo;t want ads based on any type of direct user profile.</span></li><li class="c9"><span class="c0">Purpose 7 - &quot;Measure ad performance&quot;. This is another area of concern, because the TCF policy doesn&rsquo;t clearly define what it means to measure the &ldquo;effectiveness&rdquo; of ads. Talk to your lawyers about what this means for your organization.</span></li><li class="c9"><span class="c0">Special Feature 1 - &quot;Use precise geolocation data&quot;. Special Features are quite different than Purposes. They only allow user &quot;opt-in&quot;, and don&#39;t have as many layers of nuance as Purposes.</span></li><li class="c9"><span class="c0">Legal Basis - how an ad tech vendor views the importance of each Purpose for their mission. If they define &quot;consent&quot; as their &quot;basis&quot; for a given Purpose, they&#39;re able to work without some or all aspects of the user&#39;s data. But if they define &quot;Legitimate Interest&quot; (LI), they&#39;re basically saying &quot;We can&#39;t do our job without this data&quot;.</span></li><li class="c9"><span class="c0">Basic enforcement - a high-level mode of consent confirmation where the looks for a good-faith indication that the user has provided consent or legal basis signals before engaging in a privacy-protected activity. Does not read the GVL.</span></li><li class="c9"><span class="c0">Full enforcement - a detailed confirmation mode that reads the GVL, interprets the consent string, and performs legal basis analysis.</span></li></ul><h1 class="c18" id="h.8ycuibmrgs9x"><span class="c29">Assumptions</span></h1><p class="c12 c13"><span class="c0"></span></p><a id="t.e67b00b9c01ec82c8517d66b7ccbe4a7c7e6445b"></a><a id="t.0"></a><table class="c36"><tbody><tr class="c4"><td class="c28" colspan="1" rowspan="1"><p class="c6"><span class="c3">Important Legal Note</span><span class="c0">: Prebid.org cannot provide legal advice about GDPR or any other governmental regulation. Our aim is to provide a toolkit of functionality that will let publishers configure header bidding as defined by their legal counsel. We will consider feature suggestions, and review any code offered by the community.</span></p><p class="c6 c13"><span class="c0"></span></p><p class="c6"><span class="c0">Enforcement of Purpose 2 (basic ad selection) looks to be one of the bigger areas of concern because the TCF policy could be interpreted to be a form of ad blocking. You will need to work with your legal counsel to determine how you intend to handle this scenario. Prebid.js and Prebid Server offer publishers the ability to enforce or not-enforce purposes individually. As an example of the kind of flexibility we aim to offer (*), here are some options you could discuss with your lawyers:</span></p><p class="c6 c13"><span class="c0"></span></p><ol class="c2 lst-kix_68qsl6zcqxrq-0 start" start="1"><li class="c6 c15 c23"><span class="c0">Treat Purpose 2 as an ad blocker.</span></li><li class="c6 c15 c23"><span class="c0">Ignore enforcement of selected Purposes at the Prebid level entirely, assuming that downstream vendors will handle the TCF strings appropriately. </span></li><li class="c6 c15 c23"><span class="c0">Ignore enforcement Purpose 2, assuming that users who object to &lsquo;Basic Ads&rsquo; will also object to &lsquo;Personalized Ads&rsquo;, causing any User IDs to be removed from ad requests.</span></li><li class="c6 c15 c23"><span class="c0">Ignore the Purpose-Consent portion of Purpose 2, but allow the user to block specific vendors.</span></li></ol><p class="c6 c13"><span class="c0"></span></p><p class="c6"><span class="c3">(*) - Note on phasing</span><span class="c0">: Please be aware that Prebid.js and Prebid Server will likely not deliver on the full TCF functionality by April 1st. Our initial goal for both products is to support Purpose 1 (Device Access) enforcement by that date. The ability to enforce the other purposes will be developed as soon as we can.</span></p><p class="c6 c13"><span class="c0"></span></p><p class="c6"><span class="c3">(**)</span><span class="c0">&nbsp;Did we mention that you cannot rely on this document to learn how to configure your header bidding for GDPR? Seriously, talk to your lawyers.</span></p></td></tr></tbody></table><p class="c12 c13"><span class="c0"></span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">General</span></p><p class="c12 c13"><span class="c0"></span></p><ol class="c2 lst-kix_svmmnj1snhr2-0 start" start="1"><li class="c9"><span class="c0">Prebid.org is neither a data controller nor data processor, but we supply software to both types of entities. Therefore, our software should provide a flexible set of controls necessary for both types of entities to run their businesses.</span></li><li class="c9"><span class="c0">Even if Prebid is configured to enforce activities by parsing consent data, publishers and downstream vendors are still responsible for ensuring their legal bases using the consent data they&#39;re provided. </span></li><li class="c9"><span class="c0">Prebid will ignore the TCF &quot;stack&quot; feature, assuming that the CMP will set the underlying Purposes appropriately.</span></li><li class="c9"><span class="c0">Data from the CMP will never be modified before passing to downstream entities.</span></li><li class="c9"><span class="c0">If TCF processing is turned on, and the user is determined to be in GDPR scope, and hasn&rsquo;t provided a consent string, the system should assume a consent string that has no consent offered.</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Prebid.js</span></p><p class="c12 c13"><span class="c0"></span></p><ol class="c2 lst-kix_6fc6u2jowkph-0 start" start="1"><li class="c9"><span class="c0">Prebid.js will only support parsing the TCF 2.0 consent string.</span></li><li class="c9"><span class="c0">TCF 2.0 features are available in Prebid.js only in a consent module, not as part of core. This allows publishers to build two versions of their wrappers: one for users in the EEA, one for users outside of the EEA.</span></li><li class="c9"><span class="c0">It&#39;s assumed that publishers run in two modes:</span></li></ol><ol class="c2 lst-kix_6fc6u2jowkph-1 start" start="1"><li class="c12 c16"><span class="c0">A CMP is loaded on every page so TCF functions and data are fully available.</span></li><li class="c12 c16"><span class="c0">Consent data is stored in first party storage and passed to Prebid directly. TCF functions are not available from the CMP.</span></li></ol><ol class="c2 lst-kix_6fc6u2jowkph-0" start="4"><li class="c9"><span class="c0">Prebid.js will not load the Global Vendors List (GVL) as this would significantly impact the success of header bidding implementations. However, Prebid.js will require a mapping of GVL vendor IDs to Prebid.js bidder codes. </span></li></ol><ol class="c2 lst-kix_6fc6u2jowkph-1 start" start="1"><li class="c12 c16"><span class="c0">Further, we assume that not all Prebid adapters will be in the GVL, so we&#39;ll need to support reference by GVL ID or bidder code.</span></li><li class="c12 c16"><span class="c0">Further, we assume that bidder aliases within one adapter may have different GVL IDs.</span></li></ol><ol class="c2 lst-kix_6fc6u2jowkph-0" start="5"><li class="c9"><span class="c0">As a result of not having access to GVL entries, Prebid.js will only support &lsquo;Basic Enforcement&rsquo;.</span></li><li class="c9"><span>TCF2 will be supported in Prebid.js 3.x, with &#39;no enforcement&#39; being the default option. Prebid.js 4.0 will enforce Purpose 1 by default when the module is included.</span></li><li class="c9"><span>PurposeOneTreatment is ignored</span><span class="c0">&nbsp;for Prebid.js. Publishers who don&rsquo;t want to enforce Purpose 1 (or any other purpose) need to set Prebid&rsquo;s configuration appropriately.</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Prebid Server</span></p><p class="c12 c13"><span class="c0"></span></p><ol class="c2 lst-kix_pkkwt0mfnd4r-0 start" start="1"><li class="c9"><span class="c0">Prebid Server will need concurrent support of TCF 1.1 and TCF 2.0.</span></li><li class="c9"><span class="c0">Prebid Server will need to support &ldquo;Full Enforcement&rdquo; checks.</span></li><li class="c9"><span class="c0">AMP TCF 2.0 will be passed on the same parameter as TCF 1.1. </span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Prebid SDK</span></p><p class="c12 c13"><span class="c0"></span></p><ol class="c2 lst-kix_xygzk5z3cyvz-0 start" start="1"><li class="c9"><span class="c0">Prebid SDK should parse the consent string in order to read the IDFA. Other than that, SDK just passes consent values to Prebid Server..</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12 c13"><span class="c0"></span></p><h1 class="c18" id="h.1pnyovoljlrm"><span class="c29">Summary of Prebid TCF 2.0 Enforcement</span></h1><p class="c12 c13"><span class="c0"></span></p><a id="t.de6c946673ec683bd257d6a726fa40f4a547f1ee"></a><a id="t.1"></a><table class="c36"><tbody><tr class="c4"><td class="c11" colspan="1" rowspan="1"><p class="c6"><span class="c3">TCF </span><span class="c26 c3">Field</span></p></td><td class="c11" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">In-scope Activities</span></p></td><td class="c11" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">System</span></p></td><td class="c11" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">Enforcement</span></p></td><td class="c11" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">Publisher/</span></p><p class="c6"><span class="c26 c3">Host Company Controls</span></p></td></tr><tr class="c4"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Purpose 1 - Store and/or access information on a device</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">usersync pixels, user ID modules, and device storage</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Prebid.js and Prebid Server and Prebid SDK</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">May result in preventing one or more uesrsync activities for one or more vendors.</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Do not enforce purpose 1</span></p><p class="c6"><span class="c0">Do not enforce purpose 1 for vendor V</span></p><p class="c6"><span class="c0">Enforce purpose 1 at the vendor level only.</span></p></td></tr><tr class="c4"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Purpose 2 - Select basic ads</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">call bid adapters</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Prebid.js and Prebid Server</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">May result in skipping one or more bid adapters.</span></p><p class="c6 c13"><span class="c0"></span></p><p class="c6"><span class="c0">All configured modules will be called as usual unless all bidders are eliminated.</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Do not enforce purpose 2</span></p><p class="c6"><span>Do not enforce purpose 2 for vendor V</span></p><p class="c6"><span class="c0">Enforce purpose 2 at the vendor level only.</span></p><p class="c6 c13"><span class="c0"></span></p></td></tr><tr class="c4"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Purpose 4 - Select Personalized Ads</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">call bid adapters with userIds</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Prebid.js and Prebid Server</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">May result in removing the userIds before calling one or more bid adapters.</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Do not enforce purpose 4</span></p><p class="c6"><span class="c0">Do not enforce purpose 4 for vendor V</span></p><p class="c6"><span class="c0">Enforce purpose 4 at the vendor level only.</span></p></td></tr><tr class="c4"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Purpose 7 - Measure ad performance</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">initiate analytics</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Prebid.js and Prebid Server</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">May result in skipping one or more analytics adapters.</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Do not enforce purpose 7</span></p><p class="c6"><span class="c0">Do not enforce purpose 7 for vendor V</span></p><p class="c6"><span class="c0">Enforce purpose 7 at the vendor level only.</span></p></td></tr><tr class="c4"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Special Feature 1 - Use precise geolocation data</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">passing lat/long to server-side bid adapters</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Prebid Server</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">May result in rounding lat/long values and IP address before sending to server-side adapters.</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Do not enforce Special Feature 1</span></p></td></tr><tr class="c35"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">Special Purpose 2 - Technically deliver ads or content</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">n/a</span></p></td><td class="c14" colspan="3" rowspan="1"><p class="c6 c13"><span class="c0"></span></p><p class="c6"><span class="c0">Special Purposes do not require consent. If a publisher&rsquo;s legal team wants to consider SP2, Prebid software should not be called.</span></p></td></tr><tr class="c35"><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">PurposeOneConsent</span></p></td><td class="c17" colspan="1" rowspan="1"><p class="c6"><span class="c0">n/a</span></p></td><td class="c14" colspan="3" rowspan="1"><p class="c6"><span class="c0">Prebid does not provide specific support for enforcing this flag. Instead, publishers may use the provided controls for Purpose 1 and other Prebid configuration to control whether the user&rsquo;s device is accessed.</span></p></td></tr></tbody></table><h1 class="c18" id="h.3kby792a2sqy"><span class="c29">Basic-vs-Full Enforcement</span></h1><p class="c12"><span class="c0">Prebid offers publishers several controls for whether consent/legal basis confirmation is even performed. The following flowchart shows how the controls</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 634.15px; height: 335.15px;"><img alt="" src="images/image2.png" style="width: 634.15px; height: 335.15px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c12 c13"><span class="c0"></span></p><h2 class="c32" id="h.83ablyvhjp4o"><span class="c21">Basic Enforcement</span></h2><p class="c12"><span class="c0">The goal of &#39;basic enforcement&#39; is to confirm that there&#39;s enough evidence of consent to pass data on to vendors who have access to the GVL and can fully parse and enforce.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Before allowing a Purpose for a given Vendor, one of these scenarios must be true: :</span></p><ul class="c2 lst-kix_hxgng6in8mo4-0 start"><li class="c9"><span class="c0">User&rsquo;s purpose consent and user&rsquo;s vendor consent</span></li><li class="c9"><span class="c0">The Prebid-specific &lsquo;enforceVendor&rsquo; flag is set and user&rsquo;s vendor consent</span></li><li class="c9"><span class="c0">purpose LI established and vendor LI established</span></li><li class="c9"><span class="c0">The Prebid-specific &lsquo;enforceVendor&rsquo; flag is set and vendor LI established</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">In terms of the TCF 2.0 fields, Purpose P is ok for vendor V if either of these is true:</span></p><ol class="c2 lst-kix_jwv9q4tqofnu-0 start" start="1"><li class="c9"><span class="c0">PurposesConsent[P,V]==1 AND VendorConsentBitfield[V]==1</span></li><li class="c9"><span class="c0">pbEnforceVendor[P]==true AND VendorConsentBitfield[V]==1</span></li><li class="c9"><span class="c0">PurposesLITransparency[P]==1 AND VendorLegitimateInterestBitfield[V]==1</span></li><li class="c9"><span class="c0">pbEnforceVendor[P,V]==true AND VendorLegitimateInterestBitfield[V]==1</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Before allowing Special Feature 1, SpecialFeatureOptIns[1] must be true.</span></p><h2 class="c32" id="h.8cgpj780kmcq"><span class="c21">Full Enforcement (Prebid Server Only)</span></h2><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">The big difference between &#39;basic&#39; and &#39;full&#39; enforcement is that Prebid Server has the GVL available to examine vendor legal bases.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Before allowing an activity that falls under a specific Purpose for a given Vendor, one of these 6 basic scenarios needs to be true:</span></p><p class="c12 c13"><span class="c0"></span></p><ol class="c2 lst-kix_3vftmdlxcpj0-0 start" start="1"><li class="c9"><span class="c0">Vendor claims consent as their basis, publisher doesn&#39;t restrict the purpose, user consents to the purpose (if the enforcePurpose flag is on), and user consents to the vendor (if the enforceVendor flag is on).</span></li><li class="c9"><span class="c0">Vendor claims (inflexible) legitimate interest as their basis, publisher doesn&#39;t restrict the purpose, user was provided notice of the legitimate interest basis for this purpose (if the enforcePurpose flag is on), and user was provided notice for the LI basis for this vendor (if the enforceVendor flag is on)</span></li><li class="c9"><span>Vendor claims flexible legal basis with legitimate interest as the default, publisher restriction </span><span class="c3">doesn&#39;t</span><span>&nbsp;require consent, and ((user was provided notice of the legitimate interest basis for this purpose+vendor) </span><span>OR (user consents to purpose+vendor)) [Purpose checked only if the enforcePurpose flag is on, and vendor checked only if the enforceVendor flag is on]</span></li><li class="c9"><span>Vendor claims flexible legal basis with legitimate interest as the default, publisher </span><span class="c3">does</span><span class="c0">&nbsp;require consent, user consents to the purpose, and user consents to the vendor. [Purpose checked only if the enforcePurpose flag is on, and vendor checked only if the enforceVendor flag is on]</span></li><li class="c9"><span>Vendor claims flexible legal basis with consent as the default, publisher restriction </span><span class="c3">doesn&#39;t</span><span>&nbsp;require legitimate interest, ((user consents to the purpose+vendor) </span><span>OR (user was provided notice for the legitimate interest basis for this purpose+vendor)) </span><span>[Purpose checked only if the enforcePurpose flag is on, and vendor checked only if the enforceVendor flag is on]</span></li><li class="c9"><span>Vendor claims flexible legal basis with consent as the default, publisher restriction </span><span class="c3">does</span><span class="c0">&nbsp;require legitimate interest, and user was provided notice for the legitimate interest basis for this purpose+vendor. [Purpose checked only if the enforcePurpose flag is on, and vendor checked only if the enforceVendor flag is on] </span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span>Note that there are many more scenarios where the activity would </span><span class="c31">not</span><span class="c0">&nbsp;be allowed. </span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">The technical definition in terms of the TCF 2.0 fields follows. Purpose P is ok for vendor V if any of these is true:</span></p><ol class="c2 lst-kix_6v7qjvftgbe8-0 start" start="1"><li class="c9"><span class="c0">GVL[V].purposes contains P and GVL[V].flexiblePurposes doesn&#39;t contain P and publisherRestrictions[P]!=0 and (!enforcePurpose[P] or PurposesConsent[P]==1) AND (!enforceVendor[P,V] or VendorConsentBitfield[V]==1)</span></li><li class="c9"><span class="c0">GVL[V].legIntPurposes contains P and GVL[V].flexiblePurposes doesn&#39;t contain P and publisherRestrictions[P]!=0 and (!enforcePurpose[P] or PurposesLITransparency[P]==1) AND (!enforceVendor[P,V] or VendorLegitimateInterestBitfield[V]==1)</span></li><li class="c9"><span class="c0">GVL[V].legIntPurposes contains P and GVL[V].flexiblePurposes contains P and publisherRestrictions[P]==2 and (((!enforcePurpose[P] or PurposesConsent[P]==1) AND (!enforceVendor[P,V] or VendorConsentBitfield[V]==1)) OR ((!enforcePurpose[P] or PurposesLITransparency[P]==1) AND (!enforceVendor[P,V] or VendorLegitimateInterestBitfield[V]==1)))</span></li><li class="c9"><span class="c0">GVL[V].legIntPurposes contains P and GVL[V].flexiblePurposes contains P and publisherRestrictions[P]==1 and (!enforcePurpose[P] or PurposesConsent[P]==1) AND (!enforceVendor[P,V] or VendorConsentBitfield[V]==1)</span></li><li class="c9"><span class="c0">GVL[V].purposes contains P and GVL[V].flexiblePurposes contains P and publisherRestrictions[P]==1 and (((!enforcePurpose[P] or PurposesConsent[P]==1) AND (!enforceVendor[P,V] or VendorConsentBitfield[V]==1)) OR ((!enforcePurpose[P] or PurposesLITransparency[P]==1) AND (!enforceVendor[P,V] or VendorLegitimateInterestBitfield[V]==1)))</span></li><li class="c9"><span class="c0">GVL[V].purposes contains P and GVL[V].flexiblePurposes contains P and publisherRestrictions[P]==2 and (!enforcePurpose[P] or PurposesLITransparency[P]==1) AND (!enforceVendor[P,V] or VendorLegitimateInterestBitfield[V]==1)</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Before allowing Special Feature 1, SpecialFeatureOptIns[1] must be true.</span></p><h1 class="c18" id="h.t62kkttx488d"><span class="c29">Prebid.js Functional Requirements</span></h1><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">1) An optional module must be available for reading the IAB TCF 2.0 API data. Publishers will include this module in their Prebid.js package when they need to support EEA users.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">2) Prebid.js must support scenarios where the TCF string parsing functions are not available. &nbsp;If the codebase for parsing the TCF string is significant, it should be made an optional module separate from the enforcement functions. A key goal of Prebid.js is to include only the code that publishers need for their particular use case. The technical design should consider whether it makes sense to bundle all of these components together, or break them into 2 or 3 separate modules:</span></p><ul class="c2 lst-kix_ewcld7rry2cw-0 start"><li class="c9"><span class="c0">Reading the TCF string</span></li><li class="c9"><span class="c0">Enforcing the TCF string</span></li><li class="c9"><span class="c0">Parsing the TCF string (?)</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">3) Prebid.js must support the following publisher controls:</span></p><ul class="c2 lst-kix_d8lzxbbe1553-0 start"><li class="c9"><span class="c0">Don&#39;t even read the TCF string (accomplished by not configuring the module)</span></li><li class="c9"><span class="c0">Enforce/Do not enforce purpose P</span></li><li class="c9"><span class="c0">Enforce/Do not enforce purpose P for vendor V</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Here&#39;s a set of proposed configurations within the existing consentManagement config object:</span></p><p class="c12 c13"><span class="c0"></span></p><a id="t.d2f201df0390c3de46409e5bc5a638f6f58e1055"></a><a id="t.2"></a><table class="c36"><tbody><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">Param</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c3 c26">Type</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">Description</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c26 c3">Details</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.allowAuctionWithoutConsent</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">boolean</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Available in 3.x only, defines behavior for backwards compatibility. </span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span>For 3.x: If true, consider all Purposes as </span><span class="c31">not</span><span class="c0">&nbsp;enforceable.</span></p><p class="c6"><span class="c0">If false, consider only Purpose 2 enforceable.</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.consentData</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">object</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Consent data provided statically.</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Used when cmpApi is &quot;static&quot;.</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.defaultGdprScope</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">boolean</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6 c13"><span class="c0"></span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6 c13"><span class="c0"></span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.rules</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">object</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Lets the publisher override the defaults set by the enforceMode</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6 c13"><span class="c0"></span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.rules[].purpose</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">string</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Possible values are &quot;storage&quot;, &quot;basicAds&quot;, &quot;personalizedAds&quot;, and &quot;measurement&quot; corresponding to Purposes 1,2,4, and 7 respectively.</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">For some reason, people tend to prefer using the string names rather than the numbers.</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.rules[].enforcePurpose</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">boolean</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Whether to enforce this purpose or not. Overrides the setting from enforceMode.</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">The default in PBJS 3.x will be to enforce no purposes, and in 4.0 to enforce Purpose 1 and no others.</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.rules[].enforceVendor</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">boolean</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Whether to enforce vendor consent/legal basis for this purpose or not..</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">The default in PBJS 3.x will be to enforce no purposes, and in 4.0 to enforce Purpose 1 and no others.</span></p></td></tr><tr class="c4"><td class="c10" colspan="1" rowspan="1"><p class="c6"><span class="c0">gdpr.rules[].vendorExceptions</span></p></td><td class="c5" colspan="1" rowspan="1"><p class="c6"><span class="c0">array of strings</span></p></td><td class="c19" colspan="1" rowspan="1"><p class="c6"><span class="c0">Which biddercodes or module names should be treated as the opposite of the enforceVendor flag.</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">If enforceVendor=false, then vendorExceptions are those that will be treated as true.</span></p><p class="c6"><span class="c0">If enforce=true, then vendorExceptions are those that will be treated as false.</span></p></td></tr></tbody></table><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Example configurations:</span></p><p class="c12 c13"><span class="c0"></span></p><a id="t.4cd6d00b2bd97ee52bb8fe7d3b16fd51a6657718"></a><a id="t.3"></a><table class="c36"><tbody><tr class="c4"><td class="c28" colspan="1" rowspan="1"><p class="c12"><span class="c1">pbjs.setConfig({</span></p><p class="c12"><span class="c1">&nbsp; consentManagement: {</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; gdpr: {</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; cmpApi: &#39;iab&#39;,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; defaultGdprScope: true/false (0/1?)</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; timeout: 3000,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; // allowAuctionWithoutConsent: false, &nbsp;// deprecated</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; rules: [{</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // don&rsquo;t enforce Purpose 1 except for bidderA.</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // this means that TCF approval is only considered</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // for this one bidder.</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; purpose: &quot;storage&quot;,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforcePurpose: false,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforceVendor: false,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; vendorExceptions: [&quot;bidderA&quot;]</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; },{</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // Allow the user to object to vendors for Purpose 2</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // but don&rsquo;t allow them to turn off header bidding</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // altogether.</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // The exception is bidderB, which the user will</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // not be allowed to reject</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; purpose: &quot;basicAds&quot;,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforcePurpose: false,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforceVendor: true,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; vendorExceptions: [&quot;bidderB&quot;]</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; },{</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // allow the user to have their userId removed from</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // header bidding except for bidders A and B</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; purpose: &quot;personalizedAds&quot;,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforcePurpose: true,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforceVendor: true</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; vendorExceptions: [&quot;bidderA&quot;,&quot;bidderB&quot;]</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; },{</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; // analytics adapters are ok</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp;</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; purpose: &quot;measurement&quot;,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforcePurpose: false,</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; &nbsp; enforcePurpose: false</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; &nbsp; }]</span></p><p class="c12"><span class="c1">&nbsp; &nbsp; }</span></p><p class="c12"><span class="c1">&nbsp; }</span></p><p class="c12"><span class="c1">});</span></p></td></tr></tbody></table><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">You may notice that the examples above provide more flexibility than TCF requires. This allows publishers to establish custom legal bases in consultation with their legal counsel.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">4) If the &#39;gdprApplies&#39; flag is defined and is false, then Prebid.js may assume that GDPR is not in scope and therefore doesn&#39;t need to be enforced. All Purposes will be set to enforce=false.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">4) There should be a way for bidAdapters to supply a GVL ID for each alias they support.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">5) The aliasBidder() function should be extended to support specification of a GVL ID. e.g.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c20 c15"><span class="c37">pbjs.aliasBidder(&#39;appnexus&#39;, &#39;newAlias&#39;, 999);</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span>6) If a bidder code isn&#39;t associated with a GVL ID, enforcement should assume that the vendor is </span><span class="c31">not allowed</span><span class="c0">&nbsp;unless the publisher has specifically named their bidder code.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">7) Analytics adapters must be associated with a GVL ID and/or a &quot;name&quot; to allow the system to determine which analytics adapter(s) are permitted to operate in the current context.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">8) User ID modules and Real Time Data modules should be associated with a GVL ID and/or a &quot;name&quot; to allow the system to determine which modules are permitted to operate in the current context.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">9) The system must be able to verify vendor consent in two ways:</span></p><ul class="c2 lst-kix_tb82mrxazni-0 start"><li class="c9"><span class="c0">User consents to GVL ID 52, and Prebid.js knows that 52 corresponds to the Rubicon bid adapter (and the Rubicon analytics adapter)</span></li></span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">10) The internal interface to bid adapters should remain the same: bidrequest.gdprConsent</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">11) The OpenRTB interface to Prebid Server should remain the same:</span></p><ul class="c2 lst-kix_u56eprq9ell0-0 start"><li class="c9"><span class="c0">regs.ext.gdpr </span></li><li class="c9"><span class="c0">user.ext.consent</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">12) The system must support all the activity enforcement noted in the &#39;Summary of Prebid TCF 2.0 Enforcement&#39; section.</span></p><ol class="c2 lst-kix_7fhxg8i5msmt-0 start" start="1"><li class="c9"><span class="c0">If Purpose 1 is being enforced:</span></li></ol><ol class="c2 lst-kix_7fhxg8i5msmt-1 start" start="1"><li class="c12 c16"><span class="c0">Before invoking usersync pixels for each enforceable vendor, verify consent as described in &#39;Basic Enforcement&#39;.</span></li><li class="c12 c16"><span class="c0">Before reading or storing cookies or HTML 5 localstorage for each enforceable vendor, verify consent as described in &#39;Basic Enforcement&#39;. This will require enhancing the getCookie and setCookie utility functions to determine or accept the biddercode or module name.</span></li><li class="c12 c16"><span class="c0">Before invoking each enforceable userID sub-module, verify consent as described in &#39;Basic Enforcement&#39;.</span></li></ol><ol class="c2 lst-kix_7fhxg8i5msmt-0" start="2"><li class="c9"><span class="c0">If Purpose 2 is being enforced, verify consent for each vendor as described in &#39;Basic Enforcement&#39; before calling a bid adapter. If consent is not granted, log a console warning and skip it.</span></li><li class="c9"><span class="c0">If Purpose 4 is being enforced, verify consent for each vendor that passed the Purpose 2 test. If consent is not granted, log a console warning, remove the bidrequest.userId attribute and call the adapter.</span></li><li class="c9"><span class="c0">If Purpose 7 is being enforced, verify consent for each analytics module. If consent is not granted, log a console warning and skip it.</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">13) If consentManagement.gdpr is configured but no consent string is available, the system must assume that the user does not consent to either purpose or vendor. Activities may still take place if the publisher has configured the relevant Purposes as &#39;not enforced&#39;.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">13) Bid adapters must do one of the following for all device access activities (reading or setting cookies or local storage):</span></p><ul class="c2 lst-kix_l0zuj3yh3ryb-0 start"><li class="c9"><span class="c0">Use the PBJS core utility functions, which will handle Purpose 1 enforcement.</span></li><li class="c9"><span class="c0">Post a public disclosure in the code and on prebid.org explaining the legal basis for not adhering to GDPR.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">14) Prebid core must make the following information available to analytics adapters:</span></p><ul class="c2 lst-kix_w6yj8blbe06x-0 start"><li class="c9"><span class="c0">Enforcement status of Purposes 1,2,4 and 7.</span></li><li class="c9"><span class="c0">An array of bidders and modules skipped due to TCF enforcement.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">15) It should be possible for a pub to define a mapping between a module code and a GVL ID</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">&nbsp; &nbsp;pbjs.setConfig({</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">&nbsp; &nbsp; &nbsp;gvlMapping: {</span></p><p class="c12"><span class="c0">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &ldquo;id5&rdquo;: 9999</span></p><p class="c12"><span class="c0">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &ldquo;bidderX&rdquo;: 8888</span></p><p class="c12"><span class="c0">&nbsp; &nbsp; &nbsp;}</span></p><p class="c12 c13"><span class="c0"></span></p><h1 class="c18" id="h.wjk7zfwgo1a2"><span>Prebid SDK Functional Requirements</span></h1><p class="c12"><span class="c0">1) Prebid SDK must accept the following optional parameters to support TCF 2.0. It&rsquo;s assumed the app will pass these values directly or indirectly from a mobile CMP.</span></p><ul class="c2 lst-kix_ozkivkncyqrh-0 start"><li class="c9"><span class="c0">GDPR in-scope</span></li><li class="c9"><span class="c0">TCF Consent string</span></li><li class="c9"><span>&lsquo;deviceAccessConsent&rsquo; flag defining whether the SDK is allowed to read the IDFA or equivalent. It&rsquo;s assumed that the app will parse the consent string to confirm the user has consented to Purpose 1.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">2) When a request is defined to be GDPR in-scope, the SDK must confirm that the &lsquo;deviceAccessConsent&rsquo; flag is true. Here&rsquo;s the truth table for when the SDK is allowed to access the device ID:</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12 c13"><span class="c0"></span></p><a id="t.cf04e882f648981d69d9d186d69ef24c3991b712"></a><a id="t.4"></a><table class="c36"><tbody><tr class="c4"><td class="c22" colspan="1" rowspan="1"><p class="c6 c13"><span class="c0"></span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c12"><span class="c0">deviceAccessConsent=true</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c12"><span class="c0">deviceAccessConsent=false</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c12"><span class="c0">deviceAccessConsent undefined</span></p></td></tr><tr class="c4"><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">GDPR scope=false</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Yes, read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">No, don&rsquo;t read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Yes, read IDFA</span></p></td></tr><tr class="c4"><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">GDPR scope=true</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Yes, read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">No, don&rsquo;t read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">No, don&rsquo;t read IDFA</span></p></td></tr><tr class="c4"><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">GDPR scope undefined</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Yes, read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">No, don&rsquo;t read IDFA</span></p></td><td class="c22" colspan="1" rowspan="1"><p class="c6"><span class="c0">Yes, read IDFA</span></p></td></tr></tbody></table><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">3) The SDK must pass the consent data to Prebid Server on the same OpenRTB attributes as defined in TCF 1.1:</span></p><ul class="c2 lst-kix_hii6fafh6hm-0 start"><li class="c9"><span class="c0">GDPR in-scope flag is regs.ext.gdpr</span></li><li class="c9"><span class="c0">Consent string is user.ext.consent</span></li></ul><p class="c12 c13"><span class="c0"></span></p><h1 class="c18" id="h.o5pjp8p4qy06"><span class="c29">Prebid Server Functional Requirements</span></h1><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">1) Optional configuration must be available for host companies to turn on and off enforcing GDPR with IAB TCF 2.0 API data. There should be global and publisher account level configuration. The default should be to enforce.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">2) If enforcement is turned on for this request, Prebid Server must be able to determine whether it&#39;s in-scope for GDPR processing. If any of the following conditions are true, the request is in-scope:</span></p><ol class="c2 lst-kix_6jgx19e9u9pe-0 start" start="1"><li class="c9"><span class="c0">the incoming request defines regs.ext.gdpr:true.</span></li><li class="c9"><span class="c0">regs.ext.gdpr is undefined, geo-lookup is turned on, and the user&#39;s IP address is in a configurable set of countries.</span></li><li class="c9"><span class="c0">regs.ext.gdpr is undefined and the host company&#39;s default scope is to enforce.</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">3) Prebid Server must support the following host company controls:</span></p><ul class="c2 lst-kix_d8lzxbbe1553-0"><li class="c9"><span class="c0">Enforce/Do not enforce purpose P (globally and per-account)</span></li><li class="c9"><span class="c0">Enforce/Do not enforce purpose P for vendor V (globally and per-account)</span></li><li class="c9"><span class="c0">Enforce/Do not enforce special purpose 1</span></li><li class="c9"><span class="c0">Enforce/Do not enforce special purpose 1 for vendor V</span></li><li class="c9"><span class="c0">ACCOUNT</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">4) Prebid Server must give host company config to say what to do with the purposeOneTreatment - both as a default and for each account:</span></p><ol class="c2 lst-kix_pzmtiq5h0915-0 start" start="1"><li class="c9"><span class="c0">ignore the flag entirely</span></li><li class="c9"><span class="c0">if purposeOneTreatment=1 and IsServiceSpecific=1 then Purpose 1 is overridden to no-access-allowed</span></li><li class="c9"><span>if</span><span>&nbsp;purposeOneTreatment=1 and IsServiceSpecific=1</span><span class="c0">&nbsp;then Purpose 1 is overridden to access-allowed</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">The implementation of this &ldquo;PurposeOneTreatmentInterpretation flag modifies the flowchart above: it may short-circuit the logic, jumping straight to Yes or No without a normal enforcement check.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 624.00px; height: 376.28px;"><img alt="" src="images/image1.png" style="width: 624.00px; height: 376.28px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">5) It must be possible for a Host Company to define its GVL ID to use for confirming user user consent for setting cookies.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">Example configuration/DB entries:</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12 c15"><span class="c1">gdpr.host-vendor-id: 52<br>gdpr.enabled: true/false // default true</span></p><p class="c12 c15"><span class="c1">gdpr.purpose.P.enforcePurpose: no/basic/full // default full</span></p><p class="c12 c15"><span class="c1">gdpr.purpose.P.enforceVendors: true/false // default true</span></p><p class="c12 c15"><span class="c1">gdpr.purpose.P.vendorExceptions: list of biddercodes<br>gdpr.specialfeature.S.enforce: true/false // default true</span></p><p class="c12 c15"><span class="c1">gdpr.specialfeature.S.vendorExceptions: list of biddercodes</span></p><p class="c12 c15"><span class="c1">gdpr.purposeOneTreatmentInterpretation: ignore/no-access-allowed/access-allowed</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.enabled: true/false &nbsp;// default true</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.purpose.P.enforcePurpose</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.purpose.P.enforceVendors</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.purpose.P.vendorExceptions<br>account.A.gdpr.specialfeature.S.enforce</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.specialfeature.S.vendorExceptions</span></p><p class="c12 c15"><span class="c1">account.A.gdpr.purposeOneTreatmentInterpretation</span></p><p class="c12 c15"><span class="c1">geolocation.VENDOR.server: url // location of geo lookup service</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">6) There should be a way for bidAdapters to supply a GVL ID for each alias they support.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">7) The external definition of aliases should be extended to support specification of a GVL ID. e.g.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c20 c15"><span class="c8">&quot;ext&quot;: {</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &quot;prebid&quot;: {</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; &quot;aliases&quot;: { &nbsp; &nbsp; &nbsp; &nbsp; // existing feature</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; &nbsp; &quot;districtm&quot;: &quot;appnexus&quot;</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; },</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; &quot;aliasgvlids&quot;: { &nbsp; &nbsp; // new feature</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; &nbsp; &quot;districtm&quot;: 144</span></p><p class="c20 c15"><span class="c8">&nbsp; &nbsp; &nbsp; }</span></p><p class="c15 c20"><span class="c8">&nbsp; &nbsp; }</span></p><p class="c20 c15"><span class="c8">&nbsp; }</span></p><p class="c20 c13"><span class="c8"></span></p><p class="c12"><span class="c0">8) Prebid Server&#39;s enforcement should be &quot;Full&quot; mode unless it doesn&#39;t have access to the proper GVL version.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">9) Prebid Server should be able to read the TCF2.0 GVL that&#39;s specified in the consent string. If it does not have immediate access to that version of the GVL, it may downgrade enforcement to &quot;Basic&quot;. The assumption is that subsequent requests for that version of the GVL will succeed. The system should log any usage of Basic Enforcement.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span>10) If a bidder code isn&#39;t associated with a GVL ID, enforcement should assume that the vendor is </span><span class="c31">not allowed</span><span class="c0">&nbsp;unless the publisher has specifically named the bidder code as a configured exception.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">11) Analytics adapters must be associated with a GVL ID and/or a &quot;name&quot; to allow the system to determine which analytics adapter(s) are permitted to operate in the current context.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">12) User ID modules and Real Time Data modules should be associated with a GVL ID and/or a &quot;name&quot; to allow the system to determine which modules are permitted to operate in the current context.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">13) The system must be able to verify vendor consent in two ways:</span></p><ul class="c2 lst-kix_tb82mrxazni-0"><li class="c9"><span class="c0">User consents to GVL ID 52, and Prebid Server knows that 52 corresponds to the Rubicon bid adapter (and the Rubicon analytics adapter)</span></li><li class="c9"><span class="c0">The Host Company consents to the name &quot;bidderB&quot;, which would allow that biddercode to bid even if the user&#39;s Purpose 1 doesn&#39;t have specific consent.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">14) The internal interface to bid adapters should remain the same.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">15) The OpenRTB interface to Prebid Server should remain the same:</span></p><ul class="c2 lst-kix_u56eprq9ell0-0"><li class="c9"><span class="c0">regs.ext.gdpr </span></li><li class="c9"><span class="c0">user.ext.consent</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">16) The system must support all the activity enforcement noted in the &#39;Summary of Prebid TCF 2.0 Enforcement&#39; section.</span></p><ol class="c2 lst-kix_w5k728jy05vp-0 start" start="1"><li class="c9"><span class="c0">If Purpose 1 is being enforced:</span></li></ol><ol class="c2 lst-kix_w5k728jy05vp-1 start" start="1"><li class="c12 c16"><span class="c0">Before invoking /cookie_sync pixels for each enforceable vendor, verify consent as appropriate for the enforcement method.</span></li><li class="c12 c16"><span class="c0">Before setting a cookie on /setuid, verify consent for the Host Company&#39;s GVL ID as appropriate for the enforcement method</span></li><li class="c12 c16"><span class="c0">Before passing ID values to each enforceable vendor, verify consent as appropriate for the enforcement method.</span></li></ol><ol class="c2 lst-kix_w5k728jy05vp-0" start="2"><li class="c9"><span class="c0">If Purpose 2 is being enforced, verify consent for each vendor as appropriate for the enforcement method before calling a bid adapter. If consent is not granted, log a metric and skip it.</span></li><li class="c9"><span class="c0">If Purpose 4 is being enforced, verify consent for each vendor that passed the Purpose 2 test. If consent is not granted, log a metric, remove the bidrequest.userId attribute and call the adapter.</span></li><li class="c9"><span class="c0">If Purpose 7 is being enforced, verify consent for each analytics module. If consent is not granted, log a metric and skip it.</span></li><li class="c9"><span class="c0">If Special Feature 1 is being enforced, verify user opt-in. If the user has opted out, round off the IP address and lat/long details and log a metric.</span></li></ol><ol class="c2 lst-kix_w5k728jy05vp-1 start" start="1"><li class="c12 c16"><span class="c0">IP masking: for IPv4, zero out the last byte. For IPv6, zero out the last 2 bytes.</span></li><li class="c12 c16"><span class="c0">Check the OpenRtb packet for $.device.geo.lat, $.device.geo.lon, $.user.geo.lat, $.user.geo.lon. Round off the values to the last two decimal points if they exist.</span></li></ol><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span>17) If GDPR is being enforced but </span><span>no consent string is available</span><span class="c0">, the system must assume that the user does not consent to either purpose or vendor. Activities may still take place if the Host Company has configured the relevant Purposes as &#39;not enforced&#39;.</span></p><p class="c12 c13"><span class="c0"></span></p><p class="c12"><span class="c0">18) Prebid Server core must make the following information available to analytics adapters:</span></p><ul class="c2 lst-kix_w6yj8blbe06x-0"><li class="c9"><span class="c0">Enforcement status of Purposes 1,2,4,7, and Special Purpose 1</span></li><li class="c9"><span class="c0">An array of bidders and modules skipped due to TCF enforcement.</span></li></ul><p class="c12 c13"><span class="c0"></span></p><p class="c12 c13"><span class="c0"></span></p></body></html>
diff --git a/dev-docs/show-multi-format-ads.md b/dev-docs/show-multi-format-ads.md
index b99068625f..4d6bc1cb8d 100644
--- a/dev-docs/show-multi-format-ads.md
+++ b/dev-docs/show-multi-format-ads.md
@@ -76,7 +76,11 @@ The ad unit below supports the banner, native, and video media types.
             },
             video: {
                 context: 'outstream',
-                playerSize: [640, 480]
+                playerSize: [640, 480],
+                mimes: ['video/mp4'],
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
             },
         },
         bids: [
diff --git a/dev-docs/show-outstream-video-ads.md b/dev-docs/show-outstream-video-ads.md
index 2da4f7cdf0..6b4a9dde66 100644
--- a/dev-docs/show-outstream-video-ads.md
+++ b/dev-docs/show-outstream-video-ads.md
@@ -39,7 +39,11 @@ var videoAdUnits = [{
     mediaTypes: {
         video: {
             context: 'outstream',
-            playerSize: [640, 480]
+                playerSize: [640, 480],
+                mimes: ['video/mp4'],
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
         }
     },
     bids: [{
@@ -47,7 +51,7 @@ var videoAdUnits = [{
         params: {
             placementId: 13232385,
             video: {
-                skippable: true,
+                skip: 1,
                 playback_method: ['auto_play_sound_off']
             }
         }
@@ -95,6 +99,11 @@ pbjs.addAdUnit({
         video: {
             context: 'outstream',
             playerSize: [640, 480],
+            mimes: ['video/mp4'],
+            protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+            playbackmethod: [2],
+            skip: 1
+
             // but a renderer passed in here would apply only to this mediaType.
             // This renderer would override the above renderer if it exists.
             renderer: {
@@ -121,7 +130,11 @@ pbjs.addAdUnit({
     mediaTypes: {
         video: {
             context: 'outstream',
-            playerSize: [640, 480]
+            playerSize: [640, 480],
+            mimes: ['video/mp4'],
+            protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+            playbackmethod: [2],
+            skip: 1
         }
     },
     renderer: {
diff --git a/dev-docs/show-prebid-ads-on-amp-pages.md b/dev-docs/show-prebid-ads-on-amp-pages.md
index 0195cc63fe..e03048365e 100644
--- a/dev-docs/show-prebid-ads-on-amp-pages.md
+++ b/dev-docs/show-prebid-ads-on-amp-pages.md
@@ -91,34 +91,40 @@ that doesn't come from /amp parameters:
             }
         }
     },
-    "imp": [
-        {
-            "id": "some-impression-id",
-            "banner": {
-                "format": [
-                    {
-                        "w": 300,
-                        "h": 250
-                    }
-                ]
-            },
-            "ext": {
+    "imp": [{
+      "id": "some-impression-id",
+      "banner": {
+          "format": [{
+            "w": 300,
+            "h": 250
+          }]
+      },
+      "ext": {
+        "prebid": {
+          "bidder": {
                 "bidderA": {
                     // Insert parameters here
                 },
                 "bidderB": {
                     // Insert parameters here
                 }
-            }
+          }
         }
-    ]
+      }
+    }]
 }
-
 ```
 This basic OpenRTB record will be enhanced by the parameters from the call to the [/amp endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html).
 
 ### AMP content page
 
+First ensure that the amp-ad component is imported in the header.
+
+```
+<script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.js"></script>
+```
+This script provides code libraries that will convert `<amp-ad>` properties to the endpoint query parameters usint the [Real Time Config](https://github.com/ampproject/amphtml/blob/main/extensions/amp-a4a/rtc-documentation.md) (RTC) protocol.
+
 The `amp-ad` elements in the page body need to be set up as shown below, especially the following attributes:
 
 + `data-slot`: Identifies the ad slot for the auction.
@@ -130,7 +136,7 @@ e.g. for the AppNexus cluster of Prebid Servers:
 ```html
 <amp-ad width="300" height="250"
     type="doubleclick"
-    data-slot="/19968336/universal_creative"
+    data-slot="/1111/universal_creative"
     rtc-config='{"vendors": {"prebidappnexus": {"PLACEMENT_ID": "13144370"}}, "timeoutMillis": 500}'>
 </amp-ad>
 ```
@@ -139,11 +145,20 @@ e.g. for Rubicon Project's cluster of Prebid Servers:
 ```html
 <amp-ad width="300" height="250"
     type="doubleclick"
-    data-slot="/19968336/universal_creative"
+    data-slot="/1111/universal_creative"
     rtc-config='{"vendors": {"prebidrubicon": {"REQUEST_ID": "1234-amp-pub-300x250"}}, "timeoutMillis": 500}'>
 </amp-ad>
 ```
 
+For other hosts, you can specify the URL directly rather than using one of the convenient vendor aliases. e.g.
+```html
+<amp-ad width="300" height="250"
+    type="doubleclick"
+    data-slot="/1111/universal_creative"
+    rtc-config='{"urls": ["https://prebid-server.example.com/openrtb2/amp?tag_id=1001-amp&w=ATTR(width)&h=ATTR(height)&ow=ATTR(data-override-width)&oh=ATTR(data-override-height)&ms=ATTR(data-multi-size)&slot=ATTR(data-slot)&targeting=TGT&curl=CANONICAL_URL&timeout=TIMEOUT&adc=ADCID&purl=HREF&gdpr_consent=CONSENT_STRING&account=ACCOUNT_ID&gdpr_applies=CONSENT_METADATA(gdprApplies)&addtl_consent=CONSENT_METADATA(additionalConsent)&consent_type=CONSENT_METADATA(consentStringType)]}'
+</amp-ad>
+```
+
 ### HTML Creative
 
 This is the creative that your Ad Ops team needs to upload to the ad server (it's also documented at [Setting up Prebid for AMP in Google Ad Manager]({{site.github.url}}/adops/setting-up-prebid-for-amp-in-dfp.html)).
@@ -244,37 +259,45 @@ If you're using AppNexus' managed service, you would enter something like this:
   height="1"
   sandbox="allow-scripts allow-same-origin"
   frameborder="0"
-  src="https://acdn.adnxs.com/prebid/amp/user-sync/load-cookie.html?endpoint=appnexus&max_sync_count=5">
+  src="https://acdn.adnxs.com/prebid/amp/user-sync/load-cookie.html?endpoint=appnexus&max_sync_count=5&source=amp">
   <amp-img layout="fill" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" placeholder></amp-img>
 </amp-iframe>
 ```
 
-If you are utilizing Magnite's managed service, there's an extra parameter:
+If you are utilizing Magnite's managed service, there's an extra `args` parameter:
 ```html
 <amp-iframe width="1" title="User Sync"
   height="1"
   sandbox="allow-scripts allow-same-origin"
   frameborder="0"
-  src="https://PROVIDED_BY_MAGNITE/prebid/load-cookie.html?endpoint=rubicon&max_sync_count=5&args=account:MAGNITE_ACCOUNT_ID">
+  src="https://GET_URL_FROM_MAGNITE_ACCOUNT_TEAM/prebid/load-cookie.html?endpoint=rubicon&max_sync_count=5&source=amp&args=account:MAGNITE_ACCOUNT_ID">
   <amp-img layout="fill" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" placeholder></amp-img>
 </amp-iframe>
 ```
+
+Or you can specify a full URL to another Prebid Server location (including a QA site) by setting `endpoint` to a URL-encoded string. e.g.
+```html
+<amp-iframe width="1" title="User Sync"
+  height="1"
+  sandbox="allow-scripts allow-same-origin"
+  frameborder="0"
+  src="https://acdn.adnxs.com/prebid/amp/user-sync/load-cookie.html?endpoint=https%3A%2F%2Fprebid-server-qa.example.com%2Fcookie_sync&max_sync_count=5&source=amp">
+  <amp-img layout="fill" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" placeholder></amp-img>
+</amp-iframe>
+```
+
 The usage of `load-cookie.html` and `load-cookie-with-consent.html` is the same. The arguments available on the query string are:
 
 {: .table .table-bordered .table-striped }
 | Param | Scope | Values | Description |
 | --- | --- | --- | --- |
-| endpoint | recommended | appnexus or rubicon | Determines which cluster of prebid servers to load from. Default, for legacy reasons, is appnexus. |
+| endpoint | recommended | 'appnexus', 'rubicon', or URL | Determines which cluster of prebid servers to load from. Default, for legacy reasons, is appnexus. |
+| source | optional | recommended | Set it to 'amp' to tell Prebid Server to exclude iframe syncs, which don't work on AMP. |
 | max_sync_count | optional | integer | How many sync pixels should be returned from Prebid Server |
 | args | optional | attr1:val1,attr2:val2 | These attribute value pairs will be passed to Prebid Server in the /cookie_sync call. The attribute and value will be quoted by the system when appropriate. |
 | gdpr | optional | 0 or 1 | Defines whether GDPR processing is in scope for this request. 0=no, 1=yes. Leave unknown if not sure. |
 | gdpr_consent | optional | String | IAB CMP-formatted consent string |
 
-{% capture endpointNote %}
-Currently, if you need to sync with a Prebid Server other than appnexus or rubicon, you'll need to fork the repo, change the endpoint, and host it somewhere. There is an [issue open to resolve](https://github.com/prebid/prebid-universal-creative/issues/122) this.
-{% endcapture %}
-{% include alerts/alert_note.html content=endpointNote %}
-
 ### AMP RTC and GDPR
 
 The two Prebid Server RTC vendor strings 'prebidappnexus' and 'prebidrubicon'
@@ -283,7 +306,25 @@ support passing GDPR consent to Prebid Server.
 The CONSENT_STRING macro will be populated if you've integrated with a CMP
 that supports amp-consent v2 -- custom CMP integration.
 
-If you're using a custom RTC callout, you'll need to add `gdpr_consent=CONSENT_STRING` to the list of parameters.
+If you're using a custom RTC callout, here are the parameters that can be passed through the RTC string:
+- tag_id
+- w=ATTR(width)
+- h=ATTR(height)
+- ow=ATTR(data-override-width)
+- oh=ATTR(data-override-height)
+- ms=ATTR(data-multi-size)
+- slot=ATTR(data-slot)
+- targeting=TGT
+- curl=CANONICAL_URL
+- timeout=TIMEOUT
+- adc=ADCID
+- purl=HREF
+- gdpr_consent=CONSENT_STRING
+- consent_type=CONSENT_METADATA(consentStringType)
+- gdpr_applies=CONSENT_METADATA(gdprApplies)
+- attl_consent=CONSENT_METADATA(additionalConsent)
+
+See the entries in the [AMP vendors callout file](https://github.com/ampproject/amphtml/blob/main/src/service/real-time-config/callout-vendors.js).
 
 ## Debugging Tips
 To review that Prebid on AMP is working properly the following aspects can be looked at:
diff --git a/dev-docs/show-video-with-a-dfp-video-tag.md b/dev-docs/show-video-with-a-dfp-video-tag.md
index a16adf693c..929cffe49b 100644
--- a/dev-docs/show-video-with-a-dfp-video-tag.md
+++ b/dev-docs/show-video-with-a-dfp-video-tag.md
@@ -59,17 +59,17 @@ var videoAdUnit = {
     mediaTypes: {
         video: {
             context: 'instream',
-            playerSize: [640, 480]
+            playerSize: [640, 480],
+            mimes: ['video/mp4'],
+            protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+            playbackmethod: [2],
+            skip: 1
         },
     },
     bids: [{
         bidder: 'appnexus',
         params: {
-            placementId: 13232361,
-            video: {
-                skippable: true,
-                playback_methods: ['auto_play_sound_off']
-            }
+            placementId: 13232361
         }
     }]
 };
diff --git a/dev-docs/troubleshooting-tips.md b/dev-docs/troubleshooting-tips.md
index 874e3d90e6..1b2375c9e1 100644
--- a/dev-docs/troubleshooting-tips.md
+++ b/dev-docs/troubleshooting-tips.md
@@ -3,12 +3,9 @@ layout: page_v2
 title: Dev Tips
 description: Troubleshooting tips for developers implementing Prebid.js Header Bidding.
 pid: 0
-
-top_nav_section: dev_docs
 nav_section: troubleshooting
 redirect_from: "/dev-docs/toubleshooting-tips.html"
 sidebarType: 1
-
 ---
 
 
@@ -16,221 +13,4 @@ sidebarType: 1
 # Tips for Troubleshooting
 {:.no_toc}
 
-This page has tips and tricks for troubleshooting issues with your Prebid.js integration.
-
-* TOC
-{:toc}
-
-## Turn on Prebid.js debug messages
-
-Add `pbjs_debug=true` to the end of your page's URL. For example: <code>/pbjs_demo.html?pbjs_debug=true</code>. This will add two types of messages to your browser's developer console:
-
-1. Prebid.js suppresses Javascript errors in the normal mode to not break the rest of your page. Adding the `pbjs_debug` parameter will expose the Javascript errors.
-2. You'll find additional debug messages. Filter the messages by string `MESSAGE:`. For example:
-
-<br>
-
-![Prebid.js Debug Console]({{ site.github.url }}/assets/images/dev-docs/pbjs_debug-console-log.png){: .pb-sm-img :}
-
-<br>
-
-{: .table .table-bordered .table-striped }
-| Message |  Description   |
-| :----  |:--------|
-| Calling bidder |  When Prebid.js sends out bid requests, this message is logged |
-| Set key value for placement | After all the bids came back, or when timeout is reached, prebid.js will set keyword targeting for the defined ad units. |
-| Calling renderAd | If a header bidding bid wins the ad server's auction, prebid.js will render the winning bid's creative. |
-
-<br>
-
-## Turn on your ad server's developer console
-
-The ad server's developer console usually provide information such as targeting, latency, and key events logging. For example, here is a screenshot of Google Ad Manager's GPT developer console logs:
-
-<br>
-
-![Prebid.js Debug Console]({{ site.github.url }}/assets/images/dev-docs/googfc.png){: .pb-md-img :}
-
-<br>
-
-## See all bids in the console
-
-To print information about all of the bids that come in to the Console on any page that is running Prebid.js, follow these steps.
-
-Open the Chrome Dev Tools.  In the **Sources** tab, next to **Content Scripts**, click the **>>** button and you can add **Snippets**:
-
-![View Snippets in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
-
-<br />
-
-Right-click to add a **New** snippet:
-
-![Add New Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
-
-<br />
-
-Paste in the following code using Control-V (or Command-V on Mac), and give the snippet a name, such as 'show-all-bids':
-
-```javascript
-(function() {
-  function forEach(responses, cb) {
-    Object.keys(responses).forEach(function(adUnitCode) {
-      var response = responses[adUnitCode];
-      response.bids.forEach(function(bid) {
-        cb(adUnitCode, bid);
-      });
-    });
-  }
-  var winners = pbjs.getAllWinningBids();
-  var output = [];
-  forEach(pbjs.getBidResponses(), function(code, bid) {
-    output.push({
-      bid: bid,
-      adunit: code,
-      adId: bid.adId,
-      bidder: bid.bidder,
-      time: bid.timeToRespond,
-      cpm: bid.cpm,
-      msg: bid.statusMessage,
-      rendered: !!winners.find(function(winner) {
-        return winner.adId==bid.adId;
-      })
-    });
-  });
-  forEach(pbjs.getNoBids && pbjs.getNoBids() || {}, function(code, bid) {
-    output.push({
-      msg: "no bid",
-      adunit: code,
-      adId: bid.bidId,
-      bidder: bid.bidder
-    });
-  });
-  if (output.length) {
-    if (console.table) {
-      console.table(output);
-    } else {
-      for (var j = 0; j < output.length; j++) {
-        console.log(output[j]);
-      }
-    }
-  } else {
-    console.warn('NO prebid responses');
-  }
-})();
-```
-
-<br />
-
-Right-click the snippet and choose **Run**:
-
-![Run a Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
-
-<br />
-
-Check the output in Console to see the bids:
-
-![See Snippet Output in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
-
-## See all winning bids in the console
-
-To print information about all of the winning bids that come in to the Console on any page that is running Prebid.js, follow these steps.
-
-Open the Chrome Dev Tools.  In the **Sources** tab, next to **Content Scripts**, click the **>>** button and you can add **Snippets**:
-
-![View Snippets in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
-
-<br />
-
-Right-click to add a **New** snippet:
-
-![Add New Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
-
-<br />
-
-Paste in the following code using Control-V (or Command-V on Mac), and give the snippet a name, such as 'show-all-winning-bids':
-
-```javascript
-var bids = pbjs.getAllWinningBids();
-var output = [];
-for (var i = 0; i < bids.length; i++) {
-    var b = bids[i];
-    output.push({
-        'adunit': b.adUnitCode, 'adId': b.adId, 'bidder': b.bidder,
-        'time': b.timeToRespond, 'cpm': b.cpm
-    });
-}
-if (output.length) {
-    if (console.table) {
-        console.table(output);
-    } else {
-        for (var j = 0; j < output.length; j++) {
-            console.log(output[j]);
-        }
-    }
-} else {
-    console.warn('No prebid winners');
-}
-```
-
-<br />
-
-Right-click the snippet and choose **Run**:
-
-![Run a Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
-
-<br />
-
-Check the output in Console to see the bids (note that this screenshot shows the output from "see all bids" but they're very similar):
-
-![See Snippet Output in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
-
-## Modify bid responses for testing
-
-Using `pbjs.setConfig({debugging:{ ... }})` from the javascript console, it is possible to override and filter bids as they come in.
-When this type of debugging is enabled it will persist across page loads using `sessionStorage`.  This allows
-for easy testing of pages that immediately start auctions (most pages), but also means you need to remember
-to deactivate debugging when you are done (or clear your local storage / use incognito mode when testing).
-
-```
-// Filtering bidders
-javascript console> pbjs.setConfig({
-  debugging: {
-    enabled: true,                     // suppresses bids from other bidders
-    bidders: ['bidderA', 'bidderB']
-  }
-});
-
-// Overwriting bid responses for all bidders
-javascript console> pbjs.setConfig({
-  debugging: {
-    enabled: true,
-    bids: [{
-      cpm: 1.5
-    }]
-  }
-});
-
-// Overwriting bid responses for a specific bidder and adUnit code (can use either separately)
-javascript console> pbjs.setConfig({
-  debugging: {
-    enabled: true,
-    bids: [{
-      bidder: 'bidderA',
-      adUnitCode: '/19968336/header-bid-tag-0',
-      cpm: 1.5
-    }]
-  }
-});
-
-// Disabling debugging
-javascript console> pbjs.setConfig({
-  debugging: {
-    enabled: false
-  }
-});
-```
-
-## Related Reading
-
-+ [Prebid.js FAQ](/dev-docs/faq.html)
-+ [Prebid.js Common Issues](/dev-docs/common-issues.html)
+Moved to [the PBJS Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html).
diff --git a/download.md b/download.md
index 25f47e9173..6d4c3be385 100644
--- a/download.md
+++ b/download.md
@@ -5,6 +5,33 @@ description: Documentation on how to download Prebid.js for header bidding.
 sidebarType: 0
 ---
 
+<style>
+a.tip {
+    border-bottom: 1px dashed;
+    text-decoration: none
+}
+a.tip:hover {
+    cursor: help;
+    position: relative
+}
+a.tip span {
+    display: none
+}
+a.tip:hover span {
+    border: #c0c0c0 1px dotted;
+    padding: 5px 20px 5px 5px;
+    display: block;
+    z-index: 100;
+    left: 0px;
+    background: #f0f0f0;
+    margin: 10px;
+    width: 300px;
+    position: absolute;
+    top: 10px;
+    text-decoration: none
+}
+</style>
+
 <script src="https://cdn.firebase.com/js/client/2.4.2/firebase.js"></script>
 
 <script>
@@ -162,6 +189,9 @@ function get_form_data() {
 {: .alert.alert-warning :}
 Prebid.js is open source software that is offered for free as a convenience. While it is designed to help companies address legal requirements associated with header bidding, we cannot and do not warrant that your use of Prebid.js will satisfy legal requirements. You are solely responsible for ensuring that your use of Prebid.js complies with all applicable laws.  We strongly encourage you to obtain legal advice when using Prebid.js to ensure your implementation complies with all laws where you operate.
 
+{: .alert.alert-danger :}
+**Note:** recommended modules are now checked by default. Please uncheck them as desired.
+
 ### Option 1: Customize your download here
 
 {% assign bidder_pages = site.pages | where: "layout", "bidder" %}
@@ -191,107 +221,126 @@ Prebid.js is open source software that is offered for free as a convenience. Whi
 <br>
 <h4>Analytics Adapters</h4>
 <div class="row">
-{% for page in analytics_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}<div class="col-md-4">
-  <div class="checkbox">
-    <label>
-      <input type="checkbox" analyticscode="{{ page.modulecode }}" class="analytics-check-box"> {{ page.title }}
-    </label>
-  </div>
-</div>
-{% endfor %}
+{% for page in analytics_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}<div class="col-md-4"><div class="checkbox"><label><input type="checkbox" analyticscode="{{ page.modulecode }}" class="analytics-check-box"> {{ page.title }}</label></div></div>{% endfor %}
 </div>
 <br/>
+<h4>Recommended Modules</h4>
+Prebid.org highly recommends that publishers utilize the following modules:
+<br/>
+{% for page in module_pages %}{% if page.recommended == true %}<div class="row"><div class="checkbox" style="background-color: #e1fce2;"><label> <input type="checkbox" CHECKED moduleCode="{{ page.module_code }}" class="bidder-check-box"> <a href="/dev-docs/modules/{{page.module_code}}.html"><strong>{{ page.display_name }}</strong></a> - {{page.description}}</label></div></div>{% endif %}{% endfor %}
+<br/>
 <h4>General Modules</h4>
 <div class="row">
- {% for page in module_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}<div class="col-md-4"><div class="checkbox">
-  <label> <input type="checkbox" moduleCode="{{ page.module_code }}" class="bidder-check-box"> {{ page.display_name }}</label>
+ {% for page in module_pages %}{% if page.enable_download == false or page.recommended == true or page.vendor_specific == true %}{% continue %}{% endif %}<div class="col-md-4"><div class="checkbox">
+  <label> <input type="checkbox" moduleCode="{{ page.module_code }}" class="bidder-check-box"> <a href="/dev-docs/modules/{{page.module_code}}.html" class="tip">{{ page.display_name }}<span>{{page.description}}</span></a></label>
 </div></div>{% endfor %}
 </div>
 
+<h4>Vendor-Specific Modules</h4>
+These modules may require accounts with a service provider.<br/>
+<div class="row">
+ {% for page in module_pages %}{% if page.enable_download == false or page.recommended == true %}{% continue %}{% endif %}{% if page.vendor_specific == true %}<div class="col-md-4"><div class="checkbox"><label> <input type="checkbox" moduleCode="{{ page.module_code }}" class="bidder-check-box"> <a href="/dev-docs/modules/{{page.module_code}}.html" class="tip">{{ page.display_name }}<span>{{page.description}}</span></a></label>
+</div></div>{% endif %}{% endfor %}
+</div>
 
 <h4>User ID Modules</h4>
 <div class="row">  
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="admixerIdSystem" class="bidder-check-box"> Admixer ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="britepoolIdSystem" class="bidder-check-box"> BritePool ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="criteoIdSystem" class="bidder-check-box"> Criteo ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="deepintentDpesIdSystem" class="bidder-check-box"> Deepintent DPES ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="fabrickIdSystem" class="bidder-check-box"> Neustar Fabrick ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="haloIdSystem" class="bidder-check-box"> Halo ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="id5IdSystem" class="bidder-check-box"> ID5 ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="identityLinkIdSystem" class="bidder-check-box"> IdentityLink ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="idxIdSystem" class="bidder-check-box"> IDx</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="intentIqIdSystem" class="bidder-check-box"> IntentIQ ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="liveIntentIdSystem" class="bidder-check-box"> LiveIntent ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="lotamePanoramaIdSystem" class="bidder-check-box"> Lotame ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="merkleIdSystem" class="bidder-check-box"> Merkle ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="netIdSystem" class="bidder-check-box"> netID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="nextrollIdSystem" class="bidder-check-box"> NextRoll ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="novatiqIdSystem" class="bidder-check-box"> Novatiq Snowflake ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="parrableIdSystem" class="bidder-check-box"> Parrable ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="pubCommonIdSystem" class="bidder-check-box"> PubCommon ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="pubProvidedIdSystem" class="bidder-check-box"> PubProvided ID</label>
-</div></div>  
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="quantcastIdSystem" class="bidder-check-box"> Quantcast ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="sharedIdSystem" class="bidder-check-box"> Shared ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="tapadIdSystem" class="bidder-check-box"> Tapad ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="unifiedIdSystem" class="bidder-check-box"> Unified ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="uid2IdSystem" class="bidder-check-box"> Unified ID 2</label>
-</div></div>  
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="verizonMediaIdSystem" class="bidder-check-box"> Verizon Media ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="zeotapIdPlusIdSystem" class="bidder-check-box"> Zeotap ID+</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="mwOpenLinkIdSystem" class="bidder-check-box"> MediaWallah OpenLink ID</label>
-</div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="admixerIdSystem" class="bidder-check-box"> Admixer ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="amxIdSystem" class="bidder-check-box"> AMX RTB ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="akamaiDAPIdSystem" class="bidder-check-box"> Akamap DAP ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="britepoolIdSystem" class="bidder-check-box"> BritePool ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="criteoIdSystem" class="bidder-check-box"> Criteo ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="deepintentDpesIdSystem" class="bidder-check-box"> Deepintent DPES ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="dmdIdSystem" class="bidder-check-box"> DMD ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="fabrickIdSystem" class="bidder-check-box"> Neustar Fabrick ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="flocIdSystem" class="bidder-check-box"> FLoC Cohort ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="haloIdSystem" class="bidder-check-box"> Halo ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="id5IdSystem" class="bidder-check-box"> ID5 ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="identityLinkIdSystem" class="bidder-check-box"> IdentityLink ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="idxIdSystem" class="bidder-check-box"> IDx</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="intentIqIdSystem" class="bidder-check-box"> IntentIQ ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="kinessoIdSystem" class="bidder-check-box"> Kinesso ID</label>
+  </div></div>
+    <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="liveIntentIdSystem" class="bidder-check-box"> LiveIntent ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="lotamePanoramaIdSystem" class="bidder-check-box"> Lotame ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="mwOpenLinkIdSystem" class="bidder-check-box"> MediaWallah OpenLink ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="merkleIdSystem" class="bidder-check-box"> Merkle ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="netIdSystem" class="bidder-check-box"> NetID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="nextrollIdSystem" class="bidder-check-box"> NextRoll ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="novatiqIdSystem" class="bidder-check-box"> Novatiq Snowflake ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="parrableIdSystem" class="bidder-check-box"> Parrable ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="sharedIdSystem" class="bidder-check-box"> SharedID (formerly known as PubCommon)</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="pubProvidedIdSystem" class="bidder-check-box"> PubProvided ID</label>
+  </div></div>  
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="quantcastIdSystem" class="bidder-check-box"> Quantcast ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="tapadIdSystem" class="bidder-check-box"> Tapad ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="unifiedIdSystem" class="bidder-check-box"> Unified ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="uid2IdSystem" class="bidder-check-box"> Unified ID 2</label>
+  </div></div>  
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="verizonMediaIdSystem" class="bidder-check-box"> Verizon Media ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="zeotapIdPlusIdSystem" class="bidder-check-box"> Zeotap ID+</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="pubCommonIdSystem" class="bidder-check-box"> PubCommon ID<div style="font-size:80%"> (not in 5.x)</div></label>
+  </div></div>
 </div>
 
 <br>
diff --git a/examples/video/crossplayer/flowplayer/pb-cp-flowplayer.html b/examples/video/crossplayer/flowplayer/pb-cp-flowplayer.html
index 41cff040f2..db7f0ab6b2 100644
--- a/examples/video/crossplayer/flowplayer/pb-cp-flowplayer.html
+++ b/examples/video/crossplayer/flowplayer/pb-cp-flowplayer.html
@@ -78,16 +78,19 @@ <h4>Place this code in the page header.</h4>
       sizes: [640,480],
       mediaTypes: {
         video: {
-          context: "instream"
+                context: 'instream',
+                playerSize: [640, 480],
+                mimes: ['video/mp4'],
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
         }
       },
       bids: [
         {
           bidder: 'appnexus',
           params: {
-              placementId: '13232361', // Add your own placement id here <br>
-              skipppable: true,
-              playback_method: ['auto_play_sound_off']
+              placementId: '13232361'  // Add your own placement id here <br>
             }
           }
         }
diff --git a/examples/video/crossplayer/jwplayer/pb-cp-jwplayer.html b/examples/video/crossplayer/jwplayer/pb-cp-jwplayer.html
index be4fc6596d..1f34020895 100644
--- a/examples/video/crossplayer/jwplayer/pb-cp-jwplayer.html
+++ b/examples/video/crossplayer/jwplayer/pb-cp-jwplayer.html
@@ -46,18 +46,19 @@ <h4>Place this code in the page header.</h4>
     sizes: [640,480],
     mediaTypes: {
       video: {
-        context: "instream"
+	context: 'instream',
+	playerSize: [640, 480],
+	mimes: ['video/mp4'],
+	protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+	playbackmethod: [2],
+	skip: 1
       }
     },
     bids: [
       {
         bidder: 'appnexus',
         params: {
-          placementId: '13232361', // Add your own placement id here<br>
-          video: {
-            skipppable: true,
-            playback_method: ['auto_play_sound_off']
-          }
+          placementId: '13232361'  // Add your own placement id here<br>
         }
       }
     ]
diff --git a/examples/video/crossplayer/kaltura/pb-cp-kaltura.html b/examples/video/crossplayer/kaltura/pb-cp-kaltura.html
index 7e3d5408fc..994abea4e0 100644
--- a/examples/video/crossplayer/kaltura/pb-cp-kaltura.html
+++ b/examples/video/crossplayer/kaltura/pb-cp-kaltura.html
@@ -46,18 +46,19 @@ <h4>Place this code in the page header.</h4>
     sizes: [640,480],
     mediaTypes: {
       video: {
-        context: "instream"
+	context: 'instream',
+	playerSize: [640, 480],
+	mimes: ['video/mp4'],
+	protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+	playbackmethod: [2],
+	skip: 1
       }
     },
     bids: [
       {
         bidder: 'appnexus',
         params: {
-          placementId: '13232361', // Add your own placement id here<br>
-          video: {
-            skipppable: true,
-            playback_method: ['auto_play_sound_off']
-          }
+          placementId: '13232361'  // Add your own placement id here<br>
         }
       }
     ]
diff --git a/examples/video/crossplayer/videojs/pb-cp-videojs.html b/examples/video/crossplayer/videojs/pb-cp-videojs.html
index 787cf5c4d3..8d626ebc4f 100644
--- a/examples/video/crossplayer/videojs/pb-cp-videojs.html
+++ b/examples/video/crossplayer/videojs/pb-cp-videojs.html
@@ -58,18 +58,19 @@ <h4>Place this code in the page header.</h4>
       sizes: [640,480],
       mediaTypes: {
         video: {
-          context: "instream"
+	  context: 'instream',
+	  playerSize: [640, 480],
+	  mimes: ['video/mp4'],
+	  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+	  playbackmethod: [2],
+	  skip: 1
         }
       },
       bids: [
         {
           bidder: 'appnexus',
           params: {
-            placementId: '13232361', // Add your own placement id here<br>
-            video: {
-              skipppable: true,
-              playback_method: ['auto_play_sound_off']
-            }
+            placementId: '13232361'  // Add your own placement id here<br>
           }
         }
       ]
diff --git a/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html b/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html
index 44af13a673..e97457c5f4 100644
--- a/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html
+++ b/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html
@@ -54,18 +54,18 @@ <h4>Place this code in the page header.</h4>
 	    code: 'video1',
 	    mediaTypes: {
 	        video: {
-	            playerSize: [640, 480],
-	            context: 'instream'
+                  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
 	        }
 	    },
 	    bids: [{
 	        bidder: 'appnexus',
 	        params: {
-	            placementId: 13232361, // Add your own placement id here<br>
-	            video: {
-	                skipppable: true,
-	                playback_method: ['auto_play_sound_off']
-	            }
+	            placementId: 13232361  // Add your own placement id here<br>
 	        }
 	    }]
 	};
diff --git a/examples/video/instream/akamai/pb-ve-amp.html b/examples/video/instream/akamai/pb-ve-amp.html
index f5422cc232..6d832a0f47 100644
--- a/examples/video/instream/akamai/pb-ve-amp.html
+++ b/examples/video/instream/akamai/pb-ve-amp.html
@@ -53,18 +53,18 @@ <h4>Place this code in the page header.</h4>
 	    code: 'video1',
 	    mediaTypes: {
 	        video: {
-	            playerSize: [640, 480],
-	            context: 'instream'
+                  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
 	        }
 	    },
 	    bids: [{
 	        bidder: 'appnexus',
 	        params: {
-	            placementId: 13232361, /* Add own placement id */
-	            video: {
-	                skipppable: true,
-	                playback_method: ['auto_play_sound_off']
-	            }
+	            placementId: 13232361 /* Add own placement id */
 	        }
 	    }]
 	};
@@ -193,11 +193,7 @@ <h4>Using Prebid Plugin for AMP</h4>
                     {
                       bidder: "appnexus",
                       params: {
-                        placementId: 13232361, /* Test placementId not for prod */
-                        video: {
-                          skippable: true,
-                          playback_method: ["auto_play_sound_off"]
-                        }
+                        placementId: 13232361 /* Test placementId not for prod */
                       }
                     }
                   ]
diff --git a/examples/video/instream/brid/pb-ve-brid.html b/examples/video/instream/brid/pb-ve-brid.html
index 6b286f272e..5b7da01cdf 100644
--- a/examples/video/instream/brid/pb-ve-brid.html
+++ b/examples/video/instream/brid/pb-ve-brid.html
@@ -8,7 +8,6 @@
 ---
 
 
-
 <div class="container">
 	<div class="row">
 		<div class="vidHeader" style="width:75vw;">
@@ -58,18 +57,19 @@ <h4>Place this code in the page header.</h4>
       sizes: [640,480],
       mediaTypes: {
         video: {
-          context: "instream"
+                context: 'instream',
+                playerSize: [640, 480],
+                mimes: ['video/mp4'],
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
         }
       },
       bids: [
         {
           bidder: 'appnexusAst',
           params: {
-            placementId: '9333431', // Add your own placement id here<br>
-            video: {
-              skipppable: true,
-              playback_method: ['auto_play_sound_off']
-            }
+            placementId: '13232361' // Add your own placement id here<br>
           }
         }
       ]
diff --git a/examples/video/instream/brightcove/pb-ve-brightcove.html b/examples/video/instream/brightcove/pb-ve-brightcove.html
index cc2dea6a3a..2e808b4501 100644
--- a/examples/video/instream/brightcove/pb-ve-brightcove.html
+++ b/examples/video/instream/brightcove/pb-ve-brightcove.html
@@ -70,18 +70,18 @@ <h4>Place this code in the page header.</h4>
 		code: 'video1',
 		mediaTypes: {
 			video: {
-				playerSize: [640, 480],
-				context: 'instream'
+			  context: 'instream',
+			  playerSize: [640, 480],
+			  mimes: ['video/mp4'],
+			  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			  playbackmethod: [2],
+			  skip: 1
 			}
 		},
 		bids: [{
 			bidder: 'appnexus',
 			params: {
-				placementId: iosDevice ? 13239390 : 13232361, // Add your own placement id here. Note, skippable video is not supported on iOS <br>
-				video: {
-					skipppable: true,
-					playback_method: ['auto_play_sound_off']
-				}
+				placementId: iosDevice ? 13239390 : 13232361 // Add your own placement id here. 
 			}
 		}]
 	};
@@ -299,4 +299,4 @@ <h4>Place this code in the page body.</h4>
   </script>
 	
 	<script type="text/javascript" src="/assets/js/video/pb-code-highlight.js"></script>
-	
\ No newline at end of file
+	
diff --git a/examples/video/instream/flowplayer/pb-ve-flowplayer.html b/examples/video/instream/flowplayer/pb-ve-flowplayer.html
index 42ec91f94e..e5744635ba 100644
--- a/examples/video/instream/flowplayer/pb-ve-flowplayer.html
+++ b/examples/video/instream/flowplayer/pb-ve-flowplayer.html
@@ -97,18 +97,19 @@ <h4>Place this code in the page header.</h4>
     sizes: [640,480],
     mediaTypes: {
       video: {
-        context: "instream"
+          context: 'instream',
+          playerSize: [640, 480],
+          mimes: ['video/mp4'],
+          protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+          playbackmethod: [2],
+          skip: 1
       }
     },
     bids: [
       {
         bidder: 'appnexus',
         params: {
-          placementId: '13232361', // Add your own placement id here<br>
-          video: {
-            skipppable: true,
-            playback_method: ['auto_play_sound_off']
-          }
+          placementId: '13232361'  // Add your own placement id here<br>
         }
       }
     ]
@@ -233,4 +234,4 @@ <h4>Place this code in the page body.</h4>
 
 	
 	<script type="text/javascript" src="/assets/js/video/pb-code-highlight.js"></script>
-	
\ No newline at end of file
+	
diff --git a/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html b/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html
index 2e9a0921e8..350fdfea7d 100644
--- a/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html
+++ b/examples/video/instream/jwplayer/pb-ve-jwplayer-hosted.html
@@ -58,18 +58,18 @@ <h4>Place this code in the page header.</h4>
 	    code: 'video1',
 	    mediaTypes: {
 	        video: {
-	            playerSize: [640, 480],
-	            context: 'instream'
+                  context: 'instream',
+                  playerSize: [640, 480],
+                  mimes: ['video/mp4'],
+                  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                  playbackmethod: [2],
+                  skip: 1
 	        }
 	    },
 	    bids: [{
 	        bidder: 'appnexus',
 	        params: {
-	            placementId: 13232361, // Add your own placement id here<br>
-	            video: {
-	                skipppable: true,
-	                playback_method: ['auto_play_sound_off']
-	            }
+	            placementId: 13232361  // Add your own placement id here<br>
 	        }
 	    }]
 	};
diff --git a/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html b/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html
index 359ea4756d..3370763d1f 100644
--- a/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html
+++ b/examples/video/instream/jwplayer/pb-ve-jwplayer-platform.html
@@ -54,18 +54,18 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
+                context: 'instream',
                 playerSize: [640, 480],
-                context: 'instream'
+                mimes: ['video/mp4'],
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
             }
         },
         bids: [{
             bidder: 'appnexus',
             params: {
-                placementId: 13232361, //put your placement id here<br>
-                video: {
-                    skipppable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: 13232361  //put your placement id here<br>
             }
         }]
     };
diff --git a/examples/video/instream/kaltura/pb-ve-kaltura.html b/examples/video/instream/kaltura/pb-ve-kaltura.html
index 0e22a65686..a5ce534724 100644
--- a/examples/video/instream/kaltura/pb-ve-kaltura.html
+++ b/examples/video/instream/kaltura/pb-ve-kaltura.html
@@ -65,18 +65,18 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
+                context: 'instream',
                 playerSize: [640, 480],
-                context: 'instream'
+                mimes: ['video/mp4'],
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
             }
         },
         bids: [{
             bidder: 'appnexus',
             params: {
-                placementId: 13232361, // Add your own placement ID here<br>
-                video: {
-                    skippable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: 13232361  // Add your own placement ID here<br>
             }
         }]
     };
diff --git a/examples/video/instream/ooyala/pb-ve-ooyala.html b/examples/video/instream/ooyala/pb-ve-ooyala.html
index d9977f5e77..efa39ea99d 100644
--- a/examples/video/instream/ooyala/pb-ve-ooyala.html
+++ b/examples/video/instream/ooyala/pb-ve-ooyala.html
@@ -98,18 +98,18 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
-                playerSize: [640, 480],
-                context: 'instream'
+		context: 'instream',
+		playerSize: [640, 480],
+		mimes: ['video/mp4'],
+		protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+		playbackmethod: [2],
+		skip: 1
             }
         },
         bids: [{
             bidder: 'appnexus',
             params: {
-                placementId: iosDevice ? 13239390 : 13232361, // Add your own placement id here. Note, skippable video is not supported on iOS<br>
-                video: {
-                    skippable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: iosDevice ? 13239390 : 13232361 // Add your own placement id here. 
             }
         }]
     };
diff --git a/examples/video/instream/radiant/pb-ve-radiant.html b/examples/video/instream/radiant/pb-ve-radiant.html
index c1f9d7278f..30426eb6e2 100644
--- a/examples/video/instream/radiant/pb-ve-radiant.html
+++ b/examples/video/instream/radiant/pb-ve-radiant.html
@@ -85,18 +85,18 @@ <h4>Place this code in the page body.</h4>
 			code: 'video1',
 			mediaTypes: {
 				video: {
-					playerSize: [640, 480],
-					context: 'instream'
+				  context: 'instream',
+				  playerSize: [640, 480],
+				  mimes: ['video/mp4'],
+				  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+				  playbackmethod: [2],
+				  skip: 1
 				}
 			},
 			bids: [{
 				bidder: 'appnexus',
 				params: {
-					placementId: 13232361,
-					video: {
-						skippable: true,
-						playback_method: ['auto_play_sound_off']
-					}
+					placementId: 13232361
 				}
 			}]
 		};
@@ -226,18 +226,18 @@ <h4>Place this code in the page body.</h4>
 			  code: 'video1',
 			  mediaTypes: {
 			    video: {
-			      playerSize: [640, 480],
-			      context: 'instream'
+				context: 'instream',
+				playerSize: [640, 480],
+				mimes: ['video/mp4'],
+				protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+				playbackmethod: [2],
+				skip: 1
 			    }
 			  },
 			  bids: [{
 			    bidder: 'appnexus',
 			    params: {
-			      placementId: 13232361,
-			      video: {
-			        skippable: true,
-			        playback_method: ['auto_play_sound_off']
-			      }
+			      placementId: 13232361
 			    }
 			  }]
 			};
diff --git a/examples/video/instream/videojs/pb-ve-videojs.html b/examples/video/instream/videojs/pb-ve-videojs.html
index f90604804d..4a5f96e4ac 100644
--- a/examples/video/instream/videojs/pb-ve-videojs.html
+++ b/examples/video/instream/videojs/pb-ve-videojs.html
@@ -61,18 +61,18 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
+                context: 'instream',
                 playerSize: [640, 480],
-                context: 'instream'
+                mimes: ['video/mp4'],
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
             }
         },
         bids: [{
             bidder: 'appnexus',
             params: {
-                placementId: 13232361,
-                video: {
-                    skippable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: 13232361
             }
         }]
     };
diff --git a/examples/video/outstream/pb-ve-outstream-app.html b/examples/video/outstream/pb-ve-outstream-app.html
index 321bd7bcad..34524e8540 100644
--- a/examples/video/outstream/pb-ve-outstream-app.html
+++ b/examples/video/outstream/pb-ve-outstream-app.html
@@ -78,18 +78,18 @@ <h4>Place this code in the page body.</h4>
 		  code: videoId,
 		  mediaTypes: {
 		    video: {
-		      playerSize: [640, 480],
-		      context: 'outstream'
+		      context: 'outstream',
+                      playerSize: [640, 480],
+                      mimes: ['video/mp4'],
+                      protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                      playbackmethod: [2],
+                      skip: 1
 		    }
 		  },
 		  bids: [{
 		    bidder: 'appnexus',
 		    params: {
-		      placementId: 13232385,
-		      video: {
-		        skippable: true,
-		        playback_method: ['auto_play_sound_off']
-		      }
+		      placementId: 13232385
 		    }
 		  }]
 		}];
@@ -154,18 +154,18 @@ <h4>Place this code in the page body.</h4>
 		  code: 'video1',
 		  mediaTypes: {
 		    video: {
-		      playerSize: [640, 480],
-		      context: 'outstream'
+		      context: 'outstream',
+                      playerSize: [640, 480],
+                      mimes: ['video/mp4'],
+                      protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                      playbackmethod: [2],
+                      skip: 1
 		    }
 		  },
 		  bids: [{
 		    bidder: 'appnexus',
 		    params: {
-		      placementId: 13232385,
-		      video: {
-		        skippable: true,
-		        playback_method: ['auto_play_sound_off']
-		      }
+		      placementId: 13232385
 		    }
 		  }]
 		}];
diff --git a/examples/video/outstream/pb-ve-outstream-dfp.html b/examples/video/outstream/pb-ve-outstream-dfp.html
index 21208d218e..0a62332454 100644
--- a/examples/video/outstream/pb-ve-outstream-dfp.html
+++ b/examples/video/outstream/pb-ve-outstream-dfp.html
@@ -72,19 +72,19 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
+                context: 'outstream',
                 playerSize: [640, 480],
-                context: 'outstream'
+                mimes: ['video/mp4'],
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
             }
         },
         bids: [
             {
                 bidder: 'appnexus',
                 params: {
-                    placementId: 13232385,
-                    video: {
-                        skippable: true,
-                        playback_method: ['auto_play_sound_off']
-                    }
+                    placementId: 13232385
                 }
             }
         ]
@@ -148,4 +148,4 @@ <h4>Place this code in the page body.</h4>
 <!--video player code-->
 
 <script type="text/javascript" src="/assets/js/video/pb-code-highlight.js"></script>
-	
\ No newline at end of file
+	
diff --git a/examples/video/outstream/pb-ve-outstream-no-server.html b/examples/video/outstream/pb-ve-outstream-no-server.html
index 28f793f34a..bb78701f5e 100644
--- a/examples/video/outstream/pb-ve-outstream-no-server.html
+++ b/examples/video/outstream/pb-ve-outstream-no-server.html
@@ -61,18 +61,18 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
+                context: 'outstream',
                 playerSize: [640, 480],
-                context: 'outstream'
+                mimes: ['video/mp4'],
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
             }
         },
         bids: [{
             bidder: 'appnexus',
             params: {
-                placementId: 13232385,
-                video: {
-                    skippable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: 13232385
             }
         }]
     }];
diff --git a/examples/video/outstream/pb-ve-outstream-radiant.html b/examples/video/outstream/pb-ve-outstream-radiant.html
index a32442769a..60315adaa6 100644
--- a/examples/video/outstream/pb-ve-outstream-radiant.html
+++ b/examples/video/outstream/pb-ve-outstream-radiant.html
@@ -79,18 +79,18 @@ <h4>Place this code in the page body.</h4>
 		  code: videoId,
 		  mediaTypes: {
 		    video: {
-		      playerSize: [640, 480],
-		      context: 'outstream'
+		      context: 'outstream',
+                      playerSize: [640, 480],
+                      mimes: ['video/mp4'],
+                      protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                      playbackmethod: [2],
+                      skip: 1
 		    }
 		  },
 		  bids: [{
 		    bidder: 'appnexus',
 		    params: {
-		      placementId: 13232385,
-		      video: {
-		        skippable: true,
-		        playback_method: ['auto_play_sound_off']
-		      }
+		      placementId: 13232385
 		    }
 		  }]
 		}];
@@ -159,18 +159,18 @@ <h4>Place this code in the page body.</h4>
 		  code: videoId,
 		  mediaTypes: {
 		    video: {
-		      playerSize: [640, 480],
-		      context: 'outstream'
+		      context: 'outstream',
+                      playerSize: [640, 480],
+                      mimes: ['video/mp4'],
+                      protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                      playbackmethod: [2],
+                      skip: 1
 		    }
 		  },
 		  bids: [{
 		    bidder: 'appnexus',
 		    params: {
-		      placementId: 13232385,
-		      video: {
-		        skippable: true,
-		        playback_method: ['auto_play_sound_off']
-		      }
+		      placementId: 13232385
 		    }
 		  }]
 		}];
diff --git a/examples/video/pb-video-template.html b/examples/video/pb-video-template.html
index a5cf9ff8e2..1d1f9e5ef8 100644
--- a/examples/video/pb-video-template.html
+++ b/examples/video/pb-video-template.html
@@ -197,18 +197,18 @@ <h4>Place this code in the page header.</h4>
                 mediaTypes: {
                     video: {
                         playerSize: [640, 480],
-                        context: 'outstream'
+                        context: 'outstream',
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
                     }
                 },
                 bids: [
                     {
                         bidder: 'appnexus',
                         params: {
-                            placementId: 13232385,
-                            video: {
-                                skippable: true,
-                                playback_method: ['auto_play_sound_off']
-                            }
+                            placementId: 13232385
                         }
                     }
                 ]
diff --git a/examples/video/server/brid/pbs-ve-brid.html b/examples/video/server/brid/pbs-ve-brid.html
index 3f089c85a7..93b89d953b 100644
--- a/examples/video/server/brid/pbs-ve-brid.html
+++ b/examples/video/server/brid/pbs-ve-brid.html
@@ -70,21 +70,18 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
-                playerSize: [640, 480],
                 context: 'instream',
+                playerSize: [640, 480],
                 mimes: ['video/mp4'],
                 protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2]
+                playbackmethod: [2],
+                skip: 1
             }
         },
         bids: [{
             bidder: 'appnexus',
             params: {
-                placementId: 13232361, // Add your own placement id here<br>
-                video: {
-                    skippable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: 13232361 // Add your own placement id here<br>
             }
         }]
     };
diff --git a/examples/video/server/jwplayer/pbs-ve-jwplayer-hosted.html b/examples/video/server/jwplayer/pbs-ve-jwplayer-hosted.html
index 3020ae9bb0..62e4108e2e 100644
--- a/examples/video/server/jwplayer/pbs-ve-jwplayer-hosted.html
+++ b/examples/video/server/jwplayer/pbs-ve-jwplayer-hosted.html
@@ -72,21 +72,18 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
-                playerSize: [640, 480],
                 context: 'instream',
+                playerSize: [640, 480],
                 mimes: ['video/mp4'],
                 protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2]
+                playbackmethod: [2],
+                skip: 1
             }
         },
         bids: [{
             bidder: 'appnexus',
             params: {
-                placementId: 13232361, // Add your own placement id here<br>
-                video: {
-                    skippable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: 13232361  // Add your own placement id here<br>
             }
         }]
     };
diff --git a/examples/video/server/jwplayer/pbs-ve-jwplayer-platform.html b/examples/video/server/jwplayer/pbs-ve-jwplayer-platform.html
index 637be3738e..f5a15deb27 100644
--- a/examples/video/server/jwplayer/pbs-ve-jwplayer-platform.html
+++ b/examples/video/server/jwplayer/pbs-ve-jwplayer-platform.html
@@ -63,21 +63,18 @@ <h4>Place this code in the page header.</h4>
 	        code: 'video1',
 	        mediaTypes: {
 	            video: {
-	                playerSize: [640, 480],
-	                context: 'instream',
-	                mimes: ['video/mp4'],
-	                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-	                playbackmethod: [2]
+			context: 'instream',
+			playerSize: [640, 480],
+			mimes: ['video/mp4'],
+			protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			playbackmethod: [2],
+			skip: 1
 	            }
 	        },
 	        bids: [{
 	            bidder: 'appnexus',
 	            params: {
-	                placementId: 13232361, // Add your own placement id here.<br>
-	                video: {
-	                    skippable: true,
-	                    playback_method: ['auto_play_sound_off']
-	                }
+	                placementId: 13232361  // Add your own placement id here.<br>
 	            }
 	        }]
 	    };
diff --git a/examples/video/server/kaltura/pbs-ve-kaltura.html b/examples/video/server/kaltura/pbs-ve-kaltura.html
index ba6d4b6666..5bf385058e 100644
--- a/examples/video/server/kaltura/pbs-ve-kaltura.html
+++ b/examples/video/server/kaltura/pbs-ve-kaltura.html
@@ -68,21 +68,18 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
-                playerSize: [640, 480],
                 context: 'instream',
+                playerSize: [640, 480],
                 mimes: ['video/mp4'],
                 protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2]
+                playbackmethod: [2],
+                skip: 1
             }
         },
         bids: [{
             bidder: 'appnexus',
             params: {
-                placementId: 13232361, // Add your own placement id here.<br>
-                video: {
-                    skippable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: 13232361  // Add your own placement id here.<br>
             }
         }]
     };
diff --git a/examples/video/server/ooyala/pbs-ve-ooyala.html b/examples/video/server/ooyala/pbs-ve-ooyala.html
index 33ad48c4e8..6bbe7c407e 100644
--- a/examples/video/server/ooyala/pbs-ve-ooyala.html
+++ b/examples/video/server/ooyala/pbs-ve-ooyala.html
@@ -99,21 +99,18 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
-                playerSize: [640, 480],
                 context: 'instream',
+                playerSize: [640, 480],
                 mimes: ['video/mp4'],
                 protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-                playbackmethod: [2]
+                playbackmethod: [2],
+                skip: 1
             }
         },
         bids: [{
             bidder: 'appnexus',
             params: {
-                placementId: 13232361, // Add your own placement id here.<br>
-                video: {
-                    skippable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: 13232361  // Add your own placement id here.<br>
             }
         }]
     };
diff --git a/examples/video/server/radiant/pbs-ve-radiant.html b/examples/video/server/radiant/pbs-ve-radiant.html
index 1b8f4abe42..d64d43b0ec 100644
--- a/examples/video/server/radiant/pbs-ve-radiant.html
+++ b/examples/video/server/radiant/pbs-ve-radiant.html
@@ -84,21 +84,18 @@ <h4>Place this code in the page body.</h4>
   code: 'video1',
   mediaTypes: {
     video: {
-      playerSize: [640, 480],
-      context: 'instream',
-      mimes: ['video/mp4'],
-      protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-      playbackmethod: [2]
+	context: 'instream',
+	playerSize: [640, 480],
+	mimes: ['video/mp4'],
+	protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+	playbackmethod: [2],
+	skip: 1
     }
   },
   bids: [{
     bidder: 'appnexus',
     params: {
-      placementId: 13232361, // Add your own placement id here.
-      video: {
-        skippable: true,
-        playback_method: ['auto_play_sound_off']
-      }
+      placementId: 13232361  // Add your own placement id here.
     }
   }]
 };
@@ -236,21 +233,18 @@ <h4>Place this code in the page body.</h4>
 		code: 'video1',
 		mediaTypes: {
 			video: {
-				playerSize: [640, 480],
-				context: 'instream',
-				mimes: ['video/mp4'],
-				protocols: [1, 2, 3, 4, 5, 6, 7, 8],
-				playbackmethod: [2]
+			  context: 'instream',
+			  playerSize: [640, 480],
+			  mimes: ['video/mp4'],
+			  protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+			  playbackmethod: [2],
+			  skip: 1
 			}
 		},
 		bids: [{
 			bidder: 'appnexus',
 			params: {
-				placementId: 13232361, // Add your own placement id here.
-				video: {
-					skippable: true,
-					playback_method: ['auto_play_sound_off']
-				}
+				placementId: 13232361  // Add your own placement id here.
 			}
 		}]
 		};
@@ -262,7 +256,6 @@ <h4>Place this code in the page body.</h4>
 			cache: {
 				url: 'https://prebid.adnxs.com/pbc/v1/cache'
 			},
-			debug: true,
 			enableSendAllBids: true,
 			s2sConfig: {
 				endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction',
diff --git a/examples/video/server/videojs/pbs-ve-videojs.html b/examples/video/server/videojs/pbs-ve-videojs.html
index b1d0542319..cb3172c5eb 100644
--- a/examples/video/server/videojs/pbs-ve-videojs.html
+++ b/examples/video/server/videojs/pbs-ve-videojs.html
@@ -82,21 +82,18 @@ <h4>Place this code in the page header.</h4>
         code: 'video1',
         mediaTypes: {
             video: {
-                playerSize: [640, 480],
                 context: 'instream',
+                playerSize: [640, 480],
                 mimes: ['video/mp4'],
-                protocols: [1, 2, 3, 4, 5, 6],
-                playbackmethod: [2]
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
             }
         },
         bids: [{
             bidder: 'appnexus',
             params: {
-                placementId: 13232361, // Add your own placement id here.
-                video: {
-                    skippable: true,
-                    playback_method: ['auto_play_sound_off']
-                }
+                placementId: 13232361  // Add your own placement id here.
             }
         }]
     };
diff --git a/features/firstPartyData.md b/features/firstPartyData.md
index faf215e1da..cceb41322d 100644
--- a/features/firstPartyData.md
+++ b/features/firstPartyData.md
@@ -204,12 +204,12 @@ here to their page. For now, here's the beta table defining the segtax values:
 {: .table .table-bordered .table-striped }
 | Segtax ID | Taxonomy Type | Version | Description |
 |-----------+---------------+---------+-------------|
-| 1 | Content | 2.1 | [IAB - Content Taxonomy version 2.1](https://iabtechlab.com/wp-content/uploads/2020/07/IABTL-Content-Taxonomy-2.1-Final.xlsx) |
-| 2 | Content | 2.2 | [IAB - Content Taxonomy version 2.2](https://iabtechlab.com/wp-content/uploads/2020/12/IABTechLab_Content_Taxonomy_2-2_Final.xlsx) |
-| 3 | Audience | 1.0 | [IAB - Audience Taxonomy version 1.0](https://iabtechlab.com/wp-content/uploads/2020/07/IABTL-Audience-Taxonomy-1.1-Final.xlsx) |
+| 1 | Content | 1.x | IAB - Content Taxonomy version 1 |
+| 2 | Content | 2.x | [IAB - Content Taxonomy version 2](https://iabtechlab.com/wp-content/uploads/2020/12/IABTechLab_Content_Taxonomy_2-2_Final.xlsx) |
+| 4 | Audience | 1.1 | [IAB - Audience Taxonomy version 1.1](https://iabtechlab.com/wp-content/uploads/2020/07/IABTL-Audience-Taxonomy-1.1-Final.xlsx) |
 
 {: .alert.alert-info :}
-Publishers need to check with their SSPs and DSPs to confirm which
+The [IAB version of this table](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list--category-taxonomies-) is associated with ADCOM. Publishers should check with their SSPs and DSPs to confirm which
 segment taxonomies they support.
 
 ## How Bid Adapters Should Read First Party Data
diff --git a/identity/prebid-identity.md b/identity/prebid-identity.md
new file mode 100644
index 0000000000..d83d63b126
--- /dev/null
+++ b/identity/prebid-identity.md
@@ -0,0 +1,63 @@
+---
+layout: page_v2
+title: Prebid User Identity
+description: What is Prebid User Identity
+sidebarType: 9
+---
+
+# Prebid User Identity Overview
+
+Prebid's aim is to enable the protection of user privacy while still supporting publisher's ability to make revenue,
+keeping the Open Web healthy.
+
+To do this, Prebid offers a number of identity-related products that encourage awareness of privacy regulations such as GDPR, CCPA, and COPPA. The most important projects are:
+
+- [Prebid.js User Identity Module](/dev-docs/modules/userId.html). This module supports more than 20 different flavors of global IDs with different features that publishers can work with.
+- [SharedID](/identity/sharedid.html). This native hosted ID offering from Prebid is simple, free, robust, and privacy-minded.
+- **Coming soon:** [Unified ID 2.0](https://prebid.org/blog/prebid-org-to-serve-as-operator-of-unified-id-2-0/)
+
+## Prebid.js and Identity
+
+Publishers have several ways to include user identity as part of
+the header bidding auction:
+
+1. Install one or more [User ID modules](/dev-docs/modules/userId.html). These modules obtain
+the user's ID from the service and make it available to participating bidders. Publishers
+can define [permissions](/dev-docs/modules/userId.html#permissions) to control which bidders receive which IDs.
+2. Install the [ID Import Module](/dev-docs/modules/idLibrary.html). This module can be
+used to generate a map of identities present on the page.
+3. Pass [First Party Data](/features/firstPartyData.html), such as interests, to bidders for more relevant advertising.
+4. Include [User Syncing](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing) to allow bid adapters to establish IDs. Publishers have control over which bidders may sync, which syncing mechanisms are allowed, and when the syncing occurs. Syncing is subject to privacy controls such as GDPR, CCPA, and COPPA.
+
+## Prebid Server and Identity
+
+Prebid Server has user sync functionality, allowing server-side bidders to establish
+IDs given appropriate permission from the user for setting cookies.
+
+Prebid Server can receive extended ID arrays (eids) from Prebid.js and provide them to
+participating server-side bid adapters. It also supports permissioning to determine
+which eids can be sent to which bidders.
+
+User IDs are not sent to bid adapters in privacy scenarios such as COPPA and
+GDPR requests lacking appropriate consent. For more details see [Prebid Server Privacy](/prebid-server/features/pbs-privacy.html).
+
+## Prebid SDK and Identity
+
+In application environments, performance-based advertisers rely on a device’s IDFA to target,
+frequency cap, and determine attribution, similar to how cookies are used in desktop
+environments. However, IDFAs are persistent to the device. Prebid SDK will read the IDFA from
+the device when available. Additionally, Prebid SDK supports third party identity IDs.
+
+Prebid Server will strip the IDFA and/or third party identity IDs when enforcing regulations such as GDPR and CCPA.
+
+## AMP, Prebid, and Identity
+
+Prebid Server supports a user [cookie-sync](/prebid-server/developers/pbs-cookie-sync.html) functionality, including integration with
+a consent management platform. This allows server-side bidders to establish IDs given
+the appropriate cookie-setting permissions from the user.
+
+## Further Reading
+
+- [PBJS User ID module](/dev-docs/modules/userId.html)
+- [SharedID](/identity/sharedid.html)
+- [Prebid Server Privacy](/prebid-server/features/pbs-privacy.html)
diff --git a/identity/sharedid.md b/identity/sharedid.md
new file mode 100644
index 0000000000..be8913d04a
--- /dev/null
+++ b/identity/sharedid.md
@@ -0,0 +1,376 @@
+---
+layout: page_v2
+title: SharedID
+description: What is SharedID
+sidebarType: 9
+---
+
+# Prebid SharedID
+{: .no_toc}
+
+* TOC
+{:toc}
+
+{: .alert.alert-warning :}
+As of Prebid.js 5.0, PubCommon ID is no longer supported -- it's been merged into SharedId. Also, SharedId no longer syncs to sharedid.org like it did in Prebid.js 4.x.
+
+## What is it?
+
+SharedId is a convenient Prebid-owned first party identifier within the [Prebid UserId Module framework](/dev-docs/modules/userId.html).
+
+There are multiple ways to integrate SharedId on your site. See the table below for a breakout of options, and the rest of this document for detailed integration instructions.
+
+{: .table .table-bordered .table-striped }
+| Implementation | Description | Cookie Lifetime | Safari Cookie Lifetime | Technical Difficulty | Revenue Benefit |
+| --- | --- | --- | --- | --- | --- |
+| 3rd Party Cookie Only | No first party cookie solution. | Some Blocked | Blocked | None | Low |
+| User Id Submodule | Including User Id Module in your Prebid.js installation. | 365 days | 7 days | Basic | Good |
+| PubCID Script | Adding the legacy PubCID script; not maintained by Prebid.org. | 365 days | 7 days | High | Varies |
+| SharedId First Party Endpoint | Writing a first party cookie from your web server code. | 365 days | 365 days | Intermediate | Best |
+
+## How does the Prebid UserId Module implementation work?
+
+The SharedID ID system sets a user id cookie in the publisher’s domain.
+Since the cookie is set in the publisher's first party domain it does not fall in scope of browser restrictions on third party cookies. Safari has restrictions on first party cookies set via document.cookie. For this reason we recommend considering a server endpoint installation for maximum effect. See the "Alternate Implementations" section below.
+
+### Prebid.js 5.x
+
+The SharedId module reads and/or sets a random ID in
+the cookie name defined by the publisher when initializing
+the module:
+
+Example 1: client-side cookie setting
+```
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: 'sharedId', //"pubCommonId" as a name is supported for backwards compatibility,
+            storage: {
+                name: '_sharedID', // name of the 1st party cookie, _pubcid is supported for backwards compatibility
+                type: 'cookie',
+                expires: 30
+            }
+        }]
+    }
+});
+```
+
+Example 2: setting the cookie with a first party endpoint
+```
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: 'sharedId', //"pubCommonId" as a name is supported for backwards compatibility,
+            params: {
+                pixelUrl: "/wp-json/pubcid/v1/extend/" // this parameter identifies your server-side endpoint that will set a first party cookie'
+            }, 
+            storage: {
+                name: '_sharedID', // name of the 1st party cookie, _pubcid is supported for backwards compatibility
+                type: 'cookie',
+                expires: 30
+            }
+        }]
+    }
+});
+```
+
+The 'source' value transmitted through OpenRTB (user.ext.eids) is pubcid.org. For example:
+```
+user: {
+    ext: {
+        eids: {
+            "source":"pubcid.org",
+            "uids":[
+               {
+                  "id":"01EAJWWNEPN3CYMM5N8M5VXY22",
+                  "atype":1
+               }
+           ]
+        }
+    }
+}
+```
+
+{: .alert.alert-info :}
+The 'pubcid.org' EID source was adopted by more buyers than 'sharedid.org', so
+when PubCommon was folded into SharedID, we kept the more commonly recognized
+source value.
+
+### Before Prebid.js 5.0
+
+In addition to setting a first party cookie, SharedId in Prebid.js 4.x also sets a third party cookie where possible, syncing the first and third party cookies (subject to browser capability and user opt-out).
+
+SharedId in Prebid.js 4.x was transmitted through the header-bidding ecosystem on user.ext.eids with a different 'source':
+```
+user: {
+    ext: {
+        eids: {
+            "source":"sharedid.org",
+            "uids":[
+               {
+                  "id":"01EAJWWNEPN3CYMM5N8M5VXY22",
+                  "atype":1,
+                  "ext":{
+                     "third":"01EAJWWNEPN3CYMM5N8M5VXY22"
+                  }
+               }
+           ]
+        }
+    }
+}
+```
+
+### Detailed Walkthrough
+
+This diagram summarizes the workflow for SharedId:
+
+![SharedId](/assets/images/sharedid5.png){: .pb-lg-img :}
+
+1. The page loads the Prebid.js package, which includes the SharedId module.
+2. The page enables one or more user ID modules with pbjs.setConfig({usersync}) per the module documentation. The publisher can control which bidders are allowed to receive each type of ID.
+3. If permitted, the SharedId module retrieves and/or sets the designated first party cookie for this user.
+4. When a header bidding auction is run, the ID modules are invoked to add their IDs into the bid requests.
+5. Bid adapters send the additional IDs to the bidding endpoints, along with other privacy information such as GDPR consent, US Privacy consent, and the Global Privacy Control header.
+6. SharedId is used by the bidder for ad targeting, frequency capping, and/or sequential ads.
+7. Bids are sent to the publisher's ad server, where the best ad is chosen for rendering.
+
+{: .alert.alert-info :}
+In Prebid.js 4.x, when SharedId performed third-party syncing there
+was an extra step in the diagram between steps 3 and 4 where the module would connect to a server on sharedid.org. This step was
+removed in Prebid.js 5.0.
+
+### Privacy Discussion
+
+There are several privacy scenarios in which a user ID is not created or read:
+
+1. The User ID module suppresses all cookie reading and setting activity
+when the [GDPR Enforcement Module](/dev-docs/modules/gdprEnforcement.html) is in place and there's no consent for Purpose 1.
+2. The User ID module infrastructure supports a first-party opt-out, by setting the `_pbjs_id_optout` cookie or local storage to any value. No other cookies will be set if this one is set.
+3. The SharedId module will suppress the ID when the COPPA flag is set.
+
+For all other privacy-sensitive scenarios, it is encumbent upon bid adapters and endpoints
+to be aware of and enforce relevant regulations such as CCPA and Global Privacy Control.
+
+## Opt-Out
+
+Prebid recommends that publishers provide their users with information about how IDs are utilized, including targeting, frequency capping, and special ad features like sequential ads.
+
+If the publisher's legal staff has determined that a user opt-out is necessary beyond existing
+mechanisms like GDPR and CCPA, the use of first party cookies requires that opt-out flow be owned
+by the publisher.
+
+Publishers that decide to build a first-party opt-out workflow might follow a process like this:
+- User is presented with an option to turn off ad targeting
+- If the user opts out, the page can do one of two things:
+    - set a `_pbjs_id_optout` first party cookie
+    - avoid calling pbjs.setConfig to initialize the user ID modules
+
+## Alternative Implementations
+
+For those not using Prebid's header bidding solution, SharedId can deployed via in inline script reference or from a web server. 
+
+### SharedId Script
+
+For those interested in implementing SharedId without prebid.js. 
+1. Clone the [SharedId script repository](https://github.com/prebid/Shared-id-v2)
+2. Implement the pubcid.js script on the desired page by following the build instructions in the [readme.md](https://github.com/prebid/Shared-id-v2#readme)
+
+Prebid also recommends implementing a method where users can easily opt-out of targeted advertising. Please refer to the User Opt-Out section located at the bottom of this page.
+
+If there are no custom configurations, then just include the script and it'll use the default values.
+
+```
+<script type="text/javascript" src="//myserver.com/pubcid.min.js"></script>
+```
+
+If custom configurations are needed, define the pubcid_options object before inclusion of the script. Below is an example to switch from using local storage to cookie:
+
+```
+<script type="text/javascript">
+   window.pubcid_options = {type: 'cookie'};
+</script>
+<script type="text/javascript" src="//myserver.com/pubcid.min.js"></script>
+```
+
+#### Configuration
+
+Below are the available configuration options for the PubCID script.
+
+{: .table .table-bordered .table-striped }
+| Parameter Name | Type | Description |  | Example |
+| --- | --- | --- | --- | --- |
+| create | boolean | If true, then an id is created automatically by the script if it's missing. Default is true. If your server has a component that generates the id instead, then this should be set to false |  | `true` |
+| expInterval | decimal | Expiration interval in minutes. Default is 525600, or 1 year |  | `525600` |
+| extend | boolean | If true, the the expiration time is automatically extended whenever the script is executed even if the id exists already. Default is true. If false, then the id expires from the time it was initially created. | For publisher server support only.  If true, the publisher's server will create the (pubcid) cookie.  Default is true. | `true` |
+| pixelUrl | string (optional) | For publisher server support only. Where to call out to for a server cookie. |  | `/wp-json/pubcid/v1/extend/`
+| type | string | Type of storage. It's possible to specify one of the following: 'html5', 'cookie'. Default is 'html5' priority, aka local storage, and fall back to cookie if local storage is unavailable. | If true, the expiration time of the stored IDs will be refreshed during each page load. Default is false. | `cookie` |
+
+#### Example Configurations
+
+Always use cookies and create an ID that expires in 30 days after creation.
+
+```
+{ 
+    type: 'cookie',
+    extend: false,
+    expInterval: 43200
+}
+```
+
+Using a SharedId Endpoint implementation, create the cookie once, which will be allowed to expire before it is created again.
+
+```
+{ 
+    type: 'cookie',
+    pixelUrl: '/wp-json/pubcid/v1/extend/',
+    create: false,
+    extend: false
+}
+
+```
+
+### SharedId First Party Endpoint
+
+Add server-side support for SharedId to better handle the ever-increasing restrictions on cookies in modern web browsers by having the SharedId first party cookie written and extended by your web server.
+
+#### CMS
+
+PubCID/SharedId plugins are available for Wordpress and Drupal. Because the CMS can cache pages to improve scalability, it's impractical to set unique cookies during page generation. Instead these plugins require a dynamic endpoint that serves back a blank pixel along with a unique cookie value. The client side script  needs one additional parameter for this URL. Please consult the corresponding plugin documents for default values:
+
+1. Wordpress : Install directly from the [Wordpress admin page](https://wordpress.org/plugins/publisher-common-id/). Install from [GITHUB](https://github.com/prebid/sharedid-wordpress) 
+2. Drupal : Install from [Github](https://github.com/prebid/sharedid-drupal).
+
+#### Endpoint Implementations
+
+The Wordpress and Drupal plugins require that the host company integrate a new endpoint into their webserver that can receive request from the page and set a unique cookie.
+Below are some examples for how to implement this function in various languages or platforms. It is up to the site owner to integrate an appropriate script for their specific scenario.
+
+##### JAVA
+```JAVA
+public class PubCid {
+    private static final String pubcidCookieName = "_pubcid";
+    private static final int expireTime = (int) TimeUnit.DAYS.toSeconds(365); //store cookie for 1 year
+ 
+    /**
+     * Returns the pubcid cookie found in the user's list of cookies.
+     * Always update the expire time to another year so that the cookie persists.
+     *
+     * @param cookies User's list of cookies
+     * @return the pubcid cookie if found, null otherwise
+     */
+    public static Cookie getPubcidCookie(Cookie[] cookies) {
+ 
+        Cookie pubcidCookie = fetchPubcidCookie(cookies);
+        if (pubcidCookie != null)
+            pubcidCookie.setMaxAge(expireTime);
+ 
+        return pubcidCookie;
+    }
+ 
+    /**
+     * Simple function to test if the user has a pubcid cookie
+     *
+     * @param cookies User's list of cookies
+     * @return true if the cookie is found, false otherwise
+     */
+    public static boolean hasPubcidCookie(Cookie[] cookies) {
+        return fetchPubcidCookie(cookies) != null;
+    }
+ 
+    /**
+     * Local function to find the pubcid cookie within the user's list of cookie
+     *
+     * @param cookies User's list of cookies
+     * @return pubcid cookie if found, null otherwise
+     */
+    private static Cookie fetchPubcidCookie(Cookie[] cookies) {
+        if (cookies == null) return null;
+        return Arrays.stream(cookies)
+                .filter(e -> e.getName().equals(pubcidCookieName))
+                .findFirst()
+                .orElse(null);
+    }
+}
+```
+##### PHP
+```PHP
+$cookie_name = '_pubcid';
+$cookie_path = '/';
+$max_age = 365;
+ 
+$value = NULL;
+ 
+// See if the cookie exist already
+ 
+if (isset($_COOKIE[$cookie_name ]))
+    $value = $_COOKIE[$cookie_name];
+ 
+// Obtain site domain if defined
+if (defined(COOKIE_DOMAIN))
+    $cookie_domain = COOKIE_DOMAIN;
+else
+    $cookie_domain = "";
+ 
+// Update the cookie
+if (isset($value)) {
+    setcookie(
+        $cookie_name,
+        $value,
+        time() + $max_age * DAY_IN_SECONDS,
+        $cookie_path,
+        $cookie_domain
+    );
+}
+```
+##### Node.js
+```Node
+const express = require('express');
+const cookieParser = require('cookie-parser');
+const app = express();
+const port = 3000;
+ 
+app.use(cookieParser());
+ 
+app.get('/', function(req, res) {
+ 
+    // Check for existence of _pubcid cookie
+    let value = req.cookies['_pubcid'];
+ 
+    // If pubcid exists, then update its expiration time
+    if (value) {
+        res.cookie('_pubcid', value, {domain: '.example.com', path: '/', expires: new Date(Date.now() + 1000*60*60*24*365)});
+    }
+ 
+    res.render('index');
+});
+ 
+app.listen(port, ()=>console.log(`App listening on port ${port}`));
+```
+##### Apache
+```Apache
+# Add to httpd.conf
+# Requires mod_headers and mod_env
+ 
+# Capture _pubcid cookie value if available
+SetEnvIf Cookie "(^|;\ *)_pubcid=([^;\ ]+)" PUBCID_VALUE=$2
+SetEnvIf Cookie "(^|;\ *)_pubcid=([^;\ ]+)" HAVE_PUBCID=1
+ 
+# Add _pubcid cookie if it exists to the response with 1 year expiration time
+Header add Set-Cookie "_pubcid=%{PUBCID_VALUE}e;Domain=.example.com;Path=/;Max-Age=31536000" env=HAVE_PUBCID
+```
+##### Nginx
+```Nginx
+# Add to a location directive
+ 
+    location /example {
+        set $pubcid_value $cookie__pubcid;
+        if ($pubcid_value) {
+            add_header Set-Cookie "_pubcid=$pubcid_value;Domain=.example.com;Path=/;Max-Age=31536000";
+        }
+    }
+```
+
+## Related Topics
+
+- [Prebid Identity Overview](/identity/prebid-identity.html)
+- [Prebid.js User ID modules](/dev-docs/modules/userId.html)
diff --git a/overview/ga-analytics.md b/overview/ga-analytics.md
index 503ac5ca0f..004a08a5a9 100644
--- a/overview/ga-analytics.md
+++ b/overview/ga-analytics.md
@@ -24,7 +24,7 @@ It includes:
 
 - Bidder bid/win price analysis by geo, domain, with price range distribution.
 - Bid latency by bidder, geo, and domain.
-- Seamless integration with your Google Analytics account and scheduled reports delivered to your mailbox. 
+- Seamless integration with your Google Analytics account and scheduled reports delivered to your mailbox.
 
 <br />
 
@@ -32,15 +32,15 @@ It includes:
 
 The day starts from making sure the bidders are not generating less revenue:
 
-![Blocking Ad Calls 1]({{ site.baseurl }}/assets/images/blog/analytics/revenue-by-date.png)
+![Blocking Ad Calls 1]({{ site.baseurl }}/assets/images/overview/analytics/revenue-by-date.png)
 
 Something is not right here - total revenue from yesterday dropped quite a bit. This could be caused by certain bidders were down or experienced technical issues. Let's take a look at the bidder timeout rate:
 
-![Blocking Ad Calls 1]({{ site.baseurl }}/assets/images/blog/analytics/timeout-by-date.png)
+![Blocking Ad Calls 1]({{ site.baseurl }}/assets/images/overview/analytics/timeout-by-date.png)
 
 Bidder timeout seems okay. The problem might then be caused by bidders' lower bid rate:
 
-![Blocking Ad Calls 1]({{ site.baseurl }}/assets/images/blog/analytics/bidrate-by-date.png)
+![Blocking Ad Calls 1]({{ site.baseurl }}/assets/images/overview/analytics/bidrate-by-date.png)
 
 Here we go. Bidder 1 and 4 bid much less than usual. You may want to drill down even further - Prebid.js Analytics also provides:
 
@@ -59,7 +59,7 @@ To understand exactly how much time per bidder spent, the Analytics Platform all
 
 <br />
 
-![Blocking Ad Calls 1]({{ site.baseurl }}/assets/images/blog/analytics/loadtime-histogram.png)
+![Blocking Ad Calls 1]({{ site.baseurl }}/assets/images/overview/analytics/loadtime-histogram.png)
 
 You might derive:
 
@@ -72,7 +72,7 @@ Similar query for bidders' bid CPM:
 
 <br />
 
-![Blocking Ad Calls 1]({{ site.baseurl }}/assets/images/blog/analytics/cpm-histogram.png)
+![Blocking Ad Calls 1]({{ site.baseurl }}/assets/images/overview/analytics/cpm-histogram.png)
 
 > **Try out the product and explore the demo dashboard <a href="https://docs.google.com/spreadsheets/d/11czzvF5wczKoWGMrGgz0NFEOM7wsnAISbp_MpmGzogU/edit?usp=sharing" target="_blank">here</a>!** This will be the base of your dashboard!
 
@@ -91,5 +91,3 @@ Prebid.js has a seamless integration with Google Analytics and Google Spreadshee
 
 - [Analytics for Prebid]({{site.baseurl}}/overview/analytics.html) (Overview and list of analytics providers)
 - [Integrate with the Prebid Analytics API]({{site.baseurl}}/dev-docs/integrate-with-the-prebid-analytics-api.html) (For developers)
-
-
diff --git a/overview/how-many-bidders-for-header-bidding.md b/overview/how-many-bidders-for-header-bidding.md
index a006ab240f..1ce008e967 100644
--- a/overview/how-many-bidders-for-header-bidding.md
+++ b/overview/how-many-bidders-for-header-bidding.md
@@ -3,7 +3,7 @@ layout: page_v2
 title: Optimize header bidding setup
 head_title: Optimize header bidding setup
 
-description: An analysis of the optimal number of bidders to work with for header bidding, to optimize yield and user experience. 
+description: An analysis of the optimal number of bidders to work with for header bidding, to optimize yield and user experience.
 
 pid: 10
 
@@ -23,7 +23,7 @@ While helping publishers run header bidding, we hear the same questions asked ma
 * How many bidders should I work with?
 * How can I maximize revenue while maintaining a good user experience?
 
-We've all heard anecdotally a webpage should not have more than 10 bidders' bids, or the page should not wait for longer than 1 second before it sends the bids to the ad server. Are they true? 
+We've all heard anecdotally a webpage should not have more than 10 bidders' bids, or the page should not wait for longer than 1 second before it sends the bids to the ad server. Are they true?
 
 Luckily, the publishers using Prebid.js are curious about these questions too. We thus ran A/B tests and collected real data from pages running header bidding. We measured overall revenue & latency versus the number of bidders and how long the ad server waits for.
 
@@ -31,7 +31,7 @@ Luckily, the publishers using Prebid.js are curious about these questions too. W
 
 ### Q1: How is revenue affected by different factors?
 
-![Prebid Diagram Image](/assets/images/blog/experiments/revenue.png){: .pb-lg-img :}
+![Prebid Diagram Image](/assets/images/overview/experiments/revenue.png){: .pb-lg-img :}
 (_the above data is normalized to CPM = 1 for anonymity_)
 
 Revenue is mainly determined by:
@@ -53,17 +53,17 @@ Conclusions:
 
 ##### 3. Revenue actually drops if the page waits for too long
 
-* This could be caused by users leaving the page, when the ads took too long to load. 
+* This could be caused by users leaving the page, when the ads took too long to load.
 
 <br>
 
 ### Q2: How is page content load time affected?
 
-![Prebid Diagram Image](/assets/images/blog/experiments/page-load-time.png){: .pb-lg-img :}
+![Prebid Diagram Image](/assets/images/overview/experiments/page-load-time.png){: .pb-lg-img :}
 _(The above page has on average 130 HTTP requests, 1.5MB data transferred per refresh)_
 
 
-Page content load time is critical to measure user experience. Your page's content taking 200 millisecond to load delivers a MUCH BETTER experience than if it takes 2 seconds. 
+Page content load time is critical to measure user experience. Your page's content taking 200 millisecond to load delivers a MUCH BETTER experience than if it takes 2 seconds.
 
 In this test, we measured the front section's load time. We define the front section as what's visible to the user when they open the webpage. For example, when the above graph's Y-axis is at 100ms, it means that the front section took 100ms to load before a user can see it.
 
@@ -71,15 +71,15 @@ Conclusions:
 
 ##### Page content load time is NOT really affected by the number of bidders or by how long the page waits.
 
-* The front section continues to load between 60 to 120ms, unaffected by the given factors. 
-* **This is expected**, as Prebid.js sends out bids asynchronously and they **do NOT block** the page content from loading. Modern browsers also prioritize the page content load over asynchronous Javascript scripts. 
+* The front section continues to load between 60 to 120ms, unaffected by the given factors.
+* **This is expected**, as Prebid.js sends out bids asynchronously and they **do NOT block** the page content from loading. Modern browsers also prioritize the page content load over asynchronous Javascript scripts.
 
 
 <br>
 
 ### Q3: How about ad load time?
 
-![Prebid Diagram Image](/assets/images/blog/experiments/ad-load-time.png){: .pb-lg-img :}
+![Prebid Diagram Image](/assets/images/overview/experiments/ad-load-time.png){: .pb-lg-img :}
 _(The above page has on average 130 HTTP requests, 1.5MB data transferred per refresh)_
 
 Ad load time measures how long a user has to wait before he/she can see the ad. This is less important than the page's content load time. However, the initial blank space in the ad unit, or the page elements shifting around due to a late ad load, can both demage the user experience.
@@ -90,7 +90,7 @@ Conclusions:
 
 * This makes perfect sense. It's important to note that the ads load at around 1200ms even when the adserver waits for 2 seconds, because most of the bids come back within 1200ms and Prebid.js stops the adserver from waiting.
 
-##### 2. When your ad server waits for < a threshold (500ms in this case), working with more bids take longer for the ads to load. 
+##### 2. When your ad server waits for < a threshold (500ms in this case), working with more bids take longer for the ads to load.
 
 * This makes sense, because sending out more bid requests takes longer.
 
@@ -102,7 +102,7 @@ Conclusions:
 
 ### Recommendations:
 
-Every webpage is different. Every site's users are different. Different publishers will put different weights on revenue vs. user experience. Our main recommendation is: **Create the above 3 graphs.** They will help you understand how many bids you should work with and how long your page should wait for. 
+Every webpage is different. Every site's users are different. Different publishers will put different weights on revenue vs. user experience. Our main recommendation is: **Create the above 3 graphs.** They will help you understand how many bids you should work with and how long your page should wait for.
 
 Prebid.js is a good place to start for free : )
 
@@ -115,5 +115,3 @@ Note that the above data is collected by pages that run true header bidding auct
 * Ad server only waits for a limited amount of time, ignoring all bids that come after.
 
 If your page does not run a true header bidding auction, the above analysis may not apply.
-
-
diff --git a/overview/how-to-simplify-line-item-setup.md b/overview/how-to-simplify-line-item-setup.md
index 3e1a05061d..6d3d392ebf 100644
--- a/overview/how-to-simplify-line-item-setup.md
+++ b/overview/how-to-simplify-line-item-setup.md
@@ -43,16 +43,16 @@ In this section, we'll learn how to remove the creative size dimension for heade
 
 Let's first clarify what "different set of line items for different creative sizes" means. In this scenario, a line item's creative is only of one size. In Google Ad Manager, this looks like:
 
-![Header Bidding Normal Line Item Creative](/assets/images/blog/line-item-creative.png){: .pb-md-img :}
+![Header Bidding Normal Line Item Creative](/assets/images/overview/line-item-creative.png){: .pb-md-img :}
 
 
 Because a site would have many creative sizes, with this setup you need X number of line item sets for X number of creative sizes.
 
 There's a reason bidders recommend different set of line items for different creative sizes. If we simply attach all creative sizes to a line item, the line item wouldn't know which size of creative to choose. Consider this case:
 
-* Your line item has all creatives of different sizes attached. 
+* Your line item has all creatives of different sizes attached.
 * Your ad unit can accept both 300x250 and 300x600. A bidder bid $6.00 for the 300x600 size and has the highest price.
-* The $6.00 line item got picked by the line item. 
+* The $6.00 line item got picked by the line item.
 * The best your ad server can do is to RANDOMLY choose a creative. If the 300x250 one is chosen, the ad will be cut in half.
 
 #### How Prebid.js solves this problem:
@@ -60,10 +60,10 @@ There's a reason bidders recommend different set of line items for different cre
 Prebid.js can dynamically resize the returned creative to the right size. Here's the setup:
 
 * Submit a few creatives of size 1x1 and make them override the line items' sizes when you [attach creatives to the line item](/adops/step-by-step.html#step-3-attach-the-creative-to-the-line-item).
-* Your ad unit can accept both 300x250 and 300x600. A bidder bid $6.00 for the 300x600 size and has the highest price. Prebid.js passed the bid in, as well as a generated bid ID. 
-* The $6.00 line item got picked by the line item. 
+* Your ad unit can accept both 300x250 and 300x600. A bidder bid $6.00 for the 300x600 size and has the highest price. Prebid.js passed the bid in, as well as a generated bid ID.
+* The $6.00 line item got picked by the line item.
 * Your ad server randomly choose a 1x1 creative. However, because all creatives have the same content, it does not make a difference.
-* The creative content has the bid ID. Prebid.js reads this bid ID, which is mapped to size 300x600. 
+* The creative content has the bid ID. Prebid.js reads this bid ID, which is mapped to size 300x600.
 * Prebid.js resize the returned creative to size 300x600 and injects the bid's cretive payload.
 
 There you go!
@@ -77,7 +77,7 @@ There're a few reasons why previously you'd need different set of line items for
 
 1. Bidders did not design their implementation guide with other bidders in mind.
 2. Bidders all have different targeting parameters.
-3. You need to run reports to learn fill rates and CPM from different bidders. 
+3. You need to run reports to learn fill rates and CPM from different bidders.
 
 Assume we have 1 set of line items for ALL bidders. Consider the below key-value pairs came in: (AppNexus bid $1.60, Rubicon bid $1.20. Ad IDs are used for rendering the right creative):
 
@@ -98,7 +98,7 @@ Prebid.js only picks the highest price bid and sends its key-value pairs to the
 * `hb_adId`: 65432
 * `hb_bidder`: appnexus
 
-This simplifies the setup and the right creative (with adId 65432) will get displayed. 
+This simplifies the setup and the right creative (with adId 65432) will get displayed.
 
 #### How about reporting?
 
@@ -107,10 +107,8 @@ It's important to understand the fill rates and CPM from different bidders. Preb
 * For bidder X, at what CPM does it fill?
 * For bidder X, what's the fill rate out of all the winning header bidding bids?
 
-Note that because Prebid.js only sends in the highest price bid, Google Ad Manager does not see the rest of the lost bids. However, from working with publishers, we conclude that the rest of the bids do NOT matter that much. Let's say one bidder always fills at 1 penny and bids 100% of the time. Is that information helpful? Not really, only the winning bids count. We belive the above 2 queries well serve the reporting and analytics needs. 
+Note that because Prebid.js only sends in the highest price bid, Google Ad Manager does not see the rest of the lost bids. However, from working with publishers, we conclude that the rest of the bids do NOT matter that much. Let's say one bidder always fills at 1 penny and bids 100% of the time. Is that information helpful? Not really, only the winning bids count. We belive the above 2 queries well serve the reporting and analytics needs.
 
 ### Conclusion
 
 Enjoy the much more simplified line items, creatives, and targeting setup!
-
-
diff --git a/overview/intro.md b/overview/intro.md
index 914e35f5d9..23342c615b 100644
--- a/overview/intro.md
+++ b/overview/intro.md
@@ -31,7 +31,7 @@ Our flagship product, Prebid.js, is sometimes referred to as simply *Prebid*, bu
 
 ### What is Header Bidding?
 
-Header bidding is a response to a fragmented and inefficient process for digital ad display. It is an alternative to the "waterfall" method, in which impressions impressions are offered to one sales channel at a time, moving down an inflexible stack of sources.
+Header bidding is a response to a fragmented and inefficient process for digital ad display. It is an alternative to the "waterfall" method, in which impressions are offered to one sales channel at a time, moving down an inflexible stack of sources.
 With header bidding, the publisher creates a short delay in their ad serving to obtain bids from many SSPs and ad exchanges. In this way, publishers can receive high value bids on their inventory that may be unavailable through their primary ad server and exchange.
 The returned bids are then passed into the ad server so they can compete with direct demand and the primary ad server's exchange on a level playing field.
 
diff --git a/overview/what-is-post-bid.md b/overview/what-is-post-bid.md
index 276209bb36..0bbd22b652 100644
--- a/overview/what-is-post-bid.md
+++ b/overview/what-is-post-bid.md
@@ -21,7 +21,7 @@ they all compete in one single line item based on price.
 
 This diagram summarizes the post-bid scenario:
 
-![Add Creative to Line Item]({{ site.github.url }}/assets/images/blog/postbid-diagram.png){: .pb-lg-img :}
+![Add Creative to Line Item]({{ site.github.url }}/assets/images/overview/postbid-diagram.png){: .pb-lg-img :}
 
 Steps:
 
diff --git a/package.json b/package.json
index 27b2226477..320ee697a4 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
     "test": "echo \"Error: no test specified\" && exit 1",
     "dev": "npm run development",
     "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
-    "watch": "npm run development -- --watch",
+    "watch": "bundle exec jekyll serve",
     "prod": "npm run production",
     "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --nide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
   },
diff --git a/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md b/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md
index cd857e9ad4..01cce946bc 100755
--- a/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md
+++ b/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md
@@ -114,9 +114,9 @@ TargetingParams.setStoreUrl(storeUrl);
 ```
 
 
-### Open Measurment SDK (OMSDK)
+### Open Measurement SDK (OMSDK)
 
-OMSDK is designed to facilitate 3rd party viewability and verification measurement for ads served in mobile app enviroments. Prebid SDK will provide the signaling component to Bid Adapters, by way of Prebid Server, indicating the impression is elligible for OMSDK support. Prebid SDK does not currently integrate with OMSDK itself, instead it will rely on a publisher ad server to render viewability and verification measurement code.
+OMSDK is designed to facilitate 3rd party viewability and verification measurement for ads served in mobile app enviroments. Prebid SDK will provide the signaling component to Bid Adapters, by way of Prebid Server, indicating the impression is eligible for OMSDK support. Prebid SDK does not currently integrate with OMSDK itself, instead it will rely on a publisher ad server to render viewability and verification measurement code.
 
 There three components to signaling support for OMSDK:
 * Partner Name
diff --git a/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md b/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md
index 414d830d01..a118da3145 100644
--- a/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md
+++ b/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md
@@ -151,9 +151,9 @@ Targeting.shared.itunesID
 Targeting.shared.itunesID = itunesID
 ```
 
-### Open Measurment SDK (OMSDK)
+### Open Measurement SDK (OMSDK)
 
-OMSDK is designed to facilitate 3rd party viewability and verification measurement for ads served in mobile app enviroments. Prebid SDK will provide the signaling component to Bid Adapters, by way of Prebid Server, indicating the impression is elligible for OMSDK support. Prebid SDK does not currently integrate with OMSDK itself, instead it will rely on a publisher ad server to render viewability and verification measurement code.
+OMSDK is designed to facilitate 3rd party viewability and verification measurement for ads served in mobile app enviroments. Prebid SDK will provide the signaling component to Bid Adapters, by way of Prebid Server, indicating the impression is eligible for OMSDK support. Prebid SDK does not currently integrate with OMSDK itself, instead it will rely on a publisher ad server to render viewability and verification measurement code.
 
 There three components to signaling support for OMSDK:
 * Partner Name
diff --git a/prebid-mobile/pbm-api/ios/pbm-video-rewarded-adunit-ios.md b/prebid-mobile/pbm-api/ios/pbm-video-rewarded-adunit-ios.md
index d1be426cc1..2befade496 100755
--- a/prebid-mobile/pbm-api/ios/pbm-video-rewarded-adunit-ios.md
+++ b/prebid-mobile/pbm-api/ios/pbm-video-rewarded-adunit-ios.md
@@ -21,7 +21,7 @@ Create a new Video Rewarded Ad Unit associated with a Prebid Server configuratio
 
 
 
-# Paramaters
+# Parameters
 
 Parameters is a sub class of RewardedVideoAdUnit.Create new Parameters class to define the parameters of the video ad unit. Parameters contain the OpenRTB video attributes.
 
diff --git a/prebid-mobile/pbm-api/ios/pbm-videointerstitialadunit-ios.md b/prebid-mobile/pbm-api/ios/pbm-videointerstitialadunit-ios.md
index 385bac77d3..7d54ba038a 100755
--- a/prebid-mobile/pbm-api/ios/pbm-videointerstitialadunit-ios.md
+++ b/prebid-mobile/pbm-api/ios/pbm-videointerstitialadunit-ios.md
@@ -20,7 +20,7 @@ Video Insterstital is only supported with Google Ad Manager.
 `configId(String)`: Prebid Server configuration ID.
 
 
-# Paramaters
+# Parameters
 
 Parameters is a sub class of VideoInterstitialAdUnit.Create new Parameters class to define the parameters of the video ad unit. Parameters contain the OpenRTB video attributes.
 
diff --git a/prebid-mobile/pbm-api/ios/pbm-videooutstreamadunit-ios.md b/prebid-mobile/pbm-api/ios/pbm-videooutstreamadunit-ios.md
index f5379e6be3..93c063b712 100755
--- a/prebid-mobile/pbm-api/ios/pbm-videooutstreamadunit-ios.md
+++ b/prebid-mobile/pbm-api/ios/pbm-videooutstreamadunit-ios.md
@@ -61,7 +61,7 @@ OpenRTB Placement Type represented as an enumeration of values:
 * inFeed is transformed into OpenRTB value 4 to bid adapters
 
 
-### Paramaters
+### Parameters
 
 Parameters is a sub class of videoAdUnit. Create new Parameters class to define the parameters of the video ad unit. Parameters contain the OpenRTB video attributes.
 
diff --git a/prebid-server/developers/add-new-bidder-go.md b/prebid-server/developers/add-new-bidder-go.md
index 7cfc39e2f7..b710431d91 100644
--- a/prebid-server/developers/add-new-bidder-go.md
+++ b/prebid-server/developers/add-new-bidder-go.md
@@ -62,7 +62,7 @@ Please be attentive in reading and responding to emails and [GitHub issues](http
 
 Prebid Server bid adapters consist of several components: bidder info, bidder parameters, adapter code, user sync code, registration with the core framework, and default configuration values. This chapter will guide you though each component.
 
-Please refer to [existing bid adapters](https://github.com/prebid/prebid-server/tree/master/adapters) for working examples and practical guidance, but understand that our adapter interfaces and coding style evolve over time. Please prefer the examples in this document over differences you may find in  code.
+Please refer to [existing bid adapters](https://github.com/prebid/prebid-server/tree/master/adapters) for working examples and practical guidance, but understand that our adapter interfaces and coding style evolve over time. Please refer to the examples in this document over differences you may find in an existing bid adapter.
 
 Our project is written in the [Go programming language](https://golang.org/). We understand not everyone has prior experience writing Go code. Please try your best and we'll respectfully steer you in the right direction during the review process.
 
@@ -504,7 +504,12 @@ if request.Imp[i].W == nil && request.Imp[i].H == nil && len(request.Imp[i].Form
 </details>
 <p></p>
 
-The second argument, `requestInfo`, is for extra information and helper methods provided by the core framework. For now, this just includes `requestInfo.PbsEntryPoint` which is commonly used to determine if the request is for AMP or Long Form Video Ad Pods. This object will be expanded in the future to also include currency conversion and extension unmarshalling helper methods.
+The second argument, `requestInfo`, is for extra information and helper methods provided by the core framework. This includes:
+
+- `requestInfo.PbsEntryPoint` to access the entry point of the bid request, commonly used to determine if the request is for AMP or for a Long Form Video Ad Pod.
+- `requestInfo.GlobalPrivacyControlHeader` to read the value of the Sec-GPC Global Privacy Control (GPC) header of the bid request.
+- `requestInfo.ConvertCurrency` a method to perform currency conversions.
+
 
 The `MakeRequests` method is expected to return a slice (similar to a C# `List` or a Java `ArrayList`) of `adapters.RequestData` objects representing the HTTP calls to be sent to your bidding server and a slice of type `error` for any issues encountered creating them. If there are no HTTP calls or if there are no errors, please return `nil` for both return values. Neither slices may contain `nil` elements.
 
@@ -546,7 +551,49 @@ func (a *adapter) MakeRequests(request *openrtb.BidRequest, requestInfo *adapter
 
 If your bidding server supports multiple currencies, please be sure to pass through the `request.cur` field. If your bidding server only bids in a single currency, such as USD or EUR, that's fine. Prebid Server will convert your bid to the request currency if you include it in the bid response, otherwise we assume USD and conversion will not occur.
 
-Please ensure you forward the bid floor (`request.imp[].bidfloor`) and bid floor currency (`request.imp[].bidfloorcur`) values to your bidding server for enforcement. You'll soon have access to currency conversion helper methods if your endpoint only supports floors in a single currency.
+Please ensure you forward the bid floor (`request.imp[].bidfloor`) and bid floor currency (`request.imp[].bidfloorcur`) values to your bidding server for enforcement. You have access to the currency conversion helper method `ConvertCurrency` in case your endpoint only supports floors in a single currency.
+
+<details markdown="1">
+  <summary>Example: Currency conversion needed for bid floor values in impressions.</summary>
+
+```go
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapters.ExtraRequestInfo) (*adapters.RequestData, []error) {
+  
+  for _, imp := range request.Imp {
+
+    // Check if imp comes with bid floor amount defined in a foreign currency
+    if imp.BidFloor > 0 && imp.BidFloorCur != "" && strings.ToUpper(imp.BidFloorCur) != "USD" {
+
+      // Convert to US dollars
+      convertedValue, err := reqInfo.ConvertCurrency(imp.BidFloor, imp.BidFloorCur, "USD")
+      if err != nil {
+        return nil, []error{err}
+      }
+
+      // Update after conversion. All imp elements inside request.Imp are shallow copies
+      // therefore, their non-pointer values are not shared memory and are safe to modify
+      // without risking a data race condition
+      imp.BidFloorCur = "USD"
+      imp.BidFloor = convertedValue
+    }
+  }
+
+  requestJSON, err := json.Marshal(request)
+  if err != nil {
+    return nil, []error{err}
+  }
+
+  requestData := &adapters.RequestData{
+    Method:  "POST",
+    Uri:     a.endpoint,
+    Body:    requestJSON,
+  }
+  
+  return []*adapters.RequestData{requestData}, nil
+}
+```
+</details>
+<p></p>
 
 There are a several values of a bid that publishers expect to be populated. Some are defined by the OpenRTB 2.5 specification and some are defined by Prebid conventions.
 
@@ -557,6 +604,7 @@ There are a several values of a bid that publishers expect to be populated. Some
 | COPPA | OpenRTB | `request.regs.ext.us_privacy`<br/> The publisher is specifying the Children's Online Privacy Protection flag.
 | Currency | OpenRTB |`request.cur` <br/> The publisher is specifying the desired bid currency. The Prebid Server default is USD.
 | [Debug](https://github.com/prebid/prebid-server/issues/745) | Prebid | `request.ext.prebid.debug` <br/> The publisher is requesting verbose debugging information from Prebid Server.
+| [Request-Defined currency conversion rates](https://docs.prebid.org/prebid-server/features/pbs-currency.html) | Prebid | `request.ext.prebid.currency` <br/> The publisher decides to prioritize its own custom currency conversion rates over Prebid Server's currency conversion rates. If a currency rate is not found in `request.ext.prebid.currency`, Prebid Server's rates will be used unless `usepbsrates` is set to `false`. If missing, `usepbsrates` defaults to true.
 | [First Party Data (FPD)](https://docs.prebid.org/prebid-server/features/pbs-fpd.html)| Prebid | `request.imp[].ext.context.data.*`, `request.app.ext.data.*`, `request.site.ext.data.*`, `request.user.ext.data.*` <br/> The publisher may provide first party data (e.g. keywords).
 | GDPR | OpenRTB |  `request.regs.ext.gdpr`, `request.user.ext.consent` <br/> The publisher is specifying the European General Data Protection Regulation flag and TCF consent string.
 | Site or App | OpenRTB | `request.site`, `request.app` <br/> The publisher will provide either the site or app, but not both, representing the client's device. 
@@ -619,7 +667,7 @@ Either `.Bids[].BidVideo.PrimaryCategory` or `.Bids[].Bid.Cat` should be provide
 Prebid has historically struggled with sharing granular bid response data with publishers, analytics, and reporting systems. To address this, we've introduced a standard object model. We encourage adapters to provide as much information as possible in the bid response. 
 
 {: .alert.alert-danger :}
-Bid metadata will be *required* in Prebid.js 5.X+ release, specifically for AdvertiserDomains and MediaType. We recommend making sure your adapter sets these values or Prebid.js may throw out the bid.
+Bid metadata will be *required* in Prebid.js 5.X+ release, specifically for bid.ADomain and MediaType. We recommend making sure your adapter sets these values or Prebid.js may throw out the bid.
 
 {: .table .table-bordered .table-striped }
 | Path | Description
@@ -630,13 +678,12 @@ Bid metadata will be *required* in Prebid.js 5.X+ release, specifically for Adve
 | `.AgencyName` | Bidder-specific agency name.
 | `.AdvertiserID` | Bidder-specific advertiser id.
 | `.AdvertiserName` | Bidder-specific advertiser name.
-| `.AdvertiserDomains` | Advertiser domains for the landing page(s). Should match `.Bids[].Bid.ADomain`. 
 | `.BrandID` | Bidder-specific brand id for advertisers with multiple brands.
 | `.BrandName` | Bidder-specific brand name.
-| `.dchain` | Demand Chain Object. 
+| `.DChain` | Demand Chain Object. 
 | `.PrimaryCategoryID` | Primary IAB category id.
 | `.SecondaryCategoryIDs` | Secondary IAB category ids.
-| `.MediaType` | Either `banner`, `audio`, `video`, or `native`. Should match `.Bids[].BidType`.
+| `.MediaType` | Either `banner`, `audio`, `video`, or `native`. This is used in the scenario where a bidder responds with a mediatype different than the stated type. e.g. native when the impression is for a banner. One use case is to help publishers determine whether the creative should be wrapped in a safeframe.
 
 <p></p>
 
@@ -673,8 +720,7 @@ func buildMeta(bid *adapters.TypedBid) (json.RawMessage, error) {
       AgencyName:           "Some Agency Name",
       AdvertiserID:         3,
       AdvertiserName:       "Some Advertiser Name",
-      AdvertiserDomains:    bid.ADomain,
-      dchain:               bid.ext.dchain,      
+      DChain:               json.RawMessage(`{Some Demand Chain JSON}`),
       BrandID:              4,
       BrandName:            "Some Brand Name",
       PrimaryCategoryID:    "IAB-1",
@@ -883,7 +929,7 @@ This chapter will guide you through the creation of automated unit tests to cove
 
 ### Adapter Code Tests
 
-Bid requests and server responses can be quite verbose. To avoid large blobs of text embedded within test code, we've created a framework for bid adapters which use a JSON body and/or a url. If your bidding server uses another payload format, such as XML, you're on your own.
+Bid requests and server responses can be quite verbose. To avoid large blobs of text embedded within test code, we've created a framework for bid adapters which use a JSON body and/or a url to send a bid request. We require the use of our test framework as it includes checks to ensure no changes are made to shared memory.
 
 We strive for as much test coverage as possible, but recognize that some code paths are impractical to simulate and rarely occur. You do not need to test the error conditions for `json.Marshal` calls, for template parse errors within `MakeRequests` or `MakeBids`, or for `url.Parse` calls. Following this guidance usually results in a coverage rate of around 90% - 95%, although we don't enforce a specific threshold.
 
@@ -1004,19 +1050,6 @@ func TestEmptyConfig(t *testing.T) {
 }
 ```
 
-### Adapter Race Condition Tests
-
-You must define race condition tests for each media type supported by your bid adapter. We don't expect bid adapters to run concurrent code. Rather, these tests attempt to verify your bid adapter doesn't modify shared memory. We use Go's [race detector](https://golang.org/doc/articles/race_detector.html) which is a great line of defense, but it may produce false negatives. It will not produce false positives, so please investigate further if these tests ever fail.
-
-Create a file with the path `adapters/{bidder}/{bidder}test/params/race/{mediaType}.json` for each `banner`, `video`, `audio`, and `native` media type supported by your adapter. Include all required and optional bidder parameters defined by your JSON Schema.
-
-Here's an example file using the same example JSON Schema from other chapters:
-```json
-{
-  "placementId": "Some Placement"
-}
-```
-
 ### Bidder Parameter Tests
 
 The bidder parameter JSON Schema files are considered a form of code and must be tested. Create a file with the path `adapters/{bidder}/params_test.go` using the following template:
diff --git a/prebid-server/developers/add-new-bidder-java.md b/prebid-server/developers/add-new-bidder-java.md
index 692954b274..a40bebcad0 100644
--- a/prebid-server/developers/add-new-bidder-java.md
+++ b/prebid-server/developers/add-new-bidder-java.md
@@ -78,13 +78,7 @@ Create a file with the path `static/bidder-info/{bidder}.yaml` and begin with th
 ```yaml
 adapters:
   yourBidderCode:
-    enabled: false
     endpoint: http://possible.endpoint
-    pbs-enforces-gdpr: true
-    pbs-enforces-ccpa: true
-    modifying-vast-xml-allowed: true
-    deprecated-names:
-    aliases:
     meta-info:
       maintainer-email: maintainer@email.com
       app-media-types:
@@ -109,8 +103,9 @@ adapters:
 
 Modify this template for your bid adapter:
 - Change the maintainer email address to a group distribution list on your ad server's domain. A distribution list is preferred over an individual mailbox to allow for robustness, as roles and team members naturally change.
-- Change the `modifyingVastXmlAllowed` value to `true` if you'd like to opt-in for video impression tracking.
-- Change the `enabled` value to `true` if you'd like to make your bid adapter enabled.
+- Change the `modifying-vast-xml-allowed` value to `false` if you'd like to opt out of video impression tracking. It defaults to `true`.
+- Change the `pbs-enforces-gdpr` to `false` if you'd like to disable gdpr enforcement. Defaults to `true`.
+- Change the `pbs-enforces-ccpa` to `false` if you'd like to disable ccpa enforcement. Defaults to `true`.
 - Change the `vendor-id` value to id of your bidding server as registered with the [GDPR Global Vendor List (GVL)](https://iabeurope.eu/vendor-list-tcf-v2-0/). Leave this as `0` if you are not registered with IAB Europe.
 - Remove the `capabilities` (app/site) and `mediaTypes` (banner/video/audio/native) combinations which your adapter does not support.
 - Change the `cookie-family-name` to the name which will be used for storing your user sync id within the federated cookie. Please keep this the same as your bidder name.
@@ -124,6 +119,23 @@ The url of your user syncer can make use of the following privacy policy macros
 
 - Change the `usersync:type` value to `redirect` or `iframe` specific to your bidder.
 
+### Default bidder configuration
+
+Prebid Server has default configuration for common bidder properties, which can be overriden by bidders in their
+configurations.
+
+Default configuration:
+
+```yaml
+adapter-defaults:
+  enabled: false
+  pbs-enforces-gdpr: true
+  pbs-enforces-ccpa: true
+  deprecated-names:
+  aliases: {}
+  modifying-vast-xml-allowed: true
+```
+
 ### Create bidder alias
 If you want to add bidder that is an alias of existing bidder, you need just to update configuration of parent bidder:
 
@@ -131,12 +143,7 @@ Example of adding bidder alias:
 ```yaml
 adapters:
   yourBidderCode:
-    enabled: false
     endpoint: http://possible.endpoint
-    pbs-enforces-gdpr: true
-    pbs-enforces-ccpa: true
-    modifying-vast-xml-allowed: true
-    deprecated-names:
     aliases: 
       yourBidderAlias:
         endpoint: http://possible.alias/endpoint
@@ -563,7 +570,7 @@ Please review the entire [OpenRTB 2.5 Bid Response](https://www.iab.com/wp-conte
 | `.Bids[].Bid.Price` | Required | Net price CPM of the bid, not gross price. Publishers can correct for gross price bids by setting Bid Adjustments to account for fees. We recommend the most granular price a bidder can provide.
 | `.Bids[].Bid.W` | Optional | Width of the creative in pixels.
 | `.Bids[].Bid.H` | Optional | Height of the creative in pixels.
-| `.Bids[].Bid.Ext` | Optional | Embedded JSON containing Prebid metadata (see below) or custom information.
+| `.Bids[].Bid.Ext.Prebid.Meta` | Optional | Embedded JSON containing Prebid metadata (see below) or custom information.
 
 {: .alert.alert-info :}
 We recommend resolving creative OpenRTB macros in your adapter. Otherwise, AUCTION_PRICE will eventually get resolved by the [Prebid Universal Creative](https://github.com/prebid/prebid-universal-creative), but by then the bid price will be in the ad server currency and quantized by the price granularity.
@@ -584,7 +591,7 @@ Either `.Bids[].BidVideo.PrimaryCategory` or `.Bids[].Bid.Cat` should be provide
 Prebid has historically struggled with sharing granular bid response data with publishers, analytics, and reporting systems. To address this, we've introduced a standard object model. We encourage adapters to provide as much information as possible in the bid response.
 
 {: .alert.alert-danger :}
-Bid metadata will be *required* in Prebid.js 5.x+ release, specifically for AdvertiserDomains and MediaType. We recommend making sure your adapter sets these values or Prebid.js may throw out the bid.
+Bid metadata will be *required* in Prebid.js 5.X+ release, specifically for bid.ADomain and MediaType. We recommend making sure your adapter sets these values or Prebid.js may throw out the bid.
 
 {: .table .table-bordered .table-striped }
 | Path | Description |
@@ -595,13 +602,12 @@ Bid metadata will be *required* in Prebid.js 5.x+ release, specifically for Adve
 | `.AgencyName` | Bidder-specific agency name |
 | `.AdvertiserID` | Bidder-specific advertiser id |
 | `.AdvertiserName` | Bidder-specific advertiser name |
-| `.AdvertiserDomains` | Advertiser domains for the landing page(s). Should match `.Bids[].Bid.ADomain` |
 | `.BrandID` | Bidder-specific brand id for advertisers with multiple brands |
 | `.BrandName` | Bidder-specific brand name |
 | `.dchain` | Demand Chain Object
 | `.PrimaryCategoryID` | Primary IAB category id |
 | `.SecondaryCategoryIDs` | Secondary IAB category ids |
-| `.MediaType` | Either `banner`, `audio`, `video`, or `native`. Should match `.Bids[].BidType` |
+| `.MediaType` | Either `banner`, `audio`, `video`, or `native`. This is used in the scenario where a bidder responds with a mediatype different than the stated type. e.g. native when the impression is for a banner. One use case is to help publishers determine whether the creative should be wrapped in a safeframe. |
 
 <p></p>
 
diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md
index cf36b98875..c984822090 100644
--- a/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md
+++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md
@@ -6,10 +6,14 @@ title: Prebid Server | Endpoints | OpenRTB2 | AMP
 ---
 
 # Prebid Server | Endpoints | /openrtb2/amp
+{:.no_toc}
+
+* TOC
+{:toc}
 
 This document describes the behavior of the Prebid Server AMP endpoint in detail.
 For a more general reference, see the [Prebid AMP Implementation Guide
-]({{site.baseurl}}/dev-docs/show-prebid-ads-on-amp-pages.html).
+](/dev-docs/show-prebid-ads-on-amp-pages.html).
 
 ## GET /openrtb2/amp
 
@@ -19,24 +23,28 @@ For a more general reference, see the [Prebid AMP Implementation Guide
 | Param | Scope | Type | Description |
 | --- | --- | --- | --- |
 | tag_id | Required | `String` |  The `tag_id` ID must reference a [Stored BidRequest]({{site.baseurl}}/prebid-server/features/pbs-storedreqs.html). For a thorough description of bid request JSON, see the [/openrtb2/auction](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html) docs. |
-| w | recommended | `String` | Comes from the amp-ad.width attribute. The stored request may contain width already, but this parameter reflects what's actually in the page. It replaces imp.banner.format[0].w |
-| h | recommended | `String` | Comes from the amp-ad.height attribute. The stored request may contain height already, but this parameter reflects what's actually in the page. It replaces imp.banner.format[0].h |
+| w | recommended | `String` | Comes from the amp-ad.width attribute. The stored request may contain width already, but this parameter reflects what's actually in the page. It's used to help determine imp.banner.format[0].w. See [resolving sizes](#resolving-sizes). |
+| h | recommended | `String` | Comes from the amp-ad.height attribute. The stored request may contain height already, but this parameter reflects what's actually in the page. It's used to help determine imp.banner.format[0].h. See [resolving sizes](#resolving-sizes). |
 | ms | optional | `String` | Comes from the amp-ad.data-multi-size attribute. e.g. "970x90, 728x90". Sizes are parsed and added to imp.banner.format |
-| oh | optional | `String` | Comes from the amp-ad.data-override-height attribute. See below for details on size calculation. |
-| ow | optional | `String` | Comes from the amp-ad.data-override-width attribute. See below for details on size calculation. |
+| oh | optional | `String` | Comes from the amp-ad.data-override-height attribute. See [resolving sizes](#resolving-sizes). |
+| ow | optional | `String` | Comes from the amp-ad.data-override-width attribute. See [resolving sizes](#resolving-sizes). |
 | curl | optional | `String` | Added to OpenRTB request as site.page |
 | slot | optional | `String` | Added to OpenRTB request as imp[0].tagid |
 | timeout | optional | `String` | Added to OpenRTB request as tmax |
-| targeting | optional | `String` | First Party Data (PBS-Java only) |
+| targeting | optional | `String` | First Party Data |
 | gdpr_consent | optional | `String` | Consent string passed from CMP. Note this is used for both GDPR and CCPA. |
+| consent_type | optional | `String` | If "1", request is TCFv1 and GDPR fields are ignored. If "2", the 'gdpr_consent' field is interpreted as TCFv2. If "3", the 'gdpr_consent' field is interpreted as us_privacy. |
+| gdpr_applies | optional | `String` | Takes the values "true", "false" or empty. This is used as the value of regs.ext.gdpr. If "true", regs.ext.gdpr:1, if "false", regs.ext.gdpr:0. |
+| addtl_consent | optional | `String` | GAM "additional consent". If present, this value is copied to user.ext.ConsentedProvidersSettings.consented_providers |
 | account | optional | `String` | Can be used to pass the Prebid-Server specific account ID. This is useful if `tag_id` parameters aren't unique across accounts. |
-| debug | optional | `integer` | If 1, returns additional debug info. |
+| debug | optional | `integer` | If 1, sets ext.prebid.debug to true to obtain additional debug info. |
 
 To be compatible with AMP, this endpoint behaves different from normal `/openrtb2/auction` requests.
 
-1. The Stored `request.imp` data must have exactly one element.
-2. `request.imp[0].secure` will be always be set to `1`, because AMP requires all content to be `https`.
-3. AMP query params will overwrite parts of your Stored Request. For details, see the [Query Parameters](#query_params) section.
+1. The 'tag_id' parameter points to a stored request.
+2. The stored request must have exactly one `imp` element.
+3. The request `imp[0].secure` will be always be set to `1`, because AMP requires all content to be `https`.
+4. AMP query params will overwrite parts of your Stored Request. See the table above.
 
 ### Request
 
@@ -63,20 +71,22 @@ An example Stored Request is given below:
             }
         }
     },
-    "imp": [
-        {
-            "id": "some-impression-id",
-            "banner": {}, // The sizes are defined by your AMP tag query params settings
-            "ext": {
-                "appnexus": {
+    "imp": [{
+      "id": "some-impression-id",
+      "banner": {}, // The sizes are defined by your AMP tag query params settings
+      "ext": {
+        "prebid": {
+            "bidder": {
+                "bidderA": {
                     // Insert parameters here
                 },
-                "rubicon": {
+                "bidderB": {
                     // Insert parameters here
                 }
             }
-        }
-    ]
+         }
+      }
+    }]
 }
 ```
 
@@ -90,77 +100,38 @@ Note that other ext.prebid extensions can be specified in the stored request suc
 
 (Currently only supported in PBS-Java)
 
-You can send first party data into an AMP request by encoding a JSON
-targeting block like this:
+The nature of AMP is that user-level FPD is difficult or impossible. All of the pages are cached on a CDN and page javascript that can modify RTC calls is severely limited.
 
-```
-GET /openrtb2/amp?tag_id=7470-Eater_AMP_ROS_ATF&w=300&h=250&ow=&oh=&ms=&slot=%2F172968584%2Feater%2Fgoogle%2Famp_med_rec_02&targeting=%7B%22site%22%3A%7B%22keywords%22%3A%22article%2C%20las%20vegas%22%2C%22cat%22%3A%7B%22blah%22%3A%221%22%7D%2C%22other-attribute%22%3A%22other-value%22%2C%22ext%22%3A%7B%22data%22%3A%7B%22entry_group%22%3A%5B%22front-page%22%2C%22featured-stories%22%5D%2C%22page_type%22%3A%22AMP%22%7D%7D%7D%2C%22user%22%3A%7B%22gender%22%3A%22m%22%7D%2C%22bidders%22%3A%5B%22rubicon%22%2C%22appnexus%22%5D%2C%22keywords%22%3A%22las%20vegas%20hospitality%20employees%22%2C%22foo%22%3A%7B%22bar%22%3A%22baz%22%7D%7D...
-```
+Contextual First Party Data must be defined in the stored request entries.
 
-Prebid Server will expand the targeting value and merge the data into
-the resulting OpenRTB JSON for the appropriate bidders.
+The only field that PBS supports in the AMP call that can be considered FPD is the 'targeting' block. These are key-value pairs that are sent to the ad server. They are also copied to the ORTB JSON in imp[].ext.data.
 
-For example, if this AMP targeting is provided:
+For example, if the AMP JSON targeting provided is:
 ```
-{
-    "site": {
-      "keywords": "article, las vegas", // (1)
-      "cat": { "blah": "1" }, // invalid data type, will be dropped
-      "other-attribute": "other-value", // not openrtb2, remove
-      "ext": {
-        "data": {
-          "entry_group": ["front-page","featured-stories"], // (4)
-          "page_type": "AMP" // (5)
-        } 
-     }
-    },
-    "user": {
-      "gender": "m", // (2)
-    },
-    "bidders": ["rubicon","appnexus"], // (3)
-    "keywords": "las vegas hospitality employees", // (6)
-    "foo": { // (7)
-      "bar": "baz"
-    }
-}
+  <amp-ad width="300" height="50"
+    type="doubleclick"
+    data-slot="/1111/amp_test"
+    rtc-config='{"vendors": {"prebidrubicon": {"REQUEST_ID": "1001-my-test"}}}'
+    json='{ "targeting": {"attr1": "val1", "attr2": "val2"}}' >
+  </amp-ad>
+```
+The AMP URL would be something like this:
 ```
-The numbered elements from the raw targeting data above are merged into the resulting OpenRTB like this:
+GET /openrtb2/amp?tag_id=1001-my-test&w=300&h=250&ow=&oh=&ms=&slot=%2F1111%2Famp_test&targeting=%7B%22attr1%22%3A%22val1%22%2C%22attr2%22%3A%22val2%22%7D&...
+```
+And the resulting OpenRTB would merge these targeting values as FPD on imp.ext.data:
 ```
 {
-  "imp": [...],
-  "site": {
-    "publisher": { … },
-    "keywords": "article, las vegas" // (1)
-    "ext":{
-      "data": {
-        "entry_group": ["front-page","featured-stories"], // (4)
-        "page_type": "AMP" // (5)
-      }
-    }
-  },
-  "user": {
-    "gender": "m" // (2)
-  },
-  "ext": {
-    "prebid": {
-      "data": {
-        "bidders": ["rubicon",appnexus"], // (3)
-      }
-    }
-  },
-  "imp": [
+  "imp": [{
     ...
     "ext": {
-       "context": {
-         "data": {
-           "keywords": "las vegas hospitality employees", // (6)
-           "foo": { // (7)
-             "bar": "baz"
-           }
-         }
-       }
+      "data": {
+        "attr1": "val1",
+        "attr2": "val2"
+      }
     }
-  ]
+  }],
+  ...
 }
 ```
 
@@ -228,41 +199,7 @@ The following errors can occur when loading a stored OpenRTB request for an inco
 |  Checking stored request for match against tag_id. | 999  | No AMP config found for tag_id `%s`.  | Error is returned.  |
 |  Checking if imp exists. | 999  | Data for tag_id=`'%s'` does not define the required imp array.  | Error is returned.  |
 |  Checking if imp count is greater than one. | 999  | Data for tag_id `'%s'` includes `%d` imp elements. Only one is allowed.  | Error is returned.  |
-|  Checking if request.app exists. | 999  | `request.app` must not exist in AMP stored requests.  | Error is returned.  |
-
-
-<a name="query_params"></a>
-### Query Parameter Details
-
-   - A configuration option `amp_timeout_adjustment_ms` may be set to account for estimated latency so that Prebid Server can handle timeouts from adapters and respond to the AMP RTC request before it times out.
-
-Ensure that the amp-ad component was imported in the header.
-
-```html
-<script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.js"></script>
- ```
-
-This script provides code libraries that will convert the `<amp-ad>` properties to the endpoint query parameters. In the most basic usage pass `width` and `height` as well as `type` and a `rtc-config`.  The `type` value is the ad network you will be using. The `rtc-config` is used to pass JSON configuration to the Prebid Server, which handles the communication with [AMP RTC](https://medium.com/ampfuel/better-than-header-bidding-amp-rtc-fc54e80f3999). Vendors is an object that defines any vendors that will be receiving the RTC callout. In this example, the required parameter `tag_id` will receive the `PLACEMENT_ID` (or `REQUEST_ID`) value.
-
-```html
-<amp-ad  
-    width="300"
-    height="250"
-    rtc-config='{"vendors": {"prebidappnexus": {"PLACEMENT_ID": "ef8299d0-cc32-46cf-abcd-41cebe8b4b85"}}, "timeoutMillis": 500}'
-</amp-ad>
-```
-Here's a simplified URL:
-
-```
-/openrtb2/amp?tag_id='ef8299d0-cc32-46cf-abcd-41cebe8b4b85'&w=300&h=250&timeout=500
-```
-
-Some endpoint parameters will override parts of the Stored Request.
-
-1. `ow`, `oh`, `w`, `h`, and/or `ms` will be used to set `request.imp[0].banner.format` if `request.imp[0].banner` is present.
-2. `curl` will be used to set `request.site.page`
-3. `timeout` will generally be used to set `request.tmax`. However, the Prebid Server host can [configure](https://github.com/prebid/prebid-server/blob/master/docs/developers/configuration.md) their deploy to reduce this timeout for technical reasons.
-4. `debug` will be used to set `request.test`, causing the `response.debug` to have extra debugging info in it.
+|  Checking if app exists. | 999  | The `app` object must not exist in AMP stored requests.  | Error is returned.  |
 
 ### Resolving Sizes
 
@@ -271,15 +208,23 @@ track the logic used by `doubleclick` when resolving sizes used to fetch ads fro
 
 Specifically:
 
-1. If `ow` and `oh` exist, `request.imp[0].banner.format` will be a single element with `w: ow` and `h: oh`
-2. If `ow` and `h` exist, `request.imp[0].banner.format` will be a single element with `w: ow` and `h: h`
-3. If `oh` and `w` exist, `request.imp[0].banner.format` will be a single element with `w: w` and `h: oh`
-4. If `ms` exists, `request.imp[0].banner.format` will contain an element for every size it uses.
-5. If `w` and `h` exist, `request.imp[0].banner.format` will be a single element with `w: w` and `h: h`
-6. If `w` _or_ `h` exist, it will be used to override _one_ of the dimensions inside each element of `request.imp[0].banner.format`
-7. If none of these exist then the Stored Request values for `request.imp[0].banner.format` will be used without modification.
+1. If `ow` and `oh` exist, `imp[0].banner.format` will be a single element with `w: ow` and `h: oh`
+2. If `ow` and `h` exist, `imp[0].banner.format` will be a single element with `w: ow` and `h: h`
+3. If `oh` and `w` exist, `imp[0].banner.format` will be a single element with `w: w` and `h: oh`
+4. If `ms` exists, `imp[0].banner.format` will contain an element for every size it uses.
+5. If `w` and `h` exist, `imp[0].banner.format` will be a single element with `w: w` and `h: h`
+6. If `w` _or_ `h` exist, it will be used to override _one_ of the dimensions inside each element of `imp[0].banner.format`
+7. If none of these exist then the Stored Request values for `imp[0].banner.format` will be used without modification.
+
+## Configuration Options
+
+- settings.generate-storedrequest-bidrequest-id: replace the stored request `id` with a UUID (PBS-Java only)
+- amp.default-timeout-ms: default operation timeout for AMP requests
+- amp.timeout-adjustment-ms: reduces timeout value passed in AMP request. Can be used to account for estimated latency so that Prebid Server can respond to the AMP RTC request before it times out.
+- amp.max-timeout-ms: maximum operation timeout for AMP requests
 
 ## Further Reading
 - [Prebid and AMP](/formats/amp.html)
 - [Prebid Server AMP Use Case Overview](/prebid-server/use-cases/pbs-amp.html)
 - [Prebid Server First Party Data](/prebid-server/features/pbs-fpd.html)
+- [Stored Requests](/prebid-server/features/pbs-storedreqs.html)
diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md
index 5f40fc3242..079e38ee65 100644
--- a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md
+++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md
@@ -239,6 +239,24 @@ Targeting refers to strings which are sent to the adserver to
 `request.ext.prebid.targeting` is an optional property which causes Prebid Server
 to set these params on the response at `response.seatbid[i].bid[j].ext.prebid.targeting`.
 
+{: .table .table-bordered .table-striped }
+| Attribute | Required? | Description | Example | Type |
+| --- | --- | --- | --- | --- |
+| pricegranularity | no | Defines how PBS quantizes bid prices into buckets | (see below) | object |
+| pricegranularity.precision | no | How many decimal places are there in price buckets | Defaults to 2 | integer |
+| pricegranularity.ranges | no | Non-overlapping price bucket definitions  | (see below) | array of objects |
+| pricegranularity.ranges.max | no | Top end of this range of price buckets. The bottom end is 0 or the max of the previous bucket. Note: in order to prevent ranges with gaps, there's no 'min' attribute. | 5.55 | float |
+| pricegranularity.ranges.increment | no | Size of the buckets in this range. | 1.50 | float |
+| mediatypepricegranularity | no | Defines how PBS quantizes bid prices into buckets, allowing for different ranges by media type. | (see below) | object |
+| mediatypepricegranularity.banner | no | Defines how PBS quantizes bid prices into buckets for banners. | (see below) | object |
+| mediatypepricegranularity.video | no | Defines how PBS quantizes bid prices into buckets for video. | (see below) | object |
+| mediatypepricegranularity.TYPE.precision | no | How many decimal places are there in price buckets. | Defaults to 2 | integer |
+| mediatypepricegranularity.TYPE.ranges | no | Same as pricegranularity.ranges | (see below) | array of objects |
+| includewinners | no | Whether to include targeting for the winning bids in response.seatbid[].bid[]. ext.prebid.targeting. Defaults to false. | true | boolean |
+| includebidderkeys | no | Whether to include targeting for the best bid from each bidder in response.seatbid[].bid[]. ext.prebid.targeting. Defaults to false. | true | boolean |
+| includeformat | no | Whether to include the "hb_format" targeting key. Defaults to false. | false | boolean |
+| preferdeals | no | If targeting is returned and this is true, PBS will choose the highest value deal before choosing the highest value non-deal. Defaults to false. | true | boolean |
+
 **Request format** (optional param `request.ext.prebid.targeting`)
 
 ```
@@ -253,9 +271,10 @@ to set these params on the response at `response.seatbid[i].bid[j].ext.prebid.ta
             "increment": 0.10 // This is equivalent to the deprecated "pricegranularity": "medium"
           }]
         },
-        "includewinners": false, // Optional param defaulting to true
-        "includebidderkeys": false // Optional param defaulting to true
-        "includeformat": false // Optional param defaulting to false
+        "includewinners": true,     // Optional param defaulting to false
+        "includebidderkeys": false, // Optional param defaulting to false
+        "includeformat": false,     // Optional param defaulting to false
+        "preferdeals": true         // Optional param defaulting to false
       }
     }
   }
@@ -265,7 +284,7 @@ The list of price granularity ranges must be given in order of increasing `max`
 
 For backwards compatibility the following strings will also be allowed as price granularity definitions. There is no guarantee that these will be honored in the future. "One of ['low', 'med', 'high', 'auto', 'dense']" See [price granularity definitions](/prebid-mobile/adops-price-granularity.html)
 
-One of "includewinners" or "includebidderkeys" must be true (both default to true if unset). If both were false, then no targeting keys would be set, which is better configured by omitting targeting altogether.
+One of "includewinners" or "includebidderkeys" must be true (both default to false if unset). If both are false, then no targeting keys will be set, which is better configured by omitting targeting altogether.
 
 The parameter "includeformat" indicates the type of the bid (banner, video, etc) for multiformat requests. It will add the key `hb_format` and/or `hb_format_{bidderName}` as per "includewinners" and "includebidderkeys" above.
 
@@ -593,7 +612,7 @@ Prebid Server adapters can support the [Prebid.js User ID modules](/dev-docs/mod
                 }]
             },
             {
-                "source": "pubcommon",
+                "source": "pubcid.org",
                 "id":"11111111"
             }
             ]
@@ -639,7 +658,7 @@ client can declare a given adunit as eligible for rewards by declaring `imp.ext.
 
 The OpenRTB `test` flag has a special meaning that bidders may react to: they may not perform a normal auction, or may not pay for test requests.
 
-You can turn on the extra Prebid Server debug log without the formal `test` behavior by instead setting `ext.prebid.debug:1`.
+You can turn on the extra Prebid Server debug log without the formal `test` behavior by instead setting `ext.prebid.debug: true`.
 
 ##### Stored Responses (PBS-Java only)
 
@@ -783,7 +802,7 @@ It specifies where in the OpenRTB request non-standard attributes should be pass
          "keywords": "",
          "search": "",
          "ext": {
-             data: { GLOBAL CONTEXT DATA } // only seen by bidders named in ext.prebid.data.bidders[]
+             data: { GLOBAL SITE DATA } // only seen by bidders named in ext.prebid.data.bidders[]
          }
     },
     "user": {
@@ -796,25 +815,41 @@ It specifies where in the OpenRTB request non-standard attributes should be pass
         }
     },
     "imp": [
+        ...
         "ext": {
-            "context": {
-                "keywords": "",
-                "search": "",
-                "data": { ADUNIT SPECFIC CONTEXT DATA }  // can be seen by all bidders
+            "data": {
+                ADUNIT SPECFIC CONTEXT DATA  // can be seen by all bidders
             }
          }
     ]
 ```
 
-Prebid Server enforces the data permissioning. So before passing the values to the bidder adapters, the PBS core will:
+Bidder-specific data can be defined with ext.prebid.bidderconfig:
+```
+ext: {
+  prebid: {
+    bidderconfig:
+      bidders: ["bidderA", "bidderB"],
+      config: [
+	ortb2: {
+	  site: { ... },
+          user: { ... }
+	}
+      ]
+    }
+  }
+}
+```
+
+Prebid Server enforces data permissioning. So before passing values to the bidder adapters, the PBS core will:
 
-1. check for ext.prebid.data.bidders
-1. if it exists, store it locally, but remove it from the OpenRTB before being sent to the adapters
+1. Check for ext.prebid.bidderconfig
+    1. If it exists, merge config.ortb2 into the bidder-specific request
 1. As the OpenRTB request is being sent to each adapter:
-    1. if ext.prebid.data.bidders exists in the original request, and this bidder is on the list then copy site.ext.data, app.ext.data, and user.ext.data to their bidder request -- otherwise don't copy those blocks
+    1. If ext.prebid.data.bidders exists in the original request and this bidder is on the list, then copy site.content.data, site.ext.data, app.ext.data, user.data, and user.ext.data to the bidder request -- otherwise don't copy those blocks. Remove ext.prebid.data.bidders from the bidder-specific request
     1. copy other objects as normal
 
-Each adapter must be coded to read the values from these locations and pass it to their endpoints appropriately.
+Each adapter must be coded to read the values from the ortb and pass it to their endpoints appropriately.
 
 ##### Custom Targeting (PBS-Java only)
 
@@ -875,6 +910,27 @@ In order to pull AMP parameters out into targeting, Prebid Server places AMP que
     }
 ```
 
+##### EID Permissions (PBS-Go only)
+
+This feature allows publishers to specify ext.prebid.eidpermissions, defining which extended ID
+in user.ext.eids is allowed to be passed to which bid adapter. For example:
+
+```
+{
+    ext: {
+        prebid: {
+            data: {
+                eidpermissions: [   // prebid server will use this to filter user.ext.eids
+                   {"source": "sharedid.org", "bidders": ["*"]},  // * is the default
+                   {"source": "neustar.biz", "bidders": ["bidderB"]},
+                   {"source": "id5-sync.com", "bidders": ["bidderA","bidderC"]}
+                ]
+            }
+        }
+    }
+}
+```
+
 ##### MultiBid (PBS-Java only)
 
 Allows a single bidder to bid more than once into an auction and have extra bids passed
@@ -957,6 +1013,68 @@ seatbid: [{
 }
 ```
 
+##### Echo StoredRequest Video Attributes (PBS-Java only)
+
+Several video specific fields can be set in the Stored Request that
+the device player would not have context to at time of render.
+The requester (e.g. Prebid SDK) can send this signal to Prebid Server,
+which causes PBS-core to place the video-related attributes on the response.
+
+```
+{
+   ... 
+    
+    "imp": [
+        {
+            "id": "123456789",
+            "video": { ... }, 
+            "ext": {
+                "prebid": {
+                    "storedrequest": { "id": "xxx" },
+                    "options": {
+                        "echovideoattrs": true
+                    } 
+                }
+            }, 
+	    ...
+        }
+    ]
+    ...
+}
+```
+1. Prebid Server receives this request and expands the `storedrequest` value, merging it with the imp object.
+2. Because `echovideoattrs` is true, video parameters in the storedrequest imp[].video are copied to seatbid.bid.ext.prebid.storedrequestattributes.
+
+```
+{
+    "seatbid": [{
+            "bid": [{
+                   ...
+                    "ext": {
+                        "prebid": {
+                            "storedrequestattributes":{
+                                "maxduration": 60, 
+                                "mimes": [
+                                    "video/mp4"
+                                ], 
+                                "minduration": 15, 
+                                "protocols": [
+                                    1, 
+                                    2
+                                ], 
+                                "skipafter": 0, 
+                                "skipmin": 0, 
+                                "startdelay": 0,
+                                "playbackmethod": [1]
+                            }
+                        }
+                    }
+                }]
+        }],
+...
+}
+```
+
 #### OpenRTB Response Extensions
 
 ##### Bidder Response Times
@@ -1002,9 +1120,54 @@ The codes currently defined are:
 999 UnknownErrorCode
 ```
 
-#### Test Flag
+##### Ad Server Targeting
 
-The standard OpenRTB `test` flag triggers Prebid Server to dump additional debug info into the OpenRTB response. e.g.
+Prebid Server will generate ad server targeting variables as defined by request parameters:
+
+1. If ext.prebid.targeting.includewinners is true, seatbid.bid.ext.prebid.targeting will be defined for the top bid in each imp object and will carry the following targeting values: hb_pb, hb_size, and hb_bidder.
+1. If ext.prebid.targeting.includebidderkeys is true, seatbid.bid.ext.prebid.targeting will be defined for the top bid from each bidder in each imp object and will carry the following targeting values: hb_pb_BIDDER and hb_size_BIDDER.
+1. If ext.prebid.cache.bids is specified, any targeting objects will also contain hb_cache_id, hb_cache_id_BIDDER, hb_cache_host, and hb_cache_path.
+1. If ext.prebid.cache.vastxml is specified, any targeting objects will also contain hb_uuid, hb_uuid_BIDDER, hb_cache_host, and hb_cache_path.
+1. If the bid response defines a deal, any targeting objects will also contain hb_deal or hb_deal_BIDDER
+1. If ext.prebid.adservertargeting is defined, arbitrary targeting values may be specified.
+
+```
+{
+seatbid: [{
+  seat: "bidderA",
+  bid: [{
+    id: "bid1",
+    impid: "imp1",
+    price: 1.04,
+    ext: {
+        prebid: {
+            targeting: {
+		hb_pb: 1.00, // values without prefixes on the winning bids only
+                hb_pb_bidderA: 1.00, // only if includebidderkeys is true
+		hb_bidder: "bidderA",
+		hb_size: "300x250",
+		hb_size_bidderA: "300x250",
+		hb_format: "video" // only if includeformat is specified
+		hb_deal: "123" // only if bid response contains a deal
+            }
+        }
+    }
+    ...
+  }]
+}]
+```
+
+
+##### Debug Output
+
+`response.ext.debug.httpcalls.{bidder}` will be populated only if `test:1` or `ext.prebid.debug:true`.
+
+This contains info about every request and response sent by the bidder to its server.
+It is only returned on `test` bids for performance reasons, but may be useful during debugging.
+
+`response.ext.debug.resolvedrequest` will be populated **only if** `request.test` **was set to 1**.
+
+This contains the request after the resolution of stored requests and implicit information (e.g. site domain, device user agent).
 
 ```
   "ext": {
@@ -1023,21 +1186,9 @@ The standard OpenRTB `test` flag triggers Prebid Server to dump additional debug
       ...
 ```
 
-
-##### Debugging
-
-`response.ext.debug.httpcalls.{bidder}` will be populated **only if** `request.test` **was set to 1**.
-
-This contains info about every request and response sent by the bidder to its server.
-It is only returned on `test` bids for performance reasons, but may be useful during debugging.
-
-`response.ext.debug.resolvedrequest` will be populated **only if** `request.test` **was set to 1**.
-
-This contains the request after the resolution of stored requests and implicit information (e.g. site domain, device user agent).
-
 ##### Original Bid CPM (PBS-Java only)
 
-`response.seatbid[].bid[].ext.origbidcpm` will contain the original bid price from the bidder.
+`response.seatbid[].bid[].ext.origbidcpm` and `response.seatbid[].bid[].ext.origbidcur` will contain the original bid price/currency from the bidder.
 The value in seatbid[].bid[].price may be converted for currency and adjusted with a [bid adjustment factor](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#bid-adjustments).
 
 ### OpenRTB Ambiguities
@@ -1047,7 +1198,6 @@ This section describes the ways in which Prebid Server **implements** OpenRTB sp
 - `request.cur`: If `request.cur` is not specified in the bid request, Prebid Server will consider it as being `USD` whereas OpenRTB spec doesn't mention any default currency for bid request.
 ```request.cur: ['USD'] // Default value if not set```
 
-
 ### OpenRTB Differences
 
 This section describes the ways in which Prebid Server **breaks** the OpenRTB spec.
@@ -1080,6 +1230,73 @@ In the OpenRTB spec, `request.imp[i].secure` says:
 In Prebid Server, an `https` request which does not define `secure` will be forwarded to Bidders with a `1`.
 Publishers who run `https` sites and want insecure ads can still set this to `0` explicitly.
 
+### HTTP Headers
+
+In order to facilitate compatibility and analytics, Prebid Server will add the x-prebid HTTP header to outgoing requests. Some examples:
+
+```
+x-prebid: pbs-go/0.155
+x-prebid: pbjs/4.39,pbs-go/0.155
+x-prebid: prebid-mobile/1.2.3,pbs-java/1.64
+```
+
+The PBJS version comes from ext.prebid.channel: `{name: "pbjs", version: "4.39"}`
+
+The Prebid SDK version comes from:
+```
+app.ext.prebid: {
+   source:  "prebid-mobile"
+   version: "1.2.3"
+}
+```
+
+
+### Prebid Server ORTB2 Extension Summary
+
+{: .table .table-bordered .table-striped }
+| Req/Resp | Extension | Description | Type | Example | Adapter Sees? |
+| --- | --- | --- | --- | --- | --- |
+| req | imp[].ext.prebid. bidder.BIDDER | bidder parameters | object | imp[].ext. prebid.bidder. biddera: { placement: 123 } | They see the object as imp[].ext.bidder |
+| req | imp[].ext.BIDDER | DEPRECATED place to put bidder parameters | object | imp[].ext. prebid.bidder. biddera: { placement: 123 } | They see the object as imp[].ext.bidder |
+| req | imp[].ext.prebid. storedrequest.id | look up the defined stored request and merge the DB contents with this imp | object | see [stored requests](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#stored-requests) | no |
+| req | imp[].ext.prebid. storedauctionresponse | PBS-Core skips the auction and uses the response in the DB instead | object | see [stored responses](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#stored-responses-pbs-java-only) | no |
+| req | imp[].ext.prebid. is_rewarded_inventory | passed through to bid adapters | integer | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#rewarded-video-pbs-java-only) | yes |
+| req | imp[].ext.data.ATTR | Publisher-specific adunit-level first party data | any | "pmp_elig": true | yes |
+| req | app.ext.source | defined by Prebid SDK | string | "prebid-mobile" | yes |
+| req | app.ext.version | defined by Prebid SDK | string | "1.6" | yes |
+| req | ext.prebid.bidadjustmentfactors | Adjust the CPM value of bidrequests | object | See [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#bid-adjustments) | no |
+| req | ext.prebid.targeting | defines the targeting values PBS-core places in seatbid.bid.ext.prebid.targeting | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#targeting) | no |
+| req | ext.prebid.adservertargeting | advanced targeting value rules | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#custom-targeting-pbs-java-only) | no |
+| req | ext.prebid.integration | host-dependent integration type passed through to events and analytics | string | "managed" | yes |
+| req | ext.prebid.channel | Generally "pbjs", "amp", or "app". Passed through to events and analytics | object | {name: "pbjs", version: "4.39"} | yes |
+| req | ext.prebid.aliases | defines alternate names for bidders | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#bidder-aliases) | yes |
+| req | ext.prebid.debug | provides debug output in response | boolean | true | yes |
+| req | ext.prebid.cache | defines whether to put bid results in Prebid Cache | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#cache-bids) | no |
+| req | ext.prebid.schains | bidder-specific supply chains | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#supply-chain-support) | no |
+| req | ext.prebid.data.bidders | bidders in scope for bidder-specific first party data | array of strings | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#first-party-data-support-pbs-java-only) | no |
+| req | ext.prebid.bidderconfig | bidder-specific first party data | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#first-party-data-support-pbs-java-only) | no |
+| req | ext.prebid.currency | publisher-defined currency conversions | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#currency-support) | yes |
+| req | ext.prebid.no-sale | turns off CCPA processing for the named bidder(s) | array of strings | ["bidderA"] | no |
+| req | ext.prebid.interstitial | PBS-core will adjust the sizes on a request for interstitials | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#interstitial-support) | yes |
+| req | ext.prebid.auctiontimestamp | timestamp for use in correlating PBJS and PBS events | long int | 123456789 | yes |
+| req | ext.prebid.options. echovideoattrs | causes PBS-core to [echo video attributes](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#echo-storedrequest-video-attributes-pbs-java-only) on seatbid[].bid[].ext.prebid.storedrequestattributes so the player has access to them | boolean | true | yes |
+| req | ext.prebid.multibid | allows bidders to respond with more than one bid | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#multibid-pbs-java-only) | yes, but only their value |
+| resp | seatbid[].bid[].ext. prebid.targeting | ad server targeting values. Related to req ext.prebid.targeting. | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#ad-server-targeting) | n/a |
+| resp | seatbid[].bid[].ext.prebid. type | "banner", "video", "native" | string | "banner" | n/a |
+| resp | seatbid[].bid[].ext.prebid. cache.bids.url | URL location of the bid or VAST | string | URL | n/a |
+| resp | seatbid[].bid[].ext.prebid. cache.bids.cacheId | ID of the bid or VAST | string | "1234" | n/a |
+| resp | seatbid[].bid[].ext.prebid. events.win | URL for registering a BIDS_WON event for this bid | string | URL | n/a |
+| resp | seatbid[].bid[].ext.prebid. events.imp | URL for registering an impression event for this bid | string | URL | n/a |
+| resp | seatbid[].bid[].ext.prebid. bidid | defines a Prebid-generated id for this bid in case the bidder's ID isn't unique | string | UUID | n/a |
+| resp | seatbid[].bid[].ext.prebid. meta.ATTR | bidder-supplied metadata | object | see [docs](/prebid-server/developers/add-new-bidder-go.html) | n/a |
+| resp | seatbid[].bid[].ext.prebid. storedrequestattributes | results of the ext.prebid.options.echovideoattrs option above. | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#echo-storedrequest-video-attributes-pbs-java-only) | n/a |
+| resp | response.seatbid[].bid[].ext. origbidcpm | a copy of the unadjusted bid price | float | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#original-bid-cpm-pbs-java-only) | n/a |
+| resp | response.seatbid[].bid[].ext. origbidcur | a copy of the original bid currency | string | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#original-bid-cpm-pbs-java-only) | n/a |
+| resp | ext.responsetimemillis.BIDDER | debug mode: how long the named bidder took to respond with a bid | integer | 100 | n/a |
+| resp | ext.debug.httpcalls.BIDDER | debug mode: the HTTP request/response from the named bidder | object | | n/a |
+| resp | ext.errors.BIDDER | debug mode: errors from the named bidder | object | | n/a |
+| resp | ext.debug | debug mode: useful output | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#debug-output)| n/a |
+
 ### Further Reading
 
 - [The OpenRTB 2.5 spec](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf)
diff --git a/prebid-server/features/pbs-currency.md b/prebid-server/features/pbs-currency.md
index 8b6201fb5f..3fe503fe98 100644
--- a/prebid-server/features/pbs-currency.md
+++ b/prebid-server/features/pbs-currency.md
@@ -80,7 +80,7 @@ Here are a couple examples showing the logic behind the currency converter:
 
 ## Request-Defined Conversion Rates
 
-Using PBS-Java, rates can be passed in on the request:
+Rates can be passed in on the request:
 
 ```
 "ext": {
diff --git a/prebid-server/features/pbs-feature-idx.md b/prebid-server/features/pbs-feature-idx.md
index ccab2d7215..dec47eb023 100644
--- a/prebid-server/features/pbs-feature-idx.md
+++ b/prebid-server/features/pbs-feature-idx.md
@@ -14,6 +14,7 @@ title: Prebid Server | Features
 | [Currency](/prebid-server/features/pbs-currency.html) | Request-Defined Rates | Allows the request to define its own currency rates. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Currency | pbsConvertCurrency method | Allows adapters to convert bid floors to a different currency if needed. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [Deals](/prebid-server/features/pbs-deals.html) | Core | Basic deal support, creating hb_deal targeting when appropriate. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Deals | Deal prioritization | Supports the 'preferdeals' [targeting flag](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#targeting) to give deals the priority when PBS returns ad server targeting. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [AMP](/prebid-server/use-cases/pbs-amp.html) | Core | Reads and responds to the /openrtb2/amp endpoint | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Targeting | Core | Request can specify `includewinners` and `includebidderkeys`. These cause PBS to emit seatbid[].bid[].ext.prebid.targeting values. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Targeting | Format | Request can specify `includeformat`, which causes PBS to emit hb_format along with other targeting values like hb_pb, etc. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
@@ -54,13 +55,14 @@ title: Prebid Server | Features
 | Video | Outstream renderers | Support for bidders specifying their own renderers for outstream video. | | |
 | Video | Long-form video | Support for the [long-form video endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-video.html). | <img src="/assets/images/icons/icon-check-green.png" width="30"> | |
 | Video | IAB advertiser category mapping | Able to map IAB advertiser categories to a supplied mapping table. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | |
-| Video | Echo video attributes | To support mobile video, copies stored request video attributes to the response. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Video | [Echo video attributes](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#echo-storedrequest-video-attributes-pbs-java-only) | To support mobile video, copies stored request video attributes to the response. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [Interstitials](/prebid-server/features/pbs-interstitials.html) | Core | Support device.ext.prebid.interstitial.minwidthperc and device.ext.prebid.interstitial.minheightperc parameters, [dynamically updating the impression format object](https://github.com/prebid/prebid-server/issues/755) from a configurable list of sizes filtered by these parameters. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [Aliases](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#bidder-aliases) | Core | Maps a biddercode on an incoming request to a specific server-side bid adapter named in the request or defined in config. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Aliases | [GVL ID support](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#bidder-alias-gvl-ids-pbs-java-only) | Define the IAB GVL ID for an aliased biddercode. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [User ID Sync](/prebid-server/developers/pbs-cookie-sync.html) | Core | Implements the /cookie_sync and /setuid endpoints. Bidders may choose either redirect or iframe method. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | User ID Sync | Multi-Method | Bidders can supply both pixel redirects as well as iframe syncs. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | User ID Sync | Cooperative sync | Does a pixel sync with more than just the bidders on the page. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| User ID Permissions | Extended ID Permissions | Allows publishers to determine which bidders are allowed to receive which extended ID. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | |
 | User ID Sync | Account override | Allows accounts to override the cooperative sync feature and bidder limits. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | User ID | [EID Permissions](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#eid-permissions) | The Publisher can define which bidders receive which extended user IDs. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [Events](https://docs.google.com/document/d/1ry0X4C2EV-R0pMrm1IQk9BstxaT395UCl3KKqTGa5c8/edit#heading=h.7w5yevygp2gz) | Events | Ability to process the /event endpoint, place /event URLs in the OpenRTB response, and place /event URLs in VAST XML. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
@@ -77,4 +79,6 @@ title: Prebid Server | Features
 | Operations | Circuit breaker | Protects system performance during fault scenarios by detecting problems with external and internal endpoints, turning them off temporarily when a problem occurs. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Operations | [Server default request](/prebid-server/features/pbs-default-request.html) | Support global defaults for incoming requests. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Operations | IPv6 | Support taking IPv6 addresses and forwarding them to bidders. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| [Programmatic Guaranteed](/prebid-server/features/pg/pbs-pg-idx.html) | Integration and Targeting | Ability to load, target, and report PG line items | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Operations | [Request Logging Admin Endpoints](/troubleshooting/pbs-troubleshooting.html#request-logging) | Log a limited number of requests to understand the raw data clients are sending. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Metadata | [x-prebid header](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#http-headers) | Put version information in outgoing HTTP headers. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
diff --git a/prebid-server/features/pbs-storedreqs.md b/prebid-server/features/pbs-storedreqs.md
index 966eace171..822b9b5237 100644
--- a/prebid-server/features/pbs-storedreqs.md
+++ b/prebid-server/features/pbs-storedreqs.md
@@ -8,27 +8,35 @@ title: Prebid Server | Features | Stored Requests
 # Prebid Server | Features | Stored Requests
 
 'Stored Requests' are blocks of OpenRTB stored on the server-side that are merged into 
-OpenRTB requests in a couple of scenarios.
+OpenRTB requests for Mobile App and AMP scenarios.
 
 The data source can be local files on Prebid Server, but more commonly it would be a relational
 database distributed across all the Prebid Servers in the host company's installation.
 
 ## Mobile App
 
-Hardcoding bidders and parameters in a mobile app isn't ideal. Prebid Server allows Stored Request IDs to be
-used in two ways:
+We want to avoid hardcoding parameters into a mobile app like bidders and parameters. Because of this, Prebid Server allows host companies to store two types of JSON that are retrieved with a key called a 'Stored Request ID':
 
-1. Define cross-adunit parameters like currency and price granularity
-1. Define adunit-specific details: bidders and their parameters
+- "top-level" requests, also called "wrapper-level" requests. This block is merged into the root level of the incoming ORTB request. It's not expected to have an imp object.
+- "impression-level" requests are merged into a particular ORTB imp element.
+
+![App stored request model](/assets/images/prebid-server/stored-requests-app.png){: .pb-lg-img :}
+
+1. The SDK creates a 'skeleton' framework of the OpenRTB JSON that doesn't
+contain the bidders or any other parameter that might be changed by AdOps.
+2. Prebid Server merges all the stored requests into this template.
+3. Creating the final OpenRTB JSON just like Prebid.js would have sent using the PBS Bid Adapter.
 
 See the [Mobile SDK Use Case reference](/prebid-server/use-cases/pbs-sdk.html) for specific examples.
 
 ## AMP
 
 The AMP protocol is converted to OpenRTB primarily using Stored Requests: the `tag_id` is used to look up
-the base OpenRTB from the data source. After getting the bulk of the OpenRTB, AMP query string parameters
+a single base OpenRTB from the data source. After getting the bulk of the OpenRTB, AMP query string parameters
 are used to inject and adjust parameters like size, url, etc. See the [AMP endpoint documentation](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) for more details.
 
+![AMP stored request model](/assets/images/prebid-server/stored-requests-amp.png){: .pb-lg-img :}
+
 See the [AMP Use Case reference](/prebid-server/use-cases/pbs-amp.html) for specific examples.
 
 ## Creating Stored Requests
diff --git a/prebid-server/features/pg/pbs-pg-bidder.md b/prebid-server/features/pg/pbs-pg-bidder.md
new file mode 100644
index 0000000000..88e4dc53ec
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-bidder.md
@@ -0,0 +1,141 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Building a PG Bidder
+---
+
+# Building a Programmatic Guaranteed Bidder
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## What is a PG Bidder?
+
+The architecture of Prebid Programmatic Guaranteed (PG) is inherently multi-vendor. A PG `Host Company` runs a global distributed cluster of Prebid Servers. These servers handle the 'real-time' requests... those that need to have millisecond response times. They also run a couple of backend servers that help manage the PG line items. One of them 
+is called the `General Planner`. The General Planner can connect out to multiple sources of PG Line Items, and that's where you come in -- as a PG Bidder, you can contribute PG Line Items into the auction ecosystem for the publishers who utilize the Host Company's installation.
+Here's a diagram from the [white paper](https://files.prebid.org/pg/Prebid_Programmatic_Guaranteed_White_Paper.pdf).
+
+![PG High Level Framework](/assets/images/prebid-server/pg/pg-arch-2.png){: .pb-lg-img :}
+
+1. The PG Host Company runs clusters of Prebid Servers that receive requests from publishers.
+2. Prebid Servers look up additional data for use in targeting.
+3. The General Planner queries your PG Bidder endpoint and allocates your line items across the Prebid Server clusters.
+4. The `Delivery Stats Service` is available for PG Bidders to obtain up-to-date reports on how line items are delivering.
+5. The `Dimension Value API` should be used by bidders to create targeting values.
+6. Each PG Bidder has it's own logic for pacing their line items in 1 or 5-minute increments called "plans".
+7. The publisher or a service team enter the PG Line Items into the PG Bidder's user interface.
+
+Notes:
+- It's possible that you could deliver PG Line Items through more than one PG Host Company.
+- It it the responsibility of the PG Bidder to manage their own finance arrangements with each Publisher.
+- It's possible that the Host Company may charge a fee to deliver PG Line Items through their infrastructure.
+
+## What's involved in building a PG Bidder?
+
+These are the high level steps for how to develop a PG Bidder and plug it into a Host Company's implementation.
+
+1. Contact a PG Host Company to make sure they're ready to incorporate a new PG Bidder. They may have additional requirements.
+1. Obtain access to the Host Company's Dimension Value API and Delivery Stats server. You will receive a "biddercode" similar to the codes used in Prebid.js. e.g. "pgExample".
+1. Develop a User Interface for the customer to enter PG info: date range, targeting details, price, and pacing details. The targeting information comes from the Host Company's Dimension Value API.
+1. Develop a pacing algorithm that uses data from the Host Company's Delivery Stats server and your own data stores.
+1. Develop a report that uses data from the Host Company's Delivery Stats server and your own data stores.
+1. Develop an external API that can respond to requests from the Host Company's General Planner for line item data.
+1. Develop a method for estimating inventory forecast and availability. The Host Company may have data available.
+1. Contact the Host Company to begin integration testing.
+
+### Obtain targeting dimensions
+
+The Host Company will give PG Bidders access to their Dimension Value API which will let them know what attributes and values their Prebid Servers can target at runtime for particular clients.
+The values used will differ between Host Companies and publishers. For example, there may be different geographic and device info services. Publisher AdSlot and First Party Data fields will also vary.
+
+Once granted authenticated access to the Dimension Value endpoint, you'll use the it to query it to get attribute names and values specific to the accounts you're working with. e.g.
+
+- GET /dim-val/api/v2/attr/names?account=1001
+- GET /dim-val/api/v2/attr/values?account=1001
+
+There are various options for filtering data. See the [Dimension Value API documentation](https://github.rp-core.com/ContainerTag/pg-dim-val-api/blob/master-rubicon/docs/server_endpoints.md) for more details.
+
+{: .alert.alert-info :}
+In order to access client-specific targeting data, you'll need to know the account ID the Host Company uses for each publisher.
+
+See [PG Targeting Syntax](/prebid-server/features/pg/pbs-pg-targeting.html) for a list of targeting attributes you may be able
+to get from the PG Host Company and how to format them as part of the [PG Plan](/prebid-server/features/pg/pbs-pg-plan.html).
+
+### Getting data from the Delivery Stats Service
+
+There are two reasons PG Bidders need data from the Host Company's PG Delivery Stats Service:
+
+1. **Line Item reporting**: detailed info is available about where in the delivery funnel each Line Item is getting attention or running into problems. See the [PG Glossary](/prebid-server/features/pg/pbs-pg-glossary.html#metrics) for which statistics you can expect.
+1. **Inform the pacing algorithm**: in order to write a robust and responsive pacing algorithm, the PG Bidder is going to need fresh data. If the bidder's impression data stream is real-time, that may be enough. If not, the Host Company's Delivery Stats server can provide recent (5-minute) summaries of important metrics like tokens spend and bidsWon. See [PG Plans](/prebid-server/features/pg/pbs-pg-plan.html) for more details.
+
+Some example Delivery Stats queries:
+
+- GET /del-stats-summ/api/v1/report/line-item-summary?startTime=YYYY-MM-DDT00:00:00.000Z -- this returns an hourly aggregration for all of your line items since the specified time. See the [Line Item Summary Report endpoint documentation](https://github.rp-core.com/ContainerTag/pg-del-stats-svc/blob/master-rubicon/docs/line_item_summary_endpoint.md) for more info.
+- GET /del-stats-pa/api/v2/report/delivery?bidderCode=pgExample&startTime=YYYY-MM-DDT00:00:00.000Z -- this returns 5-minute aggregations for all of your line items since the specified time. See the [Delivery Report endpoint documentation](https://github.rp-core.com/ContainerTag/pg-del-stats-svc/blob/master-rubicon/docs/delivery_report_endpoints.md)
+
+
+### Answering General Planner requests
+
+When the PG Bidder is ready for integration with the Host Company, they'll provide an authenticated secure endpoint that will answer requests from the Host Company's General Planner.
+The path of this endpoint can be anything you'd like. It will receive these query string parameters:
+
+{: .table .table-bordered .table-striped }
+| Parameter | Format | Required? | Description |
+| --- | --- | --- | --- |
+| since | string | no |  Timestamp in ISO-8601 format. For example, 2019-02-01T03:00:00.000Z. Service should respond with all meta data for active or nearly-active line items and schedules that got updated since this timestamp. Absence of this parameter signals request to return all active or nearly-active line items. |
+| hours | string | no |  Number of hours of plans desired i.e. provide the next 3 hours worth of plans |
+
+Here's an [example JSON response](https://github.rp-core.com/ContainerTag/pg-general-planner/blob/master-rubicon/docs/samples/pa_rsp.json) that might come from your bidder planner.
+
+At this point, your endpoint needs to respond quickly with the most recently calculated set of PG line item pacing plans. A `plan` is a set
+of instructions to Prebid Server that tells the system how often to serve
+a line item in a given period. e.g. "serve LineA 50 times from noon-12:05, 55 times from 12:05-12:10, ..."
+
+The General Planner will be configured to call your endpoint every 1-10 minutes depending on the Host Company.
+
+See [PG Plan Definition](/prebid-server/features/pg/pbs-pg-plan.html) for more details.
+
+### General notes on writing a pacing algorithm
+
+At a high level, pacing a line item seems like it might be simple:
+
+```
+NumberOfImpressionsEach5MinPeriod=TotalImpressionsRemaining+3percentBuffer / NumberOf5MinPeriodsRemaining
+```
+
+But this approach wouldn't perform well:
+- When the line falls behind, it won't take advantage of higher traffic periods to catch up. It will fall behind during normal low-traffic periods, saving all impressions for the last minute.
+- As covered in the description of [tokens](/prebid-server/features/pg/pbs-pg-plan.html#tokens), a PG line item cannot assume that it'll be chosen every time it's offered to the ad server. Prebid PG paces based on tokens, not impressions, so the pacing algorithm needs to estimate how many times each line item needs to be offered to the ad server in order to land a final certified impression.
+
+Likewise, another naive approach is to try and immediately catch up to the "even delivery" line:
+```
+ImpressionDeficit=TotalImpressions+3percentBuffer - TotalImpressionsShouldHaveByNow
+
+NumberOfImpressionsThis5MinPeriod=ImpressionDeficit * NoiseFactor
+```
+
+Potential problems with this algorithm:
+- If it falls far behind, it could be overly aggressive in trying to catch up, affecting the delivery of other line items.
+- If it gets ahead somehow, it will stop delivering entirely until time catches up to the delivery curve.
+
+Here are some examples of desirable delivery patterns:
+
+![Desirable delivery patterns](/assets/images/prebid-server/pg/pg-good-delivery.png){: .pb-lg-img :}
+
+And these are examples of delivery patterns to avoid:
+
+![Undesirable delivery patterns](/assets/images/prebid-server/pg/pg-bad-delivery.png){: .pb-lg-img :}
+
+For more information, see the "Plans" section of the [Intro to PG Whitepaper](https://files.prebid.org/pg/Prebid_Programmatic_Guaranteed_White_Paper.pdf).
+
+{: .alert.alert-warning :}
+The PG Host Company may require periodic of testing with your pacing algorithm because undesirable
+token management from on PG Bidder could affect line item delivery from other PG Bidders.
+
+## Related Topics
+
+- [PG Home Page](/prebid-server/features/pg/pbs-pg-idx.html)
+- [PG Plans](/prebid-server/features/pg/pbs-pg-plan.html)
+- [PG Glossary](/prebid-server/features/pg/pbs-pg-glossary.html)
+- [PG Targeting](/prebid-server/features/pg/pbs-pg-targeting.html)
diff --git a/prebid-server/features/pg/pbs-pg-glossary.md b/prebid-server/features/pg/pbs-pg-glossary.md
new file mode 100644
index 0000000000..c4dd2df468
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-glossary.md
@@ -0,0 +1,80 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Programmatic Guaranteed Glossary
+---
+
+# Programmatic Guaranteed Glossary
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## Basic terminology
+
+- **Programmatic Ad** - an ad request that flows through the multi-vendor ad tech ecosystem
+- **Guaranteed** - A buyer and seller have entered into a contract: to deliver a certain amount of impressions to a particular target over a particular date range. If contract isn't met, there may be financial penalties or extra impressions.
+- **PG Host Company** - the entity running the Prebid PG software: Prebid Servers, General Planner, Delivery Stats, and Dimension Value API.
+- **Prebid Ad Slot** - the "hole in the page" that's requesting an ad (note: this is not currently standard Prebid.org terminology).
+- **Prebid Ad Unit** - a package of bidding parameters that defines which bidders and bid parameters are to be used for a specific "hole in the page".
+- **Client Requests** - OpenRTB-like network calls from a client to the Prebid Server requesting one or more auctions.
+- **Auction Requests** - a single OpenRTB ad request may contain 1 or more 'imp' blocks that define different auction scenarios. Each of these blocks is an "auction". Auctions are sent to one or more bidders and are associated with auction parameters for each bidder.
+- **PG Bidder** - the ad exchange, demand side platform, or other bid source that directly or indirectly connects the Auction Request to a bid. Example bidders include Magnite, Criteo, etc.
+- **Bidder Parameters** - the specific parameters required by the bidder describing the auction to take place. The Rubicon account, site, and zone are example parameters.
+- **PG Line Item** - the base unit of ad delivery has a goal, date range, target, creatives, deal ID, and pacing options.
+- **AdServer Line Item** - corresponding to the PG Line Item, the AdServer has a similar line item which prioritizes the PG Line Item in relation to other direct-sold agreements. It may also have a goal and date range, but the targeting will be just to the deal ID, not the full PG target. The creative is the Prebid-standard creative instead of the actual creative.
+- **Deal** - an agreement between a buyer and a seller. In the PG context, a Deal may be comprised of 1 or more line items for different media types, targets, date ranges, etc. Since most bidders won't understand "line items", a candidate Deal ID is likely to be what's passed to each bidder.
+- **Line Item Type** - sponsorship, guaranteed, non-guaranteed, house. 
+- **Creative** - the actual ad that will be seen by an end user. May be an image, HTML, video, or native.
+- **Target** - a description of the specific sites, user, device, and geographic characteristics a line item is aimed at.
+- **Goal** - How many total impressions a campaign line needs to serve
+- **Bonus** - Extra impressions assigned to a campaign line to make sure it delivers at least the total goal. This may be stated as a percentage or a number of impressions. Bonus is important to make sure that impression counting discrepancies don't cause the campaign to be perceived as missing its goal.
+- **Goal Type** - which metric is used to meet the goal. (i.e. wins or views) 
+- **Start and End Datetime** - the date range for the campaign could include starting and ending mid-day. Each campaign may also be associated with a timezone. 
+- **Delivery Type** - defines the general shape of the desired delivery curve: 
+    - even delivery - impressions are roughly equal each day of the campaign
+    - front-loaded delivery - there may be more impressions delivered in the early days of the campaign
+    - as-soon-as-possible - serve this thing whenever there's a chance
+- **Historic Delivery** - Number of impressions a line delivered until the end of previous day.
+- **Deficit** - The number of impressions a line is behind due to lack of overall inventory, existence of road-blocks, or other reason.
+- **Late Deficit** - Number of impressions that a line is behind due to trafficking reasons, normally late creative. We may choose to catch up on a late deficit differently than other kinds of deficits because it's the fault of the advertiser, and it could affect other campaigns.
+- **Priority** - a way of ranking competing line items against each other.
+- **Oversold** - one or more guaranteed line items are struggling and are unlikely to reach their goals. In some cases it may be better to let some of the line items finish at the expense of others, while in other scenarios it's better to distribute what's available. 
+- **Underdelivery** - when a line item is not serving enough impressions to meet its goal.
+- **Overdelivery** - when a line item is serving too many impressions, or has met its delivery goal too early.
+- **Frequency Cap** - how often a given user is allowed to see the advertising message.
+- **Discrepancy** - impressions are counted by multiple systems which often different from each other by a few percent. The buyer and seller agree on which numbers are billable. The ad system needs to deliver enough impressions that the goal is met in the system-of-record.
+- **Ad Inventory** - the combined set of attributes supplied with an ad request, whether direct or indirect. e.g. page context, user info, device info, etc. Line Item 'Targets' inspect these inventory attributes for matching.
+- **Forecast** - how much inventory of a particular type is expected to come in over a specified time period. e.g. "how many 300x250 ad requests from example.com will come from Windows machines next week?"
+- **Commitment** - a guaranteed line item that the publisher has promised to deliver to an advertiser.
+- **Availability** - starts with the Projection, but removes traffic that's already sold to other committed line items.
+- **Availability Buffer** - a safety factor to recognize that projections are always an estimate, and only the most sophisticated delivery systems can properly support the juggling involved in tightly sold overlapping inventory.
+
+## Metrics
+
+The basic design of the metrics offered by the PG system is a funnel that allows us to see where a line item's chance to deliver may be struggling. Here are the metrics available:
+
+- **clientAuctions** - the total number of auction impression requests seen by the system across all accounts. A single HTTPS request to PBS may contain multiple auction requests – this number basically reflects all auctions taking place.
+- **accountAuctions** - the number of auctions taking place for the specific Rubicon Project account ID
+- **domainMatched** - the number of times the domain portion of this line item's target matched an impression request. e.g. "1000 auctions for example.com". If there is no domain targeting, this number should be the same as accountAuctions.
+- **targetMatched** - the number of times the line item's entire target matched a request.
+- **targetMatchedButFcapped** - the number of times the line item's entire target matched a request, but the user ad already reached their personal frequency cap limit for this line item.
+- **targetMatchedButFcapLookupFailed** - the number of times the line item's entire target matched a request, but was removed from consideration because the lines item has a frequency cap and the lookup to the Frequency Capping system failed.
+- **pacingDeferred** - Prebid has taken the line item out of consideration in order to make sure it's not delivering too often
+- **sentToBidder** - only the top few matching line items or deals will be sent to each bidder. This metric indicates whether the line item was in the top few.
+- **sentToBidderAsTopMatch** - if the line item was considered most ready to serve by Prebid Server before going to the bidder, this metric will be incremented.
+- **receivedFromBidder** - this metric indicates whether the bidder chose this deal/line item from the candidates sent to it. Bidders may reject any suggested Deal ID or fail to respond.
+- **receivedFromBidderInvalidated** - indicates the number of times this deal/line item was received from a bidder, but rejected by Prebid Server for any reason. Rejection reasons include: incorrect size for auction, target didn't match, ahead of pace and not ready to serve.
+- **sentToClient** - indicates how many times this line item was sent as the bidder's top match to the client, and therefore the ad server.
+- **sentToClientAsTopMatch** - indicates how many times this line item was sent to the client/ad server flagged by Prebid Server as the most eligible PG line item.
+- **lostToLineItems** - this array provides a measure of which competing line items have been considered more eligible to serve than this line item
+- **events** - how many times this line item received notification of the stated event type. For now only the only supported event type is "win", but eventually there may be other types like "click", "video 50% played", etc.
+
+Here's a graphical representation showing what point in the delivery funnel each of these metrics measures:
+
+![PG Metrics](/assets/images/prebid-server/pg/pg-metrics.png){: .pb-xlg-img :}
+
+## Related Topics
+
+- [PG Home Page](/prebid-server/features/pg/pbs-pg-idx.html)
+- [PG White Paper](https://files.prebid.org/pg/Prebid_Programmatic_Guaranteed_White_Paper.pdf)
diff --git a/prebid-server/features/pg/pbs-pg-host.md b/prebid-server/features/pg/pbs-pg-host.md
new file mode 100644
index 0000000000..3abf6b3d5e
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-host.md
@@ -0,0 +1,67 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Becoming a PG Host Company
+---
+
+# Becoming a PG Host Company
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## Overview
+
+Prebid PG is open source, so anyone can spin up the 4 different types of servers 
+needed to offer a PG service.
+
+1. Prebid Servers handle the real-time mix of open market and PG auctions.
+1. The General Planner collects PG line items from one or more PG Bidders.
+1. The Delivery Stats Service provides pacing and reporting information.
+1. The Dimension Value API provides the user interface the details required to build targets.
+
+See [Adding a PG Bidder](/prebid-server/features/pg/pbs-pg-bidder.html) for the
+high level view of the components.
+
+As a PG Host Company, you will have expenses in running and maintaining a global high-performance cluster of servers and databases. You'll need at least one PG Bidder, 
+which might be one you build on your own or partner with someone else. You're under
+no obligation to support other PG Bidders, but your publishers may request it.
+
+## Installing the Servers
+
+For now, the only information about building and running the servers is in
+the relevant GitHub repos:
+
+- [Prebid Server Java](https://github.com/prebid/prebid-server-java). Note that Prebid Server Go doesn't currently support Programmatic Guaranteed.
+- [General Planner](https://github.com/prebid/pg-general-planner)
+- [Delivery Stats Service](https://github.com/prebid/pg-del-stats)
+- [Dimension Value API](https://github.com/prebid/pg-dim-val-api)
+
+Prebid does not offer specific guidance about fault-tolerant architectures.
+It's left up to each Host Company to determine what will happen if one of the servers goes down. i.e. Will there be load-balancing, automatic failover, a warm stand-by, or no fault tolerance?
+
+## General notes on testing the service
+
+There are a fair number of moving parts in a Prebid PG installation. Prebid.org
+does not run a test cluster. Changes are made by Prebid member companies, which do
+have test clusters, but they may not test every possible configuration. e.g. different databases, geographic lookup vendors, 
+
+We recommend that PG Host Companies commit to regular testing of software updates
+against their specific configuration.
+
+The testing of PG Bidders and their pacing algorithms may be important to you,
+as publishers and advertisers care about the delivery patterns of their ad campaigns
+in a variety of challenging scenarios. Prebid.org may have extended recommendations
+about PG Bidder testing in the future, but in the meantime, you should consider
+joining Prebid.org and chatting with the development teams involved.
+
+## Announcing your service
+
+When ready to open their doors for business, Prebid.org members can ask to
+have their contact info added to the list of [PG Managed Services](/prebid-server/features/pg/pbs-pg-idx.html#list-of-pg-managed-services).
+
+## Related Topics
+
+- [PG Home Page](/prebid-server/features/pg/pbs-pg-idx.html)
+- [PG White Paper](https://files.prebid.org/pg/Prebid_Programmatic_Guaranteed_White_Paper.pdf)
+- [PG Glossary](/prebid-server/features/pg/pbs-pg-glossary.html)
diff --git a/prebid-server/features/pg/pbs-pg-idx.md b/prebid-server/features/pg/pbs-pg-idx.md
new file mode 100644
index 0000000000..391b4e0b38
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-idx.md
@@ -0,0 +1,67 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Prebid Programmatic Guaranteed
+---
+
+# Prebid Programmatic Guaranteed
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## Prebid Programmatic Guaranteed
+In general, Programmatic Guaranteed (PG) has existed for several years as an ad server-based function.
+While anchoring PG in the ad server is helpful from a deployment perspective,
+the lack of transparency and configurability in the ad server has slowed down product momentum
+and made it harder for buyers and sellers to flexibly adjust their strategy and
+configurations for PG deals. The introduction of open-source, standards-based
+Programmatic Guaranteed, anchored in Prebid Sever, helps both buyers and sellers in
+several key ways:
+
+- It allows publishers to utilize preferred partners and data in the Programmatic infrastructure.
+- It streamlines the traditional RFP and I/O process between buyers and sellers
+- It separates the pacing, capping and forecasting functions from the ad server so publishers can more easily control and modify deals
+- Enables a seamless, software-based negotiation process between buyers and sellers
+- Ensures easier interoperability with a wider universe of buy-side platforms
+
+At a high level, the system allows any **Host Company** running Prebid Server (only PBS-Java for now) to integrate open source components into their existing UIs and data delivery systems.
+
+In addition, the Host Company can support other **PG Bidders** connecting into their system to make their environment richer for publishers.
+
+![PG High Level Framework](/assets/images/prebid-server/pg/pg-arch-1.png){: .pb-sm-img :}
+
+We want to encourage an ecosystem where programmatic vendors can compete on their strengths: some companies may be excellent at hosting a technical infrastructure, while others may excel at usability, reporting, or delivery algorithms.
+
+
+## PG For Publishers
+
+Publishers interested in trying Programmatic Guaranteed through Prebid should
+contact one of the companies hosting a PG cluster. They'll explain how it all works and walk you through the setup process.
+
+### List of PG Managed Services
+
+If you're a publisher looking to try Programmatic Guaranteed or a PG bidder that wants to integrate into an existing cluster, here's a list of Prebid.org members to consider:
+
+- **Magnite** - contact your account representative or globalsupport@magnite.com
+
+## PG for Bidders
+
+If you have a demand source and are ready to implement a guaranteed delivery algorithm, learn how to [become a PG Bidder](/prebid-server/features/pg/pbs-pg-bidder.html).
+
+## Hosting your own PG Cluster
+
+If you're ready to host a global high-performance cluster, learn how to [become a PG Host Company](/prebid-server/features/pg/pbs-pg-host.html).
+
+## Questions?
+
+Contact prebid-server@prebid.org.
+
+## Related Topics
+
+- Intro to PG: [video](https://files.prebid.org/pg/PG_in_Prebid.mp4), [pdf](https://files.prebid.org/pg/PG_in_Prebid_Overview.pdf)
+- [PG White Paper](https://files.prebid.org/pg/Prebid_Programmatic_Guaranteed_White_Paper.pdf)
+- [Becoming a PG Bidder](/prebid-server/features/pg/pbs-pg-bidder.html)
+- [Becoming a PG Host Company](/prebid-server/features/pg/pbs-pg-host.html)
+- [PG Targeting](/prebid-server/features/pg/pbs-pg-targeting.html)
+- [PG Glossary](/prebid-server/features/pg/pbs-pg-glossary.html)
diff --git a/prebid-server/features/pg/pbs-pg-plan.md b/prebid-server/features/pg/pbs-pg-plan.md
new file mode 100644
index 0000000000..8c9c9e045e
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-plan.md
@@ -0,0 +1,284 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Programmatic Guaranteed Plans
+---
+
+# Programmatic Guaranteed Plans
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## What is a PG Plan?
+
+A `Plan` is a set of instructions to Prebid Server that tells it how often to serve a PG line item in a given period.
+
+1. Plans are created by each [PG Bidder](/prebid-server/features/pg/pbs-pg-bidder.html) as an output of their bidder-specific pacing algorithm.
+1. The 'General Planner' run by the Host Company will spread the Plan out across the cluster of Prebid Servers.
+1. Each Prebid Server works to deliver its part of the Plan.
+
+Here's what one looks like at a high level:
+
+```
+[
+  {
+    "lineItemId": "2291",
+    ... other line item attributes ...
+    deliverySchedule: [{
+        "planId": "2656179",
+        "startTimeStamp": "2020-08-28T11:50:00.000Z",
+        "endTimeStamp": "2020-08-28T11:55:00.000Z",
+        "updatedTimeStamp": "2020-08-28T10:04:12.000Z",
+        "tokens": [{
+            "class": 1,
+            "total": 50
+        }]
+    },{
+           ... next delivery schedule ...
+    }]
+  },
+  ... next line item ...
+  }
+]
+```
+
+The key parts of the Plan are:
+- Line item details. (See [example](#annotated-plan-example) below)
+- An array of Delivery Schedules broken into 5-minute periods
+- Each 5-minute period defines a number of `tokens` that need to be delivered
+
+### Tokens
+
+A `token` is an ad impression scaled up to overcome delivery obstacles.
+
+When Prebid Server (PBS) sends a PG line item to the ad server, it might be
+chosen to win, or maybe not. In either case, the act of sending a
+line item to the ad server causes PBS to create a "cool down" period for that
+line item. This is what pacing is all about -- making sure that delivery of the
+daily impression goal doesn't complete 20 minutes after midnight. PG delivery
+needs to be spread through the day, through the hour, and through each 5-minute period.
+
+If we could guarantee that the ad server would choose the PG line item to win every time,
+we wouldn't need tokens... PG could just use impressions. But that's not the case. There are several reasons why a candidate PG line item might not end up
+getting a final certified ad impression:
+- competing line items in the ad server
+- competing PG line items from another vendor
+- user leaves the page before ad render
+- the impression may be discounted as non-human traffic
+
+Basically, the pacing algorithms are working in a "noisy" environment. Not only are there
+many things that can get in the way of delivering a certified an ad impression,
+conditions can change rapidly, e.g. competing line items may start or stop, or the DSP may change its bidding pattern.
+
+So a "token" is Prebid PG's way of dealing with noise in the system.
+Instead of being satifisfied with offering a PG line item to the ad server
+and assuming that it will become a certified impression, PG operates in tokens instead, knowing that some of those opportunities won't materialize.
+You can think of it in terms of this basic formula:
+
+```
+Tokens = ImpressionsNeeded * Noise
+```
+
+Where the "noise" factor is how many tokens it's currently taking to get an ad
+impression through the gauntlet of challenges. Determining this noise factor
+is part of what the pacing algorithm needs to do -- adjusting it in real time
+as needed. e.g. if it's been taking 2 trips to the ad server to get a "bid won", the noise factor is 2, so in a plan that requires 50 impressions, there would be 100 tokens.
+You might wonder "why doesn't Prebid Server just take care of this?" Because Prebid Server is stateless... useful statistics are forwarded from hundreds of front-end servers and it's the job of the backend servers to aggregate and use that data.
+
+Of course noise could be infinite. For example, if there's a 'roadblock'
+ad in the ad server, it's possible that a PG line item will just stop delivering
+entirely for a day or more, and that's ok. But even though noise can be infinite,
+tokens cannot be. The Host Company will cap tokens at some reasonable level, 
+but the best strategy for the infinite noise scenario is to give up and use a 
+very small token count, waiting for when the problem has lifted.
+
+A good real-time way to monitor noise is to compare two fields
+in the Delivery Stats reports: sentToClientAsTopMatch vs events.bidsWon. (See the [glossary.](/prebid-server/features/pg/pbs-pg-glossary.html#metrics)) These values
+are indications of how many times the line item was offered to the ad server
+and accepted. But this value may also be tempered with data from your
+clean financial pipeline that compares certified impressions with events.bidsWon.
+
+### Plan Attributes
+
+These are the attributes that are part of a Plan. See below for an [annotated example](#annotated-plan-example).
+
+{: .table .table-bordered .table-striped }
+| Attribute | Required? | Description | Data Type |
+| --- | --- |--- |--- |
+| lineItemId | yes | Bidder-specific ID for this line item | string |
+| source | yes | Your PG bidder code. e.g. "pgBidderA" | string |
+| status | yes | Whether this line item is currently "active" or not. The only value that matters to the General Planner is "active". Any other value will cause the line item to be ignored. | string |
+| dealId | yes | Bidder-specific deal ID. Note that a Deal ID may be used by multiple line items. | string |
+| accountId | yes | Host Company-specific value for the publisher. | string |
+| price.cpm | yes | The CPM of the line item. | float |
+| price.currency | yes | The currency for the CPM of the line item. | string |
+| relativePriority | yes | Relative ranking specific to your pacing algorithm. You can put every line item at the same priority, or create 1000 different levels managed by your pacing algorithm. | integer |
+| sizes | yes | An array of creative sizes associated with the line item. e.g. `[{"w": 468,"h": 60},{"w": 728,"h": 90}]` | array of objects |
+| frequencyCaps.fcapId | no | Bidder-specific frequency cap ID. Needs to be uniqueo within your line items. | string |
+| frequencyCaps.count | no | How many impressions can be served | integer |
+| frequencyCaps.periods | no | Over how many periods | integer |
+| frequencyCaps.periodType | no | Period length. E.g. "day" or "hour" | string |
+| targeting | yes | Defines which ad requests are of interest to this line item. See [PG Targeting](/prebid-server/features/pg/pbs-pg-targeting.html) | object |
+| startTimeStamp | yes | Line start time in UTC. e.g. 2020-08-28T07:22:14.000Z | string |
+| endTimeStamp | yes | Line end time in UTC. | string |
+| updatedTimeStamp | no | When this plan was last modified. | string |
+| deliverySchedules | yes | array of objects |
+| deliverySchedules.planId | yes? | Bidder-specific ID for use in debugging. Should be unique. | string |
+| deliverySchedules.startTimeStamp | yes | Start time of plan period in UTC | string |
+| deliverySchedules.endTimeStamp | yes | End time of plan period in UTC | string |
+| deliverySchedules.updatedTimeStamp | no | When this plan period was last modified.| string |
+| deliverySchedules.tokens.class | no | For future use. Set to 1 for now. | integer |
+| deliverySchedules.tokens.total | yes | Token count (Impressions * Noise) for this plan period. | integer |
+
+## Plans and the General Planner
+
+The General Planner will poll the PG Bidder endpoint frequently - e.g. every minute or every 5-minutes. The exact period will be determined between you and the Host Company, but it needs to be often because pacing line items is a dynamic business.
+Even though it will be contacted frequently, they should still generate
+several hours worth of the delivery schedule in case communication breaks down somehow. 
+
+Once it receives the Plan, the General Planner will split up the tokens across 
+Prebid Servers. When a line item first starts, it does this in a really blunt way: just divides them evenly across the servers. But it will soon start adjusting for geographic differences
+in line item delivery. e.g. if a line item only serves tokens in Europe, the Prebid Servers in Europe will get all the tokens within a few cycles.
+
+## Plans and Prebid Server
+
+Each PBS polls the General Planner once per minute, getting new and updated Plans.
+Here's how it works:
+
+1. When an auction request comes in, check to see if the account has any active PG line items. If it doesn't, process the request normally.
+2. If it is an account with active PG line items, enhance the request with geographic, device, user, and frequency capping information
+3. Find out which PG line items have targets that match the current request
+4. Loop through the matching line items
+    1. Increment the "targetMatched" metric.
+    1. If the PG line item has a frequency cap and there's no user ID or the lookup failed, increment the "targetMatchedButFcapLookupFailed" metric and take it off the list.
+    1. If the PG line item has a frequency cap and it's met the cap, increment the "targetMatchedButFcapped" metric and take it off the list.
+    1. If the PG line item is in "cool-down", increment the "pacingDeferred" metric and take it off the list
+5. Sort the remaining line items into priority order based on the PG-bidder-provided "relative priority", with a random secondary sort.
+6. Take the first 3 PG line items for each PG Bidder and send them the relevant bid adapter, incrementing the "sentToBidder" metric for each, and the "sentToBidderAsTopMatch" metric for one of them.
+7. Wait for the auction delay for the results. Increment "receivedFromBidder" and "receivedFromBidderInvalidated" metrics as appropriate.
+8. Take the highest priority bid from each PG Bidder and prepare ad server targeting. Increment the "sentToClient" metric.
+9. If there's more than one bid from a PG Bidder, randomly choose one to be the overall winner and increment the "sentToClientAsTopMatch" metric. Only this line item is considered to have spent a token and is put into "cool-down": PBS calculates how many milliseconds it needs to wait before offering this line item to the ad server again.
+
+{: .alert.alert-info :}
+Random numbers are used at a couple of points in the PG algorithm. This is to avoid choosing the same aggressive-but-blocked line item every time.
+
+## Annotated Plan Example
+
+Here's a complete example of a Plan with all line item and delivery schedule fields.
+
+```
+[				// each line item has a plan entry
+  {
+    "lineItemId": "2291",	// this is specific to your internal systems
+    "dealId": "710216",		// also specific to your internal systems
+    "accountId": "1001",	// the Host Company's account ID for the publisher
+    "price": {
+      "cpm": 7.29,
+      "currency": "EUR"
+    },
+    "relativePriority": 2,	// relative stacking specific to your pacing algorithm
+    "sizes": [{			// creative sizes
+        "w": 468,
+        "h": 60
+      },
+      {
+        "w": 728,
+        "h": 90
+      }
+    ],
+    "frequencyCaps": [{		// Host Company may support multiple cap levels
+        "fcapId": "LI-2291",	// ID specific to your system
+        "count": 2,		// show no more than 2 times per 1 day
+        "periods": 1,
+        "periodType": "day"
+      }
+    ],
+    "targeting": {		// Line Item targeting
+      "$and": [{
+          "adunit.size": {
+            "$intersects": [{
+                "h": 60,
+                "w": 468
+              },
+              {
+                "h": 90,
+                "w": 728
+              }
+            ]
+          }
+        },{
+          "adunit.mediatype": {
+            "$intersects": [
+              "banner"
+            ]
+          }
+        },{
+          "device.ext.deviceatlas.browser": {
+            "$in": [
+              "Chrome",
+              "Firefox"
+            ]
+          }
+        },{
+          "device.geo.ext.netacuity.country": {
+            "$in": [
+              "us",
+              "jp"
+            ]
+          }
+        },{
+          "adunit.adslot": {
+            "$in": [
+              "/1111/QA_Tests"
+            ]
+          }
+        }
+      ]
+    },
+    "startTimeStamp": "2020-08-28T07:22:14.000Z",	// line start time in UTC
+    "endTimeStamp": "2020-08-30T17:22:14.000Z",		// line end time in UTC
+    "updatedTimeStamp": "2020-08-28T06:22:15.000Z",
+    "deliverySchedules": [				// now starts the plans
+      {
+        "planId": "2656177",				// ID is specific to your system
+        "startTimeStamp": "2020-08-28T11:40:00.000Z",	// UTC 11:40 to 11:45
+        "endTimeStamp": "2020-08-28T11:45:00.000Z",
+        "updatedTimeStamp": "2020-08-28T11:36:30.000Z",
+        "tokens": [
+          {
+            "class": 1,					// always 1 for now
+            "total": 8					// number of tokens
+          }
+        ]
+      },
+      {
+        "planId": "2656178",
+        "startTimeStamp": "2020-08-28T11:45:00.000Z",	// UTC 11:45 to 11:50
+        "endTimeStamp": "2020-08-28T11:50:00.000Z",
+        "updatedTimeStamp": "2020-08-28T11:38:19.000Z",
+        "tokens": [
+          {
+            "class": 1,
+            "total": 10
+          }
+        ]
+      },{
+	... more plans ...
+      }
+    ],
+    "source": "pgBidderCode",
+    "status": "active"
+  },
+  {
+     ... next line item ...
+  }
+]
+```
+
+## Related Topics
+
+- [PG Home Page](/prebid-server/features/pg/pbs-pg-idx.html)
+- [Becoming a PG Bidder](/prebid-server/features/pg/pbs-pg-bidder.html)
+- [PG Targeting](/prebid-server/features/pg/pbs-pg-targeting.html)
+- [PG Glossary](/prebid-server/features/pg/pbs-pg-glossary.html)
diff --git a/prebid-server/features/pg/pbs-pg-targeting.md b/prebid-server/features/pg/pbs-pg-targeting.md
new file mode 100644
index 0000000000..dd8157733a
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-targeting.md
@@ -0,0 +1,177 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Programmatic Guaranteed Targeting Syntax
+---
+
+# Programmatic Guaranteed Targeting Syntax
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## Overview
+
+Targeting is the ability for Prebid Server (PBS) to match PG line items with
+incoming OpenRTB auction requests.
+
+Here's a simple example target that says this line item will match any request for a 300x250 banner:
+
+```
+{
+  "$and": [
+    {
+      "adunit.size": {"$intersects": [{"w": 300,"h": 250}]}
+    },
+    {
+      "adunit.mediatype": {"$intersects": ["banner"]}
+    }
+  ]
+}
+```
+
+In general, the syntax is:
+```
+{
+  "$and/$or": [
+    { "ATTRIBUTE": { "OPERATOR": CONDITION } },
+    "$and/$or": [ ... ],
+    "$not": { "ATTRIBUTE": { "OPERATOR": CONDITION } }
+  ]
+}
+```
+Here are the supported OPERATORs:
+
+{: .table .table-bordered .table-striped }
+| Operator | Description | Attribute Datatype | Condition Datatype | Example |
+| --- | --- | --- | --- |
+| $matches | True if the scalar ATTRIBUTE is the same as the CONDITION, or matches with an asterisk wildcard. | string | string | "$matches": "{::nomarkdown}*sports*{:/}" |
+| $in | True if the scalar ATTRIBUTE is on the CONDITION's array. | string | array of strings | "$in": ["a","b"] |
+| $intersects | True if at least one value from the ATTRIBUTE's array is on the CONDITION's array | array of strings | array of strings | "$intersects": ["hockey","soccer"] |
+| $within | True if user's lat/long are available and within the circle defined by the CONDITION. | from geolookup service | object with attributes: lat, lon, and radiusMiles | "$within": {"lat": 123.456,"lon": 789.123,"radiusMiles": 50} |
+
+## Targeting Attributes
+
+The full list of attributes supported by Prebid Server may differ by PG Host Company because they might use different geographic and device information services. But here's an example list:
+
+{: .table .table-bordered .table-striped }
+| Attribute | Description | Encoding | PBS Source | OpenRTB path | Operators |
+| --- | --- | --- | --- | --- | --- |
+| adunit.size | Ad Sizes | [{w: 300, h: 250},...] | OpenRTB | imp[].banner.format[] | intersects |
+| adunit.mediatype | Mediatype | string | OpenRTB | mediatype="banner" if imp.banner exists. mediatype="video-instream" if imp.video exists and placement is 1. mediatype="video-outstream" if imp.video exists and placement is <> 1. mediatype="native" if imp.native exists | intersects |
+| adunit.adslot | The ad server slot name | string | OpenRTB | imp[].ext.context.data.pbadslot | in, matches |
+| site.domain | Site domain | string | OpenRTB | site.domain | in, matches |
+| site.referrer | Referring URL | string | OpenRTB | site.page | in, matches |
+| app.bundle | Mobile application bundle | string | OpenRTB | app.bundle | in, matches |
+| pos | Page position | 0=unknown, 1=ATF, 3=BTF | OpenRTB | imp.banner.pos | in |
+| geo.distance | User's lat/lon is within a defined circle | none | Geo vendor | device.geo.lat, device.geo.lon | within |
+| device.geo.ext.VENDOR.country | Country | string | Geo vendor | device.geo.ext.VENDOR.country | in|
+| device.geo.ext.VENDOR.region | Region | string | Geo vendor | device.geo.ext.VENDOR.region | in|
+| device.geo.ext.VENDOR.metro | Metro (DMA) | string | Geo vendor | device.geo.ext.VENDOR.metro | in|
+| device.geo.ext.VENDOR.city | City | string | Geo vendor | device.geo.ext.VENDOR.city | in|
+| device.geo.ext.VENDOR.zip | Postal Code | string | Geo vendor | device.geo.ext.VENDOR.zip | in|
+| device.ext.VENDOR.connspeed | Connection Speed | string | Device vendor | device.ext.VENDOR.connspeed | in|
+| device.ext.VENDOR.type | Device Type | string | Device vendor | device.ext.VENDOR.type | in|
+| device.ext.VENDOR.make | Device Make | string | Device vendor | device.ext.VENDOR.make | in|
+| device.ext.VENDOR.model | Device Model | string | Device vendor | device.ext.VENDOR.model | in|
+| device.ext.VENDOR.os | Operating System | string | Device vendor | device.ext.VENDOR.os | in|
+| device.ext.VENDOR.browser | Browser | string | Device vendor | device.ext.VENDOR.browser | in|
+| device.ext.VENDOR.browserver | Browser Version | string | Device vendor | device.ext.VENDOR.browserver | in|
+| device.ext.VENDOR.language | Device Language | string | Device vendor | device.ext.VENDOR.language | in|
+| device.ext.VENDOR.osver | Operating System Version | string | Device vendor | device.ext.VENDOR.osver | in|
+| device.ext.VENDOR.carrier | Internet Carrier | string | Device vendor | device.ext.VENDOR.carrier | in|
+| user.ext.time.userdow | User Day of Week | 1=sun, 7=sat | Geo vendor + clock | user.ext.time.userdow | in|
+| user.ext.time.userhour | User Hour | 0-23 |Geo vendor + clock | user.ext.time.userhour | in|
+| ufpd.ATTR | User First Party Data | string | OpenRTB | user.ATTR or user.ext.data.ATTR | in, matches, intersects |
+| sfpd.ATTR | Site First Party Data | string | OpenRTB | imp[].ext.context.data.ATTR=VAL OR site.ext.data.ATTR=VAL OR app.ext.data.ATTR=VAL | in, matches, intersects |
+| segment.SOURCE | User Segment Data | string | OpenRTB | user.data[].id=SOURCE AND VALUE in user.data[].segment[].id | intersects |
+| bidp.BIDDER.ATTR | Bid Parameter Data | string | OpenRTB | imp[].ext.BIDDER.ATTR | in, matches, intersects|
+
+## Targeting Syntax
+
+Here's an example of a ridiculously specific target that uses most of the
+attributes and specific geographic and device info services:
+
+```
+{
+  "$and": [
+    {
+      "adunit.size": {"$intersects": [{"w": 300,"h": 250},{"w": 300,"h": 600}]}
+    },
+    {
+      "adunit.mediatype": {"$intersects": ["banner"]}
+    },
+    {
+      "$or": [
+        {"site.ext.domain": {"$matches": "*.example.com"}},
+        {"site.ext.domain": {"$in": ["prebid.org"]}}
+      ]
+    },
+    {
+      "$or": [
+        {"site.referrer": {"$matches": "*sports*"}},
+        {"site.referrer": {"$matches": "*prebid*"}}
+      ]
+    },
+    {
+      "$or": [
+        {"adunit.adslot": {"$matches": "/home/top*"}},
+        {"adunit.adslot": {"$in": ["/home/bottom"]}}
+      ]
+    },
+    {
+      "pos": {"$in": [1,3]}
+    },
+    {
+      "device.geo.ext.netacuity.country": {"$in": ["us","de"]}
+    },
+    {
+      "device.geo.ext.netacuity.region": {"$in": ["de-bw","de-by"]}
+    },
+    {
+      "device.geo.ext.netacuity.metro": {"$in": ["111","222"]}
+    },
+    {
+      "device.geo.ext.netacuity.city": {"$in": ["444","555"]}
+    },
+    {
+      "geo.distance": {"$within": {"lat": 123.456,"lon": 789.123,"radiusMiles": 50}}
+    },
+    {
+      "device.ext.deviceatlas.type": {"$in": ["tablet","phone"]}
+    },
+    {
+      "$or": [
+        {"bidp.rubicon.siteId": {"$in": [123,321]}},
+        {"bidp.appnexus.placementName": {"$matches": "*99999*"}},
+      ]
+    },
+    {
+      "$or": [
+        {"segment.rp": {"$intersects": [123,234,345]}},
+        {"segment.bluekai": {"$intersects": [123,234,345]}}
+      ]
+    },
+    {
+      "sfpd.sport": {"$intersects": ["hockey","soccer"]}
+    },
+    {
+      "user.ext.time.userdow": {"$in": [5,6]}
+    },
+    {
+      "user.ext.time.userhour": {"$in": [10,11,12,13,14]}
+    },
+    {
+      "$not": {
+        "ufpd.registered": {"$matches": ["false"]}
+      }
+    }
+  ]
+}
+```
+
+
+## Related Topics
+
+- [PG Home Page](/prebid-server/features/pg/pbs-pg-idx.html)
+- [PG Plans](/prebid-server/features/pg/pbs-pg-plan.html)
diff --git a/prebid-server/use-cases/pbs-amp.md b/prebid-server/use-cases/pbs-amp.md
index ecd191ed02..d5ec56c52e 100644
--- a/prebid-server/use-cases/pbs-amp.md
+++ b/prebid-server/use-cases/pbs-amp.md
@@ -47,7 +47,7 @@ There are two basic ways of invoking AMP RTC:
     data-slot="/11111/amp_test"
     data-multi-size-validation="false"
     rtc-config='{"vendors": {"prebidrubicon": {"REQUEST_ID": "14062-amp-AMP_Test-300x250"}, "ACCOUNT_ID": "1001"}}'
-    json='{ "targeting": {"site":{"keywords":"article, las vegas","cat":{"blah":"1"},"other-attribute":"other-value","ext":{"data":{"entry_group":["front-page","featured-stories"],"page_type":"AMP"}}},"user":{"gender":"m"},"bidders":["bidderA","bidderB"],"keywords":"las vegas hospitality employees","foo":{"bar":"baz"}}' >
+    json='{ "targeting": {"attr1": "val1", "attr2": "val2"}}' >
   </amp-ad>
 ```
 
@@ -61,13 +61,10 @@ There are two basic ways of invoking AMP RTC:
     type="doubleclick"
     data-slot="/000/amp_test"
     data-multi-size-validation="false"
-    rtc-config='{"urls": ["https://prebid-server-qa.example.com/openrtb2/amp?tag_id=11111&w=300&h=50&slot=%2F000%2Famp_test&targeting=%7B%22site%22%3A%20%7B%22key1%22%3A%20%22val1%22%7D%2C%20%22user%22%3A%20%7B%22key2%22%3A%20%22val2%22%7D%7D%7D&purl=encoded_page_url&account=333&gdpr_consent=encoded_cmp_consent_string"]
+    rtc-config='{"urls": ["https://prebid-server-qa.example.com/openrtb2/amp?tag_id=11111&w=300&h=50&slot=%2F000%2Famp_test&purl=encoded_page_url&account=333&gdpr_consent=encoded_cmp_consent_string"]
   </amp-ad>
 ```
 
-{: .alert.alert-info :}
-First party data may be passed in on the "targeting" field. See the [`/openrtb2/amp` endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) documentation for more details.
-
 ### Prebid Server Receives the AMP Request
 
 Prebid Server's first job on the [/openrtb2/amp endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) is to create an OpenRTB block to pass to the adapters.
@@ -76,15 +73,8 @@ Prebid Server's first job on the [/openrtb2/amp endpoint](/prebid-server/endpoin
 
 The `tag_id` in the AMP URL is used to look up the bulk of the request. If the lookup fails, the request can't proceed. If it's successful, the
 next step is to parse the AMP query string parameters and place them
-in the appropriate OpenRTB locations:
-
-- w added into the openrtb packet at imp.banner.format[0].w
-- h added into the openrtb packet at imp.banner.format[0].h
-- ms (multiple-sizes) - takes values like "970x90, 728x90". Parse sizes and add to imp.banner.format array
-- ow, oh - override width, override height
-- curl added as site.page
-- slot added as imp.tagid
-- timeout added as tmax
+in the appropriate OpenRTB locations. See the [AMP endpoint documentation](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html)
+for details.
 
 So for the /openrtb2/amp URL above, the resulting OpenRTB might be:
 ```
@@ -116,17 +106,7 @@ So for the /openrtb2/amp URL above, the resulting OpenRTB might be:
             "id": "0000"
         },
         "ext": {
-            "amp": 1,
-            "data": {
-                "key1": "val1"
-            }
-        }
-    },
-    "user": {
-        "ext": {
-            "data": {
-                "key2": "val2"
-            }
+            "amp": 1
         }
     },
     "device": {
@@ -169,7 +149,7 @@ Only a few dynamic parameters on the query string are integrated into the result
 #### First Party Data Support
 
 Ad Server targeting data passed in through the [`/openrtb2/amp`](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) endpoint is merged
-into the OpenRTB JSON in imp[].ext.data for each bidder if permissions allow.
+into the OpenRTB JSON in imp[].ext.data.
 
 #### Auction and Response
 
@@ -180,7 +160,6 @@ From here, the header bidding auction is mostly the same as it is for Prebid.js:
 1. Collect responses
 1. Prepare the response
 
-
 ### AMP Gets the Response
 
 AMP RTC endpoints can only respond with targeting, not OpenRTB. The
@@ -216,4 +195,5 @@ into an iframe for display.
 
 ## Further Reading
 
-- [AMP Support](/formats/amp.html)
+- [Prebid AMP Support](/formats/amp.html)
+- [PBS AMP endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html)
diff --git a/prebid-video/video-getting-started.md b/prebid-video/video-getting-started.md
index 491b156c3c..82bc941d97 100644
--- a/prebid-video/video-getting-started.md
+++ b/prebid-video/video-getting-started.md
@@ -71,7 +71,11 @@ Setting up Prebid ad units is almost the same whether you’re working with inst
         mediaTypes: {
             video: {
                 context: 'instream', //or 'outstream'
-                playerSize: [640, 480]
+                playerSize: [640, 480],
+                mimes: ['video/mp4'],    // required for Prebid Server
+                protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+                playbackmethod: [2],
+                skip: 1
             }
 ```
 
@@ -80,14 +84,6 @@ The mediaTypes.video.playerSize field is where you define the player size that w
 <div class="alert alert-info">
   <strong>Prebid Server</strong>
   <p>If you’re using Prebid Server, you must also include the mediaTypes.video.mimes field, as this is required by OpenRTB.</p>
-
-  <pre>
-        mediaTypes: {
-            video: {
-                context: 'instream', // or 'outstream'
-                playerSize: [640, 480],
-                mimes: ['video/mp4']
-  </pre>
 </div>
 
 In your ad unit you also need to define your list of bidders. For example, including AppNexus as a bidder would look something like this:
diff --git a/prebid/native-implementation.md b/prebid/native-implementation.md
index 704fc5f89a..9e4c8985ac 100644
--- a/prebid/native-implementation.md
+++ b/prebid/native-implementation.md
@@ -77,7 +77,7 @@ The Prebid.js AdUnit needs to defines a native mediatype object to tell bidders
 | Attribute | Scope | Description | Example | Type |
 | --- | --- | --- | --- | --- |
 | sendTargetingKeys | optional | Defines whether or not to send the hb_native_ASSET targeting keys to the ad server. Defaults to `true` for now, though we recommend setting this to `false` and utilizing one of the ways to define a native template. | `false` | boolean |
-| adTemplate | optional | Used in the ‘AdUnit-Defined Creative Scenario’, this value controls the Native template right in the page. | See [example](#5-implementing-adunit-defined-creative) below. | escaped ES5 string |
+| adTemplate | optional | Used in the ‘AdUnit-Defined Creative Scenario’, this value controls the Native template right in the page. | See [example](#42-implementing-adunit-defined-template) below. | escaped ES5 string |
 | rendererUrl | optional | Used in the ‘Custom Renderer Scenario’, this points to javascript code that will produce the Native template. | 'https://host/path.js' | string |
 | type | optional | A “type” is like a macro that defines a group of assets. The only value currently supported is ‘image’, which implies the following assets: image, title, sponsoredBy, clickUrl, body, icon, and cta. The first 4 are required attributes. | `image` | string |
 | ASSETCODE. required | optional | Defines whether native bids must include this asset. Defaults to `false`. | `true` | boolean |
@@ -136,9 +136,9 @@ In the native template, simply access the custom value with the normal Prebid ##
 
 ## 4. Implementing the Native Template
 
-- If you want to manage your creative within the ad server (e.g. Google Ad Manager), follow the instructions for [AdServer-Defined Creative](#4-implementing-adserver-defined-creative).
-- If you’d prefer to manage your creative within the Prebid.js AdUnit, follow the instructions for [AdUnit-Defined Creative](#5-implementing-adunit-defined-creative)
-- If you’d prefer to manage your creative from a separate piece of JavaScript, follow the instructions for the [Custom Renderer](#6-implementing-the-custom-renderer-scenario).
+- If you want to manage your creative within the ad server (e.g. Google Ad Manager), follow the instructions for [AdServer-Defined Creative](#41-implementing-adserver-defined-template).
+- If you’d prefer to manage your creative within the Prebid.js AdUnit, follow the instructions for [AdUnit-Defined Creative](#42-implementing-adunit-defined-template)
+- If you’d prefer to manage your creative from a separate piece of JavaScript, follow the instructions for the [Custom Renderer](#43-implementing-the-custom-renderer-scenario).
 
 ### 4.1. Implementing AdServer-Defined Template
 
@@ -356,7 +356,7 @@ In this scenario, the body of the native creative is managed from an external Ja
 When the Native AdUnit is defined in the page:
 
 - Declare`sendTargetingKeys: false` in the Native Object. This will prevent Prebid.js from sending all the native-related ad server targeting variables.
-- Define the `rendererUrl` as a URL that defines a `window.renderAd` function in the creative iframe. Any CSS definitions need to be defined in the body (e.g. <style> tags) or in the AdServer creative.
+- Define the `rendererUrl` as a URL that defines a `window.renderAd` function in the creative iframe. Any CSS definitions need to be defined in the body (e.g. `<style>` tags) or in the AdServer creative.
 
 Example AdUnit setup:
 ```
diff --git a/prebid/prebidjs.md b/prebid/prebidjs.md
index 224260da91..8dd597b47f 100644
--- a/prebid/prebidjs.md
+++ b/prebid/prebidjs.md
@@ -9,7 +9,7 @@ sidebarType: 1
 
 # What is Prebid.js?
 
-Prebid.js is a feature-rich header bidding platform for the web, including more than 200 demand sources and 15 analytics adapters. It supports currency conversion, GDPR, common ID systems, and multiple ad servers.
+Prebid.js is a feature-rich header bidding platform for the web, including more than 300 demand sources and 50 analytics adapters. It supports currency conversion, GDPR, common ID systems, and multiple ad servers.
 
 ## How Does Prebid.js Work?
 
@@ -44,9 +44,9 @@ We want Prebid.js Core to be fast, fair, and open because it represents the head
 
 The Prebid.js Adapters plug into Prebid.js Core and are meant to be interchangeable depending on who the publisher wants to work with. There are two types of adapters: bidder and analytics.
 
-Bidder Adapters are supposed to represent the SSPs & Exchanges you want to work with. There are currently over 200 bidder adapters. This set of working header bidding integrations is part of what makes Prebid.js so special. Each company maintains their own Prebid.js adapter to provide the freshest code for publishers, rather than a proprietary wrapper solution trying to reverse engineer another company's adapter. It's a win-win for everyone.
+Bidder Adapters are supposed to represent the SSPs & Exchanges you want to work with. There are currently over 300 bidder adapters. This set of working header bidding integrations is part of what makes Prebid.js so special. Each company maintains their own Prebid.js adapter to provide the freshest code for publishers, rather than a proprietary wrapper solution trying to reverse engineer another company's adapter. It's a win-win for everyone.
 
-Analytics adapters offer the ability to learn more about latency, revenues, bid rates, etc. Please see our [analytics page]({{site.github.url}}/dev-docs/integrate-with-the-prebid-analytics-api.html) for more information.
+Analytics adapters offer the ability to learn more about latency, revenues, bid rates, etc. Please see our [analytics page](/dev-docs/integrate-with-the-prebid-analytics-api.html) for more information.
 
 ## Prebid.js Modules
 
@@ -54,17 +54,17 @@ Prebid.js Modules also plug into the Prebid.js Core. They add functionality not
 in the Core that not every publisher needs. Example modules:
 
 + GDPR support (the [consentManagement]({{site.baseurl}}/dev-docs/modules/consentManagement.html) module)
-+ currency conversion (the [currency]({{site.baseurl}}/dev-docs/modules/currency.html) module)
++ Currency conversion (the [currency]({{site.baseurl}}/dev-docs/modules/currency.html) module)
 + Server-to-server testing (the [s2sTest]({{site.baseurl}}/dev-docs/modules/s2sTesting.html) module)
-+ ... others
++ ... [many others](/dev-docs/modules/index.html)
 
 ## Cookies and Local Storage
 
-On behalf of publishers or third-parties, Prebid.js may set cookies or local storage in your browser. These are the first party cookies it can set on behalf of publishers, meaning that consent is not checked:
+On behalf of publishers or third-parties, Prebid.js may set cookies or local storage in your browser. These are the first party cookies it can set on behalf of publishers:
 - prebid.cookieTest - used to verify whether other cookies should be set.
 - _pbjs_userid_consent_data - used to make consent data conveniently available through various modules.
 
-All other cookies and local storage (including those set by Prebid.org-owned modules like [SharedId](/dev-docs/modules/userId.html#shared-id-user-id-submodule)) are subject to privacy regulations such as GDPR.
+All other cookies and local storage (including those set by Prebid.org-owned modules like [SharedId](/identity/sharedid.html) are subject to privacy regulations such as GDPR.
 
 ## Further Reading
 
diff --git a/prebid/prebidjsReleases.md b/prebid/prebidjsReleases.md
index 23b022efc7..7aaa82aaa8 100644
--- a/prebid/prebidjsReleases.md
+++ b/prebid/prebidjsReleases.md
@@ -16,6 +16,16 @@ The table below is a summary of feature changes and important bug fixes in core
 {: .table .table-bordered .table-striped }
 | Release | Feature |
 | --- | --- |
+| 5.9 | Support numeric ad targeting keys |
+| 5.8 | [GPT Pre-Auction module](/dev-docs/modules/gpt-pre-auction.html) supports mcmEnabled flag |
+| 5.3 | add AD_RENDER_SUCCEEDED event |
+| 5.0 | See [Prebid.js 5.0 blog](https://prebid.org/blog/prebid-5-0-release/) |
+| 4.43 | Support [allowSendAllBidsTargetingKeys](/dev-docs/publisher-api-reference/setConfig.html#setConfig-targetingControls) option for control over which keys are sent to the ad server |
+| 4.41 | Support [suppressStaleRender](/dev-docs/publisher-api-reference/setConfig.html#auction-options) option |
+| 4.40 | First Party Data [enrichment](/dev-docs/modules/enrichmentFpdModule.html) and [validation](/dev-docs/modules/validationFpdModule.html) modules are introduced |
+| 4.39 | Prebid Core: removed size check on native icons and image assets |
+| 4.38 | PBS Bid Adapter allows stored impression configuration |
+| 4.37 | PBS bid adapter adds support for non-purpose1 consent domains |
 | 4.36 | Introduced pbjs.installedModules array |
 | 4.35 | Introduced pbjs.pbjs.getHighestUnusedBidResponseForAdUnitCode function |
 | 4.34 | Bug fix: canBidderRegisterSync ignoring iframe sync disabled by default |
diff --git a/troubleshooting/troubleshooting-guide.md b/troubleshooting/troubleshooting-guide.md
index 8254dd21a7..7dd94f51f8 100644
--- a/troubleshooting/troubleshooting-guide.md
+++ b/troubleshooting/troubleshooting-guide.md
@@ -106,7 +106,7 @@ To see all of the winning bids, open your browser console and type `pbjs.getAllW
 Keep in mind that any bid responses that come back after the [timeout you configured](/dev-docs/getting-started.html#set-the-ad-server-timeout) during setup will not be sent to the ad server.
 
 {: .pb-alert .pb-alert-tip :}
-You can also print this data to the console in [table format](/dev-docs/troubleshooting-tips.html#see-all-bids-in-the-console) for easier reading.
+You can also print this data to the console in [table format](#see-all-bids-in-the-console) for easier reading.
 <hr>
 
 ## Modify bid responses for testing
@@ -217,12 +217,12 @@ Open your browser console and type `pbjs.getBidResponses();` to see a list of th
 To see all of the winning bids, open your browser console and type [`pbjs.getAllWinningBids();`](/dev-docs/publisher-api-reference/getAllWinningBids.html).
 
 {: .alert.alert-danger :}
-Keep in mind that any bid responses that come back after [the timeout you configured during setup]({{site.github.url}}/dev-docs/getting-started.html#set-the-ad-server-timeout) will not be sent to the ad server.
+Keep in mind that any bid responses that come back after [the timeout you configured during setup](/dev-docs/getting-started.html#set-the-ad-server-timeout) will not be sent to the ad server.
 
 {: .alert.alert-success :}
-You can also [print this data to the console in table format]({{site.baseurl}}/dev-docs/troubleshooting-tips.html#see-all-bids-in-the-console) for easier reading.
+You can also [print this data to the console in table format](#see-all-bids-in-the-console) for easier reading.
 
-![pbjs.getBidResponses() in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/bids.png "pbjs.getBidResponses()"){: .pb-lg-img :}
+![pbjs.getBidResponses() in browser console](/assets/images/overview/prebid-troubleshooting-guide/bids.png "pbjs.getBidResponses()"){: .pb-lg-img :}
 
 <hr>
 
@@ -232,13 +232,13 @@ To print information about all of the bids that come in to the Console on any pa
 
 Open the Chrome Dev Tools.  In the **Sources** tab, next to **Content Scripts**, click the **>>** button and you can add **Snippets**:
 
-![View Snippets in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
+![View Snippets in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
 
 <br />
 
 Right-click to add a **New** snippet:
 
-![Add New Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
+![Add New Snippet in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
 
 <br />
 
@@ -296,13 +296,13 @@ Paste in the following code using Control-V (or Command-V on Mac), and give the
 
 Right-click the snippet and choose **Run**:
 
-![Run a Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
+![Run a Snippet in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
 
 <br />
 
 Check the output in Console to see the bids:
 
-![See Snippet Output in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
+![See Snippet Output in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
 
 <hr>
 
@@ -312,13 +312,13 @@ To print information about all of the winning bids that come in to the Console o
 
 Open the Chrome Dev Tools.  In the **Sources** tab, next to **Content Scripts**, click the **>>** button and you can add **Snippets**:
 
-![View Snippets in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
+![View Snippets in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
 
 <br />
 
 Right-click to add a **New** snippet:
 
-![Add New Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
+![Add New Snippet in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
 
 <br />
 
@@ -351,13 +351,13 @@ if (output.length) {
 
 Right-click the snippet and choose **Run**:
 
-![Run a Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
+![Run a Snippet in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
 
 <br />
 
 Check the output in Console to see the bids (note that this screenshot shows the output from "see all bids" but they're very similar):
 
-![See Snippet Output in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
+![See Snippet Output in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
 
 <hr>
 
@@ -399,7 +399,7 @@ To make sure your ad server is set up correctly, answer the following questions:
 
 + **Is there other remnant inventory in the ad server with a higher CPM that is winning?** To test for this, you may want to use a test creative set up within a bidder partner that has a high CPM or create artificial demand with a [bidCPMadjustment](/dev-docs/publisher-api-reference/bidderSettings.html).
 
-+ **Have you set up all of the line items in the ad server to match the [setPriceGranularity setting]({{site.github.url}}/dev-docs/examples/custom-price-buckets.html) within Prebid.js?**  All of the line items that correspond to your price granularity settings must be set up in your ad server.  When there are gaps in the price granularity of your line item setup, bids will be reduced according to the size of the gap.  For example, with [dense granularity](/dev-docs/publisher-api-reference/setConfig.html#denseGranularityBucket), a $3.32 bid will be sent to the ad server as $3.30.
++ **Have you set up all of the line items in the ad server to match the [setPriceGranularity setting](/dev-docs/examples/custom-price-buckets.html) within Prebid.js?**  All of the line items that correspond to your price granularity settings must be set up in your ad server.  When there are gaps in the price granularity of your line item setup, bids will be reduced according to the size of the gap.  For example, with [dense granularity](/dev-docs/publisher-api-reference/setConfig.html#denseGranularityBucket), a $3.32 bid will be sent to the ad server as $3.30.
 
 <hr>
 
@@ -413,7 +413,7 @@ When a prebid line item wins the ad server's auction, a `renderAd` event will be
 
 When this event is logged, it shows that Prebid.js has requested to render the ad from the winning bidder partner, and that this partner's bid has won both the Prebid and ad server auctions.
 
-![renderAd event in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/render-ad.png "renderAd event in browser console"){: .pb-lg-img :}
+![renderAd event in browser console](/assets/images/overview/prebid-troubleshooting-guide/render-ad.png "renderAd event in browser console"){: .pb-lg-img :}
 
 <hr>
 
@@ -425,7 +425,7 @@ The following parameters in the `bidResponse` object are common across all bidde
 | Name     | Type    | Description                                                                                                                                                       | Example                                                                 |
 |----------+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------|
 | `bidder` | String  | Unique bidder code used by ad server's line items to identify the bidder                                                                                          | `"appnexus"`                                                            |
-| `adId`   | String  | Unique identifier of a bid creative. Used by the line item's creative as in [this example]({{site.baseurl}}/adops/send-all-bids-adops.html#step-3-add-a-creative) | `"123"`                                                                 |
+| `adId`   | String  | Unique identifier of a bid creative. Used by the line item's creative as in [this example](/adops/send-all-bids-adops.html#step-3-add-a-creative) | `"123"`                                                                 |
 | `pbLg`   | String  | Low granularity price bucket: $0.50 increment, capped at $5, floored to 2 decimal places (0.50, 1.00, 1.50, ..., 5.00)                                            | `"1.50"`                                                                |
 | `pbMg`   | String  | Medium granularity price bucket: 0.10 increment, capped at $20, floored to 2 decimal places (0.10, 0.20, ..., 19.90, 20.00)                                       | `"1.60"`                                                                |
 | `pbHg`   | String  | High granularity price bucket: 0.01 increment, capped at $20, floored to 2 decimal places (0.01, 0.02, ..., 19.99, 20.00)                                         | `"1.61"`                                                                |
